Hi
Some time ago, I did patch the BuildPublisher source to add two new
properties:
SearchPattern: allows to specify a standard wildcard, e.g. "*.bin"
Recurse: allow or disallow recursing into subdirectories
If this is of interest to anybody or indeed if you would like to
integrate this (or a similar approach) to the CruiseControl source,
here's my diff for BuildPublisher.cs:
@@ -69,10 +69,12 @@ namespace ThoughtWorks.CruiseControl.Core.Publishers
this.UseLabelSubDirectory = true;
this.AlwaysPublish = false;
this.CleanPublishDirPriorToCopy = false;
this.CleanUpMethod = CleanupPolicy.NoCleaning;
this.CleanUpValue = 5;
+ this.SearchPattern = null;
+ this.Recurse = false;
}
#endregion
/// <summary>
/// The directory to copy the files to. This path can be
absolute or can be relative to the project's
@@ -111,10 +113,26 @@ namespace
ThoughtWorks.CruiseControl.Core.Publishers
/// <default>false</default>
[ReflectorProperty("alwaysPublish", Required = false)]
public bool AlwaysPublish { get; set; }
/// <summary>
+ /// Wildcard pattern for file publisher.
+ /// </summary>
+ /// <version>?.?.?</version>
+ /// <default>n/a</default>
+ [ReflectorProperty("searchPattern", Required = false)]
+ public string SearchPattern { get; set; }
+
+ /// <summary>
+ /// Whether or not to recurse into subdirectories.
+ /// </summary>
+ /// <version>?.?.?</version>
+ /// <default>false</default>
+ [ReflectorProperty("recurse", Required = false)]
+ public bool Recurse { get; set; }
+
+ /// <summary>
/// Cleans the publishDir if it exists, so that you will always
have an exact copy of the sourceDir.
/// </summary>
/// <version>1.5</version>
/// <default>false</default>
[ReflectorProperty("cleanPublishDirPriorToCopy", Required =
false)]
@@ -179,11 +197,11 @@ namespace
ThoughtWorks.CruiseControl.Core.Publishers
}
if (UseLabelSubDirectory)
pubDir = pubDir.CreateSubdirectory(result.Label);
- RecurseSubDirectories(srcDir, pubDir);
+ RecurseSubDirectories(srcDir, pubDir, SearchPattern,
Recurse);
switch (CleanUpMethod)
{
case CleanupPolicy.NoCleaning:
break;
@@ -210,25 +228,29 @@ namespace
ThoughtWorks.CruiseControl.Core.Publishers
/// <summary>
/// Copies all files and folders from srcDir to pubDir
/// </summary>
/// <param name="srcDir">The SRC dir.</param>
/// <param name="pubDir">The pub dir.</param>
- private static void RecurseSubDirectories(DirectoryInfo srcDir,
DirectoryInfo pubDir)
+ private static void RecurseSubDirectories(DirectoryInfo srcDir,
DirectoryInfo pubDir, string searchPattern, bool recurse)
{
- var files = srcDir.GetFiles();
+ //var files = srcDir.GetFiles();
+ var files = (searchPattern == null) ? srcDir.GetFiles() :
srcDir.GetFiles(searchPattern);
foreach (var file in files)
{
var destFile = new
FileInfo(Path.Combine(pubDir.FullName, file.Name));
if (destFile.Exists) destFile.Attributes =
FileAttributes.Normal;
file.CopyTo(destFile.ToString(), true);
}
- var subDirectories = srcDir.GetDirectories();
- foreach (var subDir in subDirectories)
+ if (recurse)
{
- var subDestination =
pubDir.CreateSubdirectory(subDir.Name);
- RecurseSubDirectories(subDir, subDestination);
+ var subDirectories = srcDir.GetDirectories();
+ foreach (var subDir in subDirectories)
+ {
+ var subDestination =
pubDir.CreateSubdirectory(subDir.Name);
+ RecurseSubDirectories(subDir, subDestination,
searchPattern, recurse);
+ }
}
}
/// <summary>
/// Keeps the last X sub dirs.
Best regards
Andreas