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

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

Introduction

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

Prototype

ThreeWayMergeStrategy RESOLVE

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

Click Source Link

Document

Simple strategy to merge paths.

Usage

From source file:com.google.appraise.eclipse.core.client.git.AppraiseGitReviewClient.java

License:Open Source License

/**
 * Merges the notes from local and origin commits with the given merge base.
 *///from w  ww.ja va  2s .co m
private void mergeNotesAndPush(RevWalk revWalk, String refName, RevCommit baseCommit, RevCommit localCommit,
        RevCommit originCommit) throws GitClientException {
    int remainingLockFailureCalls = JgitUtils.MAX_LOCK_FAILURE_CALLS;

    // Merge and commit.
    while (true) {
        try {
            NoteMap theirNoteMap = NoteMap.read(revWalk.getObjectReader(), originCommit);
            NoteMap ourNoteMap = NoteMap.read(revWalk.getObjectReader(), localCommit);
            NoteMap baseNoteMap;
            if (baseCommit != null) {
                baseNoteMap = NoteMap.read(revWalk.getObjectReader(), baseCommit);
            } else {
                baseNoteMap = NoteMap.newEmptyMap();
            }

            NoteMapMerger merger = new NoteMapMerger(repo, new DefaultNoteMerger(), MergeStrategy.RESOLVE);
            NoteMap merged = merger.merge(baseNoteMap, ourNoteMap, theirNoteMap);
            try (ObjectInserter inserter = repo.newObjectInserter()) {
                RevCommit mergeCommit = createNotesCommit(merged, inserter, revWalk, "Merged note commits\n",
                        localCommit, originCommit);

                RefUpdate update = JgitUtils.updateRef(repo, mergeCommit, localCommit, refName);
                Result result = update.update();
                if (result == Result.LOCK_FAILURE) {
                    if (--remainingLockFailureCalls > 0) {
                        Thread.sleep(JgitUtils.SLEEP_ON_LOCK_FAILURE_MS);
                    } else {
                        throw new GitClientException("Failed to lock the ref: " + refName);
                    }
                } else if (result == Result.REJECTED) {
                    throw new GitClientException("Rejected update to " + refName + ", this is unexpected");
                } else if (result == Result.IO_FAILURE) {
                    throw new GitClientException("I/O failure merging notes");
                } else {
                    // OK.
                    break;
                }
            }
        } catch (Exception e) {
            throw new GitClientException("Error merging notes commits", e);
        }
    }

    // And push.
    try {
        pushCommentsAndReviews();
    } catch (Exception e) {
        throw new GitClientException("Error pushing merge commit", e);
    }
}

From source file:com.google.gerrit.server.edit.ChangeEditModifier.java

License:Apache License

/**
 * Rebase change edit on latest patch set
 *
 * @param edit change edit that contains edit to rebase
 * @param current patch set to rebase the edit on
 * @throws AuthException/*from  w  ww.j ava 2  s.c o m*/
 * @throws ResourceConflictException thrown if rebase fails due to merge conflicts
 * @throws InvalidChangeOperationException
 * @throws IOException
 */
public void rebaseEdit(ChangeEdit edit, PatchSet current)
        throws AuthException, ResourceConflictException, InvalidChangeOperationException, IOException {
    if (!currentUser.get().isIdentifiedUser()) {
        throw new AuthException("Authentication required");
    }

    Change change = edit.getChange();
    IdentifiedUser me = (IdentifiedUser) currentUser.get();
    String refName = RefNames.refsEdit(me.getAccountId(), change.getId(), current.getId());
    try (Repository repo = gitManager.openRepository(change.getProject());
            RevWalk rw = new RevWalk(repo);
            ObjectInserter inserter = repo.newObjectInserter()) {
        BatchRefUpdate ru = repo.getRefDatabase().newBatchUpdate();
        RevCommit editCommit = edit.getEditCommit();
        if (editCommit.getParentCount() == 0) {
            throw new InvalidChangeOperationException("Rebase edit against root commit not supported");
        }
        RevCommit tip = rw.parseCommit(ObjectId.fromString(current.getRevision().get()));
        ThreeWayMerger m = MergeStrategy.RESOLVE.newMerger(repo, true);
        m.setObjectInserter(inserter);
        m.setBase(ObjectId.fromString(edit.getBasePatchSet().getRevision().get()));

        if (m.merge(tip, editCommit)) {
            ObjectId tree = m.getResultTreeId();

            CommitBuilder commit = new CommitBuilder();
            commit.setTreeId(tree);
            for (int i = 0; i < tip.getParentCount(); i++) {
                commit.addParentId(tip.getParent(i));
            }
            commit.setAuthor(editCommit.getAuthorIdent());
            commit.setCommitter(new PersonIdent(editCommit.getCommitterIdent(), TimeUtil.nowTs()));
            commit.setMessage(editCommit.getFullMessage());
            ObjectId newEdit = inserter.insert(commit);
            inserter.flush();

            ru.addCommand(new ReceiveCommand(ObjectId.zeroId(), newEdit, refName));
            ru.addCommand(
                    new ReceiveCommand(edit.getRef().getObjectId(), ObjectId.zeroId(), edit.getRefName()));
            ru.execute(rw, NullProgressMonitor.INSTANCE);
            for (ReceiveCommand cmd : ru.getCommands()) {
                if (cmd.getResult() != ReceiveCommand.Result.OK) {
                    throw new IOException("failed: " + cmd);
                }
            }
        } else {
            // TODO(davido): Allow to resolve conflicts inline
            throw new ResourceConflictException("merge conflict");
        }
    }
}

