{"thread":{"id":"19112","subject":"[PATCH 1/2] parse-opt: make PARSE_OPT_STOP_AT_NON_OPTION available to git rev-parse","startedAt":"2009-04-28T20:29:23Z","lastAt":"2009-06-07T18:19:48Z","messageCount":5,"participants":["Uwe Kleine-König","Jeff King"],"isPatch":true,"patchVersion":1,"patchTotal":2},"messages":[{"id":"112551","messageId":"1240950564-15124-1-git-send-email-u.kleine-koenig@pengutronix.de","threadId":"19112","inReplyTo":null,"subject":"[PATCH 1/2] parse-opt: make PARSE_OPT_STOP_AT_NON_OPTION available to git rev-parse","fromName":"Uwe Kleine-König","fromEmail":"u.kleine-koenig@pengutronix.de","sentAt":"2009-04-28T20:29:23Z","receivedAt":"2009-04-28T20:29:23Z","isPatch":true,"sender":{"key":"u.kleine-koenig@pengutronix.de","avatar":"https://gravatar.com/avatar/354b5e3ceb2806a2f1e1e382ac29ddbdad18288654da62b61eb13583a857eee7?d=mp&s=160"},"body":"Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>\n---\n Documentation/git-rev-parse.txt |    5 +++++\n builtin-rev-parse.c             |    8 ++++++--\n 2 files changed, 11 insertions(+), 2 deletions(-)\n\ndiff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt\nindex fba30b1..8d3ba14 100644\n--- a/Documentation/git-rev-parse.txt\n+++ b/Documentation/git-rev-parse.txt\n@@ -30,6 +30,11 @@ OPTIONS\n \tOnly meaningful in `--parseopt` mode. Tells the option parser to echo\n \tout the first `--` met instead of skipping it.\n \n+--stop-at-non-option::\n+\tOnly meaningful in `--parseopt` mode.  Lets the option parser stop at\n+\tthe first non-option argument.  This can be used to parse sub-commands\n+\tthat take options themself.\n+\n --revs-only::\n \tDo not output flags and parameters not meant for\n \t'git-rev-list' command.\ndiff --git a/builtin-rev-parse.c b/builtin-rev-parse.c\nindex 22c6d6a..864f13d 100644\n--- a/builtin-rev-parse.c\n+++ b/builtin-rev-parse.c\n@@ -301,7 +301,7 @@ static const char *skipspaces(const char *s)\n \n static int cmd_parseopt(int argc, const char **argv, const char *prefix)\n {\n-\tstatic int keep_dashdash = 0;\n+\tstatic int keep_dashdash = 0, stop_at_non_option = 0;\n \tstatic char const * const parseopt_usage[] = {\n \t\t\"git rev-parse --parseopt [options] -- [<args>...]\",\n \t\tNULL\n@@ -309,6 +309,9 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)\n \tstatic struct option parseopt_opts[] = {\n \t\tOPT_BOOLEAN(0, \"keep-dashdash\", &keep_dashdash,\n \t\t\t\t\t\"keep the `--` passed as an arg\"),\n+\t\tOPT_BOOLEAN(0, \"stop-at-non-option\", &stop_at_non_option,\n+\t\t\t\t\t\"stop parsing after the \"\n+\t\t\t\t\t\"first non-option argument\"),\n \t\tOPT_END(),\n \t};\n \n@@ -394,7 +397,8 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)\n \tALLOC_GROW(opts, onb + 1, osz);\n \tmemset(opts + onb, 0, sizeof(opts[onb]));\n \targc = parse_options(argc, argv, opts, usage,\n-\t                     keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0);\n+\t\t\tkeep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0 |\n+\t\t\tstop_at_non_option ? PARSE_OPT_STOP_AT_NON_OPTION : 0);\n \n \tstrbuf_addf(&parsed, \" --\");\n \tsq_quote_argv(&parsed, argv, 0);\n-- \n1.6.2.4\n"},{"id":"112552","messageId":"1240950564-15124-2-git-send-email-u.kleine-koenig@pengutronix.de","threadId":"19112","inReplyTo":"1240950564-15124-1-git-send-email-u.kleine-koenig@pengutronix.de","subject":"[PATCH 2/2] parseopt: fix documentation for --keep-dashdash","fromName":"Uwe Kleine-König","fromEmail":"u.kleine-koenig@pengutronix.de","sentAt":"2009-04-28T20:29:24Z","receivedAt":"2009-04-28T20:29:24Z","isPatch":true,"sender":{"key":"u.kleine-koenig@pengutronix.de","avatar":"https://gravatar.com/avatar/354b5e3ceb2806a2f1e1e382ac29ddbdad18288654da62b61eb13583a857eee7?d=mp&s=160"},"body":"Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>\n---\n Documentation/git-rev-parse.txt |    2 +-\n 1 files changed, 1 insertions(+), 1 deletions(-)\n\ndiff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt\nindex 8d3ba14..0e4746f 100644\n--- a/Documentation/git-rev-parse.txt\n+++ b/Documentation/git-rev-parse.txt\n@@ -26,7 +26,7 @@ OPTIONS\n --parseopt::\n \tUse 'git-rev-parse' in option parsing mode (see PARSEOPT section below).\n \n---keep-dash-dash::\n+--keep-dashdash::\n \tOnly meaningful in `--parseopt` mode. Tells the option parser to echo\n \tout the first `--` met instead of skipping it.\n \n-- \n1.6.2.4\n"},{"id":"112590","messageId":"20090429040804.GB14912@coredump.intra.peff.net","threadId":"19112","inReplyTo":"1240950564-15124-1-git-send-email-u.kleine-koenig@pengutronix.de","subject":"Re: [PATCH 1/2] parse-opt: make PARSE_OPT_STOP_AT_NON_OPTION available to git rev-parse","fromName":"Jeff King","fromEmail":"peff@peff.net","sentAt":"2009-04-29T04:08:04Z","receivedAt":"2009-04-29T04:08:04Z","isPatch":true,"sender":{"key":"peff@peff.net","avatar":"https://avatars.githubusercontent.com/u/45925?v=4"},"body":"On Tue, Apr 28, 2009 at 10:29:23PM +0200, Uwe Kleine-König wrote:\n\n> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>\n> ---\n>  Documentation/git-rev-parse.txt |    5 +++++\n>  builtin-rev-parse.c             |    8 ++++++--\n>  2 files changed, 11 insertions(+), 2 deletions(-)\n\nI expected there to be a shell caller here or in patch 2/2, but there\nisn't. Is this for topgit?\n\n-Peff\n"},{"id":"112611","messageId":"20090429081022.GA18521@pengutronix.de","threadId":"19112","inReplyTo":"20090429040804.GB14912@coredump.intra.peff.net","subject":"Re: [PATCH 1/2] parse-opt: make PARSE_OPT_STOP_AT_NON_OPTION available to git rev-parse","fromName":"Uwe Kleine-König","fromEmail":"u.kleine-koenig@pengutronix.de","sentAt":"2009-04-29T08:10:22Z","receivedAt":"2009-04-29T08:10:22Z","isPatch":true,"sender":{"key":"u.kleine-koenig@pengutronix.de","avatar":"https://gravatar.com/avatar/354b5e3ceb2806a2f1e1e382ac29ddbdad18288654da62b61eb13583a857eee7?d=mp&s=160"},"body":"Hi Jeff,\n\nOn Wed, Apr 29, 2009 at 12:08:04AM -0400, Jeff King wrote:\n> On Tue, Apr 28, 2009 at 10:29:23PM +0200, Uwe Kleine-König wrote:\n> \n> > Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>\n> > ---\n> >  Documentation/git-rev-parse.txt |    5 +++++\n> >  builtin-rev-parse.c             |    8 ++++++--\n> >  2 files changed, 11 insertions(+), 2 deletions(-)\n> \n> I expected there to be a shell caller here or in patch 2/2, but there\n> isn't. Is this for topgit?\nYes, I had topgit in mind when adding that option.  Assuming it will\nmake it into git.git, I won't use it for some time though to not depend\non bleeding edge for topgit, though.\n\nIt wasn't intentionally that I sent the two patches in a series.\n\nBest regards\nUwe\n\n-- \nPengutronix e.K.                              | Uwe Kleine-König            |\nIndustrial Linux Solutions                    | http://www.pengutronix.de/  |\n"},{"id":"115722","messageId":"1244398788-6777-1-git-send-email-u.kleine-koenig@pengutronix.de","threadId":"19112","inReplyTo":"1240950564-15124-1-git-send-email-u.kleine-koenig@pengutronix.de","subject":"[RESEND PATCH] parse-opt: make PARSE_OPT_STOP_AT_NON_OPTION available to git rev-parse","fromName":"Uwe Kleine-König","fromEmail":"u.kleine-koenig@pengutronix.de","sentAt":"2009-06-07T18:19:48Z","receivedAt":"2009-06-07T18:19:48Z","isPatch":true,"sender":{"key":"u.kleine-koenig@pengutronix.de","avatar":"https://gravatar.com/avatar/354b5e3ceb2806a2f1e1e382ac29ddbdad18288654da62b61eb13583a857eee7?d=mp&s=160"},"body":"Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>\n---\nHello,\n\nthere is no caller for --stop-at-non-option in git-core itself.  This is\nmainly targeted for topgit and its successor I currently code up.\n\nSince the last post I only updated it because the old patch resulted in\ntwo merge conflicts (git-rev-parse learned \"--sq-quote\" and parse_options\ngot a new argument \"prefix\")\n\n Documentation/git-rev-parse.txt |    5 +++++\n builtin-rev-parse.c             |    8 ++++++--\n 2 files changed, 11 insertions(+), 2 deletions(-)\n\ndiff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt\nindex 4bbdd05..82045a2 100644\n--- a/Documentation/git-rev-parse.txt\n+++ b/Documentation/git-rev-parse.txt\n@@ -30,6 +30,11 @@ OPTIONS\n \tOnly meaningful in `--parseopt` mode. Tells the option parser to echo\n \tout the first `--` met instead of skipping it.\n \n+--stop-at-non-option::\n+\tOnly meaningful in `--parseopt` mode.  Lets the option parser stop at\n+\tthe first non-option argument.  This can be used to parse sub-commands\n+\tthat take options themself.\n+\n --sq-quote::\n \tUse 'git-rev-parse' in shell quoting mode (see SQ-QUOTE\n \tsection below). In contrast to the `--sq` option below, this\ndiff --git a/builtin-rev-parse.c b/builtin-rev-parse.c\nindex 112d622..5ea7518 100644\n--- a/builtin-rev-parse.c\n+++ b/builtin-rev-parse.c\n@@ -301,7 +301,7 @@ static const char *skipspaces(const char *s)\n \n static int cmd_parseopt(int argc, const char **argv, const char *prefix)\n {\n-\tstatic int keep_dashdash = 0;\n+\tstatic int keep_dashdash = 0, stop_at_non_option = 0;\n \tstatic char const * const parseopt_usage[] = {\n \t\t\"git rev-parse --parseopt [options] -- [<args>...]\",\n \t\tNULL\n@@ -309,6 +309,9 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)\n \tstatic struct option parseopt_opts[] = {\n \t\tOPT_BOOLEAN(0, \"keep-dashdash\", &keep_dashdash,\n \t\t\t\t\t\"keep the `--` passed as an arg\"),\n+\t\tOPT_BOOLEAN(0, \"stop-at-non-option\", &stop_at_non_option,\n+\t\t\t\t\t\"stop parsing after the \"\n+\t\t\t\t\t\"first non-option argument\"),\n \t\tOPT_END(),\n \t};\n \n@@ -394,7 +397,8 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)\n \tALLOC_GROW(opts, onb + 1, osz);\n \tmemset(opts + onb, 0, sizeof(opts[onb]));\n \targc = parse_options(argc, argv, prefix, opts, usage,\n-\t                     keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0);\n+\t\t\tkeep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0 |\n+\t\t\tstop_at_non_option ? PARSE_OPT_STOP_AT_NON_OPTION : 0);\n \n \tstrbuf_addf(&parsed, \" --\");\n \tsq_quote_argv(&parsed, argv, 0);\n-- \n1.6.3.1\n"}]}