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

Re: [PATCH] diff --no-index: allow pathspec after --

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 18, 2014, 22:41 UTC
Message-ID
<xmqqha04o8k7.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1410256584-19562-1-git-send-email-pclouds@gmail.com>
Nguyễn Thái Ngọc Duy  <pclouds@gmail.com> writes:
Show 11 quoted lines
> Another patch to test the water before I put more effort into it.
>
> Commit d516c2d (Teach git-diff-files the new option `--no-index` -
> 2007-02-22) brings the bells and whistles of git-diff to the world
> outside a git repository. This patch continues that direction and adds
> a new syntax
>
>     git diff --no-index [--] <path> <path> -- <pathspec>
>
> It's easy to guess that the two directories will be filtered by
> pathspec,...

Ugh. Nobody's diff works that way, and nowhere in our UI we use double-dashes that way, either.

So while I like the idea of "I want to tell Git to compare these two directories with these pathspec", I do not think we would want to touch such a syntax with 10 foot pole X-<.

Show 10 quoted lines
> @@ -194,19 +207,23 @@ void diff_no_index(struct rev_info *revs,
>  		int j;
>  		if (!strcmp(argv[i], "--no-index"))
>  			i++;
> -		else if (!strcmp(argv[i], "--"))
> +		else if (!strcmp(argv[i], "--")) {
>  			i++;
> -		else {
> +			break;
> +		} else {
I think this part is a good bugfix regardless of your new feature.
The general command line structure ought to be:
   $ git diff [--no-index] [--<diff options>...] [--] <path> <path>

but the existing code is too loose in that "--" is just ignored. The caller in builtin/diff.c makes sure "--no-index" comes before "--", the latter of which stops option processing, so it is not so grave a bug, though.

Coming back to the command line syntax for the new feature, if I had to choose, I would say

	git diff --no-index [-<options>] [--] <path> <path> <pathspec>

perhaps? As we never compare anything other than two things, we can do the following:

 * Implicit --no-index heuristics will kick in _ONLY_ when we have
   two things at the end after parsing options in builtin/diff.c, as
   before;
 * In diff_no_index() after parsing options at its beginning,
  - if we have only two things left, they may be
    . two files;
    . a file and "-" or "-" and a file; or
    . two directories (fully traversed without pathspecs)
    just as before.
  - if we have more than two things left, the first two of these
    _MUST_ be directories, and the remainder is pathspec to filter
    the result of directory traversal.
Wluldn't that be cleaner and easier to understand?
Previous: Nguyễn Thái Ngọc DuyNext: Duy Nguyen
Message 2 of 5 in “diff --no-index: allow pathspec after --”
  1. diff --no-index: allow pathspec after --Nguyễn Thái Ngọc Duy, Sep 9, 2014
  2. Junio C HamanoSep 18, 2014
  3. Duy NguyenSep 21, 2014
  4. Junio C HamanoSep 21, 2014
  5. Duy NguyenSep 21, 2014

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.