Пример #1
0
        public virtual void GenerateKeyFile(IProcessFactory processFactory, IPackageTree packageTree)
        {
            string strongKey = Path.Combine(packageTree.WorkingDirectory.FullName,
                                            string.Format("{0}.snk", packageTree.Name));

            string cmdLineArguments = string.Format("-k {0}", strongKey.QuotePath());

            var PSI = new ProcessStartInfo("cmd.exe")
            {
                RedirectStandardInput  = true,
                RedirectStandardOutput = true,
                RedirectStandardError  = true,
                UseShellExecute        = false
            };

            var sn = GetSnExe(packageTree);

            IProcess process = processFactory.GetProcess(sn.ToString().QuotePath(), cmdLineArguments, packageTree.WorkingDirectory.FullName);

            while (true)
            {
                string line = process.GetLineOrOutput();

                if (line == null)
                {
                    break;
                }

                log.Info(line);
            }

            process.WaitForExit();
        }
Пример #2
0
        public virtual BuildEngine Build(IProcessFactory processFactory, IPackageTree packageTree, string mode)
        {
            if (builtPackages.ContainsKey(packageTree.Name))
            {
                return(this);
            }

            SetBuildMode(mode);

            string pathToBuildFile = string.Format("{0}", GetBuildFilePath(packageTree).QuotePath());

            if (GenerateStrongKey)
            {
                GenerateKeyFile(processFactory, packageTree);
            }

            CopyDependenciesTo(packageTree);

            var cmdLineArguments = BuildTool.CommandLineArguments(pathToBuildFile, this, packageTree, Version);

            var pathToBuildTool = string.Format("{0}", BuildTool.PathToBuildTool(packageTree, Version).QuotePath());

            ProcessBuild(packageTree, processFactory, pathToBuildTool, cmdLineArguments);

            CopyArtifactsToBuildDirectory(packageTree);

            builtPackages.Add(packageTree.Name, packageTree.Name);

            return(this);
        }
Пример #3
0
        protected override void Because()
        {
            rootBuildMetaData       = CreateStub <IBuildMetaData>();
            dependencyBuildMetaData = CreateStub <IBuildMetaData>();

            var simpleDependency = new Dependency("simpleDependency", "simpleDependency.boo");
            var rootDependency   = new Dependency("root", "root.boo");

            rootBuildMetaData.BuildEngine = new BuildEngine(new BuildToolStub(), "root.boo", Horn.Core.Utils.Framework.FrameworkVersion.FrameworkVersion35, CreateStub <IDependencyDispatcher>());
            rootBuildMetaData.BuildEngine.Dependencies.Add(simpleDependency);
            dependencyBuildMetaData.BuildEngine = new BuildEngine(new BuildToolStub(), "simpleDependency.boo", Utils.Framework.FrameworkVersion.FrameworkVersion35, CreateStub <IDependencyDispatcher>());
            dependencyBuildMetaData.BuildEngine.Dependencies.Add(rootDependency);

            packageTree = CreateStub <IPackageTree>();
            packageTree.Stub(x => x.Name).Return("root");
            packageTree.Stub(x => x.GetBuildMetaData("root")).Return(rootBuildMetaData);

            dependentTree = CreateStub <IPackageTree>();
            dependentTree.Stub(x => x.Name).Return("simpleDependency");
            dependentTree.Stub(x => x.GetBuildMetaData("simpleDependency")).Return(dependencyBuildMetaData);

            packageTree.Stub(x => x.RetrievePackage(simpleDependency)).Return(dependentTree);
            packageTree.Stub(x => x.RetrievePackage(rootDependency)).Return(packageTree);
            dependentTree.Stub(x => x.RetrievePackage(simpleDependency)).Return(dependentTree);
            dependentTree.Stub(x => x.RetrievePackage(rootDependency)).Return(packageTree);
        }
Пример #4
0
        public IBuildMetaData GetBuildMetaData(IPackageTree packageTree, string buildFile)
        {
            if (factory == null)
                throw new ArgumentNullException("You have not called SetDslFactory on class BooBuildConfigReader");

            return CreateBuildMetaData(packageTree.CurrentDirectory, packageTree.FullName);
        }
Пример #5
0
        protected virtual void ProcessBuild(IPackageTree packageTree, IProcessFactory processFactory, string pathToBuildTool, string cmdLineArguments)
        {
            IProcess process = processFactory.GetProcess(pathToBuildTool, cmdLineArguments, packageTree.WorkingDirectory.FullName);

            while (true)
            {
                string line = process.GetLineOrOutput();

                if (line == null)
                {
                    break;
                }

                log.Info(line);
            }

            try
            {
                process.WaitForExit();
            }
            catch (ProcessFailedException)
            {
                throw new BuildFailedException(string.Format("The build tool {0} failed building the {1} package", packageTree.BuildMetaData.BuildEngine.BuildTool, packageTree.Name));
            }
        }
Пример #6
0
        public void Dispatch(IPackageTree packageTree, IList <Dependency> dependencies, string dependenciesRoot)
        {
            DirectoryInfo dependencyDirectory = GetDependencyDirectory(packageTree, dependenciesRoot);

            if (dependencies.HasElements() && (!dependencyDirectory.Exists))
            {
                throw new DirectoryNotFoundException(string.Format("Package {0} cannot find folder {1} to resolve the dependencies",
                                                                   packageTree.Name, dependencyDirectory.FullName));
            }


            foreach (Dependency dependency in dependencies)
            {
                IPackageTree packageForCurrentDependency = GetPackageForCurrentDependency(packageTree, dependency);
                FileInfo[]   sourceFiles = GetDependencyFiles(dependency, packageForCurrentDependency);

                foreach (FileInfo nextFile in sourceFiles)
                {
                    IEnumerable <string> dependencyPaths = dependentCopier.CopyDependency(nextFile, dependencyDirectory);

                    //we might still need this at some stage
                    //dependentUpdater.Execute(packageTree, dependencyPaths, dependency);
                }
            }
        }
Пример #7
0
        private BuildTree CalculateDependencies(IPackageTree packageTree, BuildTree currentTree)
        {
            if (currentTree == null)
            {
                currentTree = new BuildTree(packageTree);
            }
            else
            {
                if (HasACircularDependency(currentTree, packageTree))
                {
                    throw new CircularDependencyException(packageTree.Name);
                }

                InsertDependenciesBeforeParent(currentTree, packageTree);
            }

            var buildMetaData = packageTree.GetBuildMetaData(packageTree.Name);

            var buildEngine = buildMetaData.BuildEngine;

            var dependencies = buildEngine.Dependencies;

            foreach (var dependency in dependencies)
            {
                var package = packageTree.RetrievePackage(dependency);

                if (package is NullPackageTree)
                    throw new UnknownInstallPackageException(string.Format("No package definition exists for dependent package {0}, which is required by {1}.", dependency.PackageName, packageTree.FullName));

                CalculateDependencies(package, currentTree);
            }

            return currentTree;
        }
Пример #8
0
        public override string CheckOut(IPackageTree packageTree, FileSystemInfo destination)
        {
            SvnUpdateResult result = null;

            using (var client = new SvnClient())
            {
                try
                {
                    var svnOptions = new SvnCheckOutArgs();
                    if (UseRevision.HasValue)
                        svnOptions.Revision = new SvnRevision(UseRevision.Value);
                    client.CheckOut(new SvnUriTarget(new Uri(Url)), destination.FullName, svnOptions, out result);
                }
                catch (SvnRepositoryIOException sre)
                {
                    HandleExceptions(sre);
                }
                catch (SvnObstructedUpdateException sue)
                {
                    HandleExceptions(sue);
                }
            }

            return result.Revision.ToString();
        }
Пример #9
0
        protected override void Before_each_spec()
        {
            textWriter = new StringWriter();

            var parser = new SwitchParser(textWriter, args);

            packageTree = TreeHelper.GetTempPackageTree();

            var dependencyResolver = CreateStub <IDependencyResolver>();

            sourceControl = new SourceControlDouble("http://someurl.com");

            dependencyResolver.Stub(x => x.Resolve <IBuildConfigReader>()).Return(new BooBuildConfigReader());

            dependencyResolver.Stub(x => x.Resolve <SVNSourceControl>()).Return(sourceControl);

            IoC.InitializeWith(dependencyResolver);

            get = MockRepository.GenerateStub <IGet>();

            get.Stub(x => x.From(sourceControl)).Return(get);

            get.Stub(x => x.ExportTo(packageTree)).Return(packageTree);

            packageBuilder = new PackageBuilderStub(get, MockRepository.GenerateStub <IProcessFactory>(), parser.CommandArguments);
        }
Пример #10
0
 public virtual void OnCategoryCreated(IPackageTree packageTreeNode)
 {
     if (CategoryCreated != null)
     {
         CategoryCreated(packageTreeNode);
     }
 }
Пример #11
0
 protected virtual void OnBuildNodeCreated(IPackageTree packageTree)
 {
     if (BuildNodeCreated != null)
     {
         BuildNodeCreated(packageTree);
     }
 }
Пример #12
0
        public virtual void RetrieveSource(IPackageTree packageTree)
        {
            if (downloadedPackages.ContainsKey(packageTree.Name))
            {
                return;
            }

            if (!ShouldUpdate(packageTree))
            {
                downloadedPackages.Add(packageTree.Name, packageTree.Name);
                return;
            }

            var revisionData = packageTree.GetRevisionData();

            Initialise(packageTree);

            SetMonitor(packageTree.WorkingDirectory.FullName);

            Thread monitoringThread = StartMonitoring();

            var revision = Download(packageTree, packageTree.WorkingDirectory, revisionData.Operation());

            StopMonitoring(monitoringThread);

            RecordCurrentRevision(packageTree, revision);
        }
Пример #13
0
        public override string CheckOut(IPackageTree packageTree, FileSystemInfo destination)
        {
            Settings.WorkingDir = destination.FullName;

            try
            {
                if (!destination.Exists)
                {
                    Directory.CreateDirectory(destination.FullName);
                }

                var result = RunGitCommand(GitCommands.GitCommands.CloneCmd(Url, destination.FullName, false).Replace("-v", ""));

                if (BranchName != "master")
                {
                    CreateAndTrackRemoteBranch(BranchName, destination);
                }
            }
            catch (Exception ex)
            {
                HandleExceptions(ex);
            }

            return(CurrentRevisionNumber());
        }
Пример #14
0
        protected override void Before_each_spec()
        {
            textWriter = new StringWriter();

            var parser = new SwitchParser(textWriter, args);

            packageTree = TreeHelper.GetTempPackageTree();

            var dependencyResolver = CreateStub<IDependencyResolver>();

            sourceControl = new SourceControlDouble("http://someurl.com");

            dependencyResolver.Stub(x => x.Resolve<IBuildConfigReader>()).Return(new BooBuildConfigReader());

            dependencyResolver.Stub(x => x.Resolve<SVNSourceControl>()).Return(sourceControl);

            IoC.InitializeWith(dependencyResolver);

            get = MockRepository.GenerateStub<IGet>();

            get.Stub(x => x.From(sourceControl)).Return(get);

            get.Stub(x => x.ExportTo(packageTree)).Return(packageTree);

            packageBuilder = new PackageBuilderStub(get, MockRepository.GenerateStub<IProcessFactory>(), parser.CommandArguments);
        }
Пример #15
0
        public string PathToBuildTool(IPackageTree packageTree, FrameworkVersion version)
        {
            var path = Path.Combine(packageTree.Root.CurrentDirectory.FullName, "buildengines");
            path = Path.Combine(path, "Phantom");
            path = Path.Combine(path, "Phantom.exe");

            return new FileInfo(path).FullName;
        }
        protected override void Before_each_spec()
        {
            sourceControlDouble = new SourceControlDouble("http://www.someurlorsomething.com/");

            metaDataSynchroniser = new MetaDataSynchroniser(sourceControlDouble);

            packageTreeBase = new PackageTree(metaDataSynchroniser);
        }
Пример #17
0
        public override string Update(IPackageTree packageTree, FileSystemInfo destination)
        {
            Console.WriteLine(string.Format("pulling {0} to {1}", packageTree.Name, destination.FullName));

            revision = Guid.NewGuid().ToString();

            return revision;
        }
Пример #18
0
        protected override void Before_each_spec()
        {
            sourceControlDouble = new SourceControlDouble("http://www.someurlorsomething.com/");

            metaDataSynchroniser = new MetaDataSynchroniser(sourceControlDouble);

            packageTreeBase = new PackageTree(metaDataSynchroniser);
        }
Пример #19
0
        public virtual void Initialise()
        {
            rootDirectory = fileSystemProvider.GetHornRootDirectory(HornConfig.Settings.HornRootDirectory);

            metaDataSynchroniser.SynchronisePackageTree(new PackageTree(rootDirectory, null));

            rootPackageTree = new PackageTree(rootDirectory, null);
        }
