Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cleanups & refactorings #3975

Merged
merged 5 commits into from
Mar 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions new-cli/GitVersion.Calculation/CalculateCommand.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using GitVersion.Extensions;
using GitVersion.Git;
using GitVersion.Infrastructure;

namespace GitVersion.Commands;
Expand Down
1 change: 1 addition & 0 deletions new-cli/GitVersion.Cli/Program.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using GitVersion;
using GitVersion.Extensions;
using GitVersion.Generated;
using GitVersion.Git;
using GitVersion.Infrastructure;

var modules = new IGitVersionModule[]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace GitVersion;
namespace GitVersion.Git;

internal sealed partial class GitRepository : IGitRepository
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using GitVersion.Infrastructure;

namespace GitVersion;
namespace GitVersion.Git;

public class LibGit2SharpCoreModule : IGitVersionModule
{
Expand Down
1 change: 1 addition & 0 deletions new-cli/GitVersion.Core.Tester/GitVersionApp.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using GitVersion.Git;
using GitVersion.Infrastructure;

namespace GitVersion;
Expand Down
1 change: 1 addition & 0 deletions new-cli/GitVersion.Core.Tester/Program.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using GitVersion;
using GitVersion.Extensions;
using GitVersion.Git;
using GitVersion.Infrastructure;

var assemblies = new IGitVersionModule[]
Expand Down
32 changes: 21 additions & 11 deletions schemas/6.0/GitVersion.configuration.json
Original file line number Diff line number Diff line change
Expand Up @@ -126,11 +126,8 @@
"pre-release-weight": {
"$ref": "#/$defs/nullableOfInt32"
},
"prevent-increment-of-merged-branch-version": {
"$ref": "#/$defs/nullableOfBoolean2"
},
"prevent-increment-when-current-commit-tagged": {
"$ref": "#/$defs/nullableOfBoolean3"
"prevent-increment": {
"$ref": "#/$defs/preventIncrementConfiguration"
},
"regex": {
"$ref": "#/$defs/string2"
Expand Down Expand Up @@ -186,6 +183,7 @@
"description": "Specifies which version strategies (one or more) will be used to determine the next version. Following values are available: 'ConfiguredNextVersion', 'MergeMessage', 'TaggedCommit', 'TrackReleaseBranches', 'VersionInBranchName' and 'TrunkBased'.",
"enum": [
"None",
"Fallback",
"ConfiguredNextVersion",
"MergeMessage",
"TaggedCommit",
Expand Down Expand Up @@ -231,11 +229,8 @@
"pre-release-weight": {
"$ref": "#/$defs/nullableOfInt32"
},
"prevent-increment-of-merged-branch-version": {
"$ref": "#/$defs/nullableOfBoolean2"
},
"prevent-increment-when-current-commit-tagged": {
"$ref": "#/$defs/nullableOfBoolean3"
"prevent-increment": {
"$ref": "#/$defs/preventIncrementConfiguration"
},
"regex": {
"$ref": "#/$defs/string2"
Expand Down Expand Up @@ -319,8 +314,23 @@
"null"
]
},
"preventIncrementConfiguration": {
"description": "The prevent increment configuration section.",
"type": "object",
"properties": {
"of-merged-branch": {
"$ref": "#/$defs/nullableOfBoolean2"
},
"when-branch-merged": {
"$ref": "#/$defs/nullableOfBoolean2"
},
"when-current-commit-tagged": {
"$ref": "#/$defs/nullableOfBoolean3"
}
}
},
"nullableOfBoolean2": {
"description": "Prevent increment of merged branch version.",
"description": "Prevent increment when branch merged.",
"type": [
"boolean",
"null"
Expand Down
1 change: 0 additions & 1 deletion src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="System.Text.Json"/>
<PackageReference Include="Roslynator.Analyzers">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
1 change: 0 additions & 1 deletion src/GitVersion.App.Tests/ArgumentParserTests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using GitVersion.Configuration;
using GitVersion.Core.Tests.Helpers;
using GitVersion.Extensions;
using GitVersion.Helpers;
using GitVersion.Logging;
using GitVersion.VersionCalculation;
Expand Down
2 changes: 1 addition & 1 deletion src/GitVersion.App.Tests/Helpers/ProgramFixture.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace GitVersion.App.Tests;
public sealed class ProgramFixture
{
private readonly IEnvironment environment;
private List<Action<IServiceCollection>> Overrides { get; } = new();
private List<Action<IServiceCollection>> Overrides { get; } = [];
private readonly Lazy<string> logger;
private readonly Lazy<string?> output;

Expand Down
1 change: 1 addition & 0 deletions src/GitVersion.App.Tests/PullRequestInBuildAgentTest.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using GitVersion.Agents;
using GitVersion.Core.Tests.Helpers;
using GitVersion.Extensions;
using GitVersion.Git;
using GitVersion.Helpers;
using GitVersion.Output;
using LibGit2Sharp;
Expand Down
78 changes: 78 additions & 0 deletions src/GitVersion.App/ArgumentParserExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
using System.Text.RegularExpressions;
using GitVersion.Helpers;

namespace GitVersion;

internal static class ArgumentParserExtensions
{
private static readonly string[] TrueValues = ["1", "true"];
private static readonly string[] FalseValues = ["0", "false"];

public static bool IsTrue(this string? value) => TrueValues.Contains(value, StringComparer.OrdinalIgnoreCase);

public static bool IsFalse(this string? value) => FalseValues.Contains(value, StringComparer.OrdinalIgnoreCase);

public static bool IsValidPath(this string? path)
{
if (path == null)
return false;

try
{
_ = PathHelper.GetFullPath(path);
}
catch
{
path = PathHelper.Combine(SysEnv.CurrentDirectory, path);

try
{
_ = PathHelper.GetFullPath(path);
}
catch
{
return false;
}
}

return Directory.Exists(path);
}

public static bool IsSwitchArgument(this string? value)
=> value != null
&& (value.StartsWith('-') || value.StartsWith('/'))
&& !Regex.Match(value, @"/\w+:").Success; //Exclude msbuild & project parameters in form /blah:, which should be parsed as values, not switch names.

public static bool IsSwitch(this string? value, string switchName)
{
if (value == null)
return false;

if (value.StartsWith('-'))
{
value = value[1..];
}

if (value.StartsWith('/'))
{
value = value[1..];
}

return string.Equals(switchName, value, StringComparison.OrdinalIgnoreCase);
}

public static bool IsHelp(this string singleArgument) => (singleArgument == "?") || singleArgument.IsSwitch("h") || singleArgument.IsSwitch("help") || singleArgument.IsSwitch("?");

public static bool ArgumentRequiresValue(this string argument, int argumentIndex)
{
var booleanArguments = new[] { "init", "updateassemblyinfo", "ensureassemblyinfo", "nofetch", "nonormalize", "nocache" };

var argumentMightRequireValue = !booleanArguments.Contains(argument[1..], StringComparer.OrdinalIgnoreCase);

// If this is the first argument that might be a target path, the argument starts with slash and we're on an OS that supports paths with slashes, the argument does not require a value.
if (argumentMightRequireValue && argumentIndex == 0 && argument.StartsWith('/') && Path.DirectorySeparatorChar == '/' && argument.IsValidPath())
return false;

return argumentMightRequireValue;
}
}
1 change: 1 addition & 0 deletions src/GitVersion.App/Arguments.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using GitVersion.Git;
using GitVersion.Logging;

namespace GitVersion;
Expand Down
7 changes: 6 additions & 1 deletion src/GitVersion.App/GitVersionExecutor.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using GitVersion.Configuration;
using GitVersion.Extensions;
using GitVersion.Git;
using GitVersion.Helpers;
using GitVersion.Logging;

Expand All @@ -10,6 +11,7 @@ internal class GitVersionExecutor(
IConsole console,
IConfigurationFileLocator configurationFileLocator,
IConfigurationProvider configurationProvider,
IConfigurationSerializer configurationSerializer,
IGitVersionCalculateTool gitVersionCalculateTool,
IGitVersionOutputTool gitVersionOutputTool,
IVersionWriter versionWriter,
Expand All @@ -21,6 +23,8 @@ internal class GitVersionExecutor(
private readonly IConsole console = console.NotNull();
private readonly IConfigurationFileLocator configurationFileLocator = configurationFileLocator.NotNull();
private readonly IConfigurationProvider configurationProvider = configurationProvider.NotNull();
private readonly IConfigurationSerializer configurationSerializer = configurationSerializer.NotNull();

private readonly IGitVersionCalculateTool gitVersionCalculateTool = gitVersionCalculateTool.NotNull();
private readonly IGitVersionOutputTool gitVersionOutputTool = gitVersionOutputTool.NotNull();
private readonly IVersionWriter versionWriter = versionWriter.NotNull();
Expand Down Expand Up @@ -143,7 +147,8 @@ private bool HandleNonMainCommand(GitVersionOptions gitVersionOptions, out int e
this.configurationFileLocator.Verify(workingDirectory, this.repositoryInfo.ProjectRootDirectory);
}
var configuration = this.configurationProvider.Provide();
this.console.WriteLine(configuration.ToJsonString());
var configurationString = configurationSerializer.Serialize(configuration);
this.console.WriteLine(configurationString);
exitCode = 0;
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/GitVersion.App/OverrideConfigurationOptionParser.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ namespace GitVersion;

internal class OverrideConfigurationOptionParser
{
private readonly Dictionary<object, object?> overrideConfiguration = new();
private readonly Dictionary<object, object?> overrideConfiguration = [];

private static readonly Lazy<ILookup<string?, PropertyInfo>> _lazySupportedProperties =
new(GetSupportedProperties, true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public void BuildNumberIsFullSemVer()

writes[1].ShouldBe("1.2.3-beta.1+5");

writes = new List<string?>();
writes = [];
buildAgent.WriteIntegration(writes.Add, variables, false);
writes.ShouldNotContain(x => x != null && x.StartsWith("Executing GenerateSetVersionMessage for "));
}
Expand Down
2 changes: 1 addition & 1 deletion src/GitVersion.BuildAgents/Agents/BuildKite.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ public override string[] GenerateSetParameterMessage(string name, string? value)

// For pull requests BUILDKITE_BRANCH refers to the head, so adjust the
// branch name for pull request versioning to function as expected
return string.Format("refs/pull/{0}/head", pullRequest);
return $"refs/pull/{pullRequest}/head";
}

public override bool PreventFetch() => true;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using GitVersion.Configuration;
using GitVersion.Core.Tests.Helpers;
using GitVersion.Git;

namespace GitVersion.Core.Tests.Configuration;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using GitVersion.Configuration;
using GitVersion.Configuration.Tests.Configuration;
using GitVersion.Core.Tests.Helpers;
using GitVersion.Extensions;
using GitVersion.Helpers;
using GitVersion.Logging;
using GitVersion.VersionCalculation;
Expand Down Expand Up @@ -183,7 +182,7 @@ public void CanWriteOutEffectiveConfiguration()
{
var configuration = this.configurationProvider.ProvideForDirectory(this.repoPath);

configuration.ToJsonString().ShouldMatchApproved();
new ConfigurationSerializer().Serialize(configuration).ShouldMatchApproved();
}

[Test]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,52 +7,54 @@ namespace GitVersion.Core.Tests.Configuration;
[TestFixture]
public class IgnoreConfigurationTests : TestBase
{
private readonly ConfigurationSerializer serializer = new();

[Test]
public void CanDeserialize()
{
const string yaml = @"
ignore:
sha: [b6c0c9fda88830ebcd563e500a5a7da5a1658e98]
commits-before: 2015-10-23T12:23:15
";
const string yaml =
"""
ignore:
sha: [b6c0c9fda88830ebcd563e500a5a7da5a1658e98]
commits-before: 2015-10-23T12:23:15
""";

using var reader = new StringReader(yaml);
var configuration = ConfigurationSerializer.Read(reader);
var configuration = serializer.ReadConfiguration(yaml);

configuration.ShouldNotBeNull();
configuration.Ignore.ShouldNotBeNull();
configuration.Ignore.Shas.ShouldNotBeEmpty();
configuration.Ignore.Shas.ShouldBe(new[] { "b6c0c9fda88830ebcd563e500a5a7da5a1658e98" });
configuration.Ignore.Shas.ShouldBe(["b6c0c9fda88830ebcd563e500a5a7da5a1658e98"]);
configuration.Ignore.Before.ShouldBe(DateTimeOffset.Parse("2015-10-23T12:23:15"));
}

[Test]
public void ShouldSupportsOtherSequenceFormat()
{
const string yaml = @"
ignore:
sha:
- b6c0c9fda88830ebcd563e500a5a7da5a1658e98
- 6c19c7c219ecf8dbc468042baefa73a1b213e8b1
";
const string yaml =
"""
ignore:
sha:
- b6c0c9fda88830ebcd563e500a5a7da5a1658e98
- 6c19c7c219ecf8dbc468042baefa73a1b213e8b1
""";

using var reader = new StringReader(yaml);
var configuration = ConfigurationSerializer.Read(reader);
var configuration = serializer.ReadConfiguration(yaml);

configuration.ShouldNotBeNull();
configuration.Ignore.ShouldNotBeNull();
configuration.Ignore.Shas.ShouldNotBeEmpty();
configuration.Ignore.Shas.ShouldBe(new[] { "b6c0c9fda88830ebcd563e500a5a7da5a1658e98", "6c19c7c219ecf8dbc468042baefa73a1b213e8b1" });
configuration.Ignore.Shas.ShouldBe(["b6c0c9fda88830ebcd563e500a5a7da5a1658e98", "6c19c7c219ecf8dbc468042baefa73a1b213e8b1"]);
}

[Test]
public void WhenNotInConfigShouldHaveDefaults()
{
const string yaml = @"
next-version: 1.0
";
const string yaml = "next-version: 1.0";

using var reader = new StringReader(yaml);
var configuration = ConfigurationSerializer.Read(reader);
var configuration = serializer.ReadConfiguration(yaml);

configuration.ShouldNotBeNull();
configuration.Ignore.ShouldNotBeNull();
configuration.Ignore.Shas.ShouldBeEmpty();
configuration.Ignore.Before.ShouldBe(null);
Expand All @@ -61,13 +63,13 @@ public void WhenNotInConfigShouldHaveDefaults()
[Test]
public void WhenBadDateFormatShouldFail()
{
const string yaml = @"
ignore:
commits-before: bad format date
";
const string yaml =
"""
ignore:
commits-before: bad format date
""";

using var reader = new StringReader(yaml);
Should.Throw<YamlException>(() => ConfigurationSerializer.Read(reader));
Should.Throw<YamlException>(() => serializer.ReadConfiguration(yaml));
}

[Test]
Expand Down
Loading