diff --git a/src/GitVersion.App/ArgumentParser.cs b/src/GitVersion.App/ArgumentParser.cs index d7b4df31bc..8b1329831d 100644 --- a/src/GitVersion.App/ArgumentParser.cs +++ b/src/GitVersion.App/ArgumentParser.cs @@ -12,6 +12,8 @@ internal class ArgumentParser(IEnvironment environment, IFileSystem fileSystem, ICurrentBuildAgent buildAgent, IConsole console, + IHelpWriter helpWriter, + IVersionWriter versionWriter, IGlobbingResolver globbingResolver) : IArgumentParser { @@ -19,6 +21,8 @@ internal class ArgumentParser(IEnvironment environment, private readonly IFileSystem fileSystem = fileSystem.NotNull(); private readonly ICurrentBuildAgent buildAgent = buildAgent.NotNull(); private readonly IConsole console = console.NotNull(); + private readonly IHelpWriter helpWriter = helpWriter.NotNull(); + private readonly IVersionWriter versionWriter = versionWriter.NotNull(); private readonly IGlobbingResolver globbingResolver = globbingResolver.NotNull(); private const string defaultOutputFileName = "GitVersion.json"; @@ -53,6 +57,7 @@ public Arguments ParseArguments(string[] commandLineArguments) if (firstArgument.IsHelp()) { + this.helpWriter.Write(); return new Arguments { IsHelp = true @@ -61,6 +66,8 @@ public Arguments ParseArguments(string[] commandLineArguments) if (firstArgument.IsSwitch("version")) { + var assembly = Assembly.GetExecutingAssembly(); + this.versionWriter.Write(assembly); return new Arguments { IsVersion = true diff --git a/src/GitVersion.App/GitVersionApp.cs b/src/GitVersion.App/GitVersionApp.cs index df8cf8c3d8..910b7d9715 100644 --- a/src/GitVersion.App/GitVersionApp.cs +++ b/src/GitVersion.App/GitVersionApp.cs @@ -19,16 +19,27 @@ public Task RunAsync(CancellationToken _) try { var gitVersionOptions = this.options.Value; - this.log.Verbosity = gitVersionOptions.Verbosity; - SysEnv.ExitCode = this.gitVersionExecutor.Execute(gitVersionOptions); + + if (gitVersionOptions.IsHelp || gitVersionOptions.IsVersion) + { + SysEnv.ExitCode = 0; + } + else + { + this.log.Verbosity = gitVersionOptions.Verbosity; + SysEnv.ExitCode = this.gitVersionExecutor.Execute(gitVersionOptions); + } } catch (Exception exception) { Console.Error.WriteLine(exception.Message); SysEnv.ExitCode = 1; } + finally + { + this.applicationLifetime.StopApplication(); + } - this.applicationLifetime.StopApplication(); return Task.CompletedTask; } } diff --git a/src/GitVersion.App/GitVersionExecutor.cs b/src/GitVersion.App/GitVersionExecutor.cs index 36199ac398..ced585b029 100644 --- a/src/GitVersion.App/GitVersionExecutor.cs +++ b/src/GitVersion.App/GitVersionExecutor.cs @@ -11,8 +11,6 @@ internal class GitVersionExecutor( ILog log, IFileSystem fileSystem, IConsole console, - IVersionWriter versionWriter, - IHelpWriter helpWriter, IConfigurationFileLocator configurationFileLocator, IConfigurationProvider configurationProvider, IConfigurationSerializer configurationSerializer, @@ -25,8 +23,6 @@ internal class GitVersionExecutor( private readonly ILog log = log.NotNull(); private readonly IFileSystem fileSystem = fileSystem.NotNull(); private readonly IConsole console = console.NotNull(); - private readonly IVersionWriter versionWriter = versionWriter.NotNull(); - private readonly IHelpWriter helpWriter = helpWriter.NotNull(); private readonly IConfigurationFileLocator configurationFileLocator = configurationFileLocator.NotNull(); private readonly IConfigurationProvider configurationProvider = configurationProvider.NotNull(); @@ -39,10 +35,11 @@ internal class GitVersionExecutor( public int Execute(GitVersionOptions gitVersionOptions) { - if (!HandleNonMainCommand(gitVersionOptions, out var exitCode)) - { - exitCode = RunGitVersionTool(gitVersionOptions); - } + Initialize(gitVersionOptions); + + var exitCode = !VerifyAndDisplayConfiguration(gitVersionOptions) + ? RunGitVersionTool(gitVersionOptions) + : 0; if (exitCode != 0) { @@ -103,30 +100,23 @@ private int RunGitVersionTool(GitVersionOptions gitVersionOptions) return 0; } - private bool HandleNonMainCommand(GitVersionOptions gitVersionOptions, out int exitCode) + private void Initialize(GitVersionOptions gitVersionOptions) { - if (gitVersionOptions.IsVersion) + if (gitVersionOptions.Diag) { - var assembly = Assembly.GetExecutingAssembly(); - this.versionWriter.Write(assembly); - exitCode = 0; - return true; + gitVersionOptions.Settings.NoCache = true; } - if (gitVersionOptions.IsHelp) + if (gitVersionOptions.Output.Contains(OutputType.BuildServer) || gitVersionOptions.LogFilePath == "console") { - this.helpWriter.Write(); - exitCode = 0; - return true; + this.log.AddLogAppender(new ConsoleAppender()); } - if (gitVersionOptions.Diag) + if (gitVersionOptions.LogFilePath != null && gitVersionOptions.LogFilePath != "console") { - gitVersionOptions.Settings.NoCache = true; + this.log.AddLogAppender(new FileAppender(this.fileSystem, gitVersionOptions.LogFilePath)); } - ConfigureLogging(gitVersionOptions, this.log, this.fileSystem); - var workingDirectory = gitVersionOptions.WorkingDirectory; if (gitVersionOptions.Diag) { @@ -141,34 +131,19 @@ private bool HandleNonMainCommand(GitVersionOptions gitVersionOptions, out int e { this.log.Info("Working directory: " + workingDirectory); } - - if (gitVersionOptions.ConfigurationInfo.ShowConfiguration) - { - if (gitVersionOptions.RepositoryInfo.TargetUrl.IsNullOrWhiteSpace()) - { - this.configurationFileLocator.Verify(workingDirectory, this.repositoryInfo.ProjectRootDirectory); - } - var configuration = this.configurationProvider.Provide(); - var configurationString = configurationSerializer.Serialize(configuration); - this.console.WriteLine(configurationString); - exitCode = 0; - return true; - } - - exitCode = 0; - return false; } - private static void ConfigureLogging(GitVersionOptions gitVersionOptions, ILog log, IFileSystem fileSystem) + private bool VerifyAndDisplayConfiguration(GitVersionOptions gitVersionOptions) { - if (gitVersionOptions.Output.Contains(OutputType.BuildServer) || gitVersionOptions.LogFilePath == "console") + if (!gitVersionOptions.ConfigurationInfo.ShowConfiguration) return false; + if (gitVersionOptions.RepositoryInfo.TargetUrl.IsNullOrWhiteSpace()) { - log.AddLogAppender(new ConsoleAppender()); + this.configurationFileLocator.Verify(gitVersionOptions.WorkingDirectory, this.repositoryInfo.ProjectRootDirectory); } - if (gitVersionOptions.LogFilePath != null && gitVersionOptions.LogFilePath != "console") - { - log.AddLogAppender(new FileAppender(fileSystem, gitVersionOptions.LogFilePath)); - } + var configuration = this.configurationProvider.Provide(); + var configurationString = this.configurationSerializer.Serialize(configuration); + this.console.WriteLine(configurationString); + return true; } }