aboutsummaryrefslogtreecommitdiff
path: root/builtin-apply.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-07-09 16:58:21 -0700
committerJunio C Hamano <gitster@pobox.com>2008-07-09 16:58:21 -0700
commite9a9d6edeeafa53a203c7ae379373af5394d4fde (patch)
tree5ef514ce09a744104b0d71d957824f65ac4b33ff /builtin-apply.c
parentf7484dbb835871f9526c56eb325011a312df626b (diff)
parentf55638874774acc1e13a046353449ebc8734ab08 (diff)
downloadgit-e9a9d6edeeafa53a203c7ae379373af5394d4fde.tar.gz
git-e9a9d6edeeafa53a203c7ae379373af5394d4fde.tar.xz
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.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/builtin-apply.c b/builtin-apply.c
index c0f867dae..b3fc290ff 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);