diff --git a/src/Cake.Common.Tests/Unit/Security/DirectoryHashCalculatorTests.cs b/src/Cake.Common.Tests/Unit/Security/DirectoryHashCalculatorTests.cs
index f50cf719c0..c60f1d6077 100644
--- a/src/Cake.Common.Tests/Unit/Security/DirectoryHashCalculatorTests.cs
+++ b/src/Cake.Common.Tests/Unit/Security/DirectoryHashCalculatorTests.cs
@@ -24,7 +24,7 @@ public void Should_Throw_If_Directory_Path_Is_Null()
var calculator = new DirectoryHashCalculator(cakeContext, hashAlgorithmBuilder);
// When
- var result = Record.Exception(() => calculator.Calculate(null, null, HashAlgorithm.MD5));
+ var result = Record.Exception(() => calculator.Calculate(null, null as string[], HashAlgorithm.MD5));
// Then
AssertEx.IsArgumentNullException(result, "directoryPath");
diff --git a/src/Cake.Common/IO/DirectoryAliases.cs b/src/Cake.Common/IO/DirectoryAliases.cs
index 53305bb22e..ff638c4b1b 100644
--- a/src/Cake.Common/IO/DirectoryAliases.cs
+++ b/src/Cake.Common/IO/DirectoryAliases.cs
@@ -151,7 +151,7 @@ public static void DeleteDirectory(this ICakeContext context, DirectoryPath path
/// The pattern to match.
[CakeMethodAlias]
[CakeAliasCategory("Clean")]
- public static void CleanDirectories(this ICakeContext context, string pattern)
+ public static void CleanDirectories(this ICakeContext context, GlobPattern pattern)
{
var directories = context.GetDirectories(pattern);
if (directories.Count == 0)
@@ -180,7 +180,7 @@ public static void CleanDirectories(this ICakeContext context, string pattern)
/// The predicate used to filter directories based on file system information.
[CakeMethodAlias]
[CakeAliasCategory("Clean")]
- public static void CleanDirectories(this ICakeContext context, string pattern, Func predicate)
+ public static void CleanDirectories(this ICakeContext context, GlobPattern pattern, Func predicate)
{
var directories = context.GetDirectories(pattern, new GlobberSettings { Predicate = predicate });
if (directories.Count == 0)
diff --git a/src/Cake.Common/IO/FileAliases.cs b/src/Cake.Common/IO/FileAliases.cs
index 7ca10ee925..eac90d6ca5 100644
--- a/src/Cake.Common/IO/FileAliases.cs
+++ b/src/Cake.Common/IO/FileAliases.cs
@@ -100,7 +100,7 @@ public static void CopyFile(this ICakeContext context, FilePath filePath, FilePa
///
[CakeMethodAlias]
[CakeAliasCategory("Copy")]
- public static void CopyFiles(this ICakeContext context, string pattern, DirectoryPath targetDirectoryPath)
+ public static void CopyFiles(this ICakeContext context, GlobPattern pattern, DirectoryPath targetDirectoryPath)
{
FileCopier.CopyFiles(context, pattern, targetDirectoryPath, false);
}
@@ -166,7 +166,7 @@ public static void CopyFiles(this ICakeContext context, IEnumerable file
///
[CakeMethodAlias]
[CakeAliasCategory("Copy")]
- public static void CopyFiles(this ICakeContext context, string pattern, DirectoryPath targetDirectoryPath, bool preserveFolderStructure)
+ public static void CopyFiles(this ICakeContext context, GlobPattern pattern, DirectoryPath targetDirectoryPath, bool preserveFolderStructure)
{
FileCopier.CopyFiles(context, pattern, targetDirectoryPath, preserveFolderStructure);
}
@@ -251,7 +251,7 @@ public static void MoveFileToDirectory(this ICakeContext context, FilePath fileP
///
[CakeMethodAlias]
[CakeAliasCategory("Move")]
- public static void MoveFiles(this ICakeContext context, string pattern, DirectoryPath targetDirectoryPath)
+ public static void MoveFiles(this ICakeContext context, GlobPattern pattern, DirectoryPath targetDirectoryPath)
{
FileMover.MoveFiles(context, pattern, targetDirectoryPath);
}
@@ -305,7 +305,7 @@ public static void MoveFile(this ICakeContext context, FilePath filePath, FilePa
///
[CakeMethodAlias]
[CakeAliasCategory("Delete")]
- public static void DeleteFiles(this ICakeContext context, string pattern)
+ public static void DeleteFiles(this ICakeContext context, GlobPattern pattern)
{
FileDeleter.DeleteFiles(context, pattern);
}
diff --git a/src/Cake.Common/IO/FileCopier.cs b/src/Cake.Common/IO/FileCopier.cs
index bb59bcfb48..26ed8ea937 100644
--- a/src/Cake.Common/IO/FileCopier.cs
+++ b/src/Cake.Common/IO/FileCopier.cs
@@ -60,7 +60,7 @@ public static void CopyFile(ICakeContext context, FilePath filePath, FilePath ta
CopyFileCore(context, filePath, targetFilePath, null);
}
- public static void CopyFiles(ICakeContext context, string pattern, DirectoryPath targetDirectoryPath, bool preserverFolderStructure)
+ public static void CopyFiles(ICakeContext context, GlobPattern pattern, DirectoryPath targetDirectoryPath, bool preserverFolderStructure)
{
if (context == null)
{
diff --git a/src/Cake.Common/IO/FileDeleter.cs b/src/Cake.Common/IO/FileDeleter.cs
index 252e3f80b4..b1b884a3b0 100644
--- a/src/Cake.Common/IO/FileDeleter.cs
+++ b/src/Cake.Common/IO/FileDeleter.cs
@@ -14,7 +14,7 @@ namespace Cake.Common.IO
{
internal static class FileDeleter
{
- public static void DeleteFiles(ICakeContext context, string pattern)
+ public static void DeleteFiles(ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
diff --git a/src/Cake.Common/IO/FileMover.cs b/src/Cake.Common/IO/FileMover.cs
index 1e7dde1cf0..b41c48e687 100644
--- a/src/Cake.Common/IO/FileMover.cs
+++ b/src/Cake.Common/IO/FileMover.cs
@@ -31,7 +31,7 @@ public static void MoveFileToDirectory(ICakeContext context, FilePath filePath,
MoveFile(context, filePath, targetDirectoryPath.GetFilePath(filePath));
}
- public static void MoveFiles(ICakeContext context, string pattern, DirectoryPath targetDirectoryPath)
+ public static void MoveFiles(ICakeContext context, GlobPattern pattern, DirectoryPath targetDirectoryPath)
{
if (context == null)
{
diff --git a/src/Cake.Common/IO/GlobbingAliases.cs b/src/Cake.Common/IO/GlobbingAliases.cs
index d43ed5d9d2..20ba938dd1 100644
--- a/src/Cake.Common/IO/GlobbingAliases.cs
+++ b/src/Cake.Common/IO/GlobbingAliases.cs
@@ -33,7 +33,7 @@ public static class GlobbingAliases
/// A .
[CakeMethodAlias]
[CakeAliasCategory("Files")]
- public static FilePathCollection GetFiles(this ICakeContext context, string pattern)
+ public static FilePathCollection GetFiles(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -65,7 +65,7 @@ public static FilePathCollection GetFiles(this ICakeContext context, string patt
/// A .
[CakeMethodAlias]
[CakeAliasCategory("Files")]
- public static FilePathCollection GetFiles(this ICakeContext context, string pattern, GlobberSettings settings)
+ public static FilePathCollection GetFiles(this ICakeContext context, GlobPattern pattern, GlobberSettings settings)
{
if (context == null)
{
@@ -92,7 +92,7 @@ public static FilePathCollection GetFiles(this ICakeContext context, string patt
/// A .
[CakeMethodAlias]
[CakeAliasCategory("Directories")]
- public static DirectoryPathCollection GetDirectories(this ICakeContext context, string pattern)
+ public static DirectoryPathCollection GetDirectories(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -124,7 +124,7 @@ public static DirectoryPathCollection GetDirectories(this ICakeContext context,
/// A .
[CakeMethodAlias]
[CakeAliasCategory("Directories")]
- public static DirectoryPathCollection GetDirectories(this ICakeContext context, string pattern, GlobberSettings settings)
+ public static DirectoryPathCollection GetDirectories(this ICakeContext context, GlobPattern pattern, GlobberSettings settings)
{
if (context == null)
{
@@ -151,7 +151,7 @@ public static DirectoryPathCollection GetDirectories(this ICakeContext context,
/// A .
[CakeMethodAlias]
[CakeAliasCategory("Paths")]
- public static PathCollection GetPaths(this ICakeContext context, string pattern)
+ public static PathCollection GetPaths(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -183,7 +183,7 @@ public static PathCollection GetPaths(this ICakeContext context, string pattern)
/// A .
[CakeMethodAlias]
[CakeAliasCategory("Paths")]
- public static PathCollection GetPaths(this ICakeContext context, string pattern, GlobberSettings settings)
+ public static PathCollection GetPaths(this ICakeContext context, GlobPattern pattern, GlobberSettings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Security/DirectoryHashCalculator.cs b/src/Cake.Common/Security/DirectoryHashCalculator.cs
index 7ba64c7b7e..c226c08be6 100644
--- a/src/Cake.Common/Security/DirectoryHashCalculator.cs
+++ b/src/Cake.Common/Security/DirectoryHashCalculator.cs
@@ -56,7 +56,7 @@ public DirectoryHashCalculator(ICakeContext context, IHashAlgorithmBuilder hashA
///
public DirectoryHash Calculate(
DirectoryPath directoryPath,
- IEnumerable pattern,
+ IEnumerable pattern,
HashAlgorithm hashAlgorithm)
{
if (directoryPath == null)
@@ -104,9 +104,44 @@ public DirectoryHash Calculate(
}
}
+ ///
+ /// Calculates the hash for a given directory.
+ ///
+ /// The directory path.
+ /// The glob pattern to match.
+ /// The hash algorithm to use.
+ /// A instance representing the calculated hash.
+ ///
+ ///
+ /// Information(
+ /// "Cake It calculates the hashes from all cs files in all subdirectories using a MD5 hash: {0}",
+ /// CalculateDirectoryHash("C:\directoryToHash", "./**/*.cs", HashAlgorithm.MD5).ToHex());
+ ///
+ ///
+ public DirectoryHash Calculate(
+ DirectoryPath directoryPath,
+ IEnumerable pattern,
+ HashAlgorithm hashAlgorithm)
+ {
+ if (directoryPath == null)
+ {
+ throw new ArgumentNullException(nameof(directoryPath));
+ }
+
+ if (pattern == null)
+ {
+ throw new ArgumentNullException(nameof(pattern));
+ }
+
+ return Calculate(
+ directoryPath,
+ pattern.Select(GlobPattern.FromString),
+ hashAlgorithm);
+ }
+
private FilePathCollection GetDirectoryFiles(
DirectoryPath directoryPath,
- IEnumerable pattern)
+ IEnumerable pattern)
{
var directory = new Directory(directoryPath);
@@ -118,7 +153,7 @@ private FilePathCollection GetDirectoryFiles(
}
var filePathCollection = new FilePathCollection();
- var fullGlobs = pattern.Select(x => directoryPath + x).ToArray();
+ var fullGlobs = pattern.Select(x => directoryPath + x.Pattern).ToArray();
foreach (var glob in fullGlobs)
{
diff --git a/src/Cake.Common/Security/SecurityAliases.cs b/src/Cake.Common/Security/SecurityAliases.cs
index 31c73e5b7a..33611b7efe 100644
--- a/src/Cake.Common/Security/SecurityAliases.cs
+++ b/src/Cake.Common/Security/SecurityAliases.cs
@@ -62,6 +62,55 @@ public static FileHash CalculateFileHash(this ICakeContext context, FilePath fil
return fileHashCalculator.Calculate(filePath, hashAlgorithm);
}
+ ///
+ /// Calculates the hash for a given directory using the default (SHA256) algorithm.
+ ///
+ /// The context.
+ /// The file path.
+ /// The glob pattern to match.
+ /// A instance representing the calculated hash.
+ ///
+ ///
+ /// Information(
+ /// "Cake It calculates the hashes from all cs files in all subdirectories using a SHA256 hash: {0}",
+ /// CalculateDirectoryHash("C:\directoryToHash", "./**/*.cs").ToHex());
+ ///
+ ///
+ [CakeMethodAlias]
+ public static DirectoryHash CalculateDirectoryHash(this ICakeContext context,
+ IEnumerable globs, DirectoryPath directoryPath)
+ {
+ return CalculateDirectoryHash(context, directoryPath, globs, HashAlgorithm.SHA256);
+ }
+
+ ///
+ /// Calculates the hash for a given directory.
+ ///
+ /// The context.
+ /// The file path.
+ /// The glob pattern to match.
+ /// The hash algorithm to use.
+ /// A instance representing the calculated hash.
+ ///
+ ///
+ /// Information(
+ /// "Cake It calculates the hashes from all cs files in all subdirectories using a MD5 hash: {0}",
+ /// CalculateDirectoryHash("C:\directoryToHash", "./**/*.cs", HashAlgorithm.MD5).ToHex());
+ ///
+ ///
+ [CakeMethodAlias]
+ public static DirectoryHash CalculateDirectoryHash(this ICakeContext context,
+ DirectoryPath directoryPath, IEnumerable globs, HashAlgorithm hashAlgorithm)
+ {
+ if (context == null)
+ {
+ throw new ArgumentNullException(nameof(context));
+ }
+
+ var directoryHashCalculator = new DirectoryHashCalculator(context, new HashAlgorithmBuilder());
+ return directoryHashCalculator.Calculate(directoryPath, globs, hashAlgorithm);
+ }
+
///
/// Calculates the hash for a given directory using the default (SHA256) algorithm.
///
diff --git a/src/Cake.Common/Solution/Project/XmlDoc/XmlDocAliases.cs b/src/Cake.Common/Solution/Project/XmlDoc/XmlDocAliases.cs
index e81cdf62bb..2d6c988bb2 100644
--- a/src/Cake.Common/Solution/Project/XmlDoc/XmlDocAliases.cs
+++ b/src/Cake.Common/Solution/Project/XmlDoc/XmlDocAliases.cs
@@ -72,14 +72,14 @@ public static IEnumerable ParseXmlDocExampleCode(this ICakeCo
///
///
[CakeMethodAlias]
- public static IEnumerable ParseXmlDocFilesExampleCode(this ICakeContext context, string pattern)
+ public static IEnumerable ParseXmlDocFilesExampleCode(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}
- if (string.IsNullOrWhiteSpace(pattern))
+ if (string.IsNullOrWhiteSpace(pattern?.Pattern))
{
throw new ArgumentNullException(nameof(pattern));
}
diff --git a/src/Cake.Common/Solution/Project/XmlDoc/XmlDocExampleCodeParser.cs b/src/Cake.Common/Solution/Project/XmlDoc/XmlDocExampleCodeParser.cs
index b8e1d9eb36..f162b2e5f8 100644
--- a/src/Cake.Common/Solution/Project/XmlDoc/XmlDocExampleCodeParser.cs
+++ b/src/Cake.Common/Solution/Project/XmlDoc/XmlDocExampleCodeParser.cs
@@ -90,9 +90,9 @@ from code in example.Elements("code")
///
/// The globber file pattern.
/// Parsed Example Code.
- public IEnumerable ParseFiles(string pattern)
+ public IEnumerable ParseFiles(GlobPattern pattern)
{
- if (string.IsNullOrWhiteSpace(pattern))
+ if (string.IsNullOrWhiteSpace(pattern?.Pattern))
{
throw new ArgumentNullException(nameof(pattern), "Invalid pattern supplied.");
}
diff --git a/src/Cake.Common/Tools/DotNetCore/DotNetCoreAliases.cs b/src/Cake.Common/Tools/DotNetCore/DotNetCoreAliases.cs
index 49b5ce3348..77ddf6b4bb 100644
--- a/src/Cake.Common/Tools/DotNetCore/DotNetCoreAliases.cs
+++ b/src/Cake.Common/Tools/DotNetCore/DotNetCoreAliases.cs
@@ -1276,7 +1276,7 @@ public static void DotNetCoreMSBuild(this ICakeContext context, string projectOr
[CakeMethodAlias]
[CakeAliasCategory("Test")]
[CakeNamespaceImport("Cake.Common.Tools.DotNetCore.VSTest")]
- public static void DotNetCoreVSTest(this ICakeContext context, string testFile) => context.DotNetCoreVSTest(testFile, null);
+ public static void DotNetCoreVSTest(this ICakeContext context, GlobPattern testFile) => context.DotNetCoreVSTest(testFile, null);
///
/// Test one or more projects specified by a path or glob pattern with settings using the VS Test host runner.
@@ -1310,7 +1310,7 @@ public static void DotNetCoreMSBuild(this ICakeContext context, string projectOr
[CakeMethodAlias]
[CakeAliasCategory("Test")]
[CakeNamespaceImport("Cake.Common.Tools.DotNetCore.VSTest")]
- public static void DotNetCoreVSTest(this ICakeContext context, string testFile, DotNetCoreVSTestSettings settings)
+ public static void DotNetCoreVSTest(this ICakeContext context, GlobPattern testFile, DotNetCoreVSTestSettings settings)
{
var testFiles = context.GetFiles(testFile);
diff --git a/src/Cake.Common/Tools/DupFinder/DupFinderAliases.cs b/src/Cake.Common/Tools/DupFinder/DupFinderAliases.cs
index b3a53511d4..20303b890f 100644
--- a/src/Cake.Common/Tools/DupFinder/DupFinderAliases.cs
+++ b/src/Cake.Common/Tools/DupFinder/DupFinderAliases.cs
@@ -145,7 +145,7 @@ public static void DupFinder(this ICakeContext context, IEnumerable fi
///
[CakeMethodAlias]
[CakeAliasCategory("DupFinder")]
- public static void DupFinder(this ICakeContext context, string pattern)
+ public static void DupFinder(this ICakeContext context, GlobPattern pattern)
{
DupFinder(context, pattern, new DupFinderSettings());
}
@@ -169,7 +169,7 @@ public static void DupFinder(this ICakeContext context, string pattern)
///
[CakeMethodAlias]
[CakeAliasCategory("DupFinder")]
- public static void DupFinder(this ICakeContext context, string pattern, DupFinderSettings settings)
+ public static void DupFinder(this ICakeContext context, GlobPattern pattern, DupFinderSettings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/Fixie/FixieAliases.cs b/src/Cake.Common/Tools/Fixie/FixieAliases.cs
index 1c2b4b5356..ad377208ac 100644
--- a/src/Cake.Common/Tools/Fixie/FixieAliases.cs
+++ b/src/Cake.Common/Tools/Fixie/FixieAliases.cs
@@ -36,7 +36,7 @@ public static class FixieAliases
/// The context.
/// The pattern.
[CakeMethodAlias]
- public static void Fixie(this ICakeContext context, string pattern)
+ public static void Fixie(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -68,7 +68,7 @@ public static void Fixie(this ICakeContext context, string pattern)
/// The pattern.
/// The settings.
[CakeMethodAlias]
- public static void Fixie(this ICakeContext context, string pattern, FixieSettings settings)
+ public static void Fixie(this ICakeContext context, GlobPattern pattern, FixieSettings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/MSTest/MSTestAliases.cs b/src/Cake.Common/Tools/MSTest/MSTestAliases.cs
index 74f48c9c25..58b3385e32 100644
--- a/src/Cake.Common/Tools/MSTest/MSTestAliases.cs
+++ b/src/Cake.Common/Tools/MSTest/MSTestAliases.cs
@@ -34,7 +34,7 @@ public static class MSTestAliases
/// The context.
/// The pattern.
[CakeMethodAlias]
- public static void MSTest(this ICakeContext context, string pattern)
+ public static void MSTest(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -63,7 +63,7 @@ public static void MSTest(this ICakeContext context, string pattern)
/// The pattern.
/// The settings.
[CakeMethodAlias]
- public static void MSTest(this ICakeContext context, string pattern, MSTestSettings settings)
+ public static void MSTest(this ICakeContext context, GlobPattern pattern, MSTestSettings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/MSpec/MSpecAliases.cs b/src/Cake.Common/Tools/MSpec/MSpecAliases.cs
index fae4fcdccb..f3542cc99c 100644
--- a/src/Cake.Common/Tools/MSpec/MSpecAliases.cs
+++ b/src/Cake.Common/Tools/MSpec/MSpecAliases.cs
@@ -36,7 +36,7 @@ public static class MSpecAliases
///
///
[CakeMethodAlias]
- public static void MSpec(this ICakeContext context, string pattern)
+ public static void MSpec(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -71,7 +71,7 @@ public static void MSpec(this ICakeContext context, string pattern)
///
///
[CakeMethodAlias]
- public static void MSpec(this ICakeContext context, string pattern, MSpecSettings settings)
+ public static void MSpec(this ICakeContext context, GlobPattern pattern, MSpecSettings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/NUnit/NUnit3Aliases.cs b/src/Cake.Common/Tools/NUnit/NUnit3Aliases.cs
index a2cf0e8ec2..d9da0bbe1b 100644
--- a/src/Cake.Common/Tools/NUnit/NUnit3Aliases.cs
+++ b/src/Cake.Common/Tools/NUnit/NUnit3Aliases.cs
@@ -36,7 +36,7 @@ public static class NUnit3Aliases
///
///
[CakeMethodAlias]
- public static void NUnit3(this ICakeContext context, string pattern)
+ public static void NUnit3(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -68,7 +68,7 @@ public static void NUnit3(this ICakeContext context, string pattern)
///
///
[CakeMethodAlias]
- public static void NUnit3(this ICakeContext context, string pattern, NUnit3Settings settings)
+ public static void NUnit3(this ICakeContext context, GlobPattern pattern, NUnit3Settings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/NUnit/NUnitAliases.cs b/src/Cake.Common/Tools/NUnit/NUnitAliases.cs
index d87e029123..f8f2a8eb51 100644
--- a/src/Cake.Common/Tools/NUnit/NUnitAliases.cs
+++ b/src/Cake.Common/Tools/NUnit/NUnitAliases.cs
@@ -36,7 +36,7 @@ public static class NUnitAliases
/// The context.
/// The pattern.
[CakeMethodAlias]
- public static void NUnit(this ICakeContext context, string pattern)
+ public static void NUnit(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -69,7 +69,7 @@ public static void NUnit(this ICakeContext context, string pattern)
/// The pattern.
/// The settings.
[CakeMethodAlias]
- public static void NUnit(this ICakeContext context, string pattern, NUnitSettings settings)
+ public static void NUnit(this ICakeContext context, GlobPattern pattern, NUnitSettings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/ReportGenerator/ReportGeneratorAliases.cs b/src/Cake.Common/Tools/ReportGenerator/ReportGeneratorAliases.cs
index 6160afb301..0f41f9b60b 100644
--- a/src/Cake.Common/Tools/ReportGenerator/ReportGeneratorAliases.cs
+++ b/src/Cake.Common/Tools/ReportGenerator/ReportGeneratorAliases.cs
@@ -35,7 +35,7 @@ public static class ReportGeneratorAliases
///
///
[CakeMethodAlias]
- public static void ReportGenerator(this ICakeContext context, string pattern, DirectoryPath targetDir)
+ public static void ReportGenerator(this ICakeContext context, GlobPattern pattern, DirectoryPath targetDir)
{
if (context == null)
{
@@ -60,7 +60,7 @@ public static void ReportGenerator(this ICakeContext context, string pattern, Di
///
///
[CakeMethodAlias]
- public static void ReportGenerator(this ICakeContext context, string pattern, DirectoryPath targetDir, ReportGeneratorSettings settings)
+ public static void ReportGenerator(this ICakeContext context, GlobPattern pattern, DirectoryPath targetDir, ReportGeneratorSettings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/VSTest/VSTestAliases.cs b/src/Cake.Common/Tools/VSTest/VSTestAliases.cs
index ea240e0125..1987e764a3 100644
--- a/src/Cake.Common/Tools/VSTest/VSTestAliases.cs
+++ b/src/Cake.Common/Tools/VSTest/VSTestAliases.cs
@@ -29,7 +29,7 @@ public static class VSTestAliases
/// The context.
/// The pattern.
[CakeMethodAlias]
- public static void VSTest(this ICakeContext context, string pattern)
+ public static void VSTest(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -58,7 +58,7 @@ public static void VSTest(this ICakeContext context, string pattern)
/// The pattern.
/// The settings.
[CakeMethodAlias]
- public static void VSTest(this ICakeContext context, string pattern, VSTestSettings settings)
+ public static void VSTest(this ICakeContext context, GlobPattern pattern, VSTestSettings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/WiX/WiXAliases.cs b/src/Cake.Common/Tools/WiX/WiXAliases.cs
index 4b7ed0109c..9940f548b5 100644
--- a/src/Cake.Common/Tools/WiX/WiXAliases.cs
+++ b/src/Cake.Common/Tools/WiX/WiXAliases.cs
@@ -43,7 +43,7 @@ public static class WiXAliases
/// The settings.
[CakeMethodAlias]
[CakeAliasCategory("Candle")]
- public static void WiXCandle(this ICakeContext context, string pattern, CandleSettings settings = null)
+ public static void WiXCandle(this ICakeContext context, GlobPattern pattern, CandleSettings settings = null)
{
if (context == null)
{
@@ -105,7 +105,7 @@ public static void WiXCandle(this ICakeContext context, IEnumerable so
/// The settings.
[CakeMethodAlias]
[CakeAliasCategory("Light")]
- public static void WiXLight(this ICakeContext context, string pattern, LightSettings settings = null)
+ public static void WiXLight(this ICakeContext context, GlobPattern pattern, LightSettings settings = null)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/XUnit/XUnit2Aliases.cs b/src/Cake.Common/Tools/XUnit/XUnit2Aliases.cs
index ff4764c234..65c540939e 100644
--- a/src/Cake.Common/Tools/XUnit/XUnit2Aliases.cs
+++ b/src/Cake.Common/Tools/XUnit/XUnit2Aliases.cs
@@ -36,7 +36,7 @@ public static class XUnit2Aliases
///
///
[CakeMethodAlias]
- public static void XUnit2(this ICakeContext context, string pattern)
+ public static void XUnit2(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -71,7 +71,7 @@ public static void XUnit2(this ICakeContext context, string pattern)
///
///
[CakeMethodAlias]
- public static void XUnit2(this ICakeContext context, string pattern, XUnit2Settings settings)
+ public static void XUnit2(this ICakeContext context, GlobPattern pattern, XUnit2Settings settings)
{
if (context == null)
{
diff --git a/src/Cake.Common/Tools/XUnit/XUnitAliases.cs b/src/Cake.Common/Tools/XUnit/XUnitAliases.cs
index ff992ced8e..64422b84cc 100644
--- a/src/Cake.Common/Tools/XUnit/XUnitAliases.cs
+++ b/src/Cake.Common/Tools/XUnit/XUnitAliases.cs
@@ -35,7 +35,7 @@ public static class XUnitAliases
///
///
[CakeMethodAlias]
- public static void XUnit(this ICakeContext context, string pattern)
+ public static void XUnit(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
@@ -62,7 +62,7 @@ public static void XUnit(this ICakeContext context, string pattern)
///
///
[CakeMethodAlias]
- public static void XUnit(this ICakeContext context, string pattern, XUnitSettings settings)
+ public static void XUnit(this ICakeContext context, GlobPattern pattern, XUnitSettings settings)
{
if (context == null)
{
diff --git a/src/Cake.Core/IO/GlobPattern.cs b/src/Cake.Core/IO/GlobPattern.cs
new file mode 100644
index 0000000000..eb632c77cc
--- /dev/null
+++ b/src/Cake.Core/IO/GlobPattern.cs
@@ -0,0 +1,90 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System.Collections.Generic;
+
+namespace Cake.Core.IO
+{
+ ///
+ /// The file system globber pattern.
+ ///
+ public sealed class GlobPattern
+ {
+ ///
+ /// Gets the the globber pattern.
+ ///
+ public string Pattern { get; }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ /// The globber pattern.
+ public GlobPattern(string pattern)
+ {
+ Pattern = pattern;
+ }
+
+ ///
+ /// Performs an implicit conversion from to .
+ ///
+ /// The string pattern.
+ /// A .
+ public static implicit operator GlobPattern(string pattern)
+ {
+ return pattern is null ? null : FromString(pattern);
+ }
+
+ ///
+ /// Performs an implicit conversion from to .
+ ///
+ /// The glob pattern.
+ /// A .
+ public static implicit operator string(GlobPattern pattern)
+ {
+ return pattern?.Pattern;
+ }
+
+ ///
+ /// Performs a conversion from to .
+ ///
+ /// The pattern.
+ /// A .
+ public static GlobPattern FromString(string pattern)
+ {
+ return new GlobPattern(pattern);
+ }
+
+ ///
+ /// Determines whether two . instances are equal.
+ ///
+ /// The object to compare with the current object.
+ ///
+ /// true if the specified object is equal to the current object; otherwise, false.
+ ///
+ public override bool Equals(object obj)
+ {
+ return obj is GlobPattern pattern &&
+ Pattern == pattern.Pattern;
+ }
+
+ ///
+ /// Returns the hash code for the .
+ ///
+ ///
+ /// A 32-bit signed integer hash code.
+ ///
+ public override int GetHashCode()
+ {
+ return -891421391 + EqualityComparer.Default.GetHashCode(Pattern);
+ }
+
+ ///
+ /// Returns a that represents this instance.
+ ///
+ ///
+ /// A that represents this instance.
+ ///
+ public override string ToString() => Pattern;
+ }
+}
\ No newline at end of file
diff --git a/src/Cake.Core/IO/Globber.cs b/src/Cake.Core/IO/Globber.cs
index aeda643b3f..4ede141907 100644
--- a/src/Cake.Core/IO/Globber.cs
+++ b/src/Cake.Core/IO/Globber.cs
@@ -49,13 +49,13 @@ public Globber(IFileSystem fileSystem, ICakeEnvironment environment)
///
/// instances matching the specified pattern.
///
- public IEnumerable Match(string pattern, GlobberSettings settings)
+ public IEnumerable Match(GlobPattern pattern, GlobberSettings settings)
{
if (pattern == null)
{
throw new ArgumentNullException(nameof(pattern));
}
- if (string.IsNullOrWhiteSpace(pattern))
+ if (string.IsNullOrWhiteSpace(pattern?.Pattern))
{
return Enumerable.Empty();
}
diff --git a/src/Cake.Core/IO/GlobberExtensions.cs b/src/Cake.Core/IO/GlobberExtensions.cs
index 7ccd7e954d..4c44144449 100644
--- a/src/Cake.Core/IO/GlobberExtensions.cs
+++ b/src/Cake.Core/IO/GlobberExtensions.cs
@@ -19,7 +19,7 @@ public static class GlobberExtensions
/// The globber.
/// The pattern.
/// The files matching the specified pattern.
- public static IEnumerable GetFiles(this IGlobber globber, string pattern)
+ public static IEnumerable GetFiles(this IGlobber globber, GlobPattern pattern)
{
if (globber == null)
{
@@ -34,7 +34,7 @@ public static IEnumerable GetFiles(this IGlobber globber, string patte
/// The globber.
/// The pattern.
/// The directories matching the specified pattern.
- public static IEnumerable GetDirectories(this IGlobber globber, string pattern)
+ public static IEnumerable GetDirectories(this IGlobber globber, GlobPattern pattern)
{
if (globber == null)
{
@@ -51,7 +51,7 @@ public static IEnumerable GetDirectories(this IGlobber globber, s
///
/// instances matching the specified pattern.
///
- public static IEnumerable Match(this IGlobber globber, string pattern)
+ public static IEnumerable Match(this IGlobber globber, GlobPattern pattern)
{
if (globber == null)
{
diff --git a/src/Cake.Core/IO/Globbing/GlobNodeRewriter.cs b/src/Cake.Core/IO/Globbing/GlobNodeRewriter.cs
index 776ce0b084..495e66106f 100644
--- a/src/Cake.Core/IO/Globbing/GlobNodeRewriter.cs
+++ b/src/Cake.Core/IO/Globbing/GlobNodeRewriter.cs
@@ -10,13 +10,13 @@ namespace Cake.Core.IO.Globbing
{
internal static class GlobNodeRewriter
{
- public static GlobNode Rewrite(string pattern, IEnumerable nodes)
+ public static GlobNode Rewrite(GlobPattern pattern, IEnumerable nodes)
{
return RewriteUncRoot(pattern, CreateLinkedList(
RewriteSingleWildcards(nodes)));
}
- private static GlobNode RewriteUncRoot(string pattern, GlobNode root)
+ private static GlobNode RewriteUncRoot(GlobPattern pattern, GlobNode root)
{
if (root is UncRootNode unc && unc.Server == null)
{
diff --git a/src/Cake.Core/IO/Globbing/GlobNodeValidator.cs b/src/Cake.Core/IO/Globbing/GlobNodeValidator.cs
index 1dc1885264..fdab065af3 100644
--- a/src/Cake.Core/IO/Globbing/GlobNodeValidator.cs
+++ b/src/Cake.Core/IO/Globbing/GlobNodeValidator.cs
@@ -9,7 +9,7 @@ namespace Cake.Core.IO.Globbing
{
internal static class GlobNodeValidator
{
- public static void Validate(string pattern, GlobNode node)
+ public static void Validate(GlobPattern pattern, GlobNode node)
{
var previous = (GlobNode)null;
var current = node;
diff --git a/src/Cake.Core/IO/Globbing/GlobParser.cs b/src/Cake.Core/IO/Globbing/GlobParser.cs
index bdccdff239..bec4114a7e 100644
--- a/src/Cake.Core/IO/Globbing/GlobParser.cs
+++ b/src/Cake.Core/IO/Globbing/GlobParser.cs
@@ -24,7 +24,7 @@ public GlobParser(ICakeEnvironment environment)
_environment = environment;
}
- public GlobNode Parse(string pattern, GlobberSettings settings)
+ public GlobNode Parse(GlobPattern pattern, GlobberSettings settings)
{
var buffer = GlobTokenizer.Tokenize(pattern);
var isCaseSensitive = settings.IsCaseSensitive ?? _environment.Platform.IsUnix();
diff --git a/src/Cake.Core/IO/Globbing/GlobParserContext.cs b/src/Cake.Core/IO/Globbing/GlobParserContext.cs
index 95d910a955..e7aa2a6b5b 100644
--- a/src/Cake.Core/IO/Globbing/GlobParserContext.cs
+++ b/src/Cake.Core/IO/Globbing/GlobParserContext.cs
@@ -12,12 +12,12 @@ internal sealed class GlobParserContext
{
private readonly GlobTokenBuffer _buffer;
- public string Pattern { get; }
+ public GlobPattern Pattern { get; }
public int TokenCount => _buffer.Count;
public GlobToken CurrentToken { get; private set; }
public RegexOptions Options { get; }
- public GlobParserContext(string pattern, GlobTokenBuffer buffer, bool caseSensitive)
+ public GlobParserContext(GlobPattern pattern, GlobTokenBuffer buffer, bool caseSensitive)
{
_buffer = buffer;
diff --git a/src/Cake.Core/IO/Globbing/GlobTokenizer.cs b/src/Cake.Core/IO/Globbing/GlobTokenizer.cs
index ed48a8c905..edbc106df6 100644
--- a/src/Cake.Core/IO/Globbing/GlobTokenizer.cs
+++ b/src/Cake.Core/IO/Globbing/GlobTokenizer.cs
@@ -13,9 +13,9 @@ namespace Cake.Core.IO.Globbing
{
internal static class GlobTokenizer
{
- public static GlobTokenBuffer Tokenize(string input)
+ public static GlobTokenBuffer Tokenize(GlobPattern input)
{
- return Tokenize(new StringReader(input));
+ return Tokenize(new StringReader(input.Pattern));
}
private static GlobTokenBuffer Tokenize(StringReader reader)
diff --git a/src/Cake.Core/IO/IGlobber.cs b/src/Cake.Core/IO/IGlobber.cs
index 3c75aa37a8..fff992db50 100644
--- a/src/Cake.Core/IO/IGlobber.cs
+++ b/src/Cake.Core/IO/IGlobber.cs
@@ -20,6 +20,6 @@ public interface IGlobber
///
/// instances matching the specified pattern.
///
- IEnumerable Match(string pattern, GlobberSettings settings);
+ IEnumerable Match(GlobPattern pattern, GlobberSettings settings);
}
}
\ No newline at end of file