public override bool Execute () { if (include == null || include.Length == 0) return true; // Handle wild cards var directoryScanner = new Microsoft.Build.BuildEngine.DirectoryScanner (); directoryScanner.Includes = include; directoryScanner.Excludes = exclude; directoryScanner.BaseDirectory = new DirectoryInfo (Directory.GetCurrentDirectory ()); directoryScanner.Scan (); List<ITaskItem> output = new List<ITaskItem> (); foreach (ITaskItem matchedItem in directoryScanner.MatchedItems) { output.Add (matchedItem); if (AdditionalMetadata == null) continue; foreach (string metadata in AdditionalMetadata) { //a=1 string [] parts = metadata.Split (new char [] {'='}, 2, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 2) { string name = parts [0].Trim (); string oldValue = matchedItem.GetMetadata (name); if (!preserveExistingMetadata || string.IsNullOrEmpty (oldValue)) matchedItem.SetMetadata (name, parts [1].Trim ()); } } } include = output.ToArray (); return true; }
public override bool Execute() { if (include == null || include.Length == 0) { return(true); } // Handle wild cards var directoryScanner = new Microsoft.Build.BuildEngine.DirectoryScanner(); directoryScanner.Includes = include; directoryScanner.Excludes = exclude; directoryScanner.BaseDirectory = new DirectoryInfo(Directory.GetCurrentDirectory()); directoryScanner.Scan(); List <ITaskItem> output = new List <ITaskItem> (); foreach (ITaskItem matchedItem in directoryScanner.MatchedItems) { output.Add(matchedItem); if (AdditionalMetadata == null) { continue; } foreach (string metadata in AdditionalMetadata) { //a=1 string [] parts = metadata.Split(new char [] { '=' }, 2, StringSplitOptions.RemoveEmptyEntries); if (parts.Length == 2) { string name = parts [0].Trim(); string oldValue = matchedItem.GetMetadata(name); if (!preserveExistingMetadata || string.IsNullOrEmpty(oldValue)) { matchedItem.SetMetadata(name, parts [1].Trim()); } } } } include = output.ToArray(); return(true); }
internal static IEnumerable <T> GetAllItems <T> (Func <string, string> expandString, string include, string exclude, Func <string, T> creator, Func <string, ITaskItem> taskItemCreator, string directory, Action <T, string> assignRecurse, Func <ITaskItem, bool> isDuplicate) { var includes = expandString(include).Trim().Split(item_target_sep, StringSplitOptions.RemoveEmptyEntries); var excludes = expandString(exclude).Trim().Split(item_target_sep, StringSplitOptions.RemoveEmptyEntries); if (includes.Length == 0) { yield break; } if (includes.Length == 1 && includes [0].IndexOf('*') < 0 && excludes.Length == 0) { // for most case - shortcut. var item = creator(includes [0]); yield return(item); } else { var ds = new Microsoft.Build.BuildEngine.DirectoryScanner() { BaseDirectory = new DirectoryInfo(directory), Includes = includes.Where(s => !string.IsNullOrWhiteSpace(s)).Select(i => taskItemCreator(i)).ToArray(), Excludes = excludes.Where(s => !string.IsNullOrWhiteSpace(s)).Select(e => taskItemCreator(e)).ToArray(), }; ds.Scan(); foreach (var taskItem in ds.MatchedItems) { if (isDuplicate(taskItem)) { continue; // skip duplicate } var item = creator(taskItem.ItemSpec); string recurse = taskItem.GetMetadata("RecursiveDir"); assignRecurse(item, recurse); yield return(item); } } }