@@ -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