Skip to content

Commit 937dc2e

Browse files
committed
Refactor file system logic to use FileSystemHelper
Replaces `PathHelper` and `DirectoryHelper` with a centralized `FileSystemHelper` for consistent file system operations. Removes redundant helper implementations and updates all references within the codebase to adopt the new utility. This change improves maintainability and leverages `System.IO.Abstractions` for better testability.
1 parent 7644140 commit 937dc2e

File tree

67 files changed

+428
-421
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+428
-421
lines changed

src/GitVersion.App.Tests/ArgumentParserTests.cs

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -283,91 +283,91 @@ public void UpdateAssemblyInfoWithFilename()
283283
{
284284
using var repo = new EmptyRepositoryFixture();
285285

286-
var assemblyFile = PathHelper.Combine(repo.RepositoryPath, "CommonAssemblyInfo.cs");
286+
var assemblyFile = FileSystemHelper.Path.Combine(repo.RepositoryPath, "CommonAssemblyInfo.cs");
287287
using var file = this.fileSystem.File.Create(assemblyFile);
288288

289289
var arguments = this.argumentParser.ParseArguments($"-targetpath {repo.RepositoryPath} -updateAssemblyInfo CommonAssemblyInfo.cs");
290290
arguments.UpdateAssemblyInfo.ShouldBe(true);
291291
arguments.UpdateAssemblyInfoFileName.Count.ShouldBe(1);
292-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => PathHelper.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
292+
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => FileSystemHelper.Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
293293
}
294294

295295
[Test]
296296
public void UpdateAssemblyInfoWithMultipleFilenames()
297297
{
298298
using var repo = new EmptyRepositoryFixture();
299299

300-
var assemblyFile1 = PathHelper.Combine(repo.RepositoryPath, "CommonAssemblyInfo.cs");
300+
var assemblyFile1 = FileSystemHelper.Path.Combine(repo.RepositoryPath, "CommonAssemblyInfo.cs");
301301
using var file = this.fileSystem.File.Create(assemblyFile1);
302302

303-
var assemblyFile2 = PathHelper.Combine(repo.RepositoryPath, "VersionAssemblyInfo.cs");
303+
var assemblyFile2 = FileSystemHelper.Path.Combine(repo.RepositoryPath, "VersionAssemblyInfo.cs");
304304
using var file2 = this.fileSystem.File.Create(assemblyFile2);
305305

306306
var arguments = this.argumentParser.ParseArguments($"-targetpath {repo.RepositoryPath} -updateAssemblyInfo CommonAssemblyInfo.cs VersionAssemblyInfo.cs");
307307
arguments.UpdateAssemblyInfo.ShouldBe(true);
308308
arguments.UpdateAssemblyInfoFileName.Count.ShouldBe(2);
309-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => PathHelper.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
310-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => PathHelper.GetFileName(x).Equals("VersionAssemblyInfo.cs"));
309+
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => FileSystemHelper.Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
310+
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => FileSystemHelper.Path.GetFileName(x).Equals("VersionAssemblyInfo.cs"));
311311
}
312312

313313
[Test]
314314
public void UpdateProjectFilesWithMultipleFilenames()
315315
{
316316
using var repo = new EmptyRepositoryFixture();
317317

318-
var assemblyFile1 = PathHelper.Combine(repo.RepositoryPath, "CommonAssemblyInfo.csproj");
318+
var assemblyFile1 = FileSystemHelper.Path.Combine(repo.RepositoryPath, "CommonAssemblyInfo.csproj");
319319
using var file = this.fileSystem.File.Create(assemblyFile1);
320320

321-
var assemblyFile2 = PathHelper.Combine(repo.RepositoryPath, "VersionAssemblyInfo.csproj");
321+
var assemblyFile2 = FileSystemHelper.Path.Combine(repo.RepositoryPath, "VersionAssemblyInfo.csproj");
322322
using var file2 = this.fileSystem.File.Create(assemblyFile2);
323323

324324
var arguments = this.argumentParser.ParseArguments($"-targetpath {repo.RepositoryPath} -updateProjectFiles CommonAssemblyInfo.csproj VersionAssemblyInfo.csproj");
325325
arguments.UpdateProjectFiles.ShouldBe(true);
326326
arguments.UpdateAssemblyInfoFileName.Count.ShouldBe(2);
327-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => PathHelper.GetFileName(x).Equals("CommonAssemblyInfo.csproj"));
328-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => PathHelper.GetFileName(x).Equals("VersionAssemblyInfo.csproj"));
327+
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => FileSystemHelper.Path.GetFileName(x).Equals("CommonAssemblyInfo.csproj"));
328+
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => FileSystemHelper.Path.GetFileName(x).Equals("VersionAssemblyInfo.csproj"));
329329
}
330330

331331
[Test]
332332
public void UpdateAssemblyInfoWithMultipleFilenamesMatchingGlobbing()
333333
{
334334
using var repo = new EmptyRepositoryFixture();
335335

336-
var assemblyFile1 = PathHelper.Combine(repo.RepositoryPath, "CommonAssemblyInfo.cs");
336+
var assemblyFile1 = FileSystemHelper.Path.Combine(repo.RepositoryPath, "CommonAssemblyInfo.cs");
337337
using var file = this.fileSystem.File.Create(assemblyFile1);
338338

339-
var assemblyFile2 = PathHelper.Combine(repo.RepositoryPath, "VersionAssemblyInfo.cs");
339+
var assemblyFile2 = FileSystemHelper.Path.Combine(repo.RepositoryPath, "VersionAssemblyInfo.cs");
340340
using var file2 = this.fileSystem.File.Create(assemblyFile2);
341341

342-
var subdir = PathHelper.Combine(repo.RepositoryPath, "subdir");
342+
var subdir = FileSystemHelper.Path.Combine(repo.RepositoryPath, "subdir");
343343

344344
this.fileSystem.Directory.CreateDirectory(subdir);
345-
var assemblyFile3 = PathHelper.Combine(subdir, "LocalAssemblyInfo.cs");
345+
var assemblyFile3 = FileSystemHelper.Path.Combine(subdir, "LocalAssemblyInfo.cs");
346346
using var file3 = this.fileSystem.File.Create(assemblyFile3);
347347

348348
var arguments = this.argumentParser.ParseArguments($"-targetpath {repo.RepositoryPath} -updateAssemblyInfo **/*AssemblyInfo.cs");
349349
arguments.UpdateAssemblyInfo.ShouldBe(true);
350350
arguments.UpdateAssemblyInfoFileName.Count.ShouldBe(3);
351-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => PathHelper.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
352-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => PathHelper.GetFileName(x).Equals("VersionAssemblyInfo.cs"));
353-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => PathHelper.GetFileName(x).Equals("LocalAssemblyInfo.cs"));
351+
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => FileSystemHelper.Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
352+
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => FileSystemHelper.Path.GetFileName(x).Equals("VersionAssemblyInfo.cs"));
353+
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => FileSystemHelper.Path.GetFileName(x).Equals("LocalAssemblyInfo.cs"));
354354
}
355355

356356
[Test]
357357
public void UpdateAssemblyInfoWithRelativeFilename()
358358
{
359359
using var repo = new EmptyRepositoryFixture();
360360

361-
var assemblyFile = PathHelper.Combine(repo.RepositoryPath, "CommonAssemblyInfo.cs");
361+
var assemblyFile = FileSystemHelper.Path.Combine(repo.RepositoryPath, "CommonAssemblyInfo.cs");
362362
using var file = this.fileSystem.File.Create(assemblyFile);
363363

364-
var targetPath = PathHelper.Combine(repo.RepositoryPath, "subdir1", "subdir2");
364+
var targetPath = FileSystemHelper.Path.Combine(repo.RepositoryPath, "subdir1", "subdir2");
365365
this.fileSystem.Directory.CreateDirectory(targetPath);
366366

367367
var arguments = this.argumentParser.ParseArguments($"-targetpath {targetPath} -updateAssemblyInfo ..\\..\\CommonAssemblyInfo.cs");
368368
arguments.UpdateAssemblyInfo.ShouldBe(true);
369369
arguments.UpdateAssemblyInfoFileName.Count.ShouldBe(1);
370-
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => PathHelper.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
370+
arguments.UpdateAssemblyInfoFileName.ShouldContain(x => FileSystemHelper.Path.GetFileName(x).Equals("CommonAssemblyInfo.cs"));
371371
}
372372

