Skip to content

Commit 087f938

Browse files
sergiorykovJakeGinnivan
authored andcommitted
checking ambigous and obsolete config files at workingDirectory and rootProjectDirectory
1 parent 55212eb commit 087f938

File tree

7 files changed

+84
-5
lines changed

7 files changed

+84
-5
lines changed

src/GitVersionCore.Tests/TestFileSystem.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,9 @@ public long GetLastDirectoryWrite(string path)
101101
{
102102
return 1;
103103
}
104+
105+
public bool PathsEqual(string path, string otherPath)
106+
{
107+
return path == otherPath;
108+
}
104109
}

src/GitVersionCore/Configuration/ConfigurationProvider.cs

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace GitVersion
22
{
33
using System.Collections.Generic;
4+
using System.ComponentModel;
45
using System.IO;
56
using System.Linq;
67
using System.Text;
@@ -151,25 +152,70 @@ public static string GetEffectiveConfigAsString(string gitDirectory, IFileSystem
151152
return stringBuilder.ToString();
152153
}
153154

155+
public static void Verify(GitPreparer gitPreparer, IFileSystem fileSystem)
156+
{
157+
var workingDirectory = gitPreparer.WorkingDirectory;
158+
var projectRootDirectory = gitPreparer.GetProjectRootDirectory();
159+
160+
if(fileSystem.PathsEqual(workingDirectory, projectRootDirectory))
161+
{
162+
WarnAboutObsoleteConfigFile(workingDirectory, fileSystem);
163+
return;
164+
}
165+
166+
WarnAboutObsoleteConfigFile(workingDirectory, fileSystem);
167+
WarnAboutObsoleteConfigFile(projectRootDirectory, fileSystem);
168+
169+
var workingConfigFile = GetConfigFilePath(workingDirectory, fileSystem);
170+
var projectRootConfigFile = GetConfigFilePath(projectRootDirectory, fileSystem);
171+
172+
bool hasConfigInWorkingDirectory = fileSystem.Exists(workingConfigFile);
173+
bool hasConfigInProjectRootDirectory = fileSystem.Exists(projectRootConfigFile);
174+
if (hasConfigInProjectRootDirectory && hasConfigInWorkingDirectory)
175+
{
176+
throw new WarningException(string.Format("Ambigous config file selection from '{0}' and '{1}'", workingConfigFile, projectRootConfigFile));
177+
}
178+
}
179+
180+
public static readonly string DefaultConfigFileName = "GitVersion.yml";
181+
public static readonly string ObsoleteConfigFileName = "GitVersionConfig.yaml";
182+
154183
static string GetConfigFilePath(string workingDirectory, IFileSystem fileSystem)
155184
{
156-
var ymlPath = Path.Combine(workingDirectory, "GitVersion.yml");
185+
var ymlPath = Path.Combine(workingDirectory, DefaultConfigFileName);
157186
if (fileSystem.Exists(ymlPath))
158187
{
159188
return ymlPath;
160189
}
161190

162-
var deprecatedPath = Path.Combine(workingDirectory, "GitVersionConfig.yaml");
191+
var deprecatedPath = Path.Combine(workingDirectory, ObsoleteConfigFileName);
163192
if (fileSystem.Exists(deprecatedPath))
164193
{
165-
Logger.WriteWarning("'GitVersionConfig.yaml' is deprecated, use 'GitVersion.yml' instead.");
166-
167194
return deprecatedPath;
168195
}
169196

170197
return ymlPath;
171198
}
172199

200+
static bool WarnAboutObsoleteConfigFile(string workingDirectory, IFileSystem fileSystem)
201+
{
202+
var deprecatedConfigFilePath = Path.Combine(workingDirectory, ObsoleteConfigFileName);
203+
if (!fileSystem.Exists(deprecatedConfigFilePath))
204+
{
205+
return false;
206+
}
207+
208+
var defaultConfigFilePath = Path.Combine(workingDirectory, DefaultConfigFileName);
209+
if (fileSystem.Exists(defaultConfigFilePath))
210+
{
211+
Logger.WriteWarning(string.Format("Ambigous config files at '{0}': '{1}' (deprecated) and '{2}'. Will be used '{2}'", workingDirectory, ObsoleteConfigFileName, DefaultConfigFileName));
212+
return true;
213+
}
214+
215+
Logger.WriteWarning(string.Format("'{0}' is deprecated, use '{1}' instead.", deprecatedConfigFilePath, DefaultConfigFileName));
216+
return true;
217+
}
218+
173219
public static void Init(string workingDirectory, IFileSystem fileSystem, IConsole console)
174220
{
175221
var configFilePath = GetConfigFilePath(workingDirectory, fileSystem);

src/GitVersionCore/ExecuteCore.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ static string ResolveCurrentBranch(IBuildServer buildServer, string targetBranch
103103
VersionVariables ExecuteInternal(string targetBranch, string commitId, IRepository repo, GitPreparer gitPreparer, string projectRoot, IBuildServer buildServer, Config overrideConfig = null)
104104
{
105105
var versionFinder = new GitVersionFinder();
106-
var configuration = ConfigurationProvider.Provide(projectRoot, fileSystem, overrideConfig: overrideConfig);
106+
var configuration = ConfigurationProvider.Provide(projectRoot, fileSystem, overrideConfig: overrideConfig);
107107

108108
var gitVersionContext = new GitVersionContext(repo, configuration, commitId : commitId);
109109
var semanticVersion = versionFinder.FindVersion(gitVersionContext);

src/GitVersionCore/GitPreparer.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ public GitPreparer(string targetUrl, string dynamicRepositoryLocation, Authentic
2929
this.targetPath = targetPath.TrimEnd('/', '\\');
3030
}
3131

32+
public string WorkingDirectory
33+
{
34+
get { return targetPath; }
35+
}
36+
3237
public bool IsDynamicGitRepository
3338
{
3439
get { return !string.IsNullOrWhiteSpace(DynamicGitRepositoryPath); }

src/GitVersionCore/Helpers/FileSystem.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
namespace GitVersion.Helpers
22
{
3+
using System;
34
using System.Collections.Generic;
45
using System.IO;
56
using System.Linq;
67

78
public class FileSystem : IFileSystem
89
{
10+
private static readonly bool runningOnMono = Type.GetType("Mono.Runtime") != null;
11+
912
public void Copy(string @from, string to, bool overwrite)
1013
{
1114
File.Copy(from, to, overwrite);
@@ -70,5 +73,17 @@ public long GetLastDirectoryWrite(string path)
7073
.Max()
7174
.Ticks;
7275
}
76+
77+
public bool PathsEqual(string path, string otherPath)
78+
{
79+
var comparison = runningOnMono
80+
? StringComparison.InvariantCulture
81+
: StringComparison.InvariantCultureIgnoreCase;
82+
83+
return string.Equals(
84+
Path.GetFullPath(path).TrimEnd('\\').TrimEnd('/'),
85+
Path.GetFullPath(otherPath).TrimEnd('\\').TrimEnd('/'),
86+
comparison);
87+
}
7388
}
7489
}

src/GitVersionCore/Helpers/IFileSystem.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,7 @@ public interface IFileSystem
1717
void CreateDirectory(string path);
1818
bool DirectoryExists(string path);
1919
long GetLastDirectoryWrite(string path);
20+
21+
bool PathsEqual(string path, string otherPath);
2022
}
2123
}

src/GitVersionExe/Program.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ static int VerifyArgumentsAndRun()
6464
}
6565

6666
ConfigureLogging(arguments);
67+
VerifyConfiguration(arguments, fileSystem);
6768

6869
if (!Directory.Exists(arguments.TargetPath))
6970
{
@@ -124,6 +125,11 @@ static int VerifyArgumentsAndRun()
124125
return 0;
125126
}
126127

128+
private static void VerifyConfiguration(Arguments arguments, IFileSystem fileSystem)
129+
{
130+
var gitPreparer = new GitPreparer(arguments.TargetUrl, arguments.DynamicRepositoryLocation,arguments.Authentication,arguments.NoFetch,arguments.TargetPath);
131+
ConfigurationProvider.Verify(gitPreparer, fileSystem);
132+
}
127133

128134
static void ConfigureLogging(Arguments arguments)
129135
{

0 commit comments

Comments
 (0)