138
return refs;
139
}
140
141
-static void files_reflog_path_other_worktrees(struct files_ref_store *refs,
142
- struct strbuf *sb,
143
- const char *refname)
144
-{
145
- const char *real_ref;
146
- const char *worktree_name;
147
- int length;
148
-
149
- if (parse_worktree_ref(refname, &worktree_name, &length, &real_ref))
150
- BUG("refname %s is not a other-worktree ref", refname);
151
-
152
- if (worktree_name)
153
- strbuf_addf(sb, "%s/worktrees/%.*s/logs/%s", refs->gitcommondir,
154
- length, worktree_name, real_ref);
155
- else
156
- strbuf_addf(sb, "%s/logs/%s", refs->gitcommondir,
157
- real_ref);
158
-}
159
-
141
static void files_reflog_path(struct files_ref_store *refs,
142
struct strbuf *sb,
143
const char *refname)
144
{
164
- switch (ref_type(refname)) {
165
- case REF_TYPE_PER_WORKTREE:
166
- case REF_TYPE_PSEUDOREF:
145
+ const char *bare_refname;
146
+ const char *wtname;
147
+ int wtname_len;
148
+ enum ref_worktree_type wt_type = parse_worktree_ref(
149
+ refname, &wtname, &wtname_len, &bare_refname);
150
+
151
+ switch (wt_type) {
152
+ case REF_WORKTREE_CURRENT:
153
strbuf_addf(sb, "%s/logs/%s", refs->base.gitdir, refname);
154
break;
169
- case REF_TYPE_OTHER_PSEUDOREF:
170
- case REF_TYPE_MAIN_PSEUDOREF:
171
- files_reflog_path_other_worktrees(refs, sb, refname);
155
+ case REF_WORKTREE_SHARED:
156
+ case REF_WORKTREE_MAIN:
157
+ strbuf_addf(sb, "%s/logs/%s", refs->gitcommondir, bare_refname);
158
break;
173
- case REF_TYPE_NORMAL:
174
- strbuf_addf(sb, "%s/logs/%s", refs->gitcommondir, refname);
159
+ case REF_WORKTREE_OTHER:
160
+ strbuf_addf(sb, "%s/worktrees/%.*s/logs/%s", refs->gitcommondir,
161
+ wtname_len, wtname, bare_refname);
162
break;
163
default:
177
- BUG("unknown ref type %d of ref %s",
178
- ref_type(refname), refname);
164
+ BUG("unknown ref type %d of ref %s", wt_type, refname);
165
}
166
}
167
169
struct strbuf *sb,
170
const char *refname)
171
{
186
- switch (ref_type(refname)) {
187
- case REF_TYPE_PER_WORKTREE:
188
- case REF_TYPE_PSEUDOREF:
172
+ const char *bare_refname;
173
+ const char *wtname;
174
+ int wtname_len;
175
+ enum ref_worktree_type wt_type = parse_worktree_ref(
176
+ refname, &wtname, &wtname_len, &bare_refname);
177
+ switch (wt_type) {
178
+ case REF_WORKTREE_CURRENT:
179
strbuf_addf(sb, "%s/%s", refs->base.gitdir, refname);
180
break;
191
- case REF_TYPE_MAIN_PSEUDOREF:
192
- if (!skip_prefix(refname, "main-worktree/", &refname))
193
- BUG("ref %s is not a main pseudoref", refname);
194
- /* fallthrough */
195
- case REF_TYPE_OTHER_PSEUDOREF:
196
- case REF_TYPE_NORMAL:
197
- strbuf_addf(sb, "%s/%s", refs->gitcommondir, refname);
181
+ case REF_WORKTREE_OTHER:
182
+ strbuf_addf(sb, "%s/worktrees/%.*s/%s", refs->gitcommondir,
183
+ wtname_len, wtname, bare_refname);
184
+ break;
185
+ case REF_WORKTREE_SHARED:
186
+ case REF_WORKTREE_MAIN:
187
+ strbuf_addf(sb, "%s/%s", refs->gitcommondir, bare_refname);
188
break;
189
default:
200
- BUG("unknown ref type %d of ref %s",
201
- ref_type(refname), refname);
190
+ BUG("unknown ref type %d of ref %s", wt_type, refname);
191
}
192
}
193
760
761
while ((ok = ref_iterator_advance(iter->iter0)) == ITER_OK) {
762
if (iter->flags & DO_FOR_EACH_PER_WORKTREE_ONLY &&
774
- ref_type(iter->iter0->refname) != REF_TYPE_PER_WORKTREE)
763
+ parse_worktree_ref(iter->iter0->refname, NULL, NULL,
764
+ NULL) != REF_WORKTREE_CURRENT)
765
continue;
766
767
if ((iter->flags & DO_FOR_EACH_OMIT_DANGLING_SYMREFS) &&
1168
unsigned int pack_flags)
1169
{
1170
/* Do not pack per-worktree refs: */
1181
- if (ref_type(refname) != REF_TYPE_NORMAL)
1171
+ if (parse_worktree_ref(refname, NULL, NULL, NULL) !=
1172
+ REF_WORKTREE_SHARED)
1173
return 0;
1174
1175
/* Do not pack non-tags unless PACK_REFS_ALL is set: */
2258
*/
2259
return ITER_SELECT_0;
2260
} else if (iter_common) {
2270
- if (ref_type(iter_common->refname) == REF_TYPE_NORMAL)
2261
+ if (parse_worktree_ref(iter_common->refname, NULL, NULL,
2262
+ NULL) == REF_WORKTREE_SHARED)
2263
return ITER_SELECT_1;
2264
2265
/*