Sort "eager" path-like options to the end of the help
The "--" path option (and all other similar options consuming all remaining arguments) should be placed at the end of the command line help. Currently jgit reset -h shows this: jgit reset [commit-ish] [path ... ...] [-- path ... ...] [--hard] [--help (-h)] [--mixed] [--soft] After the patch the help shows this: jgit reset [commit-ish] [path ... ...] [--hard] [--help (-h)] [--mixed] [--soft] [-- path ... ...] Bug: 484951 Change-Id: I3db332bf293ca8d6bfaab0d546cd35af689bd46e Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
This commit is contained in:
parent
97b4c02cda
commit
aabbc58341
|
@ -62,6 +62,13 @@ public void setUp() throws Exception {
|
||||||
git = new Git(db);
|
git = new Git(db);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPathOptionHelp() throws Exception {
|
||||||
|
String[] result = execute("git reset -h");
|
||||||
|
assertTrue("Unexpected argument: " + result[1],
|
||||||
|
result[1].endsWith("[-- path ... ...]"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testZombieArgument_Bug484951() throws Exception {
|
public void testZombieArgument_Bug484951() throws Exception {
|
||||||
String[] result = execute("git reset -h");
|
String[] result = execute("git reset -h");
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
|
|
||||||
import static org.eclipse.jgit.lib.Constants.MASTER;
|
import static org.eclipse.jgit.lib.Constants.MASTER;
|
||||||
import static org.eclipse.jgit.lib.Constants.R_HEADS;
|
import static org.eclipse.jgit.lib.Constants.R_HEADS;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
@ -55,6 +56,13 @@
|
||||||
|
|
||||||
public class StatusTest extends CLIRepositoryTestCase {
|
public class StatusTest extends CLIRepositoryTestCase {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testPathOptionHelp() throws Exception {
|
||||||
|
String[] result = execute("git status -h");
|
||||||
|
assertTrue("Unexpected argument: " + result[1],
|
||||||
|
result[1].endsWith("[-- path ... ...]"));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testStatusDefault() throws Exception {
|
public void testStatusDefault() throws Exception {
|
||||||
executeTest("git status", false, true);
|
executeTest("git status", false, true);
|
||||||
|
|
|
@ -43,11 +43,13 @@
|
||||||
|
|
||||||
package org.eclipse.jgit.pgm.opt;
|
package org.eclipse.jgit.pgm.opt;
|
||||||
|
|
||||||
|
import java.io.Writer;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.ResourceBundle;
|
||||||
|
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import org.eclipse.jgit.lib.Repository;
|
import org.eclipse.jgit.lib.Repository;
|
||||||
|
@ -65,6 +67,7 @@
|
||||||
import org.kohsuke.args4j.Option;
|
import org.kohsuke.args4j.Option;
|
||||||
import org.kohsuke.args4j.OptionDef;
|
import org.kohsuke.args4j.OptionDef;
|
||||||
import org.kohsuke.args4j.spi.OptionHandler;
|
import org.kohsuke.args4j.spi.OptionHandler;
|
||||||
|
import org.kohsuke.args4j.spi.RestOfArgumentsHandler;
|
||||||
import org.kohsuke.args4j.spi.Setter;
|
import org.kohsuke.args4j.spi.Setter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -288,4 +291,37 @@ private List<OptionHandler> getOptions() {
|
||||||
}
|
}
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void printSingleLineUsage(Writer w, ResourceBundle rb) {
|
||||||
|
List<OptionHandler> options = getOptions();
|
||||||
|
if (options.isEmpty()) {
|
||||||
|
super.printSingleLineUsage(w, rb);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<OptionHandler> backup = new ArrayList<>(options);
|
||||||
|
boolean changed = sortRestOfArgumentsHandlerToTheEnd(options);
|
||||||
|
try {
|
||||||
|
super.printSingleLineUsage(w, rb);
|
||||||
|
} finally {
|
||||||
|
if (changed) {
|
||||||
|
options.clear();
|
||||||
|
options.addAll(backup);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean sortRestOfArgumentsHandlerToTheEnd(
|
||||||
|
List<OptionHandler> options) {
|
||||||
|
for (int i = 0; i < options.size(); i++) {
|
||||||
|
OptionHandler handler = options.get(i);
|
||||||
|
if (handler instanceof RestOfArgumentsHandler
|
||||||
|
|| handler instanceof PathTreeFilterHandler) {
|
||||||
|
options.remove(i);
|
||||||
|
options.add(handler);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue