Skip to content

Commit

Permalink
Merge branch 'jk/init-core-worktree-at-root' into maint
Browse files Browse the repository at this point in the history
We avoid setting core.worktree when the repository location is the
".git" directory directly at the top level of the working tree, but
the code misdetected the case in which the working tree is at the
root level of the filesystem (which arguably is a silly thing to
do, but still valid).

* jk/init-core-worktree-at-root:
  init: don't set core.worktree when initializing /.git
  • Loading branch information
Junio C Hamano committed May 13, 2015
2 parents c99fec6 + 84ccad8 commit a60abe1
Showing 1 changed file with 15 additions and 3 deletions.
18 changes: 15 additions & 3 deletions builtin/init-db.c
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,20 @@ static int git_init_db_config(const char *k, const char *v, void *cb)
return 0;
}

/*
* If the git_dir is not directly inside the working tree, then git will not
* find it by default, and we need to set the worktree explicitly.
*/
static int needs_work_tree_config(const char *git_dir, const char *work_tree)
{
if (!strcmp(work_tree, "/") && !strcmp(git_dir, "/.git"))
return 0;
if (skip_prefix(git_dir, work_tree, &git_dir) &&
!strcmp(git_dir, "/.git"))
return 0;
return 1;
}

static int create_default_files(const char *template_path)
{
const char *git_dir = get_git_dir();
Expand Down Expand Up @@ -274,10 +288,8 @@ static int create_default_files(const char *template_path)
/* allow template config file to override the default */
if (log_all_ref_updates == -1)
git_config_set("core.logallrefupdates", "true");
if (!starts_with(git_dir, work_tree) ||
strcmp(git_dir + strlen(work_tree), "/.git")) {
if (needs_work_tree_config(git_dir, work_tree))
git_config_set("core.worktree", work_tree);
}
}

if (!reinit) {
Expand Down

0 comments on commit a60abe1

Please sign in to comment.