Mercurial > hg > mercurial
view mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MergeBaseWithRevsets.java @ 349:e0464f11206c
TW-19698 Handle unrelated repositories
When repository becames unrelated - clone it in different
directory on the server. When changes are collected and any of
revisions is from unrelated repository - return empty changes
collection.
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Thu, 12 Jan 2012 18:21:07 +0400 |
parents | e9e7d9fcf57d |
children |
line wrap: on
line source
package jetbrains.buildServer.buildTriggers.vcs.mercurial; import jetbrains.buildServer.buildTriggers.vcs.mercurial.command.*; import jetbrains.buildServer.vcs.VcsException; import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.List; /** * Implementation of merge-base using hg revsets * @author dmitry.neverov */ public final class MergeBaseWithRevsets implements MergeBaseCommand { private final Settings mySettings; private final File myWorkingDir; private final CommandFactoryImpl myCommandFactory; public MergeBaseWithRevsets(@NotNull final Settings settings, @NotNull final File workingDir, @NotNull final CommandFactoryImpl commandFactory) { mySettings = settings; myWorkingDir = workingDir; myCommandFactory = commandFactory; } public String execute(@NotNull final String revision1, @NotNull final String revision2) throws VcsException { try { LogCommand log = myCommandFactory.createLog(mySettings, myWorkingDir); log.setRevsets("ancestor(" + new ChangeSetRevision(revision1).getId() + ", " + new ChangeSetRevision(revision2).getId() + ")"); log.showCommitsFromAllBranches(); log.setCalculateParents(false); List<ChangeSet> csets = log.execute(); return csets.isEmpty() ? null : csets.get(0).getId(); } catch (VcsException e) { return null; } } }