Browse Source

git-apply --directory: make --root more similar to GNU diff

Applying a patch in the directory that is different from what the patch
records is done with --directory option in GNU diff.  The --root option we
introduced previously does the same, and we can call it the same way to
give users more familiar feel.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Junio C Hamano 17 years ago
parent
commit
f556388747
  1. 8
      Documentation/git-apply.txt
  2. 4
      builtin-apply.c
  3. 8
      t/t4128-apply-root.sh

8
Documentation/git-apply.txt

@ -14,7 +14,7 @@ SYNOPSIS
[--allow-binary-replacement | --binary] [--reject] [-z] [--allow-binary-replacement | --binary] [--reject] [-z]
[-pNUM] [-CNUM] [--inaccurate-eof] [--cached] [-pNUM] [-CNUM] [--inaccurate-eof] [--cached]
[--whitespace=<nowarn|warn|fix|error|error-all>] [--whitespace=<nowarn|warn|fix|error|error-all>]
[--exclude=PATH] [--root=<root>] [--verbose] [<patch>...] [--exclude=PATH] [--directory=<root>] [--verbose] [<patch>...]


DESCRIPTION DESCRIPTION
----------- -----------
@ -177,9 +177,13 @@ behavior:
current patch being applied will be printed. This option will cause current patch being applied will be printed. This option will cause
additional information to be reported. additional information to be reported.


--root=<root>:: --directory=<root>::
Prepend <root> to all filenames. If a "-p" argument was passed, too, Prepend <root> to all filenames. If a "-p" argument was passed, too,
it is applied before prepending the new root. it is applied before prepending the new root.
+
For example, a patch that talks about updating `a/git-gui.sh` to `b/git-gui.sh`
can be applied to the file in the working tree `modules/git-gui/git-gui.sh` by
running `git apply --directory=modules/git-gui`.


Configuration Configuration
------------- -------------

4
builtin-apply.c

@ -3130,8 +3130,8 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
inaccurate_eof = 1; inaccurate_eof = 1;
continue; continue;
} }
if (!prefixcmp(arg, "--root=")) { if (!prefixcmp(arg, "--directory=")) {
arg += strlen("--root="); arg += strlen("--directory=");
root_len = strlen(arg); root_len = strlen(arg);
if (root_len && arg[root_len - 1] != '/') { if (root_len && arg[root_len - 1] != '/') {
char *new_root; char *new_root;

8
t/t4128-apply-root.sh

@ -23,18 +23,18 @@ diff a/bla/blub/dir/file b/bla/blub/dir/file
+Bello +Bello
EOF EOF


test_expect_success 'apply --root -p (1)' ' test_expect_success 'apply --directory -p (1)' '


git apply --root=some/sub -p3 --index patch && git apply --directory=some/sub -p3 --index patch &&
test Bello = $(git show :some/sub/dir/file) && test Bello = $(git show :some/sub/dir/file) &&
test Bello = $(cat some/sub/dir/file) test Bello = $(cat some/sub/dir/file)


' '


test_expect_success 'apply --root -p (2) ' ' test_expect_success 'apply --directory -p (2) ' '


git reset --hard initial && git reset --hard initial &&
git apply --root=some/sub/ -p3 --index patch && git apply --directory=some/sub/ -p3 --index patch &&
test Bello = $(git show :some/sub/dir/file) && test Bello = $(git show :some/sub/dir/file) &&
test Bello = $(cat some/sub/dir/file) test Bello = $(cat some/sub/dir/file)



Loading…
Cancel
Save