dir-iterator: release strbuf after use
[gitweb.git] / worktree.c
index b45bfeb9d33b4ae4f372a15edd90651bf3735f92..4f66cd9ce178d855245712b42d681ff8bcda0636 100644 (file)
@@ -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);