Skip to content

Commit 3886a51

Browse files
committed
fix configuration file name casing un linux
1 parent 74c9868 commit 3886a51

File tree

2 files changed

+49
-23
lines changed

2 files changed

+49
-23
lines changed

src/GitVersion.Configuration.Tests/Configuration/ConfigurationFileLocatorTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,22 @@ public void DoNotThrowWhenWorkingAndRepoPathsAreSame_WithDifferentCasing()
153153
Should.NotThrow(() => this.configFileLocator.Verify(this.workingPath, this.repoPath));
154154
}
155155

156+
[Test]
157+
public void DoNotThrowWhenFileNameAreSame_WithDifferentCasing()
158+
{
159+
this.workingPath = this.repoPath;
160+
161+
this.gitVersionOptions = new() { ConfigurationInfo = { ConfigurationFile = "MyConfig.yaml" } };
162+
var sp = GetServiceProvider(this.gitVersionOptions);
163+
this.configFileLocator = sp.GetRequiredService<IConfigurationFileLocator>();
164+
this.fileSystem = sp.GetRequiredService<IFileSystem>();
165+
166+
using var _ = this.fileSystem.SetupConfigFile(path: this.workingPath, fileName: ConfigFile.ToLower());
167+
168+
var config = Should.NotThrow(() => this.configFileLocator.GetConfigurationFile(this.workingPath));
169+
config.ShouldNotBe(null);
170+
}
171+
156172
[Test]
157173
public void DoNotThrowWhenConfigFileIsInSubDirectoryOfRepoPath()
158174
{

src/GitVersion.Configuration/ConfigurationFileLocator.cs

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,14 @@ internal class ConfigurationFileLocator(
1616
public const string DefaultAlternativeFileName = "GitVersion.yaml";
1717
public const string DefaultFileNameDotted = $".{DefaultFileName}";
1818
public const string DefaultAlternativeFileNameDotted = $".{DefaultAlternativeFileName}";
19-
public List<string> SupportedConfigFileNames = [DefaultFileName, DefaultAlternativeFileName, DefaultFileNameDotted, DefaultAlternativeFileNameDotted];
19+
20+
private readonly string[] SupportedConfigFileNames =
21+
[
22+
DefaultFileName,
23+
DefaultAlternativeFileName,
24+
DefaultFileNameDotted,
25+
DefaultAlternativeFileNameDotted
26+
];
2027

2128
private readonly IFileSystem fileSystem = fileSystem.NotNull();
2229
private readonly ILog log = log.NotNull();
@@ -35,21 +42,28 @@ public void Verify(string? workingDirectory, string? projectRootDirectory)
3542
{
3643
if (directory is null) return null;
3744

38-
string?[] candidates = [this.ConfigurationFile, .. SupportedConfigFileNames];
39-
var candidatePaths =
40-
from candidate in candidates
41-
where !candidate.IsNullOrWhiteSpace()
42-
select PathHelper.Combine(directory, candidate);
45+
string[] candidates = !string.IsNullOrWhiteSpace(this.ConfigurationFile)
46+
? [this.ConfigurationFile, .. this.SupportedConfigFileNames]
47+
: this.SupportedConfigFileNames;
4348

44-
foreach (var candidatePath in candidatePaths)
49+
foreach (var fileName in candidates)
4550
{
46-
this.log.Debug($"Trying to find configuration file at '{candidatePath}'");
47-
if (fileSystem.File.Exists(candidatePath))
51+
this.log.Debug($"Trying to find configuration file {fileName} at '{directory}'");
52+
if (directory != null && fileSystem.Directory.Exists(directory))
4853
{
49-
this.log.Info($"Found configuration file at '{candidatePath}'");
50-
return candidatePath;
54+
var files = fileSystem.Directory.GetFiles(directory);
55+
56+
var matchingFile = files.FirstOrDefault(file =>
57+
string.Equals(fileSystem.Path.GetFileName(file), fileName, StringComparison.OrdinalIgnoreCase));
58+
59+
if (matchingFile != null)
60+
{
61+
this.log.Info($"Found configuration file at '{matchingFile}'");
62+
return matchingFile;
63+
}
5164
}
52-
this.log.Debug($"Configuration file not found at '{candidatePath}'");
65+
66+
this.log.Debug($"Configuration file {fileName} not found at '{directory}'");
5367
}
5468

5569
return null;
@@ -60,22 +74,18 @@ private void WarnAboutAmbiguousConfigFileSelection(string? workingDirectory, str
6074
var workingConfigFile = GetConfigurationFile(workingDirectory);
6175
var projectRootConfigFile = GetConfigurationFile(projectRootDirectory);
6276

63-
var hasConfigInWorkingDirectory = workingConfigFile != null;
64-
var hasConfigInProjectRootDirectory = projectRootConfigFile != null;
77+
var hasConfigInWorkingDirectory = workingConfigFile is not null;
78+
var hasConfigInProjectRootDirectory = projectRootConfigFile is not null;
6579

6680
if (hasConfigInProjectRootDirectory && hasConfigInWorkingDirectory)
6781
{
6882
throw new WarningException($"Ambiguous configuration file selection from '{workingConfigFile}' and '{projectRootConfigFile}'");
6983
}
7084

71-
if (!hasConfigInProjectRootDirectory && !hasConfigInWorkingDirectory)
72-
{
73-
if (!SupportedConfigFileNames.Any(entry => entry.Equals(this.ConfigurationFile, StringComparison.OrdinalIgnoreCase)))
74-
{
75-
workingConfigFile = PathHelper.Combine(workingDirectory, this.ConfigurationFile);
76-
projectRootConfigFile = PathHelper.Combine(projectRootDirectory, this.ConfigurationFile);
77-
throw new WarningException($"The configuration file was not found at '{workingConfigFile}' or '{projectRootConfigFile}'");
78-
}
79-
}
85+
if (hasConfigInProjectRootDirectory || hasConfigInWorkingDirectory || this.SupportedConfigFileNames.Any(entry => entry.Equals(this.ConfigurationFile, StringComparison.OrdinalIgnoreCase))) return;
86+
87+
workingConfigFile = PathHelper.Combine(workingDirectory, this.ConfigurationFile);
88+
projectRootConfigFile = PathHelper.Combine(projectRootDirectory, this.ConfigurationFile);
89+
throw new WarningException($"The configuration file was not found at '{workingConfigFile}' or '{projectRootConfigFile}'");
8090
}
8191
}

0 commit comments

Comments
 (0)