Yurii Shevtsov <[email protected]> writes:
> 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...
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html