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

Re: [PATCH/RFC][GSoC] diff-no-index: transform "$directory $file" args to "$directory/$file $file"

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 21, 2015, 18:18 UTC
Message-ID
<xmqqsicyciz2.fsf@gitster.dls.corp.google.com>
In-Reply-To
<CAHLaBN+x3SVL9+jDzeSEMapVd2BVrwQuVx_7ENspjbUPrium_A@mail.gmail.com>
Yurii Shevtsov <ungetch@gmail.com> writes:
Show 15 quoted lines
> diff --git a/diff-no-index.c b/diff-no-index.c
> index 265709b..9a3439a 100644
> --- a/diff-no-index.c
> +++ b/diff-no-index.c
> @@ -97,8 +97,39 @@ static int queue_diff(struct diff_options *o,
>      if (get_mode(name1, &mode1) || get_mode(name2, &mode2))
>          return -1;
>
> -    if (mode1 && mode2 && S_ISDIR(mode1) != S_ISDIR(mode2))
> -        return error("file/directory conflict: %s, %s", name1, name2);
> +    if (mode1 && mode2 && S_ISDIR(mode1) != S_ISDIR(mode2)) {
> +        struct strbuf path;
> +        const char *dir, *file;
> +        char *filename, *dirname = 0;
> +        int i, ret = 0;

If you have two directories, a and b, under which there are two files a/sub/file and b/sub (i.e. 'sub' in a/ is a directory and b/ is a file), and if you say "git diff --no-index a b", what happens?

 - the caller of this function gives a and b in name1 and name2;
 - we do not come in this codepath as both are directories;
 - we read from a/ and b/ and fill p1 and p2 with names of paths in
   the directories -- p1 and p2 will both have 'sub';
 - queue_diff() is recursively called to compare a/sub and b/sub;
   - now we have name1 = a/sub and name2 = b/sub;
   - we come in this codepath, and they are turned into comparison
     between a/sub/sub and b/sub.
The last step is simply crazy.

Hmmmm, is vger reinjecting an old message, or you sent an older and wrong version of a patch by mistake? We discussed why doing this in queue_diff() is wrong in the thread that has $gmane/265543 in it, and I was expecting to see a logic like this in the caller.

Puzzled...
Previous: Yurii ShevtsovNext: Yurii Shevtsov
Message 2 of 4 in “[GSoC] diff-no-index: transform "$directory $file" args to "$directory/$file $file"”
  1. [GSoC] diff-no-index: transform "$directory $file" args to "$directory/$file $file"Yurii Shevtsov, Mar 21, 2015
  2. Junio C HamanoMar 21, 2015
  3. Yurii ShevtsovMar 21, 2015
  4. Eric SunshineMar 22, 2015

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.