From 3886a51ff5bf2d9c96c42f47c4770186b845cd88 Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Wed, 12 Mar 2025 07:09:00 +0100 Subject: [PATCH 1/2] fix configuration file name casing un linux --- .../ConfigurationFileLocatorTests.cs | 16 ++++++ .../ConfigurationFileLocator.cs | 56 +++++++++++-------- 2 files changed, 49 insertions(+), 23 deletions(-) diff --git a/src/GitVersion.Configuration.Tests/Configuration/ConfigurationFileLocatorTests.cs b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationFileLocatorTests.cs index 3d83a38e23..1074bc07d7 100644 --- a/src/GitVersion.Configuration.Tests/Configuration/ConfigurationFileLocatorTests.cs +++ b/src/GitVersion.Configuration.Tests/Configuration/ConfigurationFileLocatorTests.cs @@ -153,6 +153,22 @@ public void DoNotThrowWhenWorkingAndRepoPathsAreSame_WithDifferentCasing() Should.NotThrow(() => this.configFileLocator.Verify(this.workingPath, this.repoPath)); } + [Test] + public void DoNotThrowWhenFileNameAreSame_WithDifferentCasing() + { + this.workingPath = this.repoPath; + + this.gitVersionOptions = new() { ConfigurationInfo = { ConfigurationFile = "MyConfig.yaml" } }; + var sp = GetServiceProvider(this.gitVersionOptions); + this.configFileLocator = sp.GetRequiredService(); + this.fileSystem = sp.GetRequiredService(); + + using var _ = this.fileSystem.SetupConfigFile(path: this.workingPath, fileName: ConfigFile.ToLower()); + + var config = Should.NotThrow(() => this.configFileLocator.GetConfigurationFile(this.workingPath)); + config.ShouldNotBe(null); + } + [Test] public void DoNotThrowWhenConfigFileIsInSubDirectoryOfRepoPath() { diff --git a/src/GitVersion.Configuration/ConfigurationFileLocator.cs b/src/GitVersion.Configuration/ConfigurationFileLocator.cs index 752a7b6af7..c2a3ecbafa 100644 --- a/src/GitVersion.Configuration/ConfigurationFileLocator.cs +++ b/src/GitVersion.Configuration/ConfigurationFileLocator.cs @@ -16,7 +16,14 @@ internal class ConfigurationFileLocator( public const string DefaultAlternativeFileName = "GitVersion.yaml"; public const string DefaultFileNameDotted = $".{DefaultFileName}"; public const string DefaultAlternativeFileNameDotted = $".{DefaultAlternativeFileName}"; - public List SupportedConfigFileNames = [DefaultFileName, DefaultAlternativeFileName, DefaultFileNameDotted, DefaultAlternativeFileNameDotted]; + + private readonly string[] SupportedConfigFileNames = + [ + DefaultFileName, + DefaultAlternativeFileName, + DefaultFileNameDotted, + DefaultAlternativeFileNameDotted + ]; private readonly IFileSystem fileSystem = fileSystem.NotNull(); private readonly ILog log = log.NotNull(); @@ -35,21 +42,28 @@ public void Verify(string? workingDirectory, string? projectRootDirectory) { if (directory is null) return null; - string?[] candidates = [this.ConfigurationFile, .. SupportedConfigFileNames]; - var candidatePaths = - from candidate in candidates - where !candidate.IsNullOrWhiteSpace() - select PathHelper.Combine(directory, candidate); + string[] candidates = !string.IsNullOrWhiteSpace(this.ConfigurationFile) + ? [this.ConfigurationFile, .. this.SupportedConfigFileNames] + : this.SupportedConfigFileNames; - foreach (var candidatePath in candidatePaths) + foreach (var fileName in candidates) { - this.log.Debug($"Trying to find configuration file at '{candidatePath}'"); - if (fileSystem.File.Exists(candidatePath)) + this.log.Debug($"Trying to find configuration file {fileName} at '{directory}'"); + if (directory != null && fileSystem.Directory.Exists(directory)) { - this.log.Info($"Found configuration file at '{candidatePath}'"); - return candidatePath; + var files = fileSystem.Directory.GetFiles(directory); + + var matchingFile = files.FirstOrDefault(file => + string.Equals(fileSystem.Path.GetFileName(file), fileName, StringComparison.OrdinalIgnoreCase)); + + if (matchingFile != null) + { + this.log.Info($"Found configuration file at '{matchingFile}'"); + return matchingFile; + } } - this.log.Debug($"Configuration file not found at '{candidatePath}'"); + + this.log.Debug($"Configuration file {fileName} not found at '{directory}'"); } return null; @@ -60,22 +74,18 @@ private void WarnAboutAmbiguousConfigFileSelection(string? workingDirectory, str var workingConfigFile = GetConfigurationFile(workingDirectory); var projectRootConfigFile = GetConfigurationFile(projectRootDirectory); - var hasConfigInWorkingDirectory = workingConfigFile != null; - var hasConfigInProjectRootDirectory = projectRootConfigFile != null; + var hasConfigInWorkingDirectory = workingConfigFile is not null; + var hasConfigInProjectRootDirectory = projectRootConfigFile is not null; if (hasConfigInProjectRootDirectory && hasConfigInWorkingDirectory) { throw new WarningException($"Ambiguous configuration file selection from '{workingConfigFile}' and '{projectRootConfigFile}'"); } - if (!hasConfigInProjectRootDirectory && !hasConfigInWorkingDirectory) - { - if (!SupportedConfigFileNames.Any(entry => entry.Equals(this.ConfigurationFile, StringComparison.OrdinalIgnoreCase))) - { - workingConfigFile = PathHelper.Combine(workingDirectory, this.ConfigurationFile); - projectRootConfigFile = PathHelper.Combine(projectRootDirectory, this.ConfigurationFile); - throw new WarningException($"The configuration file was not found at '{workingConfigFile}' or '{projectRootConfigFile}'"); - } - } + if (hasConfigInProjectRootDirectory || hasConfigInWorkingDirectory || this.SupportedConfigFileNames.Any(entry => entry.Equals(this.ConfigurationFile, StringComparison.OrdinalIgnoreCase))) return; + + workingConfigFile = PathHelper.Combine(workingDirectory, this.ConfigurationFile); + projectRootConfigFile = PathHelper.Combine(projectRootDirectory, this.ConfigurationFile); + throw new WarningException($"The configuration file was not found at '{workingConfigFile}' or '{projectRootConfigFile}'"); } } From 0388b70c84d3b2eabf72988ecee5fc9450c73b7f Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Wed, 12 Mar 2025 08:54:16 +0100 Subject: [PATCH 2/2] fix UTF8 files with BOM --- .editorconfig | 2 +- build/.run/Build.run.xml | 2 +- build/.run/Clean.run.xml | 2 +- build/.run/Package.run.xml | 2 +- build/.run/PublishCoverage.run.xml | 2 +- build/.run/Test.run.xml | 2 +- build/CI.sln | 2 +- build/CI.sln.DotSettings | 2 +- build/Directory.Build.props | 2 +- build/build/Build.csproj.DotSettings | 2 +- new-cli/.run/Tester.run.xml | 2 +- new-cli/GitVersion.Calculation/GitVersion.Calculation.csproj | 2 +- new-cli/GitVersion.sln | 2 +- new-cli/GitVersion.sln.DotSettings | 2 +- new-cli/nuget.config | 2 +- src/.run/schema.run.xml | 2 +- src/GitVersion.App.Tests/TestBuildFile.proj | 2 +- ...rTests.ShouldProperlyOutputNamespaceDeclaration.approved.txt | 2 +- ...rTests.ShouldProperlyOutputNamespaceDeclaration.approved.txt | 2 +- .../AssemblyInfo/AddFormats/VersionAssemblyInfo.fs | 2 +- .../AssemblyInfo/Templates/VersionAssemblyInfo.cs | 2 +- .../AssemblyInfo/Templates/VersionAssemblyInfo.fs | 2 +- .../AssemblyInfo/Templates/VersionAssemblyInfo.vb | 2 +- src/GitVersion.sln.DotSettings | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.editorconfig b/.editorconfig index cd66ed516f..317101a73a 100644 --- a/.editorconfig +++ b/.editorconfig @@ -2,12 +2,12 @@ # top-most EditorConfig file root = true +charset = utf-8 [*] indent_style = space indent_size = 4 end_of_line = lf -charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true diff --git a/build/.run/Build.run.xml b/build/.run/Build.run.xml index 00d2bc0df3..e178484aae 100644 --- a/build/.run/Build.run.xml +++ b/build/.run/Build.run.xml @@ -1,4 +1,4 @@ - +