From source file:com.google.gerrit.server.git.MergeUtil.java

License:Apache License

public static ThreeWayMergeStrategy getMergeStrategy(Config cfg) {
    return useRecursiveMerge(cfg) ? MergeStrategy.RECURSIVE : MergeStrategy.RESOLVE;
}

From source file:com.google.gerrit.server.git.MergeUtil.java

License:Apache License

public static String mergeStrategyName(boolean useContentMerge, boolean useRecursiveMerge) {
    if (useContentMerge) {
        // Settings for this project allow us to try and automatically resolve
        // conflicts within files if needed. Use either the old resolve merger or
        // new recursive merger, and instruct to operate in core.
        if (useRecursiveMerge) {
            return MergeStrategy.RECURSIVE.getName();
        } else {//from   w  w  w.jav  a 2  s. c  o  m
            return MergeStrategy.RESOLVE.getName();
        }
    } else {
        // No auto conflict resolving allowed. If any of the
        // affected files was modified, merge will fail.
        return MergeStrategy.SIMPLE_TWO_WAY_IN_CORE.getName();
    }
}

From source file:com.google.gerrit.server.git.NotesBranchUtil.java

License:Apache License

private void updateRef(String notesBranch) throws IOException, MissingObjectException,
        IncorrectObjectTypeException, CorruptObjectException, ConcurrentRefUpdateException {
    if (baseCommit != null && oursCommit.getTree().equals(baseCommit.getTree())) {
        // If the trees are identical, there is no change in the notes.
        // Avoid saving this commit as it has no new information.
        return;//  w  w w .  ja  v  a 2 s .  c om
    }

    int remainingLockFailureCalls = MAX_LOCK_FAILURE_CALLS;
    RefUpdate refUpdate = createRefUpdate(notesBranch, oursCommit, baseCommit);

    for (;;) {
        Result result = refUpdate.update();

        if (result == Result.LOCK_FAILURE) {
            if (--remainingLockFailureCalls > 0) {
                try {
                    Thread.sleep(SLEEP_ON_LOCK_FAILURE_MS);
                } catch (InterruptedException e) {
                    // ignore
                }
            } else {
                throw new ConcurrentRefUpdateException("Failed to lock the ref: " + notesBranch,
                        refUpdate.getRef(), result);
            }

        } else if (result == Result.REJECTED) {
            RevCommit theirsCommit = revWalk.parseCommit(refUpdate.getOldObjectId());
            NoteMap theirs = NoteMap.read(revWalk.getObjectReader(), theirsCommit);
            NoteMapMerger merger = new NoteMapMerger(db, getNoteMerger(), MergeStrategy.RESOLVE);
            NoteMap merged = merger.merge(base, ours, theirs);
            RevCommit mergeCommit = createCommit(merged, gerritIdent, "Merged note commits\n", theirsCommit,
                    oursCommit);
            refUpdate = createRefUpdate(notesBranch, mergeCommit, theirsCommit);
            remainingLockFailureCalls = MAX_LOCK_FAILURE_CALLS;

        } else if (result == Result.IO_FAILURE) {
            throw new IOException("Couldn't update " + notesBranch + ". " + result.name());
        } else {
            gitRefUpdated.fire(project, refUpdate);
            break;
        }
    }
}