373373
[Test]
@@ -765,7 +765,7 @@ public void ThrowIfConfigurationFileDoesNotExist(string configFile) =>
765765
[Test]
766766
public void EnsureConfigurationFileIsSet()
767767
{
768-
var configFile = PathHelper.GetTempPath() + Guid.NewGuid() + ".yaml";
768+
var configFile = FileSystemHelper.Path.GetTempPath() + Guid.NewGuid() + ".yaml";
769769
this.fileSystem.File.WriteAllText(configFile, "next-version: 1.0.0");
770770
var arguments = this.argumentParser.ParseArguments($"-config {configFile}");
771771
arguments.ConfigurationFile.ShouldBe(configFile);

src/GitVersion.App.Tests/ExecCmdLineArgumentTest.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ public void CheckBuildServerVerbosityConsole(string verbosityArg, string expecte
5252
[Test]
5353
public void WorkingDirectoryWithoutGitFolderFailsWithInformativeMessage()
5454
{
55-
var result = GitVersionHelper.ExecuteIn(Path.GetTempPath(), null, false);
55+
var workingDirectory = FileSystemHelper.Path.GetTempPathLegacy();
56+
var result = GitVersionHelper.ExecuteIn(workingDirectory, null, false);
5657

5758
result.ExitCode.ShouldNotBe(0);
5859
result.Output.ShouldNotBeNull();
@@ -84,7 +85,7 @@ public void WorkingDirectoryWithoutCommitsFailsWithInformativeMessage()
8485
[Test]
8586
public void WorkingDirectoryDoesNotExistFailsWithInformativeMessage()
8687
{
87-
var workingDirectory = PathHelper.Combine(PathHelper.GetCurrentDirectory(), Guid.NewGuid().ToString("N"));
88+
var workingDirectory = FileSystemHelper.Path.Combine(FileSystemHelper.Path.GetCurrentDirectory(), Guid.NewGuid().ToString("N"));
8889
var executable = ExecutableHelper.GetDotNetExecutable();
8990

9091
var output = new StringBuilder();
@@ -96,7 +97,7 @@ public void WorkingDirectoryDoesNotExistFailsWithInformativeMessage()
9697
null,
9798
executable,
9899
args,
99-
PathHelper.GetCurrentDirectory());
100+
FileSystemHelper.Path.GetCurrentDirectory());
100101

101102
exitCode.ShouldNotBe(0);
102103
var outputString = output.ToString();

src/GitVersion.App.Tests/Helpers/GitVersionHelper.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public static ExecutionResults ExecuteIn(
1313
bool logToFile = true,
1414
params KeyValuePair<string, string?>[] environments)
1515
{
16-
var logFile = workingDirectory is not null && logToFile ? PathHelper.Combine(workingDirectory, "log.txt") : null;
16+
var logFile = workingDirectory is not null && logToFile ? FileSystemHelper.Path.Combine(workingDirectory, "log.txt") : null;
1717
var args = new ArgumentBuilder(workingDirectory, arguments, logFile);
1818
return ExecuteIn(args, environments);
1919
}
@@ -50,7 +50,7 @@ private static ExecutionResults ExecuteIn(ArgumentBuilder arguments,
5050
Console.WriteLine("Executing: {0} {1}", executable, args);
5151
Console.WriteLine();
5252

53-
var workingDirectory = arguments.WorkingDirectory ?? PathHelper.GetCurrentDirectory();
53+
var workingDirectory = arguments.WorkingDirectory ?? FileSystemHelper.Path.GetCurrentDirectory();
5454

5555
exitCode = ProcessHelper.Run(
5656
s => output.AppendLine(s),
@@ -77,12 +77,12 @@ private static ExecutionResults ExecuteIn(ArgumentBuilder arguments,
7777
Console.WriteLine();
7878
Console.WriteLine("-------------------------------------------------------");
7979

80-
if (arguments.LogFile.IsNullOrWhiteSpace() || !File.Exists(arguments.LogFile))
80+
if (arguments.LogFile.IsNullOrWhiteSpace() || !FileSystemHelper.File.Exists(arguments.LogFile))
8181
{
8282
return new(exitCode, output.ToString());
8383
}
8484

85-
var logContents = File.ReadAllText(arguments.LogFile);
85+
var logContents = FileSystemHelper.File.ReadAllText(arguments.LogFile);
8686
Console.WriteLine("Log from gitversion tool");
8787
Console.WriteLine("-------------------------------------------------------");
8888
Console.WriteLine(logContents);

src/GitVersion.App.Tests/JsonOutputOnBuildServerTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,8 @@ public void BeingOnBuildServerWithOutputJsonAndOutputFileDoesNotFail(string outp
6060
result.OutputVariables.ShouldNotBeNull();
6161
result.OutputVariables.FullSemVer.ShouldBeEquivalentTo(expectedVersion);
6262

63-
var filePath = PathHelper.Combine(fixture.LocalRepositoryFixture.RepositoryPath, fileName);
64-
var json = File.ReadAllText(filePath);
63+
var filePath = FileSystemHelper.Path.Combine(fixture.LocalRepositoryFixture.RepositoryPath, fileName);
64+
var json = FileSystemHelper.File.ReadAllText(filePath);
6565

6666
var outputVariables = json.ToGitVersionVariables();
6767
outputVariables.ShouldNotBeNull();

src/GitVersion.App.Tests/PullRequestInBuildAgentTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public async Task VerifyBitBucketPipelinesPullRequest(string pullRequestRef)
144144
private static async Task VerifyPullRequestVersionIsCalculatedProperly(string pullRequestRef, Dictionary<string, string> env)
145145
{
146146
using var fixture = new EmptyRepositoryFixture();
147-
var remoteRepositoryPath = PathHelper.GetRepositoryTempPath();
147+
var remoteRepositoryPath = FileSystemHelper.Path.GetRepositoryTempPath();
148148
RepositoryFixtureBase.Init(remoteRepositoryPath);
149149
using (var remoteRepository = new Repository(remoteRepositoryPath))
150150
{
@@ -184,7 +184,7 @@ private static async Task VerifyPullRequestVersionIsCalculatedProperly(string pu
184184
result.OutputVariables.FullSemVer.ShouldBe("1.0.4-PullRequest5.3");
185185

186186
// Cleanup repository files
187-
DirectoryHelper.DeleteDirectory(remoteRepositoryPath);
187+
FileSystemHelper.Directory.DeleteDirectory(remoteRepositoryPath);
188188
}
189189

190190
private static readonly object[] PrMergeRefInputs =

src/GitVersion.App.Tests/TagCheckoutInBuildAgentTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public async Task VerifyTagCheckoutOnGitHubActions()
3535
private static async Task VerifyTagCheckoutVersionIsCalculatedProperly(Dictionary<string, string> env)
3636
{
3737
using var fixture = new EmptyRepositoryFixture();
38-
var remoteRepositoryPath = PathHelper.GetRepositoryTempPath();
38+
var remoteRepositoryPath = FileSystemHelper.Path.GetRepositoryTempPath();
3939
RepositoryFixtureBase.Init(remoteRepositoryPath);
4040
using (var remoteRepository = new Repository(remoteRepositoryPath))
4141
{
@@ -66,6 +66,6 @@ private static async Task VerifyTagCheckoutVersionIsCalculatedProperly(Dictionar
6666
result.OutputVariables.FullSemVer.ShouldBe("0.2.0");
6767

6868
// Cleanup repository files
69-
DirectoryHelper.DeleteDirectory(remoteRepositoryPath);
69+
FileSystemHelper.Directory.DeleteDirectory(remoteRepositoryPath);
7070
}
7171
}

src/GitVersion.App.Tests/UpdateWixVersionFileTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ public void WixVersionFileCreationTest()
2121
fixture.MakeACommit();
2222

2323
GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: " /updatewixversionfile");
24-
Assert.That(File.Exists(PathHelper.Combine(fixture.RepositoryPath, this.wixVersionFileName)), Is.True);
24+
Assert.That(FileSystemHelper.File.Exists(FileSystemHelper.Path.Combine(fixture.RepositoryPath, this.wixVersionFileName)), Is.True);
2525
}
2626

2727
[Test]
@@ -36,7 +36,7 @@ public void WixVersionFileVarCountTest()
3636

3737
GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: " /updatewixversionfile");
3838

39-
var gitVersionVarsInWix = GetGitVersionVarsInWixFile(PathHelper.Combine(fixture.RepositoryPath, this.wixVersionFileName));
39+
var gitVersionVarsInWix = GetGitVersionVarsInWixFile(FileSystemHelper.Path.Combine(fixture.RepositoryPath, this.wixVersionFileName));
4040
var gitVersionVars = GitVersionVariables.AvailableVariables;
4141

4242
Assert.That(gitVersionVarsInWix, Has.Count.EqualTo(gitVersionVars.Count()));
@@ -55,7 +55,7 @@ public void WixVersionFileContentTest()
5555

5656
GitVersionHelper.ExecuteIn(fixture.RepositoryPath, arguments: " /updatewixversionfile");
5757

58-
var gitVersionVarsInWix = GetGitVersionVarsInWixFile(PathHelper.Combine(fixture.RepositoryPath, this.wixVersionFileName));
58+
var gitVersionVarsInWix = GetGitVersionVarsInWixFile(FileSystemHelper.Path.Combine(fixture.RepositoryPath, this.wixVersionFileName));
5959
var gitVersionVars = GitVersionVariables.AvailableVariables;
6060

6161
foreach (var variable in gitVersionVars)

src/GitVersion.App/ArgumentParser.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,14 +107,14 @@ private void ValidateConfigurationFile(Arguments arguments)
107107
{
108108
if (arguments.ConfigurationFile.IsNullOrWhiteSpace()) return;
109109

110-
if (PathHelper.IsPathRooted(arguments.ConfigurationFile))
110+
if (FileSystemHelper.Path.IsPathRooted(arguments.ConfigurationFile))
111111
{
112112
if (!this.fileSystem.File.Exists(arguments.ConfigurationFile)) throw new WarningException($"Could not find config file at '{arguments.ConfigurationFile}'");
113-
arguments.ConfigurationFile = PathHelper.GetFullPath(arguments.ConfigurationFile);
113+
arguments.ConfigurationFile = FileSystemHelper.Path.GetFullPath(arguments.ConfigurationFile);
114114
}
115115
else
116116
{
117-
var configFilePath = PathHelper.GetFullPath(PathHelper.Combine(arguments.TargetPath, arguments.ConfigurationFile));
117+
var configFilePath = FileSystemHelper.Path.GetFullPath(FileSystemHelper.Path.Combine(arguments.TargetPath, arguments.ConfigurationFile));
118118
if (!this.fileSystem.File.Exists(configFilePath)) throw new WarningException($"Could not find config file at '{configFilePath}'");
119119
arguments.ConfigurationFile = configFilePath;
120120
}
@@ -156,7 +156,7 @@ private IEnumerable<string> ResolveFiles(string workingDirectory, ISet<string>?
156156

157157
foreach (var path in paths)
158158
{
159-
yield return PathHelper.GetFullPath(PathHelper.Combine(workingDirectory, path));
159+
yield return FileSystemHelper.Path.GetFullPath(FileSystemHelper.Path.Combine(workingDirectory, path));
160160
}
161161
}
162162
}
@@ -182,7 +182,7 @@ private void ParseTargetPath(Arguments arguments, string? name, IReadOnlyList<st
182182
{
183183
if (name?.StartsWith('/') == true)
184184
{
185-
if (PathHelper.DirectorySeparatorChar == '/' && name.IsValidPath())
185+
if (FileSystemHelper.Path.DirectorySeparatorChar == '/' && name.IsValidPath())
186186
{
187187
arguments.TargetPath = name;
188188
return;
@@ -379,7 +379,7 @@ private static void ParseShowVariable(Arguments arguments, string? value, string
379379

380380
if (versionVariable == null)
381381
{
382-
var message = $"{name} requires a valid version variable. Available variables are:{PathHelper.NewLine}" +
382+
var message = $"{name} requires a valid version variable. Available variables are:{FileSystemHelper.Path.NewLine}" +
383383
string.Join(", ", availableVariables.Select(x => string.Concat("'", x, "'")));
384384
throw new WarningException(message);
385385
}

src/GitVersion.App/ArgumentParserExtensions.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,23 +19,23 @@ public static bool IsValidPath(this string? path)
1919

2020
try
2121
{
22-
_ = PathHelper.GetFullPath(path);
22+
_ = FileSystemHelper.Path.GetFullPath(path);
2323
}
2424
catch
2525
{
26-
path = PathHelper.Combine(SysEnv.CurrentDirectory, path);
26+
path = FileSystemHelper.Path.Combine(SysEnv.CurrentDirectory, path);
2727

2828
try
2929
{
30-
_ = PathHelper.GetFullPath(path);
30+
_ = FileSystemHelper.Path.GetFullPath(path);
3131
}
3232
catch
3333
{
3434
return false;
3535
}
3636
}
3737

38-
return Directory.Exists(path);
38+
return FileSystemHelper.Directory.Exists(path);
3939
}
4040

4141
public static bool IsSwitchArgument(this string? value)
@@ -74,7 +74,7 @@ public static bool ArgumentRequiresValue(this string argument, int argumentIndex
7474
var argumentMightRequireValue = !booleanArguments.Contains(argument[1..], StringComparer.OrdinalIgnoreCase);
7575

7676
// If this is the first argument that might be a target path, the argument starts with slash, and we're on an OS that supports paths with slashes, the argument does not require a value.
77-
if (argumentMightRequireValue && argumentIndex == 0 && argument.StartsWith('/') && PathHelper.DirectorySeparatorChar == '/' && argument.IsValidPath())
77+
if (argumentMightRequireValue && argumentIndex == 0 && argument.StartsWith('/') && FileSystemHelper.Path.DirectorySeparatorChar == '/' && argument.IsValidPath())
7878
return false;
7979

8080
return argumentMightRequireValue;

0 commit comments

Comments
 (0)