4 using System.Collections.Generic;
5 using System.ComponentModel;
8 using System.Threading.Tasks;
10 namespace SiliconStudio.BuildEngine
12 [Description(
"File enumeration")]
13 [Obsolete(
"This class is not maintained.")]
16 public BuildStep Template {
get {
return template; } set {
template = value;
if (
template != null) template.Parent =
this; } }
19 public List<string> SearchPattern {
get; set; }
21 public List<string> ExcludePattern {
get; set; }
27 SearchPattern =
new List<string>();
28 ExcludePattern =
new List<string>();
29 Files = Enumerable.Empty<
string>();
37 return "File enumeration" + (Files.FirstOrDefault() != null ?
" (" + Files.Count() +
" files)" :
"");
46 clone.Template = template.Clone();
47 clone.SearchPattern = SearchPattern.ToList();
48 clone.ExcludePattern = ExcludePattern.ToList();
54 Steps =
new List<BuildStep>();
55 var files = Enumerable.Empty<
string>();
57 foreach (
string pattern
in SearchPattern)
59 string path = Path.GetDirectoryName(pattern);
60 string filePattern = Path.GetFileName(pattern);
61 if (!
string.IsNullOrEmpty(path) && !string.IsNullOrEmpty(filePattern))
63 files = files.Concat(Directory.EnumerateFiles(path, filePattern));
67 files = files.Concat(Directory.EnumerateFiles(pattern));
71 var excludes = Enumerable.Empty<
string>();
73 foreach (
string pattern
in ExcludePattern)
75 string path = Path.GetDirectoryName(pattern);
76 string filePattern = Path.GetFileName(pattern);
77 if (!
string.IsNullOrEmpty(path) && !string.IsNullOrEmpty(filePattern))
79 excludes = excludes.Concat(Directory.EnumerateFiles(path, filePattern));
83 excludes = excludes.Concat(Directory.EnumerateFiles(pattern));
87 var buildStepToWait =
new List<BuildStep>();
91 Files = files.Where(x => !excludes.Contains(x));
92 foreach (
string file
in Files)
94 executeContext.Variables[
"FILE"] = file;
95 var fileBuildStep = Template.Clone();
96 ((List<BuildStep>)Steps).Add(fileBuildStep);
97 buildStepToWait.Add(fileBuildStep);
98 executeContext.ScheduleBuildStep(fileBuildStep);
102 await CompleteCommands(executeContext, buildStepToWait);
104 return ResultStatus.Successful;
A BuildStep that can spawn multiple BuildStep. Input and output tracking and merging will be performe...
override async Task< ResultStatus > Execute(IExecuteContext executeContext, BuilderContext builderContext)
Execute the BuildStep, usually resulting in scheduling tasks in the scheduler
FileEnumerationBuildStep()
override string ToString()
override BuildStep Clone()
Clone this Build Step.