]> git.ipfire.org Git - thirdparty/git.git/blob - refs.c
The fifth batch
[thirdparty/git.git] / refs.c
1 /*
2 * The backend-independent part of the reference module.
3 */
4
5 #include "git-compat-util.h"
6 #include "advice.h"
7 #include "config.h"
8 #include "environment.h"
9 #include "hashmap.h"
10 #include "gettext.h"
11 #include "hex.h"
12 #include "lockfile.h"
13 #include "iterator.h"
14 #include "refs.h"
15 #include "refs/refs-internal.h"
16 #include "run-command.h"
17 #include "hook.h"
18 #include "object-name.h"
19 #include "object-store-ll.h"
20 #include "object.h"
21 #include "path.h"
22 #include "tag.h"
23 #include "submodule.h"
24 #include "worktree.h"
25 #include "strvec.h"
26 #include "repository.h"
27 #include "setup.h"
28 #include "sigchain.h"
29 #include "date.h"
30 #include "commit.h"
31 #include "wildmatch.h"
32
33 /*
34 * List of all available backends
35 */
36 static struct ref_storage_be *refs_backends = &refs_be_files;
37
38 static struct ref_storage_be *find_ref_storage_backend(const char *name)
39 {
40 struct ref_storage_be *be;
41 for (be = refs_backends; be; be = be->next)
42 if (!strcmp(be->name, name))
43 return be;
44 return NULL;
45 }
46
47 /*
48 * How to handle various characters in refnames:
49 * 0: An acceptable character for refs
50 * 1: End-of-component
51 * 2: ., look for a preceding . to reject .. in refs
52 * 3: {, look for a preceding @ to reject @{ in refs
53 * 4: A bad character: ASCII control characters, and
54 * ":", "?", "[", "\", "^", "~", SP, or TAB
55 * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
56 */
57 static unsigned char refname_disposition[256] = {
58 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
59 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
60 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,
61 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
62 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
63 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,
64 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
65 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4
66 };
67
68 struct ref_namespace_info ref_namespace[] = {
69 [NAMESPACE_HEAD] = {
70 .ref = "HEAD",
71 .decoration = DECORATION_REF_HEAD,
72 .exact = 1,
73 },
74 [NAMESPACE_BRANCHES] = {
75 .ref = "refs/heads/",
76 .decoration = DECORATION_REF_LOCAL,
77 },
78 [NAMESPACE_TAGS] = {
79 .ref = "refs/tags/",
80 .decoration = DECORATION_REF_TAG,
81 },
82 [NAMESPACE_REMOTE_REFS] = {
83 /*
84 * The default refspec for new remotes copies refs from
85 * refs/heads/ on the remote into refs/remotes/<remote>/.
86 * As such, "refs/remotes/" has special handling.
87 */
88 .ref = "refs/remotes/",
89 .decoration = DECORATION_REF_REMOTE,
90 },
91 [NAMESPACE_STASH] = {
92 /*
93 * The single ref "refs/stash" stores the latest stash.
94 * Older stashes can be found in the reflog.
95 */
96 .ref = "refs/stash",
97 .exact = 1,
98 .decoration = DECORATION_REF_STASH,
99 },
100 [NAMESPACE_REPLACE] = {
101 /*
102 * This namespace allows Git to act as if one object ID
103 * points to the content of another. Unlike the other
104 * ref namespaces, this one can be changed by the
105 * GIT_REPLACE_REF_BASE environment variable. This
106 * .namespace value will be overwritten in setup_git_env().
107 */
108 .ref = "refs/replace/",
109 .decoration = DECORATION_GRAFTED,
110 },
111 [NAMESPACE_NOTES] = {
112 /*
113 * The refs/notes/commit ref points to the tip of a
114 * parallel commit history that adds metadata to commits
115 * in the normal history. This ref can be overwritten
116 * by the core.notesRef config variable or the
117 * GIT_NOTES_REFS environment variable.
118 */
119 .ref = "refs/notes/commit",
120 .exact = 1,
121 },
122 [NAMESPACE_PREFETCH] = {
123 /*
124 * Prefetch refs are written by the background 'fetch'
125 * maintenance task. It allows faster foreground fetches
126 * by advertising these previously-downloaded tips without
127 * updating refs/remotes/ without user intervention.
128 */
129 .ref = "refs/prefetch/",
130 },
131 [NAMESPACE_REWRITTEN] = {
132 /*
133 * Rewritten refs are used by the 'label' command in the
134 * sequencer. These are particularly useful during an
135 * interactive rebase that uses the 'merge' command.
136 */
137 .ref = "refs/rewritten/",
138 },
139 };
140
141 void update_ref_namespace(enum ref_namespace namespace, char *ref)
142 {
143 struct ref_namespace_info *info = &ref_namespace[namespace];
144 if (info->ref_updated)
145 free(info->ref);
146 info->ref = ref;
147 info->ref_updated = 1;
148 }
149
150 /*
151 * Try to read one refname component from the front of refname.
152 * Return the length of the component found, or -1 if the component is
153 * not legal. It is legal if it is something reasonable to have under
154 * ".git/refs/"; We do not like it if:
155 *
156 * - it begins with ".", or
157 * - it has double dots "..", or
158 * - it has ASCII control characters, or
159 * - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or
160 * - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or
161 * - it ends with a "/", or
162 * - it ends with ".lock", or
163 * - it contains a "@{" portion
164 *
165 * When sanitized is not NULL, instead of rejecting the input refname
166 * as an error, try to come up with a usable replacement for the input
167 * refname in it.
168 */
169 static int check_refname_component(const char *refname, int *flags,
170 struct strbuf *sanitized)
171 {
172 const char *cp;
173 char last = '\0';
174 size_t component_start = 0; /* garbage - not a reasonable initial value */
175
176 if (sanitized)
177 component_start = sanitized->len;
178
179 for (cp = refname; ; cp++) {
180 int ch = *cp & 255;
181 unsigned char disp = refname_disposition[ch];
182
183 if (sanitized && disp != 1)
184 strbuf_addch(sanitized, ch);
185
186 switch (disp) {
187 case 1:
188 goto out;
189 case 2:
190 if (last == '.') { /* Refname contains "..". */
191 if (sanitized)
192 /* collapse ".." to single "." */
193 strbuf_setlen(sanitized, sanitized->len - 1);
194 else
195 return -1;
196 }
197 break;
198 case 3:
199 if (last == '@') { /* Refname contains "@{". */
200 if (sanitized)
201 sanitized->buf[sanitized->len-1] = '-';
202 else
203 return -1;
204 }
205 break;
206 case 4:
207 /* forbidden char */
208 if (sanitized)
209 sanitized->buf[sanitized->len-1] = '-';
210 else
211 return -1;
212 break;
213 case 5:
214 if (!(*flags & REFNAME_REFSPEC_PATTERN)) {
215 /* refspec can't be a pattern */
216 if (sanitized)
217 sanitized->buf[sanitized->len-1] = '-';
218 else
219 return -1;
220 }
221
222 /*
223 * Unset the pattern flag so that we only accept
224 * a single asterisk for one side of refspec.
225 */
226 *flags &= ~ REFNAME_REFSPEC_PATTERN;
227 break;
228 }
229 last = ch;
230 }
231 out:
232 if (cp == refname)
233 return 0; /* Component has zero length. */
234
235 if (refname[0] == '.') { /* Component starts with '.'. */
236 if (sanitized)
237 sanitized->buf[component_start] = '-';
238 else
239 return -1;
240 }
241 if (cp - refname >= LOCK_SUFFIX_LEN &&
242 !memcmp(cp - LOCK_SUFFIX_LEN, LOCK_SUFFIX, LOCK_SUFFIX_LEN)) {
243 if (!sanitized)
244 return -1;
245 /* Refname ends with ".lock". */
246 while (strbuf_strip_suffix(sanitized, LOCK_SUFFIX)) {
247 /* try again in case we have .lock.lock */
248 }
249 }
250 return cp - refname;
251 }
252
253 static int check_or_sanitize_refname(const char *refname, int flags,
254 struct strbuf *sanitized)
255 {
256 int component_len, component_count = 0;
257
258 if (!strcmp(refname, "@")) {
259 /* Refname is a single character '@'. */
260 if (sanitized)
261 strbuf_addch(sanitized, '-');
262 else
263 return -1;
264 }
265
266 while (1) {
267 if (sanitized && sanitized->len)
268 strbuf_complete(sanitized, '/');
269
270 /* We are at the start of a path component. */
271 component_len = check_refname_component(refname, &flags,
272 sanitized);
273 if (sanitized && component_len == 0)
274 ; /* OK, omit empty component */
275 else if (component_len <= 0)
276 return -1;
277
278 component_count++;
279 if (refname[component_len] == '\0')
280 break;
281 /* Skip to next component. */
282 refname += component_len + 1;
283 }
284
285 if (refname[component_len - 1] == '.') {
286 /* Refname ends with '.'. */
287 if (sanitized)
288 ; /* omit ending dot */
289 else
290 return -1;
291 }
292 if (!(flags & REFNAME_ALLOW_ONELEVEL) && component_count < 2)
293 return -1; /* Refname has only one component. */
294 return 0;
295 }
296
297 int check_refname_format(const char *refname, int flags)
298 {
299 return check_or_sanitize_refname(refname, flags, NULL);
300 }
301
302 void sanitize_refname_component(const char *refname, struct strbuf *out)
303 {
304 if (check_or_sanitize_refname(refname, REFNAME_ALLOW_ONELEVEL, out))
305 BUG("sanitizing refname '%s' check returned error", refname);
306 }
307
308 int refname_is_safe(const char *refname)
309 {
310 const char *rest;
311
312 if (skip_prefix(refname, "refs/", &rest)) {
313 char *buf;
314 int result;
315 size_t restlen = strlen(rest);
316
317 /* rest must not be empty, or start or end with "/" */
318 if (!restlen || *rest == '/' || rest[restlen - 1] == '/')
319 return 0;
320
321 /*
322 * Does the refname try to escape refs/?
323 * For example: refs/foo/../bar is safe but refs/foo/../../bar
324 * is not.
325 */
326 buf = xmallocz(restlen);
327 result = !normalize_path_copy(buf, rest) && !strcmp(buf, rest);
328 free(buf);
329 return result;
330 }
331
332 do {
333 if (!isupper(*refname) && *refname != '_')
334 return 0;
335 refname++;
336 } while (*refname);
337 return 1;
338 }
339
340 /*
341 * Return true if refname, which has the specified oid and flags, can
342 * be resolved to an object in the database. If the referred-to object
343 * does not exist, emit a warning and return false.
344 */
345 int ref_resolves_to_object(const char *refname,
346 struct repository *repo,
347 const struct object_id *oid,
348 unsigned int flags)
349 {
350 if (flags & REF_ISBROKEN)
351 return 0;
352 if (!repo_has_object_file(repo, oid)) {
353 error(_("%s does not point to a valid object!"), refname);
354 return 0;
355 }
356 return 1;
357 }
358
359 char *refs_resolve_refdup(struct ref_store *refs,
360 const char *refname, int resolve_flags,
361 struct object_id *oid, int *flags)
362 {
363 const char *result;
364
365 result = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
366 oid, flags);
367 return xstrdup_or_null(result);
368 }
369
370 char *resolve_refdup(const char *refname, int resolve_flags,
371 struct object_id *oid, int *flags)
372 {
373 return refs_resolve_refdup(get_main_ref_store(the_repository),
374 refname, resolve_flags,
375 oid, flags);
376 }
377
378 /* The argument to for_each_filter_refs */
379 struct for_each_ref_filter {
380 const char *pattern;
381 const char *prefix;
382 each_ref_fn *fn;
383 void *cb_data;
384 };
385
386 int read_ref_full(const char *refname, int resolve_flags, struct object_id *oid, int *flags)
387 {
388 struct ref_store *refs = get_main_ref_store(the_repository);
389
390 if (refs_resolve_ref_unsafe(refs, refname, resolve_flags,
391 oid, flags))
392 return 0;
393 return -1;
394 }
395
396 int read_ref(const char *refname, struct object_id *oid)
397 {
398 return read_ref_full(refname, RESOLVE_REF_READING, oid, NULL);
399 }
400
401 int refs_ref_exists(struct ref_store *refs, const char *refname)
402 {
403 return !!refs_resolve_ref_unsafe(refs, refname, RESOLVE_REF_READING,
404 NULL, NULL);
405 }
406
407 int ref_exists(const char *refname)
408 {
409 return refs_ref_exists(get_main_ref_store(the_repository), refname);
410 }
411
412 static int for_each_filter_refs(const char *refname,
413 const struct object_id *oid,
414 int flags, void *data)
415 {
416 struct for_each_ref_filter *filter = data;
417
418 if (wildmatch(filter->pattern, refname, 0))
419 return 0;
420 if (filter->prefix)
421 skip_prefix(refname, filter->prefix, &refname);
422 return filter->fn(refname, oid, flags, filter->cb_data);
423 }
424
425 enum peel_status peel_object(const struct object_id *name, struct object_id *oid)
426 {
427 struct object *o = lookup_unknown_object(the_repository, name);
428
429 if (o->type == OBJ_NONE) {
430 int type = oid_object_info(the_repository, name, NULL);
431 if (type < 0 || !object_as_type(o, type, 0))
432 return PEEL_INVALID;
433 }
434
435 if (o->type != OBJ_TAG)
436 return PEEL_NON_TAG;
437
438 o = deref_tag_noverify(o);
439 if (!o)
440 return PEEL_INVALID;
441
442 oidcpy(oid, &o->oid);
443 return PEEL_PEELED;
444 }
445
446 struct warn_if_dangling_data {
447 FILE *fp;
448 const char *refname;
449 const struct string_list *refnames;
450 const char *msg_fmt;
451 };
452
453 static int warn_if_dangling_symref(const char *refname,
454 const struct object_id *oid UNUSED,
455 int flags, void *cb_data)
456 {
457 struct warn_if_dangling_data *d = cb_data;
458 const char *resolves_to;
459
460 if (!(flags & REF_ISSYMREF))
461 return 0;
462
463 resolves_to = resolve_ref_unsafe(refname, 0, NULL, NULL);
464 if (!resolves_to
465 || (d->refname
466 ? strcmp(resolves_to, d->refname)
467 : !string_list_has_string(d->refnames, resolves_to))) {
468 return 0;
469 }
470
471 fprintf(d->fp, d->msg_fmt, refname);
472 fputc('\n', d->fp);
473 return 0;
474 }
475
476 void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname)
477 {
478 struct warn_if_dangling_data data;
479
480 data.fp = fp;
481 data.refname = refname;
482 data.refnames = NULL;
483 data.msg_fmt = msg_fmt;
484 for_each_rawref(warn_if_dangling_symref, &data);
485 }
486
487 void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct string_list *refnames)
488 {
489 struct warn_if_dangling_data data;
490
491 data.fp = fp;
492 data.refname = NULL;
493 data.refnames = refnames;
494 data.msg_fmt = msg_fmt;
495 for_each_rawref(warn_if_dangling_symref, &data);
496 }
497
498 int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
499 {
500 return refs_for_each_ref_in(refs, "refs/tags/", fn, cb_data);
501 }
502
503 int for_each_tag_ref(each_ref_fn fn, void *cb_data)
504 {
505 return refs_for_each_tag_ref(get_main_ref_store(the_repository), fn, cb_data);
506 }
507
508 int refs_for_each_branch_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
509 {
510 return refs_for_each_ref_in(refs, "refs/heads/", fn, cb_data);
511 }
512
513 int for_each_branch_ref(each_ref_fn fn, void *cb_data)
514 {
515 return refs_for_each_branch_ref(get_main_ref_store(the_repository), fn, cb_data);
516 }
517
518 int refs_for_each_remote_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
519 {
520 return refs_for_each_ref_in(refs, "refs/remotes/", fn, cb_data);
521 }
522
523 int for_each_remote_ref(each_ref_fn fn, void *cb_data)
524 {
525 return refs_for_each_remote_ref(get_main_ref_store(the_repository), fn, cb_data);
526 }
527
528 int head_ref_namespaced(each_ref_fn fn, void *cb_data)
529 {
530 struct strbuf buf = STRBUF_INIT;
531 int ret = 0;
532 struct object_id oid;
533 int flag;
534
535 strbuf_addf(&buf, "%sHEAD", get_git_namespace());
536 if (!read_ref_full(buf.buf, RESOLVE_REF_READING, &oid, &flag))
537 ret = fn(buf.buf, &oid, flag, cb_data);
538 strbuf_release(&buf);
539
540 return ret;
541 }
542
543 void normalize_glob_ref(struct string_list_item *item, const char *prefix,
544 const char *pattern)
545 {
546 struct strbuf normalized_pattern = STRBUF_INIT;
547
548 if (*pattern == '/')
549 BUG("pattern must not start with '/'");
550
551 if (prefix)
552 strbuf_addstr(&normalized_pattern, prefix);
553 else if (!starts_with(pattern, "refs/") &&
554 strcmp(pattern, "HEAD"))
555 strbuf_addstr(&normalized_pattern, "refs/");
556 /*
557 * NEEDSWORK: Special case other symrefs such as REBASE_HEAD,
558 * MERGE_HEAD, etc.
559 */
560
561 strbuf_addstr(&normalized_pattern, pattern);
562 strbuf_strip_suffix(&normalized_pattern, "/");
563
564 item->string = strbuf_detach(&normalized_pattern, NULL);
565 item->util = has_glob_specials(pattern) ? NULL : item->string;
566 strbuf_release(&normalized_pattern);
567 }
568
569 int for_each_glob_ref_in(each_ref_fn fn, const char *pattern,
570 const char *prefix, void *cb_data)
571 {
572 struct strbuf real_pattern = STRBUF_INIT;
573 struct for_each_ref_filter filter;
574 int ret;
575
576 if (!prefix && !starts_with(pattern, "refs/"))
577 strbuf_addstr(&real_pattern, "refs/");
578 else if (prefix)
579 strbuf_addstr(&real_pattern, prefix);
580 strbuf_addstr(&real_pattern, pattern);
581
582 if (!has_glob_specials(pattern)) {
583 /* Append implied '/' '*' if not present. */
584 strbuf_complete(&real_pattern, '/');
585 /* No need to check for '*', there is none. */
586 strbuf_addch(&real_pattern, '*');
587 }
588
589 filter.pattern = real_pattern.buf;
590 filter.prefix = prefix;
591 filter.fn = fn;
592 filter.cb_data = cb_data;
593 ret = for_each_ref(for_each_filter_refs, &filter);
594
595 strbuf_release(&real_pattern);
596 return ret;
597 }
598
599 int for_each_glob_ref(each_ref_fn fn, const char *pattern, void *cb_data)
600 {
601 return for_each_glob_ref_in(fn, pattern, NULL, cb_data);
602 }
603
604 const char *prettify_refname(const char *name)
605 {
606 if (skip_prefix(name, "refs/heads/", &name) ||
607 skip_prefix(name, "refs/tags/", &name) ||
608 skip_prefix(name, "refs/remotes/", &name))
609 ; /* nothing */
610 return name;
611 }
612
613 static const char *ref_rev_parse_rules[] = {
614 "%.*s",
615 "refs/%.*s",
616 "refs/tags/%.*s",
617 "refs/heads/%.*s",
618 "refs/remotes/%.*s",
619 "refs/remotes/%.*s/HEAD",
620 NULL
621 };
622
623 #define NUM_REV_PARSE_RULES (ARRAY_SIZE(ref_rev_parse_rules) - 1)
624
625 /*
626 * Is it possible that the caller meant full_name with abbrev_name?
627 * If so return a non-zero value to signal "yes"; the magnitude of
628 * the returned value gives the precedence used for disambiguation.
629 *
630 * If abbrev_name cannot mean full_name, return 0.
631 */
632 int refname_match(const char *abbrev_name, const char *full_name)
633 {
634 const char **p;
635 const int abbrev_name_len = strlen(abbrev_name);
636 const int num_rules = NUM_REV_PARSE_RULES;
637
638 for (p = ref_rev_parse_rules; *p; p++)
639 if (!strcmp(full_name, mkpath(*p, abbrev_name_len, abbrev_name)))
640 return &ref_rev_parse_rules[num_rules] - p;
641
642 return 0;
643 }
644
645 /*
646 * Given a 'prefix' expand it by the rules in 'ref_rev_parse_rules' and add
647 * the results to 'prefixes'
648 */
649 void expand_ref_prefix(struct strvec *prefixes, const char *prefix)
650 {
651 const char **p;
652 int len = strlen(prefix);
653
654 for (p = ref_rev_parse_rules; *p; p++)
655 strvec_pushf(prefixes, *p, len, prefix);
656 }
657
658 static const char default_branch_name_advice[] = N_(
659 "Using '%s' as the name for the initial branch. This default branch name\n"
660 "is subject to change. To configure the initial branch name to use in all\n"
661 "of your new repositories, which will suppress this warning, call:\n"
662 "\n"
663 "\tgit config --global init.defaultBranch <name>\n"
664 "\n"
665 "Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
666 "'development'. The just-created branch can be renamed via this command:\n"
667 "\n"
668 "\tgit branch -m <name>\n"
669 );
670
671 char *repo_default_branch_name(struct repository *r, int quiet)
672 {
673 const char *config_key = "init.defaultbranch";
674 const char *config_display_key = "init.defaultBranch";
675 char *ret = NULL, *full_ref;
676 const char *env = getenv("GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME");
677
678 if (env && *env)
679 ret = xstrdup(env);
680 else if (repo_config_get_string(r, config_key, &ret) < 0)
681 die(_("could not retrieve `%s`"), config_display_key);
682
683 if (!ret) {
684 ret = xstrdup("master");
685 if (!quiet)
686 advise(_(default_branch_name_advice), ret);
687 }
688
689 full_ref = xstrfmt("refs/heads/%s", ret);
690 if (check_refname_format(full_ref, 0))
691 die(_("invalid branch name: %s = %s"), config_display_key, ret);
692 free(full_ref);
693
694 return ret;
695 }
696
697 const char *git_default_branch_name(int quiet)
698 {
699 static char *ret;
700
701 if (!ret)
702 ret = repo_default_branch_name(the_repository, quiet);
703
704 return ret;
705 }
706
707 /*
708 * *string and *len will only be substituted, and *string returned (for
709 * later free()ing) if the string passed in is a magic short-hand form
710 * to name a branch.
711 */
712 static char *substitute_branch_name(struct repository *r,
713 const char **string, int *len,
714 int nonfatal_dangling_mark)
715 {
716 struct strbuf buf = STRBUF_INIT;
717 struct interpret_branch_name_options options = {
718 .nonfatal_dangling_mark = nonfatal_dangling_mark
719 };
720 int ret = repo_interpret_branch_name(r, *string, *len, &buf, &options);
721
722 if (ret == *len) {
723 size_t size;
724 *string = strbuf_detach(&buf, &size);
725 *len = size;
726 return (char *)*string;
727 }
728
729 return NULL;
730 }
731
732 int repo_dwim_ref(struct repository *r, const char *str, int len,
733 struct object_id *oid, char **ref, int nonfatal_dangling_mark)
734 {
735 char *last_branch = substitute_branch_name(r, &str, &len,
736 nonfatal_dangling_mark);
737 int refs_found = expand_ref(r, str, len, oid, ref);
738 free(last_branch);
739 return refs_found;
740 }
741
742 int expand_ref(struct repository *repo, const char *str, int len,
743 struct object_id *oid, char **ref)
744 {
745 const char **p, *r;
746 int refs_found = 0;
747 struct strbuf fullref = STRBUF_INIT;
748
749 *ref = NULL;
750 for (p = ref_rev_parse_rules; *p; p++) {
751 struct object_id oid_from_ref;
752 struct object_id *this_result;
753 int flag;
754 struct ref_store *refs = get_main_ref_store(repo);
755
756 this_result = refs_found ? &oid_from_ref : oid;
757 strbuf_reset(&fullref);
758 strbuf_addf(&fullref, *p, len, str);
759 r = refs_resolve_ref_unsafe(refs, fullref.buf,
760 RESOLVE_REF_READING,
761 this_result, &flag);
762 if (r) {
763 if (!refs_found++)
764 *ref = xstrdup(r);
765 if (!warn_ambiguous_refs)
766 break;
767 } else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
768 warning(_("ignoring dangling symref %s"), fullref.buf);
769 } else if ((flag & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
770 warning(_("ignoring broken ref %s"), fullref.buf);
771 }
772 }
773 strbuf_release(&fullref);
774 return refs_found;
775 }
776
777 int repo_dwim_log(struct repository *r, const char *str, int len,
778 struct object_id *oid, char **log)
779 {
780 struct ref_store *refs = get_main_ref_store(r);
781 char *last_branch = substitute_branch_name(r, &str, &len, 0);
782 const char **p;
783 int logs_found = 0;
784 struct strbuf path = STRBUF_INIT;
785
786 *log = NULL;
787 for (p = ref_rev_parse_rules; *p; p++) {
788 struct object_id hash;
789 const char *ref, *it;
790
791 strbuf_reset(&path);
792 strbuf_addf(&path, *p, len, str);
793 ref = refs_resolve_ref_unsafe(refs, path.buf,
794 RESOLVE_REF_READING,
795 oid ? &hash : NULL, NULL);
796 if (!ref)
797 continue;
798 if (refs_reflog_exists(refs, path.buf))
799 it = path.buf;
800 else if (strcmp(ref, path.buf) &&
801 refs_reflog_exists(refs, ref))
802 it = ref;
803 else
804 continue;
805 if (!logs_found++) {
806 *log = xstrdup(it);
807 if (oid)
808 oidcpy(oid, &hash);
809 }
810 if (!warn_ambiguous_refs)
811 break;
812 }
813 strbuf_release(&path);
814 free(last_branch);
815 return logs_found;
816 }
817
818 int dwim_log(const char *str, int len, struct object_id *oid, char **log)
819 {
820 return repo_dwim_log(the_repository, str, len, oid, log);
821 }
822
823 int is_per_worktree_ref(const char *refname)
824 {
825 return starts_with(refname, "refs/worktree/") ||
826 starts_with(refname, "refs/bisect/") ||
827 starts_with(refname, "refs/rewritten/");
828 }
829
830 static int is_pseudoref_syntax(const char *refname)
831 {
832 const char *c;
833
834 for (c = refname; *c; c++) {
835 if (!isupper(*c) && *c != '-' && *c != '_')
836 return 0;
837 }
838
839 /*
840 * HEAD is not a pseudoref, but it certainly uses the
841 * pseudoref syntax.
842 */
843 return 1;
844 }
845
846 static int is_current_worktree_ref(const char *ref) {
847 return is_pseudoref_syntax(ref) || is_per_worktree_ref(ref);
848 }
849
850 enum ref_worktree_type parse_worktree_ref(const char *maybe_worktree_ref,
851 const char **worktree_name, int *worktree_name_length,
852 const char **bare_refname)
853 {
854 const char *name_dummy;
855 int name_length_dummy;
856 const char *ref_dummy;
857
858 if (!worktree_name)
859 worktree_name = &name_dummy;
860 if (!worktree_name_length)
861 worktree_name_length = &name_length_dummy;
862 if (!bare_refname)
863 bare_refname = &ref_dummy;
864
865 if (skip_prefix(maybe_worktree_ref, "worktrees/", bare_refname)) {
866 const char *slash = strchr(*bare_refname, '/');
867
868 *worktree_name = *bare_refname;
869 if (!slash) {
870 *worktree_name_length = strlen(*worktree_name);
871
872 /* This is an error condition, and the caller tell because the bare_refname is "" */
873 *bare_refname = *worktree_name + *worktree_name_length;
874 return REF_WORKTREE_OTHER;
875 }
876
877 *worktree_name_length = slash - *bare_refname;
878 *bare_refname = slash + 1;
879
880 if (is_current_worktree_ref(*bare_refname))
881 return REF_WORKTREE_OTHER;
882 }
883
884 *worktree_name = NULL;
885 *worktree_name_length = 0;
886
887 if (skip_prefix(maybe_worktree_ref, "main-worktree/", bare_refname)
888 && is_current_worktree_ref(*bare_refname))
889 return REF_WORKTREE_MAIN;
890
891 *bare_refname = maybe_worktree_ref;
892 if (is_current_worktree_ref(maybe_worktree_ref))
893 return REF_WORKTREE_CURRENT;
894
895 return REF_WORKTREE_SHARED;
896 }
897
898 long get_files_ref_lock_timeout_ms(void)
899 {
900 static int configured = 0;
901
902 /* The default timeout is 100 ms: */
903 static int timeout_ms = 100;
904
905 if (!configured) {
906 git_config_get_int("core.filesreflocktimeout", &timeout_ms);
907 configured = 1;
908 }
909
910 return timeout_ms;
911 }
912
913 int refs_delete_ref(struct ref_store *refs, const char *msg,
914 const char *refname,
915 const struct object_id *old_oid,
916 unsigned int flags)
917 {
918 struct ref_transaction *transaction;
919 struct strbuf err = STRBUF_INIT;
920
921 transaction = ref_store_transaction_begin(refs, &err);
922 if (!transaction ||
923 ref_transaction_delete(transaction, refname, old_oid,
924 flags, msg, &err) ||
925 ref_transaction_commit(transaction, &err)) {
926 error("%s", err.buf);
927 ref_transaction_free(transaction);
928 strbuf_release(&err);
929 return 1;
930 }
931 ref_transaction_free(transaction);
932 strbuf_release(&err);
933 return 0;
934 }
935
936 int delete_ref(const char *msg, const char *refname,
937 const struct object_id *old_oid, unsigned int flags)
938 {
939 return refs_delete_ref(get_main_ref_store(the_repository), msg, refname,
940 old_oid, flags);
941 }
942
943 static void copy_reflog_msg(struct strbuf *sb, const char *msg)
944 {
945 char c;
946 int wasspace = 1;
947
948 while ((c = *msg++)) {
949 if (wasspace && isspace(c))
950 continue;
951 wasspace = isspace(c);
952 if (wasspace)
953 c = ' ';
954 strbuf_addch(sb, c);
955 }
956 strbuf_rtrim(sb);
957 }
958
959 static char *normalize_reflog_message(const char *msg)
960 {
961 struct strbuf sb = STRBUF_INIT;
962
963 if (msg && *msg)
964 copy_reflog_msg(&sb, msg);
965 return strbuf_detach(&sb, NULL);
966 }
967
968 int should_autocreate_reflog(const char *refname)
969 {
970 switch (log_all_ref_updates) {
971 case LOG_REFS_ALWAYS:
972 return 1;
973 case LOG_REFS_NORMAL:
974 return starts_with(refname, "refs/heads/") ||
975 starts_with(refname, "refs/remotes/") ||
976 starts_with(refname, "refs/notes/") ||
977 !strcmp(refname, "HEAD");
978 default:
979 return 0;
980 }
981 }
982
983 int is_branch(const char *refname)
984 {
985 return !strcmp(refname, "HEAD") || starts_with(refname, "refs/heads/");
986 }
987
988 struct read_ref_at_cb {
989 const char *refname;
990 timestamp_t at_time;
991 int cnt;
992 int reccnt;
993 struct object_id *oid;
994 int found_it;
995
996 struct object_id ooid;
997 struct object_id noid;
998 int tz;
999 timestamp_t date;
1000 char **msg;
1001 timestamp_t *cutoff_time;
1002 int *cutoff_tz;
1003 int *cutoff_cnt;
1004 };
1005
1006 static void set_read_ref_cutoffs(struct read_ref_at_cb *cb,
1007 timestamp_t timestamp, int tz, const char *message)
1008 {
1009 if (cb->msg)
1010 *cb->msg = xstrdup(message);
1011 if (cb->cutoff_time)
1012 *cb->cutoff_time = timestamp;
1013 if (cb->cutoff_tz)
1014 *cb->cutoff_tz = tz;
1015 if (cb->cutoff_cnt)
1016 *cb->cutoff_cnt = cb->reccnt;
1017 }
1018
1019 static int read_ref_at_ent(struct object_id *ooid, struct object_id *noid,
1020 const char *email UNUSED,
1021 timestamp_t timestamp, int tz,
1022 const char *message, void *cb_data)
1023 {
1024 struct read_ref_at_cb *cb = cb_data;
1025 int reached_count;
1026
1027 cb->tz = tz;
1028 cb->date = timestamp;
1029
1030 /*
1031 * It is not possible for cb->cnt == 0 on the first iteration because
1032 * that special case is handled in read_ref_at().
1033 */
1034 if (cb->cnt > 0)
1035 cb->cnt--;
1036 reached_count = cb->cnt == 0 && !is_null_oid(ooid);
1037 if (timestamp <= cb->at_time || reached_count) {
1038 set_read_ref_cutoffs(cb, timestamp, tz, message);
1039 /*
1040 * we have not yet updated cb->[n|o]oid so they still
1041 * hold the values for the previous record.
1042 */
1043 if (!is_null_oid(&cb->ooid) && !oideq(&cb->ooid, noid))
1044 warning(_("log for ref %s has gap after %s"),
1045 cb->refname, show_date(cb->date, cb->tz, DATE_MODE(RFC2822)));
1046 if (reached_count)
1047 oidcpy(cb->oid, ooid);
1048 else if (!is_null_oid(&cb->ooid) || cb->date == cb->at_time)
1049 oidcpy(cb->oid, noid);
1050 else if (!oideq(noid, cb->oid))
1051 warning(_("log for ref %s unexpectedly ended on %s"),
1052 cb->refname, show_date(cb->date, cb->tz,
1053 DATE_MODE(RFC2822)));
1054 cb->found_it = 1;
1055 }
1056 cb->reccnt++;
1057 oidcpy(&cb->ooid, ooid);
1058 oidcpy(&cb->noid, noid);
1059 return cb->found_it;
1060 }
1061
1062 static int read_ref_at_ent_newest(struct object_id *ooid UNUSED,
1063 struct object_id *noid,
1064 const char *email UNUSED,
1065 timestamp_t timestamp, int tz,
1066 const char *message, void *cb_data)
1067 {
1068 struct read_ref_at_cb *cb = cb_data;
1069
1070 set_read_ref_cutoffs(cb, timestamp, tz, message);
1071 oidcpy(cb->oid, noid);
1072 /* We just want the first entry */
1073 return 1;
1074 }
1075
1076 static int read_ref_at_ent_oldest(struct object_id *ooid, struct object_id *noid,
1077 const char *email UNUSED,
1078 timestamp_t timestamp, int tz,
1079 const char *message, void *cb_data)
1080 {
1081 struct read_ref_at_cb *cb = cb_data;
1082
1083 set_read_ref_cutoffs(cb, timestamp, tz, message);
1084 oidcpy(cb->oid, ooid);
1085 if (is_null_oid(cb->oid))
1086 oidcpy(cb->oid, noid);
1087 /* We just want the first entry */
1088 return 1;
1089 }
1090
1091 int read_ref_at(struct ref_store *refs, const char *refname,
1092 unsigned int flags, timestamp_t at_time, int cnt,
1093 struct object_id *oid, char **msg,
1094 timestamp_t *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
1095 {
1096 struct read_ref_at_cb cb;
1097
1098 memset(&cb, 0, sizeof(cb));
1099 cb.refname = refname;
1100 cb.at_time = at_time;
1101 cb.cnt = cnt;
1102 cb.msg = msg;
1103 cb.cutoff_time = cutoff_time;
1104 cb.cutoff_tz = cutoff_tz;
1105 cb.cutoff_cnt = cutoff_cnt;
1106 cb.oid = oid;
1107
1108 if (cb.cnt == 0) {
1109 refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent_newest, &cb);
1110 return 0;
1111 }
1112
1113 refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent, &cb);
1114
1115 if (!cb.reccnt) {
1116 if (flags & GET_OID_QUIETLY)
1117 exit(128);
1118 else
1119 die(_("log for %s is empty"), refname);
1120 }
1121 if (cb.found_it)
1122 return 0;
1123
1124 refs_for_each_reflog_ent(refs, refname, read_ref_at_ent_oldest, &cb);
1125
1126 return 1;
1127 }
1128
1129 struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
1130 struct strbuf *err)
1131 {
1132 struct ref_transaction *tr;
1133 assert(err);
1134
1135 CALLOC_ARRAY(tr, 1);
1136 tr->ref_store = refs;
1137 return tr;
1138 }
1139
1140 struct ref_transaction *ref_transaction_begin(struct strbuf *err)
1141 {
1142 return ref_store_transaction_begin(get_main_ref_store(the_repository), err);
1143 }
1144
1145 void ref_transaction_free(struct ref_transaction *transaction)
1146 {
1147 size_t i;
1148
1149 if (!transaction)
1150 return;
1151
1152 switch (transaction->state) {
1153 case REF_TRANSACTION_OPEN:
1154 case REF_TRANSACTION_CLOSED:
1155 /* OK */
1156 break;
1157 case REF_TRANSACTION_PREPARED:
1158 BUG("free called on a prepared reference transaction");
1159 break;
1160 default:
1161 BUG("unexpected reference transaction state");
1162 break;
1163 }
1164
1165 for (i = 0; i < transaction->nr; i++) {
1166 free(transaction->updates[i]->msg);
1167 free(transaction->updates[i]);
1168 }
1169 free(transaction->updates);
1170 free(transaction);
1171 }
1172
1173 struct ref_update *ref_transaction_add_update(
1174 struct ref_transaction *transaction,
1175 const char *refname, unsigned int flags,
1176 const struct object_id *new_oid,
1177 const struct object_id *old_oid,
1178 const char *msg)
1179 {
1180 struct ref_update *update;
1181
1182 if (transaction->state != REF_TRANSACTION_OPEN)
1183 BUG("update called for transaction that is not open");
1184
1185 FLEX_ALLOC_STR(update, refname, refname);
1186 ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
1187 transaction->updates[transaction->nr++] = update;
1188
1189 update->flags = flags;
1190
1191 if (flags & REF_HAVE_NEW)
1192 oidcpy(&update->new_oid, new_oid);
1193 if (flags & REF_HAVE_OLD)
1194 oidcpy(&update->old_oid, old_oid);
1195 update->msg = normalize_reflog_message(msg);
1196 return update;
1197 }
1198
1199 int ref_transaction_update(struct ref_transaction *transaction,
1200 const char *refname,
1201 const struct object_id *new_oid,
1202 const struct object_id *old_oid,
1203 unsigned int flags, const char *msg,
1204 struct strbuf *err)
1205 {
1206 assert(err);
1207
1208 if (!(flags & REF_SKIP_REFNAME_VERIFICATION) &&
1209 ((new_oid && !is_null_oid(new_oid)) ?
1210 check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
1211 !refname_is_safe(refname))) {
1212 strbuf_addf(err, _("refusing to update ref with bad name '%s'"),
1213 refname);
1214 return -1;
1215 }
1216
1217 if (flags & ~REF_TRANSACTION_UPDATE_ALLOWED_FLAGS)
1218 BUG("illegal flags 0x%x passed to ref_transaction_update()", flags);
1219
1220 /*
1221 * Clear flags outside the allowed set; this should be a noop because
1222 * of the BUG() check above, but it works around a -Wnonnull warning
1223 * with some versions of "gcc -O3".
1224 */
1225 flags &= REF_TRANSACTION_UPDATE_ALLOWED_FLAGS;
1226
1227 flags |= (new_oid ? REF_HAVE_NEW : 0) | (old_oid ? REF_HAVE_OLD : 0);
1228
1229 ref_transaction_add_update(transaction, refname, flags,
1230 new_oid, old_oid, msg);
1231 return 0;
1232 }
1233
1234 int ref_transaction_create(struct ref_transaction *transaction,
1235 const char *refname,
1236 const struct object_id *new_oid,
1237 unsigned int flags, const char *msg,
1238 struct strbuf *err)
1239 {
1240 if (!new_oid || is_null_oid(new_oid)) {
1241 strbuf_addf(err, "'%s' has a null OID", refname);
1242 return 1;
1243 }
1244 return ref_transaction_update(transaction, refname, new_oid,
1245 null_oid(), flags, msg, err);
1246 }
1247
1248 int ref_transaction_delete(struct ref_transaction *transaction,
1249 const char *refname,
1250 const struct object_id *old_oid,
1251 unsigned int flags, const char *msg,
1252 struct strbuf *err)
1253 {
1254 if (old_oid && is_null_oid(old_oid))
1255 BUG("delete called with old_oid set to zeros");
1256 return ref_transaction_update(transaction, refname,
1257 null_oid(), old_oid,
1258 flags, msg, err);
1259 }
1260
1261 int ref_transaction_verify(struct ref_transaction *transaction,
1262 const char *refname,
1263 const struct object_id *old_oid,
1264 unsigned int flags,
1265 struct strbuf *err)
1266 {
1267 if (!old_oid)
1268 BUG("verify called with old_oid set to NULL");
1269 return ref_transaction_update(transaction, refname,
1270 NULL, old_oid,
1271 flags, NULL, err);
1272 }
1273
1274 int refs_update_ref(struct ref_store *refs, const char *msg,
1275 const char *refname, const struct object_id *new_oid,
1276 const struct object_id *old_oid, unsigned int flags,
1277 enum action_on_err onerr)
1278 {
1279 struct ref_transaction *t = NULL;
1280 struct strbuf err = STRBUF_INIT;
1281 int ret = 0;
1282
1283 t = ref_store_transaction_begin(refs, &err);
1284 if (!t ||
1285 ref_transaction_update(t, refname, new_oid, old_oid, flags, msg,
1286 &err) ||
1287 ref_transaction_commit(t, &err)) {
1288 ret = 1;
1289 ref_transaction_free(t);
1290 }
1291 if (ret) {
1292 const char *str = _("update_ref failed for ref '%s': %s");
1293
1294 switch (onerr) {
1295 case UPDATE_REFS_MSG_ON_ERR:
1296 error(str, refname, err.buf);
1297 break;
1298 case UPDATE_REFS_DIE_ON_ERR:
1299 die(str, refname, err.buf);
1300 break;
1301 case UPDATE_REFS_QUIET_ON_ERR:
1302 break;
1303 }
1304 strbuf_release(&err);
1305 return 1;
1306 }
1307 strbuf_release(&err);
1308 if (t)
1309 ref_transaction_free(t);
1310 return 0;
1311 }
1312
1313 int update_ref(const char *msg, const char *refname,
1314 const struct object_id *new_oid,
1315 const struct object_id *old_oid,
1316 unsigned int flags, enum action_on_err onerr)
1317 {
1318 return refs_update_ref(get_main_ref_store(the_repository), msg, refname, new_oid,
1319 old_oid, flags, onerr);
1320 }
1321
1322 /*
1323 * Check that the string refname matches a rule of the form
1324 * "{prefix}%.*s{suffix}". So "foo/bar/baz" would match the rule
1325 * "foo/%.*s/baz", and return the string "bar".
1326 */
1327 static const char *match_parse_rule(const char *refname, const char *rule,
1328 size_t *len)
1329 {
1330 /*
1331 * Check that rule matches refname up to the first percent in the rule.
1332 * We can bail immediately if not, but otherwise we leave "rule" at the
1333 * %-placeholder, and "refname" at the start of the potential matched
1334 * name.
1335 */
1336 while (*rule != '%') {
1337 if (!*rule)
1338 BUG("rev-parse rule did not have percent");
1339 if (*refname++ != *rule++)
1340 return NULL;
1341 }
1342
1343 /*
1344 * Check that our "%" is the expected placeholder. This assumes there
1345 * are no other percents (placeholder or quoted) in the string, but
1346 * that is sufficient for our rev-parse rules.
1347 */
1348 if (!skip_prefix(rule, "%.*s", &rule))
1349 return NULL;
1350
1351 /*
1352 * And now check that our suffix (if any) matches.
1353 */
1354 if (!strip_suffix(refname, rule, len))
1355 return NULL;
1356
1357 return refname; /* len set by strip_suffix() */
1358 }
1359
1360 char *refs_shorten_unambiguous_ref(struct ref_store *refs,
1361 const char *refname, int strict)
1362 {
1363 int i;
1364 struct strbuf resolved_buf = STRBUF_INIT;
1365
1366 /* skip first rule, it will always match */
1367 for (i = NUM_REV_PARSE_RULES - 1; i > 0 ; --i) {
1368 int j;
1369 int rules_to_fail = i;
1370 const char *short_name;
1371 size_t short_name_len;
1372
1373 short_name = match_parse_rule(refname, ref_rev_parse_rules[i],
1374 &short_name_len);
1375 if (!short_name)
1376 continue;
1377
1378 /*
1379 * in strict mode, all (except the matched one) rules
1380 * must fail to resolve to a valid non-ambiguous ref
1381 */
1382 if (strict)
1383 rules_to_fail = NUM_REV_PARSE_RULES;
1384
1385 /*
1386 * check if the short name resolves to a valid ref,
1387 * but use only rules prior to the matched one
1388 */
1389 for (j = 0; j < rules_to_fail; j++) {
1390 const char *rule = ref_rev_parse_rules[j];
1391
1392 /* skip matched rule */
1393 if (i == j)
1394 continue;
1395
1396 /*
1397 * the short name is ambiguous, if it resolves
1398 * (with this previous rule) to a valid ref
1399 * read_ref() returns 0 on success
1400 */
1401 strbuf_reset(&resolved_buf);
1402 strbuf_addf(&resolved_buf, rule,
1403 cast_size_t_to_int(short_name_len),
1404 short_name);
1405 if (refs_ref_exists(refs, resolved_buf.buf))
1406 break;
1407 }
1408
1409 /*
1410 * short name is non-ambiguous if all previous rules
1411 * haven't resolved to a valid ref
1412 */
1413 if (j == rules_to_fail) {
1414 strbuf_release(&resolved_buf);
1415 return xmemdupz(short_name, short_name_len);
1416 }
1417 }
1418
1419 strbuf_release(&resolved_buf);
1420 return xstrdup(refname);
1421 }
1422
1423 char *shorten_unambiguous_ref(const char *refname, int strict)
1424 {
1425 return refs_shorten_unambiguous_ref(get_main_ref_store(the_repository),
1426 refname, strict);
1427 }
1428
1429 int parse_hide_refs_config(const char *var, const char *value, const char *section,
1430 struct strvec *hide_refs)
1431 {
1432 const char *key;
1433 if (!strcmp("transfer.hiderefs", var) ||
1434 (!parse_config_key(var, section, NULL, NULL, &key) &&
1435 !strcmp(key, "hiderefs"))) {
1436 char *ref;
1437 int len;
1438
1439 if (!value)
1440 return config_error_nonbool(var);
1441
1442 /* drop const to remove trailing '/' characters */
1443 ref = (char *)strvec_push(hide_refs, value);
1444 len = strlen(ref);
1445 while (len && ref[len - 1] == '/')
1446 ref[--len] = '\0';
1447 }
1448 return 0;
1449 }
1450
1451 int ref_is_hidden(const char *refname, const char *refname_full,
1452 const struct strvec *hide_refs)
1453 {
1454 int i;
1455
1456 for (i = hide_refs->nr - 1; i >= 0; i--) {
1457 const char *match = hide_refs->v[i];
1458 const char *subject;
1459 int neg = 0;
1460 const char *p;
1461
1462 if (*match == '!') {
1463 neg = 1;
1464 match++;
1465 }
1466
1467 if (*match == '^') {
1468 subject = refname_full;
1469 match++;
1470 } else {
1471 subject = refname;
1472 }
1473
1474 /* refname can be NULL when namespaces are used. */
1475 if (subject &&
1476 skip_prefix(subject, match, &p) &&
1477 (!*p || *p == '/'))
1478 return !neg;
1479 }
1480 return 0;
1481 }
1482
1483 const char **hidden_refs_to_excludes(const struct strvec *hide_refs)
1484 {
1485 const char **pattern;
1486 for (pattern = hide_refs->v; *pattern; pattern++) {
1487 /*
1488 * We can't feed any excludes from hidden refs config
1489 * sections, since later rules may override previous
1490 * ones. For example, with rules "refs/foo" and
1491 * "!refs/foo/bar", we should show "refs/foo/bar" (and
1492 * everything underneath it), but the earlier exclusion
1493 * would cause us to skip all of "refs/foo". We
1494 * likewise don't implement the namespace stripping
1495 * required for '^' rules.
1496 *
1497 * Both are possible to do, but complicated, so avoid
1498 * populating the jump list at all if we see either of
1499 * these patterns.
1500 */
1501 if (**pattern == '!' || **pattern == '^')
1502 return NULL;
1503 }
1504 return hide_refs->v;
1505 }
1506
1507 const char *find_descendant_ref(const char *dirname,
1508 const struct string_list *extras,
1509 const struct string_list *skip)
1510 {
1511 int pos;
1512
1513 if (!extras)
1514 return NULL;
1515
1516 /*
1517 * Look at the place where dirname would be inserted into
1518 * extras. If there is an entry at that position that starts
1519 * with dirname (remember, dirname includes the trailing
1520 * slash) and is not in skip, then we have a conflict.
1521 */
1522 for (pos = string_list_find_insert_index(extras, dirname, 0);
1523 pos < extras->nr; pos++) {
1524 const char *extra_refname = extras->items[pos].string;
1525
1526 if (!starts_with(extra_refname, dirname))
1527 break;
1528
1529 if (!skip || !string_list_has_string(skip, extra_refname))
1530 return extra_refname;
1531 }
1532 return NULL;
1533 }
1534
1535 int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1536 {
1537 struct object_id oid;
1538 int flag;
1539
1540 if (refs_resolve_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING,
1541 &oid, &flag))
1542 return fn("HEAD", &oid, flag, cb_data);
1543
1544 return 0;
1545 }
1546
1547 int head_ref(each_ref_fn fn, void *cb_data)
1548 {
1549 return refs_head_ref(get_main_ref_store(the_repository), fn, cb_data);
1550 }
1551
1552 struct ref_iterator *refs_ref_iterator_begin(
1553 struct ref_store *refs,
1554 const char *prefix,
1555 const char **exclude_patterns,
1556 int trim,
1557 enum do_for_each_ref_flags flags)
1558 {
1559 struct ref_iterator *iter;
1560
1561 if (!(flags & DO_FOR_EACH_INCLUDE_BROKEN)) {
1562 static int ref_paranoia = -1;
1563
1564 if (ref_paranoia < 0)
1565 ref_paranoia = git_env_bool("GIT_REF_PARANOIA", 1);
1566 if (ref_paranoia) {
1567 flags |= DO_FOR_EACH_INCLUDE_BROKEN;
1568 flags |= DO_FOR_EACH_OMIT_DANGLING_SYMREFS;
1569 }
1570 }
1571
1572 iter = refs->be->iterator_begin(refs, prefix, exclude_patterns, flags);
1573 /*
1574 * `iterator_begin()` already takes care of prefix, but we
1575 * might need to do some trimming:
1576 */
1577 if (trim)
1578 iter = prefix_ref_iterator_begin(iter, "", trim);
1579
1580 /* Sanity check for subclasses: */
1581 if (!iter->ordered)
1582 BUG("reference iterator is not ordered");
1583
1584 return iter;
1585 }
1586
1587 /*
1588 * Call fn for each reference in the specified submodule for which the
1589 * refname begins with prefix. If trim is non-zero, then trim that
1590 * many characters off the beginning of each refname before passing
1591 * the refname to fn. flags can be DO_FOR_EACH_INCLUDE_BROKEN to
1592 * include broken references in the iteration. If fn ever returns a
1593 * non-zero value, stop the iteration and return that value;
1594 * otherwise, return 0.
1595 */
1596 static int do_for_each_repo_ref(struct repository *r, const char *prefix,
1597 each_repo_ref_fn fn, int trim, int flags,
1598 void *cb_data)
1599 {
1600 struct ref_iterator *iter;
1601 struct ref_store *refs = get_main_ref_store(r);
1602
1603 if (!refs)
1604 return 0;
1605
1606 iter = refs_ref_iterator_begin(refs, prefix, NULL, trim, flags);
1607
1608 return do_for_each_repo_ref_iterator(r, iter, fn, cb_data);
1609 }
1610
1611 struct do_for_each_ref_help {
1612 each_ref_fn *fn;
1613 void *cb_data;
1614 };
1615
1616 static int do_for_each_ref_helper(struct repository *r UNUSED,
1617 const char *refname,
1618 const struct object_id *oid,
1619 int flags,
1620 void *cb_data)
1621 {
1622 struct do_for_each_ref_help *hp = cb_data;
1623
1624 return hp->fn(refname, oid, flags, hp->cb_data);
1625 }
1626
1627 static int do_for_each_ref(struct ref_store *refs, const char *prefix,
1628 const char **exclude_patterns,
1629 each_ref_fn fn, int trim,
1630 enum do_for_each_ref_flags flags, void *cb_data)
1631 {
1632 struct ref_iterator *iter;
1633 struct do_for_each_ref_help hp = { fn, cb_data };
1634
1635 if (!refs)
1636 return 0;
1637
1638 iter = refs_ref_iterator_begin(refs, prefix, exclude_patterns, trim,
1639 flags);
1640
1641 return do_for_each_repo_ref_iterator(the_repository, iter,
1642 do_for_each_ref_helper, &hp);
1643 }
1644
1645 int refs_for_each_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1646 {
1647 return do_for_each_ref(refs, "", NULL, fn, 0, 0, cb_data);
1648 }
1649
1650 int for_each_ref(each_ref_fn fn, void *cb_data)
1651 {
1652 return refs_for_each_ref(get_main_ref_store(the_repository), fn, cb_data);
1653 }
1654
1655 int refs_for_each_ref_in(struct ref_store *refs, const char *prefix,
1656 each_ref_fn fn, void *cb_data)
1657 {
1658 return do_for_each_ref(refs, prefix, NULL, fn, strlen(prefix), 0, cb_data);
1659 }
1660
1661 int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data)
1662 {
1663 return refs_for_each_ref_in(get_main_ref_store(the_repository), prefix, fn, cb_data);
1664 }
1665
1666 int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data)
1667 {
1668 return do_for_each_ref(get_main_ref_store(the_repository),
1669 prefix, NULL, fn, 0, 0, cb_data);
1670 }
1671
1672 int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix,
1673 const char **exclude_patterns,
1674 each_ref_fn fn, void *cb_data)
1675 {
1676 return do_for_each_ref(refs, prefix, exclude_patterns, fn, 0, 0, cb_data);
1677 }
1678
1679 int for_each_replace_ref(struct repository *r, each_repo_ref_fn fn, void *cb_data)
1680 {
1681 const char *git_replace_ref_base = ref_namespace[NAMESPACE_REPLACE].ref;
1682 return do_for_each_repo_ref(r, git_replace_ref_base, fn,
1683 strlen(git_replace_ref_base),
1684 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1685 }
1686
1687 int for_each_namespaced_ref(const char **exclude_patterns,
1688 each_ref_fn fn, void *cb_data)
1689 {
1690 struct strbuf buf = STRBUF_INIT;
1691 int ret;
1692 strbuf_addf(&buf, "%srefs/", get_git_namespace());
1693 ret = do_for_each_ref(get_main_ref_store(the_repository),
1694 buf.buf, exclude_patterns, fn, 0, 0, cb_data);
1695 strbuf_release(&buf);
1696 return ret;
1697 }
1698
1699 int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1700 {
1701 return do_for_each_ref(refs, "", NULL, fn, 0,
1702 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1703 }
1704
1705 int for_each_rawref(each_ref_fn fn, void *cb_data)
1706 {
1707 return refs_for_each_rawref(get_main_ref_store(the_repository), fn, cb_data);
1708 }
1709
1710 static int qsort_strcmp(const void *va, const void *vb)
1711 {
1712 const char *a = *(const char **)va;
1713 const char *b = *(const char **)vb;
1714
1715 return strcmp(a, b);
1716 }
1717
1718 static void find_longest_prefixes_1(struct string_list *out,
1719 struct strbuf *prefix,
1720 const char **patterns, size_t nr)
1721 {
1722 size_t i;
1723
1724 for (i = 0; i < nr; i++) {
1725 char c = patterns[i][prefix->len];
1726 if (!c || is_glob_special(c)) {
1727 string_list_append(out, prefix->buf);
1728 return;
1729 }
1730 }
1731
1732 i = 0;
1733 while (i < nr) {
1734 size_t end;
1735
1736 /*
1737 * Set "end" to the index of the element _after_ the last one
1738 * in our group.
1739 */
1740 for (end = i + 1; end < nr; end++) {
1741 if (patterns[i][prefix->len] != patterns[end][prefix->len])
1742 break;
1743 }
1744
1745 strbuf_addch(prefix, patterns[i][prefix->len]);
1746 find_longest_prefixes_1(out, prefix, patterns + i, end - i);
1747 strbuf_setlen(prefix, prefix->len - 1);
1748
1749 i = end;
1750 }
1751 }
1752
1753 static void find_longest_prefixes(struct string_list *out,
1754 const char **patterns)
1755 {
1756 struct strvec sorted = STRVEC_INIT;
1757 struct strbuf prefix = STRBUF_INIT;
1758
1759 strvec_pushv(&sorted, patterns);
1760 QSORT(sorted.v, sorted.nr, qsort_strcmp);
1761
1762 find_longest_prefixes_1(out, &prefix, sorted.v, sorted.nr);
1763
1764 strvec_clear(&sorted);
1765 strbuf_release(&prefix);
1766 }
1767
1768 int refs_for_each_fullref_in_prefixes(struct ref_store *ref_store,
1769 const char *namespace,
1770 const char **patterns,
1771 const char **exclude_patterns,
1772 each_ref_fn fn, void *cb_data)
1773 {
1774 struct string_list prefixes = STRING_LIST_INIT_DUP;
1775 struct string_list_item *prefix;
1776 struct strbuf buf = STRBUF_INIT;
1777 int ret = 0, namespace_len;
1778
1779 find_longest_prefixes(&prefixes, patterns);
1780
1781 if (namespace)
1782 strbuf_addstr(&buf, namespace);
1783 namespace_len = buf.len;
1784
1785 for_each_string_list_item(prefix, &prefixes) {
1786 strbuf_addstr(&buf, prefix->string);
1787 ret = refs_for_each_fullref_in(ref_store, buf.buf,
1788 exclude_patterns, fn, cb_data);
1789 if (ret)
1790 break;
1791 strbuf_setlen(&buf, namespace_len);
1792 }
1793
1794 string_list_clear(&prefixes, 0);
1795 strbuf_release(&buf);
1796 return ret;
1797 }
1798
1799 static int refs_read_special_head(struct ref_store *ref_store,
1800 const char *refname, struct object_id *oid,
1801 struct strbuf *referent, unsigned int *type,
1802 int *failure_errno)
1803 {
1804 struct strbuf full_path = STRBUF_INIT;
1805 struct strbuf content = STRBUF_INIT;
1806 int result = -1;
1807 strbuf_addf(&full_path, "%s/%s", ref_store->gitdir, refname);
1808
1809 if (strbuf_read_file(&content, full_path.buf, 0) < 0) {
1810 *failure_errno = errno;
1811 goto done;
1812 }
1813
1814 result = parse_loose_ref_contents(content.buf, oid, referent, type,
1815 failure_errno);
1816
1817 done:
1818 strbuf_release(&full_path);
1819 strbuf_release(&content);
1820 return result;
1821 }
1822
1823 static int is_special_ref(const char *refname)
1824 {
1825 /*
1826 * Special references get written and read directly via the filesystem
1827 * by the subsystems that create them. Thus, they must not go through
1828 * the reference backend but must instead be read directly. It is
1829 * arguable whether this behaviour is sensible, or whether it's simply
1830 * a leaky abstraction enabled by us only having a single reference
1831 * backend implementation. But at least for a subset of references it
1832 * indeed does make sense to treat them specially:
1833 *
1834 * - FETCH_HEAD may contain multiple object IDs, and each one of them
1835 * carries additional metadata like where it came from.
1836 *
1837 * - MERGE_HEAD may contain multiple object IDs when merging multiple
1838 * heads.
1839 *
1840 * There are some exceptions that you might expect to see on this list
1841 * but which are handled exclusively via the reference backend:
1842 *
1843 * - BISECT_EXPECTED_REV
1844 *
1845 * - CHERRY_PICK_HEAD
1846 *
1847 * - HEAD
1848 *
1849 * - ORIG_HEAD
1850 *
1851 * - "rebase-apply/" and "rebase-merge/" contain all of the state for
1852 * rebases, including some reference-like files. These are
1853 * exclusively read and written via the filesystem and never go
1854 * through the refdb.
1855 *
1856 * Writing or deleting references must consistently go either through
1857 * the filesystem (special refs) or through the reference backend
1858 * (normal ones).
1859 */
1860 static const char * const special_refs[] = {
1861 "AUTO_MERGE",
1862 "FETCH_HEAD",
1863 "MERGE_AUTOSTASH",
1864 "MERGE_HEAD",
1865 };
1866 size_t i;
1867
1868 for (i = 0; i < ARRAY_SIZE(special_refs); i++)
1869 if (!strcmp(refname, special_refs[i]))
1870 return 1;
1871
1872 return 0;
1873 }
1874
1875 int refs_read_raw_ref(struct ref_store *ref_store, const char *refname,
1876 struct object_id *oid, struct strbuf *referent,
1877 unsigned int *type, int *failure_errno)
1878 {
1879 assert(failure_errno);
1880 if (is_special_ref(refname))
1881 return refs_read_special_head(ref_store, refname, oid, referent,
1882 type, failure_errno);
1883
1884 return ref_store->be->read_raw_ref(ref_store, refname, oid, referent,
1885 type, failure_errno);
1886 }
1887
1888 int refs_read_symbolic_ref(struct ref_store *ref_store, const char *refname,
1889 struct strbuf *referent)
1890 {
1891 return ref_store->be->read_symbolic_ref(ref_store, refname, referent);
1892 }
1893
1894 const char *refs_resolve_ref_unsafe(struct ref_store *refs,
1895 const char *refname,
1896 int resolve_flags,
1897 struct object_id *oid,
1898 int *flags)
1899 {
1900 static struct strbuf sb_refname = STRBUF_INIT;
1901 struct object_id unused_oid;
1902 int unused_flags;
1903 int symref_count;
1904
1905 if (!oid)
1906 oid = &unused_oid;
1907 if (!flags)
1908 flags = &unused_flags;
1909
1910 *flags = 0;
1911
1912 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1913 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1914 !refname_is_safe(refname))
1915 return NULL;
1916
1917 /*
1918 * repo_dwim_ref() uses REF_ISBROKEN to distinguish between
1919 * missing refs and refs that were present but invalid,
1920 * to complain about the latter to stderr.
1921 *
1922 * We don't know whether the ref exists, so don't set
1923 * REF_ISBROKEN yet.
1924 */
1925 *flags |= REF_BAD_NAME;
1926 }
1927
1928 for (symref_count = 0; symref_count < SYMREF_MAXDEPTH; symref_count++) {
1929 unsigned int read_flags = 0;
1930 int failure_errno;
1931
1932 if (refs_read_raw_ref(refs, refname, oid, &sb_refname,
1933 &read_flags, &failure_errno)) {
1934 *flags |= read_flags;
1935
1936 /* In reading mode, refs must eventually resolve */
1937 if (resolve_flags & RESOLVE_REF_READING)
1938 return NULL;
1939
1940 /*
1941 * Otherwise a missing ref is OK. But the files backend
1942 * may show errors besides ENOENT if there are
1943 * similarly-named refs.
1944 */
1945 if (failure_errno != ENOENT &&
1946 failure_errno != EISDIR &&
1947 failure_errno != ENOTDIR)
1948 return NULL;
1949
1950 oidclr(oid);
1951 if (*flags & REF_BAD_NAME)
1952 *flags |= REF_ISBROKEN;
1953 return refname;
1954 }
1955
1956 *flags |= read_flags;
1957
1958 if (!(read_flags & REF_ISSYMREF)) {
1959 if (*flags & REF_BAD_NAME) {
1960 oidclr(oid);
1961 *flags |= REF_ISBROKEN;
1962 }
1963 return refname;
1964 }
1965
1966 refname = sb_refname.buf;
1967 if (resolve_flags & RESOLVE_REF_NO_RECURSE) {
1968 oidclr(oid);
1969 return refname;
1970 }
1971 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1972 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1973 !refname_is_safe(refname))
1974 return NULL;
1975
1976 *flags |= REF_ISBROKEN | REF_BAD_NAME;
1977 }
1978 }
1979
1980 return NULL;
1981 }
1982
1983 /* backend functions */
1984 int refs_init_db(struct strbuf *err)
1985 {
1986 struct ref_store *refs = get_main_ref_store(the_repository);
1987
1988 return refs->be->init_db(refs, err);
1989 }
1990
1991 const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
1992 struct object_id *oid, int *flags)
1993 {
1994 return refs_resolve_ref_unsafe(get_main_ref_store(the_repository), refname,
1995 resolve_flags, oid, flags);
1996 }
1997
1998 int resolve_gitlink_ref(const char *submodule, const char *refname,
1999 struct object_id *oid)
2000 {
2001 struct ref_store *refs;
2002 int flags;
2003
2004 refs = get_submodule_ref_store(submodule);
2005
2006 if (!refs)
2007 return -1;
2008
2009 if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &flags) ||
2010 is_null_oid(oid))
2011 return -1;
2012 return 0;
2013 }
2014
2015 struct ref_store_hash_entry
2016 {
2017 struct hashmap_entry ent;
2018
2019 struct ref_store *refs;
2020
2021 /* NUL-terminated identifier of the ref store: */
2022 char name[FLEX_ARRAY];
2023 };
2024
2025 static int ref_store_hash_cmp(const void *cmp_data UNUSED,
2026 const struct hashmap_entry *eptr,
2027 const struct hashmap_entry *entry_or_key,
2028 const void *keydata)
2029 {
2030 const struct ref_store_hash_entry *e1, *e2;
2031 const char *name;
2032
2033 e1 = container_of(eptr, const struct ref_store_hash_entry, ent);
2034 e2 = container_of(entry_or_key, const struct ref_store_hash_entry, ent);
2035 name = keydata ? keydata : e2->name;
2036
2037 return strcmp(e1->name, name);
2038 }
2039
2040 static struct ref_store_hash_entry *alloc_ref_store_hash_entry(
2041 const char *name, struct ref_store *refs)
2042 {
2043 struct ref_store_hash_entry *entry;
2044
2045 FLEX_ALLOC_STR(entry, name, name);
2046 hashmap_entry_init(&entry->ent, strhash(name));
2047 entry->refs = refs;
2048 return entry;
2049 }
2050
2051 /* A hashmap of ref_stores, stored by submodule name: */
2052 static struct hashmap submodule_ref_stores;
2053
2054 /* A hashmap of ref_stores, stored by worktree id: */
2055 static struct hashmap worktree_ref_stores;
2056
2057 /*
2058 * Look up a ref store by name. If that ref_store hasn't been
2059 * registered yet, return NULL.
2060 */
2061 static struct ref_store *lookup_ref_store_map(struct hashmap *map,
2062 const char *name)
2063 {
2064 struct ref_store_hash_entry *entry;
2065 unsigned int hash;
2066
2067 if (!map->tablesize)
2068 /* It's initialized on demand in register_ref_store(). */
2069 return NULL;
2070
2071 hash = strhash(name);
2072 entry = hashmap_get_entry_from_hash(map, hash, name,
2073 struct ref_store_hash_entry, ent);
2074 return entry ? entry->refs : NULL;
2075 }
2076
2077 /*
2078 * Create, record, and return a ref_store instance for the specified
2079 * gitdir.
2080 */
2081 static struct ref_store *ref_store_init(struct repository *repo,
2082 const char *gitdir,
2083 unsigned int flags)
2084 {
2085 const char *be_name = "files";
2086 struct ref_storage_be *be = find_ref_storage_backend(be_name);
2087 struct ref_store *refs;
2088
2089 if (!be)
2090 BUG("reference backend %s is unknown", be_name);
2091
2092 refs = be->init(repo, gitdir, flags);
2093 return refs;
2094 }
2095
2096 struct ref_store *get_main_ref_store(struct repository *r)
2097 {
2098 if (r->refs_private)
2099 return r->refs_private;
2100
2101 if (!r->gitdir)
2102 BUG("attempting to get main_ref_store outside of repository");
2103
2104 r->refs_private = ref_store_init(r, r->gitdir, REF_STORE_ALL_CAPS);
2105 r->refs_private = maybe_debug_wrap_ref_store(r->gitdir, r->refs_private);
2106 return r->refs_private;
2107 }
2108
2109 /*
2110 * Associate a ref store with a name. It is a fatal error to call this
2111 * function twice for the same name.
2112 */
2113 static void register_ref_store_map(struct hashmap *map,
2114 const char *type,
2115 struct ref_store *refs,
2116 const char *name)
2117 {
2118 struct ref_store_hash_entry *entry;
2119
2120 if (!map->tablesize)
2121 hashmap_init(map, ref_store_hash_cmp, NULL, 0);
2122
2123 entry = alloc_ref_store_hash_entry(name, refs);
2124 if (hashmap_put(map, &entry->ent))
2125 BUG("%s ref_store '%s' initialized twice", type, name);
2126 }
2127
2128 struct ref_store *get_submodule_ref_store(const char *submodule)
2129 {
2130 struct strbuf submodule_sb = STRBUF_INIT;
2131 struct ref_store *refs;
2132 char *to_free = NULL;
2133 size_t len;
2134 struct repository *subrepo;
2135
2136 if (!submodule)
2137 return NULL;
2138
2139 len = strlen(submodule);
2140 while (len && is_dir_sep(submodule[len - 1]))
2141 len--;
2142 if (!len)
2143 return NULL;
2144
2145 if (submodule[len])
2146 /* We need to strip off one or more trailing slashes */
2147 submodule = to_free = xmemdupz(submodule, len);
2148
2149 refs = lookup_ref_store_map(&submodule_ref_stores, submodule);
2150 if (refs)
2151 goto done;
2152
2153 strbuf_addstr(&submodule_sb, submodule);
2154 if (!is_nonbare_repository_dir(&submodule_sb))
2155 goto done;
2156
2157 if (submodule_to_gitdir(&submodule_sb, submodule))
2158 goto done;
2159
2160 subrepo = xmalloc(sizeof(*subrepo));
2161 /*
2162 * NEEDSWORK: Make get_submodule_ref_store() work with arbitrary
2163 * superprojects other than the_repository. This probably should be
2164 * done by making it take a struct repository * parameter instead of a
2165 * submodule path.
2166 */
2167 if (repo_submodule_init(subrepo, the_repository, submodule,
2168 null_oid())) {
2169 free(subrepo);
2170 goto done;
2171 }
2172 refs = ref_store_init(subrepo, submodule_sb.buf,
2173 REF_STORE_READ | REF_STORE_ODB);
2174 register_ref_store_map(&submodule_ref_stores, "submodule",
2175 refs, submodule);
2176
2177 done:
2178 strbuf_release(&submodule_sb);
2179 free(to_free);
2180
2181 return refs;
2182 }
2183
2184 struct ref_store *get_worktree_ref_store(const struct worktree *wt)
2185 {
2186 struct ref_store *refs;
2187 const char *id;
2188
2189 if (wt->is_current)
2190 return get_main_ref_store(the_repository);
2191
2192 id = wt->id ? wt->id : "/";
2193 refs = lookup_ref_store_map(&worktree_ref_stores, id);
2194 if (refs)
2195 return refs;
2196
2197 if (wt->id)
2198 refs = ref_store_init(the_repository,
2199 git_common_path("worktrees/%s", wt->id),
2200 REF_STORE_ALL_CAPS);
2201 else
2202 refs = ref_store_init(the_repository,
2203 get_git_common_dir(),
2204 REF_STORE_ALL_CAPS);
2205
2206 if (refs)
2207 register_ref_store_map(&worktree_ref_stores, "worktree",
2208 refs, id);
2209 return refs;
2210 }
2211
2212 void base_ref_store_init(struct ref_store *refs, struct repository *repo,
2213 const char *path, const struct ref_storage_be *be)
2214 {
2215 refs->be = be;
2216 refs->repo = repo;
2217 refs->gitdir = xstrdup(path);
2218 }
2219
2220 /* backend functions */
2221 int refs_pack_refs(struct ref_store *refs, struct pack_refs_opts *opts)
2222 {
2223 return refs->be->pack_refs(refs, opts);
2224 }
2225
2226 int peel_iterated_oid(const struct object_id *base, struct object_id *peeled)
2227 {
2228 if (current_ref_iter &&
2229 (current_ref_iter->oid == base ||
2230 oideq(current_ref_iter->oid, base)))
2231 return ref_iterator_peel(current_ref_iter, peeled);
2232
2233 return peel_object(base, peeled) ? -1 : 0;
2234 }
2235
2236 int refs_create_symref(struct ref_store *refs,
2237 const char *ref_target,
2238 const char *refs_heads_master,
2239 const char *logmsg)
2240 {
2241 char *msg;
2242 int retval;
2243
2244 msg = normalize_reflog_message(logmsg);
2245 retval = refs->be->create_symref(refs, ref_target, refs_heads_master,
2246 msg);
2247 free(msg);
2248 return retval;
2249 }
2250
2251 int create_symref(const char *ref_target, const char *refs_heads_master,
2252 const char *logmsg)
2253 {
2254 return refs_create_symref(get_main_ref_store(the_repository), ref_target,
2255 refs_heads_master, logmsg);
2256 }
2257
2258 int ref_update_reject_duplicates(struct string_list *refnames,
2259 struct strbuf *err)
2260 {
2261 size_t i, n = refnames->nr;
2262
2263 assert(err);
2264
2265 for (i = 1; i < n; i++) {
2266 int cmp = strcmp(refnames->items[i - 1].string,
2267 refnames->items[i].string);
2268
2269 if (!cmp) {
2270 strbuf_addf(err,
2271 _("multiple updates for ref '%s' not allowed"),
2272 refnames->items[i].string);
2273 return 1;
2274 } else if (cmp > 0) {
2275 BUG("ref_update_reject_duplicates() received unsorted list");
2276 }
2277 }
2278 return 0;
2279 }
2280
2281 static int run_transaction_hook(struct ref_transaction *transaction,
2282 const char *state)
2283 {
2284 struct child_process proc = CHILD_PROCESS_INIT;
2285 struct strbuf buf = STRBUF_INIT;
2286 const char *hook;
2287 int ret = 0, i;
2288
2289 hook = find_hook("reference-transaction");
2290 if (!hook)
2291 return ret;
2292
2293 strvec_pushl(&proc.args, hook, state, NULL);
2294 proc.in = -1;
2295 proc.stdout_to_stderr = 1;
2296 proc.trace2_hook_name = "reference-transaction";
2297
2298 ret = start_command(&proc);
2299 if (ret)
2300 return ret;
2301
2302 sigchain_push(SIGPIPE, SIG_IGN);
2303
2304 for (i = 0; i < transaction->nr; i++) {
2305 struct ref_update *update = transaction->updates[i];
2306
2307 strbuf_reset(&buf);
2308 strbuf_addf(&buf, "%s %s %s\n",
2309 oid_to_hex(&update->old_oid),
2310 oid_to_hex(&update->new_oid),
2311 update->refname);
2312
2313 if (write_in_full(proc.in, buf.buf, buf.len) < 0) {
2314 if (errno != EPIPE) {
2315 /* Don't leak errno outside this API */
2316 errno = 0;
2317 ret = -1;
2318 }
2319 break;
2320 }
2321 }
2322
2323 close(proc.in);
2324 sigchain_pop(SIGPIPE);
2325 strbuf_release(&buf);
2326
2327 ret |= finish_command(&proc);
2328 return ret;
2329 }
2330
2331 int ref_transaction_prepare(struct ref_transaction *transaction,
2332 struct strbuf *err)
2333 {
2334 struct ref_store *refs = transaction->ref_store;
2335 int ret;
2336
2337 switch (transaction->state) {
2338 case REF_TRANSACTION_OPEN:
2339 /* Good. */
2340 break;
2341 case REF_TRANSACTION_PREPARED:
2342 BUG("prepare called twice on reference transaction");
2343 break;
2344 case REF_TRANSACTION_CLOSED:
2345 BUG("prepare called on a closed reference transaction");
2346 break;
2347 default:
2348 BUG("unexpected reference transaction state");
2349 break;
2350 }
2351
2352 if (refs->repo->objects->odb->disable_ref_updates) {
2353 strbuf_addstr(err,
2354 _("ref updates forbidden inside quarantine environment"));
2355 return -1;
2356 }
2357
2358 ret = refs->be->transaction_prepare(refs, transaction, err);
2359 if (ret)
2360 return ret;
2361
2362 ret = run_transaction_hook(transaction, "prepared");
2363 if (ret) {
2364 ref_transaction_abort(transaction, err);
2365 die(_("ref updates aborted by hook"));
2366 }
2367
2368 return 0;
2369 }
2370
2371 int ref_transaction_abort(struct ref_transaction *transaction,
2372 struct strbuf *err)
2373 {
2374 struct ref_store *refs = transaction->ref_store;
2375 int ret = 0;
2376
2377 switch (transaction->state) {
2378 case REF_TRANSACTION_OPEN:
2379 /* No need to abort explicitly. */
2380 break;
2381 case REF_TRANSACTION_PREPARED:
2382 ret = refs->be->transaction_abort(refs, transaction, err);
2383 break;
2384 case REF_TRANSACTION_CLOSED:
2385 BUG("abort called on a closed reference transaction");
2386 break;
2387 default:
2388 BUG("unexpected reference transaction state");
2389 break;
2390 }
2391
2392 run_transaction_hook(transaction, "aborted");
2393
2394 ref_transaction_free(transaction);
2395 return ret;
2396 }
2397
2398 int ref_transaction_commit(struct ref_transaction *transaction,
2399 struct strbuf *err)
2400 {
2401 struct ref_store *refs = transaction->ref_store;
2402 int ret;
2403
2404 switch (transaction->state) {
2405 case REF_TRANSACTION_OPEN:
2406 /* Need to prepare first. */
2407 ret = ref_transaction_prepare(transaction, err);
2408 if (ret)
2409 return ret;
2410 break;
2411 case REF_TRANSACTION_PREPARED:
2412 /* Fall through to finish. */
2413 break;
2414 case REF_TRANSACTION_CLOSED:
2415 BUG("commit called on a closed reference transaction");
2416 break;
2417 default:
2418 BUG("unexpected reference transaction state");
2419 break;
2420 }
2421
2422 ret = refs->be->transaction_finish(refs, transaction, err);
2423 if (!ret)
2424 run_transaction_hook(transaction, "committed");
2425 return ret;
2426 }
2427
2428 int refs_verify_refname_available(struct ref_store *refs,
2429 const char *refname,
2430 const struct string_list *extras,
2431 const struct string_list *skip,
2432 struct strbuf *err)
2433 {
2434 const char *slash;
2435 const char *extra_refname;
2436 struct strbuf dirname = STRBUF_INIT;
2437 struct strbuf referent = STRBUF_INIT;
2438 struct object_id oid;
2439 unsigned int type;
2440 struct ref_iterator *iter;
2441 int ok;
2442 int ret = -1;
2443
2444 /*
2445 * For the sake of comments in this function, suppose that
2446 * refname is "refs/foo/bar".
2447 */
2448
2449 assert(err);
2450
2451 strbuf_grow(&dirname, strlen(refname) + 1);
2452 for (slash = strchr(refname, '/'); slash; slash = strchr(slash + 1, '/')) {
2453 /*
2454 * Just saying "Is a directory" when we e.g. can't
2455 * lock some multi-level ref isn't very informative,
2456 * the user won't be told *what* is a directory, so
2457 * let's not use strerror() below.
2458 */
2459 int ignore_errno;
2460 /* Expand dirname to the new prefix, not including the trailing slash: */
2461 strbuf_add(&dirname, refname + dirname.len, slash - refname - dirname.len);
2462
2463 /*
2464 * We are still at a leading dir of the refname (e.g.,
2465 * "refs/foo"; if there is a reference with that name,
2466 * it is a conflict, *unless* it is in skip.
2467 */
2468 if (skip && string_list_has_string(skip, dirname.buf))
2469 continue;
2470
2471 if (!refs_read_raw_ref(refs, dirname.buf, &oid, &referent,
2472 &type, &ignore_errno)) {
2473 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2474 dirname.buf, refname);
2475 goto cleanup;
2476 }
2477
2478 if (extras && string_list_has_string(extras, dirname.buf)) {
2479 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2480 refname, dirname.buf);
2481 goto cleanup;
2482 }
2483 }
2484
2485 /*
2486 * We are at the leaf of our refname (e.g., "refs/foo/bar").
2487 * There is no point in searching for a reference with that
2488 * name, because a refname isn't considered to conflict with
2489 * itself. But we still need to check for references whose
2490 * names are in the "refs/foo/bar/" namespace, because they
2491 * *do* conflict.
2492 */
2493 strbuf_addstr(&dirname, refname + dirname.len);
2494 strbuf_addch(&dirname, '/');
2495
2496 iter = refs_ref_iterator_begin(refs, dirname.buf, NULL, 0,
2497 DO_FOR_EACH_INCLUDE_BROKEN);
2498 while ((ok = ref_iterator_advance(iter)) == ITER_OK) {
2499 if (skip &&
2500 string_list_has_string(skip, iter->refname))
2501 continue;
2502
2503 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2504 iter->refname, refname);
2505 ref_iterator_abort(iter);
2506 goto cleanup;
2507 }
2508
2509 if (ok != ITER_DONE)
2510 BUG("error while iterating over references");
2511
2512 extra_refname = find_descendant_ref(dirname.buf, extras, skip);
2513 if (extra_refname)
2514 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2515 refname, extra_refname);
2516 else
2517 ret = 0;
2518
2519 cleanup:
2520 strbuf_release(&referent);
2521 strbuf_release(&dirname);
2522 return ret;
2523 }
2524
2525 int refs_for_each_reflog(struct ref_store *refs, each_ref_fn fn, void *cb_data)
2526 {
2527 struct ref_iterator *iter;
2528 struct do_for_each_ref_help hp = { fn, cb_data };
2529
2530 iter = refs->be->reflog_iterator_begin(refs);
2531
2532 return do_for_each_repo_ref_iterator(the_repository, iter,
2533 do_for_each_ref_helper, &hp);
2534 }
2535
2536 int for_each_reflog(each_ref_fn fn, void *cb_data)
2537 {
2538 return refs_for_each_reflog(get_main_ref_store(the_repository), fn, cb_data);
2539 }
2540
2541 int refs_for_each_reflog_ent_reverse(struct ref_store *refs,
2542 const char *refname,
2543 each_reflog_ent_fn fn,
2544 void *cb_data)
2545 {
2546 return refs->be->for_each_reflog_ent_reverse(refs, refname,
2547 fn, cb_data);
2548 }
2549
2550 int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn,
2551 void *cb_data)
2552 {
2553 return refs_for_each_reflog_ent_reverse(get_main_ref_store(the_repository),
2554 refname, fn, cb_data);
2555 }
2556
2557 int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname,
2558 each_reflog_ent_fn fn, void *cb_data)
2559 {
2560 return refs->be->for_each_reflog_ent(refs, refname, fn, cb_data);
2561 }
2562
2563 int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn,
2564 void *cb_data)
2565 {
2566 return refs_for_each_reflog_ent(get_main_ref_store(the_repository), refname,
2567 fn, cb_data);
2568 }
2569
2570 int refs_reflog_exists(struct ref_store *refs, const char *refname)
2571 {
2572 return refs->be->reflog_exists(refs, refname);
2573 }
2574
2575 int reflog_exists(const char *refname)
2576 {
2577 return refs_reflog_exists(get_main_ref_store(the_repository), refname);
2578 }
2579
2580 int refs_create_reflog(struct ref_store *refs, const char *refname,
2581 struct strbuf *err)
2582 {
2583 return refs->be->create_reflog(refs, refname, err);
2584 }
2585
2586 int safe_create_reflog(const char *refname, struct strbuf *err)
2587 {
2588 return refs_create_reflog(get_main_ref_store(the_repository), refname,
2589 err);
2590 }
2591
2592 int refs_delete_reflog(struct ref_store *refs, const char *refname)
2593 {
2594 return refs->be->delete_reflog(refs, refname);
2595 }
2596
2597 int delete_reflog(const char *refname)
2598 {
2599 return refs_delete_reflog(get_main_ref_store(the_repository), refname);
2600 }
2601
2602 int refs_reflog_expire(struct ref_store *refs,
2603 const char *refname,
2604 unsigned int flags,
2605 reflog_expiry_prepare_fn prepare_fn,
2606 reflog_expiry_should_prune_fn should_prune_fn,
2607 reflog_expiry_cleanup_fn cleanup_fn,
2608 void *policy_cb_data)
2609 {
2610 return refs->be->reflog_expire(refs, refname, flags,
2611 prepare_fn, should_prune_fn,
2612 cleanup_fn, policy_cb_data);
2613 }
2614
2615 int reflog_expire(const char *refname,
2616 unsigned int flags,
2617 reflog_expiry_prepare_fn prepare_fn,
2618 reflog_expiry_should_prune_fn should_prune_fn,
2619 reflog_expiry_cleanup_fn cleanup_fn,
2620 void *policy_cb_data)
2621 {
2622 return refs_reflog_expire(get_main_ref_store(the_repository),
2623 refname, flags,
2624 prepare_fn, should_prune_fn,
2625 cleanup_fn, policy_cb_data);
2626 }
2627
2628 int initial_ref_transaction_commit(struct ref_transaction *transaction,
2629 struct strbuf *err)
2630 {
2631 struct ref_store *refs = transaction->ref_store;
2632
2633 return refs->be->initial_transaction_commit(refs, transaction, err);
2634 }
2635
2636 void ref_transaction_for_each_queued_update(struct ref_transaction *transaction,
2637 ref_transaction_for_each_queued_update_fn cb,
2638 void *cb_data)
2639 {
2640 int i;
2641
2642 for (i = 0; i < transaction->nr; i++) {
2643 struct ref_update *update = transaction->updates[i];
2644
2645 cb(update->refname,
2646 (update->flags & REF_HAVE_OLD) ? &update->old_oid : NULL,
2647 (update->flags & REF_HAVE_NEW) ? &update->new_oid : NULL,
2648 cb_data);
2649 }
2650 }
2651
2652 int refs_delete_refs(struct ref_store *refs, const char *logmsg,
2653 struct string_list *refnames, unsigned int flags)
2654 {
2655 struct ref_transaction *transaction;
2656 struct strbuf err = STRBUF_INIT;
2657 struct string_list_item *item;
2658 int ret = 0, failures = 0;
2659 char *msg;
2660
2661 if (!refnames->nr)
2662 return 0;
2663
2664 msg = normalize_reflog_message(logmsg);
2665
2666 /*
2667 * Since we don't check the references' old_oids, the
2668 * individual updates can't fail, so we can pack all of the
2669 * updates into a single transaction.
2670 */
2671 transaction = ref_store_transaction_begin(refs, &err);
2672 if (!transaction) {
2673 ret = error("%s", err.buf);
2674 goto out;
2675 }
2676
2677 for_each_string_list_item(item, refnames) {
2678 ret = ref_transaction_delete(transaction, item->string,
2679 NULL, flags, msg, &err);
2680 if (ret) {
2681 warning(_("could not delete reference %s: %s"),
2682 item->string, err.buf);
2683 strbuf_reset(&err);
2684 failures = 1;
2685 }
2686 }
2687
2688 ret = ref_transaction_commit(transaction, &err);
2689 if (ret) {
2690 if (refnames->nr == 1)
2691 error(_("could not delete reference %s: %s"),
2692 refnames->items[0].string, err.buf);
2693 else
2694 error(_("could not delete references: %s"), err.buf);
2695 }
2696
2697 out:
2698 if (!ret && failures)
2699 ret = -1;
2700 ref_transaction_free(transaction);
2701 strbuf_release(&err);
2702 free(msg);
2703 return ret;
2704 }
2705
2706 int delete_refs(const char *msg, struct string_list *refnames,
2707 unsigned int flags)
2708 {
2709 return refs_delete_refs(get_main_ref_store(the_repository), msg, refnames, flags);
2710 }
2711
2712 int refs_rename_ref(struct ref_store *refs, const char *oldref,
2713 const char *newref, const char *logmsg)
2714 {
2715 char *msg;
2716 int retval;
2717
2718 msg = normalize_reflog_message(logmsg);
2719 retval = refs->be->rename_ref(refs, oldref, newref, msg);
2720 free(msg);
2721 return retval;
2722 }
2723
2724 int rename_ref(const char *oldref, const char *newref, const char *logmsg)
2725 {
2726 return refs_rename_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);
2727 }
2728
2729 int refs_copy_existing_ref(struct ref_store *refs, const char *oldref,
2730 const char *newref, const char *logmsg)
2731 {
2732 char *msg;
2733 int retval;
2734
2735 msg = normalize_reflog_message(logmsg);
2736 retval = refs->be->copy_ref(refs, oldref, newref, msg);
2737 free(msg);
2738 return retval;
2739 }
2740
2741 int copy_existing_ref(const char *oldref, const char *newref, const char *logmsg)
2742 {
2743 return refs_copy_existing_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);
2744 }