about summary refs log tree commit diff
path: root/third_party/git/worktree.c
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2020-05-25T23·06+0100
committerVincent Ambo <tazjin@google.com>2020-05-25T23·06+0100
commit93ba78d6f4632ef1c5228965e3edc8c0faf88c1e (patch)
tree85730c182a9f5f492ade8e8ccdb1c2356f9900bd /third_party/git/worktree.c
parent6f8fbf4aa4b1654ab27d4829e114538761817de0 (diff)
revert(3p/git): Revert merge of git upstream at v2.26.2 r/852
This causes cgit to serve error pages, which is undesirable.

This reverts commit 5229c9b232de5bfa959ad6ebbb4c8192ac513352, reversing
changes made to f2b211131f2347342dde63975b09cf603149f1a3.
Diffstat (limited to 'third_party/git/worktree.c')
-rw-r--r--third_party/git/worktree.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/third_party/git/worktree.c b/third_party/git/worktree.c
index eba4fd3a03..5b4793caa3 100644
--- a/third_party/git/worktree.c
+++ b/third_party/git/worktree.c
@@ -47,13 +47,15 @@ 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());
-	strbuf_strip_suffix(&worktree_path, "/.");
 	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);
 	/*
@@ -67,6 +69,7 @@ static struct worktree *get_main_worktree(void)
 		is_bare_repository();
 	add_head_info(worktree);
 
+	strbuf_release(&path);
 	strbuf_release(&worktree_path);
 	return worktree;
 }
@@ -212,6 +215,7 @@ 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,17 +223,11 @@ struct worktree *find_worktree(struct worktree **list,
 
 	if (prefix)
 		arg = to_free = prefix_filename(prefix, arg);
-	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)
+	path = real_pathdup(arg, 0);
+	if (!path) {
+		free(to_free);
 		return NULL;
+	}
 	for (; *list; list++) {
 		const char *wt_path = real_path_if_valid((*list)->path);
 
@@ -237,6 +235,7 @@ struct worktree *find_worktree_by_path(struct worktree **list, const char *p)
 			break;
 	}
 	free(path);
+	free(to_free);
 	return *list;
 }