]> git.ipfire.org Git - thirdparty/git.git/blobdiff - worktree.c
Merge branch 'hv/receive-denycurrent-everywhere'
[thirdparty/git.git] / worktree.c
index 7c8cd2131713dd53ee3e716df6e5451d67c3ec69..eba4fd3a03812f046dadc1baf9d7644ba8dfcce9 100644 (file)
@@ -47,7 +47,6 @@ static void add_head_info(struct worktree *wt)
 static struct worktree *get_main_worktree(void)
 {
        struct worktree *worktree = NULL;
-       struct strbuf path = STRBUF_INIT;
        struct strbuf worktree_path = STRBUF_INIT;
 
        strbuf_add_absolute_path(&worktree_path, get_git_common_dir());
@@ -55,8 +54,6 @@ static struct worktree *get_main_worktree(void)
        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);
        /*
@@ -70,7 +67,6 @@ static struct worktree *get_main_worktree(void)
                is_bare_repository();
        add_head_info(worktree);
 
-       strbuf_release(&path);
        strbuf_release(&worktree_path);
        return worktree;
 }
@@ -216,7 +212,6 @@ struct worktree *find_worktree(struct worktree **list,
                               const char *arg)
 {
        struct worktree *wt;
-       char *path;
        char *to_free = NULL;
 
        if ((wt = find_worktree_by_suffix(list, arg)))
@@ -224,11 +219,17 @@ struct worktree *find_worktree(struct worktree **list,
 
        if (prefix)
                arg = to_free = prefix_filename(prefix, arg);
-       path = real_pathdup(arg, 0);
-       if (!path) {
-               free(to_free);
+       wt = find_worktree_by_path(list, arg);
+       free(to_free);
+       return wt;
+}
+
+struct worktree *find_worktree_by_path(struct worktree **list, const char *p)
+{
+       char *path = real_pathdup(p, 0);
+
+       if (!path)
                return NULL;
-       }
        for (; *list; list++) {
                const char *wt_path = real_path_if_valid((*list)->path);
 
@@ -236,7 +237,6 @@ struct worktree *find_worktree(struct worktree **list,
                        break;
        }
        free(path);
-       free(to_free);
        return *list;
 }