From: Junio C Hamano Date: Fri, 5 Jun 2015 19:00:12 +0000 (-0700) Subject: Merge branch 'jc/gitignore-precedence' into maint X-Git-Tag: v2.4.3~17 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e9f767ecee21af47fa5515ee6f8106d70cabe983;p=git Merge branch 'jc/gitignore-precedence' into maint 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 --- e9f767ecee21af47fa5515ee6f8106d70cabe983 diff --cc dir.c index 0c38d86014,e67b6f9b8b..4183acc082 --- a/dir.c +++ b/dir.c @@@ -1671,15 -1527,22 +1671,19 @@@ int remove_dir_recursively(struct strbu void setup_standard_excludes(struct dir_struct *dir) { const char *path; - char *xdg_path; dir->exclude_per_dir = ".gitignore"; - path = git_path("info/exclude"); + + /* core.excludefile defaulting to $XDG_HOME/git/ignore */ - if (!excludes_file) { - home_config_paths(NULL, &xdg_path, "ignore"); - excludes_file = xdg_path; - } + 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 --cc t/t0008-ignores.sh index 8dc6939b90,38405de17d..4ef5ed484c --- a/t/t0008-ignores.sh +++ b/t/t0008-ignores.sh @@@ -775,60 -775,14 +775,70 @@@ test_expect_success PIPE 'streaming sup echo "$response" | grep "^:: two" ' +############################################################################ +# +# test whitespace handling + +test_expect_success 'trailing whitespace is ignored' ' + mkdir whitespace && + >whitespace/trailing && + >whitespace/untracked && + echo "whitespace/trailing " >ignore && + cat >expect <err.expect && + git ls-files -o -X ignore whitespace >actual 2>err && + test_cmp expect actual && + test_cmp err.expect err +' + +test_expect_success !MINGW 'quoting allows trailing whitespace' ' + rm -rf whitespace && + mkdir whitespace && + >"whitespace/trailing " && + >whitespace/untracked && + echo "whitespace/trailing\\ \\ " >ignore && + echo whitespace/untracked >expect && + : >err.expect && + git ls-files -o -X ignore whitespace >actual 2>err && + test_cmp expect actual && + test_cmp err.expect err +' + +test_expect_success !MINGW,!CYGWIN 'correct handling of backslashes' ' + rm -rf whitespace && + mkdir whitespace && + >"whitespace/trailing 1 " && + >"whitespace/trailing 2 \\\\" && + >"whitespace/trailing 3 \\\\" && + >"whitespace/trailing 4 \\ " && + >"whitespace/trailing 5 \\ \\ " && + >"whitespace/trailing 6 \\a\\" && + >whitespace/untracked && + sed -e "s/Z$//" >ignore <<-\EOF && + whitespace/trailing 1 \ Z + whitespace/trailing 2 \\\\Z + whitespace/trailing 3 \\\\ Z + whitespace/trailing 4 \\\ Z + whitespace/trailing 5 \\ \\\ Z + whitespace/trailing 6 \\a\\Z + EOF + echo whitespace/untracked >expect && + >err.expect && + git ls-files -o -X ignore whitespace >actual 2>err && + test_cmp expect actual && + 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