diff --git a/src/GitVersion.App/GitVersionExecutor.cs b/src/GitVersion.App/GitVersionExecutor.cs index 1a4fa2907d..0f10152c13 100644 --- a/src/GitVersion.App/GitVersionExecutor.cs +++ b/src/GitVersion.App/GitVersionExecutor.cs @@ -1,6 +1,7 @@ using System; using System.IO; using System.Reflection; +using System.Threading; using GitVersion.Configuration; using GitVersion.Extensions; using GitVersion.Logging; @@ -56,8 +57,16 @@ public int Execute(GitVersionOptions gitVersionOptions) private int RunGitVersionTool(GitVersionOptions gitVersionOptions) { + var mutexName = gitVersionOptions.WorkingDirectory.Replace(Path.DirectorySeparatorChar.ToString(), ""); + using var mutex = new Mutex(true, $@"Global\{mutexName}", out var acquired); + try { + if (!acquired) + { + mutex.WaitOne(); + } + var variables = gitVersionCalculateTool.CalculateVersionVariables(); var configuration = configProvider.Provide(overrideConfig: gitVersionOptions.ConfigInfo.OverrideConfig); @@ -92,6 +101,10 @@ private int RunGitVersionTool(GitVersionOptions gitVersionOptions) } return 1; } + finally + { + mutex.ReleaseMutex(); + } return 0; }