Example usage for org.eclipse.jgit.notes DefaultNoteMerger DefaultNoteMerger

List of usage examples for org.eclipse.jgit.notes DefaultNoteMerger DefaultNoteMerger

Introduction

In this page you can find the example usage for org.eclipse.jgit.notes DefaultNoteMerger DefaultNoteMerger.

Prototype

DefaultNoteMerger

Source Link

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.
 *///  w w  w .j av  a 2s .c  o  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.appraise.eclipse.core.client.git.GitNoteWriter.java

License:Open Source License

private void add(T noteRecord)
        throws MissingObjectException, IncorrectObjectTypeException, IOException, RuntimeException {
    ObjectId noteContent = createNoteContent(noteRecord);
    if (ours.contains(reviewCommit)) {
        // merge the existing and the new note as if they are both new
        // means: base == null
        // there is not really a common ancestry for these two note revisions
        // use the same NoteMerger that is used from the NoteMapMerger
        NoteMerger noteMerger = new DefaultNoteMerger();
        Note newNote = new Note(reviewCommit, noteContent);
        noteContent = noteMerger.merge(null, newNote, ours.getNote(reviewCommit), reader, inserter).getData();
    }/*from  w  ww.  j  a  v a2 s .com*/
    ours.set(reviewCommit, noteContent);
}