Пример #1
0
 public BuildLink(ICruiseUrlBuilder urlBuilder, IBuildSpecifier buildSpecifier, string text, string action)
     : base(text)
 {
     this.urlBuilder = urlBuilder;
     this.action = action;
     this.buildSpecifier = buildSpecifier;
 }
        public void ShouldBuildViewForAllBuilds()
        {
            IBuildSpecifier[] buildSpecifiers   = new IBuildSpecifier [] { build2Specifier, build1Specifier };
            IAbsoluteLink[]   buildLinks        = new IAbsoluteLink[] { new GeneralAbsoluteLink("link1"), new GeneralAbsoluteLink("link2") };
            string            buildRows         = "renderred Links";
            IResponse         allBuildsResponse = new HtmlFragmentResponse("foo");
            Hashtable         context1          = new Hashtable();
            Hashtable         context2          = new Hashtable();

            farmServiceMock.ExpectAndReturn("GetBuildSpecifiers", new IBuildSpecifier [] { build2Specifier, build1Specifier }, projectSpecifier, null);
            linkListFactoryMock.ExpectAndReturn("CreateStyledBuildLinkList", buildLinks, buildSpecifiers, BuildReportBuildPlugin.ACTION_NAME);
            context1["links"] = buildLinks;
            velocityTransformerMock.ExpectAndReturn("Transform", buildRows, @"BuildRows.vm", new HashtableConstraint(context1));

            context2["buildRows"] = buildRows;
            IAbsoluteLink allBuildsLink = new GeneralAbsoluteLink("foo");

            linkFactoryMock.ExpectAndReturn("CreateProjectLink", allBuildsLink, projectSpecifier, "", ViewAllBuildsProjectPlugin.ACTION_NAME);
            context2["allBuildsLink"] = allBuildsLink;
            velocityViewGeneratorMock.ExpectAndReturn("GenerateView", allBuildsResponse, @"AllBuilds.vm", new HashtableConstraint(context2));

            Assert.AreEqual(allBuildsResponse, lister.GenerateAllBuildsView(projectSpecifier, null));

            VerifyAll();
        }
Пример #3
0
        public void ShouldUseBuildLogTransformerToGenerateView()
        {
            DynamicMock buildLogTransformerMock = new DynamicMock(typeof(IBuildLogTransformer));
            DynamicMock cruiseRequestMock       = new DynamicMock(typeof(ICruiseRequest));
            DynamicMock buildSpecifierMock      = new DynamicMock(typeof(IBuildSpecifier));
            DynamicMock requestStub             = new DynamicMock(typeof(IRequest));

            ICruiseRequest  cruiseRequest  = (ICruiseRequest)cruiseRequestMock.MockInstance;
            IBuildSpecifier buildSpecifier = (IBuildSpecifier)buildSpecifierMock.MockInstance;
            IRequest        request        = (IRequest)requestStub.MockInstance;

            cruiseRequestMock.ExpectAndReturn("BuildSpecifier", buildSpecifier);
            cruiseRequestMock.SetupResult("Request", request);
            requestStub.SetupResult("ApplicationPath", "myAppPath");
            Hashtable expectedXsltArgs = new Hashtable();

            expectedXsltArgs["applicationPath"] = "myAppPath";
            buildLogTransformerMock.ExpectAndReturn("Transform", "transformed", buildSpecifier, new string[] { @"xsl\myxsl.xsl" }, new HashtableConstraint(expectedXsltArgs), null);

            XslReportBuildAction action = new XslReportBuildAction((IBuildLogTransformer)buildLogTransformerMock.MockInstance, null);

            action.XslFileName = @"xsl\myxsl.xsl";

            Assert.AreEqual("transformed", ((HtmlFragmentResponse)action.Execute(cruiseRequest)).ResponseFragment);

            buildLogTransformerMock.Verify();
            cruiseRequestMock.Verify();
            buildSpecifierMock.Verify();
        }
Пример #4
0
 public BuildLink(ICruiseUrlBuilder urlBuilder, IBuildSpecifier buildSpecifier, string text, string action)
     : base(text)
 {
     this.urlBuilder     = urlBuilder;
     this.action         = action;
     this.buildSpecifier = buildSpecifier;
 }
        /// <summary>
        /// Gets the log.
        /// </summary>
        /// <param name="buildSpecifier">The build specifier.</param>
        /// <param name="sessionToken">The session token.</param>
        /// <returns>The log data.</returns>
        public string GetLog(IBuildSpecifier buildSpecifier, string sessionToken)
        {
            // Validate the arguments
            if (buildSpecifier == null)
            {
                throw new ArgumentNullException("buildSpecifier", "buildSpecifier is null.");
            }

            // Retrieve the server configuration - this is needed to check for compression
            var serverConfig   = this.GetServerUrl(buildSpecifier.ProjectSpecifier.ServerSpecifier);
            var useCompression = serverConfig.TransferLogsCompressed;

            // Retrieve the actual log
            var response = GetCruiseManager(buildSpecifier, sessionToken)
                           .GetLog(buildSpecifier.ProjectSpecifier.ProjectName, buildSpecifier.BuildName, useCompression);

            if (useCompression)
            {
                // Uncompress the log
                var compressionService = new ZipCompressionService();
                response = compressionService.ExpandString(response);
            }

            return(response);
        }
        /// <summary>
        /// Gets the log.
        /// </summary>
        /// <param name="buildSpecifier">The build specifier.</param>
        /// <param name="sessionToken">The session token.</param>
        /// <returns>The log data.</returns>
        public string GetLog(IBuildSpecifier buildSpecifier, string sessionToken)
        {
            // Validate the arguments
            if (buildSpecifier == null)
            {
                throw new ArgumentNullException("buildSpecifier", "buildSpecifier is null.");
            }

            // Retrieve the server configuration - this is needed to check for compression
            var serverConfig = this.GetServerUrl(buildSpecifier.ProjectSpecifier.ServerSpecifier);
            var useCompression = serverConfig.TransferLogsCompressed;

            // Retrieve the actual log
            var response = GetCruiseManager(buildSpecifier, sessionToken)
                .GetLog(buildSpecifier.ProjectSpecifier.ProjectName, buildSpecifier.BuildName, useCompression);

            if (useCompression)
            {
                // Uncompress the log
                var compressionService = new ZipCompressionService();
                response = compressionService.ExpandString(response);
            }

            return response;
        }
        public void ShouldUseBuildLogTransformerToGenerateView()
        {
            var buildLogTransformerMock = new Mock <IBuildLogTransformer>();
            var cruiseRequestMock       = new Mock <ICruiseRequest>();
            var buildSpecifierMock      = new Mock <IBuildSpecifier>();
            var requestStub             = new Mock <IRequest>();

            ICruiseRequest  cruiseRequest  = (ICruiseRequest)cruiseRequestMock.Object;
            IBuildSpecifier buildSpecifier = (IBuildSpecifier)buildSpecifierMock.Object;
            IRequest        request        = (IRequest)requestStub.Object;

            cruiseRequestMock.SetupGet(_cruiseRequest => _cruiseRequest.BuildSpecifier).Returns(buildSpecifier).Verifiable();
            cruiseRequestMock.SetupGet(_cruiseRequest => _cruiseRequest.Request).Returns(request).Verifiable();
            requestStub.SetupGet(_request => _request.ApplicationPath).Returns("myAppPath").Verifiable();
            buildLogTransformerMock.Setup(transformer => transformer.Transform(buildSpecifier, new string[] { @"xsl\myxsl.xsl" }, It.Is <Hashtable>(t => t.Count == 1 && (string)t["applicationPath"] == "myAppPath"), null)).
            Returns("transformed").Verifiable();

            XslReportBuildAction action = new XslReportBuildAction((IBuildLogTransformer)buildLogTransformerMock.Object, null);

            action.XslFileName = @"xsl\myxsl.xsl";

            Assert.AreEqual("transformed", ((HtmlFragmentResponse)action.Execute(cruiseRequest)).ResponseFragment);

            buildLogTransformerMock.Verify();
            cruiseRequestMock.Verify();
            buildSpecifierMock.Verify();
        }
Пример #8
0
        public IAbsoluteLink CreateStyledBuildLink(IBuildSpecifier specifier, string action)
        {
            IAbsoluteLink link = CreateBuildLink(specifier, buildNameFormatter.GetPrettyBuildName(specifier), action, null);

            link.LinkClass = buildNameFormatter.GetCssClassForBuildLink(specifier);
            return(link);
        }
        /// <summary>
        /// List the available packages for a build.
        /// </summary>
        /// <param name="buildSpecifier"></param>
        /// <param name="sessionToken"></param>
        /// <returns></returns>
        public virtual PackageDetails[] RetrievePackageList(IBuildSpecifier buildSpecifier, string sessionToken)
        {
            var logFile  = new LogFile(buildSpecifier.BuildName);
            var response = GetCruiseManager(buildSpecifier, sessionToken)
                           .RetrievePackageList(buildSpecifier.ProjectSpecifier.ProjectName, logFile.Label);

            return(response.ToArray());
        }
Пример #10
0
 public BuildLinkWithFileName(ICruiseUrlBuilder urlBuilder, IBuildSpecifier buildSpecifier, string text, string action, string fileName)
     : base(text)
 {
     this.urlBuilder     = urlBuilder;
     this.action         = action;
     this.buildSpecifier = buildSpecifier;
     this.fileName       = fileName;
 }
Пример #11
0
 public BuildLinkWithFileName(ICruiseUrlBuilder urlBuilder, IBuildSpecifier buildSpecifier, string text, string action, string fileName)
     : base(text)
 {
     this.urlBuilder = urlBuilder;
     this.action = action;
     this.buildSpecifier = buildSpecifier;
     this.fileName = fileName;
 }
Пример #12
0
        public virtual RemotingFileTransfer RetrieveFileTransfer(IBuildSpecifier buildSpecifier, string fileName, string sessionToken)
        {
            var logFile      = new LogFile(buildSpecifier.BuildName);
            var fullName     = string.Format(System.Globalization.CultureInfo.CurrentCulture, "{0}\\{1}", logFile.Label, fileName);
            var fileTransfer = GetCruiseManager(buildSpecifier, sessionToken)
                               .RetrieveFileTransfer(buildSpecifier.ProjectSpecifier.ProjectName, fullName);

            return(fileTransfer as RemotingFileTransfer);
        }
Пример #13
0
 /// <summary>
 /// Builds the build URL.
 /// </summary>
 /// <param name="action">The action.</param>
 /// <param name="buildSpecifier">The build specifier.</param>
 /// <returns></returns>
 /// <remarks></remarks>
 public string BuildBuildUrl(string action, IBuildSpecifier buildSpecifier)
 {
     return(urlBuilder.BuildUrl(
                action,
                string.Empty,
                GeneratePath(
                    buildSpecifier.ProjectSpecifier.ServerSpecifier.ServerName,
                    buildSpecifier.ProjectSpecifier.ProjectName,
                    buildSpecifier.BuildName)));
 }
Пример #14
0
        public BuildLink(ICruiseUrlBuilder urlBuilder, IBuildSpecifier buildSpecifier, string text, string action, string img)
            : base(text)
        {
            this.urlBuilder = urlBuilder;
            this.action = action;
            this.buildSpecifier = buildSpecifier;

            if (!string.IsNullOrEmpty(img))
                this.SetImg = img;
        }
 public string BuildBuildUrl(string action, IBuildSpecifier buildSpecifier)
 {
     return urlBuilder.BuildUrl(
         action,
         string.Empty,
         GeneratePath(
             buildSpecifier.ProjectSpecifier.ServerSpecifier.ServerName,
             buildSpecifier.ProjectSpecifier.ProjectName,
             buildSpecifier.BuildName));
 }
Пример #16
0
        public IResponse Execute(ICruiseRequest cruiseRequest)
        {
            Hashtable       velocityContext = new Hashtable();
            IBuildSpecifier buildSpecifier  = cruiseRequest.BuildSpecifier;
            Build           build           = buildRetriever.GetBuild(buildSpecifier);

            velocityContext["log"]    = build.Log.Replace("<", "&lt;").Replace(">", "&gt;");
            velocityContext["logUrl"] = linkFactory.CreateBuildLinkWithFileName(buildSpecifier, XmlBuildLogAction.ACTION_NAME, buildSpecifier.BuildName).Url;

            return(viewGenerator.GenerateView(@"BuildLog.vm", velocityContext));
        }
 public IAbsoluteLink[] GetBuildPluginLinks(IBuildSpecifier buildSpecifier)
 {
     ArrayList links = new ArrayList();
     foreach (IBuildPlugin plugin in pluginConfiguration.BuildPlugins)
     {
         if (plugin.IsDisplayedForProject(buildSpecifier.ProjectSpecifier))
         {
             links.Add(LinkFactory.CreateBuildLink(buildSpecifier, plugin.LinkDescription, plugin.NamedActions[0].ActionName));
         }
     }
     return (IAbsoluteLink[]) links.ToArray(typeof (IAbsoluteLink));
 }
Пример #18
0
        public BuildLink(ICruiseUrlBuilder urlBuilder, IBuildSpecifier buildSpecifier, string text, string action, string img)
            : base(text)
        {
            this.urlBuilder     = urlBuilder;
            this.action         = action;
            this.buildSpecifier = buildSpecifier;

            if (!string.IsNullOrEmpty(img))
            {
                this.SetImg = img;
            }
        }
Пример #19
0
        public IAbsoluteLink[] GetBuildPluginLinks(IBuildSpecifier buildSpecifier)
        {
            ArrayList links = new ArrayList();

            foreach (IBuildPlugin plugin in pluginConfiguration.BuildPlugins)
            {
                if (plugin.IsDisplayedForProject(buildSpecifier.ProjectSpecifier))
                {
                    links.Add(LinkFactory.CreateBuildLink(buildSpecifier, plugin.LinkDescription, plugin.NamedActions[0].ActionName, plugin.ImageFileName));
                }
            }
            return((IAbsoluteLink[])links.ToArray(typeof(IAbsoluteLink)));
        }
 /// <summary>
 /// Gets the final build status.
 /// </summary>
 /// <param name="buildSpecifier">The build specifier.</param>
 /// <param name="sessionId">The session id.</param>
 /// <returns>The final project status for the build.</returns>
 public ProjectStatusSnapshot GetFinalBuildStatus(IBuildSpecifier buildSpecifier, string sessionId)
 {
     try
     {
         var response = GetCruiseManager(buildSpecifier, sessionId)
                        .GetFinalBuildStatus(buildSpecifier.ProjectSpecifier.ProjectName, buildSpecifier.BuildName);
         return(response);
     }
     catch (NotImplementedException)
     {
         return(null);
     }
 }
        public IAbsoluteLink[] GetBuildPluginLinks(IBuildSpecifier buildSpecifier)
        {
            var links = new List <IAbsoluteLink>();

            foreach (IBuildPlugin plugin in pluginConfiguration.BuildPlugins)
            {
                if (plugin.IsDisplayedForProject(buildSpecifier.ProjectSpecifier))
                {
                    links.Add(LinkFactory.CreateBuildLink(buildSpecifier, plugin.LinkDescription, plugin.NamedActions[0].ActionName));
                }
            }
            return(links.ToArray());
        }
        /// <summary>
        /// Appends a build to the document.
        /// </summary>
        /// <param name="build">The build.</param>
        /// <param name="xmlWriter">The XML writer.</param>
        /// <param name="basePath">The base path.</param>
        private void AppendBuild(IBuildSpecifier build, XmlWriter xmlWriter, string basePath)
        {
            var logFile = new LogFile(build.BuildName);
            xmlWriter.WriteStartElement("event");
            xmlWriter.WriteAttributeString("start", logFile.Date.ToString("r"));
            xmlWriter.WriteAttributeString("title", logFile.Succeeded ? "Success (" + logFile.Label + ")" : "Failure");
            xmlWriter.WriteAttributeString("color", logFile.Succeeded ? "green" : "red");
            xmlWriter.WriteAttributeString("icon", basePath + "dark-" + (logFile.Succeeded ? "green" : "red") + "-circle.png");

            var buildUrl = this.urlBuilder.BuildBuildUrl(BuildReportBuildPlugin.ACTION_NAME, build);
            xmlWriter.WriteString("<a href=\"" + buildUrl + "\">View Build</a>");
            xmlWriter.WriteEndElement();
        }
        public ConditionalGetFingerprint GetFingerprint(IRequest request)
        {
            ICruiseRequest  cruiseRequest            = new NameValueCruiseRequestFactory().CreateCruiseRequest(request, urlBuilder, retriever);
            IBuildSpecifier mostRecentBuildSpecifier =
                farmService.GetMostRecentBuildSpecifiers(cruiseRequest.ProjectSpecifier, 1, cruiseRequest.RetrieveSessionToken())[0];
            DateTime mostRecentBuildDate = new LogFile(mostRecentBuildSpecifier.BuildName).Date;
            ConditionalGetFingerprint mostRecentBuildFingerprint =
                fingerprintFactory.BuildFromDate(mostRecentBuildDate);
            ConditionalGetFingerprint mostRecentTemplateFingerprint =
                fingerprintFactory.BuildFromFileNames(@"BuildRows.vm", @"RecentBuilds.vm", @"AllBuilds.vm");

            return(mostRecentBuildFingerprint.Combine(mostRecentTemplateFingerprint));
        }
        public string GetLog(IBuildSpecifier buildSpecifier)
        {
            string HostName = this.GetCruiseManager(buildSpecifier).GetHostServerName(buildSpecifier.ProjectSpecifier.ProjectName);

            if (Environment.MachineName == HostName)
            {
                string BuildLogDirectoryPath = GetCruiseManager(buildSpecifier).GetBuildLogDirectory(buildSpecifier.ProjectSpecifier.ProjectName);
                return(File.ReadAllText(Path.Combine(BuildLogDirectoryPath, buildSpecifier.BuildName)));
            }
            else
            {
                return(GetCruiseManager(buildSpecifier).GetLog(buildSpecifier.ProjectSpecifier.ProjectName, buildSpecifier.BuildName));
            }
        }
Пример #25
0
        public HtmlFragmentResponse Execute()
        {
            Hashtable velocityContext      = new Hashtable();
            string    velocityTemplateName = "";

            string serverName  = request.ServerName;
            string projectName = request.ProjectName;
            string buildName   = request.BuildName;

            velocityContext["serverName"]  = serverName;
            velocityContext["projectName"] = projectName;
            velocityContext["buildName"]   = buildName;

            if (serverName == "")
            {
                velocityContext["links"] = pluginLinkCalculator.GetFarmPluginLinks();
                velocityTemplateName     = @"FarmSideBar.vm";
            }
            else
            {
                if (projectName == "")
                {
                    velocityContext["links"] = pluginLinkCalculator.GetServerPluginLinks(request.ServerSpecifier);
                    velocityTemplateName     = @"ServerSideBar.vm";
                }
                else
                {
                    if (buildName == "")
                    {
                        IProjectSpecifier projectSpecifier = request.ProjectSpecifier;
                        velocityContext["links"]             = pluginLinkCalculator.GetProjectPluginLinks(projectSpecifier);
                        velocityContext["recentBuildsTable"] = recentBuildsViewBuilder.BuildRecentBuildsTable(projectSpecifier);
                        velocityTemplateName = @"ProjectSideBar.vm";
                    }
                    else
                    {
                        IBuildSpecifier buildSpecifier = request.BuildSpecifier;
                        velocityContext["links"]             = pluginLinkCalculator.GetBuildPluginLinks(buildSpecifier);
                        velocityContext["recentBuildsTable"] = recentBuildsViewBuilder.BuildRecentBuildsTable(buildSpecifier.ProjectSpecifier);
                        velocityContext["latestLink"]        = linkFactory.CreateProjectLink(request.ProjectSpecifier, LatestBuildReportProjectPlugin.ACTION_NAME);
                        velocityContext["nextLink"]          = linkFactory.CreateBuildLink(buildNameRetriever.GetNextBuildSpecifier(buildSpecifier), "", BuildReportBuildPlugin.ACTION_NAME, null);
                        velocityContext["previousLink"]      = linkFactory.CreateBuildLink(buildNameRetriever.GetPreviousBuildSpecifier(buildSpecifier), "", BuildReportBuildPlugin.ACTION_NAME, null);
                        velocityTemplateName = @"BuildSideBar.vm";
                    }
                }
            }

            return(velocityViewGenerator.GenerateView(velocityTemplateName, velocityContext) as HtmlFragmentResponse);
        }
Пример #26
0
        /// <summary>
        /// Appends a build to the document.
        /// </summary>
        /// <param name="build">The build.</param>
        /// <param name="xmlWriter">The XML writer.</param>
        /// <param name="basePath">The base path.</param>
        private void AppendBuild(IBuildSpecifier build, XmlWriter xmlWriter, string basePath)
        {
            var logFile = new LogFile(build.BuildName);

            xmlWriter.WriteStartElement("event");
            xmlWriter.WriteAttributeString("start", logFile.Date.ToString("r"));
            xmlWriter.WriteAttributeString("title", logFile.Succeeded ? "Success (" + logFile.Label + ")" : "Failure");
            xmlWriter.WriteAttributeString("color", logFile.Succeeded ? "green" : "red");
            xmlWriter.WriteAttributeString("icon", basePath + "dark-" + (logFile.Succeeded ? "green" : "red") + "-circle.png");

            var buildUrl = this.urlBuilder.BuildBuildUrl(BuildReportBuildPlugin.ACTION_NAME, build);

            xmlWriter.WriteString("<a href=\"" + buildUrl + "\">View Build</a>");
            xmlWriter.WriteEndElement();
        }
Пример #27
0
        public IResponse Execute(ICruiseRequest cruiseRequest)
        {
            Hashtable       velocityContext = new Hashtable();
            IBuildSpecifier buildSpecifier  = cruiseRequest.BuildSpecifier;
            Build           build           = buildRetriever.GetBuild(buildSpecifier, cruiseRequest.RetrieveSessionToken());

            velocityContext["log"] = build.Log.Replace("<", "&lt;").Replace(">", "&gt;");

            // TODO - urk, this is a hack, need a better way of setting extensions
            string oldExtension = urlBuilder.Extension;

            urlBuilder.Extension      = "xml";
            velocityContext["logUrl"] = urlBuilder.BuildBuildUrl(XmlBuildLogAction.ACTION_NAME, buildSpecifier);
            urlBuilder.Extension      = oldExtension;

            return(viewGenerator.GenerateView(TEMPLATE_NAME, velocityContext));
        }
        public IBuildSpecifier GetNextBuildSpecifier(IBuildSpecifier buildSpecifier)
        {
            IBuildSpecifier[] buildSpecifiers = cruiseManagerWrapper.GetBuildSpecifiers(buildSpecifier.ProjectSpecifier);

            if (buildSpecifiers.Length == 0 || buildSpecifier.Equals(buildSpecifiers[0]))
            {
                return(buildSpecifier);
            }

            for (int i = 1; i < buildSpecifiers.Length; i++)
            {
                if (buildSpecifier.Equals(buildSpecifiers[i]))
                {
                    return(buildSpecifiers[i - 1]);
                }
            }
            throw new UnknownBuildException(buildSpecifier);
        }
		public IAbsoluteLink[] CreateStyledBuildLinkList(IBuildSpecifier[] buildSpecifiers, IBuildSpecifier selectedBuildSpecifier, string action)
		{
			var displayableBuildLinkList = new List<IAbsoluteLink>();
			
			foreach (IBuildSpecifier buildSpecifier in buildSpecifiers)
			{
				if (buildSpecifier.Equals(selectedBuildSpecifier))
				{
					displayableBuildLinkList.Add(linkFactory.CreateStyledSelectedBuildLink(buildSpecifier, action));
				}
				else
				{
					displayableBuildLinkList.Add(linkFactory.CreateStyledBuildLink(buildSpecifier, action));
				}
			}

			return displayableBuildLinkList.ToArray();			
		}
        public IBuildSpecifier GetNextBuildSpecifier(IBuildSpecifier buildSpecifier)
        {
            IBuildSpecifier[] buildSpecifiers = cruiseManagerWrapper.GetBuildSpecifiers(buildSpecifier.ProjectSpecifier);

            if (buildSpecifiers.Length == 0 || buildSpecifier.Equals(buildSpecifiers[0]))
            {
                return buildSpecifier;
            }

            for (int i = 1; i < buildSpecifiers.Length; i++)
            {
                if (buildSpecifier.Equals(buildSpecifiers[i]))
                {
                    return buildSpecifiers[i-1];
                }
            }
            throw new UnknownBuildException(buildSpecifier);
        }
        public void ShouldGenerateBuildLinks()
        {
            string          action          = "my action";
            IBuildSpecifier buildSpecifier1 = (IBuildSpecifier) new Mock <IBuildSpecifier>().Object;
            IBuildSpecifier buildSpecifier2 = (IBuildSpecifier) new Mock <IBuildSpecifier>().Object;
            IAbsoluteLink   link1           = new GeneralAbsoluteLink("link 1");
            IAbsoluteLink   link2           = new GeneralAbsoluteLink("link 2");

            linkFactoryMock.Setup(factory => factory.CreateStyledBuildLink(buildSpecifier1, action)).Returns(link1).Verifiable();
            linkFactoryMock.Setup(factory => factory.CreateStyledBuildLink(buildSpecifier2, action)).Returns(link2).Verifiable();

            IAbsoluteLink[] returnedLinks = linkListFactory.CreateStyledBuildLinkList(new IBuildSpecifier[] { buildSpecifier1, buildSpecifier2 }, action);

            Assert.AreEqual(2, returnedLinks.Length);
            Assert.AreEqual(link1, returnedLinks[0]);
            Assert.AreEqual(link2, returnedLinks[1]);

            VerifyAll();
        }
        public IBuildSpecifier GetPreviousBuildSpecifier(IBuildSpecifier buildSpecifier)
        {
            IBuildSpecifier[] buildSpecifiers = cruiseManagerWrapper.GetBuildSpecifiers(buildSpecifier.ProjectSpecifier);

            if (buildSpecifier.Equals(buildSpecifiers[buildSpecifiers.Length - 1]))
            {
                return(buildSpecifier);
            }

            for (int i = 0; i < buildSpecifiers.Length - 1; i++)
            {
                if (buildSpecifier.Equals(buildSpecifiers[i]))
                {
                    return(buildSpecifiers[i + 1]);
                }
            }

            throw new UnknownBuildException(buildSpecifier);
        }
Пример #33
0
        public void ShouldGenerateBuildLinks()
        {
            string          action          = "my action";
            IBuildSpecifier buildSpecifier1 = (IBuildSpecifier) new DynamicMock(typeof(IBuildSpecifier)).MockInstance;
            IBuildSpecifier buildSpecifier2 = (IBuildSpecifier) new DynamicMock(typeof(IBuildSpecifier)).MockInstance;
            IAbsoluteLink   link1           = new GeneralAbsoluteLink("link 1");
            IAbsoluteLink   link2           = new GeneralAbsoluteLink("link 2");

            linkFactoryMock.ExpectAndReturn("CreateStyledBuildLink", link1, buildSpecifier1, action);
            linkFactoryMock.ExpectAndReturn("CreateStyledBuildLink", link2, buildSpecifier2, action);

            IAbsoluteLink[] returnedLinks = linkListFactory.CreateStyledBuildLinkList(new IBuildSpecifier[] { buildSpecifier1, buildSpecifier2 }, action);

            Assert.AreEqual(2, returnedLinks.Length);
            Assert.AreEqual(link1, returnedLinks[0]);
            Assert.AreEqual(link2, returnedLinks[1]);

            VerifyAll();
        }
        public IBuildSpecifier GetPreviousBuildSpecifier(IBuildSpecifier buildSpecifier)
        {
            IBuildSpecifier[] buildSpecifiers = cruiseManagerWrapper.GetBuildSpecifiers(buildSpecifier.ProjectSpecifier);

            if (buildSpecifier.Equals(buildSpecifiers[buildSpecifiers.Length - 1]))
            {
                return buildSpecifier;
            }

            for (int i = 0; i < buildSpecifiers.Length - 1; i++)
            {
                if (buildSpecifier.Equals(buildSpecifiers[i]))
                {
                    return buildSpecifiers[i+1];
                }
            }

            throw new UnknownBuildException(buildSpecifier);
        }
Пример #35
0
        public void ShouldBuildViewForAllBuilds()
        {
            IBuildSpecifier[]    buildSpecifiers   = new IBuildSpecifier [] { build2Specifier, build1Specifier };
            IAbsoluteLink[]      buildLinks        = new IAbsoluteLink[] { new GeneralAbsoluteLink("link1"), new GeneralAbsoluteLink("link2") };
            string               buildRows         = "renderred Links";
            HtmlFragmentResponse allBuildsResponse = new HtmlFragmentResponse("foo");

            farmServiceMock.Setup(service => service.GetBuildSpecifiers(projectSpecifier, null)).Returns(new IBuildSpecifier[] { build2Specifier, build1Specifier }).Verifiable();
            linkListFactoryMock.Setup(factory => factory.CreateStyledBuildLinkList(buildSpecifiers, BuildReportBuildPlugin.ACTION_NAME)).Returns(buildLinks).Verifiable();
            velocityTransformerMock.Setup(transformer => transformer.Transform(@"BuildRows.vm", It.Is <Hashtable>(t => t.Count == 1 && t["links"] == buildLinks))).Returns(buildRows).Verifiable();

            IAbsoluteLink allBuildsLink = new GeneralAbsoluteLink("foo");

            linkFactoryMock.Setup(factory => factory.CreateProjectLink(projectSpecifier, "", ViewAllBuildsProjectPlugin.ACTION_NAME)).Returns(allBuildsLink).Verifiable();
            velocityViewGeneratorMock.Setup(generator => generator.GenerateView(@"AllBuilds.vm", It.Is <Hashtable>(t => t.Count == 2 && (string)t["buildRows"] == buildRows && t["allBuildsLink"] == allBuildsLink))).Returns(allBuildsResponse).Verifiable();

            Assert.AreEqual(allBuildsResponse, lister.GenerateAllBuildsView(projectSpecifier, null));

            VerifyAll();
        }
        private string BuildRecentBuildsTable(IProjectSpecifier projectSpecifier, IBuildSpecifier buildSpecifier, string sessionToken)
        {
            Hashtable primaryContext   = new Hashtable();
            Hashtable secondaryContext = new Hashtable();

            try
            {
                IBuildSpecifier[] mostRecentBuildSpecifiers = farmService.GetMostRecentBuildSpecifiers(projectSpecifier, 10, sessionToken);
                secondaryContext["links"]       = linkListFactory.CreateStyledBuildLinkList(mostRecentBuildSpecifiers, buildSpecifier, BuildReportBuildPlugin.ACTION_NAME);
                primaryContext["buildRows"]     = velocityTransformer.Transform(@"BuildRows.vm", secondaryContext);
                primaryContext["allBuildsLink"] = linkFactory.CreateProjectLink(projectSpecifier, string.Empty, ViewAllBuildsProjectPlugin.ACTION_NAME);

                return(velocityTransformer.Transform(@"RecentBuilds.vm", primaryContext));
            }
            catch (Exception)
            {
                // Assume exception also caught where we care about (i.e. by action)
                return(string.Empty);
            }
        }
Пример #37
0
		private string BuildRecentBuildsTable(IProjectSpecifier projectSpecifier, IBuildSpecifier buildSpecifier, string sessionToken)
		{
			Hashtable primaryContext = new Hashtable();
			Hashtable secondaryContext = new Hashtable();

			try
			{
				IBuildSpecifier[] mostRecentBuildSpecifiers = farmService.GetMostRecentBuildSpecifiers(projectSpecifier, 10, sessionToken);
				secondaryContext["links"] = linkListFactory.CreateStyledBuildLinkList(mostRecentBuildSpecifiers, buildSpecifier, BuildReportBuildPlugin.ACTION_NAME);
				primaryContext["buildRows"] = velocityTransformer.Transform(@"BuildRows.vm", secondaryContext);
				primaryContext["allBuildsLink"] = linkFactory.CreateProjectLink(projectSpecifier, string.Empty, ViewAllBuildsProjectPlugin.ACTION_NAME);

				return velocityTransformer.Transform(@"RecentBuilds.vm", primaryContext);
			}
			catch (Exception)
			{
				// Assume exception also caught where we care about (i.e. by action)
				return string.Empty;
			}
		}
        public void ExecuteWorksForDataRequest()
        {
            var url1          = "build/1";
            var url2          = "build/2";
            var appPath       = "/";
            var farmService   = this.mocks.StrictMock <IFarmService>();
            var viewGenerator = this.mocks.StrictMock <IVelocityViewGenerator>();
            var urlBuilder    = this.mocks.StrictMock <ICruiseUrlBuilder>();
            var cruiseRequest = this.mocks.StrictMock <ICruiseRequest>();
            var request       = this.mocks.StrictMock <IRequest>();
            var projectSpec   = this.mocks.StrictMock <IProjectSpecifier>();
            var build1        = new DefaultBuildSpecifier(projectSpec, "log20100406071725Lbuild.1.xml");
            var build2        = new DefaultBuildSpecifier(projectSpec, "log20100406071725.xml");
            var builds        = new IBuildSpecifier[] { build1, build2 };

            SetupResult.For(cruiseRequest.Request).Return(request);
            SetupResult.For(cruiseRequest.ProjectSpecifier).Return(projectSpec);
            SetupResult.For(cruiseRequest.RetrieveSessionToken()).Return(null);
            SetupResult.For(request.FileNameWithoutExtension).Return(ProjectTimelineAction.DataActionName);
            SetupResult.For(request.ApplicationPath).Return(appPath);
            SetupResult.For(farmService.GetBuildSpecifiers(projectSpec, null)).Return(builds);
            SetupResult.For(urlBuilder.BuildBuildUrl(BuildReportBuildPlugin.ACTION_NAME, build1)).Return(url1);
            SetupResult.For(urlBuilder.BuildBuildUrl(BuildReportBuildPlugin.ACTION_NAME, build2)).Return(url2);

            this.mocks.ReplayAll();
            var plugin   = new ProjectTimelineAction(viewGenerator, farmService, urlBuilder);
            var response = plugin.Execute(cruiseRequest);

            this.mocks.VerifyAll();
            Assert.IsInstanceOf <XmlFragmentResponse>(response);
            var actual   = response as XmlFragmentResponse;
            var expected = "<data>" +
                           "<event start=\"Tue, 06 Apr 2010 07:17:25 GMT\" title=\"Success (1)\" color=\"green\" icon=\"/javascript/Timeline/images/dark-green-circle.png\">&lt;a href=\"build/1\"&gt;View Build&lt;/a&gt;</event>" +
                           "<event start=\"Tue, 06 Apr 2010 07:17:25 GMT\" title=\"Failure\" color=\"red\" icon=\"/javascript/Timeline/images/dark-red-circle.png\">&lt;a href=\"build/2\"&gt;View Build&lt;/a&gt;</event>" +
                           "</data>";

            Assert.AreEqual(expected, actual.ResponseFragment);
        }
		public void ShouldBuildViewForRecentBuilds()
		{
			IBuildSpecifier[] buildSpecifiers = new IBuildSpecifier [] {build2Specifier, build1Specifier };
			IAbsoluteLink[] buildLinks = new IAbsoluteLink[] { new GeneralAbsoluteLink("link1"), new GeneralAbsoluteLink("link2") };
			string buildRows = "renderred Links";
			string recentBuilds = "recentBuilds";
			Hashtable context1 = new Hashtable();
			Hashtable context2 = new Hashtable();

			farmServiceMock.ExpectAndReturn("GetMostRecentBuildSpecifiers", buildSpecifiers, projectSpecifier, 10, null);
			linkListFactoryMock.ExpectAndReturn("CreateStyledBuildLinkList", buildLinks, buildSpecifiers, build1Specifier, BuildReportBuildPlugin.ACTION_NAME);
			context1["links"] = buildLinks;
			velocityTransformerMock.ExpectAndReturn("Transform", buildRows, @"BuildRows.vm", new HashtableConstraint(context1));

			context2["buildRows"] = buildRows;
			IAbsoluteLink allBuildsLink = new GeneralAbsoluteLink("foo");
			linkFactoryMock.ExpectAndReturn("CreateProjectLink", allBuildsLink, projectSpecifier, "", ViewAllBuildsProjectPlugin.ACTION_NAME);
			context2["allBuildsLink"] = allBuildsLink;
			velocityTransformerMock.ExpectAndReturn("Transform", recentBuilds, @"RecentBuilds.vm", new HashtableConstraint(context2));

			Assert.AreEqual(recentBuilds, lister.BuildRecentBuildsTable(build1Specifier, null));

			VerifyAll();
		}
        public void ExecuteWorksForDataRequest()
        {
            var url1 = "build/1";
            var url2 = "build/2";
            var appPath = "/";
            var farmService = this.mocks.StrictMock<IFarmService>();
            var viewGenerator = this.mocks.StrictMock<IVelocityViewGenerator>();
            var urlBuilder = this.mocks.StrictMock<ICruiseUrlBuilder>();
            var cruiseRequest = this.mocks.StrictMock<ICruiseRequest>();
            var request = this.mocks.StrictMock<IRequest>();
            var projectSpec = this.mocks.StrictMock<IProjectSpecifier>();
            var build1 = new DefaultBuildSpecifier(projectSpec, "log20100406071725Lbuild.1.xml");
            var build2 = new DefaultBuildSpecifier(projectSpec, "log20100406071725.xml");
            var builds = new IBuildSpecifier[] { build1, build2 };
            SetupResult.For(cruiseRequest.Request).Return(request);
            SetupResult.For(cruiseRequest.ProjectSpecifier).Return(projectSpec);
            SetupResult.For(cruiseRequest.RetrieveSessionToken()).Return(null);
            SetupResult.For(request.FileNameWithoutExtension).Return(ProjectTimelineAction.DataActionName);
            SetupResult.For(request.ApplicationPath).Return(appPath);
            SetupResult.For(farmService.GetBuildSpecifiers(projectSpec, null)).Return(builds);
            SetupResult.For(urlBuilder.BuildBuildUrl(BuildReportBuildPlugin.ACTION_NAME, build1)).Return(url1);
            SetupResult.For(urlBuilder.BuildBuildUrl(BuildReportBuildPlugin.ACTION_NAME, build2)).Return(url2);

            this.mocks.ReplayAll();
            var plugin = new ProjectTimelineAction(viewGenerator, farmService, urlBuilder);
            var response = plugin.Execute(cruiseRequest);

            this.mocks.VerifyAll();
            Assert.IsInstanceOf<XmlFragmentResponse>(response);
            var actual = response as XmlFragmentResponse;
            var expected = "<data>" +
                "<event start=\"Tue, 06 Apr 2010 07:17:25 GMT\" title=\"Success (1)\" color=\"green\" icon=\"/javascript/Timeline/images/dark-green-circle.png\">&lt;a href=\"build/1\"&gt;View Build&lt;/a&gt;</event>" +
                "<event start=\"Tue, 06 Apr 2010 07:17:25 GMT\" title=\"Failure\" color=\"red\" icon=\"/javascript/Timeline/images/dark-red-circle.png\">&lt;a href=\"build/2\"&gt;View Build&lt;/a&gt;</event>" +
                "</data>";
            Assert.AreEqual(expected, actual.ResponseFragment);
        }
Пример #41
0
 public string Transform(IBuildSpecifier buildSpecifier, Dictionary<string, string> xslParams, params string[] transformerFileNames)
 {
     return transformer.Transform(buildRetriever.GetBuild(buildSpecifier).Log, transformerFileNames, xslParams);
 }
 private CruiseServerClientBase GetCruiseManager(IBuildSpecifier buildSpecifier, string sessionToken)
 {
     return(GetCruiseManager(buildSpecifier.ProjectSpecifier.ServerSpecifier, sessionToken));
 }
        private string GetPluginSubReport(ICruiseRequest cruiseRequest,
                                          IProjectSpecifier projectSpecifier, IBuildSpecifier[] buildSpecifiers)
        {
            if (buildSpecifiers.Length > 0 && pluginNames != null)
            {
                string outputResponse = String.Empty;

                ModifiedCruiseRequest req = new ModifiedCruiseRequest(cruiseRequest.Request, cruiseRequest.UrlBuilder);
                req.ReplaceBuildSpecifier(buildSpecifiers[0]);

                foreach (IBuildPlugin buildPlugIn in pluginNames)
                {
                    if (buildPlugIn != null && buildPlugIn.IsDisplayedForProject(projectSpecifier) &&
                        buildPlugIn.NamedActions != null)
                    {
                        foreach (INamedAction namedAction in buildPlugIn.NamedActions)
                        {
                            IResponse resp = namedAction.Action.Execute(req);

                            if (resp != null && resp is HtmlFragmentResponse)
                                outputResponse += ((HtmlFragmentResponse)resp).ResponseFragment;
                        }
                    }
                }
                return outputResponse;
            }
            return null;
        }
 public void ReplaceBuildSpecifier(IBuildSpecifier buildSpecifier)
 {
     this.buildSpecifier = buildSpecifier;
 }
        public HtmlFragmentResponse Execute(ICruiseRequest request)
        {
            Hashtable velocityContext = new Hashtable();
            string    velocityTemplateName;

            string serverName = request.ServerName;

            if (serverName == string.Empty)
            {
                velocityContext["links"] = pluginLinkCalculator.GetFarmPluginLinks();

                IServerSpecifier[] serverspecifiers = farmService.GetServerSpecifiers();
                velocityContext["serverlinks"] = linkListFactory.CreateServerLinkList(serverspecifiers, "ViewServerReport");

                IAbsoluteLink[] categoryLinks = GetCategoryLinks(serverspecifiers, request);
                velocityContext["showCategories"] = (categoryLinks != null) ? true : false;
                velocityContext["categorylinks"]  = categoryLinks;
                velocityContext["farmLink"]       = linkFactory.CreateFarmLink("Dashboard", FarmReportFarmPlugin.ACTION_NAME);
                velocityTemplateName = @"FarmSideBar.vm";
            }
            else
            {
                string projectName = request.ProjectName;
                if (projectName == string.Empty)
                {
                    IServerSpecifier serverSpecifier = request.ServerSpecifier;
                    velocityContext["links"]      = pluginLinkCalculator.GetServerPluginLinks(serverSpecifier);
                    velocityContext["serverlink"] = linkFactory.CreateServerLink(serverSpecifier, "ViewServerReport");

                    IAbsoluteLink[] categoryLinks = new IAbsoluteLink[0];
                    try
                    {
                        categoryLinks = GetCategoryLinks(serverSpecifier);
                    }
                    catch
                    {
                        // Ignore any error here - this is normally because the URL is incorrect, the error will be displayed in the main content
                    }

                    velocityContext["showCategories"] = (categoryLinks != null) ? true : false;
                    velocityContext["categorylinks"]  = categoryLinks;

                    velocityTemplateName = @"ServerSideBar.vm";
                }
                else
                {
                    string buildName = request.BuildName;
                    if (buildName == string.Empty)
                    {
                        IProjectSpecifier projectSpecifier = request.ProjectSpecifier;
                        velocityContext["links"]             = pluginLinkCalculator.GetProjectPluginLinks(projectSpecifier);
                        velocityContext["recentBuildsTable"] = recentBuildsViewBuilder.BuildRecentBuildsTable(projectSpecifier, request.RetrieveSessionToken());
                        velocityTemplateName = @"ProjectSideBar.vm";
                    }
                    else
                    {
                        IBuildSpecifier buildSpecifier = request.BuildSpecifier;
                        velocityContext["links"]             = pluginLinkCalculator.GetBuildPluginLinks(buildSpecifier);
                        velocityContext["recentBuildsTable"] = recentBuildsViewBuilder.BuildRecentBuildsTable(buildSpecifier, request.RetrieveSessionToken());
                        velocityContext["latestLink"]        = linkFactory.CreateProjectLink(request.ProjectSpecifier, LatestBuildReportProjectPlugin.ACTION_NAME);
                        velocityContext["nextLink"]          = linkFactory.CreateBuildLink(buildNameRetriever.GetNextBuildSpecifier(buildSpecifier, request.RetrieveSessionToken()), string.Empty, BuildReportBuildPlugin.ACTION_NAME);
                        velocityContext["previousLink"]      = linkFactory.CreateBuildLink(buildNameRetriever.GetPreviousBuildSpecifier(buildSpecifier, request.RetrieveSessionToken()), string.Empty, BuildReportBuildPlugin.ACTION_NAME);
                        velocityTemplateName = @"BuildSideBar.vm";
                    }
                }
            }

            return(velocityViewGenerator.GenerateView(velocityTemplateName, velocityContext));
        }
 public string GetPrettyBuildName(IBuildSpecifier buildSpecifier)
 {
     return GetPrettyBuildName(buildSpecifier, CultureInfo.CurrentCulture);
 }
Пример #47
0
 public GraphBuildInfo(IBuildSpecifier buildSpecifier,  ILinkFactory linkFactory)
 {
     mybuildSpecifier = buildSpecifier;
     mylinkFactory = linkFactory;
 }
 /// <summary>
 /// List the available packages for a build.
 /// </summary>
 /// <param name="buildSpecifier"></param>
 /// <param name="sessionToken"></param>
 /// <returns></returns>
 public virtual PackageDetails[] RetrievePackageList(IBuildSpecifier buildSpecifier, string sessionToken)
 {
     var logFile = new LogFile(buildSpecifier.BuildName);
     var response = GetCruiseManager(buildSpecifier, sessionToken)
         .RetrievePackageList(buildSpecifier.ProjectSpecifier.ProjectName, logFile.Label);
     return response.ToArray();
 }
 /// <summary>
 /// Gets the final build status.
 /// </summary>
 /// <param name="buildSpecifier">The build specifier.</param>
 /// <param name="sessionId">The session id.</param>
 /// <returns>The final project status for the build.</returns>
 public ProjectStatusSnapshot GetFinalBuildStatus(IBuildSpecifier buildSpecifier, string sessionId)
 {
     try
     {
         var response = GetCruiseManager(buildSpecifier, sessionId)
             .GetFinalBuildStatus(buildSpecifier.ProjectSpecifier.ProjectName, buildSpecifier.BuildName);
         return response;
     }
     catch (NotImplementedException)
     {
         return null;
     }
 }
Пример #50
0
 private string BuildBuildQueryString(IBuildSpecifier buildSpecifier)
 {
     return Combine(BuildProjectQueryString(buildSpecifier.ProjectSpecifier), UrlParameter(BuildQueryStringParameter, buildSpecifier.BuildName));
 }
 public virtual RemotingFileTransfer RetrieveFileTransfer(IBuildSpecifier buildSpecifier, string fileName, string sessionToken)
 {
     var logFile = new LogFile(buildSpecifier.BuildName);
     var fullName = string.Format(System.Globalization.CultureInfo.CurrentCulture,"{0}\\{1}", logFile.Label, fileName);
     var fileTransfer = GetCruiseManager(buildSpecifier, sessionToken)
         .RetrieveFileTransfer(buildSpecifier.ProjectSpecifier.ProjectName, fullName);
     return fileTransfer as RemotingFileTransfer;
 }
        private CruiseServerClientBase GetCruiseManager(IBuildSpecifier buildSpecifier, string sessionToken)
		{
			return GetCruiseManager(buildSpecifier.ProjectSpecifier.ServerSpecifier, sessionToken);
		}
        /// <summary>
        /// Transforms the specified build specifier.
        /// </summary>
        /// <param name="buildSpecifier">The build specifier.</param>
        /// <param name="transformerFileNames">The transformer file names.</param>
        /// <param name="xsltArgs">The XSLT args.</param>
        /// <param name="sessionToken">The session token.</param>
        /// <returns>The transformed content.</returns>
        public string Transform(IBuildSpecifier buildSpecifier, string[] transformerFileNames, Hashtable xsltArgs, string sessionToken)
		{
            var buildLog = buildRetriever.GetBuild(buildSpecifier, sessionToken).Log;
            return transformer.Transform(buildLog, transformerFileNames, xsltArgs);
        }
Пример #54
0
 public UnknownBuildException(IBuildSpecifier buildSpecifier)
     : base()
 {
     this.buildSpecifier = buildSpecifier;
 }
 public string GetPrettyBuildName(IBuildSpecifier buildSpecifier, IFormatProvider formatter)
 {
     LogFile logFile = new LogFile(buildSpecifier.BuildName, formatter);
     //return string.Format("{0} ({1})", logFile.FormattedDateString, logFile.Succeeded ? logFile.Label : "Failed");
     return string.Format("{0} ({1})", logFile.FormattedDateString, logFile.Label);
 }
Пример #56
0
 public string BuildBuildUrl(string action, IBuildSpecifier buildSpecifier, string fileName)
 {
     return urlBuilder.BuildUrl(action, BuildBuildQueryString(buildSpecifier), fileName);
 }
Пример #57
0
        /// <summary>
        /// Transforms the specified build specifier.
        /// </summary>
        /// <param name="buildSpecifier">The build specifier.</param>
        /// <param name="transformerFileNames">The transformer file names.</param>
        /// <param name="xsltArgs">The XSLT args.</param>
        /// <param name="sessionToken">The session token.</param>
        /// <returns>The transformed content.</returns>
        public string Transform(IBuildSpecifier buildSpecifier, string[] transformerFileNames, Hashtable xsltArgs, string sessionToken)
        {
            var buildLog = buildRetriever.GetBuild(buildSpecifier, sessionToken).Log;

            return(transformer.Transform(buildLog, transformerFileNames, xsltArgs));
        }
Пример #58
0
 public string BuildBuildUrl(string action, IBuildSpecifier buildSpecifier)
 {
     return urlBuilder.BuildUrl(action, BuildBuildQueryString(buildSpecifier));
 }
Пример #59
0
 public string BuildRecentBuildsTable(IBuildSpecifier buildSpecifier, string sessionToken)
 {
     return BuildRecentBuildsTable(buildSpecifier.ProjectSpecifier, buildSpecifier, sessionToken);
 }
Пример #60
0
 public BuildGraph(IBuildSpecifier[] buildSpecifiers, ILinkFactory linkFactory, Translations translations)
 {
     mybuildSpecifiers = buildSpecifiers;
     mylinkFactory = linkFactory;
     this.translations = translations;
 }