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

Reply via email to