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