From source file:com.microsoft.gittf.client.clc.commands.PullCommand.java

License:Open Source License

private MergeStrategy getSpecifiedMergeStrategy() {
    if (getArguments().contains("ours")) //$NON-NLS-1$
    {//from   w w w.j a v a  2 s.  c  om
        return MergeStrategy.OURS;
    } else if (getArguments().contains("theirs")) //$NON-NLS-1$
    {
        return MergeStrategy.THEIRS;
    }

    return MergeStrategy.RESOLVE;
}

From source file:com.microsoft.gittf.core.tasks.PullTaskTest.java

License:Open Source License

@Test
public void testPullMergeResolve() throws Exception {
    runPullTask(MergeStrategy.RESOLVE);

    String gitRepositoryPath = repository.getWorkTree().getAbsolutePath();

    // Verify Changeset 4 content merged into head
    assertTrue(//from w  w  w.  ja  v a2 s. co  m
            mockVersionControlService.verifyFileContent(new File(gitRepositoryPath, "project/folder/file1.txt"), //$NON-NLS-1$
                    "$/project/folder/file1.txt", //$NON-NLS-1$
                    4));

    assertTrue(mockVersionControlService.verifyFileContent(
            new File(gitRepositoryPath, "project/folder2/file1.txt"), //$NON-NLS-1$
            "$/project/folder2/file1.txt", //$NON-NLS-1$
            4));

    assertTrue(mockVersionControlService.verifyFileContent(
            new File(gitRepositoryPath, "project/folder/nestedFolder/file1.txt"), //$NON-NLS-1$
            "$/project/folder/nestedFolder/file1.txt", //$NON-NLS-1$
            4));

    // Verify git commit content is still in head
    assertTrue(Util.verifyFileContent(new File(gitRepositoryPath, "project/folder/file2.txt"), //$NON-NLS-1$
            Util.generateContentForFileInGit("project/folder/file2.txt"))); //$NON-NLS-1$

    assertTrue(Util.verifyFileContent(new File(gitRepositoryPath, "project/folder2/file2.txt"), //$NON-NLS-1$
            Util.generateContentForFileInGit("project/folder2/file2.txt"))); //$NON-NLS-1$

    assertTrue(Util.verifyFileContent(new File(gitRepositoryPath, "project/folder/nestedFolder/file2.txt"), //$NON-NLS-1$
            Util.generateContentForFileInGit("project/folder/nestedFolder/file2.txt"))); //$NON-NLS-1$
}

From source file:org.ajoberstar.gradle.git.tasks.GitMerge.java

License:Apache License

/**
 * Attempts to get a valid {@link MergeStrategy} out of the user
 * configuration//from   w  ww . ja v a  2s.co  m
 * 
 * @return the merge strategy corresponding to the user input 
 */
private MergeStrategy getMergeStrategy() {
    String modeConfig = ObjectUtil.unpackString(getStrategy());
    if (modeConfig == null) {
        return MergeStrategy.RESOLVE;
    } else {
        try {
            return MergeStrategy.get(modeConfig.toUpperCase());
        } catch (Exception e) {
            throw new GradleException(
                    "No valid merge strategy could be " + "identified from the specified input: " + modeConfig,
                    e);
        }
    }
}

From source file:org.eclipse.egit.core.test.PreferredMergeStrategyTest.java

License:Open Source License

@Test
public void testGetPreferredMergeStrategyWhenValidPreference() {
    // Using "resolve" here because there's no need for more configuration
    // in this test, it is a registered MergeStrategy
    InstanceScope.INSTANCE.getNode(Activator.getPluginId()).put(GitCorePreferences.core_preferredMergeStrategy,
            "resolve");

    assertSame(MergeStrategy.RESOLVE, a.getPreferredMergeStrategy());
}

From source file:org.gitective.tests.GitTestCase.java

License:Open Source License

/**
 * Merge ref into current branch/*from  w w  w .  j av  a2s  . c om*/
 *
 * @param ref
 * @return result
 * @throws Exception
 */
protected MergeResult merge(String ref) throws Exception {
    Git git = Git.open(testRepo);
    return git.merge().setStrategy(MergeStrategy.RESOLVE)
            .include(CommitUtils.getCommit(git.getRepository(), ref)).call();
}