]> git.ipfire.org Git - thirdparty/git.git/blobdiff - worktree.c
credential: document protocol updates
[thirdparty/git.git] / worktree.c
index 33c2655534b2902f115b38d7f9c6efd5a79a8fe1..eba4fd3a03812f046dadc1baf9d7644ba8dfcce9 100644 (file)
@@ -50,6 +50,7 @@ static struct worktree *get_main_worktree(void)
        struct strbuf worktree_path = STRBUF_INIT;
 
        strbuf_add_absolute_path(&worktree_path, get_git_common_dir());
+       strbuf_strip_suffix(&worktree_path, "/.");
        if (!strbuf_strip_suffix(&worktree_path, "/.git"))
                strbuf_strip_suffix(&worktree_path, "/.");
 
@@ -211,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)))
@@ -219,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);
 
@@ -231,7 +237,6 @@ struct worktree *find_worktree(struct worktree **list,
                        break;
        }
        free(path);
-       free(to_free);
        return *list;
 }