aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin-apply.c21
-rwxr-xr-xt/t4119-apply-config.sh90
2 files changed, 103 insertions, 8 deletions
diff --git a/builtin-apply.c b/builtin-apply.c
index 3fefdacd9..fc1d6730d 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -2595,9 +2595,18 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
int read_stdin = 1;
int inaccurate_eof = 0;
int errs = 0;
+ int is_not_gitdir = 0;
const char *whitespace_option = NULL;
+ prefix = setup_git_directory_gently(&is_not_gitdir);
+ prefix_length = prefix ? strlen(prefix) : 0;
+ if (!is_not_gitdir) {
+ git_config(git_apply_config);
+ if (apply_default_whitespace)
+ parse_whitespace_option(apply_default_whitespace);
+ }
+
for (i = 1; i < argc; i++) {
const char *arg = argv[i];
char *end;
@@ -2648,10 +2657,14 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
continue;
}
if (!strcmp(arg, "--index")) {
+ if (is_not_gitdir)
+ die("--index outside a repository");
check_index = 1;
continue;
}
if (!strcmp(arg, "--cached")) {
+ if (is_not_gitdir)
+ die("--cached outside a repository");
check_index = 1;
cached = 1;
continue;
@@ -2700,14 +2713,6 @@ int cmd_apply(int argc, const char **argv, const char *unused_prefix)
inaccurate_eof = 1;
continue;
}
-
- if (check_index && prefix_length < 0) {
- prefix = setup_git_directory();
- prefix_length = prefix ? strlen(prefix) : 0;
- git_config(git_apply_config);
- if (!whitespace_option && apply_default_whitespace)
- parse_whitespace_option(apply_default_whitespace);
- }
if (0 < prefix_length)
arg = prefix_filename(prefix, prefix_length, arg);
diff --git a/t/t4119-apply-config.sh b/t/t4119-apply-config.sh
new file mode 100755
index 000000000..0e8ea7e2b
--- /dev/null
+++ b/t/t4119-apply-config.sh
@@ -0,0 +1,90 @@
+#!/bin/sh
+#
+# Copyright (c) 2007 Junio C Hamano
+#
+
+test_description='git-apply --whitespace=strip and configuration file.
+
+'
+
+. ./test-lib.sh
+
+test_expect_success setup '
+ echo A >file1 &&
+ cp file1 saved &&
+ git add file1 &&
+ echo "B " >file1 &&
+ git diff >patch.file
+'
+
+test_expect_success 'apply --whitespace=strip' '
+
+ cp saved file1 &&
+ git update-index --refresh &&
+
+ git apply --whitespace=strip patch.file &&
+ if grep " " file1
+ then
+ echo "Eh?"
+ false
+ else
+ echo Happy
+ fi
+'
+
+test_expect_success 'apply --whitespace=strip from config' '
+
+ cp saved file1 &&
+ git update-index --refresh &&
+
+ git config apply.whitespace strip &&
+ git apply patch.file &&
+ if grep " " file1
+ then
+ echo "Eh?"
+ false
+ else
+ echo Happy
+ fi
+'
+
+mkdir sub
+D=`pwd`
+
+test_expect_success 'apply --whitespace=strip in subdir' '
+
+ cd "$D" &&
+ git config --unset-all apply.whitespace
+ cp saved file1 &&
+ git update-index --refresh &&
+
+ cd sub &&
+ git apply --whitespace=strip ../patch.file &&
+ if grep " " ../file1
+ then
+ echo "Eh?"
+ false
+ else
+ echo Happy
+ fi
+'
+
+test_expect_success 'apply --whitespace=strip from config in subdir' '
+
+ cd "$D" &&
+ git config apply.whitespace strip &&
+ cp saved file1 &&
+ git update-index --refresh &&
+
+ cd sub &&
+ git apply ../patch.file &&
+ if grep " " file1
+ then
+ echo "Eh?"
+ false
+ else
+ echo Happy
+ fi
+'
+
+test_done