2 * The backend-independent part of the reference module.
11 #include "refs/refs-internal.h"
12 #include "run-command.h"
13 #include "object-store.h"
16 #include "submodule.h"
19 #include "repository.h"
23 * List of all available backends
25 static struct ref_storage_be *refs_backends = &refs_be_files;
27 static struct ref_storage_be *find_ref_storage_backend(const char *name)
29 struct ref_storage_be *be;
30 for (be = refs_backends; be; be = be->next)
31 if (!strcmp(be->name, name))
36 int ref_storage_backend_exists(const char *name)
38 return find_ref_storage_backend(name) != NULL;
42 * How to handle various characters in refnames:
43 * 0: An acceptable character for refs
45 * 2: ., look for a preceding . to reject .. in refs
46 * 3: {, look for a preceding @ to reject @{ in refs
47 * 4: A bad character: ASCII control characters, and
48 * ":", "?", "[", "\", "^", "~", SP, or TAB
49 * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
51 static unsigned char refname_disposition[256] = {
52 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
53 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
54 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,
55 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
56 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
57 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,
58 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
59 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4
63 * Try to read one refname component from the front of refname.
64 * Return the length of the component found, or -1 if the component is
65 * not legal. It is legal if it is something reasonable to have under
66 * ".git/refs/"; We do not like it if:
68 * - it begins with ".", or
69 * - it has double dots "..", or
70 * - it has ASCII control characters, or
71 * - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or
72 * - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or
73 * - it ends with a "/", or
74 * - it ends with ".lock", or
75 * - it contains a "@{" portion
77 * When sanitized is not NULL, instead of rejecting the input refname
78 * as an error, try to come up with a usable replacement for the input
81 static int check_refname_component(const char *refname, int *flags,
82 struct strbuf *sanitized)
86 size_t component_start = 0; /* garbage - not a reasonable initial value */
89 component_start = sanitized->len;
91 for (cp = refname; ; cp++) {
93 unsigned char disp = refname_disposition[ch];
95 if (sanitized && disp != 1)
96 strbuf_addch(sanitized, ch);
102 if (last == '.') { /* Refname contains "..". */
104 /* collapse ".." to single "." */
105 strbuf_setlen(sanitized, sanitized->len - 1);
111 if (last == '@') { /* Refname contains "@{". */
113 sanitized->buf[sanitized->len-1] = '-';
121 sanitized->buf[sanitized->len-1] = '-';
126 if (!(*flags & REFNAME_REFSPEC_PATTERN)) {
127 /* refspec can't be a pattern */
129 sanitized->buf[sanitized->len-1] = '-';
135 * Unset the pattern flag so that we only accept
136 * a single asterisk for one side of refspec.
138 *flags &= ~ REFNAME_REFSPEC_PATTERN;
145 return 0; /* Component has zero length. */
147 if (refname[0] == '.') { /* Component starts with '.'. */
149 sanitized->buf[component_start] = '-';
153 if (cp - refname >= LOCK_SUFFIX_LEN &&
154 !memcmp(cp - LOCK_SUFFIX_LEN, LOCK_SUFFIX, LOCK_SUFFIX_LEN)) {
157 /* Refname ends with ".lock". */
158 while (strbuf_strip_suffix(sanitized, LOCK_SUFFIX)) {
159 /* try again in case we have .lock.lock */
165 static int check_or_sanitize_refname(const char *refname, int flags,
166 struct strbuf *sanitized)
168 int component_len, component_count = 0;
170 if (!strcmp(refname, "@")) {
171 /* Refname is a single character '@'. */
173 strbuf_addch(sanitized, '-');
179 if (sanitized && sanitized->len)
180 strbuf_complete(sanitized, '/');
182 /* We are at the start of a path component. */
183 component_len = check_refname_component(refname, &flags,
185 if (sanitized && component_len == 0)
186 ; /* OK, omit empty component */
187 else if (component_len <= 0)
191 if (refname[component_len] == '\0')
193 /* Skip to next component. */
194 refname += component_len + 1;
197 if (refname[component_len - 1] == '.') {
198 /* Refname ends with '.'. */
200 ; /* omit ending dot */
204 if (!(flags & REFNAME_ALLOW_ONELEVEL) && component_count < 2)
205 return -1; /* Refname has only one component. */
209 int check_refname_format(const char *refname, int flags)
211 return check_or_sanitize_refname(refname, flags, NULL);
214 void sanitize_refname_component(const char *refname, struct strbuf *out)
216 if (check_or_sanitize_refname(refname, REFNAME_ALLOW_ONELEVEL, out))
217 BUG("sanitizing refname '%s' check returned error", refname);
220 int refname_is_safe(const char *refname)
224 if (skip_prefix(refname, "refs/", &rest)) {
227 size_t restlen = strlen(rest);
229 /* rest must not be empty, or start or end with "/" */
230 if (!restlen || *rest == '/' || rest[restlen - 1] == '/')
234 * Does the refname try to escape refs/?
235 * For example: refs/foo/../bar is safe but refs/foo/../../bar
238 buf = xmallocz(restlen);
239 result = !normalize_path_copy(buf, rest) && !strcmp(buf, rest);
245 if (!isupper(*refname) && *refname != '_')
253 * Return true if refname, which has the specified oid and flags, can
254 * be resolved to an object in the database. If the referred-to object
255 * does not exist, emit a warning and return false.
257 int ref_resolves_to_object(const char *refname,
258 const struct object_id *oid,
261 if (flags & REF_ISBROKEN)
263 if (!has_object_file(oid)) {
264 error(_("%s does not point to a valid object!"), refname);
270 char *refs_resolve_refdup(struct ref_store *refs,
271 const char *refname, int resolve_flags,
272 struct object_id *oid, int *flags)
276 result = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
278 return xstrdup_or_null(result);
281 char *resolve_refdup(const char *refname, int resolve_flags,
282 struct object_id *oid, int *flags)
284 return refs_resolve_refdup(get_main_ref_store(the_repository),
285 refname, resolve_flags,
289 /* The argument to filter_refs */
297 int refs_read_ref_full(struct ref_store *refs, const char *refname,
298 int resolve_flags, struct object_id *oid, int *flags)
300 if (refs_resolve_ref_unsafe(refs, refname, resolve_flags, oid, flags))
305 int read_ref_full(const char *refname, int resolve_flags, struct object_id *oid, int *flags)
307 return refs_read_ref_full(get_main_ref_store(the_repository), refname,
308 resolve_flags, oid, flags);
311 int read_ref(const char *refname, struct object_id *oid)
313 return read_ref_full(refname, RESOLVE_REF_READING, oid, NULL);
316 int refs_ref_exists(struct ref_store *refs, const char *refname)
318 return !!refs_resolve_ref_unsafe(refs, refname, RESOLVE_REF_READING, NULL, NULL);
321 int ref_exists(const char *refname)
323 return refs_ref_exists(get_main_ref_store(the_repository), refname);
326 static int filter_refs(const char *refname, const struct object_id *oid,
327 int flags, void *data)
329 struct ref_filter *filter = (struct ref_filter *)data;
331 if (wildmatch(filter->pattern, refname, 0))
334 skip_prefix(refname, filter->prefix, &refname);
335 return filter->fn(refname, oid, flags, filter->cb_data);
338 enum peel_status peel_object(const struct object_id *name, struct object_id *oid)
340 struct object *o = lookup_unknown_object(the_repository, name);
342 if (o->type == OBJ_NONE) {
343 int type = oid_object_info(the_repository, name, NULL);
344 if (type < 0 || !object_as_type(o, type, 0))
348 if (o->type != OBJ_TAG)
351 o = deref_tag_noverify(o);
355 oidcpy(oid, &o->oid);
359 struct warn_if_dangling_data {
362 const struct string_list *refnames;
366 static int warn_if_dangling_symref(const char *refname, const struct object_id *oid,
367 int flags, void *cb_data)
369 struct warn_if_dangling_data *d = cb_data;
370 const char *resolves_to;
372 if (!(flags & REF_ISSYMREF))
375 resolves_to = resolve_ref_unsafe(refname, 0, NULL, NULL);
378 ? strcmp(resolves_to, d->refname)
379 : !string_list_has_string(d->refnames, resolves_to))) {
383 fprintf(d->fp, d->msg_fmt, refname);
388 void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname)
390 struct warn_if_dangling_data data;
393 data.refname = refname;
394 data.refnames = NULL;
395 data.msg_fmt = msg_fmt;
396 for_each_rawref(warn_if_dangling_symref, &data);
399 void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct string_list *refnames)
401 struct warn_if_dangling_data data;
405 data.refnames = refnames;
406 data.msg_fmt = msg_fmt;
407 for_each_rawref(warn_if_dangling_symref, &data);
410 int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
412 return refs_for_each_ref_in(refs, "refs/tags/", fn, cb_data);
415 int for_each_tag_ref(each_ref_fn fn, void *cb_data)
417 return refs_for_each_tag_ref(get_main_ref_store(the_repository), fn, cb_data);
420 int refs_for_each_branch_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
422 return refs_for_each_ref_in(refs, "refs/heads/", fn, cb_data);
425 int for_each_branch_ref(each_ref_fn fn, void *cb_data)
427 return refs_for_each_branch_ref(get_main_ref_store(the_repository), fn, cb_data);
430 int refs_for_each_remote_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
432 return refs_for_each_ref_in(refs, "refs/remotes/", fn, cb_data);
435 int for_each_remote_ref(each_ref_fn fn, void *cb_data)
437 return refs_for_each_remote_ref(get_main_ref_store(the_repository), fn, cb_data);
440 int head_ref_namespaced(each_ref_fn fn, void *cb_data)
442 struct strbuf buf = STRBUF_INIT;
444 struct object_id oid;
447 strbuf_addf(&buf, "%sHEAD", get_git_namespace());
448 if (!read_ref_full(buf.buf, RESOLVE_REF_READING, &oid, &flag))
449 ret = fn(buf.buf, &oid, flag, cb_data);
450 strbuf_release(&buf);
455 void normalize_glob_ref(struct string_list_item *item, const char *prefix,
458 struct strbuf normalized_pattern = STRBUF_INIT;
461 BUG("pattern must not start with '/'");
464 strbuf_addstr(&normalized_pattern, prefix);
466 else if (!starts_with(pattern, "refs/"))
467 strbuf_addstr(&normalized_pattern, "refs/");
468 strbuf_addstr(&normalized_pattern, pattern);
469 strbuf_strip_suffix(&normalized_pattern, "/");
471 item->string = strbuf_detach(&normalized_pattern, NULL);
472 item->util = has_glob_specials(pattern) ? NULL : item->string;
473 strbuf_release(&normalized_pattern);
476 int for_each_glob_ref_in(each_ref_fn fn, const char *pattern,
477 const char *prefix, void *cb_data)
479 struct strbuf real_pattern = STRBUF_INIT;
480 struct ref_filter filter;
483 if (!prefix && !starts_with(pattern, "refs/"))
484 strbuf_addstr(&real_pattern, "refs/");
486 strbuf_addstr(&real_pattern, prefix);
487 strbuf_addstr(&real_pattern, pattern);
489 if (!has_glob_specials(pattern)) {
490 /* Append implied '/' '*' if not present. */
491 strbuf_complete(&real_pattern, '/');
492 /* No need to check for '*', there is none. */
493 strbuf_addch(&real_pattern, '*');
496 filter.pattern = real_pattern.buf;
497 filter.prefix = prefix;
499 filter.cb_data = cb_data;
500 ret = for_each_ref(filter_refs, &filter);
502 strbuf_release(&real_pattern);
506 int for_each_glob_ref(each_ref_fn fn, const char *pattern, void *cb_data)
508 return for_each_glob_ref_in(fn, pattern, NULL, cb_data);
511 const char *prettify_refname(const char *name)
513 if (skip_prefix(name, "refs/heads/", &name) ||
514 skip_prefix(name, "refs/tags/", &name) ||
515 skip_prefix(name, "refs/remotes/", &name))
520 static const char *ref_rev_parse_rules[] = {
526 "refs/remotes/%.*s/HEAD",
530 #define NUM_REV_PARSE_RULES (ARRAY_SIZE(ref_rev_parse_rules) - 1)
533 * Is it possible that the caller meant full_name with abbrev_name?
534 * If so return a non-zero value to signal "yes"; the magnitude of
535 * the returned value gives the precedence used for disambiguation.
537 * If abbrev_name cannot mean full_name, return 0.
539 int refname_match(const char *abbrev_name, const char *full_name)
542 const int abbrev_name_len = strlen(abbrev_name);
543 const int num_rules = NUM_REV_PARSE_RULES;
545 for (p = ref_rev_parse_rules; *p; p++)
546 if (!strcmp(full_name, mkpath(*p, abbrev_name_len, abbrev_name)))
547 return &ref_rev_parse_rules[num_rules] - p;
553 * Given a 'prefix' expand it by the rules in 'ref_rev_parse_rules' and add
554 * the results to 'prefixes'
556 void expand_ref_prefix(struct strvec *prefixes, const char *prefix)
559 int len = strlen(prefix);
561 for (p = ref_rev_parse_rules; *p; p++)
562 strvec_pushf(prefixes, *p, len, prefix);
565 static const char default_branch_name_advice[] = N_(
566 "Using '%s' as the name for the initial branch. This default branch name\n"
567 "is subject to change. To configure the initial branch name to use in all\n"
568 "of your new repositories, which will suppress this warning, call:\n"
570 "\tgit config --global init.defaultBranch <name>\n"
572 "Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
573 "'development'. The just-created branch can be renamed via this command:\n"
575 "\tgit branch -m <name>\n"
578 char *repo_default_branch_name(struct repository *r, int quiet)
580 const char *config_key = "init.defaultbranch";
581 const char *config_display_key = "init.defaultBranch";
582 char *ret = NULL, *full_ref;
583 const char *env = getenv("GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME");
587 else if (repo_config_get_string(r, config_key, &ret) < 0)
588 die(_("could not retrieve `%s`"), config_display_key);
591 ret = xstrdup("master");
593 advise(_(default_branch_name_advice), ret);
596 full_ref = xstrfmt("refs/heads/%s", ret);
597 if (check_refname_format(full_ref, 0))
598 die(_("invalid branch name: %s = %s"), config_display_key, ret);
604 const char *git_default_branch_name(int quiet)
609 ret = repo_default_branch_name(the_repository, quiet);
615 * *string and *len will only be substituted, and *string returned (for
616 * later free()ing) if the string passed in is a magic short-hand form
619 static char *substitute_branch_name(struct repository *r,
620 const char **string, int *len,
621 int nonfatal_dangling_mark)
623 struct strbuf buf = STRBUF_INIT;
624 struct interpret_branch_name_options options = {
625 .nonfatal_dangling_mark = nonfatal_dangling_mark
627 int ret = repo_interpret_branch_name(r, *string, *len, &buf, &options);
631 *string = strbuf_detach(&buf, &size);
633 return (char *)*string;
639 int repo_dwim_ref(struct repository *r, const char *str, int len,
640 struct object_id *oid, char **ref, int nonfatal_dangling_mark)
642 char *last_branch = substitute_branch_name(r, &str, &len,
643 nonfatal_dangling_mark);
644 int refs_found = expand_ref(r, str, len, oid, ref);
649 int expand_ref(struct repository *repo, const char *str, int len,
650 struct object_id *oid, char **ref)
654 struct strbuf fullref = STRBUF_INIT;
657 for (p = ref_rev_parse_rules; *p; p++) {
658 struct object_id oid_from_ref;
659 struct object_id *this_result;
662 this_result = refs_found ? &oid_from_ref : oid;
663 strbuf_reset(&fullref);
664 strbuf_addf(&fullref, *p, len, str);
665 r = refs_resolve_ref_unsafe(get_main_ref_store(repo),
666 fullref.buf, RESOLVE_REF_READING,
671 if (!warn_ambiguous_refs)
673 } else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
674 warning(_("ignoring dangling symref %s"), fullref.buf);
675 } else if ((flag & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
676 warning(_("ignoring broken ref %s"), fullref.buf);
679 strbuf_release(&fullref);
683 int repo_dwim_log(struct repository *r, const char *str, int len,
684 struct object_id *oid, char **log)
686 struct ref_store *refs = get_main_ref_store(r);
687 char *last_branch = substitute_branch_name(r, &str, &len, 0);
690 struct strbuf path = STRBUF_INIT;
693 for (p = ref_rev_parse_rules; *p; p++) {
694 struct object_id hash;
695 const char *ref, *it;
698 strbuf_addf(&path, *p, len, str);
699 ref = refs_resolve_ref_unsafe(refs, path.buf,
704 if (refs_reflog_exists(refs, path.buf))
706 else if (strcmp(ref, path.buf) &&
707 refs_reflog_exists(refs, ref))
715 if (!warn_ambiguous_refs)
718 strbuf_release(&path);
723 int dwim_log(const char *str, int len, struct object_id *oid, char **log)
725 return repo_dwim_log(the_repository, str, len, oid, log);
728 static int is_per_worktree_ref(const char *refname)
730 return starts_with(refname, "refs/worktree/") ||
731 starts_with(refname, "refs/bisect/") ||
732 starts_with(refname, "refs/rewritten/");
735 static int is_pseudoref_syntax(const char *refname)
739 for (c = refname; *c; c++) {
740 if (!isupper(*c) && *c != '-' && *c != '_')
747 static int is_main_pseudoref_syntax(const char *refname)
749 return skip_prefix(refname, "main-worktree/", &refname) &&
751 is_pseudoref_syntax(refname);
754 static int is_other_pseudoref_syntax(const char *refname)
756 if (!skip_prefix(refname, "worktrees/", &refname))
758 refname = strchr(refname, '/');
759 if (!refname || !refname[1])
761 return is_pseudoref_syntax(refname + 1);
764 enum ref_type ref_type(const char *refname)
766 if (is_per_worktree_ref(refname))
767 return REF_TYPE_PER_WORKTREE;
768 if (is_pseudoref_syntax(refname))
769 return REF_TYPE_PSEUDOREF;
770 if (is_main_pseudoref_syntax(refname))
771 return REF_TYPE_MAIN_PSEUDOREF;
772 if (is_other_pseudoref_syntax(refname))
773 return REF_TYPE_OTHER_PSEUDOREF;
774 return REF_TYPE_NORMAL;
777 long get_files_ref_lock_timeout_ms(void)
779 static int configured = 0;
781 /* The default timeout is 100 ms: */
782 static int timeout_ms = 100;
785 git_config_get_int("core.filesreflocktimeout", &timeout_ms);
792 int refs_delete_ref(struct ref_store *refs, const char *msg,
794 const struct object_id *old_oid,
797 struct ref_transaction *transaction;
798 struct strbuf err = STRBUF_INIT;
800 transaction = ref_store_transaction_begin(refs, &err);
802 ref_transaction_delete(transaction, refname, old_oid,
804 ref_transaction_commit(transaction, &err)) {
805 error("%s", err.buf);
806 ref_transaction_free(transaction);
807 strbuf_release(&err);
810 ref_transaction_free(transaction);
811 strbuf_release(&err);
815 int delete_ref(const char *msg, const char *refname,
816 const struct object_id *old_oid, unsigned int flags)
818 return refs_delete_ref(get_main_ref_store(the_repository), msg, refname,
822 static void copy_reflog_msg(struct strbuf *sb, const char *msg)
827 while ((c = *msg++)) {
828 if (wasspace && isspace(c))
830 wasspace = isspace(c);
838 static char *normalize_reflog_message(const char *msg)
840 struct strbuf sb = STRBUF_INIT;
843 copy_reflog_msg(&sb, msg);
844 return strbuf_detach(&sb, NULL);
847 int should_autocreate_reflog(const char *refname)
849 switch (log_all_ref_updates) {
850 case LOG_REFS_ALWAYS:
852 case LOG_REFS_NORMAL:
853 return starts_with(refname, "refs/heads/") ||
854 starts_with(refname, "refs/remotes/") ||
855 starts_with(refname, "refs/notes/") ||
856 !strcmp(refname, "HEAD");
862 int is_branch(const char *refname)
864 return !strcmp(refname, "HEAD") || starts_with(refname, "refs/heads/");
867 struct read_ref_at_cb {
872 struct object_id *oid;
875 struct object_id ooid;
876 struct object_id noid;
880 timestamp_t *cutoff_time;
885 static void set_read_ref_cutoffs(struct read_ref_at_cb *cb,
886 timestamp_t timestamp, int tz, const char *message)
889 *cb->msg = xstrdup(message);
891 *cb->cutoff_time = timestamp;
895 *cb->cutoff_cnt = cb->reccnt;
898 static int read_ref_at_ent(struct object_id *ooid, struct object_id *noid,
899 const char *email, timestamp_t timestamp, int tz,
900 const char *message, void *cb_data)
902 struct read_ref_at_cb *cb = cb_data;
906 cb->date = timestamp;
909 * It is not possible for cb->cnt == 0 on the first iteration because
910 * that special case is handled in read_ref_at().
914 reached_count = cb->cnt == 0 && !is_null_oid(ooid);
915 if (timestamp <= cb->at_time || reached_count) {
916 set_read_ref_cutoffs(cb, timestamp, tz, message);
918 * we have not yet updated cb->[n|o]oid so they still
919 * hold the values for the previous record.
921 if (!is_null_oid(&cb->ooid) && !oideq(&cb->ooid, noid))
922 warning(_("log for ref %s has gap after %s"),
923 cb->refname, show_date(cb->date, cb->tz, DATE_MODE(RFC2822)));
925 oidcpy(cb->oid, ooid);
926 else if (!is_null_oid(&cb->ooid) || cb->date == cb->at_time)
927 oidcpy(cb->oid, noid);
928 else if (!oideq(noid, cb->oid))
929 warning(_("log for ref %s unexpectedly ended on %s"),
930 cb->refname, show_date(cb->date, cb->tz,
931 DATE_MODE(RFC2822)));
935 oidcpy(&cb->ooid, ooid);
936 oidcpy(&cb->noid, noid);
940 static int read_ref_at_ent_newest(struct object_id *ooid, struct object_id *noid,
941 const char *email, timestamp_t timestamp,
942 int tz, const char *message, void *cb_data)
944 struct read_ref_at_cb *cb = cb_data;
946 set_read_ref_cutoffs(cb, timestamp, tz, message);
947 oidcpy(cb->oid, noid);
948 /* We just want the first entry */
952 static int read_ref_at_ent_oldest(struct object_id *ooid, struct object_id *noid,
953 const char *email, timestamp_t timestamp,
954 int tz, const char *message, void *cb_data)
956 struct read_ref_at_cb *cb = cb_data;
958 set_read_ref_cutoffs(cb, timestamp, tz, message);
959 oidcpy(cb->oid, ooid);
960 if (is_null_oid(cb->oid))
961 oidcpy(cb->oid, noid);
962 /* We just want the first entry */
966 int read_ref_at(struct ref_store *refs, const char *refname,
967 unsigned int flags, timestamp_t at_time, int cnt,
968 struct object_id *oid, char **msg,
969 timestamp_t *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
971 struct read_ref_at_cb cb;
973 memset(&cb, 0, sizeof(cb));
974 cb.refname = refname;
975 cb.at_time = at_time;
978 cb.cutoff_time = cutoff_time;
979 cb.cutoff_tz = cutoff_tz;
980 cb.cutoff_cnt = cutoff_cnt;
984 refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent_newest, &cb);
988 refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent, &cb);
991 if (flags & GET_OID_QUIETLY)
994 die(_("log for %s is empty"), refname);
999 refs_for_each_reflog_ent(refs, refname, read_ref_at_ent_oldest, &cb);
1004 struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
1007 struct ref_transaction *tr;
1010 CALLOC_ARRAY(tr, 1);
1011 tr->ref_store = refs;
1015 struct ref_transaction *ref_transaction_begin(struct strbuf *err)
1017 return ref_store_transaction_begin(get_main_ref_store(the_repository), err);
1020 void ref_transaction_free(struct ref_transaction *transaction)
1027 switch (transaction->state) {
1028 case REF_TRANSACTION_OPEN:
1029 case REF_TRANSACTION_CLOSED:
1032 case REF_TRANSACTION_PREPARED:
1033 BUG("free called on a prepared reference transaction");
1036 BUG("unexpected reference transaction state");
1040 for (i = 0; i < transaction->nr; i++) {
1041 free(transaction->updates[i]->msg);
1042 free(transaction->updates[i]);
1044 free(transaction->updates);
1048 struct ref_update *ref_transaction_add_update(
1049 struct ref_transaction *transaction,
1050 const char *refname, unsigned int flags,
1051 const struct object_id *new_oid,
1052 const struct object_id *old_oid,
1055 struct ref_update *update;
1057 if (transaction->state != REF_TRANSACTION_OPEN)
1058 BUG("update called for transaction that is not open");
1060 FLEX_ALLOC_STR(update, refname, refname);
1061 ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
1062 transaction->updates[transaction->nr++] = update;
1064 update->flags = flags;
1066 if (flags & REF_HAVE_NEW)
1067 oidcpy(&update->new_oid, new_oid);
1068 if (flags & REF_HAVE_OLD)
1069 oidcpy(&update->old_oid, old_oid);
1070 update->msg = normalize_reflog_message(msg);
1074 int ref_transaction_update(struct ref_transaction *transaction,
1075 const char *refname,
1076 const struct object_id *new_oid,
1077 const struct object_id *old_oid,
1078 unsigned int flags, const char *msg,
1083 if ((new_oid && !is_null_oid(new_oid)) ?
1084 check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
1085 !refname_is_safe(refname)) {
1086 strbuf_addf(err, _("refusing to update ref with bad name '%s'"),
1091 if (flags & ~REF_TRANSACTION_UPDATE_ALLOWED_FLAGS)
1092 BUG("illegal flags 0x%x passed to ref_transaction_update()", flags);
1094 flags |= (new_oid ? REF_HAVE_NEW : 0) | (old_oid ? REF_HAVE_OLD : 0);
1096 ref_transaction_add_update(transaction, refname, flags,
1097 new_oid, old_oid, msg);
1101 int ref_transaction_create(struct ref_transaction *transaction,
1102 const char *refname,
1103 const struct object_id *new_oid,
1104 unsigned int flags, const char *msg,
1107 if (!new_oid || is_null_oid(new_oid))
1108 BUG("create called without valid new_oid");
1109 return ref_transaction_update(transaction, refname, new_oid,
1110 null_oid(), flags, msg, err);
1113 int ref_transaction_delete(struct ref_transaction *transaction,
1114 const char *refname,
1115 const struct object_id *old_oid,
1116 unsigned int flags, const char *msg,
1119 if (old_oid && is_null_oid(old_oid))
1120 BUG("delete called with old_oid set to zeros");
1121 return ref_transaction_update(transaction, refname,
1122 null_oid(), old_oid,
1126 int ref_transaction_verify(struct ref_transaction *transaction,
1127 const char *refname,
1128 const struct object_id *old_oid,
1133 BUG("verify called with old_oid set to NULL");
1134 return ref_transaction_update(transaction, refname,
1139 int refs_update_ref(struct ref_store *refs, const char *msg,
1140 const char *refname, const struct object_id *new_oid,
1141 const struct object_id *old_oid, unsigned int flags,
1142 enum action_on_err onerr)
1144 struct ref_transaction *t = NULL;
1145 struct strbuf err = STRBUF_INIT;
1148 t = ref_store_transaction_begin(refs, &err);
1150 ref_transaction_update(t, refname, new_oid, old_oid, flags, msg,
1152 ref_transaction_commit(t, &err)) {
1154 ref_transaction_free(t);
1157 const char *str = _("update_ref failed for ref '%s': %s");
1160 case UPDATE_REFS_MSG_ON_ERR:
1161 error(str, refname, err.buf);
1163 case UPDATE_REFS_DIE_ON_ERR:
1164 die(str, refname, err.buf);
1166 case UPDATE_REFS_QUIET_ON_ERR:
1169 strbuf_release(&err);
1172 strbuf_release(&err);
1174 ref_transaction_free(t);
1178 int update_ref(const char *msg, const char *refname,
1179 const struct object_id *new_oid,
1180 const struct object_id *old_oid,
1181 unsigned int flags, enum action_on_err onerr)
1183 return refs_update_ref(get_main_ref_store(the_repository), msg, refname, new_oid,
1184 old_oid, flags, onerr);
1187 char *refs_shorten_unambiguous_ref(struct ref_store *refs,
1188 const char *refname, int strict)
1191 static char **scanf_fmts;
1192 static int nr_rules;
1194 struct strbuf resolved_buf = STRBUF_INIT;
1198 * Pre-generate scanf formats from ref_rev_parse_rules[].
1199 * Generate a format suitable for scanf from a
1200 * ref_rev_parse_rules rule by interpolating "%s" at the
1201 * location of the "%.*s".
1203 size_t total_len = 0;
1206 /* the rule list is NULL terminated, count them first */
1207 for (nr_rules = 0; ref_rev_parse_rules[nr_rules]; nr_rules++)
1208 /* -2 for strlen("%.*s") - strlen("%s"); +1 for NUL */
1209 total_len += strlen(ref_rev_parse_rules[nr_rules]) - 2 + 1;
1211 scanf_fmts = xmalloc(st_add(st_mult(sizeof(char *), nr_rules), total_len));
1214 for (i = 0; i < nr_rules; i++) {
1215 assert(offset < total_len);
1216 scanf_fmts[i] = (char *)&scanf_fmts[nr_rules] + offset;
1217 offset += xsnprintf(scanf_fmts[i], total_len - offset,
1218 ref_rev_parse_rules[i], 2, "%s") + 1;
1222 /* bail out if there are no rules */
1224 return xstrdup(refname);
1226 /* buffer for scanf result, at most refname must fit */
1227 short_name = xstrdup(refname);
1229 /* skip first rule, it will always match */
1230 for (i = nr_rules - 1; i > 0 ; --i) {
1232 int rules_to_fail = i;
1235 if (1 != sscanf(refname, scanf_fmts[i], short_name))
1238 short_name_len = strlen(short_name);
1241 * in strict mode, all (except the matched one) rules
1242 * must fail to resolve to a valid non-ambiguous ref
1245 rules_to_fail = nr_rules;
1248 * check if the short name resolves to a valid ref,
1249 * but use only rules prior to the matched one
1251 for (j = 0; j < rules_to_fail; j++) {
1252 const char *rule = ref_rev_parse_rules[j];
1254 /* skip matched rule */
1259 * the short name is ambiguous, if it resolves
1260 * (with this previous rule) to a valid ref
1261 * read_ref() returns 0 on success
1263 strbuf_reset(&resolved_buf);
1264 strbuf_addf(&resolved_buf, rule,
1265 short_name_len, short_name);
1266 if (refs_ref_exists(refs, resolved_buf.buf))
1271 * short name is non-ambiguous if all previous rules
1272 * haven't resolved to a valid ref
1274 if (j == rules_to_fail) {
1275 strbuf_release(&resolved_buf);
1280 strbuf_release(&resolved_buf);
1282 return xstrdup(refname);
1285 char *shorten_unambiguous_ref(const char *refname, int strict)
1287 return refs_shorten_unambiguous_ref(get_main_ref_store(the_repository),
1291 static struct string_list *hide_refs;
1293 int parse_hide_refs_config(const char *var, const char *value, const char *section)
1296 if (!strcmp("transfer.hiderefs", var) ||
1297 (!parse_config_key(var, section, NULL, NULL, &key) &&
1298 !strcmp(key, "hiderefs"))) {
1303 return config_error_nonbool(var);
1304 ref = xstrdup(value);
1306 while (len && ref[len - 1] == '/')
1309 CALLOC_ARRAY(hide_refs, 1);
1310 hide_refs->strdup_strings = 1;
1312 string_list_append(hide_refs, ref);
1317 int ref_is_hidden(const char *refname, const char *refname_full)
1323 for (i = hide_refs->nr - 1; i >= 0; i--) {
1324 const char *match = hide_refs->items[i].string;
1325 const char *subject;
1329 if (*match == '!') {
1334 if (*match == '^') {
1335 subject = refname_full;
1341 /* refname can be NULL when namespaces are used. */
1343 skip_prefix(subject, match, &p) &&
1350 const char *find_descendant_ref(const char *dirname,
1351 const struct string_list *extras,
1352 const struct string_list *skip)
1360 * Look at the place where dirname would be inserted into
1361 * extras. If there is an entry at that position that starts
1362 * with dirname (remember, dirname includes the trailing
1363 * slash) and is not in skip, then we have a conflict.
1365 for (pos = string_list_find_insert_index(extras, dirname, 0);
1366 pos < extras->nr; pos++) {
1367 const char *extra_refname = extras->items[pos].string;
1369 if (!starts_with(extra_refname, dirname))
1372 if (!skip || !string_list_has_string(skip, extra_refname))
1373 return extra_refname;
1378 int refs_rename_ref_available(struct ref_store *refs,
1379 const char *old_refname,
1380 const char *new_refname)
1382 struct string_list skip = STRING_LIST_INIT_NODUP;
1383 struct strbuf err = STRBUF_INIT;
1386 string_list_insert(&skip, old_refname);
1387 ok = !refs_verify_refname_available(refs, new_refname,
1390 error("%s", err.buf);
1392 string_list_clear(&skip, 0);
1393 strbuf_release(&err);
1397 int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1399 struct object_id oid;
1402 if (!refs_read_ref_full(refs, "HEAD", RESOLVE_REF_READING,
1404 return fn("HEAD", &oid, flag, cb_data);
1409 int head_ref(each_ref_fn fn, void *cb_data)
1411 return refs_head_ref(get_main_ref_store(the_repository), fn, cb_data);
1414 struct ref_iterator *refs_ref_iterator_begin(
1415 struct ref_store *refs,
1416 const char *prefix, int trim, int flags)
1418 struct ref_iterator *iter;
1420 if (ref_paranoia < 0)
1421 ref_paranoia = git_env_bool("GIT_REF_PARANOIA", 0);
1423 flags |= DO_FOR_EACH_INCLUDE_BROKEN;
1425 iter = refs->be->iterator_begin(refs, prefix, flags);
1428 * `iterator_begin()` already takes care of prefix, but we
1429 * might need to do some trimming:
1432 iter = prefix_ref_iterator_begin(iter, "", trim);
1434 /* Sanity check for subclasses: */
1436 BUG("reference iterator is not ordered");
1442 * Call fn for each reference in the specified submodule for which the
1443 * refname begins with prefix. If trim is non-zero, then trim that
1444 * many characters off the beginning of each refname before passing
1445 * the refname to fn. flags can be DO_FOR_EACH_INCLUDE_BROKEN to
1446 * include broken references in the iteration. If fn ever returns a
1447 * non-zero value, stop the iteration and return that value;
1448 * otherwise, return 0.
1450 static int do_for_each_repo_ref(struct repository *r, const char *prefix,
1451 each_repo_ref_fn fn, int trim, int flags,
1454 struct ref_iterator *iter;
1455 struct ref_store *refs = get_main_ref_store(r);
1460 iter = refs_ref_iterator_begin(refs, prefix, trim, flags);
1462 return do_for_each_repo_ref_iterator(r, iter, fn, cb_data);
1465 struct do_for_each_ref_help {
1470 static int do_for_each_ref_helper(struct repository *r,
1471 const char *refname,
1472 const struct object_id *oid,
1476 struct do_for_each_ref_help *hp = cb_data;
1478 return hp->fn(refname, oid, flags, hp->cb_data);
1481 static int do_for_each_ref(struct ref_store *refs, const char *prefix,
1482 each_ref_fn fn, int trim, int flags, void *cb_data)
1484 struct ref_iterator *iter;
1485 struct do_for_each_ref_help hp = { fn, cb_data };
1490 iter = refs_ref_iterator_begin(refs, prefix, trim, flags);
1492 return do_for_each_repo_ref_iterator(the_repository, iter,
1493 do_for_each_ref_helper, &hp);
1496 int refs_for_each_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1498 return do_for_each_ref(refs, "", fn, 0, 0, cb_data);
1501 int for_each_ref(each_ref_fn fn, void *cb_data)
1503 return refs_for_each_ref(get_main_ref_store(the_repository), fn, cb_data);
1506 int refs_for_each_ref_in(struct ref_store *refs, const char *prefix,
1507 each_ref_fn fn, void *cb_data)
1509 return do_for_each_ref(refs, prefix, fn, strlen(prefix), 0, cb_data);
1512 int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data)
1514 return refs_for_each_ref_in(get_main_ref_store(the_repository), prefix, fn, cb_data);
1517 int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data, unsigned int broken)
1519 unsigned int flag = 0;
1522 flag = DO_FOR_EACH_INCLUDE_BROKEN;
1523 return do_for_each_ref(get_main_ref_store(the_repository),
1524 prefix, fn, 0, flag, cb_data);
1527 int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix,
1528 each_ref_fn fn, void *cb_data,
1529 unsigned int broken)
1531 unsigned int flag = 0;
1534 flag = DO_FOR_EACH_INCLUDE_BROKEN;
1535 return do_for_each_ref(refs, prefix, fn, 0, flag, cb_data);
1538 int for_each_replace_ref(struct repository *r, each_repo_ref_fn fn, void *cb_data)
1540 return do_for_each_repo_ref(r, git_replace_ref_base, fn,
1541 strlen(git_replace_ref_base),
1542 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1545 int for_each_namespaced_ref(each_ref_fn fn, void *cb_data)
1547 struct strbuf buf = STRBUF_INIT;
1549 strbuf_addf(&buf, "%srefs/", get_git_namespace());
1550 ret = do_for_each_ref(get_main_ref_store(the_repository),
1551 buf.buf, fn, 0, 0, cb_data);
1552 strbuf_release(&buf);
1556 int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1558 return do_for_each_ref(refs, "", fn, 0,
1559 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1562 int for_each_rawref(each_ref_fn fn, void *cb_data)
1564 return refs_for_each_rawref(get_main_ref_store(the_repository), fn, cb_data);
1567 static int qsort_strcmp(const void *va, const void *vb)
1569 const char *a = *(const char **)va;
1570 const char *b = *(const char **)vb;
1572 return strcmp(a, b);
1575 static void find_longest_prefixes_1(struct string_list *out,
1576 struct strbuf *prefix,
1577 const char **patterns, size_t nr)
1581 for (i = 0; i < nr; i++) {
1582 char c = patterns[i][prefix->len];
1583 if (!c || is_glob_special(c)) {
1584 string_list_append(out, prefix->buf);
1594 * Set "end" to the index of the element _after_ the last one
1597 for (end = i + 1; end < nr; end++) {
1598 if (patterns[i][prefix->len] != patterns[end][prefix->len])
1602 strbuf_addch(prefix, patterns[i][prefix->len]);
1603 find_longest_prefixes_1(out, prefix, patterns + i, end - i);
1604 strbuf_setlen(prefix, prefix->len - 1);
1610 static void find_longest_prefixes(struct string_list *out,
1611 const char **patterns)
1613 struct strvec sorted = STRVEC_INIT;
1614 struct strbuf prefix = STRBUF_INIT;
1616 strvec_pushv(&sorted, patterns);
1617 QSORT(sorted.v, sorted.nr, qsort_strcmp);
1619 find_longest_prefixes_1(out, &prefix, sorted.v, sorted.nr);
1621 strvec_clear(&sorted);
1622 strbuf_release(&prefix);
1625 int for_each_fullref_in_prefixes(const char *namespace,
1626 const char **patterns,
1627 each_ref_fn fn, void *cb_data,
1628 unsigned int broken)
1630 struct string_list prefixes = STRING_LIST_INIT_DUP;
1631 struct string_list_item *prefix;
1632 struct strbuf buf = STRBUF_INIT;
1633 int ret = 0, namespace_len;
1635 find_longest_prefixes(&prefixes, patterns);
1638 strbuf_addstr(&buf, namespace);
1639 namespace_len = buf.len;
1641 for_each_string_list_item(prefix, &prefixes) {
1642 strbuf_addstr(&buf, prefix->string);
1643 ret = for_each_fullref_in(buf.buf, fn, cb_data, broken);
1646 strbuf_setlen(&buf, namespace_len);
1649 string_list_clear(&prefixes, 0);
1650 strbuf_release(&buf);
1654 static int refs_read_special_head(struct ref_store *ref_store,
1655 const char *refname, struct object_id *oid,
1656 struct strbuf *referent, unsigned int *type)
1658 struct strbuf full_path = STRBUF_INIT;
1659 struct strbuf content = STRBUF_INIT;
1661 strbuf_addf(&full_path, "%s/%s", ref_store->gitdir, refname);
1663 if (strbuf_read_file(&content, full_path.buf, 0) < 0)
1666 result = parse_loose_ref_contents(content.buf, oid, referent, type);
1669 strbuf_release(&full_path);
1670 strbuf_release(&content);
1674 int refs_read_raw_ref(struct ref_store *ref_store, const char *refname,
1675 struct object_id *oid, struct strbuf *referent,
1676 unsigned int *type, int *failure_errno)
1680 if (!strcmp(refname, "FETCH_HEAD") || !strcmp(refname, "MERGE_HEAD")) {
1681 return refs_read_special_head(ref_store, refname, oid, referent,
1685 return ref_store->be->read_raw_ref(ref_store, refname, oid, referent,
1686 type, failure_errno);
1689 const char *refs_resolve_ref_unsafe_with_errno(struct ref_store *refs,
1690 const char *refname,
1692 struct object_id *oid,
1693 int *flags, int *failure_errno)
1695 static struct strbuf sb_refname = STRBUF_INIT;
1696 struct object_id unused_oid;
1703 flags = &unused_flags;
1708 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1709 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1710 !refname_is_safe(refname)) {
1711 *failure_errno = EINVAL;
1716 * dwim_ref() uses REF_ISBROKEN to distinguish between
1717 * missing refs and refs that were present but invalid,
1718 * to complain about the latter to stderr.
1720 * We don't know whether the ref exists, so don't set
1723 *flags |= REF_BAD_NAME;
1726 for (symref_count = 0; symref_count < SYMREF_MAXDEPTH; symref_count++) {
1727 unsigned int read_flags = 0;
1728 int read_failure = 0;
1730 if (refs_read_raw_ref(refs, refname, oid, &sb_refname,
1731 &read_flags, &read_failure)) {
1732 *flags |= read_flags;
1734 *failure_errno = read_failure;
1736 /* In reading mode, refs must eventually resolve */
1737 if (resolve_flags & RESOLVE_REF_READING)
1741 * Otherwise a missing ref is OK. But the files backend
1742 * may show errors besides ENOENT if there are
1743 * similarly-named refs.
1745 if (read_failure != ENOENT && read_failure != EISDIR &&
1746 read_failure != ENOTDIR)
1750 if (*flags & REF_BAD_NAME)
1751 *flags |= REF_ISBROKEN;
1755 *flags |= read_flags;
1757 if (!(read_flags & REF_ISSYMREF)) {
1758 if (*flags & REF_BAD_NAME) {
1760 *flags |= REF_ISBROKEN;
1765 refname = sb_refname.buf;
1766 if (resolve_flags & RESOLVE_REF_NO_RECURSE) {
1770 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1771 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1772 !refname_is_safe(refname)) {
1773 *failure_errno = EINVAL;
1777 *flags |= REF_ISBROKEN | REF_BAD_NAME;
1781 *failure_errno = ELOOP;
1785 const char *refs_resolve_ref_unsafe(struct ref_store *refs, const char *refname,
1786 int resolve_flags, struct object_id *oid,
1790 return refs_resolve_ref_unsafe_with_errno(refs, refname, resolve_flags,
1791 oid, flags, &ignore);
1794 /* backend functions */
1795 int refs_init_db(struct strbuf *err)
1797 struct ref_store *refs = get_main_ref_store(the_repository);
1799 return refs->be->init_db(refs, err);
1802 const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
1803 struct object_id *oid, int *flags)
1805 return refs_resolve_ref_unsafe(get_main_ref_store(the_repository), refname,
1806 resolve_flags, oid, flags);
1809 int resolve_gitlink_ref(const char *submodule, const char *refname,
1810 struct object_id *oid)
1812 struct ref_store *refs;
1815 refs = get_submodule_ref_store(submodule);
1820 if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &flags) ||
1826 struct ref_store_hash_entry
1828 struct hashmap_entry ent;
1830 struct ref_store *refs;
1832 /* NUL-terminated identifier of the ref store: */
1833 char name[FLEX_ARRAY];
1836 static int ref_store_hash_cmp(const void *unused_cmp_data,
1837 const struct hashmap_entry *eptr,
1838 const struct hashmap_entry *entry_or_key,
1839 const void *keydata)
1841 const struct ref_store_hash_entry *e1, *e2;
1844 e1 = container_of(eptr, const struct ref_store_hash_entry, ent);
1845 e2 = container_of(entry_or_key, const struct ref_store_hash_entry, ent);
1846 name = keydata ? keydata : e2->name;
1848 return strcmp(e1->name, name);
1851 static struct ref_store_hash_entry *alloc_ref_store_hash_entry(
1852 const char *name, struct ref_store *refs)
1854 struct ref_store_hash_entry *entry;
1856 FLEX_ALLOC_STR(entry, name, name);
1857 hashmap_entry_init(&entry->ent, strhash(name));
1862 /* A hashmap of ref_stores, stored by submodule name: */
1863 static struct hashmap submodule_ref_stores;
1865 /* A hashmap of ref_stores, stored by worktree id: */
1866 static struct hashmap worktree_ref_stores;
1869 * Look up a ref store by name. If that ref_store hasn't been
1870 * registered yet, return NULL.
1872 static struct ref_store *lookup_ref_store_map(struct hashmap *map,
1875 struct ref_store_hash_entry *entry;
1878 if (!map->tablesize)
1879 /* It's initialized on demand in register_ref_store(). */
1882 hash = strhash(name);
1883 entry = hashmap_get_entry_from_hash(map, hash, name,
1884 struct ref_store_hash_entry, ent);
1885 return entry ? entry->refs : NULL;
1889 * Create, record, and return a ref_store instance for the specified
1892 static struct ref_store *ref_store_init(const char *gitdir,
1895 const char *be_name = "files";
1896 struct ref_storage_be *be = find_ref_storage_backend(be_name);
1897 struct ref_store *refs;
1900 BUG("reference backend %s is unknown", be_name);
1902 refs = be->init(gitdir, flags);
1906 struct ref_store *get_main_ref_store(struct repository *r)
1908 if (r->refs_private)
1909 return r->refs_private;
1912 BUG("attempting to get main_ref_store outside of repository");
1914 r->refs_private = ref_store_init(r->gitdir, REF_STORE_ALL_CAPS);
1915 r->refs_private = maybe_debug_wrap_ref_store(r->gitdir, r->refs_private);
1916 return r->refs_private;
1920 * Associate a ref store with a name. It is a fatal error to call this
1921 * function twice for the same name.
1923 static void register_ref_store_map(struct hashmap *map,
1925 struct ref_store *refs,
1928 struct ref_store_hash_entry *entry;
1930 if (!map->tablesize)
1931 hashmap_init(map, ref_store_hash_cmp, NULL, 0);
1933 entry = alloc_ref_store_hash_entry(name, refs);
1934 if (hashmap_put(map, &entry->ent))
1935 BUG("%s ref_store '%s' initialized twice", type, name);
1938 struct ref_store *get_submodule_ref_store(const char *submodule)
1940 struct strbuf submodule_sb = STRBUF_INIT;
1941 struct ref_store *refs;
1942 char *to_free = NULL;
1948 len = strlen(submodule);
1949 while (len && is_dir_sep(submodule[len - 1]))
1955 /* We need to strip off one or more trailing slashes */
1956 submodule = to_free = xmemdupz(submodule, len);
1958 refs = lookup_ref_store_map(&submodule_ref_stores, submodule);
1962 strbuf_addstr(&submodule_sb, submodule);
1963 if (!is_nonbare_repository_dir(&submodule_sb))
1966 if (submodule_to_gitdir(&submodule_sb, submodule))
1969 /* assume that add_submodule_odb() has been called */
1970 refs = ref_store_init(submodule_sb.buf,
1971 REF_STORE_READ | REF_STORE_ODB);
1972 register_ref_store_map(&submodule_ref_stores, "submodule",
1976 strbuf_release(&submodule_sb);
1982 struct ref_store *get_worktree_ref_store(const struct worktree *wt)
1984 struct ref_store *refs;
1988 return get_main_ref_store(the_repository);
1990 id = wt->id ? wt->id : "/";
1991 refs = lookup_ref_store_map(&worktree_ref_stores, id);
1996 refs = ref_store_init(git_common_path("worktrees/%s", wt->id),
1997 REF_STORE_ALL_CAPS);
1999 refs = ref_store_init(get_git_common_dir(),
2000 REF_STORE_ALL_CAPS);
2003 register_ref_store_map(&worktree_ref_stores, "worktree",
2008 void base_ref_store_init(struct ref_store *refs,
2009 const struct ref_storage_be *be)
2014 /* backend functions */
2015 int refs_pack_refs(struct ref_store *refs, unsigned int flags)
2017 return refs->be->pack_refs(refs, flags);
2020 int peel_iterated_oid(const struct object_id *base, struct object_id *peeled)
2022 if (current_ref_iter &&
2023 (current_ref_iter->oid == base ||
2024 oideq(current_ref_iter->oid, base)))
2025 return ref_iterator_peel(current_ref_iter, peeled);
2027 return peel_object(base, peeled);
2030 int refs_create_symref(struct ref_store *refs,
2031 const char *ref_target,
2032 const char *refs_heads_master,
2038 msg = normalize_reflog_message(logmsg);
2039 retval = refs->be->create_symref(refs, ref_target, refs_heads_master,
2045 int create_symref(const char *ref_target, const char *refs_heads_master,
2048 return refs_create_symref(get_main_ref_store(the_repository), ref_target,
2049 refs_heads_master, logmsg);
2052 int ref_update_reject_duplicates(struct string_list *refnames,
2055 size_t i, n = refnames->nr;
2059 for (i = 1; i < n; i++) {
2060 int cmp = strcmp(refnames->items[i - 1].string,
2061 refnames->items[i].string);
2065 _("multiple updates for ref '%s' not allowed"),
2066 refnames->items[i].string);
2068 } else if (cmp > 0) {
2069 BUG("ref_update_reject_duplicates() received unsorted list");
2075 static int run_transaction_hook(struct ref_transaction *transaction,
2078 struct child_process proc = CHILD_PROCESS_INIT;
2079 struct strbuf buf = STRBUF_INIT;
2083 hook = find_hook("reference-transaction");
2087 strvec_pushl(&proc.args, hook, state, NULL);
2089 proc.stdout_to_stderr = 1;
2090 proc.trace2_hook_name = "reference-transaction";
2092 ret = start_command(&proc);
2096 sigchain_push(SIGPIPE, SIG_IGN);
2098 for (i = 0; i < transaction->nr; i++) {
2099 struct ref_update *update = transaction->updates[i];
2102 strbuf_addf(&buf, "%s %s %s\n",
2103 oid_to_hex(&update->old_oid),
2104 oid_to_hex(&update->new_oid),
2107 if (write_in_full(proc.in, buf.buf, buf.len) < 0) {
2115 sigchain_pop(SIGPIPE);
2116 strbuf_release(&buf);
2118 ret |= finish_command(&proc);
2122 int ref_transaction_prepare(struct ref_transaction *transaction,
2125 struct ref_store *refs = transaction->ref_store;
2128 switch (transaction->state) {
2129 case REF_TRANSACTION_OPEN:
2132 case REF_TRANSACTION_PREPARED:
2133 BUG("prepare called twice on reference transaction");
2135 case REF_TRANSACTION_CLOSED:
2136 BUG("prepare called on a closed reference transaction");
2139 BUG("unexpected reference transaction state");
2143 if (getenv(GIT_QUARANTINE_ENVIRONMENT)) {
2145 _("ref updates forbidden inside quarantine environment"));
2149 ret = refs->be->transaction_prepare(refs, transaction, err);
2153 ret = run_transaction_hook(transaction, "prepared");
2155 ref_transaction_abort(transaction, err);
2156 die(_("ref updates aborted by hook"));
2162 int ref_transaction_abort(struct ref_transaction *transaction,
2165 struct ref_store *refs = transaction->ref_store;
2168 switch (transaction->state) {
2169 case REF_TRANSACTION_OPEN:
2170 /* No need to abort explicitly. */
2172 case REF_TRANSACTION_PREPARED:
2173 ret = refs->be->transaction_abort(refs, transaction, err);
2175 case REF_TRANSACTION_CLOSED:
2176 BUG("abort called on a closed reference transaction");
2179 BUG("unexpected reference transaction state");
2183 run_transaction_hook(transaction, "aborted");
2185 ref_transaction_free(transaction);
2189 int ref_transaction_commit(struct ref_transaction *transaction,
2192 struct ref_store *refs = transaction->ref_store;
2195 switch (transaction->state) {
2196 case REF_TRANSACTION_OPEN:
2197 /* Need to prepare first. */
2198 ret = ref_transaction_prepare(transaction, err);
2202 case REF_TRANSACTION_PREPARED:
2203 /* Fall through to finish. */
2205 case REF_TRANSACTION_CLOSED:
2206 BUG("commit called on a closed reference transaction");
2209 BUG("unexpected reference transaction state");
2213 ret = refs->be->transaction_finish(refs, transaction, err);
2215 run_transaction_hook(transaction, "committed");
2219 int refs_verify_refname_available(struct ref_store *refs,
2220 const char *refname,
2221 const struct string_list *extras,
2222 const struct string_list *skip,
2226 const char *extra_refname;
2227 struct strbuf dirname = STRBUF_INIT;
2228 struct strbuf referent = STRBUF_INIT;
2229 struct object_id oid;
2231 struct ref_iterator *iter;
2236 * For the sake of comments in this function, suppose that
2237 * refname is "refs/foo/bar".
2242 strbuf_grow(&dirname, strlen(refname) + 1);
2243 for (slash = strchr(refname, '/'); slash; slash = strchr(slash + 1, '/')) {
2244 /* Expand dirname to the new prefix, not including the trailing slash: */
2245 strbuf_add(&dirname, refname + dirname.len, slash - refname - dirname.len);
2248 * We are still at a leading dir of the refname (e.g.,
2249 * "refs/foo"; if there is a reference with that name,
2250 * it is a conflict, *unless* it is in skip.
2252 if (skip && string_list_has_string(skip, dirname.buf))
2255 if (!refs_read_raw_ref(refs, dirname.buf, &oid, &referent,
2257 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2258 dirname.buf, refname);
2262 if (extras && string_list_has_string(extras, dirname.buf)) {
2263 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2264 refname, dirname.buf);
2270 * We are at the leaf of our refname (e.g., "refs/foo/bar").
2271 * There is no point in searching for a reference with that
2272 * name, because a refname isn't considered to conflict with
2273 * itself. But we still need to check for references whose
2274 * names are in the "refs/foo/bar/" namespace, because they
2277 strbuf_addstr(&dirname, refname + dirname.len);
2278 strbuf_addch(&dirname, '/');
2280 iter = refs_ref_iterator_begin(refs, dirname.buf, 0,
2281 DO_FOR_EACH_INCLUDE_BROKEN);
2282 while ((ok = ref_iterator_advance(iter)) == ITER_OK) {
2284 string_list_has_string(skip, iter->refname))
2287 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2288 iter->refname, refname);
2289 ref_iterator_abort(iter);
2293 if (ok != ITER_DONE)
2294 BUG("error while iterating over references");
2296 extra_refname = find_descendant_ref(dirname.buf, extras, skip);
2298 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2299 refname, extra_refname);
2304 strbuf_release(&referent);
2305 strbuf_release(&dirname);
2309 int refs_for_each_reflog(struct ref_store *refs, each_ref_fn fn, void *cb_data)
2311 struct ref_iterator *iter;
2312 struct do_for_each_ref_help hp = { fn, cb_data };
2314 iter = refs->be->reflog_iterator_begin(refs);
2316 return do_for_each_repo_ref_iterator(the_repository, iter,
2317 do_for_each_ref_helper, &hp);
2320 int for_each_reflog(each_ref_fn fn, void *cb_data)
2322 return refs_for_each_reflog(get_main_ref_store(the_repository), fn, cb_data);
2325 int refs_for_each_reflog_ent_reverse(struct ref_store *refs,
2326 const char *refname,
2327 each_reflog_ent_fn fn,
2330 return refs->be->for_each_reflog_ent_reverse(refs, refname,
2334 int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn,
2337 return refs_for_each_reflog_ent_reverse(get_main_ref_store(the_repository),
2338 refname, fn, cb_data);
2341 int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname,
2342 each_reflog_ent_fn fn, void *cb_data)
2344 return refs->be->for_each_reflog_ent(refs, refname, fn, cb_data);
2347 int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn,
2350 return refs_for_each_reflog_ent(get_main_ref_store(the_repository), refname,
2354 int refs_reflog_exists(struct ref_store *refs, const char *refname)
2356 return refs->be->reflog_exists(refs, refname);
2359 int reflog_exists(const char *refname)
2361 return refs_reflog_exists(get_main_ref_store(the_repository), refname);
2364 int refs_create_reflog(struct ref_store *refs, const char *refname,
2365 int force_create, struct strbuf *err)
2367 return refs->be->create_reflog(refs, refname, force_create, err);
2370 int safe_create_reflog(const char *refname, int force_create,
2373 return refs_create_reflog(get_main_ref_store(the_repository), refname,
2377 int refs_delete_reflog(struct ref_store *refs, const char *refname)
2379 return refs->be->delete_reflog(refs, refname);
2382 int delete_reflog(const char *refname)
2384 return refs_delete_reflog(get_main_ref_store(the_repository), refname);
2387 int refs_reflog_expire(struct ref_store *refs,
2388 const char *refname, const struct object_id *oid,
2390 reflog_expiry_prepare_fn prepare_fn,
2391 reflog_expiry_should_prune_fn should_prune_fn,
2392 reflog_expiry_cleanup_fn cleanup_fn,
2393 void *policy_cb_data)
2395 return refs->be->reflog_expire(refs, refname, oid, flags,
2396 prepare_fn, should_prune_fn,
2397 cleanup_fn, policy_cb_data);
2400 int reflog_expire(const char *refname, const struct object_id *oid,
2402 reflog_expiry_prepare_fn prepare_fn,
2403 reflog_expiry_should_prune_fn should_prune_fn,
2404 reflog_expiry_cleanup_fn cleanup_fn,
2405 void *policy_cb_data)
2407 return refs_reflog_expire(get_main_ref_store(the_repository),
2408 refname, oid, flags,
2409 prepare_fn, should_prune_fn,
2410 cleanup_fn, policy_cb_data);
2413 int initial_ref_transaction_commit(struct ref_transaction *transaction,
2416 struct ref_store *refs = transaction->ref_store;
2418 return refs->be->initial_transaction_commit(refs, transaction, err);
2421 int refs_delete_refs(struct ref_store *refs, const char *logmsg,
2422 struct string_list *refnames, unsigned int flags)
2427 msg = normalize_reflog_message(logmsg);
2428 retval = refs->be->delete_refs(refs, msg, refnames, flags);
2433 int delete_refs(const char *msg, struct string_list *refnames,
2436 return refs_delete_refs(get_main_ref_store(the_repository), msg, refnames, flags);
2439 int refs_rename_ref(struct ref_store *refs, const char *oldref,
2440 const char *newref, const char *logmsg)
2445 msg = normalize_reflog_message(logmsg);
2446 retval = refs->be->rename_ref(refs, oldref, newref, msg);
2451 int rename_ref(const char *oldref, const char *newref, const char *logmsg)
2453 return refs_rename_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);
2456 int refs_copy_existing_ref(struct ref_store *refs, const char *oldref,
2457 const char *newref, const char *logmsg)
2462 msg = normalize_reflog_message(logmsg);
2463 retval = refs->be->copy_ref(refs, oldref, newref, msg);
2468 int copy_existing_ref(const char *oldref, const char *newref, const char *logmsg)
2470 return refs_copy_existing_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);