Example usage for org.eclipse.jgit.merge MergeStrategy RECURSIVE

List of usage examples for org.eclipse.jgit.merge MergeStrategy RECURSIVE

Introduction

In this page you can find the example usage for org.eclipse.jgit.merge MergeStrategy RECURSIVE.

Prototype

ThreeWayMergeStrategy RECURSIVE

To view the source code for org.eclipse.jgit.merge MergeStrategy RECURSIVE.

Click Source Link

Document

Recursive strategy to merge paths.

Usage

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);
    }
}