[1] correctly observed that we are already wrapping three different operations under the git-checkout command. To lead that design -- and the Koan -- to the obvious conclusion, some additional work is required. With this patch, you can say git checkout --reset foo # reset HEAD to foo git checkout --bisect start # begin a bisection git checkout --rebase master # rebase the current branch on master and so on for any git command. Note that this actually shadows the long form of the existing --merge option. But since all reasonable Git users are extremely lazy typers, they will just use the short form (-m) and this change is not expected to cause them any problems. [1] http://stevelosh.com/blog/2013/04/git-koans/ Cc: Steve Losh <steve@xxxxxxxxxxxxx> Cc: Jeff King <peff@xxxxxxxx> Signed-off-by: Thomas Rast <trast@xxxxxxxxxxx> --- builtin/checkout.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/builtin/checkout.c b/builtin/checkout.c index f5b50e5..17419a2 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -20,6 +20,8 @@ #include "resolve-undo.h" #include "submodule.h" #include "argv-array.h" +#include "help.h" +#include "exec_cmd.h" static const char * const checkout_usage[] = { N_("git checkout [options] <branch>"), @@ -1071,6 +1073,25 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) OPT_END(), }; + if (argc > 1 && !prefixcmp(argv[1], "--")) { + const char *subcommand = argv[1] + 2; + struct cmdnames main_cmds, other_cmds; + + memset(&main_cmds, 0, sizeof(main_cmds)); + memset(&other_cmds, 0, sizeof(other_cmds)); + + load_command_list("git-", &main_cmds, &other_cmds); + + if (is_in_cmdlist(&main_cmds, subcommand) || + is_in_cmdlist(&other_cmds, subcommand)) { + const char **args = xmalloc((argc) * sizeof(char*)); + args[0] = subcommand; + memcpy(args+1, argv+2, argc*sizeof(char*)); + args[argc] = NULL; + execv_git_cmd(args); + } + } + memset(&opts, 0, sizeof(opts)); memset(&new, 0, sizeof(new)); opts.overwrite_ignore = 1; -- 1.8.3.rc1.425.g49e5819 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html