Merge branch 'rs/remove-unused-find-header-mem'
[git.git] / refs.c
blobdd0d9c360f1ca6c83df17fdeaa491cc0b722a87e
1 /*
2 * The backend-independent part of the reference module.
3 */
5 #include "git-compat-util.h"
6 #include "advice.h"
7 #include "config.h"
8 #include "environment.h"
9 #include "strmap.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 "submodule.h"
23 #include "worktree.h"
24 #include "strvec.h"
25 #include "repository.h"
26 #include "setup.h"
27 #include "sigchain.h"
28 #include "date.h"
29 #include "commit.h"
30 #include "wildmatch.h"
33 * List of all available backends
35 static const struct ref_storage_be *refs_backends[] = {
36 [REF_STORAGE_FORMAT_FILES] = &refs_be_files,
37 [REF_STORAGE_FORMAT_REFTABLE] = &refs_be_reftable,
40 static const struct ref_storage_be *find_ref_storage_backend(
41 enum ref_storage_format ref_storage_format)
43 if (ref_storage_format < ARRAY_SIZE(refs_backends))
44 return refs_backends[ref_storage_format];
45 return NULL;
48 enum ref_storage_format ref_storage_format_by_name(const char *name)
50 for (unsigned int i = 0; i < ARRAY_SIZE(refs_backends); i++)
51 if (refs_backends[i] && !strcmp(refs_backends[i]->name, name))
52 return i;
53 return REF_STORAGE_FORMAT_UNKNOWN;
56 const char *ref_storage_format_to_name(enum ref_storage_format ref_storage_format)
58 const struct ref_storage_be *be = find_ref_storage_backend(ref_storage_format);
59 if (!be)
60 return "unknown";
61 return be->name;
65 * How to handle various characters in refnames:
66 * 0: An acceptable character for refs
67 * 1: End-of-component
68 * 2: ., look for a preceding . to reject .. in refs
69 * 3: {, look for a preceding @ to reject @{ in refs
70 * 4: A bad character: ASCII control characters, and
71 * ":", "?", "[", "\", "^", "~", SP, or TAB
72 * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
74 static unsigned char refname_disposition[256] = {
75 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
76 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
77 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,
78 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
79 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
80 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,
81 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
82 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4
85 struct ref_namespace_info ref_namespace[] = {
86 [NAMESPACE_HEAD] = {
87 .ref = "HEAD",
88 .decoration = DECORATION_REF_HEAD,
89 .exact = 1,
91 [NAMESPACE_BRANCHES] = {
92 .ref = "refs/heads/",
93 .decoration = DECORATION_REF_LOCAL,
95 [NAMESPACE_TAGS] = {
96 .ref = "refs/tags/",
97 .decoration = DECORATION_REF_TAG,
99 [NAMESPACE_REMOTE_REFS] = {
101 * The default refspec for new remotes copies refs from
102 * refs/heads/ on the remote into refs/remotes/<remote>/.
103 * As such, "refs/remotes/" has special handling.
105 .ref = "refs/remotes/",
106 .decoration = DECORATION_REF_REMOTE,
108 [NAMESPACE_STASH] = {
110 * The single ref "refs/stash" stores the latest stash.
111 * Older stashes can be found in the reflog.
113 .ref = "refs/stash",
114 .exact = 1,
115 .decoration = DECORATION_REF_STASH,
117 [NAMESPACE_REPLACE] = {
119 * This namespace allows Git to act as if one object ID
120 * points to the content of another. Unlike the other
121 * ref namespaces, this one can be changed by the
122 * GIT_REPLACE_REF_BASE environment variable. This
123 * .namespace value will be overwritten in setup_git_env().
125 .ref = "refs/replace/",
126 .decoration = DECORATION_GRAFTED,
128 [NAMESPACE_NOTES] = {
130 * The refs/notes/commit ref points to the tip of a
131 * parallel commit history that adds metadata to commits
132 * in the normal history. This ref can be overwritten
133 * by the core.notesRef config variable or the
134 * GIT_NOTES_REFS environment variable.
136 .ref = "refs/notes/commit",
137 .exact = 1,
139 [NAMESPACE_PREFETCH] = {
141 * Prefetch refs are written by the background 'fetch'
142 * maintenance task. It allows faster foreground fetches
143 * by advertising these previously-downloaded tips without
144 * updating refs/remotes/ without user intervention.
146 .ref = "refs/prefetch/",
148 [NAMESPACE_REWRITTEN] = {
150 * Rewritten refs are used by the 'label' command in the
151 * sequencer. These are particularly useful during an
152 * interactive rebase that uses the 'merge' command.
154 .ref = "refs/rewritten/",
158 void update_ref_namespace(enum ref_namespace namespace, char *ref)
160 struct ref_namespace_info *info = &ref_namespace[namespace];
161 if (info->ref_updated)
162 free((char *)info->ref);
163 info->ref = ref;
164 info->ref_updated = 1;
168 * Try to read one refname component from the front of refname.
169 * Return the length of the component found, or -1 if the component is
170 * not legal. It is legal if it is something reasonable to have under
171 * ".git/refs/"; We do not like it if:
173 * - it begins with ".", or
174 * - it has double dots "..", or
175 * - it has ASCII control characters, or
176 * - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or
177 * - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or
178 * - it ends with a "/", or
179 * - it ends with ".lock", or
180 * - it contains a "@{" portion
182 * When sanitized is not NULL, instead of rejecting the input refname
183 * as an error, try to come up with a usable replacement for the input
184 * refname in it.
186 static int check_refname_component(const char *refname, int *flags,
187 struct strbuf *sanitized)
189 const char *cp;
190 char last = '\0';
191 size_t component_start = 0; /* garbage - not a reasonable initial value */
193 if (sanitized)
194 component_start = sanitized->len;
196 for (cp = refname; ; cp++) {
197 int ch = *cp & 255;
198 unsigned char disp = refname_disposition[ch];
200 if (sanitized && disp != 1)
201 strbuf_addch(sanitized, ch);
203 switch (disp) {
204 case 1:
205 goto out;
206 case 2:
207 if (last == '.') { /* Refname contains "..". */
208 if (sanitized)
209 /* collapse ".." to single "." */
210 strbuf_setlen(sanitized, sanitized->len - 1);
211 else
212 return -1;
214 break;
215 case 3:
216 if (last == '@') { /* Refname contains "@{". */
217 if (sanitized)
218 sanitized->buf[sanitized->len-1] = '-';
219 else
220 return -1;
222 break;
223 case 4:
224 /* forbidden char */
225 if (sanitized)
226 sanitized->buf[sanitized->len-1] = '-';
227 else
228 return -1;
229 break;
230 case 5:
231 if (!(*flags & REFNAME_REFSPEC_PATTERN)) {
232 /* refspec can't be a pattern */
233 if (sanitized)
234 sanitized->buf[sanitized->len-1] = '-';
235 else
236 return -1;
240 * Unset the pattern flag so that we only accept
241 * a single asterisk for one side of refspec.
243 *flags &= ~ REFNAME_REFSPEC_PATTERN;
244 break;
246 last = ch;
248 out:
249 if (cp == refname)
250 return 0; /* Component has zero length. */
252 if (refname[0] == '.') { /* Component starts with '.'. */
253 if (sanitized)
254 sanitized->buf[component_start] = '-';
255 else
256 return -1;
258 if (cp - refname >= LOCK_SUFFIX_LEN &&
259 !memcmp(cp - LOCK_SUFFIX_LEN, LOCK_SUFFIX, LOCK_SUFFIX_LEN)) {
260 if (!sanitized)
261 return -1;
262 /* Refname ends with ".lock". */
263 while (strbuf_strip_suffix(sanitized, LOCK_SUFFIX)) {
264 /* try again in case we have .lock.lock */
267 return cp - refname;
270 static int check_or_sanitize_refname(const char *refname, int flags,
271 struct strbuf *sanitized)
273 int component_len, component_count = 0;
275 if (!strcmp(refname, "@")) {
276 /* Refname is a single character '@'. */
277 if (sanitized)
278 strbuf_addch(sanitized, '-');
279 else
280 return -1;
283 while (1) {
284 if (sanitized && sanitized->len)
285 strbuf_complete(sanitized, '/');
287 /* We are at the start of a path component. */
288 component_len = check_refname_component(refname, &flags,
289 sanitized);
290 if (sanitized && component_len == 0)
291 ; /* OK, omit empty component */
292 else if (component_len <= 0)
293 return -1;
295 component_count++;
296 if (refname[component_len] == '\0')
297 break;
298 /* Skip to next component. */
299 refname += component_len + 1;
302 if (refname[component_len - 1] == '.') {
303 /* Refname ends with '.'. */
304 if (sanitized)
305 ; /* omit ending dot */
306 else
307 return -1;
309 if (!(flags & REFNAME_ALLOW_ONELEVEL) && component_count < 2)
310 return -1; /* Refname has only one component. */
311 return 0;
314 int check_refname_format(const char *refname, int flags)
316 return check_or_sanitize_refname(refname, flags, NULL);
319 void sanitize_refname_component(const char *refname, struct strbuf *out)
321 if (check_or_sanitize_refname(refname, REFNAME_ALLOW_ONELEVEL, out))
322 BUG("sanitizing refname '%s' check returned error", refname);
325 int refname_is_safe(const char *refname)
327 const char *rest;
329 if (skip_prefix(refname, "refs/", &rest)) {
330 char *buf;
331 int result;
332 size_t restlen = strlen(rest);
334 /* rest must not be empty, or start or end with "/" */
335 if (!restlen || *rest == '/' || rest[restlen - 1] == '/')
336 return 0;
339 * Does the refname try to escape refs/?
340 * For example: refs/foo/../bar is safe but refs/foo/../../bar
341 * is not.
343 buf = xmallocz(restlen);
344 result = !normalize_path_copy(buf, rest) && !strcmp(buf, rest);
345 free(buf);
346 return result;
349 do {
350 if (!isupper(*refname) && *refname != '_')
351 return 0;
352 refname++;
353 } while (*refname);
354 return 1;
358 * Return true if refname, which has the specified oid and flags, can
359 * be resolved to an object in the database. If the referred-to object
360 * does not exist, emit a warning and return false.
362 int ref_resolves_to_object(const char *refname,
363 struct repository *repo,
364 const struct object_id *oid,
365 unsigned int flags)
367 if (flags & REF_ISBROKEN)
368 return 0;
369 if (!repo_has_object_file(repo, oid)) {
370 error(_("%s does not point to a valid object!"), refname);
371 return 0;
373 return 1;
376 char *refs_resolve_refdup(struct ref_store *refs,
377 const char *refname, int resolve_flags,
378 struct object_id *oid, int *flags)
380 const char *result;
382 result = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
383 oid, flags);
384 return xstrdup_or_null(result);
387 /* The argument to for_each_filter_refs */
388 struct for_each_ref_filter {
389 const char *pattern;
390 const char *prefix;
391 each_ref_fn *fn;
392 void *cb_data;
395 int refs_read_ref_full(struct ref_store *refs, const char *refname,
396 int resolve_flags, struct object_id *oid, int *flags)
398 if (refs_resolve_ref_unsafe(refs, refname, resolve_flags,
399 oid, flags))
400 return 0;
401 return -1;
404 int refs_read_ref(struct ref_store *refs, const char *refname, struct object_id *oid)
406 return refs_read_ref_full(refs, refname, RESOLVE_REF_READING, oid, NULL);
409 int refs_ref_exists(struct ref_store *refs, const char *refname)
411 return !!refs_resolve_ref_unsafe(refs, refname, RESOLVE_REF_READING,
412 NULL, NULL);
415 static int for_each_filter_refs(const char *refname,
416 const struct object_id *oid,
417 int flags, void *data)
419 struct for_each_ref_filter *filter = data;
421 if (wildmatch(filter->pattern, refname, 0))
422 return 0;
423 if (filter->prefix)
424 skip_prefix(refname, filter->prefix, &refname);
425 return filter->fn(refname, oid, flags, filter->cb_data);
428 struct warn_if_dangling_data {
429 struct ref_store *refs;
430 FILE *fp;
431 const char *refname;
432 const struct string_list *refnames;
433 const char *msg_fmt;
436 static int warn_if_dangling_symref(const char *refname,
437 const struct object_id *oid UNUSED,
438 int flags, void *cb_data)
440 struct warn_if_dangling_data *d = cb_data;
441 const char *resolves_to;
443 if (!(flags & REF_ISSYMREF))
444 return 0;
446 resolves_to = refs_resolve_ref_unsafe(d->refs, refname, 0, NULL, NULL);
447 if (!resolves_to
448 || (d->refname
449 ? strcmp(resolves_to, d->refname)
450 : !string_list_has_string(d->refnames, resolves_to))) {
451 return 0;
454 fprintf(d->fp, d->msg_fmt, refname);
455 fputc('\n', d->fp);
456 return 0;
459 void refs_warn_dangling_symref(struct ref_store *refs, FILE *fp,
460 const char *msg_fmt, const char *refname)
462 struct warn_if_dangling_data data = {
463 .refs = refs,
464 .fp = fp,
465 .refname = refname,
466 .msg_fmt = msg_fmt,
468 refs_for_each_rawref(refs, warn_if_dangling_symref, &data);
471 void refs_warn_dangling_symrefs(struct ref_store *refs, FILE *fp,
472 const char *msg_fmt, const struct string_list *refnames)
474 struct warn_if_dangling_data data = {
475 .refs = refs,
476 .fp = fp,
477 .refnames = refnames,
478 .msg_fmt = msg_fmt,
480 refs_for_each_rawref(refs, warn_if_dangling_symref, &data);
483 int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
485 return refs_for_each_ref_in(refs, "refs/tags/", fn, cb_data);
488 int refs_for_each_branch_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
490 return refs_for_each_ref_in(refs, "refs/heads/", fn, cb_data);
493 int refs_for_each_remote_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
495 return refs_for_each_ref_in(refs, "refs/remotes/", fn, cb_data);
498 int refs_head_ref_namespaced(struct ref_store *refs, each_ref_fn fn, void *cb_data)
500 struct strbuf buf = STRBUF_INIT;
501 int ret = 0;
502 struct object_id oid;
503 int flag;
505 strbuf_addf(&buf, "%sHEAD", get_git_namespace());
506 if (!refs_read_ref_full(refs, buf.buf, RESOLVE_REF_READING, &oid, &flag))
507 ret = fn(buf.buf, &oid, flag, cb_data);
508 strbuf_release(&buf);
510 return ret;
513 void normalize_glob_ref(struct string_list_item *item, const char *prefix,
514 const char *pattern)
516 struct strbuf normalized_pattern = STRBUF_INIT;
518 if (*pattern == '/')
519 BUG("pattern must not start with '/'");
521 if (prefix)
522 strbuf_addstr(&normalized_pattern, prefix);
523 else if (!starts_with(pattern, "refs/") &&
524 strcmp(pattern, "HEAD"))
525 strbuf_addstr(&normalized_pattern, "refs/");
527 * NEEDSWORK: Special case other symrefs such as REBASE_HEAD,
528 * MERGE_HEAD, etc.
531 strbuf_addstr(&normalized_pattern, pattern);
532 strbuf_strip_suffix(&normalized_pattern, "/");
534 item->string = strbuf_detach(&normalized_pattern, NULL);
535 item->util = has_glob_specials(pattern) ? NULL : item->string;
536 strbuf_release(&normalized_pattern);
539 int refs_for_each_glob_ref_in(struct ref_store *refs, each_ref_fn fn,
540 const char *pattern, const char *prefix, void *cb_data)
542 struct strbuf real_pattern = STRBUF_INIT;
543 struct for_each_ref_filter filter;
544 int ret;
546 if (!prefix && !starts_with(pattern, "refs/"))
547 strbuf_addstr(&real_pattern, "refs/");
548 else if (prefix)
549 strbuf_addstr(&real_pattern, prefix);
550 strbuf_addstr(&real_pattern, pattern);
552 if (!has_glob_specials(pattern)) {
553 /* Append implied '/' '*' if not present. */
554 strbuf_complete(&real_pattern, '/');
555 /* No need to check for '*', there is none. */
556 strbuf_addch(&real_pattern, '*');
559 filter.pattern = real_pattern.buf;
560 filter.prefix = prefix;
561 filter.fn = fn;
562 filter.cb_data = cb_data;
563 ret = refs_for_each_ref(refs, for_each_filter_refs, &filter);
565 strbuf_release(&real_pattern);
566 return ret;
569 int refs_for_each_glob_ref(struct ref_store *refs, each_ref_fn fn,
570 const char *pattern, void *cb_data)
572 return refs_for_each_glob_ref_in(refs, fn, pattern, NULL, cb_data);
575 const char *prettify_refname(const char *name)
577 if (skip_prefix(name, "refs/heads/", &name) ||
578 skip_prefix(name, "refs/tags/", &name) ||
579 skip_prefix(name, "refs/remotes/", &name))
580 ; /* nothing */
581 return name;
584 static const char *ref_rev_parse_rules[] = {
585 "%.*s",
586 "refs/%.*s",
587 "refs/tags/%.*s",
588 "refs/heads/%.*s",
589 "refs/remotes/%.*s",
590 "refs/remotes/%.*s/HEAD",
591 NULL
594 #define NUM_REV_PARSE_RULES (ARRAY_SIZE(ref_rev_parse_rules) - 1)
597 * Is it possible that the caller meant full_name with abbrev_name?
598 * If so return a non-zero value to signal "yes"; the magnitude of
599 * the returned value gives the precedence used for disambiguation.
601 * If abbrev_name cannot mean full_name, return 0.
603 int refname_match(const char *abbrev_name, const char *full_name)
605 const char **p;
606 const int abbrev_name_len = strlen(abbrev_name);
607 const int num_rules = NUM_REV_PARSE_RULES;
609 for (p = ref_rev_parse_rules; *p; p++)
610 if (!strcmp(full_name, mkpath(*p, abbrev_name_len, abbrev_name)))
611 return &ref_rev_parse_rules[num_rules] - p;
613 return 0;
617 * Given a 'prefix' expand it by the rules in 'ref_rev_parse_rules' and add
618 * the results to 'prefixes'
620 void expand_ref_prefix(struct strvec *prefixes, const char *prefix)
622 const char **p;
623 int len = strlen(prefix);
625 for (p = ref_rev_parse_rules; *p; p++)
626 strvec_pushf(prefixes, *p, len, prefix);
629 static const char default_branch_name_advice[] = N_(
630 "Using '%s' as the name for the initial branch. This default branch name\n"
631 "is subject to change. To configure the initial branch name to use in all\n"
632 "of your new repositories, which will suppress this warning, call:\n"
633 "\n"
634 "\tgit config --global init.defaultBranch <name>\n"
635 "\n"
636 "Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
637 "'development'. The just-created branch can be renamed via this command:\n"
638 "\n"
639 "\tgit branch -m <name>\n"
642 char *repo_default_branch_name(struct repository *r, int quiet)
644 const char *config_key = "init.defaultbranch";
645 const char *config_display_key = "init.defaultBranch";
646 char *ret = NULL, *full_ref;
647 const char *env = getenv("GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME");
649 if (env && *env)
650 ret = xstrdup(env);
651 else if (repo_config_get_string(r, config_key, &ret) < 0)
652 die(_("could not retrieve `%s`"), config_display_key);
654 if (!ret) {
655 ret = xstrdup("master");
656 if (!quiet)
657 advise(_(default_branch_name_advice), ret);
660 full_ref = xstrfmt("refs/heads/%s", ret);
661 if (check_refname_format(full_ref, 0))
662 die(_("invalid branch name: %s = %s"), config_display_key, ret);
663 free(full_ref);
665 return ret;
669 * *string and *len will only be substituted, and *string returned (for
670 * later free()ing) if the string passed in is a magic short-hand form
671 * to name a branch.
673 static char *substitute_branch_name(struct repository *r,
674 const char **string, int *len,
675 int nonfatal_dangling_mark)
677 struct strbuf buf = STRBUF_INIT;
678 struct interpret_branch_name_options options = {
679 .nonfatal_dangling_mark = nonfatal_dangling_mark
681 int ret = repo_interpret_branch_name(r, *string, *len, &buf, &options);
683 if (ret == *len) {
684 size_t size;
685 *string = strbuf_detach(&buf, &size);
686 *len = size;
687 return (char *)*string;
690 return NULL;
693 int repo_dwim_ref(struct repository *r, const char *str, int len,
694 struct object_id *oid, char **ref, int nonfatal_dangling_mark)
696 char *last_branch = substitute_branch_name(r, &str, &len,
697 nonfatal_dangling_mark);
698 int refs_found = expand_ref(r, str, len, oid, ref);
699 free(last_branch);
700 return refs_found;
703 int expand_ref(struct repository *repo, const char *str, int len,
704 struct object_id *oid, char **ref)
706 const char **p, *r;
707 int refs_found = 0;
708 struct strbuf fullref = STRBUF_INIT;
710 *ref = NULL;
711 for (p = ref_rev_parse_rules; *p; p++) {
712 struct object_id oid_from_ref;
713 struct object_id *this_result;
714 int flag;
715 struct ref_store *refs = get_main_ref_store(repo);
717 this_result = refs_found ? &oid_from_ref : oid;
718 strbuf_reset(&fullref);
719 strbuf_addf(&fullref, *p, len, str);
720 r = refs_resolve_ref_unsafe(refs, fullref.buf,
721 RESOLVE_REF_READING,
722 this_result, &flag);
723 if (r) {
724 if (!refs_found++)
725 *ref = xstrdup(r);
726 if (!warn_ambiguous_refs)
727 break;
728 } else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
729 warning(_("ignoring dangling symref %s"), fullref.buf);
730 } else if ((flag & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
731 warning(_("ignoring broken ref %s"), fullref.buf);
734 strbuf_release(&fullref);
735 return refs_found;
738 int repo_dwim_log(struct repository *r, const char *str, int len,
739 struct object_id *oid, char **log)
741 struct ref_store *refs = get_main_ref_store(r);
742 char *last_branch = substitute_branch_name(r, &str, &len, 0);
743 const char **p;
744 int logs_found = 0;
745 struct strbuf path = STRBUF_INIT;
747 *log = NULL;
748 for (p = ref_rev_parse_rules; *p; p++) {
749 struct object_id hash;
750 const char *ref, *it;
752 strbuf_reset(&path);
753 strbuf_addf(&path, *p, len, str);
754 ref = refs_resolve_ref_unsafe(refs, path.buf,
755 RESOLVE_REF_READING,
756 oid ? &hash : NULL, NULL);
757 if (!ref)
758 continue;
759 if (refs_reflog_exists(refs, path.buf))
760 it = path.buf;
761 else if (strcmp(ref, path.buf) &&
762 refs_reflog_exists(refs, ref))
763 it = ref;
764 else
765 continue;
766 if (!logs_found++) {
767 *log = xstrdup(it);
768 if (oid)
769 oidcpy(oid, &hash);
771 if (!warn_ambiguous_refs)
772 break;
774 strbuf_release(&path);
775 free(last_branch);
776 return logs_found;
779 int is_per_worktree_ref(const char *refname)
781 return starts_with(refname, "refs/worktree/") ||
782 starts_with(refname, "refs/bisect/") ||
783 starts_with(refname, "refs/rewritten/");
786 int is_pseudo_ref(const char *refname)
788 static const char * const pseudo_refs[] = {
789 "FETCH_HEAD",
790 "MERGE_HEAD",
792 size_t i;
794 for (i = 0; i < ARRAY_SIZE(pseudo_refs); i++)
795 if (!strcmp(refname, pseudo_refs[i]))
796 return 1;
798 return 0;
801 static int is_root_ref_syntax(const char *refname)
803 const char *c;
805 for (c = refname; *c; c++) {
806 if (!isupper(*c) && *c != '-' && *c != '_')
807 return 0;
810 return 1;
813 int is_root_ref(const char *refname)
815 static const char *const irregular_root_refs[] = {
816 "HEAD",
817 "AUTO_MERGE",
818 "BISECT_EXPECTED_REV",
819 "NOTES_MERGE_PARTIAL",
820 "NOTES_MERGE_REF",
821 "MERGE_AUTOSTASH",
823 size_t i;
825 if (!is_root_ref_syntax(refname) ||
826 is_pseudo_ref(refname))
827 return 0;
829 if (ends_with(refname, "_HEAD"))
830 return 1;
832 for (i = 0; i < ARRAY_SIZE(irregular_root_refs); i++)
833 if (!strcmp(refname, irregular_root_refs[i]))
834 return 1;
836 return 0;
839 static int is_current_worktree_ref(const char *ref) {
840 return is_root_ref_syntax(ref) || is_per_worktree_ref(ref);
843 enum ref_worktree_type parse_worktree_ref(const char *maybe_worktree_ref,
844 const char **worktree_name, int *worktree_name_length,
845 const char **bare_refname)
847 const char *name_dummy;
848 int name_length_dummy;
849 const char *ref_dummy;
851 if (!worktree_name)
852 worktree_name = &name_dummy;
853 if (!worktree_name_length)
854 worktree_name_length = &name_length_dummy;
855 if (!bare_refname)
856 bare_refname = &ref_dummy;
858 if (skip_prefix(maybe_worktree_ref, "worktrees/", bare_refname)) {
859 const char *slash = strchr(*bare_refname, '/');
861 *worktree_name = *bare_refname;
862 if (!slash) {
863 *worktree_name_length = strlen(*worktree_name);
865 /* This is an error condition, and the caller tell because the bare_refname is "" */
866 *bare_refname = *worktree_name + *worktree_name_length;
867 return REF_WORKTREE_OTHER;
870 *worktree_name_length = slash - *bare_refname;
871 *bare_refname = slash + 1;
873 if (is_current_worktree_ref(*bare_refname))
874 return REF_WORKTREE_OTHER;
877 *worktree_name = NULL;
878 *worktree_name_length = 0;
880 if (skip_prefix(maybe_worktree_ref, "main-worktree/", bare_refname)
881 && is_current_worktree_ref(*bare_refname))
882 return REF_WORKTREE_MAIN;
884 *bare_refname = maybe_worktree_ref;
885 if (is_current_worktree_ref(maybe_worktree_ref))
886 return REF_WORKTREE_CURRENT;
888 return REF_WORKTREE_SHARED;
891 long get_files_ref_lock_timeout_ms(void)
893 static int configured = 0;
895 /* The default timeout is 100 ms: */
896 static int timeout_ms = 100;
898 if (!configured) {
899 git_config_get_int("core.filesreflocktimeout", &timeout_ms);
900 configured = 1;
903 return timeout_ms;
906 int refs_delete_ref(struct ref_store *refs, const char *msg,
907 const char *refname,
908 const struct object_id *old_oid,
909 unsigned int flags)
911 struct ref_transaction *transaction;
912 struct strbuf err = STRBUF_INIT;
914 transaction = ref_store_transaction_begin(refs, &err);
915 if (!transaction ||
916 ref_transaction_delete(transaction, refname, old_oid,
917 NULL, flags, msg, &err) ||
918 ref_transaction_commit(transaction, &err)) {
919 error("%s", err.buf);
920 ref_transaction_free(transaction);
921 strbuf_release(&err);
922 return 1;
924 ref_transaction_free(transaction);
925 strbuf_release(&err);
926 return 0;
929 static void copy_reflog_msg(struct strbuf *sb, const char *msg)
931 char c;
932 int wasspace = 1;
934 while ((c = *msg++)) {
935 if (wasspace && isspace(c))
936 continue;
937 wasspace = isspace(c);
938 if (wasspace)
939 c = ' ';
940 strbuf_addch(sb, c);
942 strbuf_rtrim(sb);
945 static char *normalize_reflog_message(const char *msg)
947 struct strbuf sb = STRBUF_INIT;
949 if (msg && *msg)
950 copy_reflog_msg(&sb, msg);
951 return strbuf_detach(&sb, NULL);
954 int should_autocreate_reflog(const char *refname)
956 switch (log_all_ref_updates) {
957 case LOG_REFS_ALWAYS:
958 return 1;
959 case LOG_REFS_NORMAL:
960 return starts_with(refname, "refs/heads/") ||
961 starts_with(refname, "refs/remotes/") ||
962 starts_with(refname, "refs/notes/") ||
963 !strcmp(refname, "HEAD");
964 default:
965 return 0;
969 int is_branch(const char *refname)
971 return !strcmp(refname, "HEAD") || starts_with(refname, "refs/heads/");
974 struct read_ref_at_cb {
975 const char *refname;
976 timestamp_t at_time;
977 int cnt;
978 int reccnt;
979 struct object_id *oid;
980 int found_it;
982 struct object_id ooid;
983 struct object_id noid;
984 int tz;
985 timestamp_t date;
986 char **msg;
987 timestamp_t *cutoff_time;
988 int *cutoff_tz;
989 int *cutoff_cnt;
992 static void set_read_ref_cutoffs(struct read_ref_at_cb *cb,
993 timestamp_t timestamp, int tz, const char *message)
995 if (cb->msg)
996 *cb->msg = xstrdup(message);
997 if (cb->cutoff_time)
998 *cb->cutoff_time = timestamp;
999 if (cb->cutoff_tz)
1000 *cb->cutoff_tz = tz;
1001 if (cb->cutoff_cnt)
1002 *cb->cutoff_cnt = cb->reccnt;
1005 static int read_ref_at_ent(struct object_id *ooid, struct object_id *noid,
1006 const char *email UNUSED,
1007 timestamp_t timestamp, int tz,
1008 const char *message, void *cb_data)
1010 struct read_ref_at_cb *cb = cb_data;
1012 cb->tz = tz;
1013 cb->date = timestamp;
1015 if (timestamp <= cb->at_time || cb->cnt == 0) {
1016 set_read_ref_cutoffs(cb, timestamp, tz, message);
1018 * we have not yet updated cb->[n|o]oid so they still
1019 * hold the values for the previous record.
1021 if (!is_null_oid(&cb->ooid)) {
1022 oidcpy(cb->oid, noid);
1023 if (!oideq(&cb->ooid, noid))
1024 warning(_("log for ref %s has gap after %s"),
1025 cb->refname, show_date(cb->date, cb->tz, DATE_MODE(RFC2822)));
1027 else if (cb->date == cb->at_time)
1028 oidcpy(cb->oid, noid);
1029 else if (!oideq(noid, cb->oid))
1030 warning(_("log for ref %s unexpectedly ended on %s"),
1031 cb->refname, show_date(cb->date, cb->tz,
1032 DATE_MODE(RFC2822)));
1033 cb->reccnt++;
1034 oidcpy(&cb->ooid, ooid);
1035 oidcpy(&cb->noid, noid);
1036 cb->found_it = 1;
1037 return 1;
1039 cb->reccnt++;
1040 oidcpy(&cb->ooid, ooid);
1041 oidcpy(&cb->noid, noid);
1042 if (cb->cnt > 0)
1043 cb->cnt--;
1044 return 0;
1047 static int read_ref_at_ent_oldest(struct object_id *ooid, struct object_id *noid,
1048 const char *email UNUSED,
1049 timestamp_t timestamp, int tz,
1050 const char *message, void *cb_data)
1052 struct read_ref_at_cb *cb = cb_data;
1054 set_read_ref_cutoffs(cb, timestamp, tz, message);
1055 oidcpy(cb->oid, ooid);
1056 if (cb->at_time && is_null_oid(cb->oid))
1057 oidcpy(cb->oid, noid);
1058 /* We just want the first entry */
1059 return 1;
1062 int read_ref_at(struct ref_store *refs, const char *refname,
1063 unsigned int flags, timestamp_t at_time, int cnt,
1064 struct object_id *oid, char **msg,
1065 timestamp_t *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
1067 struct read_ref_at_cb cb;
1069 memset(&cb, 0, sizeof(cb));
1070 cb.refname = refname;
1071 cb.at_time = at_time;
1072 cb.cnt = cnt;
1073 cb.msg = msg;
1074 cb.cutoff_time = cutoff_time;
1075 cb.cutoff_tz = cutoff_tz;
1076 cb.cutoff_cnt = cutoff_cnt;
1077 cb.oid = oid;
1079 refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent, &cb);
1081 if (!cb.reccnt) {
1082 if (cnt == 0) {
1084 * The caller asked for ref@{0}, and we had no entries.
1085 * It's a bit subtle, but in practice all callers have
1086 * prepped the "oid" field with the current value of
1087 * the ref, which is the most reasonable fallback.
1089 * We'll put dummy values into the out-parameters (so
1090 * they're not just uninitialized garbage), and the
1091 * caller can take our return value as a hint that
1092 * we did not find any such reflog.
1094 set_read_ref_cutoffs(&cb, 0, 0, "empty reflog");
1095 return 1;
1097 if (flags & GET_OID_QUIETLY)
1098 exit(128);
1099 else
1100 die(_("log for %s is empty"), refname);
1102 if (cb.found_it)
1103 return 0;
1105 refs_for_each_reflog_ent(refs, refname, read_ref_at_ent_oldest, &cb);
1107 return 1;
1110 struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
1111 struct strbuf *err)
1113 struct ref_transaction *tr;
1114 assert(err);
1116 CALLOC_ARRAY(tr, 1);
1117 tr->ref_store = refs;
1118 return tr;
1121 void ref_transaction_free(struct ref_transaction *transaction)
1123 size_t i;
1125 if (!transaction)
1126 return;
1128 switch (transaction->state) {
1129 case REF_TRANSACTION_OPEN:
1130 case REF_TRANSACTION_CLOSED:
1131 /* OK */
1132 break;
1133 case REF_TRANSACTION_PREPARED:
1134 BUG("free called on a prepared reference transaction");
1135 break;
1136 default:
1137 BUG("unexpected reference transaction state");
1138 break;
1141 for (i = 0; i < transaction->nr; i++) {
1142 free(transaction->updates[i]->msg);
1143 free((char *)transaction->updates[i]->new_target);
1144 free((char *)transaction->updates[i]->old_target);
1145 free(transaction->updates[i]);
1147 free(transaction->updates);
1148 free(transaction);
1151 struct ref_update *ref_transaction_add_update(
1152 struct ref_transaction *transaction,
1153 const char *refname, unsigned int flags,
1154 const struct object_id *new_oid,
1155 const struct object_id *old_oid,
1156 const char *new_target, const char *old_target,
1157 const char *msg)
1159 struct ref_update *update;
1161 if (transaction->state != REF_TRANSACTION_OPEN)
1162 BUG("update called for transaction that is not open");
1164 if (old_oid && old_target)
1165 BUG("only one of old_oid and old_target should be non NULL");
1166 if (new_oid && new_target)
1167 BUG("only one of new_oid and new_target should be non NULL");
1169 FLEX_ALLOC_STR(update, refname, refname);
1170 ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
1171 transaction->updates[transaction->nr++] = update;
1173 update->flags = flags;
1175 update->new_target = xstrdup_or_null(new_target);
1176 update->old_target = xstrdup_or_null(old_target);
1177 if ((flags & REF_HAVE_NEW) && new_oid)
1178 oidcpy(&update->new_oid, new_oid);
1179 if ((flags & REF_HAVE_OLD) && old_oid)
1180 oidcpy(&update->old_oid, old_oid);
1182 update->msg = normalize_reflog_message(msg);
1183 return update;
1186 int ref_transaction_update(struct ref_transaction *transaction,
1187 const char *refname,
1188 const struct object_id *new_oid,
1189 const struct object_id *old_oid,
1190 const char *new_target,
1191 const char *old_target,
1192 unsigned int flags, const char *msg,
1193 struct strbuf *err)
1195 assert(err);
1197 if ((flags & REF_FORCE_CREATE_REFLOG) &&
1198 (flags & REF_SKIP_CREATE_REFLOG)) {
1199 strbuf_addstr(err, _("refusing to force and skip creation of reflog"));
1200 return -1;
1203 if (!(flags & REF_SKIP_REFNAME_VERIFICATION) &&
1204 ((new_oid && !is_null_oid(new_oid)) ?
1205 check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
1206 !refname_is_safe(refname))) {
1207 strbuf_addf(err, _("refusing to update ref with bad name '%s'"),
1208 refname);
1209 return -1;
1212 if (!(flags & REF_SKIP_REFNAME_VERIFICATION) &&
1213 is_pseudo_ref(refname)) {
1214 strbuf_addf(err, _("refusing to update pseudoref '%s'"),
1215 refname);
1216 return -1;
1219 if (flags & ~REF_TRANSACTION_UPDATE_ALLOWED_FLAGS)
1220 BUG("illegal flags 0x%x passed to ref_transaction_update()", flags);
1223 * Clear flags outside the allowed set; this should be a noop because
1224 * of the BUG() check above, but it works around a -Wnonnull warning
1225 * with some versions of "gcc -O3".
1227 flags &= REF_TRANSACTION_UPDATE_ALLOWED_FLAGS;
1229 flags |= (new_oid ? REF_HAVE_NEW : 0) | (old_oid ? REF_HAVE_OLD : 0);
1230 flags |= (new_target ? REF_HAVE_NEW : 0) | (old_target ? REF_HAVE_OLD : 0);
1232 ref_transaction_add_update(transaction, refname, flags,
1233 new_oid, old_oid, new_target,
1234 old_target, msg);
1235 return 0;
1238 int ref_transaction_create(struct ref_transaction *transaction,
1239 const char *refname,
1240 const struct object_id *new_oid,
1241 const char *new_target,
1242 unsigned int flags, const char *msg,
1243 struct strbuf *err)
1245 if (new_oid && new_target)
1246 BUG("create called with both new_oid and new_target set");
1247 if ((!new_oid || is_null_oid(new_oid)) && !new_target) {
1248 strbuf_addf(err, "'%s' has neither a valid OID nor a target", refname);
1249 return 1;
1251 return ref_transaction_update(transaction, refname, new_oid,
1252 null_oid(), new_target, NULL, flags,
1253 msg, err);
1256 int ref_transaction_delete(struct ref_transaction *transaction,
1257 const char *refname,
1258 const struct object_id *old_oid,
1259 const char *old_target,
1260 unsigned int flags,
1261 const char *msg,
1262 struct strbuf *err)
1264 if (old_oid && is_null_oid(old_oid))
1265 BUG("delete called with old_oid set to zeros");
1266 if (old_oid && old_target)
1267 BUG("delete called with both old_oid and old_target set");
1268 if (old_target && !(flags & REF_NO_DEREF))
1269 BUG("delete cannot operate on symrefs with deref mode");
1270 return ref_transaction_update(transaction, refname,
1271 null_oid(), old_oid,
1272 NULL, old_target, flags,
1273 msg, err);
1276 int ref_transaction_verify(struct ref_transaction *transaction,
1277 const char *refname,
1278 const struct object_id *old_oid,
1279 const char *old_target,
1280 unsigned int flags,
1281 struct strbuf *err)
1283 if (!old_target && !old_oid)
1284 BUG("verify called with old_oid and old_target set to NULL");
1285 if (old_oid && old_target)
1286 BUG("verify called with both old_oid and old_target set");
1287 if (old_target && !(flags & REF_NO_DEREF))
1288 BUG("verify cannot operate on symrefs with deref mode");
1289 return ref_transaction_update(transaction, refname,
1290 NULL, old_oid,
1291 NULL, old_target,
1292 flags, NULL, err);
1295 int refs_update_ref(struct ref_store *refs, const char *msg,
1296 const char *refname, const struct object_id *new_oid,
1297 const struct object_id *old_oid, unsigned int flags,
1298 enum action_on_err onerr)
1300 struct ref_transaction *t = NULL;
1301 struct strbuf err = STRBUF_INIT;
1302 int ret = 0;
1304 t = ref_store_transaction_begin(refs, &err);
1305 if (!t ||
1306 ref_transaction_update(t, refname, new_oid, old_oid, NULL, NULL,
1307 flags, msg, &err) ||
1308 ref_transaction_commit(t, &err)) {
1309 ret = 1;
1310 ref_transaction_free(t);
1312 if (ret) {
1313 const char *str = _("update_ref failed for ref '%s': %s");
1315 switch (onerr) {
1316 case UPDATE_REFS_MSG_ON_ERR:
1317 error(str, refname, err.buf);
1318 break;
1319 case UPDATE_REFS_DIE_ON_ERR:
1320 die(str, refname, err.buf);
1321 break;
1322 case UPDATE_REFS_QUIET_ON_ERR:
1323 break;
1325 strbuf_release(&err);
1326 return 1;
1328 strbuf_release(&err);
1329 if (t)
1330 ref_transaction_free(t);
1331 return 0;
1335 * Check that the string refname matches a rule of the form
1336 * "{prefix}%.*s{suffix}". So "foo/bar/baz" would match the rule
1337 * "foo/%.*s/baz", and return the string "bar".
1339 static const char *match_parse_rule(const char *refname, const char *rule,
1340 size_t *len)
1343 * Check that rule matches refname up to the first percent in the rule.
1344 * We can bail immediately if not, but otherwise we leave "rule" at the
1345 * %-placeholder, and "refname" at the start of the potential matched
1346 * name.
1348 while (*rule != '%') {
1349 if (!*rule)
1350 BUG("rev-parse rule did not have percent");
1351 if (*refname++ != *rule++)
1352 return NULL;
1356 * Check that our "%" is the expected placeholder. This assumes there
1357 * are no other percents (placeholder or quoted) in the string, but
1358 * that is sufficient for our rev-parse rules.
1360 if (!skip_prefix(rule, "%.*s", &rule))
1361 return NULL;
1364 * And now check that our suffix (if any) matches.
1366 if (!strip_suffix(refname, rule, len))
1367 return NULL;
1369 return refname; /* len set by strip_suffix() */
1372 char *refs_shorten_unambiguous_ref(struct ref_store *refs,
1373 const char *refname, int strict)
1375 int i;
1376 struct strbuf resolved_buf = STRBUF_INIT;
1378 /* skip first rule, it will always match */
1379 for (i = NUM_REV_PARSE_RULES - 1; i > 0 ; --i) {
1380 int j;
1381 int rules_to_fail = i;
1382 const char *short_name;
1383 size_t short_name_len;
1385 short_name = match_parse_rule(refname, ref_rev_parse_rules[i],
1386 &short_name_len);
1387 if (!short_name)
1388 continue;
1391 * in strict mode, all (except the matched one) rules
1392 * must fail to resolve to a valid non-ambiguous ref
1394 if (strict)
1395 rules_to_fail = NUM_REV_PARSE_RULES;
1398 * check if the short name resolves to a valid ref,
1399 * but use only rules prior to the matched one
1401 for (j = 0; j < rules_to_fail; j++) {
1402 const char *rule = ref_rev_parse_rules[j];
1404 /* skip matched rule */
1405 if (i == j)
1406 continue;
1409 * the short name is ambiguous, if it resolves
1410 * (with this previous rule) to a valid ref
1411 * read_ref() returns 0 on success
1413 strbuf_reset(&resolved_buf);
1414 strbuf_addf(&resolved_buf, rule,
1415 cast_size_t_to_int(short_name_len),
1416 short_name);
1417 if (refs_ref_exists(refs, resolved_buf.buf))
1418 break;
1422 * short name is non-ambiguous if all previous rules
1423 * haven't resolved to a valid ref
1425 if (j == rules_to_fail) {
1426 strbuf_release(&resolved_buf);
1427 return xmemdupz(short_name, short_name_len);
1431 strbuf_release(&resolved_buf);
1432 return xstrdup(refname);
1435 int parse_hide_refs_config(const char *var, const char *value, const char *section,
1436 struct strvec *hide_refs)
1438 const char *key;
1439 if (!strcmp("transfer.hiderefs", var) ||
1440 (!parse_config_key(var, section, NULL, NULL, &key) &&
1441 !strcmp(key, "hiderefs"))) {
1442 char *ref;
1443 int len;
1445 if (!value)
1446 return config_error_nonbool(var);
1448 /* drop const to remove trailing '/' characters */
1449 ref = (char *)strvec_push(hide_refs, value);
1450 len = strlen(ref);
1451 while (len && ref[len - 1] == '/')
1452 ref[--len] = '\0';
1454 return 0;
1457 int ref_is_hidden(const char *refname, const char *refname_full,
1458 const struct strvec *hide_refs)
1460 int i;
1462 for (i = hide_refs->nr - 1; i >= 0; i--) {
1463 const char *match = hide_refs->v[i];
1464 const char *subject;
1465 int neg = 0;
1466 const char *p;
1468 if (*match == '!') {
1469 neg = 1;
1470 match++;
1473 if (*match == '^') {
1474 subject = refname_full;
1475 match++;
1476 } else {
1477 subject = refname;
1480 /* refname can be NULL when namespaces are used. */
1481 if (subject &&
1482 skip_prefix(subject, match, &p) &&
1483 (!*p || *p == '/'))
1484 return !neg;
1486 return 0;
1489 const char **hidden_refs_to_excludes(const struct strvec *hide_refs)
1491 const char **pattern;
1492 for (pattern = hide_refs->v; *pattern; pattern++) {
1494 * We can't feed any excludes from hidden refs config
1495 * sections, since later rules may override previous
1496 * ones. For example, with rules "refs/foo" and
1497 * "!refs/foo/bar", we should show "refs/foo/bar" (and
1498 * everything underneath it), but the earlier exclusion
1499 * would cause us to skip all of "refs/foo". We
1500 * likewise don't implement the namespace stripping
1501 * required for '^' rules.
1503 * Both are possible to do, but complicated, so avoid
1504 * populating the jump list at all if we see either of
1505 * these patterns.
1507 if (**pattern == '!' || **pattern == '^')
1508 return NULL;
1510 return hide_refs->v;
1513 const char *find_descendant_ref(const char *dirname,
1514 const struct string_list *extras,
1515 const struct string_list *skip)
1517 int pos;
1519 if (!extras)
1520 return NULL;
1523 * Look at the place where dirname would be inserted into
1524 * extras. If there is an entry at that position that starts
1525 * with dirname (remember, dirname includes the trailing
1526 * slash) and is not in skip, then we have a conflict.
1528 for (pos = string_list_find_insert_index(extras, dirname, 0);
1529 pos < extras->nr; pos++) {
1530 const char *extra_refname = extras->items[pos].string;
1532 if (!starts_with(extra_refname, dirname))
1533 break;
1535 if (!skip || !string_list_has_string(skip, extra_refname))
1536 return extra_refname;
1538 return NULL;
1541 int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1543 struct object_id oid;
1544 int flag;
1546 if (refs_resolve_ref_unsafe(refs, "HEAD", RESOLVE_REF_READING,
1547 &oid, &flag))
1548 return fn("HEAD", &oid, flag, cb_data);
1550 return 0;
1553 struct ref_iterator *refs_ref_iterator_begin(
1554 struct ref_store *refs,
1555 const char *prefix,
1556 const char **exclude_patterns,
1557 int trim,
1558 enum do_for_each_ref_flags flags)
1560 struct ref_iterator *iter;
1562 if (!(flags & DO_FOR_EACH_INCLUDE_BROKEN)) {
1563 static int ref_paranoia = -1;
1565 if (ref_paranoia < 0)
1566 ref_paranoia = git_env_bool("GIT_REF_PARANOIA", 1);
1567 if (ref_paranoia) {
1568 flags |= DO_FOR_EACH_INCLUDE_BROKEN;
1569 flags |= DO_FOR_EACH_OMIT_DANGLING_SYMREFS;
1573 iter = refs->be->iterator_begin(refs, prefix, exclude_patterns, flags);
1575 * `iterator_begin()` already takes care of prefix, but we
1576 * might need to do some trimming:
1578 if (trim)
1579 iter = prefix_ref_iterator_begin(iter, "", trim);
1581 return iter;
1584 static int do_for_each_ref(struct ref_store *refs, const char *prefix,
1585 const char **exclude_patterns,
1586 each_ref_fn fn, int trim,
1587 enum do_for_each_ref_flags flags, void *cb_data)
1589 struct ref_iterator *iter;
1591 if (!refs)
1592 return 0;
1594 iter = refs_ref_iterator_begin(refs, prefix, exclude_patterns, trim,
1595 flags);
1597 return do_for_each_ref_iterator(iter, fn, cb_data);
1600 int refs_for_each_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1602 return do_for_each_ref(refs, "", NULL, fn, 0, 0, cb_data);
1605 int refs_for_each_ref_in(struct ref_store *refs, const char *prefix,
1606 each_ref_fn fn, void *cb_data)
1608 return do_for_each_ref(refs, prefix, NULL, fn, strlen(prefix), 0, cb_data);
1611 int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix,
1612 const char **exclude_patterns,
1613 each_ref_fn fn, void *cb_data)
1615 return do_for_each_ref(refs, prefix, exclude_patterns, fn, 0, 0, cb_data);
1618 int refs_for_each_replace_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1620 const char *git_replace_ref_base = ref_namespace[NAMESPACE_REPLACE].ref;
1621 return do_for_each_ref(refs, git_replace_ref_base, NULL, fn,
1622 strlen(git_replace_ref_base),
1623 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1626 int refs_for_each_namespaced_ref(struct ref_store *refs,
1627 const char **exclude_patterns,
1628 each_ref_fn fn, void *cb_data)
1630 struct strbuf buf = STRBUF_INIT;
1631 int ret;
1632 strbuf_addf(&buf, "%srefs/", get_git_namespace());
1633 ret = do_for_each_ref(refs, buf.buf, exclude_patterns, fn, 0, 0, cb_data);
1634 strbuf_release(&buf);
1635 return ret;
1638 int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1640 return do_for_each_ref(refs, "", NULL, fn, 0,
1641 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1644 int refs_for_each_include_root_refs(struct ref_store *refs, each_ref_fn fn,
1645 void *cb_data)
1647 return do_for_each_ref(refs, "", NULL, fn, 0,
1648 DO_FOR_EACH_INCLUDE_ROOT_REFS, cb_data);
1651 static int qsort_strcmp(const void *va, const void *vb)
1653 const char *a = *(const char **)va;
1654 const char *b = *(const char **)vb;
1656 return strcmp(a, b);
1659 static void find_longest_prefixes_1(struct string_list *out,
1660 struct strbuf *prefix,
1661 const char **patterns, size_t nr)
1663 size_t i;
1665 for (i = 0; i < nr; i++) {
1666 char c = patterns[i][prefix->len];
1667 if (!c || is_glob_special(c)) {
1668 string_list_append(out, prefix->buf);
1669 return;
1673 i = 0;
1674 while (i < nr) {
1675 size_t end;
1678 * Set "end" to the index of the element _after_ the last one
1679 * in our group.
1681 for (end = i + 1; end < nr; end++) {
1682 if (patterns[i][prefix->len] != patterns[end][prefix->len])
1683 break;
1686 strbuf_addch(prefix, patterns[i][prefix->len]);
1687 find_longest_prefixes_1(out, prefix, patterns + i, end - i);
1688 strbuf_setlen(prefix, prefix->len - 1);
1690 i = end;
1694 static void find_longest_prefixes(struct string_list *out,
1695 const char **patterns)
1697 struct strvec sorted = STRVEC_INIT;
1698 struct strbuf prefix = STRBUF_INIT;
1700 strvec_pushv(&sorted, patterns);
1701 QSORT(sorted.v, sorted.nr, qsort_strcmp);
1703 find_longest_prefixes_1(out, &prefix, sorted.v, sorted.nr);
1705 strvec_clear(&sorted);
1706 strbuf_release(&prefix);
1709 int refs_for_each_fullref_in_prefixes(struct ref_store *ref_store,
1710 const char *namespace,
1711 const char **patterns,
1712 const char **exclude_patterns,
1713 each_ref_fn fn, void *cb_data)
1715 struct string_list prefixes = STRING_LIST_INIT_DUP;
1716 struct string_list_item *prefix;
1717 struct strbuf buf = STRBUF_INIT;
1718 int ret = 0, namespace_len;
1720 find_longest_prefixes(&prefixes, patterns);
1722 if (namespace)
1723 strbuf_addstr(&buf, namespace);
1724 namespace_len = buf.len;
1726 for_each_string_list_item(prefix, &prefixes) {
1727 strbuf_addstr(&buf, prefix->string);
1728 ret = refs_for_each_fullref_in(ref_store, buf.buf,
1729 exclude_patterns, fn, cb_data);
1730 if (ret)
1731 break;
1732 strbuf_setlen(&buf, namespace_len);
1735 string_list_clear(&prefixes, 0);
1736 strbuf_release(&buf);
1737 return ret;
1740 static int refs_read_special_head(struct ref_store *ref_store,
1741 const char *refname, struct object_id *oid,
1742 struct strbuf *referent, unsigned int *type,
1743 int *failure_errno)
1745 struct strbuf full_path = STRBUF_INIT;
1746 struct strbuf content = STRBUF_INIT;
1747 int result = -1;
1748 strbuf_addf(&full_path, "%s/%s", ref_store->gitdir, refname);
1750 if (strbuf_read_file(&content, full_path.buf, 0) < 0) {
1751 *failure_errno = errno;
1752 goto done;
1755 result = parse_loose_ref_contents(content.buf, oid, referent, type,
1756 failure_errno);
1758 done:
1759 strbuf_release(&full_path);
1760 strbuf_release(&content);
1761 return result;
1764 int refs_read_raw_ref(struct ref_store *ref_store, const char *refname,
1765 struct object_id *oid, struct strbuf *referent,
1766 unsigned int *type, int *failure_errno)
1768 assert(failure_errno);
1769 if (is_pseudo_ref(refname))
1770 return refs_read_special_head(ref_store, refname, oid, referent,
1771 type, failure_errno);
1773 return ref_store->be->read_raw_ref(ref_store, refname, oid, referent,
1774 type, failure_errno);
1777 int refs_read_symbolic_ref(struct ref_store *ref_store, const char *refname,
1778 struct strbuf *referent)
1780 return ref_store->be->read_symbolic_ref(ref_store, refname, referent);
1783 const char *refs_resolve_ref_unsafe(struct ref_store *refs,
1784 const char *refname,
1785 int resolve_flags,
1786 struct object_id *oid,
1787 int *flags)
1789 static struct strbuf sb_refname = STRBUF_INIT;
1790 struct object_id unused_oid;
1791 int unused_flags;
1792 int symref_count;
1794 if (!oid)
1795 oid = &unused_oid;
1796 if (!flags)
1797 flags = &unused_flags;
1799 *flags = 0;
1801 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1802 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1803 !refname_is_safe(refname))
1804 return NULL;
1807 * repo_dwim_ref() uses REF_ISBROKEN to distinguish between
1808 * missing refs and refs that were present but invalid,
1809 * to complain about the latter to stderr.
1811 * We don't know whether the ref exists, so don't set
1812 * REF_ISBROKEN yet.
1814 *flags |= REF_BAD_NAME;
1817 for (symref_count = 0; symref_count < SYMREF_MAXDEPTH; symref_count++) {
1818 unsigned int read_flags = 0;
1819 int failure_errno;
1821 if (refs_read_raw_ref(refs, refname, oid, &sb_refname,
1822 &read_flags, &failure_errno)) {
1823 *flags |= read_flags;
1825 /* In reading mode, refs must eventually resolve */
1826 if (resolve_flags & RESOLVE_REF_READING)
1827 return NULL;
1830 * Otherwise a missing ref is OK. But the files backend
1831 * may show errors besides ENOENT if there are
1832 * similarly-named refs.
1834 if (failure_errno != ENOENT &&
1835 failure_errno != EISDIR &&
1836 failure_errno != ENOTDIR)
1837 return NULL;
1839 oidclr(oid);
1840 if (*flags & REF_BAD_NAME)
1841 *flags |= REF_ISBROKEN;
1842 return refname;
1845 *flags |= read_flags;
1847 if (!(read_flags & REF_ISSYMREF)) {
1848 if (*flags & REF_BAD_NAME) {
1849 oidclr(oid);
1850 *flags |= REF_ISBROKEN;
1852 return refname;
1855 refname = sb_refname.buf;
1856 if (resolve_flags & RESOLVE_REF_NO_RECURSE) {
1857 oidclr(oid);
1858 return refname;
1860 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1861 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1862 !refname_is_safe(refname))
1863 return NULL;
1865 *flags |= REF_ISBROKEN | REF_BAD_NAME;
1869 return NULL;
1872 /* backend functions */
1873 int ref_store_create_on_disk(struct ref_store *refs, int flags, struct strbuf *err)
1875 return refs->be->create_on_disk(refs, flags, err);
1878 int ref_store_remove_on_disk(struct ref_store *refs, struct strbuf *err)
1880 return refs->be->remove_on_disk(refs, err);
1883 int repo_resolve_gitlink_ref(struct repository *r,
1884 const char *submodule, const char *refname,
1885 struct object_id *oid)
1887 struct ref_store *refs;
1888 int flags;
1890 refs = repo_get_submodule_ref_store(r, submodule);
1891 if (!refs)
1892 return -1;
1894 if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &flags) ||
1895 is_null_oid(oid))
1896 return -1;
1897 return 0;
1901 * Look up a ref store by name. If that ref_store hasn't been
1902 * registered yet, return NULL.
1904 static struct ref_store *lookup_ref_store_map(struct strmap *map,
1905 const char *name)
1907 struct strmap_entry *entry;
1909 if (!map->map.tablesize)
1910 /* It's initialized on demand in register_ref_store(). */
1911 return NULL;
1913 entry = strmap_get_entry(map, name);
1914 return entry ? entry->value : NULL;
1918 * Create, record, and return a ref_store instance for the specified
1919 * gitdir using the given ref storage format.
1921 static struct ref_store *ref_store_init(struct repository *repo,
1922 enum ref_storage_format format,
1923 const char *gitdir,
1924 unsigned int flags)
1926 const struct ref_storage_be *be;
1927 struct ref_store *refs;
1929 be = find_ref_storage_backend(format);
1930 if (!be)
1931 BUG("reference backend is unknown");
1933 refs = be->init(repo, gitdir, flags);
1934 return refs;
1937 void ref_store_release(struct ref_store *ref_store)
1939 ref_store->be->release(ref_store);
1940 free(ref_store->gitdir);
1943 struct ref_store *get_main_ref_store(struct repository *r)
1945 if (r->refs_private)
1946 return r->refs_private;
1948 if (!r->gitdir)
1949 BUG("attempting to get main_ref_store outside of repository");
1951 r->refs_private = ref_store_init(r, r->ref_storage_format,
1952 r->gitdir, REF_STORE_ALL_CAPS);
1953 r->refs_private = maybe_debug_wrap_ref_store(r->gitdir, r->refs_private);
1954 return r->refs_private;
1958 * Associate a ref store with a name. It is a fatal error to call this
1959 * function twice for the same name.
1961 static void register_ref_store_map(struct strmap *map,
1962 const char *type,
1963 struct ref_store *refs,
1964 const char *name)
1966 if (!map->map.tablesize)
1967 strmap_init(map);
1968 if (strmap_put(map, name, refs))
1969 BUG("%s ref_store '%s' initialized twice", type, name);
1972 struct ref_store *repo_get_submodule_ref_store(struct repository *repo,
1973 const char *submodule)
1975 struct strbuf submodule_sb = STRBUF_INIT;
1976 struct ref_store *refs;
1977 char *to_free = NULL;
1978 size_t len;
1979 struct repository *subrepo;
1981 if (!submodule)
1982 return NULL;
1984 len = strlen(submodule);
1985 while (len && is_dir_sep(submodule[len - 1]))
1986 len--;
1987 if (!len)
1988 return NULL;
1990 if (submodule[len])
1991 /* We need to strip off one or more trailing slashes */
1992 submodule = to_free = xmemdupz(submodule, len);
1994 refs = lookup_ref_store_map(&repo->submodule_ref_stores, submodule);
1995 if (refs)
1996 goto done;
1998 strbuf_addstr(&submodule_sb, submodule);
1999 if (!is_nonbare_repository_dir(&submodule_sb))
2000 goto done;
2002 if (submodule_to_gitdir(&submodule_sb, submodule))
2003 goto done;
2005 subrepo = xmalloc(sizeof(*subrepo));
2007 if (repo_submodule_init(subrepo, repo, submodule,
2008 null_oid())) {
2009 free(subrepo);
2010 goto done;
2012 refs = ref_store_init(subrepo, the_repository->ref_storage_format,
2013 submodule_sb.buf,
2014 REF_STORE_READ | REF_STORE_ODB);
2015 register_ref_store_map(&repo->submodule_ref_stores, "submodule",
2016 refs, submodule);
2018 done:
2019 strbuf_release(&submodule_sb);
2020 free(to_free);
2022 return refs;
2025 struct ref_store *get_worktree_ref_store(const struct worktree *wt)
2027 struct ref_store *refs;
2028 const char *id;
2030 if (wt->is_current)
2031 return get_main_ref_store(wt->repo);
2033 id = wt->id ? wt->id : "/";
2034 refs = lookup_ref_store_map(&wt->repo->worktree_ref_stores, id);
2035 if (refs)
2036 return refs;
2038 if (wt->id) {
2039 struct strbuf common_path = STRBUF_INIT;
2040 strbuf_git_common_path(&common_path, wt->repo,
2041 "worktrees/%s", wt->id);
2042 refs = ref_store_init(wt->repo, wt->repo->ref_storage_format,
2043 common_path.buf, REF_STORE_ALL_CAPS);
2044 strbuf_release(&common_path);
2045 } else {
2046 refs = ref_store_init(wt->repo, the_repository->ref_storage_format,
2047 wt->repo->commondir, REF_STORE_ALL_CAPS);
2050 if (refs)
2051 register_ref_store_map(&wt->repo->worktree_ref_stores,
2052 "worktree", refs, id);
2054 return refs;
2057 void base_ref_store_init(struct ref_store *refs, struct repository *repo,
2058 const char *path, const struct ref_storage_be *be)
2060 refs->be = be;
2061 refs->repo = repo;
2062 refs->gitdir = xstrdup(path);
2065 /* backend functions */
2066 int refs_pack_refs(struct ref_store *refs, struct pack_refs_opts *opts)
2068 return refs->be->pack_refs(refs, opts);
2071 int peel_iterated_oid(struct repository *r, const struct object_id *base, struct object_id *peeled)
2073 if (current_ref_iter &&
2074 (current_ref_iter->oid == base ||
2075 oideq(current_ref_iter->oid, base)))
2076 return ref_iterator_peel(current_ref_iter, peeled);
2078 return peel_object(r, base, peeled) ? -1 : 0;
2081 int refs_update_symref(struct ref_store *refs, const char *ref,
2082 const char *target, const char *logmsg)
2084 struct ref_transaction *transaction;
2085 struct strbuf err = STRBUF_INIT;
2086 int ret = 0;
2088 transaction = ref_store_transaction_begin(refs, &err);
2089 if (!transaction ||
2090 ref_transaction_update(transaction, ref, NULL, NULL,
2091 target, NULL, REF_NO_DEREF,
2092 logmsg, &err) ||
2093 ref_transaction_commit(transaction, &err)) {
2094 ret = error("%s", err.buf);
2097 strbuf_release(&err);
2098 if (transaction)
2099 ref_transaction_free(transaction);
2101 return ret;
2104 int ref_update_reject_duplicates(struct string_list *refnames,
2105 struct strbuf *err)
2107 size_t i, n = refnames->nr;
2109 assert(err);
2111 for (i = 1; i < n; i++) {
2112 int cmp = strcmp(refnames->items[i - 1].string,
2113 refnames->items[i].string);
2115 if (!cmp) {
2116 strbuf_addf(err,
2117 _("multiple updates for ref '%s' not allowed"),
2118 refnames->items[i].string);
2119 return 1;
2120 } else if (cmp > 0) {
2121 BUG("ref_update_reject_duplicates() received unsorted list");
2124 return 0;
2127 static int run_transaction_hook(struct ref_transaction *transaction,
2128 const char *state)
2130 struct child_process proc = CHILD_PROCESS_INIT;
2131 struct strbuf buf = STRBUF_INIT;
2132 const char *hook;
2133 int ret = 0, i;
2135 hook = find_hook("reference-transaction");
2136 if (!hook)
2137 return ret;
2139 strvec_pushl(&proc.args, hook, state, NULL);
2140 proc.in = -1;
2141 proc.stdout_to_stderr = 1;
2142 proc.trace2_hook_name = "reference-transaction";
2144 ret = start_command(&proc);
2145 if (ret)
2146 return ret;
2148 sigchain_push(SIGPIPE, SIG_IGN);
2150 for (i = 0; i < transaction->nr; i++) {
2151 struct ref_update *update = transaction->updates[i];
2153 strbuf_reset(&buf);
2155 if (!(update->flags & REF_HAVE_OLD))
2156 strbuf_addf(&buf, "%s ", oid_to_hex(null_oid()));
2157 else if (update->old_target)
2158 strbuf_addf(&buf, "ref:%s ", update->old_target);
2159 else
2160 strbuf_addf(&buf, "%s ", oid_to_hex(&update->old_oid));
2162 if (!(update->flags & REF_HAVE_NEW))
2163 strbuf_addf(&buf, "%s ", oid_to_hex(null_oid()));
2164 else if (update->new_target)
2165 strbuf_addf(&buf, "ref:%s ", update->new_target);
2166 else
2167 strbuf_addf(&buf, "%s ", oid_to_hex(&update->new_oid));
2169 strbuf_addf(&buf, "%s\n", update->refname);
2171 if (write_in_full(proc.in, buf.buf, buf.len) < 0) {
2172 if (errno != EPIPE) {
2173 /* Don't leak errno outside this API */
2174 errno = 0;
2175 ret = -1;
2177 break;
2181 close(proc.in);
2182 sigchain_pop(SIGPIPE);
2183 strbuf_release(&buf);
2185 ret |= finish_command(&proc);
2186 return ret;
2189 int ref_transaction_prepare(struct ref_transaction *transaction,
2190 struct strbuf *err)
2192 struct ref_store *refs = transaction->ref_store;
2193 int ret;
2195 switch (transaction->state) {
2196 case REF_TRANSACTION_OPEN:
2197 /* Good. */
2198 break;
2199 case REF_TRANSACTION_PREPARED:
2200 BUG("prepare called twice on reference transaction");
2201 break;
2202 case REF_TRANSACTION_CLOSED:
2203 BUG("prepare called on a closed reference transaction");
2204 break;
2205 default:
2206 BUG("unexpected reference transaction state");
2207 break;
2210 if (refs->repo->objects->odb->disable_ref_updates) {
2211 strbuf_addstr(err,
2212 _("ref updates forbidden inside quarantine environment"));
2213 return -1;
2216 ret = refs->be->transaction_prepare(refs, transaction, err);
2217 if (ret)
2218 return ret;
2220 ret = run_transaction_hook(transaction, "prepared");
2221 if (ret) {
2222 ref_transaction_abort(transaction, err);
2223 die(_("ref updates aborted by hook"));
2226 return 0;
2229 int ref_transaction_abort(struct ref_transaction *transaction,
2230 struct strbuf *err)
2232 struct ref_store *refs = transaction->ref_store;
2233 int ret = 0;
2235 switch (transaction->state) {
2236 case REF_TRANSACTION_OPEN:
2237 /* No need to abort explicitly. */
2238 break;
2239 case REF_TRANSACTION_PREPARED:
2240 ret = refs->be->transaction_abort(refs, transaction, err);
2241 break;
2242 case REF_TRANSACTION_CLOSED:
2243 BUG("abort called on a closed reference transaction");
2244 break;
2245 default:
2246 BUG("unexpected reference transaction state");
2247 break;
2250 run_transaction_hook(transaction, "aborted");
2252 ref_transaction_free(transaction);
2253 return ret;
2256 int ref_transaction_commit(struct ref_transaction *transaction,
2257 struct strbuf *err)
2259 struct ref_store *refs = transaction->ref_store;
2260 int ret;
2262 switch (transaction->state) {
2263 case REF_TRANSACTION_OPEN:
2264 /* Need to prepare first. */
2265 ret = ref_transaction_prepare(transaction, err);
2266 if (ret)
2267 return ret;
2268 break;
2269 case REF_TRANSACTION_PREPARED:
2270 /* Fall through to finish. */
2271 break;
2272 case REF_TRANSACTION_CLOSED:
2273 BUG("commit called on a closed reference transaction");
2274 break;
2275 default:
2276 BUG("unexpected reference transaction state");
2277 break;
2280 ret = refs->be->transaction_finish(refs, transaction, err);
2281 if (!ret)
2282 run_transaction_hook(transaction, "committed");
2283 return ret;
2286 int refs_verify_refname_available(struct ref_store *refs,
2287 const char *refname,
2288 const struct string_list *extras,
2289 const struct string_list *skip,
2290 struct strbuf *err)
2292 const char *slash;
2293 const char *extra_refname;
2294 struct strbuf dirname = STRBUF_INIT;
2295 struct strbuf referent = STRBUF_INIT;
2296 struct object_id oid;
2297 unsigned int type;
2298 struct ref_iterator *iter;
2299 int ok;
2300 int ret = -1;
2303 * For the sake of comments in this function, suppose that
2304 * refname is "refs/foo/bar".
2307 assert(err);
2309 strbuf_grow(&dirname, strlen(refname) + 1);
2310 for (slash = strchr(refname, '/'); slash; slash = strchr(slash + 1, '/')) {
2312 * Just saying "Is a directory" when we e.g. can't
2313 * lock some multi-level ref isn't very informative,
2314 * the user won't be told *what* is a directory, so
2315 * let's not use strerror() below.
2317 int ignore_errno;
2318 /* Expand dirname to the new prefix, not including the trailing slash: */
2319 strbuf_add(&dirname, refname + dirname.len, slash - refname - dirname.len);
2322 * We are still at a leading dir of the refname (e.g.,
2323 * "refs/foo"; if there is a reference with that name,
2324 * it is a conflict, *unless* it is in skip.
2326 if (skip && string_list_has_string(skip, dirname.buf))
2327 continue;
2329 if (!refs_read_raw_ref(refs, dirname.buf, &oid, &referent,
2330 &type, &ignore_errno)) {
2331 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2332 dirname.buf, refname);
2333 goto cleanup;
2336 if (extras && string_list_has_string(extras, dirname.buf)) {
2337 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2338 refname, dirname.buf);
2339 goto cleanup;
2344 * We are at the leaf of our refname (e.g., "refs/foo/bar").
2345 * There is no point in searching for a reference with that
2346 * name, because a refname isn't considered to conflict with
2347 * itself. But we still need to check for references whose
2348 * names are in the "refs/foo/bar/" namespace, because they
2349 * *do* conflict.
2351 strbuf_addstr(&dirname, refname + dirname.len);
2352 strbuf_addch(&dirname, '/');
2354 iter = refs_ref_iterator_begin(refs, dirname.buf, NULL, 0,
2355 DO_FOR_EACH_INCLUDE_BROKEN);
2356 while ((ok = ref_iterator_advance(iter)) == ITER_OK) {
2357 if (skip &&
2358 string_list_has_string(skip, iter->refname))
2359 continue;
2361 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2362 iter->refname, refname);
2363 ref_iterator_abort(iter);
2364 goto cleanup;
2367 if (ok != ITER_DONE)
2368 BUG("error while iterating over references");
2370 extra_refname = find_descendant_ref(dirname.buf, extras, skip);
2371 if (extra_refname)
2372 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2373 refname, extra_refname);
2374 else
2375 ret = 0;
2377 cleanup:
2378 strbuf_release(&referent);
2379 strbuf_release(&dirname);
2380 return ret;
2383 struct do_for_each_reflog_help {
2384 each_reflog_fn *fn;
2385 void *cb_data;
2388 static int do_for_each_reflog_helper(const char *refname,
2389 const struct object_id *oid UNUSED,
2390 int flags,
2391 void *cb_data)
2393 struct do_for_each_reflog_help *hp = cb_data;
2394 return hp->fn(refname, hp->cb_data);
2397 int refs_for_each_reflog(struct ref_store *refs, each_reflog_fn fn, void *cb_data)
2399 struct ref_iterator *iter;
2400 struct do_for_each_reflog_help hp = { fn, cb_data };
2402 iter = refs->be->reflog_iterator_begin(refs);
2404 return do_for_each_ref_iterator(iter, do_for_each_reflog_helper, &hp);
2407 int refs_for_each_reflog_ent_reverse(struct ref_store *refs,
2408 const char *refname,
2409 each_reflog_ent_fn fn,
2410 void *cb_data)
2412 return refs->be->for_each_reflog_ent_reverse(refs, refname,
2413 fn, cb_data);
2416 int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname,
2417 each_reflog_ent_fn fn, void *cb_data)
2419 return refs->be->for_each_reflog_ent(refs, refname, fn, cb_data);
2422 int refs_reflog_exists(struct ref_store *refs, const char *refname)
2424 return refs->be->reflog_exists(refs, refname);
2427 int refs_create_reflog(struct ref_store *refs, const char *refname,
2428 struct strbuf *err)
2430 return refs->be->create_reflog(refs, refname, err);
2433 int refs_delete_reflog(struct ref_store *refs, const char *refname)
2435 return refs->be->delete_reflog(refs, refname);
2438 int refs_reflog_expire(struct ref_store *refs,
2439 const char *refname,
2440 unsigned int flags,
2441 reflog_expiry_prepare_fn prepare_fn,
2442 reflog_expiry_should_prune_fn should_prune_fn,
2443 reflog_expiry_cleanup_fn cleanup_fn,
2444 void *policy_cb_data)
2446 return refs->be->reflog_expire(refs, refname, flags,
2447 prepare_fn, should_prune_fn,
2448 cleanup_fn, policy_cb_data);
2451 int initial_ref_transaction_commit(struct ref_transaction *transaction,
2452 struct strbuf *err)
2454 struct ref_store *refs = transaction->ref_store;
2456 return refs->be->initial_transaction_commit(refs, transaction, err);
2459 void ref_transaction_for_each_queued_update(struct ref_transaction *transaction,
2460 ref_transaction_for_each_queued_update_fn cb,
2461 void *cb_data)
2463 int i;
2465 for (i = 0; i < transaction->nr; i++) {
2466 struct ref_update *update = transaction->updates[i];
2468 cb(update->refname,
2469 (update->flags & REF_HAVE_OLD) ? &update->old_oid : NULL,
2470 (update->flags & REF_HAVE_NEW) ? &update->new_oid : NULL,
2471 cb_data);
2475 int refs_delete_refs(struct ref_store *refs, const char *logmsg,
2476 struct string_list *refnames, unsigned int flags)
2478 struct ref_transaction *transaction;
2479 struct strbuf err = STRBUF_INIT;
2480 struct string_list_item *item;
2481 int ret = 0, failures = 0;
2482 char *msg;
2484 if (!refnames->nr)
2485 return 0;
2487 msg = normalize_reflog_message(logmsg);
2490 * Since we don't check the references' old_oids, the
2491 * individual updates can't fail, so we can pack all of the
2492 * updates into a single transaction.
2494 transaction = ref_store_transaction_begin(refs, &err);
2495 if (!transaction) {
2496 ret = error("%s", err.buf);
2497 goto out;
2500 for_each_string_list_item(item, refnames) {
2501 ret = ref_transaction_delete(transaction, item->string,
2502 NULL, NULL, flags, msg, &err);
2503 if (ret) {
2504 warning(_("could not delete reference %s: %s"),
2505 item->string, err.buf);
2506 strbuf_reset(&err);
2507 failures = 1;
2511 ret = ref_transaction_commit(transaction, &err);
2512 if (ret) {
2513 if (refnames->nr == 1)
2514 error(_("could not delete reference %s: %s"),
2515 refnames->items[0].string, err.buf);
2516 else
2517 error(_("could not delete references: %s"), err.buf);
2520 out:
2521 if (!ret && failures)
2522 ret = -1;
2523 ref_transaction_free(transaction);
2524 strbuf_release(&err);
2525 free(msg);
2526 return ret;
2529 int refs_rename_ref(struct ref_store *refs, const char *oldref,
2530 const char *newref, const char *logmsg)
2532 char *msg;
2533 int retval;
2535 msg = normalize_reflog_message(logmsg);
2536 retval = refs->be->rename_ref(refs, oldref, newref, msg);
2537 free(msg);
2538 return retval;
2541 int refs_copy_existing_ref(struct ref_store *refs, const char *oldref,
2542 const char *newref, const char *logmsg)
2544 char *msg;
2545 int retval;
2547 msg = normalize_reflog_message(logmsg);
2548 retval = refs->be->copy_ref(refs, oldref, newref, msg);
2549 free(msg);
2550 return retval;
2553 const char *ref_update_original_update_refname(struct ref_update *update)
2555 while (update->parent_update)
2556 update = update->parent_update;
2558 return update->refname;
2561 int ref_update_has_null_new_value(struct ref_update *update)
2563 return !update->new_target && is_null_oid(&update->new_oid);
2566 int ref_update_check_old_target(const char *referent, struct ref_update *update,
2567 struct strbuf *err)
2569 if (!update->old_target)
2570 BUG("called without old_target set");
2572 if (!strcmp(referent, update->old_target))
2573 return 0;
2575 if (!strcmp(referent, ""))
2576 strbuf_addf(err, "verifying symref target: '%s': "
2577 "reference is missing but expected %s",
2578 ref_update_original_update_refname(update),
2579 update->old_target);
2580 else
2581 strbuf_addf(err, "verifying symref target: '%s': "
2582 "is at %s but expected %s",
2583 ref_update_original_update_refname(update),
2584 referent, update->old_target);
2585 return -1;
2588 struct migration_data {
2589 struct ref_store *old_refs;
2590 struct ref_transaction *transaction;
2591 struct strbuf *errbuf;
2594 static int migrate_one_ref(const char *refname, const struct object_id *oid,
2595 int flags, void *cb_data)
2597 struct migration_data *data = cb_data;
2598 struct strbuf symref_target = STRBUF_INIT;
2599 int ret;
2601 if (flags & REF_ISSYMREF) {
2602 ret = refs_read_symbolic_ref(data->old_refs, refname, &symref_target);
2603 if (ret < 0)
2604 goto done;
2606 ret = ref_transaction_update(data->transaction, refname, NULL, null_oid(),
2607 symref_target.buf, NULL,
2608 REF_SKIP_CREATE_REFLOG | REF_NO_DEREF, NULL, data->errbuf);
2609 if (ret < 0)
2610 goto done;
2611 } else {
2612 ret = ref_transaction_create(data->transaction, refname, oid, NULL,
2613 REF_SKIP_CREATE_REFLOG | REF_SKIP_OID_VERIFICATION,
2614 NULL, data->errbuf);
2615 if (ret < 0)
2616 goto done;
2619 done:
2620 strbuf_release(&symref_target);
2621 return ret;
2624 static int move_files(const char *from_path, const char *to_path, struct strbuf *errbuf)
2626 struct strbuf from_buf = STRBUF_INIT, to_buf = STRBUF_INIT;
2627 size_t from_len, to_len;
2628 DIR *from_dir;
2629 int ret;
2631 from_dir = opendir(from_path);
2632 if (!from_dir) {
2633 strbuf_addf(errbuf, "could not open source directory '%s': %s",
2634 from_path, strerror(errno));
2635 ret = -1;
2636 goto done;
2639 strbuf_addstr(&from_buf, from_path);
2640 strbuf_complete(&from_buf, '/');
2641 from_len = from_buf.len;
2643 strbuf_addstr(&to_buf, to_path);
2644 strbuf_complete(&to_buf, '/');
2645 to_len = to_buf.len;
2647 while (1) {
2648 struct dirent *ent;
2650 errno = 0;
2651 ent = readdir(from_dir);
2652 if (!ent)
2653 break;
2655 if (!strcmp(ent->d_name, ".") ||
2656 !strcmp(ent->d_name, ".."))
2657 continue;
2659 strbuf_setlen(&from_buf, from_len);
2660 strbuf_addstr(&from_buf, ent->d_name);
2662 strbuf_setlen(&to_buf, to_len);
2663 strbuf_addstr(&to_buf, ent->d_name);
2665 ret = rename(from_buf.buf, to_buf.buf);
2666 if (ret < 0) {
2667 strbuf_addf(errbuf, "could not link file '%s' to '%s': %s",
2668 from_buf.buf, to_buf.buf, strerror(errno));
2669 goto done;
2673 if (errno) {
2674 strbuf_addf(errbuf, "could not read entry from directory '%s': %s",
2675 from_path, strerror(errno));
2676 ret = -1;
2677 goto done;
2680 ret = 0;
2682 done:
2683 strbuf_release(&from_buf);
2684 strbuf_release(&to_buf);
2685 if (from_dir)
2686 closedir(from_dir);
2687 return ret;
2690 static int count_reflogs(const char *reflog UNUSED, void *payload)
2692 size_t *reflog_count = payload;
2693 (*reflog_count)++;
2694 return 0;
2697 static int has_worktrees(void)
2699 struct worktree **worktrees = get_worktrees();
2700 int ret = 0;
2701 size_t i;
2703 for (i = 0; worktrees[i]; i++) {
2704 if (is_main_worktree(worktrees[i]))
2705 continue;
2706 ret = 1;
2709 free_worktrees(worktrees);
2710 return ret;
2713 int repo_migrate_ref_storage_format(struct repository *repo,
2714 enum ref_storage_format format,
2715 unsigned int flags,
2716 struct strbuf *errbuf)
2718 struct ref_store *old_refs = NULL, *new_refs = NULL;
2719 struct ref_transaction *transaction = NULL;
2720 struct strbuf new_gitdir = STRBUF_INIT;
2721 struct migration_data data;
2722 size_t reflog_count = 0;
2723 int did_migrate_refs = 0;
2724 int ret;
2726 if (repo->ref_storage_format == format) {
2727 strbuf_addstr(errbuf, "current and new ref storage format are equal");
2728 ret = -1;
2729 goto done;
2732 old_refs = get_main_ref_store(repo);
2735 * We do not have any interfaces that would allow us to write many
2736 * reflog entries. Once we have them we can remove this restriction.
2738 if (refs_for_each_reflog(old_refs, count_reflogs, &reflog_count) < 0) {
2739 strbuf_addstr(errbuf, "cannot count reflogs");
2740 ret = -1;
2741 goto done;
2743 if (reflog_count) {
2744 strbuf_addstr(errbuf, "migrating reflogs is not supported yet");
2745 ret = -1;
2746 goto done;
2750 * Worktrees complicate the migration because every worktree has a
2751 * separate ref storage. While it should be feasible to implement, this
2752 * is pushed out to a future iteration.
2754 * TODO: we should really be passing the caller-provided repository to
2755 * `has_worktrees()`, but our worktree subsystem doesn't yet support
2756 * that.
2758 if (has_worktrees()) {
2759 strbuf_addstr(errbuf, "migrating repositories with worktrees is not supported yet");
2760 ret = -1;
2761 goto done;
2765 * The overall logic looks like this:
2767 * 1. Set up a new temporary directory and initialize it with the new
2768 * format. This is where all refs will be migrated into.
2770 * 2. Enumerate all refs and write them into the new ref storage.
2771 * This operation is safe as we do not yet modify the main
2772 * repository.
2774 * 3. If we're in dry-run mode then we are done and can hand over the
2775 * directory to the caller for inspection. If not, we now start
2776 * with the destructive part.
2778 * 4. Delete the old ref storage from disk. As we have a copy of refs
2779 * in the new ref storage it's okay(ish) if we now get interrupted
2780 * as there is an equivalent copy of all refs available.
2782 * 5. Move the new ref storage files into place.
2784 * 6. Change the repository format to the new ref format.
2786 strbuf_addf(&new_gitdir, "%s/%s", old_refs->gitdir, "ref_migration.XXXXXX");
2787 if (!mkdtemp(new_gitdir.buf)) {
2788 strbuf_addf(errbuf, "cannot create migration directory: %s",
2789 strerror(errno));
2790 ret = -1;
2791 goto done;
2794 new_refs = ref_store_init(repo, format, new_gitdir.buf,
2795 REF_STORE_ALL_CAPS);
2796 ret = ref_store_create_on_disk(new_refs, 0, errbuf);
2797 if (ret < 0)
2798 goto done;
2800 transaction = ref_store_transaction_begin(new_refs, errbuf);
2801 if (!transaction)
2802 goto done;
2804 data.old_refs = old_refs;
2805 data.transaction = transaction;
2806 data.errbuf = errbuf;
2809 * We need to use the internal `do_for_each_ref()` here so that we can
2810 * also include broken refs and symrefs. These would otherwise be
2811 * skipped silently.
2813 * Ideally, we would do this call while locking the old ref storage
2814 * such that there cannot be any concurrent modifications. We do not
2815 * have the infra for that though, and the "files" backend does not
2816 * allow for a central lock due to its design. It's thus on the user to
2817 * ensure that there are no concurrent writes.
2819 ret = do_for_each_ref(old_refs, "", NULL, migrate_one_ref, 0,
2820 DO_FOR_EACH_INCLUDE_ROOT_REFS | DO_FOR_EACH_INCLUDE_BROKEN,
2821 &data);
2822 if (ret < 0)
2823 goto done;
2826 * TODO: we might want to migrate to `initial_ref_transaction_commit()`
2827 * here, which is more efficient for the files backend because it would
2828 * write new refs into the packed-refs file directly. At this point,
2829 * the files backend doesn't handle pseudo-refs and symrefs correctly
2830 * though, so this requires some more work.
2832 ret = ref_transaction_commit(transaction, errbuf);
2833 if (ret < 0)
2834 goto done;
2835 did_migrate_refs = 1;
2837 if (flags & REPO_MIGRATE_REF_STORAGE_FORMAT_DRYRUN) {
2838 printf(_("Finished dry-run migration of refs, "
2839 "the result can be found at '%s'\n"), new_gitdir.buf);
2840 ret = 0;
2841 goto done;
2845 * Until now we were in the non-destructive phase, where we only
2846 * populated the new ref store. From hereon though we are about
2847 * to get hands by deleting the old ref store and then moving
2848 * the new one into place.
2850 * Assuming that there were no concurrent writes, the new ref
2851 * store should have all information. So if we fail from hereon
2852 * we may be in an in-between state, but it would still be able
2853 * to recover by manually moving remaining files from the
2854 * temporary migration directory into place.
2856 ret = ref_store_remove_on_disk(old_refs, errbuf);
2857 if (ret < 0)
2858 goto done;
2860 ret = move_files(new_gitdir.buf, old_refs->gitdir, errbuf);
2861 if (ret < 0)
2862 goto done;
2864 if (rmdir(new_gitdir.buf) < 0)
2865 warning_errno(_("could not remove temporary migration directory '%s'"),
2866 new_gitdir.buf);
2869 * We have migrated the repository, so we now need to adjust the
2870 * repository format so that clients will use the new ref store.
2871 * We also need to swap out the repository's main ref store.
2873 initialize_repository_version(hash_algo_by_ptr(repo->hash_algo), format, 1);
2875 free(new_refs->gitdir);
2876 new_refs->gitdir = xstrdup(old_refs->gitdir);
2877 repo->refs_private = new_refs;
2878 ref_store_release(old_refs);
2880 ret = 0;
2882 done:
2883 if (ret && did_migrate_refs) {
2884 strbuf_complete(errbuf, '\n');
2885 strbuf_addf(errbuf, _("migrated refs can be found at '%s'"),
2886 new_gitdir.buf);
2889 if (ret && new_refs)
2890 ref_store_release(new_refs);
2891 ref_transaction_free(transaction);
2892 strbuf_release(&new_gitdir);
2893 return ret;
2896 int ref_update_expects_existing_old_ref(struct ref_update *update)
2898 return (update->flags & REF_HAVE_OLD) &&
2899 (!is_null_oid(&update->old_oid) || update->old_target);