Пример #1
0
 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, ">");
     }
 }
Пример #2
0
 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, "+");
     }
 }
Пример #3
0
        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;
        }
Пример #4
0
        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);
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
 public static BuildScriptGraph NewInstance(GraphBuildContext context, XElement initialTarget)
 {
     ResolveTarget(context, initialTarget);
     return new BuildScriptGraph(context.Scripts);
 }
Пример #8
0
        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);
        }
Пример #9
0
 private static XElement ResolveTargetElement(GraphBuildContext context, XDocument doc, string target)
 {
     var found = doc.FindTarget(target);
     return	found ??
             ResolveImportedTagElement(context, doc, target);
 }
Пример #10
0
        private static Target ResolveTarget(GraphBuildContext context, XElement targetElement)
        {
            var targetName = SafeAttribute(targetElement, "name");

            var found = context.FindTarget(targetName);
            return	found ??
                    AddNewTarget(context, targetElement);
        }