On Mon, Oct 23, 2023 at 5:58 AM Patrick Steinhardt <ps@xxxxxx> wrote: > On Wed, Oct 18, 2023 at 10:28:41PM +0200, Kristoffer Haugsbakk wrote: > > `git maintenance register` registers the repository in the user's global > > config. `$XDG_CONFIG_HOME/git/config` is supposed to be used if > > `~/.gitconfig` does not exist. However, this command creates a > > `~/.gitconfig` file and writes to that one even though the XDG variant > > exists. > > > > This used to work correctly until 50a044f1e4 (gc: replace config > > subprocesses with API calls, 2022-09-27), when the command started calling > > the config API instead of git-config(1). > > > > Also change `unregister` accordingly. > > > > Signed-off-by: Kristoffer Haugsbakk <code@xxxxxxxxxxxxxxx> > > --- > > +test_expect_success 'register uses XDG_CONFIG_HOME config if it exists' ' > > + XDG_CONFIG_HOME=.config && > > + test_when_finished rm -r "$XDG_CONFIG_HOME"/git/config && > > + export "XDG_CONFIG_HOME" && > > Also, I think we need to unset this variable at the end of this test as > tests don't run in a subshell. [...] Yup, well spotted. Almost the entire body of this test should be in a subshell to ensure that the environment variable does not live beyond the end of this test. But test_when_finished() can't be used in a subshell, so a little care is needed: test_expect_success 'register uses XDG_CONFIG_HOME config if it exists' ' test_when_finished rm -r .config/git/config && ( XDG_CONFIG_HOME=.config && ... ) ' > > + mkdir -p "$XDG_CONFIG_HOME"/git && > > + touch "$XDG_CONFIG_HOME"/git/config && If the timestamp of the file is not significant, then we use `>` to create it rather than `touch`: >"$XDG_CONFIG_HOME"/git/config && > > + git maintenance register && > > + git config --file="$XDG_CONFIG_HOME"/git/config --get maintenance.repo >actual && > > + pwd >expect && > > + test_cmp expect actual > > +'