Browse Source

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>
tags/v0.12.1
Robin Stocker 13 years ago
parent
commit
5dbef3fa51

+ 32
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/MergeCommandTest.java View File

@@ -54,6 +54,7 @@ import java.util.Iterator;
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 class MergeCommandTest extends RepositoryTestCase {
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);

+ 11
- 3
org.eclipse.jgit/src/org/eclipse/jgit/api/MergeCommand.java View File

@@ -189,14 +189,16 @@ public class MergeCommand extends GitCommand<MergeResult> {
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 class MergeCommand extends GitCommand<MergeResult> {
lowLevelResults = resolveMerger
.getMergeResults();
failingPaths = resolveMerger.getFailingPaths();
unmergedPaths = resolveMerger.getUnmergedPaths();
} else
noProblems = merger.merge(headCommit, srcCommit);

@@ -230,13 +233,18 @@ public class MergeCommand extends GitCommand<MergeResult> {
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…
Cancel
Save