X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=apply.c;h=1742ab28e95936eed52e910930a8a04869c5418b;hb=61f693bd5a2ab4d830aad6fce0a1c70863f38009;hp=50be8f3e22d0906d09410b89ebc8d06f928ba631;hpb=3200d1aee0c22a34d075aafefe3e92f4f7d08840;p=git.git diff --git a/apply.c b/apply.c index 50be8f3e..1742ab28 100644 --- a/apply.c +++ b/apply.c @@ -16,6 +16,9 @@ // --numstat does numeric diffstat, and doesn't actually apply // --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 check_index = 0; static int write_index = 0; @@ -1706,6 +1709,12 @@ static int use_patch(struct patch *p) return 0; x = x->next; } + if (0 < prefix_length) { + int pathlen = strlen(pathname); + if (pathlen <= prefix_length || + memcmp(prefix, pathname, prefix_length)) + return 0; + } return 1; } @@ -1845,6 +1854,15 @@ int main(int argc, char **argv) line_termination = 0; 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); if (fd < 0) usage(apply_usage);