Add "Conflicts" section to merge message on conflict
The same as with cherry-pick, the commit message of a merge should include a "Conflicts" section when the merge resulted in conflicts. Change-Id: I6261dc898262322924af5ca1bef841a654b0df55 Signed-off-by: Robin Stocker <robin@nibor.org>
This commit is contained in:
parent
3151657404
commit
5dbef3fa51
|
@ -54,6 +54,7 @@
|
|||
import org.eclipse.jgit.api.MergeResult.MergeStatus;
|
||||
import org.eclipse.jgit.api.errors.InvalidMergeHeadsException;
|
||||
import org.eclipse.jgit.lib.Constants;
|
||||
import org.eclipse.jgit.lib.Ref;
|
||||
import org.eclipse.jgit.lib.RepositoryState;
|
||||
import org.eclipse.jgit.lib.RepositoryTestCase;
|
||||
import org.eclipse.jgit.merge.MergeStrategy;
|
||||
|
@ -204,6 +205,37 @@ public void testContentMerge() throws Exception {
|
|||
assertEquals(RepositoryState.MERGING, db.getRepositoryState());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMergeMessage() throws Exception {
|
||||
Git git = new Git(db);
|
||||
|
||||
writeTrashFile("a", "1\na\n3\n");
|
||||
git.add().addFilepattern("a").call();
|
||||
RevCommit initialCommit = git.commit().setMessage("initial").call();
|
||||
|
||||
createBranch(initialCommit, "refs/heads/side");
|
||||
checkoutBranch("refs/heads/side");
|
||||
|
||||
writeTrashFile("a", "1\na(side)\n3\n");
|
||||
git.add().addFilepattern("a").call();
|
||||
git.commit().setMessage("side").call();
|
||||
|
||||
checkoutBranch("refs/heads/master");
|
||||
|
||||
writeTrashFile("a", "1\na(main)\n3\n");
|
||||
git.add().addFilepattern("a").call();
|
||||
git.commit().setMessage("main").call();
|
||||
|
||||
Ref sideBranch = db.getRef("side");
|
||||
|
||||
git.merge().include(sideBranch)
|
||||
.setStrategy(MergeStrategy.RESOLVE).call();
|
||||
|
||||
assertEquals("Merge branch 'side'\n\nConflicts:\n\ta\n",
|
||||
db.readMergeCommitMsg());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testMergeNonVersionedPaths() throws Exception {
|
||||
Git git = new Git(db);
|
||||
|
|
|
@ -189,14 +189,16 @@ public MergeResult call() throws NoHeadException,
|
|||
mergeStrategy, null, null);
|
||||
} else {
|
||||
|
||||
repo.writeMergeCommitMsg(new MergeMessageFormatter().format(
|
||||
commits, head));
|
||||
String mergeMessage = new MergeMessageFormatter().format(
|
||||
commits, head);
|
||||
repo.writeMergeCommitMsg(mergeMessage);
|
||||
repo.writeMergeHeads(Arrays.asList(ref.getObjectId()));
|
||||
ThreeWayMerger merger = (ThreeWayMerger) mergeStrategy
|
||||
.newMerger(repo);
|
||||
boolean noProblems;
|
||||
Map<String, org.eclipse.jgit.merge.MergeResult<?>> lowLevelResults = null;
|
||||
Map<String, MergeFailureReason> failingPaths = null;
|
||||
List<String> unmergedPaths = null;
|
||||
if (merger instanceof ResolveMerger) {
|
||||
ResolveMerger resolveMerger = (ResolveMerger) merger;
|
||||
resolveMerger.setCommitNames(new String[] {
|
||||
|
@ -206,6 +208,7 @@ public MergeResult call() throws NoHeadException,
|
|||
lowLevelResults = resolveMerger
|
||||
.getMergeResults();
|
||||
failingPaths = resolveMerger.getFailingPaths();
|
||||
unmergedPaths = resolveMerger.getUnmergedPaths();
|
||||
} else
|
||||
noProblems = merger.merge(headCommit, srcCommit);
|
||||
|
||||
|
@ -230,13 +233,18 @@ public MergeResult call() throws NoHeadException,
|
|||
headCommit.getId(), srcCommit.getId() },
|
||||
MergeStatus.FAILED, mergeStrategy,
|
||||
lowLevelResults, failingPaths, null);
|
||||
} else
|
||||
} else {
|
||||
String mergeMessageWithConflicts = new MergeMessageFormatter()
|
||||
.formatWithConflicts(mergeMessage,
|
||||
unmergedPaths);
|
||||
repo.writeMergeCommitMsg(mergeMessageWithConflicts);
|
||||
return new MergeResult(null,
|
||||
merger.getBaseCommit(0, 1),
|
||||
new ObjectId[] { headCommit.getId(),
|
||||
srcCommit.getId() },
|
||||
MergeStatus.CONFLICTING, mergeStrategy,
|
||||
lowLevelResults, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
|
|
Loading…
Reference in New Issue