From: Junio C Hamano Date: Tue, 19 May 2015 20:17:50 +0000 (-0700) Subject: Merge branch 'jc/gitignore-precedence' X-Git-Tag: v2.5.0-rc0~115 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/20cf8b548ebd7d5ec98729b4bb8ae5af435a22ff?hp=d0c692263f453f267ddd82b90b1a2fcff9d45f5f 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 --- 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