mirror of
https://github.com/git/git
synced 2024-08-28 12:09:19 +00:00
git-diff: allow --no-index semantics a bit more
Even when inside a git work tree, if two paths are given and at least one is clearly outside the work tree, it cannot be a request to diff a tracked path anyway; allow such an invocation to use --no-index semantics. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
0569e9b8ce
commit
040366076f
|
@ -144,6 +144,25 @@ static int queue_diff(struct diff_options *o,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int path_outside_repo(const char *path)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* We have already done setup_git_directory_gently() so we
|
||||||
|
* know we are inside a git work tree already.
|
||||||
|
*/
|
||||||
|
const char *work_tree;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
if (!is_absolute_path(path))
|
||||||
|
return 0;
|
||||||
|
work_tree = get_git_work_tree();
|
||||||
|
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,
|
void diff_no_index(struct rev_info *revs,
|
||||||
int argc, const char **argv,
|
int argc, const char **argv,
|
||||||
int nongit, const char *prefix)
|
int nongit, const char *prefix)
|
||||||
|
@ -162,13 +181,19 @@ void diff_no_index(struct rev_info *revs,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
if (!no_index && !nongit) {
|
||||||
* No explicit --no-index, but "git diff --opts A B" outside
|
/*
|
||||||
* a git repository is a cute hack to support.
|
* Inside a git repository, without --no-index. Only
|
||||||
*/
|
* when a path outside the repository is given,
|
||||||
if (!no_index && !nongit)
|
* e.g. "git diff /var/tmp/[12]", or "git diff
|
||||||
return;
|
* Makefile /var/tmp/Makefile", allow it to be used as
|
||||||
|
* a colourful "diff" replacement.
|
||||||
|
*/
|
||||||
|
if ((argc != i + 2) ||
|
||||||
|
(!path_outside_repo(argv[i]) &&
|
||||||
|
!path_outside_repo(argv[i+1])))
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (argc != i + 2)
|
if (argc != i + 2)
|
||||||
die("git diff %s takes two paths",
|
die("git diff %s takes two paths",
|
||||||
no_index ? "--no-index" : "[--no-index]");
|
no_index ? "--no-index" : "[--no-index]");
|
||||||
|
|
Loading…
Reference in a new issue