+void strbuf_worktree_ref(const struct worktree *wt,
+ struct strbuf *sb,
+ const char *refname)
+{
+ switch (ref_type(refname)) {
+ case REF_TYPE_PSEUDOREF:
+ case REF_TYPE_PER_WORKTREE:
+ if (wt && !wt->is_current) {
+ if (is_main_worktree(wt))
+ strbuf_addstr(sb, "main-worktree/");
+ else
+ strbuf_addf(sb, "worktrees/%s/", wt->id);
+ }
+ break;
+
+ case REF_TYPE_MAIN_PSEUDOREF:
+ case REF_TYPE_OTHER_PSEUDOREF:
+ break;
+
+ case REF_TYPE_NORMAL:
+ /*
+ * For shared refs, don't prefix worktrees/ or
+ * main-worktree/. It's not necessary and
+ * files-backend.c can't handle it anyway.
+ */
+ break;
+ }
+ strbuf_addstr(sb, refname);
+}
+
+const char *worktree_ref(const struct worktree *wt, const char *refname)
+{
+ static struct strbuf sb = STRBUF_INIT;
+
+ strbuf_reset(&sb);
+ strbuf_worktree_ref(wt, &sb, refname);
+ return sb.buf;
+}
+