config: respect commondir
authorBrandon Williams <bmwill@google.com>
Wed, 14 Jun 2017 18:07:38 +0000 (11:07 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 15 Jun 2017 19:56:22 +0000 (12:56 -0700)
commita577fb5fdc53a4729eeedc2922d1461350b92f73
tree15197dd21a7820432815f55a2e88a38766dd99a3
parentd3fb71b3cb36971608a46744261e6b5f8802e784
config: respect commondir

Worktrees present an interesting problem when it comes to the config.
Historically we could assume that the per-repository config lives at
'gitdir/config', but since worktrees were introduced this isn't the case
anymore.  There is currently no way to specify per-worktree
configuration, and as such the repository config is shared with all
worktrees and is located at 'commondir/config'.

Many users of the config machinery correctly set
'config_options.git_dir' with the repository's commondir, allowing the
config to be properly loaded when operating in a worktree.  But other's,
like 'read_early_config()', set 'config_options.git_dir' with the
repository's gitdir which can be incorrect when using worktrees.

To fix this issue, and to make things less ambiguous, lets add a
'commondir' field to the 'config_options' struct and have all callers
properly set both the 'git_dir' and 'commondir' fields so that the
config machinery is able to properly find the repository's config.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
config.c
config.h