git-apply: work from subdirectory.
When applying a patch to index file, we need to know where GIT_DIR is; use setup_git_directory() to find it out. This also allows us to work from a subdirectory if we wanted to. When git-apply is run from a subdirectory, it applies the given patch only to the files under the current directory and below. Signed-off-by: Junio C Hamano <junkio@cox.net>maint
parent
4ca0660816
commit
edf2e37002
18
apply.c
18
apply.c
|
@ -16,6 +16,9 @@
|
||||||
// --numstat does numeric diffstat, and doesn't actually apply
|
// --numstat does numeric diffstat, and doesn't actually apply
|
||||||
// --index-info shows the old and new index info for paths if available.
|
// --index-info shows the old and new index info for paths if available.
|
||||||
//
|
//
|
||||||
|
static const char *prefix;
|
||||||
|
static int prefix_length = -1;
|
||||||
|
|
||||||
static int allow_binary_replacement = 0;
|
static int allow_binary_replacement = 0;
|
||||||
static int check_index = 0;
|
static int check_index = 0;
|
||||||
static int write_index = 0;
|
static int write_index = 0;
|
||||||
|
@ -1706,6 +1709,12 @@ static int use_patch(struct patch *p)
|
||||||
return 0;
|
return 0;
|
||||||
x = x->next;
|
x = x->next;
|
||||||
}
|
}
|
||||||
|
if (0 < prefix_length) {
|
||||||
|
int pathlen = strlen(pathname);
|
||||||
|
if (pathlen <= prefix_length ||
|
||||||
|
memcmp(prefix, pathname, prefix_length))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1845,6 +1854,15 @@ int main(int argc, char **argv)
|
||||||
line_termination = 0;
|
line_termination = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (check_index && prefix_length < 0) {
|
||||||
|
prefix = setup_git_directory();
|
||||||
|
prefix_length = prefix ? strlen(prefix) : 0;
|
||||||
|
git_config(git_default_config);
|
||||||
|
}
|
||||||
|
if (0 < prefix_length)
|
||||||
|
arg = prefix_filename(prefix, prefix_length, arg);
|
||||||
|
|
||||||
fd = open(arg, O_RDONLY);
|
fd = open(arg, O_RDONLY);
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
usage(apply_usage);
|
usage(apply_usage);
|
||||||
|
|
Loading…
Reference in New Issue