Do not default to --no-index when given two directories.

git-diff -- a/ b/ always defaulted to --no-index, primarily
because the function is_in_index() was implemented quite
incorrectly.

Noticed by Patrick Maaß and Simon Schubert independently,
initial patch was provided by Patrick but I fixed it
differently.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2007-04-13 03:23:20 -07:00
parent dc61b10d98
commit 1ad029b6a1

View File

@ -142,18 +142,34 @@ static int queue_diff(struct diff_options *o,
} }
} }
/*
* Does the path name a blob in the working tree, or a directory
* in the working tree?
*/
static int is_in_index(const char *path) static int is_in_index(const char *path)
{ {
int len = strlen(path); int len, pos;
int pos = cache_name_pos(path, len); struct cache_entry *ce;
char c;
if (pos < 0) len = strlen(path);
return 0; while (path[len-1] == '/')
if (strncmp(active_cache[pos]->name, path, len)) len--;
return 0; if (!len)
c = active_cache[pos]->name[len]; return 1; /* "." */
return c == '\0' || c == '/'; pos = cache_name_pos(path, len);
if (0 <= pos)
return 1;
pos = -1 - pos;
while (pos < active_nr) {
ce = active_cache[pos++];
if (ce_namelen(ce) <= len ||
strncmp(ce->name, path, len) ||
(ce->name[len] > '/'))
break; /* path cannot be a prefix */
if (ce->name[len] == '/')
return 1;
}
return 0;
} }
static int handle_diff_files_args(struct rev_info *revs, static int handle_diff_files_args(struct rev_info *revs,