Now all the preparatory pieces are in place, it is a matter of
handling a truly unknown option _after_ handle_revision_arg()
decides that arg is not a rev.  

Signed-off-by: Junio C Hamano <gits...@pobox.com>
---

 We _could_ do without a new variable maybe_opt and instead check if
 arg begins with a dash one more time, but it is cleaner to do it
 the way this patch does to avoid writing the same check twice.  We
 may be hit with a desire similar to but an opposite of the current
 topic (which wants to allow a rev that begins with a dash), to
 start allowing an option that does not begin with a dash someday.

 revision.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/revision.c b/revision.c
index eccf1ab695..0f772ba73d 100644
--- a/revision.c
+++ b/revision.c
@@ -2203,6 +2203,8 @@ 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,13 +2234,20 @@ int setup_revisions(int argc, const char **argv, struct 
rev_info *revs, struct s
                        }
                        if (opts < 0)
                                exit(128);
-                       /* arg looks like an opt but something we do not 
recognise. */
-                       argv[left++] = arg;
-                       continue;
+                       /*
+                        * arg looks like an opt but something we do not 
recognise.
+                        * It may be a rev that begins with a dash; fall 
through to
+                        * let handle_revision_arg() have a say in this.
+                        */
+                       maybe_opt = 1;
                }
 
                if (!handle_revision_arg(arg, revs, flags, revarg_opt)) {
                        got_rev_arg = 1;
+               } else if (maybe_opt) {
+                       /* it turns out that it is not a rev after all */
+                       argv[left++] = arg;
+                       continue;
                } else {
                        int j;
                        if (seen_dashdash || *arg == '^')
-- 
2.12.0-rc1-212-ga9adfb24fa

Reply via email to