Re: [PATCH v6 3/6] refs: receive and use the reference storage payload
From: Patrick Steinhardt <hidden>
Date: 2026-02-17 07:24:20
On Sat, Feb 14, 2026 at 11:34:16PM +0100, Karthik Nayak wrote:
quoted hunk ↗ jump to hunk
diff --git a/refs.c b/refs.c index 77b93d655b..11d028232b 100644 --- a/refs.c +++ b/refs.c@@ -3425,3 +3426,40 @@ const char *ref_transaction_error_msg(enum ref_transaction_error err) return "unknown failure"; } } + +void refs_compute_filesystem_location(const char *gitdir, const char *payload, + bool *is_worktree, struct strbuf *refdir, + struct strbuf *ref_common_dir) +{ + struct strbuf sb = STRBUF_INIT; + + *is_worktree = get_common_dir_noenv(ref_common_dir, gitdir); + + if (!payload) { + /* + * We can use the 'gitdir' as the 'refdir' without appending the + * worktree path, as the 'gitdir' here is already the worktree + * path and is different from 'commondir' denoted by 'ref_common_dir'. + */ + strbuf_addstr(refdir, gitdir); + return; + } + + if (!is_absolute_path(payload)) { + strbuf_addf(&sb, "%s/%s", ref_common_dir->buf, payload); + strbuf_realpath(ref_common_dir, sb.buf, 1); + } else { + strbuf_realpath(ref_common_dir, payload, 1); + } + + strbuf_addbuf(refdir, ref_common_dir); + + if (*is_worktree) { + const char *wt_id = strrchr(gitdir, '/'); + if (!wt_id) + BUG("worktree path does not contain slash ");
There's a trailing space in the error message here. Patrick