Skip to content

Commit

Permalink
(cake-buildGH-2199) Add GlobPattern class
Browse files Browse the repository at this point in the history
  • Loading branch information
devlead committed Oct 22, 2020
1 parent 6ed66fb commit fb87ca2
Show file tree
Hide file tree
Showing 32 changed files with 235 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
4 changes: 2 additions & 2 deletions src/Cake.Common/IO/DirectoryAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ public static void DeleteDirectory(this ICakeContext context, DirectoryPath path
/// <param name="pattern">The pattern to match.</param>
[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)
Expand Down Expand Up @@ -180,7 +180,7 @@ public static void CleanDirectories(this ICakeContext context, string pattern)
/// <param name="predicate">The predicate used to filter directories based on file system information.</param>
[CakeMethodAlias]
[CakeAliasCategory("Clean")]
public static void CleanDirectories(this ICakeContext context, string pattern, Func<IFileSystemInfo, bool> predicate)
public static void CleanDirectories(this ICakeContext context, GlobPattern pattern, Func<IFileSystemInfo, bool> predicate)
{
var directories = context.GetDirectories(pattern, new GlobberSettings { Predicate = predicate });
if (directories.Count == 0)
Expand Down
8 changes: 4 additions & 4 deletions src/Cake.Common/IO/FileAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ public static void CopyFile(this ICakeContext context, FilePath filePath, FilePa
/// </example>
[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);
}
Expand Down Expand Up @@ -166,7 +166,7 @@ public static void CopyFiles(this ICakeContext context, IEnumerable<string> file
/// </example>
[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);
}
Expand Down Expand Up @@ -251,7 +251,7 @@ public static void MoveFileToDirectory(this ICakeContext context, FilePath fileP
/// </example>
[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);
}
Expand Down Expand Up @@ -305,7 +305,7 @@ public static void MoveFile(this ICakeContext context, FilePath filePath, FilePa
/// </example>
[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);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Cake.Common/IO/FileCopier.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
2 changes: 1 addition & 1 deletion src/Cake.Common/IO/FileDeleter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
2 changes: 1 addition & 1 deletion src/Cake.Common/IO/FileMover.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down
12 changes: 6 additions & 6 deletions src/Cake.Common/IO/GlobbingAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public static class GlobbingAliases
/// <returns>A <see cref="FilePathCollection" />.</returns>
[CakeMethodAlias]
[CakeAliasCategory("Files")]
public static FilePathCollection GetFiles(this ICakeContext context, string pattern)
public static FilePathCollection GetFiles(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
Expand Down Expand Up @@ -65,7 +65,7 @@ public static FilePathCollection GetFiles(this ICakeContext context, string patt
/// <returns>A <see cref="FilePathCollection" />.</returns>
[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)
{
Expand All @@ -92,7 +92,7 @@ public static FilePathCollection GetFiles(this ICakeContext context, string patt
/// <returns>A <see cref="DirectoryPathCollection" />.</returns>
[CakeMethodAlias]
[CakeAliasCategory("Directories")]
public static DirectoryPathCollection GetDirectories(this ICakeContext context, string pattern)
public static DirectoryPathCollection GetDirectories(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
Expand Down Expand Up @@ -124,7 +124,7 @@ public static DirectoryPathCollection GetDirectories(this ICakeContext context,
/// <returns>A <see cref="DirectoryPathCollection" />.</returns>
[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)
{
Expand All @@ -151,7 +151,7 @@ public static DirectoryPathCollection GetDirectories(this ICakeContext context,
/// <returns>A <see cref="PathCollection" />.</returns>
[CakeMethodAlias]
[CakeAliasCategory("Paths")]
public static PathCollection GetPaths(this ICakeContext context, string pattern)
public static PathCollection GetPaths(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
Expand Down Expand Up @@ -183,7 +183,7 @@ public static PathCollection GetPaths(this ICakeContext context, string pattern)
/// <returns>A <see cref="PathCollection" />.</returns>
[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)
{
Expand Down
41 changes: 38 additions & 3 deletions src/Cake.Common/Security/DirectoryHashCalculator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public DirectoryHashCalculator(ICakeContext context, IHashAlgorithmBuilder hashA
/// </example>
public DirectoryHash Calculate(
DirectoryPath directoryPath,
IEnumerable<string> pattern,
IEnumerable<GlobPattern> pattern,
HashAlgorithm hashAlgorithm)
{
if (directoryPath == null)
Expand Down Expand Up @@ -104,9 +104,44 @@ public DirectoryHash Calculate(
}
}

/// <summary>
/// Calculates the hash for a given directory.
/// </summary>
/// <param name="directoryPath">The directory path.</param>
/// <param name="pattern">The glob pattern to match.</param>
/// <param name="hashAlgorithm">The hash algorithm to use.</param>
/// <returns>A <see cref="DirectoryHash"/> instance representing the calculated hash.</returns>
/// <example>
/// <code>
/// 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());
/// </code>
/// </example>
public DirectoryHash Calculate(
DirectoryPath directoryPath,
IEnumerable<string> 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<string> pattern)
IEnumerable<GlobPattern> pattern)
{
var directory = new Directory(directoryPath);

Expand All @@ -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)
{
Expand Down
49 changes: 49 additions & 0 deletions src/Cake.Common/Security/SecurityAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,55 @@ public static FileHash CalculateFileHash(this ICakeContext context, FilePath fil
return fileHashCalculator.Calculate(filePath, hashAlgorithm);
}

/// <summary>
/// Calculates the hash for a given directory using the default (SHA256) algorithm.
/// </summary>
/// <param name="context">The context.</param>
/// <param name="directoryPath">The file path.</param>
/// <param name="globs">The glob pattern to match.</param>
/// <returns>A <see cref="DirectoryHash"/> instance representing the calculated hash.</returns>
/// <example>
/// <code>
/// Information(
/// "Cake It calculates the hashes from all cs files in all subdirectories using a SHA256 hash: {0}",
/// CalculateDirectoryHash("C:\directoryToHash", "./**/*.cs").ToHex());
/// </code>
/// </example>
[CakeMethodAlias]
public static DirectoryHash CalculateDirectoryHash(this ICakeContext context,
IEnumerable<GlobPattern> globs, DirectoryPath directoryPath)
{
return CalculateDirectoryHash(context, directoryPath, globs, HashAlgorithm.SHA256);
}

/// <summary>
/// Calculates the hash for a given directory.
/// </summary>
/// <param name="context">The context.</param>
/// <param name="directoryPath">The file path.</param>
/// <param name="globs">The glob pattern to match.</param>
/// <param name="hashAlgorithm">The hash algorithm to use.</param>
/// <returns>A <see cref="DirectoryHash"/> instance representing the calculated hash.</returns>
/// <example>
/// <code>
/// 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());
/// </code>
/// </example>
[CakeMethodAlias]
public static DirectoryHash CalculateDirectoryHash(this ICakeContext context,
DirectoryPath directoryPath, IEnumerable<GlobPattern> globs, HashAlgorithm hashAlgorithm)
{
if (context == null)
{
throw new ArgumentNullException(nameof(context));
}

var directoryHashCalculator = new DirectoryHashCalculator(context, new HashAlgorithmBuilder());
return directoryHashCalculator.Calculate(directoryPath, globs, hashAlgorithm);
}

/// <summary>
/// Calculates the hash for a given directory using the default (SHA256) algorithm.
/// </summary>
Expand Down
4 changes: 2 additions & 2 deletions src/Cake.Common/Solution/Project/XmlDoc/XmlDocAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,14 @@ public static IEnumerable<XmlDocExampleCode> ParseXmlDocExampleCode(this ICakeCo
/// </code>
/// </example>
[CakeMethodAlias]
public static IEnumerable<XmlDocExampleCode> ParseXmlDocFilesExampleCode(this ICakeContext context, string pattern)
public static IEnumerable<XmlDocExampleCode> 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));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,9 +90,9 @@ from code in example.Elements("code")
/// </summary>
/// <param name="pattern">The globber file pattern.</param>
/// <returns>Parsed Example Code.</returns>
public IEnumerable<XmlDocExampleCode> ParseFiles(string pattern)
public IEnumerable<XmlDocExampleCode> ParseFiles(GlobPattern pattern)
{
if (string.IsNullOrWhiteSpace(pattern))
if (string.IsNullOrWhiteSpace(pattern?.Pattern))
{
throw new ArgumentNullException(nameof(pattern), "Invalid pattern supplied.");
}
Expand Down
4 changes: 2 additions & 2 deletions src/Cake.Common/Tools/DotNetCore/DotNetCoreAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);

/// <summary>
/// Test one or more projects specified by a path or glob pattern with settings using the VS Test host runner.
Expand Down Expand Up @@ -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);

Expand Down
4 changes: 2 additions & 2 deletions src/Cake.Common/Tools/DupFinder/DupFinderAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public static void DupFinder(this ICakeContext context, IEnumerable<FilePath> fi
/// </example>
[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());
}
Expand All @@ -169,7 +169,7 @@ public static void DupFinder(this ICakeContext context, string pattern)
/// </example>
[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)
{
Expand Down
4 changes: 2 additions & 2 deletions src/Cake.Common/Tools/Fixie/FixieAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public static class FixieAliases
/// <param name="context">The context.</param>
/// <param name="pattern">The pattern.</param>
[CakeMethodAlias]
public static void Fixie(this ICakeContext context, string pattern)
public static void Fixie(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
Expand Down Expand Up @@ -68,7 +68,7 @@ public static void Fixie(this ICakeContext context, string pattern)
/// <param name="pattern">The pattern.</param>
/// <param name="settings">The settings.</param>
[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)
{
Expand Down
4 changes: 2 additions & 2 deletions src/Cake.Common/Tools/MSTest/MSTestAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ public static class MSTestAliases
/// <param name="context">The context.</param>
/// <param name="pattern">The pattern.</param>
[CakeMethodAlias]
public static void MSTest(this ICakeContext context, string pattern)
public static void MSTest(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
Expand Down Expand Up @@ -63,7 +63,7 @@ public static void MSTest(this ICakeContext context, string pattern)
/// <param name="pattern">The pattern.</param>
/// <param name="settings">The settings.</param>
[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)
{
Expand Down
4 changes: 2 additions & 2 deletions src/Cake.Common/Tools/MSpec/MSpecAliases.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public static class MSpecAliases
/// </code>
/// </example>
[CakeMethodAlias]
public static void MSpec(this ICakeContext context, string pattern)
public static void MSpec(this ICakeContext context, GlobPattern pattern)
{
if (context == null)
{
Expand Down Expand Up @@ -71,7 +71,7 @@ public static void MSpec(this ICakeContext context, string pattern)
/// </code>
/// </example>
[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)
{
Expand Down
Loading

0 comments on commit fb87ca2

Please sign in to comment.