Merge "Add --squash option to org.eclipse.jgit.pgm.Merge"
This commit is contained in:
commit
6da9473fe3
|
@ -43,6 +43,7 @@
|
||||||
package org.eclipse.jgit.pgm;
|
package org.eclipse.jgit.pgm;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
|
|
||||||
import org.eclipse.jgit.api.Git;
|
import org.eclipse.jgit.api.Git;
|
||||||
import org.eclipse.jgit.lib.CLIRepositoryTestCase;
|
import org.eclipse.jgit.lib.CLIRepositoryTestCase;
|
||||||
|
@ -51,11 +52,15 @@
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class MergeTest extends CLIRepositoryTestCase {
|
public class MergeTest extends CLIRepositoryTestCase {
|
||||||
|
|
||||||
|
private Git git;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
new Git(db).commit().setMessage("initial commit").call();
|
git = new Git(db);
|
||||||
|
git.commit().setMessage("initial commit").call();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -63,31 +68,56 @@ public void testMergeSelf() throws Exception {
|
||||||
assertEquals("Already up-to-date.", execute("git merge master")[0]);
|
assertEquals("Already up-to-date.", execute("git merge master")[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSquashSelf() throws Exception {
|
||||||
|
assertEquals(" (nothing to squash)Already up-to-date.",
|
||||||
|
execute("git merge master --squash")[0]);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFastForward() throws Exception {
|
public void testFastForward() throws Exception {
|
||||||
new Git(db).commit().setMessage("initial commit").call();
|
git.branchCreate().setName("side").call();
|
||||||
new Git(db).branchCreate().setName("side").call();
|
|
||||||
writeTrashFile("file", "master");
|
writeTrashFile("file", "master");
|
||||||
new Git(db).add().addFilepattern("file").call();
|
git.add().addFilepattern("file").call();
|
||||||
new Git(db).commit().setMessage("commit").call();
|
git.commit().setMessage("commit").call();
|
||||||
new Git(db).checkout().setName("side").call();
|
git.checkout().setName("side").call();
|
||||||
|
|
||||||
assertEquals("Fast-forward", execute("git merge master")[0]);
|
assertEquals("Fast-forward", execute("git merge master")[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testMerge() throws Exception {
|
public void testMerge() throws Exception {
|
||||||
new Git(db).commit().setMessage("initial commit").call();
|
git.branchCreate().setName("side").call();
|
||||||
new Git(db).branchCreate().setName("side").call();
|
|
||||||
writeTrashFile("master", "content");
|
writeTrashFile("master", "content");
|
||||||
new Git(db).add().addFilepattern("master").call();
|
git.add().addFilepattern("master").call();
|
||||||
new Git(db).commit().setMessage("master commit").call();
|
git.commit().setMessage("master commit").call();
|
||||||
new Git(db).checkout().setName("side").call();
|
git.checkout().setName("side").call();
|
||||||
writeTrashFile("side", "content");
|
writeTrashFile("side", "content");
|
||||||
new Git(db).add().addFilepattern("side").call();
|
git.add().addFilepattern("side").call();
|
||||||
new Git(db).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.RESOLVE.getName()
|
||||||
+ "' strategy.", execute("git merge master")[0]);
|
+ "' strategy.", execute("git merge master")[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSquash() throws Exception {
|
||||||
|
git.branchCreate().setName("side").call();
|
||||||
|
writeTrashFile("file1", "content1");
|
||||||
|
git.add().addFilepattern("file1").call();
|
||||||
|
git.commit().setMessage("file1 commit").call();
|
||||||
|
writeTrashFile("file2", "content2");
|
||||||
|
git.add().addFilepattern("file2").call();
|
||||||
|
git.commit().setMessage("file2 commit").call();
|
||||||
|
git.checkout().setName("side").call();
|
||||||
|
writeTrashFile("side", "content");
|
||||||
|
git.add().addFilepattern("side").call();
|
||||||
|
git.commit().setMessage("side commit").call();
|
||||||
|
|
||||||
|
assertArrayEquals(
|
||||||
|
new String[] { "Squash commit -- not updating HEAD",
|
||||||
|
"Automatic merge went well; stopped before committing as requested",
|
||||||
|
"" },
|
||||||
|
execute("git merge master --squash"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,6 +66,7 @@ listeningOn=Listening on {0}
|
||||||
mergeConflict=CONFLICT(content): Merge conflict in {0}
|
mergeConflict=CONFLICT(content): Merge conflict in {0}
|
||||||
mergeFailed=Automatic merge failed; fix conflicts and then commit the result
|
mergeFailed=Automatic merge failed; fix conflicts and then commit the result
|
||||||
mergeMadeBy=Merge made by the ''{0}'' strategy.
|
mergeMadeBy=Merge made by the ''{0}'' strategy.
|
||||||
|
mergedSquashed=Squash commit -- not updating HEAD\nAutomatic merge went well; stopped before committing as requested
|
||||||
metaVar_DAG=DAG
|
metaVar_DAG=DAG
|
||||||
metaVar_KEY=KEY
|
metaVar_KEY=KEY
|
||||||
metaVar_arg=ARG
|
metaVar_arg=ARG
|
||||||
|
@ -127,6 +128,7 @@ notAnIndexFile={0} is not an index file
|
||||||
notAnObject={0} is not an object
|
notAnObject={0} is not an object
|
||||||
notFound=!! NOT FOUND !!
|
notFound=!! NOT FOUND !!
|
||||||
noteObjectTooLargeToPrint=Note object {0} too large to print
|
noteObjectTooLargeToPrint=Note object {0} too large to print
|
||||||
|
nothingToSquash=\ (nothing to squash)
|
||||||
notOnAnyBranch=Not currently on any branch.
|
notOnAnyBranch=Not currently on any branch.
|
||||||
onBranch=On branch {0}
|
onBranch=On branch {0}
|
||||||
onBranchToBeBorn=You are on a branch yet to be born
|
onBranchToBeBorn=You are on a branch yet to be born
|
||||||
|
@ -262,6 +264,7 @@ usage_showRefNamesMatchingCommits=Show ref names matching commits
|
||||||
usage_showPatch=display patch
|
usage_showPatch=display patch
|
||||||
usage_showRefNamesMatchingCommits=Show ref names matching commits
|
usage_showRefNamesMatchingCommits=Show ref names matching commits
|
||||||
usage_showNotes=Add this ref to the list of note branches from which notes are displayed
|
usage_showNotes=Add this ref to the list of note branches from which notes are displayed
|
||||||
|
usage_squash=Squash commits as if a real merge happened, but do not make a commit or move the HEAD.
|
||||||
usage_srcPrefix=show the source prefix instead of "a/"
|
usage_srcPrefix=show the source prefix instead of "a/"
|
||||||
usage_symbolicVersionForTheProject=Symbolic version for the project
|
usage_symbolicVersionForTheProject=Symbolic version for the project
|
||||||
usage_synchronizeIPZillaData=Synchronize IPZilla data
|
usage_synchronizeIPZillaData=Synchronize IPZilla data
|
||||||
|
|
|
@ -133,6 +133,7 @@ public static String formatLine(String line) {
|
||||||
/***/ public String mergeConflict;
|
/***/ public String mergeConflict;
|
||||||
/***/ public String mergeFailed;
|
/***/ public String mergeFailed;
|
||||||
/***/ public String mergeMadeBy;
|
/***/ public String mergeMadeBy;
|
||||||
|
/***/ public String mergedSquashed;
|
||||||
/***/ public String metaVar_KEY;
|
/***/ public String metaVar_KEY;
|
||||||
/***/ public String metaVar_arg;
|
/***/ public String metaVar_arg;
|
||||||
/***/ public String metaVar_author;
|
/***/ public String metaVar_author;
|
||||||
|
@ -189,6 +190,7 @@ public static String formatLine(String line) {
|
||||||
/***/ public String notFound;
|
/***/ public String notFound;
|
||||||
/***/ public String notOnAnyBranch;
|
/***/ public String notOnAnyBranch;
|
||||||
/***/ public String noteObjectTooLargeToPrint;
|
/***/ public String noteObjectTooLargeToPrint;
|
||||||
|
/***/ public String nothingToSquash;
|
||||||
/***/ public String onBranchToBeBorn;
|
/***/ public String onBranchToBeBorn;
|
||||||
/***/ public String onBranch;
|
/***/ public String onBranch;
|
||||||
/***/ public String onlyOneMetaVarExpectedIn;
|
/***/ public String onlyOneMetaVarExpectedIn;
|
||||||
|
|
|
@ -60,6 +60,9 @@ class Merge extends TextBuiltin {
|
||||||
@Option(name = "--strategy", aliases = { "-s" }, usage = "usage_mergeStrategy")
|
@Option(name = "--strategy", aliases = { "-s" }, usage = "usage_mergeStrategy")
|
||||||
private String strategyName;
|
private String strategyName;
|
||||||
|
|
||||||
|
@Option(name = "--squash", usage = "usage_squash")
|
||||||
|
private boolean squash;
|
||||||
|
|
||||||
private MergeStrategy mergeStrategy = MergeStrategy.RESOLVE;
|
private MergeStrategy mergeStrategy = MergeStrategy.RESOLVE;
|
||||||
|
|
||||||
@Argument(required = true)
|
@Argument(required = true)
|
||||||
|
@ -83,10 +86,12 @@ protected void run() throws Exception {
|
||||||
|
|
||||||
Git git = new Git(db);
|
Git git = new Git(db);
|
||||||
MergeResult result = git.merge().setStrategy(mergeStrategy)
|
MergeResult result = git.merge().setStrategy(mergeStrategy)
|
||||||
.include(src).call();
|
.setSquash(squash).include(src).call();
|
||||||
|
|
||||||
switch (result.getMergeStatus()) {
|
switch (result.getMergeStatus()) {
|
||||||
case ALREADY_UP_TO_DATE:
|
case ALREADY_UP_TO_DATE:
|
||||||
|
if (squash)
|
||||||
|
outw.print(CLIText.get().nothingToSquash);
|
||||||
outw.println(CLIText.get().alreadyUpToDate);
|
outw.println(CLIText.get().alreadyUpToDate);
|
||||||
break;
|
break;
|
||||||
case FAST_FORWARD:
|
case FAST_FORWARD:
|
||||||
|
@ -117,6 +122,9 @@ protected void run() throws Exception {
|
||||||
outw.println(MessageFormat.format(CLIText.get().mergeMadeBy,
|
outw.println(MessageFormat.format(CLIText.get().mergeMadeBy,
|
||||||
mergeStrategy.getName()));
|
mergeStrategy.getName()));
|
||||||
break;
|
break;
|
||||||
|
case MERGED_SQUASHED:
|
||||||
|
outw.println(CLIText.get().mergedSquashed);
|
||||||
|
break;
|
||||||
case NOT_SUPPORTED:
|
case NOT_SUPPORTED:
|
||||||
outw.println(MessageFormat.format(
|
outw.println(MessageFormat.format(
|
||||||
CLIText.get().unsupportedOperation, result.toString()));
|
CLIText.get().unsupportedOperation, result.toString()));
|
||||||
|
|
Loading…
Reference in New Issue