Use recursive merge as the default strategy since it can successfully merge more cases than the resolve strategy can. This is also the default in native Git. Change-Id: I38fd522edb2791f15d83e99038185edb09fed8e1 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>tags/v3.0.0.201305080800-m7
git.add().addFilepattern("side").call(); | git.add().addFilepattern("side").call(); | ||||
git.commit().setMessage("side commit").call(); | git.commit().setMessage("side commit").call(); | ||||
assertEquals("Merge made by the '" + MergeStrategy.RESOLVE.getName() | |||||
assertEquals("Merge made by the '" + MergeStrategy.RECURSIVE.getName() | |||||
+ "' strategy.", execute("git merge master")[0]); | + "' strategy.", execute("git merge master")[0]); | ||||
} | } | ||||
@Option(name = "--no-commit", usage = "usage_noCommit") | @Option(name = "--no-commit", usage = "usage_noCommit") | ||||
private boolean noCommit = false; | private boolean noCommit = false; | ||||
private MergeStrategy mergeStrategy = MergeStrategy.RESOLVE; | |||||
private MergeStrategy mergeStrategy = MergeStrategy.RECURSIVE; | |||||
@Argument(required = true) | @Argument(required = true) | ||||
private String ref; | private String ref; |
String cherryPickName = srcCommit.getId().abbreviate(7).name() | String cherryPickName = srcCommit.getId().abbreviate(7).name() | ||||
+ " " + srcCommit.getShortMessage(); //$NON-NLS-1$ | + " " + srcCommit.getShortMessage(); //$NON-NLS-1$ | ||||
ResolveMerger merger = (ResolveMerger) MergeStrategy.RESOLVE | |||||
ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE | |||||
.newMerger(repo); | .newMerger(repo); | ||||
merger.setWorkingTreeIterator(new FileTreeIterator(repo)); | merger.setWorkingTreeIterator(new FileTreeIterator(repo)); | ||||
merger.setBase(srcParent.getTree()); | merger.setBase(srcParent.getTree()); |
*/ | */ | ||||
public class MergeCommand extends GitCommand<MergeResult> { | public class MergeCommand extends GitCommand<MergeResult> { | ||||
private MergeStrategy mergeStrategy = MergeStrategy.RESOLVE; | |||||
private MergeStrategy mergeStrategy = MergeStrategy.RECURSIVE; | |||||
private List<Ref> commits = new LinkedList<Ref>(); | private List<Ref> commits = new LinkedList<Ref>(); | ||||
String revertName = srcCommit.getId().abbreviate(7).name() | String revertName = srcCommit.getId().abbreviate(7).name() | ||||
+ " " + srcCommit.getShortMessage(); //$NON-NLS-1$ | + " " + srcCommit.getShortMessage(); //$NON-NLS-1$ | ||||
ResolveMerger merger = (ResolveMerger) MergeStrategy.RESOLVE | |||||
ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE | |||||
.newMerger(repo); | .newMerger(repo); | ||||
merger.setWorkingTreeIterator(new FileTreeIterator(repo)); | merger.setWorkingTreeIterator(new FileTreeIterator(repo)); | ||||
merger.setBase(srcCommit.getTree()); | merger.setBase(srcCommit.getTree()); | ||||
merger.getBaseCommit(0, 1), | merger.getBaseCommit(0, 1), | ||||
new ObjectId[] { headCommit.getId(), | new ObjectId[] { headCommit.getId(), | ||||
srcParent.getId() }, | srcParent.getId() }, | ||||
MergeStatus.FAILED, MergeStrategy.RESOLVE, | |||||
MergeStatus.FAILED, MergeStrategy.RECURSIVE, | |||||
merger.getMergeResults(), failingPaths, null); | merger.getMergeResults(), failingPaths, null); | ||||
else | else | ||||
failingResult = new MergeResult(null, | failingResult = new MergeResult(null, | ||||
merger.getBaseCommit(0, 1), | merger.getBaseCommit(0, 1), | ||||
new ObjectId[] { headCommit.getId(), | new ObjectId[] { headCommit.getId(), | ||||
srcParent.getId() }, | srcParent.getId() }, | ||||
MergeStatus.CONFLICTING, MergeStrategy.RESOLVE, | |||||
MergeStatus.CONFLICTING, | |||||
MergeStrategy.RECURSIVE, | |||||
merger.getMergeResults(), failingPaths, null); | merger.getMergeResults(), failingPaths, null); | ||||
if (!merger.failed() && !unmergedPaths.isEmpty()) { | if (!merger.failed() && !unmergedPaths.isEmpty()) { | ||||
String message = new MergeMessageFormatter() | String message = new MergeMessageFormatter() |
.getParent(1)); | .getParent(1)); | ||||
ObjectId stashHeadCommit = stashCommit.getParent(0); | ObjectId stashHeadCommit = stashCommit.getParent(0); | ||||
ResolveMerger merger = (ResolveMerger) MergeStrategy.RESOLVE | |||||
ResolveMerger merger = (ResolveMerger) MergeStrategy.RECURSIVE | |||||
.newMerger(repo); | .newMerger(repo); | ||||
merger.setCommitNames(new String[] { "stashed HEAD", "HEAD", | merger.setCommitNames(new String[] { "stashed HEAD", "HEAD", | ||||
"stash" }); | "stash" }); | ||||
dco.setFailOnConflict(true); | dco.setFailOnConflict(true); | ||||
dco.checkout(); // Ignoring failed deletes.... | dco.checkout(); // Ignoring failed deletes.... | ||||
if (applyIndex) { | if (applyIndex) { | ||||
ResolveMerger ixMerger = (ResolveMerger) MergeStrategy.RESOLVE | |||||
ResolveMerger ixMerger = (ResolveMerger) MergeStrategy.RECURSIVE | |||||
.newMerger(repo, true); | .newMerger(repo, true); | ||||
ixMerger.setCommitNames(new String[] { "stashed HEAD", | ixMerger.setCommitNames(new String[] { "stashed HEAD", | ||||
"HEAD", "stashed index" }); | "HEAD", "stashed index" }); |