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

[PATCH 03/14] parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWN

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Jan 27, 2019, 00:35 UTC
Message-ID
<20190127003535.28341-4-pclouds@gmail.com>
In-Reply-To
<20190127003535.28341-1-pclouds@gmail.com>

parse-options can unambiguously find an abbreviation only if it sees all available options. This is usually the case when you use parse_options(). But there are other callers like blame or shortlog which uses parse_options_start() in combination with a custom option parser, like rev-list. parse-options cannot see all options in this case and will get abbrev detection wrong. Disable it.

t7800 needs update because --symlink no longer expands to --symlinks and will be passed down to git-diff, which will not recognize it. I still think this is the correct thing to do. But if --symlink has been actually used in the wild, we would just add an option alias for it.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 parse-options.c     | 3 ++-
 t/t7800-difftool.sh | 4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/parse-options.c b/parse-options.c
index 740ae5438f..779034e1fd 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -266,7 +266,8 @@ static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
 		}
 		if (!rest) {
 			/* abbreviated? */
-			if (!strncmp(long_name, arg, arg_end - arg)) {
+			if (!(p->flags & PARSE_OPT_KEEP_UNKNOWN) &&
+			    !strncmp(long_name, arg, arg_end - arg)) {
 is_abbreviated:
 				if (abbrev_option) {
 					/*
diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh
index 22b9199d59..bb9a7f4ff9 100755
--- a/t/t7800-difftool.sh
+++ b/t/t7800-difftool.sh
@@ -546,7 +546,7 @@ do
 done >actual
 EOF
 
-test_expect_success SYMLINKS 'difftool --dir-diff --symlink without unstaged changes' '
+test_expect_success SYMLINKS 'difftool --dir-diff --symlinks without unstaged changes' '
 	cat >expect <<-EOF &&
 	file
 	$PWD/file
@@ -555,7 +555,7 @@ test_expect_success SYMLINKS 'difftool --dir-diff --symlink without unstaged cha
 	sub/sub
 	$PWD/sub/sub
 	EOF
-	git difftool --dir-diff --symlink \
+	git difftool --dir-diff --symlinks \
 		--extcmd "./.git/CHECK_SYMLINKS" branch HEAD &&
 	test_cmp expect actual
 '
-- 
2.20.1.560.g70ca8b83ee
Previous: Nguyễn Thái Ngọc DuyNext: Nguyễn Thái Ngọc Duy
Message 4 of 19 in “nd/diff-parseopt part 1”
  1. 00/14 nd/diff-parseopt part 1Nguyễn Thái Ngọc Duy, Jan 27, 2019
  2. 01/14 parse-options.h: remove extern on function prototypesNguyễn Thái Ngọc Duy, Jan 27, 2019
  3. 02/14 parse-options: add one-shot modeNguyễn Thái Ngọc Duy, Jan 27, 2019
  4. 03/14 parse-options: disable option abbreviation with PARSE_OPT_KEEP_UNKNOWNNguyễn Thái Ngọc Duy, Jan 27, 2019
  5. 04/14 parse-options: add OPT_BITOP()Nguyễn Thái Ngọc Duy, Jan 27, 2019
  6. 05/14 parse-options: stop abusing 'callback' for lowlevel callbacksNguyễn Thái Ngọc Duy, Jan 27, 2019
  7. 06/14 parse-options: avoid magic return codesNguyễn Thái Ngọc Duy, Jan 27, 2019
  8. 07/14 parse-options: allow ll_callback with OPTION_CALLBACKNguyễn Thái Ngọc Duy, Jan 27, 2019
  9. Derrick StoleeApr 15, 2019
  10. Duy NguyenApr 16, 2019
  11. Derrick StoleeApr 16, 2019
  12. 08/14 diff.h: keep forward struct declarations sortedNguyễn Thái Ngọc Duy, Jan 27, 2019
  13. 09/14 diff.h: avoid bit fields in struct diff_flagsNguyễn Thái Ngọc Duy, Jan 27, 2019
  14. 10/14 diff.c: prepare to use parse_options() for parsingNguyễn Thái Ngọc Duy, Jan 27, 2019
  15. 11/14 diff.c: convert -u|-p|--patchNguyễn Thái Ngọc Duy, Jan 27, 2019
  16. 12/14 diff.c: convert -U|--unifiedNguyễn Thái Ngọc Duy, Jan 27, 2019
  17. 13/14 diff.c: convert -W|--[no-]function-contextNguyễn Thái Ngọc Duy, Jan 27, 2019
  18. 14/14 diff.c: convert --rawNguyễn Thái Ngọc Duy, Jan 27, 2019
  19. Junio C HamanoJan 28, 2019

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.