summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2015-05-19 13:17:50 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2015-05-19 13:17:51 -0700
commit20cf8b548ebd7d5ec98729b4bb8ae5af435a22ff (patch)
tree5744fa6cf8ffa26600bd154c9f0023bcd364bc10
parentMerge branch 'nd/diff-i-t-a' (diff)
parentignore: info/exclude should trump core.excludesfile (diff)
downloadtgif-20cf8b548ebd7d5ec98729b4bb8ae5af435a22ff.tar.xz
Merge branch 'jc/gitignore-precedence'
core.excludesfile (defaulting to $XDG_HOME/git/ignore) is supposed to be overridden by repository-specific .git/info/exclude file, but the order was swapped from the beginning. This belatedly fixes it. * jc/gitignore-precedence: ignore: info/exclude should trump core.excludesfile
-rw-r--r--dir.c10
-rwxr-xr-xt/t0008-ignores.sh10
2 files changed, 17 insertions, 3 deletions
diff --git a/dir.c b/dir.c
index 0c38d86014..4183acc082 100644
--- a/dir.c
+++ b/dir.c
@@ -1673,13 +1673,17 @@ void setup_standard_excludes(struct dir_struct *dir)
const char *path;
dir->exclude_per_dir = ".gitignore";
- path = git_path("info/exclude");
+
+ /* core.excludefile defaulting to $XDG_HOME/git/ignore */
if (!excludes_file)
excludes_file = xdg_config_home("ignore");
- if (!access_or_warn(path, R_OK, 0))
- add_excludes_from_file(dir, path);
if (excludes_file && !access_or_warn(excludes_file, R_OK, 0))
add_excludes_from_file(dir, excludes_file);
+
+ /* per repository user preference */
+ path = git_path("info/exclude");
+ if (!access_or_warn(path, R_OK, 0))
+ add_excludes_from_file(dir, path);
}
int remove_path(const char *name)
diff --git a/t/t0008-ignores.sh b/t/t0008-ignores.sh
index 8dc6939b90..4ef5ed484c 100755
--- a/t/t0008-ignores.sh
+++ b/t/t0008-ignores.sh
@@ -831,4 +831,14 @@ test_expect_success !MINGW,!CYGWIN 'correct handling of backslashes' '
test_cmp err.expect err
'
+test_expect_success 'info/exclude trumps core.excludesfile' '
+ echo >>global-excludes usually-ignored &&
+ echo >>.git/info/exclude "!usually-ignored" &&
+ >usually-ignored &&
+ echo "?? usually-ignored" >expect &&
+
+ git status --porcelain usually-ignored >actual &&
+ test_cmp expect actual
+'
+
test_done