List of usage examples for org.eclipse.jgit.merge MergeStrategy RECURSIVE
ThreeWayMergeStrategy RECURSIVE
To view the source code for org.eclipse.jgit.merge MergeStrategy RECURSIVE.
Click Source Link
From source file:jetbrains.buildServer.buildTriggers.vcs.git.GitMergeSupport.java
License:Apache License
@NotNull private ObjectId mergeCommits(@NotNull GitVcsRoot gitRoot, @NotNull Repository db, @NotNull RevCommit srcCommit, @NotNull RevCommit dstCommit, @NotNull String message, @NotNull MergeOptions options) throws IOException, MergeFailedException { if (!alwaysCreateMergeCommit(options)) { RevWalk walk = new RevWalk(db); try {// ww w .j a va 2s .co m if (walk.isMergedInto(walk.parseCommit(dstCommit), walk.parseCommit(srcCommit))) { LOG.debug("Commit " + srcCommit.name() + " already merged into " + dstCommit + ", skip the merge"); return srcCommit; } } finally { walk.release(); } } if (tryRebase(options)) { LOG.debug("Run rebase, root " + gitRoot + ", revision " + srcCommit.name() + ", destination " + dstCommit.name()); try { return rebase(gitRoot, db, srcCommit, dstCommit); } catch (MergeFailedException e) { if (enforceLinearHistory(options)) { LOG.debug("Rebase failed, root " + gitRoot + ", revision " + srcCommit.name() + ", destination " + dstCommit.name(), e); throw e; } } catch (IOException e) { if (enforceLinearHistory(options)) { LOG.debug("Rebase failed, root " + gitRoot + ", revision " + srcCommit.name() + ", destination " + dstCommit.name(), e); throw e; } } } ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(db, true); boolean mergeSuccessful = merger.merge(dstCommit, srcCommit); if (!mergeSuccessful) { List<String> conflicts = merger.getUnmergedPaths(); Collections.sort(conflicts); LOG.debug("Merge failed with conflicts, root " + gitRoot + ", revision " + srcCommit.name() + ", destination " + dstCommit.name() + ", conflicts " + conflicts); throw new MergeFailedException(conflicts); } ObjectInserter inserter = db.newObjectInserter(); DirCache dc = DirCache.newInCore(); DirCacheBuilder dcb = dc.builder(); dcb.addTree(new byte[] {}, 0, db.getObjectDatabase().newReader(), merger.getResultTreeId()); inserter.flush(); dcb.finish(); ObjectId writtenTreeId = dc.writeTree(inserter); CommitBuilder commitBuilder = new CommitBuilder(); commitBuilder.setCommitter(gitRoot.getTagger(db)); commitBuilder.setAuthor(gitRoot.getTagger(db)); commitBuilder.setMessage(message); commitBuilder.addParentId(dstCommit); commitBuilder.addParentId(srcCommit); commitBuilder.setTreeId(writtenTreeId); ObjectId commitId = inserter.insert(commitBuilder); inserter.flush(); return commitId; }
From source file:jetbrains.buildServer.buildTriggers.vcs.git.GitMergeSupport.java
License:Apache License
@NotNull private ObjectId rebaseCommit(@NotNull GitVcsRoot gitRoot, @NotNull Repository db, @NotNull ObjectInserter inserter, @NotNull RevCommit original, @NotNull RevCommit base) throws IOException, MergeFailedException { final RevCommit parentCommit = original.getParent(0); if (base.equals(parentCommit)) return original; ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE.newMerger(db, true); merger.setBase(parentCommit);/*from www .j a v a 2 s. com*/ merger.merge(original, base); if (merger.getResultTreeId() == null) throw new MergeFailedException(merger.getUnmergedPaths()); if (base.getTree().getId().equals(merger.getResultTreeId())) return base; final CommitBuilder cb = new CommitBuilder(); cb.setTreeId(merger.getResultTreeId()); cb.setParentId(base); cb.setAuthor(GitServerUtil.getAuthorIdent(original)); cb.setCommitter(gitRoot.getTagger(db)); cb.setMessage(GitServerUtil.getFullMessage(original)); final ObjectId objectId = inserter.insert(cb); inserter.flush(); return objectId; }
From source file:org.eclipse.emf.compare.diagram.papyrus.tests.egit.fixture.GitTestRepository.java
License:Open Source License
/** * Merge the given ref with the current HEAD, using the textual "recursive" strategy. * /*from w ww. j av a 2 s. c o m*/ * @param refName * Name of a commit to merge with the current HEAD. */ public void mergeTextual(String refName) throws CoreException { new MergeOperation(repository, refName, MergeStrategy.RECURSIVE.getName()).execute(null); }
From source file:org.eclipse.emf.compare.git.pgm.internal.app.LogicalMergeApplication.java
License:Open Source License
/** * {@inheritDoc}./*from w ww . ja va 2 s. c o m*/ */ @Override protected Integer performGitCommand() throws Die { try { MergeOperation merge = new MergeOperation(repo, commit.getName()); if (message != null) { merge.setMessage(message); } merge.execute(new NullProgressMonitor()); MergeResult result = merge.getResult(); Ref oldHead = repo.getRef(Constants.HEAD); return handleResult(result, oldHead, MergeStrategy.RECURSIVE); } catch (Exception e) { progressPageLog.log(e); throw new DiesOn(DeathType.FATAL).duedTo(e).ready(); } }
From source file:org.uberfire.java.nio.fs.jgit.util.commands.Merge.java
License:Apache License
private void canMerge(final Repository repo, final RevCommit commonAncestor, final RevCommit sourceCommitTree, final RevCommit targetCommitTree, final String sourceBranch, final String targetBranch) { try {//from w w w . j av a 2 s .c o m ThreeWayMerger merger = MergeStrategy.RECURSIVE.newMerger(repo, true); merger.setBase(commonAncestor); boolean canMerge = merger.merge(sourceCommitTree, targetCommitTree); if (!canMerge) { throw new GitException(String.format("Cannot merge braches from <%s> to <%s>, merge conflicts", sourceBranch, targetBranch)); } } catch (IOException e) { throw new GitException(String.format("Cannot merge braches from <%s> to <%s>, merge conflicts", sourceBranch, targetBranch), e); } }