Skip to content

Commit

Permalink
mingw: respect core.hidedotfiles = false in git-init again
Browse files Browse the repository at this point in the history
This is a brown paper bag. When adding the tests, we actually failed
to verify that the config variable is heeded in git-init at all. And
when changing the original patch that marked the .git/ directory as
hidden after reading the config, it was lost on this developer that
the new code would use the hide_dotfiles variable before the config
was read.

The fix is obvious: read the (limited, pre-init) config *before*
creating the .git/ directory.

Please note that we cannot remove the identical-looking `git_config()`
call from `create_default_files()`: we create the `.git/` directory
between those calls. If we removed it, and if the parent directory is
in a Git worktree, and if that worktree's `.git/config` contained any
`init.templatedir` setting, we would all of a sudden pick that up.

This fixes git-for-windows#789

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
  • Loading branch information
dscho committed Mar 11, 2019
1 parent e902e9b commit f187d0d
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 0 deletions.
7 changes: 7 additions & 0 deletions builtin/init-db.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,9 @@ static int git_init_db_config(const char *k, const char *v, void *cb)
if (!strcmp(k, "init.templatedir"))
return git_config_pathname(&init_db_template_dir, k, v);

if (starts_with(k, "core."))
return platform_core_config(k, v, cb);

return 0;
}

Expand Down Expand Up @@ -185,6 +188,7 @@ static int create_default_files(const char *template_path,
struct strbuf err = STRBUF_INIT;

/* Just look for `init.templatedir` */
init_db_template_dir = NULL; /* re-set in case it was set before */
git_config(git_init_db_config, NULL);

/*
Expand Down Expand Up @@ -361,6 +365,9 @@ int init_db(const char *git_dir, const char *real_git_dir,
}
startup_info->have_repository = 1;

/* Just look for `core.hidedotfiles` */
git_config(git_init_db_config, NULL);

safe_create_dir(git_dir, 0);

init_is_bare_repository = is_bare_repository();
Expand Down
11 changes: 11 additions & 0 deletions t/t0001-init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,17 @@ test_expect_success 're-init from a linked worktree' '
)
'

test_expect_success MINGW 'core.hidedotfiles = false' '
git config --global core.hidedotfiles false &&
rm -rf newdir &&
mkdir newdir &&
(
sane_unset GIT_DIR GIT_WORK_TREE GIT_CONFIG &&
git -C newdir init
) &&
! is_hidden newdir/.git
'

test_expect_success MINGW 'redirect std handles' '
GIT_REDIRECT_STDOUT=output.txt git rev-parse --git-dir &&
test .git = "$(cat output.txt)" &&
Expand Down

0 comments on commit f187d0d

Please sign in to comment.