Mercurial > hg > mercurial
changeset 635:f0dce200f02a
Implement tryMerge
author | Dmitry Neverov <dmitry.neverov@jetbrains.com> |
---|---|
date | Mon, 19 Aug 2013 14:21:24 +0400 |
parents | e89816840a2e |
children | 27933884b738 |
files | mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialMergeSupport.java mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java |
diffstat | 2 files changed, 43 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialMergeSupport.java Wed Aug 14 19:59:35 2013 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialMergeSupport.java Mon Aug 19 14:21:24 2013 +0400 @@ -7,7 +7,9 @@ import com.intellij.openapi.diagnostic.Logger; import java.io.File; +import java.util.HashMap; import java.util.List; +import java.util.Map; import static jetbrains.buildServer.buildTriggers.vcs.mercurial.HgFileUtil.deleteDir; @@ -26,6 +28,46 @@ } @NotNull + public Map<MergeTask, MergeResult> tryMerge(@NotNull VcsRoot root, @NotNull List<MergeTask> tasks, @NotNull MergeOptions options) throws VcsException { + File tmpDir = null; + try { + tmpDir = HgFileUtil.createTempDir(); + HgVcsRoot hgRoot = myHgVcsRootFactory.createHgRoot(root); + myVcs.syncRepository(hgRoot);//sync in caches + + HgVcsRoot tmpRoot = hgRoot.withUrl(myVcs.getWorkingDir(hgRoot).getAbsolutePath()); + tmpRoot.setCustomWorkingDir(tmpDir); + myVcs.syncRepository(tmpRoot);//sync tmp repo + + hgRoot.setCustomWorkingDir(tmpDir); + HgRepo repo = myVcs.createRepo(hgRoot); + repo.setDefaultPath(hgRoot.getRepository()); + Map<MergeTask, MergeResult> results = new HashMap<MergeTask, MergeResult>(); + for (MergeTask task : tasks) { + MergeResult result = new MergeResult(); + try { + repo.update().toRevision(task.getDestinationRevision()).call(); + repo.merge().revision(task.getSourceRevision()).call(); + } catch (MergeConflictException e) { + List<String> conflicts = repo.resolve().call(); + result.setSuccess(false); + result.setConflicts(conflicts); + } catch (VcsException e) { + result.setSuccess(false); + } + results.put(task, result); + } + return results; + } catch (Exception e) { + if (e instanceof VcsException) + throw (VcsException) e; + throw new VcsException(e); + } finally { + deleteDir(tmpDir, LOG); + } + } + + @NotNull public MergeResult merge(@NotNull VcsRoot root, @NotNull String srcRevision, @NotNull String dstBranch,
--- a/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Wed Aug 14 19:59:35 2013 +0400 +++ b/mercurial-server/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/MercurialVcsSupport.java Mon Aug 19 14:21:24 2013 +0400 @@ -575,7 +575,7 @@ return label.replace(':', '_').replace('\r', '_').replace('\n', '_'); } - File getWorkingDir(HgVcsRoot root) { + public File getWorkingDir(HgVcsRoot root) { File customDir = root.getCustomWorkingDir(); return customDir != null ? customDir : myMirrorManager.getMirrorDir(root.getRepository()); }