{"thread":{"id":"17025","subject":"[PATCH] diff: accept -- when using --no-index","startedAt":"2009-01-06T18:53:32Z","lastAt":"2009-01-06T18:53:32Z","messageCount":1,"participants":["Thomas Rast"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"99490","messageId":"1231268012-5592-1-git-send-email-trast@student.ethz.ch","threadId":"17025","inReplyTo":null,"subject":"[PATCH] diff: accept -- when using --no-index","fromName":"Thomas Rast","fromEmail":"trast@student.ethz.ch","sentAt":"2009-01-06T18:53:32Z","receivedAt":"2009-01-06T18:53:32Z","isPatch":true,"sender":{"key":"tr@thomasrast.ch","avatar":"https://avatars.githubusercontent.com/u/153510?v=4"},"body":"Accept -- as an \"end of options\" marker even when using --no-index.\nPreviously, the -- triggered a \"normal\" index/tree diff and\nsubsequently failed because of the unrecognized (in that mode)\n--no-index.\n\nNote that the second loop can treat '--' as a normal option, because\nthe preceding checks ensure it is the third-to-last argument.\n\nSigned-off-by: Thomas Rast <trast@student.ethz.ch>\n\n---\n diff-no-index.c                                    |    8 ++++++--\n t/t4013-diff-various.sh                            |    1 +\n .../diff.diff_--no-index_--name-status_--_dir2_dir |    3 +++\n 3 files changed, 10 insertions(+), 2 deletions(-)\n\ndiff --git a/diff-no-index.c b/diff-no-index.c\nindex b60d345..d1e8e4b 100644\n--- a/diff-no-index.c\n+++ b/diff-no-index.c\n@@ -173,8 +173,10 @@ void diff_no_index(struct rev_info *revs,\n \n \t/* Were we asked to do --no-index explicitly? */\n \tfor (i = 1; i < argc; i++) {\n-\t\tif (!strcmp(argv[i], \"--\"))\n-\t\t\treturn;\n+\t\tif (!strcmp(argv[i], \"--\")) {\n+\t\t\ti++;\n+\t\t\tbreak;\n+\t\t}\n \t\tif (!strcmp(argv[i], \"--no-index\"))\n \t\t\tno_index = 1;\n \t\tif (argv[i][0] != '-')\n@@ -214,6 +216,8 @@ void diff_no_index(struct rev_info *revs,\n \t\t\ti++;\n \t\telse if (!strcmp(argv[1], \"-q\"))\n \t\t\toptions |= DIFF_SILENT_ON_REMOVED;\n+\t\telse if (!strcmp(argv[i], \"--\"))\n+\t\t\ti++;\n \t\telse {\n \t\t\tj = diff_opt_parse(&revs->diffopt, argv + i, argc - i);\n \t\t\tif (!j)\ndiff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh\nindex aeb5405..aba5320 100755\n--- a/t/t4013-diff-various.sh\n+++ b/t/t4013-diff-various.sh\n@@ -261,6 +261,7 @@ diff --patch-with-stat -r initial..side\n diff --patch-with-raw -r initial..side\n diff --name-status dir2 dir\n diff --no-index --name-status dir2 dir\n+diff --no-index --name-status -- dir2 dir\n diff master master^ side\n EOF\n \ndiff --git a/t/t4013/diff.diff_--no-index_--name-status_--_dir2_dir b/t/t4013/diff.diff_--no-index_--name-status_--_dir2_dir\nnew file mode 100644\nindex 0000000..6756f8d\n--- /dev/null\n+++ b/t/t4013/diff.diff_--no-index_--name-status_--_dir2_dir\n@@ -0,0 +1,3 @@\n+$ git diff --no-index --name-status -- dir2 dir\n+A\tdir/sub\n+$\n-- \ntg: (e9b8523..) t/diff-no-index-invocation (depends on: origin/master)\n"}]}