Merge branch 'th/diff-no-index-fixes'

"git diff --no-index" did not correctly handle relative paths and
did not give correct exit codes when run under "--quiet" option.

* th/diff-no-index-fixes:
  diff-no-index: exit(1) if 'diff --quiet <repo file> <external file>' finds changes
  diff: handle relative paths in no-index
This commit is contained in:
Junio C Hamano
2012-07-04 23:40:38 -07:00
5 changed files with 112 additions and 24 deletions

View File

@ -151,23 +151,6 @@ static int queue_diff(struct diff_options *o,
}
}
static int path_outside_repo(const char *path)
{
const char *work_tree;
size_t len;
if (!is_absolute_path(path))
return 0;
work_tree = get_git_work_tree();
if (!work_tree)
return 1;
len = strlen(work_tree);
if (strncmp(path, work_tree, len) ||
(path[len] != '\0' && path[len] != '/'))
return 1;
return 0;
}
void diff_no_index(struct rev_info *revs,
int argc, const char **argv,
int nongit, const char *prefix)
@ -197,8 +180,8 @@ void diff_no_index(struct rev_info *revs,
* a colourful "diff" replacement.
*/
if ((argc != i + 2) ||
(!path_outside_repo(argv[i]) &&
!path_outside_repo(argv[i+1])))
(path_inside_repo(prefix, argv[i]) &&
path_inside_repo(prefix, argv[i+1])))
return;
}
if (argc != i + 2)
@ -268,5 +251,5 @@ void diff_no_index(struct rev_info *revs,
* The return code for --no-index imitates diff(1):
* 0 = no changes, 1 = changes, else error
*/
exit(revs->diffopt.found_changes);
exit(diff_result_code(&revs->diffopt, 0));
}