diff options
author | Junio C Hamano <gitster@pobox.com> | 2008-07-09 16:58:21 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2008-07-09 16:58:21 -0700 |
commit | e9a9d6edeeafa53a203c7ae379373af5394d4fde (patch) | |
tree | 5ef514ce09a744104b0d71d957824f65ac4b33ff /builtin-apply.c | |
parent | f7484dbb835871f9526c56eb325011a312df626b (diff) | |
parent | f55638874774acc1e13a046353449ebc8734ab08 (diff) | |
download | git-e9a9d6edeeafa53a203c7ae379373af5394d4fde.tar.gz |
Merge branch 'js/apply-root'
* js/apply-root:
git-apply --directory: make --root more similar to GNU diff
apply --root: thinkofix.
Teach "git apply" to prepend a prefix with "--root=<root>"
Diffstat (limited to 'builtin-apply.c')
-rw-r--r-- | builtin-apply.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/builtin-apply.c b/builtin-apply.c index c0f867daed..b3fc290ff3 100644 --- a/builtin-apply.c +++ b/builtin-apply.c @@ -58,6 +58,8 @@ static int whitespace_error; static int squelch_whitespace_errors = 5; static int applied_after_fixing_ws; static const char *patch_input_file; +static const char *root; +static int root_len; static void parse_whitespace_option(const char *option) { @@ -340,6 +342,8 @@ static char *find_name(const char *line, char *def, int p_value, int terminate) */ strbuf_remove(&name, 0, cp - name.buf); free(def); + if (root) + strbuf_insert(&name, 0, root, root_len); return strbuf_detach(&name, NULL); } } @@ -378,6 +382,14 @@ static char *find_name(const char *line, char *def, int p_value, int terminate) free(def); } + if (root) { + char *ret = xmalloc(root_len + len + 1); + strcpy(ret, root); + memcpy(ret + root_len, start, len); + ret[root_len + len] = '\0'; + return ret; + } + return xmemdupz(start, len); } @@ -3240,6 +3252,18 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix) options |= RECOUNT; continue; } + if (!prefixcmp(arg, "--directory=")) { + arg += strlen("--directory="); + root_len = strlen(arg); + if (root_len && arg[root_len - 1] != '/') { + char *new_root; + root = new_root = xmalloc(root_len + 2); + strcpy(new_root, arg); + strcpy(new_root + root_len++, "/"); + } else + root = arg; + continue; + } if (0 < prefix_length) arg = prefix_filename(prefix, prefix_length, arg); |