List of usage examples for org.eclipse.jgit.merge MergeStrategy RESOLVE
ThreeWayMergeStrategy RESOLVE
To view the source code for org.eclipse.jgit.merge MergeStrategy RESOLVE.
Click Source Link
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(); }