setup_revisions used to consider any argument starting with "-" to be either a
valid or an unknown option.

Teach setup_revisions to check if an argument is a revision before adding it as
an unknown option (something that setup_revisions didn't understand) to argv,
and moving on to the next argument.

This patch prepares the addition of "-" as a shorthand for "previous branch".

Signed-off-by: Siddharth Kannan <kannan.siddhart...@gmail.com>
---
 revision.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/revision.c b/revision.c
index 8d4ddae..5470c33 100644
--- a/revision.c
+++ b/revision.c
@@ -2203,6 +2203,7 @@ int setup_revisions(int argc, const char **argv, struct 
rev_info *revs, struct s
        read_from_stdin = 0;
        for (left = i = 1; i < argc; i++) {
                const char *arg = argv[i];
+               int maybe_opt = 0;
                if (*arg == '-') {
                        int opts;
 
@@ -2232,15 +2233,17 @@ int setup_revisions(int argc, const char **argv, struct 
rev_info *revs, struct s
                        }
                        if (opts < 0)
                                exit(128);
-                       /* arg is an unknown option */
-                       argv[left++] = arg;
-                       continue;
+                       maybe_opt = 1;
                }
 
 
                if (!handle_revision_arg(arg, revs, flags, revarg_opt))
                        got_rev_arg = 1;
-               else {
+               else if (maybe_opt) {
+                       /* arg is an unknown option */
+                       argv[left++] = arg;
+                       continue;
+               } else {
                        int j;
                        if (seen_dashdash || *arg == '^')
                                die("bad revision '%s'", arg);
-- 
2.1.4

Reply via email to