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

[PATCH 1/3] handle_revision_opt(): do not update argv[left++] with an unknown arg

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 12, 2017, 18:41 UTC
Message-ID
<20170212184132.12375-2-gitster@pobox.com>
In-Reply-To
<20170212184132.12375-1-gitster@pobox.com>

In future steps, we will make it possible for a rev or a revision range (i.e. what is understood by handle_revision_arg() helper) to begin with a dash. The setup_revisions() function however currently considers anything that begins with a dash to be:

 - an option it itself understands and handles (some take effect by
   setting fields in the revision structure, some others are left
   in the argv[left++] to be handled in later steps);
 - an option handle_revision_opt() understands and tells us to skip;
 - an option handle_revision_opt() found to be incorrect; or
 - an option handle_revision_opt() did not understand, which is
   stuffed in argv[left++].

and does not give a chance to handle_revision_arg() to inspect it. The handle_revision_opt() function returns a positive count, a negative count or zero to allow the caller to tell the latter three cases apart. A rev that begins with a dash would be thrown into the last category.

Teach handle_revision_opt() not to touch argv[left++] in the last case. Because the other one among the two callers of this function immediately errors out with the usage string when it returns zero (i.e. the last case above), there is no negative effect to that caller.

In setup_revisions(), which is the other caller of this function, we need to stuff the unknown arg to argv[left++] in this case, to preserve the current behaviour.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 revision.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/revision.c b/revision.c
index b37dbec378..4f46b8ba81 100644
--- a/revision.c
+++ b/revision.c
@@ -2016,8 +2016,6 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
 		revs->ignore_missing = 1;
 	} else {
 		int opts = diff_opt_parse(&revs->diffopt, argv, argc, revs->prefix);
-		if (!opts)
-			unkv[(*unkc)++] = arg;
 		return opts;
 	}
 	if (revs->graph && revs->track_linear)
@@ -2234,6 +2232,8 @@ 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;
 		}
 
-- 
2.12.0-rc1-212-ga9adfb24fa
Previous: Junio C HamanoNext: Junio C Hamano
Message 13 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.