From f3fd82cd76642db52593018d24268e5bc8e7e6e8 Mon Sep 17 00:00:00 2001 From: RiRiSharp Date: Thu, 11 Sep 2025 17:14:07 +0200 Subject: [PATCH 1/7] Ignore unmatched :ignore attributes --- src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs | 13 +++++++++++++ src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs | 9 ++++++++- src/AngleSharp.Diffing/Core/SourceMap.cs | 2 +- .../AttributeStrategies/IgnoreAttributeComparer.cs | 7 ++++++- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs b/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs index 9769990..67fe5ef 100644 --- a/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs +++ b/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs @@ -116,4 +116,17 @@ public void Test006(string control, string test) diffs.ShouldBeEmpty(); } + + [Theory(DisplayName = "When a control element has 'class:ignore', elements with and without class should return empty diffs")] + [InlineData("
")] + [InlineData("
")] + [InlineData("
")] + [InlineData("
")] + public void Test007(string testHtml) + { + var controlHtml = "
"; + var diffs = DiffBuilder.Compare(controlHtml).WithTest(testHtml).Build(); + Assert.Empty(diffs); + } + } diff --git a/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs b/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs index 575ca96..3ce514f 100644 --- a/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs +++ b/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs @@ -1,4 +1,5 @@ using AngleSharp.Diffing.Core.Diffs; +using AngleSharp.Diffing.Strategies.AttributeStrategies; namespace AngleSharp.Diffing.Core; @@ -160,7 +161,13 @@ void MarkSelectedSourcesAsMatched(in AttributeComparison comparison) void UpdateUnmatchedTracking() { - Context.MissingAttributeSources.AddRange(controls.GetUnmatched()); + // Filter out unmatched :ignore attributes, they were meant to be ignored after all + // https://github.com/AngleSharp/AngleSharp.Diffing/issues/48 + var controlsUnmatched = controls + .GetUnmatched() + .Where(c => !IgnoreAttributeComparer.IsIgnoreAttribute(c.Attribute)); + + Context.MissingAttributeSources.AddRange(controlsUnmatched); Context.UnexpectedAttributeSources.AddRange(tests.GetUnmatched()); } } diff --git a/src/AngleSharp.Diffing/Core/SourceMap.cs b/src/AngleSharp.Diffing/Core/SourceMap.cs index 4f99c8d..4b30d12 100644 --- a/src/AngleSharp.Diffing/Core/SourceMap.cs +++ b/src/AngleSharp.Diffing/Core/SourceMap.cs @@ -70,7 +70,7 @@ public IEnumerable GetUnmatched() { foreach (var source in _sources.Values) { - if (!_matched.Contains(source.Attribute.Name)) + if (IsUnmatched(source.Attribute.Name)) yield return source; } } diff --git a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeComparer.cs b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeComparer.cs index c74f619..087ca08 100644 --- a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeComparer.cs +++ b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeComparer.cs @@ -15,8 +15,13 @@ public static CompareResult Compare(in AttributeComparison comparison, CompareRe if (currentDecision.IsSameOrSkip) return currentDecision; - return comparison.Control.Attribute.Name.EndsWith(DIFF_IGNORE_POSTFIX, StringComparison.OrdinalIgnoreCase) + return IsIgnoreAttribute(comparison.Control.Attribute) ? CompareResult.Same : currentDecision; } + + public static bool IsIgnoreAttribute(IAttr source) + { + return source.Name.EndsWith(DIFF_IGNORE_POSTFIX, StringComparison.OrdinalIgnoreCase); + } } From 80483799490ea1b89c969ce3949ece6c16455435 Mon Sep 17 00:00:00 2001 From: RiRiSharp Date: Fri, 12 Sep 2025 23:05:31 +0200 Subject: [PATCH 2/7] Add more tests --- .../DiffBuilderTest.cs | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs b/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs index 67fe5ef..845b987 100644 --- a/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs +++ b/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs @@ -117,14 +117,22 @@ public void Test006(string control, string test) diffs.ShouldBeEmpty(); } - [Theory(DisplayName = "When a control element has 'class:ignore', elements with and without class should return empty diffs")] - [InlineData("
")] - [InlineData("
")] - [InlineData("
")] - [InlineData("
")] - public void Test007(string testHtml) + [Theory(DisplayName = + "When a control element has ':ignore', elements with and without that attribute should return empty diffs")] + [InlineData("
", "
")] + [InlineData("
", "
")] + [InlineData("
", "
")] + [InlineData("
", "
")] + [InlineData("", "")] + [InlineData("", "")] + [InlineData("", "")] + [InlineData("", "")] + [InlineData("", "")] + [InlineData("", "")] + [InlineData("", "")] + [InlineData("", "")] + public void Test007(string controlHtml, string testHtml) { - var controlHtml = "
"; var diffs = DiffBuilder.Compare(controlHtml).WithTest(testHtml).Build(); Assert.Empty(diffs); } From 5f19c088bd745db5bd3e62eab69f5188603ca2dd Mon Sep 17 00:00:00 2001 From: RiRiSharp Date: Sat, 13 Sep 2025 14:09:05 +0200 Subject: [PATCH 3/7] Add test to cover situation where no ignore attribute was requested --- .../DiffBuilderTest.cs | 44 ++++++++++++------ .../TestData/IgnoreAttributeTestData.cs | 45 +++++++++++++++++++ 2 files changed, 76 insertions(+), 13 deletions(-) create mode 100644 src/AngleSharp.Diffing.Tests/TestData/IgnoreAttributeTestData.cs diff --git a/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs b/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs index 845b987..3ec92a3 100644 --- a/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs +++ b/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs @@ -1,3 +1,8 @@ +using AngleSharp.Diffing.Strategies; +using AngleSharp.Diffing.Strategies.AttributeStrategies; +using AngleSharp.Diffing.Strategies.TextNodeStrategies; +using AngleSharp.Diffing.TestData; + namespace AngleSharp.Diffing; @@ -119,22 +124,35 @@ public void Test006(string control, string test) [Theory(DisplayName = "When a control element has ':ignore', elements with and without that attribute should return empty diffs")] - [InlineData("
", "
")] - [InlineData("
", "
")] - [InlineData("
", "
")] - [InlineData("
", "
")] - [InlineData("", "")] - [InlineData("", "")] - [InlineData("", "")] - [InlineData("", "")] - [InlineData("", "")] - [InlineData("", "")] - [InlineData("", "")] - [InlineData("", "")] + [MemberData(nameof(IgnoreAttributeTestData.ControlAndHtmlData), MemberType = typeof(IgnoreAttributeTestData))] public void Test007(string controlHtml, string testHtml) { var diffs = DiffBuilder.Compare(controlHtml).WithTest(testHtml).Build(); Assert.Empty(diffs); } -} + [Theory(DisplayName = + "When a control element has ':ignore', but IgnoreAttributeComparer is not active, diffs should be found")] + [MemberData(nameof(IgnoreAttributeTestData.ControlHtmlAndDiffData), MemberType = typeof(IgnoreAttributeTestData))] + public void Test008(string controlHtml, string testHtml, DiffResult expectedDiffResult) + { + var diffs = DiffBuilder + .Compare(controlHtml) + .WithTest(testHtml) + .WithOptions(a => a // Most important thing to note here is we do not have a ignore attribute comparer + .AddSearchingNodeMatcher() + .AddAttributeNameMatcher() + .AddElementComparer(enforceTagClosing: false) + .AddMatcher(PostfixedAttributeMatcher.Match, StrategyType.Specialized) + .AddComparer(AttributeComparer.Compare, StrategyType.Generalized) + .AddClassAttributeComparer() + .AddBooleanAttributeComparer(BooleanAttributeComparision.Strict) + .AddStyleAttributeComparer()) + .Build() + .ToList(); + + Assert.Single(diffs); + Assert.Equal(DiffTarget.Attribute, diffs[0].Target); + Assert.Equal(expectedDiffResult, diffs[0].Result); + } +} \ No newline at end of file diff --git a/src/AngleSharp.Diffing.Tests/TestData/IgnoreAttributeTestData.cs b/src/AngleSharp.Diffing.Tests/TestData/IgnoreAttributeTestData.cs new file mode 100644 index 0000000..daded07 --- /dev/null +++ b/src/AngleSharp.Diffing.Tests/TestData/IgnoreAttributeTestData.cs @@ -0,0 +1,45 @@ +namespace AngleSharp.Diffing.TestData; + +internal static class IgnoreAttributeTestData +{ + public static TheoryData ControlAndHtmlData() + { + var theoryData = new TheoryData(); + foreach (var (controlHtml, expectedHtml, _) in TestCases) + { + theoryData.Add(controlHtml, expectedHtml); + } + + return theoryData; + } + + public static TheoryData ControlHtmlAndDiffData() + { + var theoryData = new TheoryData(); + foreach (var (controlHtml, expectedHtml, expectedDiffResult) in TestCases) + { + theoryData.Add(controlHtml, expectedHtml, expectedDiffResult); + } + + return theoryData; + } + + private static readonly IEnumerable<(string controlHtml, string expectedHtml, DiffResult expectedDiffResult)> + TestCases = + [ + ("
", "
", DiffResult.Different), + ("
", "
", DiffResult.Different), + ("
", "
", DiffResult.Different), + ("
", "
", DiffResult.Missing), + ("", "", DiffResult.Different), + ("", "", DiffResult.Different), + ("", "", DiffResult.Different), + ("", "", DiffResult.Missing), + ("", "", DiffResult.Different), + ("", "", DiffResult.Missing), + ("", "", DiffResult.Different), + ("", "", DiffResult.Missing), + ("", "", DiffResult.Different), + ("", "", DiffResult.Missing), + ]; +} \ No newline at end of file From e254b0cd10de2a317076aba996e9306b94a95e1c Mon Sep 17 00:00:00 2001 From: RiRiSharp Date: Sun, 14 Sep 2025 15:48:56 +0200 Subject: [PATCH 4/7] Add :ignore filter approach --- .../DiffBuilderTest.cs | 2 +- .../Core/HtmlDifferenceEngine.cs | 8 +---- ...iffingStrategyPipelineBuilderExtensions.cs | 1 + .../IgnoreAttributeMatcher.cs | 29 +++++++++++++++++++ 4 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeMatcher.cs diff --git a/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs b/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs index 3ec92a3..e9ad09d 100644 --- a/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs +++ b/src/AngleSharp.Diffing.Tests/DiffBuilderTest.cs @@ -141,7 +141,7 @@ public void Test008(string controlHtml, string testHtml, DiffResult expectedDiff .WithTest(testHtml) .WithOptions(a => a // Most important thing to note here is we do not have a ignore attribute comparer .AddSearchingNodeMatcher() - .AddAttributeNameMatcher() + .AddMatcher(AttributeNameMatcher.Match, StrategyType.Generalized) .AddElementComparer(enforceTagClosing: false) .AddMatcher(PostfixedAttributeMatcher.Match, StrategyType.Specialized) .AddComparer(AttributeComparer.Compare, StrategyType.Generalized) diff --git a/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs b/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs index 3ce514f..35734aa 100644 --- a/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs +++ b/src/AngleSharp.Diffing/Core/HtmlDifferenceEngine.cs @@ -161,13 +161,7 @@ void MarkSelectedSourcesAsMatched(in AttributeComparison comparison) void UpdateUnmatchedTracking() { - // Filter out unmatched :ignore attributes, they were meant to be ignored after all - // https://github.com/AngleSharp/AngleSharp.Diffing/issues/48 - var controlsUnmatched = controls - .GetUnmatched() - .Where(c => !IgnoreAttributeComparer.IsIgnoreAttribute(c.Attribute)); - - Context.MissingAttributeSources.AddRange(controlsUnmatched); + Context.MissingAttributeSources.AddRange(controls.GetUnmatched()); Context.UnexpectedAttributeSources.AddRange(tests.GetUnmatched()); } } diff --git a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/DiffingStrategyPipelineBuilderExtensions.cs b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/DiffingStrategyPipelineBuilderExtensions.cs index 17b8223..18f619b 100644 --- a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/DiffingStrategyPipelineBuilderExtensions.cs +++ b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/DiffingStrategyPipelineBuilderExtensions.cs @@ -23,6 +23,7 @@ public static IDiffingStrategyCollection IgnoreDiffAttributes(this IDiffingStrat public static IDiffingStrategyCollection AddAttributeNameMatcher(this IDiffingStrategyCollection builder) { builder.AddMatcher(AttributeNameMatcher.Match, StrategyType.Generalized); + builder.AddMatcher(IgnoreAttributeMatcher.Match, StrategyType.Generalized); return builder; } diff --git a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeMatcher.cs b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeMatcher.cs new file mode 100644 index 0000000..d079042 --- /dev/null +++ b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeMatcher.cs @@ -0,0 +1,29 @@ +namespace AngleSharp.Diffing.Strategies.AttributeStrategies; + +/// +/// Ignore Attribute matcher strategy. +/// +public static class IgnoreAttributeMatcher +{ + private const string DIFF_IGNORE_POSTFIX = ":ignore"; + + /// + /// Attribute name matcher strategy. + /// + public static IEnumerable Match(IDiffContext context, SourceMap controlSources, SourceMap testSources) + { + if (controlSources is null) + throw new ArgumentNullException(nameof(controlSources)); + if (testSources is null) + throw new ArgumentNullException(nameof(testSources)); + + foreach (var control in controlSources.GetUnmatched()) + { + // An unmatched :ignore attribute can just be matched with itself if it isn't + // matched with a "test" attribute of the same name already. + // this means an ignored attribute is ignored even if it does not appear in the test html. + if (control.Attribute.Name.EndsWith(DIFF_IGNORE_POSTFIX, StringComparison.OrdinalIgnoreCase)) + yield return new AttributeComparison(control, control); + } + } +} \ No newline at end of file From 25975588e119f3fcb2b53ebf74bc065a6ee9bd8c Mon Sep 17 00:00:00 2001 From: RiRiSharp Date: Sun, 14 Sep 2025 20:25:11 +0200 Subject: [PATCH 5/7] Fix Linux pipeline --- build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.sh b/build.sh index c62ce5c..1f8df2e 100755 --- a/build.sh +++ b/build.sh @@ -20,6 +20,8 @@ DRYRUN= SHOW_VERSION=false SCRIPT_ARGUMENTS=() +sudo apt install mono-devel # ubuntu-latest does not come with mono pre-installed anymore. + # Parse arguments. for i in "$@"; do case $1 in From 082c0d66b77590b236a017d6dc92def9427b7441 Mon Sep 17 00:00:00 2001 From: RiRiSharp Date: Sun, 14 Sep 2025 20:36:21 +0200 Subject: [PATCH 6/7] Create IgnoreAttributeStrategy and make IgnoreAttributeComparer obsolete --- .../IgnoreAttributeComparerTest.cs | 8 ++++---- ...iffingStrategyPipelineBuilderExtensions.cs | 4 ++-- .../IgnoreAttributeComparer.cs | 7 ++++--- ...eMatcher.cs => IgnoreAttributeStrategy.cs} | 20 ++++++++++++++++++- 4 files changed, 29 insertions(+), 10 deletions(-) rename src/AngleSharp.Diffing/Strategies/AttributeStrategies/{IgnoreAttributeMatcher.cs => IgnoreAttributeStrategy.cs} (65%) diff --git a/src/AngleSharp.Diffing.Tests/Strategies/AttributeStrategies/IgnoreAttributeComparerTest.cs b/src/AngleSharp.Diffing.Tests/Strategies/AttributeStrategies/IgnoreAttributeComparerTest.cs index a59efc3..34bb922 100644 --- a/src/AngleSharp.Diffing.Tests/Strategies/AttributeStrategies/IgnoreAttributeComparerTest.cs +++ b/src/AngleSharp.Diffing.Tests/Strategies/AttributeStrategies/IgnoreAttributeComparerTest.cs @@ -17,7 +17,7 @@ public void Test000(CompareResult currentResult) @"

", "foo" ); - IgnoreAttributeComparer + IgnoreAttributeStrategy .Compare(comparison, currentResult) .ShouldBe(currentResult); } @@ -30,8 +30,8 @@ public void Test003() @"

", "foo" ); - IgnoreAttributeComparer.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different); - IgnoreAttributeComparer.Compare(comparison, CompareResult.Same).ShouldBe(CompareResult.Same); + IgnoreAttributeStrategy.Compare(comparison, CompareResult.Different).ShouldBe(CompareResult.Different); + IgnoreAttributeStrategy.Compare(comparison, CompareResult.Same).ShouldBe(CompareResult.Same); } [Fact(DisplayName = "When a attribute does contain have the ':ignore' postfix, Same is returned")] @@ -42,6 +42,6 @@ public void Test004() @"

", "foo" ); - IgnoreAttributeComparer.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same); + IgnoreAttributeStrategy.Compare(comparison, CompareResult.Unknown).ShouldBe(CompareResult.Same); } } diff --git a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/DiffingStrategyPipelineBuilderExtensions.cs b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/DiffingStrategyPipelineBuilderExtensions.cs index 18f619b..ca9f18d 100644 --- a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/DiffingStrategyPipelineBuilderExtensions.cs +++ b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/DiffingStrategyPipelineBuilderExtensions.cs @@ -23,7 +23,7 @@ public static IDiffingStrategyCollection IgnoreDiffAttributes(this IDiffingStrat public static IDiffingStrategyCollection AddAttributeNameMatcher(this IDiffingStrategyCollection builder) { builder.AddMatcher(AttributeNameMatcher.Match, StrategyType.Generalized); - builder.AddMatcher(IgnoreAttributeMatcher.Match, StrategyType.Generalized); + builder.AddMatcher(IgnoreAttributeStrategy.Match, StrategyType.Generalized); return builder; } @@ -34,7 +34,7 @@ public static IDiffingStrategyCollection AddAttributeComparer(this IDiffingStrat { builder.AddMatcher(PostfixedAttributeMatcher.Match, StrategyType.Specialized); builder.AddComparer(AttributeComparer.Compare, StrategyType.Generalized); - builder.AddComparer(IgnoreAttributeComparer.Compare, StrategyType.Specialized); + builder.AddComparer(IgnoreAttributeStrategy.Compare, StrategyType.Specialized); return builder; } diff --git a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeComparer.cs b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeComparer.cs index 087ca08..eb42457 100644 --- a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeComparer.cs +++ b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeComparer.cs @@ -3,6 +3,7 @@ /// /// Represents the ignore attribute comparer. /// +[Obsolete("Has been moved to IgnoreAttributeStrategy")] public static class IgnoreAttributeComparer { private const string DIFF_IGNORE_POSTFIX = ":ignore"; @@ -20,8 +21,8 @@ public static CompareResult Compare(in AttributeComparison comparison, CompareRe : currentDecision; } - public static bool IsIgnoreAttribute(IAttr source) + private static bool IsIgnoreAttribute(IAttr source) { - return source.Name.EndsWith(DIFF_IGNORE_POSTFIX, StringComparison.OrdinalIgnoreCase); + return source.Name.EndsWith(DIFF_IGNORE_POSTFIX, StringComparison.OrdinalIgnoreCase); } -} +} \ No newline at end of file diff --git a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeMatcher.cs b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeStrategy.cs similarity index 65% rename from src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeMatcher.cs rename to src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeStrategy.cs index d079042..84d24b6 100644 --- a/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeMatcher.cs +++ b/src/AngleSharp.Diffing/Strategies/AttributeStrategies/IgnoreAttributeStrategy.cs @@ -3,10 +3,23 @@ /// /// Ignore Attribute matcher strategy. /// -public static class IgnoreAttributeMatcher +public static class IgnoreAttributeStrategy { private const string DIFF_IGNORE_POSTFIX = ":ignore"; + /// + /// The ignore attribute comparer. + /// + public static CompareResult Compare(in AttributeComparison comparison, CompareResult currentDecision) + { + if (currentDecision.IsSameOrSkip) + return currentDecision; + + return IsIgnoreAttribute(comparison.Control.Attribute) + ? CompareResult.Same + : currentDecision; + } + /// /// Attribute name matcher strategy. /// @@ -26,4 +39,9 @@ public static IEnumerable Match(IDiffContext context, Sourc yield return new AttributeComparison(control, control); } } + + private static bool IsIgnoreAttribute(IAttr source) + { + return source.Name.EndsWith(DIFF_IGNORE_POSTFIX, StringComparison.OrdinalIgnoreCase); + } } \ No newline at end of file From afee48a97322591f5a6318dbc7aef77e7e93c36a Mon Sep 17 00:00:00 2001 From: RiRiSharp Date: Mon, 15 Sep 2025 10:31:53 +0200 Subject: [PATCH 7/7] Revert "Fix Linux pipeline" This reverts commit 25975588e119f3fcb2b53ebf74bc065a6ee9bd8c. --- build.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/build.sh b/build.sh index 1f8df2e..c62ce5c 100755 --- a/build.sh +++ b/build.sh @@ -20,8 +20,6 @@ DRYRUN= SHOW_VERSION=false SCRIPT_ARGUMENTS=() -sudo apt install mono-devel # ubuntu-latest does not come with mono pre-installed anymore. - # Parse arguments. for i in "$@"; do case $1 in