private static void ProcessAntFile(GraphBuildContext context, Target target, XElement targetElement) { var calls = targetElement.Descendants("ant"); foreach (var call in calls) { var calledTarget = ResolveTarget(context, ResolveTargetElement(context, SafeAttribute(call, "antfile"), SafeAttribute(call, "target"))); target.AddDependency(calledTarget, ">"); } }
private static void ProcessAntCalls(GraphBuildContext context, Target target, XElement targetElement) { var calls = targetElement.Descendants("antcall"); foreach (var call in calls) { var calledTarget = ResolveTarget(context, targetElement.Document.FindTarget(call.Attribute("target").Value)); target.AddDependency(calledTarget, "+"); } }
private static Target AddNewTarget(GraphBuildContext context, XElement targetElement) { string targetName = SafeAttribute(targetElement, "name"); var newTarget = context.AddTarget(targetName); ProcessDependencies(context, newTarget, targetElement); ProcessAntCalls(context, newTarget, targetElement); ProcessAntFile(context, newTarget, targetElement); return newTarget; }
private static void ProcessDependencies(GraphBuildContext context, Target target, XElement targetElement) { var dependencies = SafeAttribute(targetElement, "depends"); if (string.IsNullOrWhiteSpace(dependencies)) return; foreach (var dependency in dependencies.Split(',').Select(d => d.Trim())) { context.PushScript(); var targetDependency = context.FindTarget(dependency) ?? ResolveTarget(context, ResolveTargetElement(context, targetElement.Document, dependency)); context.PopScript(); target.AddDependency(targetDependency); } }
public static IBuildScriptGraph Parse(IRepository repository, string resource, string target) { if (!repository.Contains(resource)) { throw new InvalidOperationException(string.Format("Build script '{0}' not found.", resource)); } Stream textReader = repository[resource]; XDocument doc = XDocument.Load(textReader); target = FixTargetName(doc, target); var graphBuildContext = new GraphBuildContext(repository, resource); var targetElement = doc.FindTarget(target); return BuildScriptGraphBuilder.NewInstance(graphBuildContext, targetElement); }
private static XElement ResolveImportedTagElement(GraphBuildContext context, XDocument doc, string target) { var imports = from importElement in doc.Descendants("import") select SafeAttribute(importElement, "file"); foreach (var imported in imports) { XElement found = ResolveTargetElement(context, imported, target); if (found != null) { return found; } } context.AddUnresolvedTarget(target); return UnresolvedTargetElement(target); }
public static BuildScriptGraph NewInstance(GraphBuildContext context, XElement initialTarget) { ResolveTarget(context, initialTarget); return new BuildScriptGraph(context.Scripts); }
private static XElement ResolveTargetElement(GraphBuildContext context, string resource, string target) { if (!context.Repository.Contains(resource)) { context.AddUnresolvedTarget(target, resource); return UnresolvedTargetElement(target); } var importedDoc = XDocument.Load(context.Repository[resource]); context.RegisterScript(context.Repository.AbsolutePath(resource)); return ResolveTargetElement(context, importedDoc, target); }
private static XElement ResolveTargetElement(GraphBuildContext context, XDocument doc, string target) { var found = doc.FindTarget(target); return found ?? ResolveImportedTagElement(context, doc, target); }
private static Target ResolveTarget(GraphBuildContext context, XElement targetElement) { var targetName = SafeAttribute(targetElement, "name"); var found = context.FindTarget(targetName); return found ?? AddNewTarget(context, targetElement); }