diff: handle relative paths in no-index
When diff-no-index is given a relative path to a file outside the repository, it aborts with error. However, if the file is given using an absolute path, the diff runs as expected. The two cases should be treated the same. Tests and commit message by Tim Henigan. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Tim Henigan <tim.henigan@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
785ee4960c
commit
546e0fd9e9
24
setup.c
24
setup.c
@ -4,7 +4,7 @@
|
||||
static int inside_git_dir = -1;
|
||||
static int inside_work_tree = -1;
|
||||
|
||||
char *prefix_path(const char *prefix, int len, const char *path)
|
||||
static char *prefix_path_gently(const char *prefix, int len, const char *path)
|
||||
{
|
||||
const char *orig = path;
|
||||
char *sanitized;
|
||||
@ -31,7 +31,8 @@ char *prefix_path(const char *prefix, int len, const char *path)
|
||||
if (strncmp(sanitized, work_tree, len) ||
|
||||
(len > root_len && sanitized[len] != '\0' && sanitized[len] != '/')) {
|
||||
error_out:
|
||||
die("'%s' is outside repository", orig);
|
||||
free(sanitized);
|
||||
return NULL;
|
||||
}
|
||||
if (sanitized[len] == '/')
|
||||
len++;
|
||||
@ -40,6 +41,25 @@ char *prefix_path(const char *prefix, int len, const char *path)
|
||||
return sanitized;
|
||||
}
|
||||
|
||||
char *prefix_path(const char *prefix, int len, const char *path)
|
||||
{
|
||||
char *r = prefix_path_gently(prefix, len, path);
|
||||
if (!r)
|
||||
die("'%s' is outside repository", path);
|
||||
return r;
|
||||
}
|
||||
|
||||
int path_inside_repo(const char *prefix, const char *path)
|
||||
{
|
||||
int len = prefix ? strlen(prefix) : 0;
|
||||
char *r = prefix_path_gently(prefix, len, path);
|
||||
if (r) {
|
||||
free(r);
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int check_filename(const char *prefix, const char *arg)
|
||||
{
|
||||
const char *name;
|
||||
|
Reference in New Issue
Block a user