On Sat, Feb 14, 2026 at 11:34:16PM +0100, Karthik Nayak wrote:
Show 40 quoted lines
> 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 ");