private void VerifyRepository(Hg hg) { Debug.Assert(hg != null); if (FailIfMultipleHeads && hg.Heads(Branch).Count.Tap(i => Log.Debug("{0} head(s) in repository", i)) != 1) { var message = string.Format(CultureInfo.CurrentCulture, "Multiple or no heads in branch '{0}'.", Branch); throw new HgSourceControlException(message); } if (hg.GetBranchForTag(Tag).Tap(b => Log.Debug("Branch for tag '{0}' is '{1}'", Tag, b)) != Branch) { var message = string.Format(CultureInfo.CurrentCulture, "Tag '{0}' is not on branch '{1}'.", Tag, Branch); throw new HgSourceControlException(message); } }
private void PullChanges(Hg hg) { Debug.Assert(hg != null); hg.Pull(SourceRepository); }
private void UpdateWorkingDirectory(Hg hg) { Debug.Assert(hg != null); Log.Debug("Updating to tag or branch '{0}'.", Tag); hg.Update(Tag.AsRevision()); }
private Revision GetTargetRevision(Hg hg) { Debug.Assert(hg != null); return hg.GetRevisionForTag(Tag); }
private void InitializeWorkingDirectory(string workingDirectory) { Debug.Assert(!string.IsNullOrEmpty(workingDirectory)); EnsureWorkingDirectory(workingDirectory); var hg = new Hg(new CruiseControlHgProcess(ProcessExecutor), _hgXmlLogParser, workingDirectory); EnsureRepository(hg); CheckVersion(hg); }
private IEnumerable<Changeset> GetChangesets(Hg hg, Revision fromRevision, Revision toRevision) { Debug.Assert(hg != null); Debug.Assert(fromRevision != null); Debug.Assert(toRevision != null); return hg .Log(Branch, fromRevision.Through(toRevision)) .Where(changeset => changeset.Hash.ToRevision() != fromRevision); }
private static void EnsureRepository(Hg hg) { Log.Debug("Ensuring '{0}' is a repository.", hg.RepositoryPath); if (hg.IsRepository) { return; } Log.Info("Creating repository at '{0}'."); hg.Init(); }
private static void CheckVersion(Hg hg) { Debug.Assert(hg != null); var version = hg.Version; if (version < VersionWarningThreshold) { Log.Warning("Hg installed version {0} is less than tested version of {1}.", version, VersionWarningThreshold); } }
public override void GetSource(IIntegrationResult result) { if (!AutoGetSource) { return; } if (result == null) { throw new ArgumentNullException("result"); } var workingDirectory = WorkingDirectoryOrDefault(result.WorkingDirectory); var hg = new Hg(new CruiseControlHgProcess(ProcessExecutor), _hgXmlLogParser, workingDirectory); UpdateWorkingDirectory(hg); }
public override Modification[] GetModifications(IIntegrationResult from, IIntegrationResult to) { if (from == null) { throw new ArgumentNullException("from"); } if (to == null) { throw new ArgumentNullException("to"); } var progressInformation = to.BuildProgressInformation; progressInformation.SignalStartRunTask("Hg: Get Modifications"); var lastBuilt = from.GetRevision(); Log.Debug("Last built from revision '{0}'", lastBuilt); var workingDirectory = WorkingDirectoryOrDefault(to.WorkingDirectory); progressInformation.AddTaskInformation("Hg: Initializing working directory"); InitializeWorkingDirectory(workingDirectory); var hg = new Hg(new CruiseControlHgProcess(ProcessExecutor), _hgXmlLogParser, workingDirectory); progressInformation.AddTaskInformation("Hg: Pulling changes"); PullChanges(hg); progressInformation.AddTaskInformation("Hg: Verifying repository"); VerifyRepository(hg); progressInformation.AddTaskInformation("Hg: Getting target revision"); var targetRevision = GetTargetRevision(hg); progressInformation.AddTaskInformation("Hg: Getting changesets"); var changesets = GetChangesets(hg, lastBuilt, targetRevision); Log.Debug("{0} Hg changeset(s) found", changesets.Count()); to.SetRevision(targetRevision); progressInformation.AddTaskInformation("Hg: Generating modifications"); return ConvertChangesetsToModifications(changesets) .TapIf(() => WebUrlBuilder != null, ems => WebUrlBuilder.SetupModification(ems)) .Tap(FillIssueUrl); }