git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 3/3] setup_revisions(): allow a rev that begins with a dash

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 12, 2017, 18:41 UTC
Message-ID
<20170212184132.12375-4-gitster@pobox.com>
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
Previous: Junio C HamanoNext: Siddharth Kannan
Message 15 of 18 in “WIP: allow "-" as a shorthand for "previous branch"”
  1. 0/2 WIP: allow "-" as a shorthand for "previous branch"Siddharth Kannan, Feb 10, 2017
  2. 1/2 revision.c: args starting with "-" might be a revisionSiddharth Kannan, Feb 10, 2017
  3. 2/2 sha1_name: teach get_sha1_1 "-" shorthand for "@{-1}"Siddharth Kannan, Feb 10, 2017
  4. Matthieu MoyFeb 12, 2017
  5. Siddharth KannanFeb 12, 2017
  6. Junio C HamanoFeb 13, 2017
  7. Junio C HamanoFeb 13, 2017
  8. Junio C HamanoFeb 10, 2017
  9. Siddharth KannanFeb 11, 2017
  10. Junio C HamanoFeb 11, 2017
  11. Junio C HamanoFeb 11, 2017
  12. 0/3 prepare for a rev/range that begins with a dashJunio C Hamano, Feb 12, 2017
  13. 1/3 handle_revision_opt(): do not update argv[left++] with an unknown argJunio C Hamano, Feb 12, 2017
  14. 2/3 setup_revisions(): swap if/else bodies to make the next step more readableJunio C Hamano, Feb 12, 2017
  15. 3/3 setup_revisions(): allow a rev that begins with a dashJunio C Hamano, Feb 12, 2017
  16. Siddharth KannanFeb 12, 2017
  17. Junio C HamanoFeb 12, 2017
  18. Siddharth KannanFeb 14, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.