All of lore.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: git@vger.kernel.org
Cc: Siddharth Kannan <kannan.siddharth12@gmail.com>
Subject: [PATCH 3/3] setup_revisions(): allow a rev that begins with a dash
Date: Sun, 12 Feb 2017 10:41:32 -0800	[thread overview]
Message-ID: <20170212184132.12375-4-gitster@pobox.com> (raw)
In-Reply-To: <20170212184132.12375-1-gitster@pobox.com>

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 <gitster@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


  parent reply	other threads:[~2017-02-12 18:41 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-10 18:55 [PATCH 0/2 v3] WIP: allow "-" as a shorthand for "previous branch" Siddharth Kannan
2017-02-10 18:55 ` [PATCH 1/2 v3] revision.c: args starting with "-" might be a revision Siddharth Kannan
2017-02-10 18:55   ` [PATCH 2/2 v3] sha1_name: teach get_sha1_1 "-" shorthand for "@{-1}" Siddharth Kannan
2017-02-12  9:48     ` Matthieu Moy
2017-02-12 10:42       ` Siddharth Kannan
2017-02-13 19:51       ` Junio C Hamano
2017-02-13 20:03         ` Junio C Hamano
2017-02-10 23:35   ` [PATCH 1/2 v3] revision.c: args starting with "-" might be a revision Junio C Hamano
2017-02-11  7:52     ` Siddharth Kannan
2017-02-11 21:08       ` Junio C Hamano
2017-02-11 23:40         ` Junio C Hamano
2017-02-12 18:41           ` [PATCH 0/3] prepare for a rev/range that begins with a dash Junio C Hamano
2017-02-12 18:41             ` [PATCH 1/3] handle_revision_opt(): do not update argv[left++] with an unknown arg Junio C Hamano
2017-02-12 18:41             ` [PATCH 2/3] setup_revisions(): swap if/else bodies to make the next step more readable Junio C Hamano
2017-02-12 18:41             ` Junio C Hamano [this message]
2017-02-12 12:36         ` [PATCH 1/2 v3] revision.c: args starting with "-" might be a revision Siddharth Kannan
2017-02-12 18:56           ` Junio C Hamano
2017-02-14  4:23             ` Siddharth Kannan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170212184132.12375-4-gitster@pobox.com \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=kannan.siddharth12@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.