Skip to content

[Improvement] Elegantly fail when repo has no commits #2282

Closed
@gitfool

Description

@gitfool

Testing with Cake 0.38.0 alpha and GitVersion 5.3.3, the error handling interaction is greatly improved, but there's still room for improvement.

Building before git init is now obvious without needing diagnostic verbosity:

Executing: "D:/Devel/Repos/TestService/tools/dotnet-gitversion.exe" -output json -verbosity Debug
ERROR [05/21/20 11:44:03:01] An unexpected error occurred:
System.IO.DirectoryNotFoundException: Can't find the .git directory in
 ERROR: fatal: not a git repository (or any of the parent directories): .git

Error: One or more errors occurred. (GitVersion: Process returned an error (exit code 1).)
        GitVersion: Process returned an error (exit code 1).

Building after git init but before committing is not so obvious though:

Executing: "D:/Devel/Repos/TestService/tools/dotnet-gitversion.exe" -output json
  ERROR [05/21/20 12:26:13:03] An unexpected error occurred:
System.ArgumentNullException: Value cannot be null. (Parameter 'filter.IncludeReachableFrom')

Error: One or more errors occurred. (GitVersion: Process returned an error (exit code 1).)
        GitVersion: Process returned an error (exit code 1).

Again, but with diagnostic verbosity:

Executing: "D:/Devel/Repos/TestService/tools/dotnet-gitversion.exe" -output json -verbosity Debug
INFO [05/21/20 12:19:04:35] Working directory: D:\Devel\Repos\TestService
INFO [05/21/20 12:19:04:38] Project root is: D:\Devel\Repos\TestService\
INFO [05/21/20 12:19:04:38] DotGit directory is: D:\Devel\Repos\TestService\.git
INFO [05/21/20 12:19:04:39] Begin: Loading version variables from disk cache
  INFO [05/21/20 12:19:04:39] Cache file D:\Devel\Repos\TestService\.git\gitversion_cache\1E3FC911AB60D65A62911E879D944D9D49C3C1BA.yml not found.
  INFO [05/21/20 12:19:04:39] End: Loading version variables from disk cache (Took: 0.69ms)
  INFO [05/21/20 12:19:04:45] Using latest commit on specified branch
  INFO [05/21/20 12:19:04:46] Running against branch: master (-)
  INFO [05/21/20 12:19:04:46] Begin: Calculating base versions
  INFO [05/21/20 12:19:04:46] End: Calculating base versions (Took: 3.11ms)
  ERROR [05/21/20 12:19:04:47] An unexpected error occurred:
System.ArgumentNullException: Value cannot be null. (Parameter 'filter.IncludeReachableFrom')
   at LibGit2Sharp.Core.Ensure.ArgumentNotNull(Object argumentValue, String argumentName)
   at LibGit2Sharp.CommitLog.QueryBy(CommitFilter filter)
   at GitVersion.RepositoryMetadataProvider.GetBaseVersionSource(Commit currentBranchTip) in D:\a\GitVersion\GitVersion\src\GitVersionCore\Core\RepositoryMetadataProvider.cs:line 133
   at GitVersion.VersionCalculation.FallbackVersionStrategy.GetVersions()+MoveNext() in D:\a\GitVersion\GitVersion\src\GitVersionCore\VersionCalculation\BaseVersionCalculators\FallbackVersionStrategy.cs:line 28
   at System.Linq.Enumerable.SelectManySingleSelectorIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.ToList()
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at GitVersion.VersionCalculation.BaseVersionCalculator.GetBaseVersion() in D:\a\GitVersion\GitVersion\src\GitVersionCore\VersionCalculation\BaseVersionCalculator.cs:line 30
   at GitVersion.VersionCalculation.NextVersionCalculator.FindVersion() in D:\a\GitVersion\GitVersion\src\GitVersionCore\VersionCalculation\NextVersionCalculator.cs:line 55
   at GitVersion.GitVersionTool.CalculateVersionVariables() in D:\a\GitVersion\GitVersion\src\GitVersionCore\Core\GitVersionTool.cs:line 66
   at GitVersion.GitVersionExecutor.RunGitVersionTool(GitVersionOptions gitVersionOptions) in D:\a\GitVersion\GitVersion\src\GitVersionExe\GitVersionExecutor.cs:line 59
  INFO [05/21/20 12:19:04:47] Attempting to show the current git graph (please include in issue):
  INFO [05/21/20 12:19:04:47] Showing max of 100 commits
  INFO [05/21/20 12:19:04:53]
Error: System.AggregateException: One or more errors occurred. (GitVersion: Process returned an error (exit code 1).)
 ---> Cake.Core.CakeException: GitVersion: Process returned an error (exit code 1).
   at Cake.Core.Tooling.Tool`1.ProcessExitCode(Int32 exitCode) in D:\a\1\s\src\Cake.Core\Tooling\Tool.cs:line 136
   at Cake.Core.Tooling.Tool`1.Run(TSettings settings, ProcessArgumentBuilder arguments, ProcessSettings processSettings, Action`1 postAction) in D:\a\1\s\src\Cake.Core\Tooling\Tool.cs:line 121
   at Cake.Common.Tools.GitVersion.GitVersionRunner.Run(GitVersionSettings settings) in D:\a\1\s\src\Cake.Common\Tools\GitVersion\GitVersionRunner.cs:line 73
   at Cake.Common.Tools.GitVersion.GitVersionAliases.GitVersion(ICakeContext context, GitVersionSettings settings) in D:\a\1\s\src\Cake.Common\Tools\GitVersion\GitVersionAliases.cs:line 121
   at Submission#0.Version..ctor(BuildSystem buildSystem, ICakeContext context) in D:\Devel\Repos\TestService\tools\Pharos.Build.Cake.14.3.3\scripts\version.cake:line 10
   at Submission#0.Builder.SetVersion() in D:\Devel\Repos\TestService\tools\Pharos.Build.Cake.14.3.3\scripts\builder.cake:line 299
   at Submission#0.Builder..ctor(BuildSystem buildSystem, ICakeContext context, Action`1 runTarget) in D:\Devel\Repos\TestService\tools\Pharos.Build.Cake.14.3.3\scripts\builder.cake:line 9
   at Submission#0.<<Initialize>>d__0.MoveNext() in D:\Devel\Repos\TestService\tools\Pharos.Build.Cake.14.3.3\scripts\bootstrap.cake:line 20
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.CodeAnalysis.Scripting.ScriptExecutionState.RunSubmissionsAsync[TResult](ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, StrongBox`1 exceptionHolderOpt, Func`2 catchExceptionOpt, CancellationToken cancellationToken)
   at Microsoft.CodeAnalysis.Scripting.Script`1.RunSubmissionsAsync(ScriptExecutionState executionState, ImmutableArray`1 precedingExecutors, Func`2 currentExecutor, Func`2 catchExceptionOpt, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at Cake.Scripting.Roslyn.RoslynScriptSession.Execute(Script script) in D:\a\1\s\src\Cake\Scripting\Roslyn\RoslynScriptSession.cs:line 136
   at Cake.Core.Scripting.ScriptRunner.Run(IScriptHost host, FilePath scriptPath, IDictionary`2 arguments) in D:\a\1\s\src\Cake.Core\Scripting\ScriptRunner.cs:line 219
   at Cake.Commands.BuildCommand.Execute(CakeOptions options) in D:\a\1\s\src\Cake\Commands\BuildCommand.cs:line 41
   at Cake.CakeApplication.Run(CakeOptions options) in D:\a\1\s\src\Cake\CakeApplication.cs:line 45
   at Cake.Program.Main() in D:\a\1\s\src\Cake\Program.cs:line 81

Tracing back, we know that currentBranchTip is null after assignment, so this could be checked immediately and a more appropriate exception thrown.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions