public async Task <CodeRepositoryInfo> GetInfo(string path, string revisionIdentifier) { if (string.IsNullOrEmpty(path)) { throw new ArgumentNullException(nameof(path)); } if (revisionIdentifier == null) { throw new ArgumentNullException(nameof(revisionIdentifier)); } var info = await this.ExecuteXml("info", "", $"{path}@{revisionIdentifier}"); if (info == null) { return(null); } var result = new CodeRepositoryInfo(); var revisionAttribute = info.Descendants("entry") .Select(s => s.Attribute("revision")) .SingleOrDefault(); if (revisionAttribute != null) { result.RevisionIdentifier = revisionAttribute.Value; } var authorValue = info.Descendants("author").Select(s => s.Value).FirstOrDefault(); if (authorValue != null) { result.Author = authorValue; } if (_project.RepositorySettings.ContainsKey("compat") && _project.RepositorySettings["compat"] == "github") { // svn propget git-commit --revprop -r $newRev $url var gitInfo = await this.ExecuteXml("propget git-commit", $"--revprop -r {result.RevisionIdentifier}", path); var commitHash = gitInfo.Descendants("property") .Where(x => x.Attribute("name").Value == "git-commit") .Select(s => s.Value) .FirstOrDefault(); //TODO: Get this into CodeRepositoryInfo somehow } return(result); }
public void TestStartProcessCreatesEnvironmentVariables() { var writer = new Mock.MockBuildOutputWriter() { PrefixSeverity = false }; var agentOptions = new BuildAgentOptions() { AgentIdentifier = "AgentID", ConcurrentBuilds = 1, WorkingPath = "WorkingPath" }; var codeInfo = new CodeRepositoryInfo() { Author = "Author", RevisionIdentifier = "RevIdent" }; var buildEntry = new BuildQueueEntry() { BuildNumber = 999 }; var project = new BuildProjectConfiguration() { ProjectID = Guid.NewGuid(), Name = "TestProject", RepositoryType = "svn", RepositoryPath = "repo-path", Variables = new Dictionary <string, string>() { { "VarTest", "123" } } }; using (var env = new BuildEnvironment("C:\\Build", writer)) { env.AddAgentVariables(agentOptions); env.AddCodeInfoVariables(codeInfo); env.AddGlobalVariables(); env.AddQueueEntryVariables(buildEntry); env.AddProjectConfigurationVariables(project); var resultCode = env.StartProcessAsync("cmd.exe", "/c set").Result; Assert.AreEqual(0, resultCode); } var vars = new Dictionary <string, string>(); using (var reader = new System.IO.StringReader(writer.StringWriter.ToString())) { string line; while (true) { line = reader.ReadLine(); if (line == null) { break; } var parts = line.Split(new char[] { '=' }, 2); vars.Add(parts[0], parts[1]); } } Assert.AreEqual("true", vars["CI"]); Assert.AreEqual("C:\\Build", vars["CI_WORKINGPATH"]); Assert.AreEqual(Environment.MachineName, vars["CI_AGENTHOST"]); Assert.AreEqual(agentOptions.AgentIdentifier, vars["CI_AGENTIDENTIFIER"]); Assert.AreEqual(codeInfo.RevisionIdentifier, vars["CI_REVISIONIDENTIFIER"]); Assert.AreEqual(codeInfo.Author, vars["CI_REVISIONAUTHOR"]); Assert.IsNotNull(vars["CI_BUILDDATE"]); Assert.IsNotNull(vars["CI_BUILDDATETIME"]); Assert.AreEqual(project.NextBuildNumber, int.Parse(vars["CI_BUILDNUMBER"])); Assert.AreEqual(project.ProjectID.ToString(), vars["CI_PROJECTID"]); Assert.AreEqual(project.Name, vars["CI_PROJECTNAME"]); Assert.AreEqual(project.RepositoryType, vars["CI_REPOSITORYTYPE"]); Assert.AreEqual(project.RepositoryPath, vars["CI_REPOSITORYPATH"]); Assert.AreEqual(project.Variables["VarTest"], vars["CI_VARTEST"]); }