Пример #20
0
        public override string Update(IPackageTree packageTree, FileSystemInfo destination)
        {
            Console.WriteLine(string.Format("pulling {0} to {1}", packageTree.Name, destination.FullName));

            revision = Guid.NewGuid().ToString();

            return(revision);
        }
Пример #21
0
        public virtual FileInfo GetSnExe(IPackageTree packageTree)
        {
            var path = Path.Combine(packageTree.Root.CurrentDirectory.FullName, "buildengines");

            path = Path.Combine(path, "Sn");
            path = Path.Combine(path, "sn.exe");

            return(new FileInfo(path));
        }
Пример #22
0
        public string PathToBuildTool(IPackageTree packageTree, FrameworkVersion version)
        {
            var path = Path.Combine(packageTree.Root.CurrentDirectory.FullName, "buildengines");

            path = Path.Combine(path, "Phantom");
            path = Path.Combine(path, "Phantom.exe");

            return(new FileInfo(path).FullName);
        }
Пример #23
0
        public string CommandLineArguments(string pathToBuildFile, BuildEngine buildEngine, IPackageTree packageTree, FrameworkVersion version)
        {
            Console.WriteLine(pathToBuildFile);
            Console.WriteLine(buildEngine);
            Console.WriteLine(packageTree);
            Console.WriteLine(version);

            return string.Empty;
        }
Пример #24
0
        public IBuildMetaData GetBuildMetaData(IPackageTree packageTree, string buildFile)
        {
            if (factory == null)
            {
                throw new ArgumentNullException("You have not called SetDslFactory on class BooBuildConfigReader");
            }

            return(CreateBuildMetaData(packageTree.CurrentDirectory, packageTree.FullName));
        }
Пример #25
0
        public void Add(IPackageTree item)
        {
            if (BuildNodeCreated != null)
            {
                BuildNodeCreated(item);
            }

            throw new NullTreeException();
        }
Пример #26
0
        public override string Update(IPackageTree packageTree, FileSystemInfo destination)
        {
            Settings.WorkingDir = destination.FullName;

            try
            {
                var processFactory = new DiagnosticsProcessFactory();

                var git = Path.Combine(Settings.GitBinDir, "git.exe");

                IProcess process = processFactory.GetProcess(git, "pull -v ", packageTree.WorkingDirectory.FullName);

                while (true)
                {
                    string line = process.GetLineOrOutput();

                    if (line == null)
                    {
                        break;
                    }

                    log.Info(line);
                }

                try
                {
                    process.WaitForExit();
                }
                catch (ProcessFailedException)
                {
                    throw new GitPullFailedException(string.Format("A git pull failed for the {0} package", packageTree.Name));
                }

                //Ensure we're on the right branch
                if (!IsBranchCheckedOut(BranchName))
                {
                    if (BranchExists(BranchName))
                    {
                        RunGitCommand(string.Format("checkout {0}", BranchName));
                    }
                    else
                    {
                        CreateAndTrackRemoteBranch(BranchName, destination);
                    }
                }

                //TODO: The following should work.  Might be the way I set up msysgit?
                //GitCommands.GitCommands.Pull("origin", "master", false);
            }
            catch (Exception ex)
            {
                HandleExceptions(ex);
            }

            return(CurrentRevisionNumber());
        }
Пример #27
0
        protected override void Because()
        {
            buildEngine = new BuildEngine(null, "", FrameworkVersion.FrameworkVersion35,
                                          CreateStub <IDependencyDispatcher>());
            buildEngine.BuildRootDirectory = "output";
            packageTree = MockRepository.GenerateStub <IPackageTree>();
            packageTree.Expect(pt => pt.WorkingDirectory).Return(new DirectoryInfo("C:\\temp"));

            runner = new MSBuildBuildTool();
        }
Пример #28
0
        protected override void Before_each_spec()
        {
            base.Before_each_spec();

            sourceControl = new SourceControlDouble("http://localhost/horn");

            packageTree = new PackageTree(rootDirectory, null);

            fileSystemProvider = CreateStub <IFileSystemProvider>();
        }
Пример #29
0
        public void Execute(IPackageTree packageTree, IEnumerable<string> dependencyPaths, Dependency dependency)
        {
            if (!HasADependencyToUpdate(dependencyPaths))
                return;

            InfoFormat("Dependency: Executing Dependency Updaters for {0}", packageTree.Name);

            var dependentUpdaterContext = new DependentUpdaterContext(packageTree, dependencyPaths, dependency);
            updaters.ForEach(updater => updater.Update(dependentUpdaterContext));
        }
        protected override void Because()
        {
            buildEngine = new BuildEngine(null, "", FrameworkVersion.FrameworkVersion35,
                CreateStub<IDependencyDispatcher>());
            buildEngine.BuildRootDirectory = "output";
            packageTree = MockRepository.GenerateStub<IPackageTree>();
            packageTree.Expect(pt => pt.WorkingDirectory).Return(new DirectoryInfo("C:\\temp"));

            runner = new MSBuildBuildTool();
        }
Пример #31
0
        protected override void Before_each_spec()
        {
            base.Before_each_spec();

            sourceControl = new SourceControlDouble("http://localhost/horn");

            packageTree = new PackageTree(rootDirectory, null);

            fileSystemProvider = CreateStub<IFileSystemProvider>();
        }
Пример #32
0
        public RevisionData(IPackageTree packageTree)
        {
            log.InfoFormat("Reading the current revision for {0}", packageTree.Name);

            revisionFileInfo = GetRevisionFile(packageTree);

            if (revisionFileInfo.Exists)
                return;

            revision = "0";
        }
Пример #33
0
        public virtual void BuildAndZipPackage(IPackageTree root, IFileSystemProvider fileSystemProvider, Package package, DirectoryInfo newDirectory, DirectoryInfo tempDirectory)
        {
            BuildPackage(package, newDirectory);

            package.SetContents(root.Result);

            DeleteOldZipFiles(newDirectory);

            var zipFile = fileSystemProvider.ZipFolder(root.Result, newDirectory, package.FileName);

            package.ZipFileName = new PackageFile(zipFile);
        }
Пример #34
0
        protected override void Because()
        {
            packageTree = CreateStub <IPackageTree>();

            packageTree.Stub(x => x.WorkingDirectory).Return(new DirectoryInfo(@"C:\"));

            buildToolStub = CreateStub <IBuildTool>();

            buildEngine = new BuildEngine(buildToolStub, "deeper/than/this/somebuild.file", FrameworkVersion.FrameworkVersion35, CreateStub <IDependencyDispatcher>());

            buildEngine.Build(new StubProcessFactory(), packageTree);
        }
Пример #35
0
        public static IEnumerable <IPackageTree> GetAllPackages(this IPackageTree parent)
        {
            foreach (var child in parent.Children)
            {
                yield return(child);

                foreach (var descendant in child.GetAllPackages())
                {
                    yield return(descendant);
                }
            }
        }
Пример #36
0
        public virtual void OnCategoryCreated(IPackageTree packageTreeNode)
        {
            if (packageTreeNode.CurrentDirectory.ContainsIllegalFiles())
            {
                return;
            }

            if (CategoryCreated != null)
            {
                CategoryCreated(packageTreeNode);
            }
        }
Пример #37
0
        protected override void Because()
        {
            packageTree = CreateStub<IPackageTree>();

            packageTree.Stub(x => x.WorkingDirectory).Return(new DirectoryInfo(@"C:\"));

            buildToolStub = CreateStub<IBuildTool>();

            buildEngine = new BuildEngine(buildToolStub, "deeper/than/this/somebuild.file", FrameworkVersion.FrameworkVersion35, CreateStub<IDependencyDispatcher>());

            buildEngine.Build(new StubProcessFactory(), packageTree);
        }
Пример #38
0
        public virtual bool ShouldUpdate(IPackageTree packageTree)
        {
            string currentRevision = packageTree.GetRevisionData().Revision;

            if (currentRevision == "0")
            {
                log.InfoFormat("Empty Repository");
                return(true);
            }

            return(ShouldUpdate(currentRevision, packageTree));
        }
        protected override void Before_each_spec()
        {
            dependencyResolver = CreateStub<IDependencyResolver>();
            dependencyResolver.Stub(x => x.Resolve<SVNSourceControl>()).Return(new SVNSourceControl(string.Empty));

            IoC.InitializeWith(dependencyResolver);

            factory = new DslFactory { BaseDirectory = DirectoryHelper.GetBaseDirectory() };
            factory.Register<BooConfigReader>(new ConfigReaderEngine());

            packageTree = MockRepository.GenerateStub<IPackageTree>();
        }
Пример #40
0
        protected override void Initialise(IPackageTree packageTree)
        {
            if (!packageTree.Root.Name.StartsWith(PackageTree.RootPackageTreeName))
            {
                throw new InvalidOperationException("The root of the package tree is not named .horn");
            }

            if (!packageTree.WorkingDirectory.Exists)
            {
                return;
            }
        }
Пример #41
0
        public override string Update(IPackageTree packageTree, FileSystemInfo destination)
        {
            try
            {
                RunHGCommand("pull", destination.FullName);
            }
            catch (Exception ex)
            {
                HandleExceptions(ex);
            }

            return CurrentRevisionNumber(destination.FullName);
        }
Пример #42
0
        public virtual IRepositoryElement PrepareRepository(IPackageTree packageToExportTo, IGet get)
        {
            packageTreeToExportTo = packageToExportTo;

            var root = packageToExportTo.Root;
            var buildMetaData = root.GetBuildMetaData(RepositoryName);

            repositoryTree = root.RetrievePackage(RepositoryName);

            get.From(buildMetaData.SourceControl).ExportTo(repositoryTree);

            return this;
        }
Пример #43
0
        public override string Update(IPackageTree packageTree, FileSystemInfo destination)
        {
            try
            {
                RunHGCommand("pull", destination.FullName);
            }
            catch (Exception ex)
            {
                HandleExceptions(ex);
            }

            return(CurrentRevisionNumber(destination.FullName));
        }
Пример #44
0
        public RevisionData(IPackageTree packageTree)
        {
            log.InfoFormat("Reading the current revision for {0}", packageTree.Name);

            revisionFileInfo = GetRevisionFile(packageTree);

            if (revisionFileInfo.Exists)
            {
                return;
            }

            revision = "0";
        }
Пример #45
0
        public virtual IBuildConfigReader SetDslFactory(IPackageTree packageTree)
        {
            PackageTree = packageTree;

            factory = new DslFactory
                            {
                                BaseDirectory = packageTree.CurrentDirectory.FullName
                            };

            factory.Register<BooConfigReader>(new ConfigReaderEngine());

            return this;
        }
Пример #46
0
        public virtual IRepositoryElement PrepareRepository(IPackageTree packageToExportTo, IGet get)
        {
            packageTreeToExportTo = packageToExportTo;

            var root          = packageToExportTo.Root;
            var buildMetaData = root.GetBuildMetaData(RepositoryName);

            repositoryTree = root.RetrievePackage(RepositoryName);

            get.From(buildMetaData.SourceControl).ExportTo(repositoryTree);

            return(this);
        }
Пример #47
0
        protected override void Because()
        {
            packageTree = TreeHelper.GetTempPackageTree();

            buildEngine = new BuildEngineStub(new BuildToolStub(), null, null);

            buildEngine.BuildRootDirectory = "build";

            working = packageTree.RetrievePackage("log4net").WorkingDirectory;

            buildRoot = new DirectoryInfo(Path.Combine(working.FullName,
                                                        buildEngine.BuildRootDirectory));
        }
Пример #48
0
        public void Execute(IPackageTree packageTree, IEnumerable <string> dependencyPaths, Dependency dependency)
        {
            if (!HasADependencyToUpdate(dependencyPaths))
            {
                return;
            }

            InfoFormat("Dependency: Executing Dependency Updaters for {0}", packageTree.Name);

            var dependentUpdaterContext = new DependentUpdaterContext(packageTree, dependencyPaths, dependency);

            updaters.ForEach(updater => updater.Update(dependentUpdaterContext));
        }
        protected override void Before_each_spec()
        {
            dependencyResolver = CreateStub<IDependencyResolver>();
            var environmentVariable = CreateStub<IEnvironmentVariable>();
            environmentVariable.Stub(x => x.GetDirectoryFor("git.cmd")).Return(Environment.CurrentDirectory);
            dependencyResolver.Stub(x => x.Resolve<GitSourceControl>()).Return(new GitSourceControl(environmentVariable));

            IoC.InitializeWith(dependencyResolver);

            factory = new DslFactory { BaseDirectory = DirectoryHelper.GetBaseDirectory() };
            factory.Register<BooConfigReader>(new ConfigReaderEngine());

            packageTree = MockRepository.GenerateStub<IPackageTree>();
        }
Пример #50
0
        protected virtual void BuildDependencyTree(IPackageTree packageTree, IDependencyTree dependencyTree)
        {
            foreach (var nextTree in dependencyTree)
            {
                IBuildMetaData nextMetaData = GetBuildMetaData(nextTree);

                if (!commandArgs.RebuildOnly)
                    RetrieveSourceCode(nextMetaData, nextTree);

                ExecutePrebuildCommands(nextMetaData, nextTree);

                BuildSource(nextTree, nextMetaData);
            }
        }
Пример #51
0
        public override string CheckOut(IPackageTree packageTree, FileSystemInfo destination)
        {
            try
            {
                if (!destination.Exists)
                    Directory.CreateDirectory(destination.FullName);
                RunHGCommand(string.Format("{0} {1} {2}", "clone", Url, destination.FullName), destination.FullName);
            }
            catch (Exception ex)
            {
                HandleExceptions(ex);
            }

            return CurrentRevisionNumber(destination.FullName);
        }
Пример #52
0
        public Category(Category parent, IPackageTree packageTreeNode)
        {
            Categories = new List<Category>();

            Packages = new List<Package>();

            Name = packageTreeNode.Name;

            Parent = parent;

            foreach (var buildMetaData in packageTreeNode.GetAllPackageMetaData())
            {
                Packages.Add(new Package(this, buildMetaData));
            }
        }
Пример #53
0
        public string CommandLineArguments(string pathToBuildFile, BuildEngine buildEngine, IPackageTree packageTree,
            FrameworkVersion version)
        {
            var cmdLine = new StringBuilder();

            cmdLine.AppendFormat(
                     "{0} /p:OutputPath=\"{1}\"  /p:TargetFrameworkVersion={2} /p:NoWarn=1591 /consoleloggerparameters:Summary",
                     pathToBuildFile.QuotePath(), Path.Combine(packageTree.WorkingDirectory.FullName, buildEngine.BuildRootDirectory),
                     GetFrameworkVersionForBuildTool(version));

            AppendTasks(buildEngine, cmdLine);
            AppendParameters(buildEngine, cmdLine);

            return cmdLine.ToString();
        }
Пример #54
0
        public override void before_each_spec()
        {
            var dependencyResolver = MockRepository.GenerateStub<IDependencyResolver>();
            fileSystemProvider = MockRepository.GenerateStub<IFileSystemProvider>();
            packageBuilder = MockRepository.GenerateStub<IPackageCommand>();
            rootPackageTree = MockRepository.GenerateStub<IPackageTree>();
            buildMetaData = MockRepository.GenerateStub<IBuildMetaData>();

            commandArgs = new CommandArgs("horn", false, null, false, null);

            dependencyResolver.Stub(x => x.HasComponent<ICommandArgs>()).Return(true);

            dependencyResolver.Stub(x => x.Resolve<ICommandArgs>()).Return(commandArgs);

            dependencyResolver.Stub(x => x.Resolve<IPackageCommand>("install")
                ).Return(packageBuilder);

            IoC.InitializeWith(dependencyResolver);

            rootPackageTree.Stub(x => x.Result).Return(new DirectoryInfo(@"z:\horn"));

            buildMetaData.ProjectInfo= new Dictionary<string, object>();

            rootPackageTree.Stub(x => x.GetAllPackageMetaData()).Return(new List<IBuildMetaData> {buildMetaData});

            rootPackageTree.Stub(x => x.Name).Return("horn");

            var category = new Category(null, rootPackageTree);

            fileSystemProvider.Stub(x => x.GetFiles(Arg<DirectoryInfo>.Is.TypeOf, Arg<string>.Is.TypeOf)).Return(
                new List<FileInfo>
                    {
                        new FileInfo(string.Format("horn-{0}.zip",
                                                   new DateTime(2009, 10, 30).ToString(FileSystemProvider.FileDateFormat))),
                        new FileInfo(string.Format("horn-{0}.zip",
                                                   new DateTime(2009, 10, 29).ToString(FileSystemProvider.FileDateFormat))),
                        new FileInfo(string.Format("horn-{0}.zip",
                                                   new DateTime(2009, 10, 31).ToString(FileSystemProvider.FileDateFormat)))
                    }.ToArray());

            package = new PackageDouble(category, buildMetaData);

            string zipFileName = string.Format("{0}-{1}.zip", package.Name, DateTime.Now.ToString(FileSystemProvider.FileDateFormat));

            fileSystemProvider.Stub(
                x => x.ZipFolder(Arg<DirectoryInfo>.Is.TypeOf, Arg<DirectoryInfo>.Is.TypeOf, Arg<string>.Is.TypeOf)).
                Return(new FileInfo(zipFileName));
        }
Пример #55
0
        protected string GetRootPath()
        {
            outputPath = CreateDirectory("Output");

            workingPath = CreateDirectory("Working");

            packageTree = MockRepository.GenerateStub<IPackageTree>();

            packageTree.Stub(x => x.OutputDirectory).Return(new DirectoryInfo(outputPath));

            packageTree.Stub(x => x.Result).Return(new DirectoryInfo(outputPath));

            var executionBase = AppDomain.CurrentDomain.BaseDirectory;

            return ResolveRootPath(executionBase);
        }
Пример #56
0
        protected virtual void ExecuteExportList(IBuildMetaData buildMetaData, IPackageTree componentTree)
        {
            if (!buildMetaData.ExportList.HasElements())
                return;

            var initialise = true;

            foreach (var sourceControl in buildMetaData.ExportList)
            {
                log.InfoFormat("\nHorn is fetching {0}.\n\n".ToUpper(), sourceControl.Url);

                get.From(sourceControl).ExportTo(componentTree, sourceControl.ExportPath, initialise);

                initialise = false;
            }
        }
        protected override void Because()
        {
            rootBuildMetaData = CreateStub<IBuildMetaData>();
            dependencyBuildMetaData = CreateStub<IBuildMetaData>();

            rootBuildMetaData.BuildEngine = new BuildEngine(new BuildToolStub(), "root.boo", Utils.Framework.FrameworkVersion.FrameworkVersion35, CreateStub<IDependencyDispatcher>());
            rootBuildMetaData.BuildEngine.Dependencies.Add(new Dependency("simpleDependency", "simpleDependency"));
            dependencyBuildMetaData.BuildEngine = new BuildEngine(new BuildToolStub(), "simpleDependency", Utils.Framework.FrameworkVersion.FrameworkVersion35, CreateStub<IDependencyDispatcher>());

            packageTree = CreateStub<IPackageTree>();
            packageTree.Stub(x => x.Name).Return("root");
            packageTree.Stub(x => x.GetBuildMetaData("root")).Return(rootBuildMetaData);

            dependentTree = new NullPackageTree();

            packageTree.Stub(x => x.RetrievePackage(new Dependency("dependency", "dependency"))).IgnoreArguments().Return(dependentTree);
        }
Пример #58
0
        public virtual void Execute(IPackageTree packageTree)
        {
            Initialise();

            LogPackageDetails();

            if (!packageTree.BuildNodes().Select(x => x.Name).ToList().Contains(commandArgs.PackageName))
                throw new UnknownInstallPackageException(string.Format("No package definition exists for {0}.", commandArgs.PackageName));

            IPackageTree componentTree = packageTree.RetrievePackage(commandArgs);

            IDependencyTree dependencyTree = GetDependencyTree(componentTree);

            BuildDependencyTree(packageTree, dependencyTree);

            log.InfoFormat("\nHorn has finished installing {0}.\n\n".ToUpper(), commandArgs.PackageName);
        }
Пример #59
0
        public override void BuildAndZipPackage(IPackageTree root, IFileSystemProvider fileSystemProvider, Package package, DirectoryInfo newDirectory, DirectoryInfo tempDirectory)
        {
            var tempFileName = Path.Combine(newDirectory.FullName, string.Format("{0}.txt", package.FileName));
            fileSystemProvider.WriteTextFile(tempFileName, "some text");

            var zip = fileSystemProvider.ZipFolder(newDirectory, newDirectory, package.FileName);

            //fileSystemProvider.CopyFile(zip.FullName, zip.FullName, true);

            try
            {
                fileSystemProvider.DeleteFile(tempFileName);
            }
            catch
            {
            }
        }
Пример #60
0
        private FileInfo[] GetDependencyFiles(Dependency dependency, IPackageTree packageForCurrentDependency)
        {
            DirectoryInfo dependencyDirectory = packageForCurrentDependency.Result;

            var files =  dependencyDirectory.GetFiles(string.Format("{0}.*", dependency.Library));

            var ret = new List<FileInfo>();

            files.ForEach(file =>
                              {
                                  var extension =
                                      Path.GetFileName(file.FullName).Substring(dependency.Library.Length);

                                  if (AllowedExtensions.Contains(extension))
                                      ret.Add(file);
                              });

            return ret.ToArray();
        }