Hi Denton,
On Fri, 31 May 2019, Johannes Schindelin wrote:
> On Fri, 31 May 2019, Denton Liu wrote:
>
> > Currently, if a user wishes to have individual settings per branch,
> > they are required to manually keep track of the settings in their head
> > and manually set the options on the command-line or change the config
> > at each branch.
> >
> > Teach config the "onbranch:" includeIf condition so that it can
> > conditionally include configuration files if the branch that is
> > checked out in the current worktree matches the pattern given.
>
> This looks good to me.
... actually...
> > diff --git a/t/t1305-config-include.sh b/t/t1305-config-include.sh
> > index 579a86b7f8..05c7def1f2 100755
> > --- a/t/t1305-config-include.sh
> > +++ b/t/t1305-config-include.sh
> > @@ -309,6 +309,39 @@ test_expect_success SYMLINKS 'conditional include,
> > gitdir matching symlink, icas
> > )
> > '
> >
> > +test_expect_success 'conditional include, onbranch' '
> > + (
> > + cd bar &&
This `bar` is a side effect of an earlier test case. To be precise, of
this test case:
test_expect_success SYMLINKS 'conditional include, gitdir matching symlink' '
ln -s foo bar &&
(
cd bar &&
echo "[includeIf \"gitdir:bar/\"]path=bar7" >>.git/config
&&
echo "[test]seven=7" >.git/bar7 &&
echo 7 >expect &&
git config test.seven >actual &&
test_cmp expect actual
)
'
As you can see, this test case is marked with the `SYMLINKS` prerequisite,
and hence can be skipped.
I got a crazy idea, though: how about `cd foo` instead of `cd bar`? It
should still work, as `bar` is just a symbolic link (unless that test case
has been skipped, in which case `bar` does not even exist) to `foo`.
And while this still relies on a side effect of an earlier test case
('conditional include, both unanchored', to be precise), at least that
test case cannot be skipped because of a missing prerequisite.
The same `s/cd bar/cd foo` applies to the second test case in this patch,
too, of course.
Thanks,
Dscho
> > + echo "[includeIf \"onbranch:foo-branch\"]path=bar9"
> > >>.git/config &&
> > + echo "[test]nine=9" >.git/bar9 &&
> > + git checkout -b master &&
> > + test_must_fail git config test.nine &&
> > + git checkout -b foo-branch &&
> > + echo 9 >expect &&
> > + git config test.nine >actual &&
> > + test_cmp expect actual
> > + )
> > +'
> > +
> > +test_expect_success 'conditional include, onbranch, wildcard' '
> > + (
> > + cd bar &&
> > + echo "[includeIf \"onbranch:?oo-*/**\"]path=bar10"
> > >>.git/config &&
> > + echo "[test]ten=10" >.git/bar10 &&
> > + git checkout -b not-foo-branch/a &&
> > + test_must_fail git config test.ten &&
> > +
> > + echo 10 >expect &&
> > + git checkout -b foo-branch/a/b/c &&
> > + git config test.ten >actual &&
> > + test_cmp expect actual &&
> > +
> > + git checkout -b moo-bar/a &&
> > + git config test.ten >actual &&
> > + test_cmp expect actual
> > + )
> > +'
> > +
> > test_expect_success 'include cycles are detected' '
> > cat >.gitconfig <<-\EOF &&
> > [test]value = gitconfig
> > --
> > 2.22.0.rc1.169.g49223abbf8
> >
> >
>
>