2012-06-22 09:03:23 +00:00
|
|
|
#!/bin/sh
|
|
|
|
#
|
|
|
|
# Copyright (c) 2012 Valentin Duperray, Lucien Kong, Franck Jonas,
|
|
|
|
# Thomas Nguy, Khoi Nguyen
|
|
|
|
# Grenoble INP Ensimag
|
|
|
|
#
|
|
|
|
|
|
|
|
test_description='Compatibility with $XDG_CONFIG_HOME/git/ files'
|
|
|
|
|
2024-05-27 11:46:44 +00:00
|
|
|
TEST_PASSES_SANITIZE_LEAK=true
|
2012-06-22 09:03:23 +00:00
|
|
|
. ./test-lib.sh
|
|
|
|
|
|
|
|
test_expect_success 'read config: xdg file exists and ~/.gitconfig doesn'\''t' '
|
|
|
|
mkdir -p .config/git &&
|
|
|
|
echo "[alias]" >.config/git/config &&
|
|
|
|
echo " myalias = !echo in_config" >>.config/git/config &&
|
|
|
|
echo in_config >expected &&
|
|
|
|
git myalias >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'read config: xdg file exists and ~/.gitconfig exists' '
|
|
|
|
>.gitconfig &&
|
|
|
|
echo "[alias]" >.gitconfig &&
|
|
|
|
echo " myalias = !echo in_gitconfig" >>.gitconfig &&
|
|
|
|
echo in_gitconfig >expected &&
|
|
|
|
git myalias >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'read with --get: xdg file exists and ~/.gitconfig doesn'\''t' '
|
|
|
|
rm .gitconfig &&
|
|
|
|
echo "[user]" >.config/git/config &&
|
|
|
|
echo " name = read_config" >>.config/git/config &&
|
|
|
|
echo read_config >expected &&
|
|
|
|
git config --get user.name >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2012-07-24 12:27:10 +00:00
|
|
|
test_expect_success '"$XDG_CONFIG_HOME overrides $HOME/.config/git' '
|
|
|
|
mkdir -p "$HOME"/xdg/git &&
|
|
|
|
echo "[user]name = in_xdg" >"$HOME"/xdg/git/config &&
|
|
|
|
echo in_xdg >expected &&
|
|
|
|
XDG_CONFIG_HOME="$HOME"/xdg git config --get-all user.name >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
2012-06-22 09:03:23 +00:00
|
|
|
|
|
|
|
test_expect_success 'read with --get: xdg file exists and ~/.gitconfig exists' '
|
|
|
|
>.gitconfig &&
|
|
|
|
echo "[user]" >.gitconfig &&
|
|
|
|
echo " name = read_gitconfig" >>.gitconfig &&
|
|
|
|
echo read_gitconfig >expected &&
|
|
|
|
git config --get user.name >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'read with --list: xdg file exists and ~/.gitconfig doesn'\''t' '
|
|
|
|
rm .gitconfig &&
|
|
|
|
echo user.name=read_config >expected &&
|
|
|
|
git config --global --list >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'read with --list: xdg file exists and ~/.gitconfig exists' '
|
|
|
|
>.gitconfig &&
|
|
|
|
echo "[user]" >.gitconfig &&
|
|
|
|
echo " name = read_gitconfig" >>.gitconfig &&
|
|
|
|
echo user.name=read_gitconfig >expected &&
|
|
|
|
git config --global --list >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
|
2012-06-22 09:03:24 +00:00
|
|
|
test_expect_success 'Setup' '
|
|
|
|
git init git &&
|
|
|
|
cd git &&
|
|
|
|
echo foo >to_be_excluded
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'Exclusion of a file in the XDG ignore file' '
|
|
|
|
mkdir -p "$HOME"/.config/git/ &&
|
|
|
|
echo to_be_excluded >"$HOME"/.config/git/ignore &&
|
|
|
|
test_must_fail git add to_be_excluded
|
|
|
|
'
|
|
|
|
|
2012-07-24 12:27:10 +00:00
|
|
|
test_expect_success '$XDG_CONFIG_HOME overrides $HOME/.config/git/ignore' '
|
|
|
|
mkdir -p "$HOME"/xdg/git &&
|
|
|
|
echo content >excluded_by_xdg_only &&
|
|
|
|
echo excluded_by_xdg_only >"$HOME"/xdg/git/ignore &&
|
|
|
|
test_when_finished "git read-tree --empty" &&
|
|
|
|
(XDG_CONFIG_HOME="$HOME/xdg" &&
|
|
|
|
export XDG_CONFIG_HOME &&
|
|
|
|
git add to_be_excluded &&
|
|
|
|
test_must_fail git add excluded_by_xdg_only
|
|
|
|
)
|
|
|
|
'
|
2012-06-22 09:03:24 +00:00
|
|
|
|
|
|
|
test_expect_success 'Exclusion in both XDG and local ignore files' '
|
|
|
|
echo to_be_excluded >.gitignore &&
|
|
|
|
test_must_fail git add to_be_excluded
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'Exclusion in a non-XDG global ignore file' '
|
|
|
|
rm .gitignore &&
|
|
|
|
echo >"$HOME"/.config/git/ignore &&
|
|
|
|
echo to_be_excluded >"$HOME"/my_gitignore &&
|
|
|
|
git config core.excludesfile "$HOME"/my_gitignore &&
|
|
|
|
test_must_fail git add to_be_excluded
|
|
|
|
'
|
|
|
|
|
2012-07-24 12:26:51 +00:00
|
|
|
test_expect_success 'Checking XDG ignore file when HOME is unset' '
|
|
|
|
(sane_unset HOME &&
|
|
|
|
git config --unset core.excludesfile &&
|
ls-files: error out on -i unless -o or -c are specified
ls-files --ignored can be used together with either --others or
--cached. After being perplexed for a bit and digging in to the code, I
assumed that ls-files -i was just broken and not printing anything and
I had a nice patch ready to submit when I finally realized that -i can be
used with --cached to find tracked ignores.
While that was a mistake on my part, and a careful reading of the
documentation could have made this more clear, I suspect this is an
error others are likely to make as well. In fact, of two uses in our
testsuite, I believe one of the two did make this error. In t1306.13,
there are NO tracked files, and all the excludes built up and used in
that test and in previous tests thus have to be about untracked files.
However, since they were looking for an empty result, the mistake went
unnoticed as their erroneous command also just happened to give an empty
answer.
-i will most the time be used with -o, which would suggest we could just
make -i imply -o in the absence of either a -o or -c, but that would be
a backward incompatible break. Instead, let's just flag -i without
either a -o or -c as an error, and update the two relevant testcases to
specify their intent.
Signed-off-by: Elijah Newren <newren@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2021-05-12 17:28:16 +00:00
|
|
|
git ls-files --exclude-standard --ignored --others >actual) &&
|
2018-07-27 17:48:11 +00:00
|
|
|
test_must_be_empty actual
|
2012-07-24 12:26:51 +00:00
|
|
|
'
|
2012-06-22 09:03:24 +00:00
|
|
|
|
2012-06-22 09:03:25 +00:00
|
|
|
test_expect_success 'Checking attributes in the XDG attributes file' '
|
|
|
|
echo foo >f &&
|
|
|
|
git check-attr -a f >actual &&
|
|
|
|
test_line_count -eq 0 actual &&
|
|
|
|
echo "f attr_f" >"$HOME"/.config/git/attributes &&
|
|
|
|
echo "f: attr_f: set" >expected &&
|
|
|
|
git check-attr -a f >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
attr: make sure we have an xdg path before using it
If we don't have a core.attributesfile configured, we fall
back to checking XDG config, which is usually
$HOME/.config/git/attributes.
However, if $HOME is unset, then home_config_paths will return
NULL, and we end up calling fopen(NULL).
Depending on your system, this may or may not cause the
accompanying test to fail (e.g., on Linux and glibc, the
address will go straight to open, which will return EFAULT).
However, valgrind will reliably notice the error.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-07-24 11:53:57 +00:00
|
|
|
test_expect_success 'Checking XDG attributes when HOME is unset' '
|
|
|
|
(sane_unset HOME &&
|
|
|
|
git check-attr -a f >actual) &&
|
2018-07-27 17:48:11 +00:00
|
|
|
test_must_be_empty actual
|
attr: make sure we have an xdg path before using it
If we don't have a core.attributesfile configured, we fall
back to checking XDG config, which is usually
$HOME/.config/git/attributes.
However, if $HOME is unset, then home_config_paths will return
NULL, and we end up calling fopen(NULL).
Depending on your system, this may or may not cause the
accompanying test to fail (e.g., on Linux and glibc, the
address will go straight to open, which will return EFAULT).
However, valgrind will reliably notice the error.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-07-24 11:53:57 +00:00
|
|
|
'
|
2012-06-22 09:03:25 +00:00
|
|
|
|
2012-07-24 12:27:10 +00:00
|
|
|
test_expect_success '$XDG_CONFIG_HOME overrides $HOME/.config/git/attributes' '
|
|
|
|
mkdir -p "$HOME"/xdg/git &&
|
|
|
|
echo "f attr_f=xdg" >"$HOME"/xdg/git/attributes &&
|
|
|
|
echo "f: attr_f: xdg" >expected &&
|
|
|
|
XDG_CONFIG_HOME="$HOME/xdg" git check-attr -a f >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
2012-06-22 09:03:25 +00:00
|
|
|
test_expect_success 'Checking attributes in both XDG and local attributes files' '
|
|
|
|
echo "f -attr_f" >.gitattributes &&
|
|
|
|
echo "f: attr_f: unset" >expected &&
|
|
|
|
git check-attr -a f >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'Checking attributes in a non-XDG global attributes file' '
|
2019-12-20 18:15:55 +00:00
|
|
|
rm -f .gitattributes &&
|
2012-06-22 09:03:25 +00:00
|
|
|
echo "f attr_f=test" >"$HOME"/my_gitattributes &&
|
|
|
|
git config core.attributesfile "$HOME"/my_gitattributes &&
|
|
|
|
echo "f: attr_f: test" >expected &&
|
|
|
|
git check-attr -a f >actual &&
|
|
|
|
test_cmp expected actual
|
|
|
|
'
|
|
|
|
|
|
|
|
|
2012-06-22 09:03:26 +00:00
|
|
|
test_expect_success 'write: xdg file exists and ~/.gitconfig doesn'\''t' '
|
|
|
|
mkdir -p "$HOME"/.config/git &&
|
|
|
|
>"$HOME"/.config/git/config &&
|
2019-12-20 18:15:55 +00:00
|
|
|
rm -f "$HOME"/.gitconfig &&
|
2012-06-22 09:03:26 +00:00
|
|
|
git config --global user.name "write_config" &&
|
|
|
|
echo "[user]" >expected &&
|
|
|
|
echo " name = write_config" >>expected &&
|
|
|
|
test_cmp expected "$HOME"/.config/git/config
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'write: xdg file exists and ~/.gitconfig exists' '
|
|
|
|
>"$HOME"/.gitconfig &&
|
|
|
|
git config --global user.name "write_gitconfig" &&
|
|
|
|
echo "[user]" >expected &&
|
|
|
|
echo " name = write_gitconfig" >>expected &&
|
|
|
|
test_cmp expected "$HOME"/.gitconfig
|
|
|
|
'
|
|
|
|
|
|
|
|
|
|
|
|
test_expect_success 'write: ~/.config/git/ exists and config file doesn'\''t' '
|
2019-12-20 18:15:55 +00:00
|
|
|
rm -f "$HOME"/.gitconfig &&
|
|
|
|
rm -f "$HOME"/.config/git/config &&
|
2012-06-22 09:03:26 +00:00
|
|
|
git config --global user.name "write_gitconfig" &&
|
|
|
|
echo "[user]" >expected &&
|
|
|
|
echo " name = write_gitconfig" >>expected &&
|
|
|
|
test_cmp expected "$HOME"/.gitconfig
|
|
|
|
'
|
|
|
|
|
|
|
|
|
2012-06-22 09:03:23 +00:00
|
|
|
test_done
|