summaryrefslogtreecommitdiff
path: root/worktree.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2019-05-08 15:37:28 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-05-08 15:37:28 (GMT)
commitec2642a2a127c192c2af239793a0f63f59845658 (patch)
tree4455168d0eeccfe16bd7e5de4f4d2c1c3dc7a22f /worktree.c
parent5b5def9a99030ecf2b62163ea7856f91cd8f292c (diff)
parentf3534c98e44c9f811742c7ea288e75d4baa3c27d (diff)
downloadgit-ec2642a2a127c192c2af239793a0f63f59845658.zip
git-ec2642a2a127c192c2af239793a0f63f59845658.tar.gz
git-ec2642a2a127c192c2af239793a0f63f59845658.tar.bz2
Merge branch 'jt/submodule-repo-is-with-worktree'
The logic to tell if a Git repository has a working tree protects "git branch -D" from removing the branch that is currently checked out by mistake. The implementation of this logic was broken for repositories with unusual name, which unfortunately is the norm for submodules these days. This has been fixed. * jt/submodule-repo-is-with-worktree: worktree: update is_bare heuristics
Diffstat (limited to 'worktree.c')
-rw-r--r--worktree.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/worktree.c b/worktree.c
index b45bfeb9..4f66cd9 100644
--- a/worktree.c
+++ b/worktree.c
@@ -49,18 +49,24 @@ static struct worktree *get_main_worktree(void)
struct worktree *worktree = NULL;
struct strbuf path = STRBUF_INIT;
struct strbuf worktree_path = STRBUF_INIT;
- int is_bare = 0;
strbuf_add_absolute_path(&worktree_path, get_git_common_dir());
- is_bare = !strbuf_strip_suffix(&worktree_path, "/.git");
- if (is_bare)
+ if (!strbuf_strip_suffix(&worktree_path, "/.git"))
strbuf_strip_suffix(&worktree_path, "/.");
strbuf_addf(&path, "%s/HEAD", get_git_common_dir());
worktree = xcalloc(1, sizeof(*worktree));
worktree->path = strbuf_detach(&worktree_path, NULL);
- worktree->is_bare = is_bare;
+ /*
+ * NEEDSWORK: If this function is called from a secondary worktree and
+ * config.worktree is present, is_bare_repository_cfg will reflect the
+ * contents of config.worktree, not the contents of the main worktree.
+ * This means that worktree->is_bare may be set to 0 even if the main
+ * worktree is configured to be bare.
+ */
+ worktree->is_bare = (is_bare_repository_cfg == 1) ||
+ is_bare_repository();
add_head_info(worktree);
strbuf_release(&path);