From: Junio C Hamano Date: Sun, 31 May 2009 23:17:46 +0000 (-0700) Subject: Merge branch 'mm/apply-double-slash' X-Git-Tag: v1.6.4-rc0~97 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/919cc4d0688cea6b7c0ed8c515f5907fcd85002c?ds=inline;hp=-c Merge branch 'mm/apply-double-slash' * mm/apply-double-slash: apply: handle filenames with double slashes better --- 919cc4d0688cea6b7c0ed8c515f5907fcd85002c diff --combined builtin-apply.c index a40b982242,660aab95df..ebbf084639 --- a/builtin-apply.c +++ b/builtin-apply.c @@@ -320,6 -320,20 +320,20 @@@ static int name_terminate(const char *n return 1; } + /* remove double slashes to make --index work with such filenames */ + static char *squash_slash(char *name) + { + int i = 0, j = 0; + + while (name[i]) { + if ((name[j++] = name[i++]) == '/') + while (name[i] == '/') + i++; + } + name[j] = '\0'; + return name; + } + static char *find_name(const char *line, char *def, int p_value, int terminate) { int len; @@@ -349,7 -363,7 +363,7 @@@ free(def); if (root) strbuf_insert(&name, 0, root, root_len); - return strbuf_detach(&name, NULL); + return squash_slash(strbuf_detach(&name, NULL)); } } strbuf_release(&name); @@@ -369,10 -383,10 +383,10 @@@ start = line; } if (!start) - return def; + return squash_slash(def); len = line - start; if (!len) - return def; + return squash_slash(def); /* * Generally we prefer the shorter name, especially @@@ -383,7 -397,7 +397,7 @@@ if (def) { int deflen = strlen(def); if (deflen < len && !strncmp(start, def, deflen)) - return def; + return squash_slash(def); free(def); } @@@ -392,10 -406,10 +406,10 @@@ strcpy(ret, root); memcpy(ret + root_len, start, len); ret[root_len + len] = '\0'; - return ret; + return squash_slash(ret); } - return xmemdupz(start, len); + return squash_slash(xmemdupz(start, len)); } static int count_slashes(const char *cp) @@@ -3315,10 -3329,6 +3329,10 @@@ int cmd_apply(int argc, const char **ar argc = parse_options(argc, argv, builtin_apply_options, apply_usage, 0); + fake_ancestor = parse_options_fix_filename(prefix, fake_ancestor); + if (fake_ancestor) + fake_ancestor = xstrdup(fake_ancestor); + if (apply_with_reject) apply = apply_verbosely = 1; if (!force_apply && (diffstat || numstat || summary || check || fake_ancestor))