2 * The backend-independent part of the reference module.
11 #include "refs/refs-internal.h"
12 #include "run-command.h"
14 #include "object-store.h"
17 #include "submodule.h"
20 #include "repository.h"
24 * List of all available backends
26 static struct ref_storage_be *refs_backends = &refs_be_files;
28 static struct ref_storage_be *find_ref_storage_backend(const char *name)
30 struct ref_storage_be *be;
31 for (be = refs_backends; be; be = be->next)
32 if (!strcmp(be->name, name))
37 int ref_storage_backend_exists(const char *name)
39 return find_ref_storage_backend(name) != NULL;
43 * How to handle various characters in refnames:
44 * 0: An acceptable character for refs
46 * 2: ., look for a preceding . to reject .. in refs
47 * 3: {, look for a preceding @ to reject @{ in refs
48 * 4: A bad character: ASCII control characters, and
49 * ":", "?", "[", "\", "^", "~", SP, or TAB
50 * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
52 static unsigned char refname_disposition[256] = {
53 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
54 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
55 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,
56 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
57 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
58 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,
59 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
60 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4
64 * Try to read one refname component from the front of refname.
65 * Return the length of the component found, or -1 if the component is
66 * not legal. It is legal if it is something reasonable to have under
67 * ".git/refs/"; We do not like it if:
69 * - it begins with ".", or
70 * - it has double dots "..", or
71 * - it has ASCII control characters, or
72 * - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or
73 * - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or
74 * - it ends with a "/", or
75 * - it ends with ".lock", or
76 * - it contains a "@{" portion
78 * When sanitized is not NULL, instead of rejecting the input refname
79 * as an error, try to come up with a usable replacement for the input
82 static int check_refname_component(const char *refname, int *flags,
83 struct strbuf *sanitized)
87 size_t component_start = 0; /* garbage - not a reasonable initial value */
90 component_start = sanitized->len;
92 for (cp = refname; ; cp++) {
94 unsigned char disp = refname_disposition[ch];
96 if (sanitized && disp != 1)
97 strbuf_addch(sanitized, ch);
103 if (last == '.') { /* Refname contains "..". */
105 /* collapse ".." to single "." */
106 strbuf_setlen(sanitized, sanitized->len - 1);
112 if (last == '@') { /* Refname contains "@{". */
114 sanitized->buf[sanitized->len-1] = '-';
122 sanitized->buf[sanitized->len-1] = '-';
127 if (!(*flags & REFNAME_REFSPEC_PATTERN)) {
128 /* refspec can't be a pattern */
130 sanitized->buf[sanitized->len-1] = '-';
136 * Unset the pattern flag so that we only accept
137 * a single asterisk for one side of refspec.
139 *flags &= ~ REFNAME_REFSPEC_PATTERN;
146 return 0; /* Component has zero length. */
148 if (refname[0] == '.') { /* Component starts with '.'. */
150 sanitized->buf[component_start] = '-';
154 if (cp - refname >= LOCK_SUFFIX_LEN &&
155 !memcmp(cp - LOCK_SUFFIX_LEN, LOCK_SUFFIX, LOCK_SUFFIX_LEN)) {
158 /* Refname ends with ".lock". */
159 while (strbuf_strip_suffix(sanitized, LOCK_SUFFIX)) {
160 /* try again in case we have .lock.lock */
166 static int check_or_sanitize_refname(const char *refname, int flags,
167 struct strbuf *sanitized)
169 int component_len, component_count = 0;
171 if (!strcmp(refname, "@")) {
172 /* Refname is a single character '@'. */
174 strbuf_addch(sanitized, '-');
180 if (sanitized && sanitized->len)
181 strbuf_complete(sanitized, '/');
183 /* We are at the start of a path component. */
184 component_len = check_refname_component(refname, &flags,
186 if (sanitized && component_len == 0)
187 ; /* OK, omit empty component */
188 else if (component_len <= 0)
192 if (refname[component_len] == '\0')
194 /* Skip to next component. */
195 refname += component_len + 1;
198 if (refname[component_len - 1] == '.') {
199 /* Refname ends with '.'. */
201 ; /* omit ending dot */
205 if (!(flags & REFNAME_ALLOW_ONELEVEL) && component_count < 2)
206 return -1; /* Refname has only one component. */
210 int check_refname_format(const char *refname, int flags)
212 return check_or_sanitize_refname(refname, flags, NULL);
215 void sanitize_refname_component(const char *refname, struct strbuf *out)
217 if (check_or_sanitize_refname(refname, REFNAME_ALLOW_ONELEVEL, out))
218 BUG("sanitizing refname '%s' check returned error", refname);
221 int refname_is_safe(const char *refname)
225 if (skip_prefix(refname, "refs/", &rest)) {
228 size_t restlen = strlen(rest);
230 /* rest must not be empty, or start or end with "/" */
231 if (!restlen || *rest == '/' || rest[restlen - 1] == '/')
235 * Does the refname try to escape refs/?
236 * For example: refs/foo/../bar is safe but refs/foo/../../bar
239 buf = xmallocz(restlen);
240 result = !normalize_path_copy(buf, rest) && !strcmp(buf, rest);
246 if (!isupper(*refname) && *refname != '_')
254 * Return true if refname, which has the specified oid and flags, can
255 * be resolved to an object in the database. If the referred-to object
256 * does not exist, emit a warning and return false.
258 int ref_resolves_to_object(const char *refname,
259 const struct object_id *oid,
262 if (flags & REF_ISBROKEN)
264 if (!has_object_file(oid)) {
265 error(_("%s does not point to a valid object!"), refname);
271 char *refs_resolve_refdup(struct ref_store *refs,
272 const char *refname, int resolve_flags,
273 struct object_id *oid, int *flags)
277 result = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
279 return xstrdup_or_null(result);
282 char *resolve_refdup(const char *refname, int resolve_flags,
283 struct object_id *oid, int *flags)
285 return refs_resolve_refdup(get_main_ref_store(the_repository),
286 refname, resolve_flags,
290 /* The argument to filter_refs */
298 int refs_read_ref_full(struct ref_store *refs, const char *refname,
299 int resolve_flags, struct object_id *oid, int *flags)
301 if (refs_resolve_ref_unsafe(refs, refname, resolve_flags, oid, flags))
306 int read_ref_full(const char *refname, int resolve_flags, struct object_id *oid, int *flags)
308 return refs_read_ref_full(get_main_ref_store(the_repository), refname,
309 resolve_flags, oid, flags);
312 int read_ref(const char *refname, struct object_id *oid)
314 return read_ref_full(refname, RESOLVE_REF_READING, oid, NULL);
317 int refs_ref_exists(struct ref_store *refs, const char *refname)
319 return !!refs_resolve_ref_unsafe(refs, refname, RESOLVE_REF_READING, NULL, NULL);
322 int ref_exists(const char *refname)
324 return refs_ref_exists(get_main_ref_store(the_repository), refname);
327 static int filter_refs(const char *refname, const struct object_id *oid,
328 int flags, void *data)
330 struct ref_filter *filter = (struct ref_filter *)data;
332 if (wildmatch(filter->pattern, refname, 0))
335 skip_prefix(refname, filter->prefix, &refname);
336 return filter->fn(refname, oid, flags, filter->cb_data);
339 enum peel_status peel_object(const struct object_id *name, struct object_id *oid)
341 struct object *o = lookup_unknown_object(the_repository, name);
343 if (o->type == OBJ_NONE) {
344 int type = oid_object_info(the_repository, name, NULL);
345 if (type < 0 || !object_as_type(o, type, 0))
349 if (o->type != OBJ_TAG)
352 o = deref_tag_noverify(o);
356 oidcpy(oid, &o->oid);
360 struct warn_if_dangling_data {
363 const struct string_list *refnames;
367 static int warn_if_dangling_symref(const char *refname, const struct object_id *oid,
368 int flags, void *cb_data)
370 struct warn_if_dangling_data *d = cb_data;
371 const char *resolves_to;
373 if (!(flags & REF_ISSYMREF))
376 resolves_to = resolve_ref_unsafe(refname, 0, NULL, NULL);
379 ? strcmp(resolves_to, d->refname)
380 : !string_list_has_string(d->refnames, resolves_to))) {
384 fprintf(d->fp, d->msg_fmt, refname);
389 void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname)
391 struct warn_if_dangling_data data;
394 data.refname = refname;
395 data.refnames = NULL;
396 data.msg_fmt = msg_fmt;
397 for_each_rawref(warn_if_dangling_symref, &data);
400 void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct string_list *refnames)
402 struct warn_if_dangling_data data;
406 data.refnames = refnames;
407 data.msg_fmt = msg_fmt;
408 for_each_rawref(warn_if_dangling_symref, &data);
411 int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
413 return refs_for_each_ref_in(refs, "refs/tags/", fn, cb_data);
416 int for_each_tag_ref(each_ref_fn fn, void *cb_data)
418 return refs_for_each_tag_ref(get_main_ref_store(the_repository), fn, cb_data);
421 int refs_for_each_branch_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
423 return refs_for_each_ref_in(refs, "refs/heads/", fn, cb_data);
426 int for_each_branch_ref(each_ref_fn fn, void *cb_data)
428 return refs_for_each_branch_ref(get_main_ref_store(the_repository), fn, cb_data);
431 int refs_for_each_remote_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
433 return refs_for_each_ref_in(refs, "refs/remotes/", fn, cb_data);
436 int for_each_remote_ref(each_ref_fn fn, void *cb_data)
438 return refs_for_each_remote_ref(get_main_ref_store(the_repository), fn, cb_data);
441 int head_ref_namespaced(each_ref_fn fn, void *cb_data)
443 struct strbuf buf = STRBUF_INIT;
445 struct object_id oid;
448 strbuf_addf(&buf, "%sHEAD", get_git_namespace());
449 if (!read_ref_full(buf.buf, RESOLVE_REF_READING, &oid, &flag))
450 ret = fn(buf.buf, &oid, flag, cb_data);
451 strbuf_release(&buf);
456 void normalize_glob_ref(struct string_list_item *item, const char *prefix,
459 struct strbuf normalized_pattern = STRBUF_INIT;
462 BUG("pattern must not start with '/'");
465 strbuf_addstr(&normalized_pattern, prefix);
467 else if (!starts_with(pattern, "refs/"))
468 strbuf_addstr(&normalized_pattern, "refs/");
469 strbuf_addstr(&normalized_pattern, pattern);
470 strbuf_strip_suffix(&normalized_pattern, "/");
472 item->string = strbuf_detach(&normalized_pattern, NULL);
473 item->util = has_glob_specials(pattern) ? NULL : item->string;
474 strbuf_release(&normalized_pattern);
477 int for_each_glob_ref_in(each_ref_fn fn, const char *pattern,
478 const char *prefix, void *cb_data)
480 struct strbuf real_pattern = STRBUF_INIT;
481 struct ref_filter filter;
484 if (!prefix && !starts_with(pattern, "refs/"))
485 strbuf_addstr(&real_pattern, "refs/");
487 strbuf_addstr(&real_pattern, prefix);
488 strbuf_addstr(&real_pattern, pattern);
490 if (!has_glob_specials(pattern)) {
491 /* Append implied '/' '*' if not present. */
492 strbuf_complete(&real_pattern, '/');
493 /* No need to check for '*', there is none. */
494 strbuf_addch(&real_pattern, '*');
497 filter.pattern = real_pattern.buf;
498 filter.prefix = prefix;
500 filter.cb_data = cb_data;
501 ret = for_each_ref(filter_refs, &filter);
503 strbuf_release(&real_pattern);
507 int for_each_glob_ref(each_ref_fn fn, const char *pattern, void *cb_data)
509 return for_each_glob_ref_in(fn, pattern, NULL, cb_data);
512 const char *prettify_refname(const char *name)
514 if (skip_prefix(name, "refs/heads/", &name) ||
515 skip_prefix(name, "refs/tags/", &name) ||
516 skip_prefix(name, "refs/remotes/", &name))
521 static const char *ref_rev_parse_rules[] = {
527 "refs/remotes/%.*s/HEAD",
531 #define NUM_REV_PARSE_RULES (ARRAY_SIZE(ref_rev_parse_rules) - 1)
534 * Is it possible that the caller meant full_name with abbrev_name?
535 * If so return a non-zero value to signal "yes"; the magnitude of
536 * the returned value gives the precedence used for disambiguation.
538 * If abbrev_name cannot mean full_name, return 0.
540 int refname_match(const char *abbrev_name, const char *full_name)
543 const int abbrev_name_len = strlen(abbrev_name);
544 const int num_rules = NUM_REV_PARSE_RULES;
546 for (p = ref_rev_parse_rules; *p; p++)
547 if (!strcmp(full_name, mkpath(*p, abbrev_name_len, abbrev_name)))
548 return &ref_rev_parse_rules[num_rules] - p;
554 * Given a 'prefix' expand it by the rules in 'ref_rev_parse_rules' and add
555 * the results to 'prefixes'
557 void expand_ref_prefix(struct strvec *prefixes, const char *prefix)
560 int len = strlen(prefix);
562 for (p = ref_rev_parse_rules; *p; p++)
563 strvec_pushf(prefixes, *p, len, prefix);
566 static const char default_branch_name_advice[] = N_(
567 "Using '%s' as the name for the initial branch. This default branch name\n"
568 "is subject to change. To configure the initial branch name to use in all\n"
569 "of your new repositories, which will suppress this warning, call:\n"
571 "\tgit config --global init.defaultBranch <name>\n"
573 "Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
574 "'development'. The just-created branch can be renamed via this command:\n"
576 "\tgit branch -m <name>\n"
579 char *repo_default_branch_name(struct repository *r, int quiet)
581 const char *config_key = "init.defaultbranch";
582 const char *config_display_key = "init.defaultBranch";
583 char *ret = NULL, *full_ref;
584 const char *env = getenv("GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME");
588 else if (repo_config_get_string(r, config_key, &ret) < 0)
589 die(_("could not retrieve `%s`"), config_display_key);
592 ret = xstrdup("master");
594 advise(_(default_branch_name_advice), ret);
597 full_ref = xstrfmt("refs/heads/%s", ret);
598 if (check_refname_format(full_ref, 0))
599 die(_("invalid branch name: %s = %s"), config_display_key, ret);
605 const char *git_default_branch_name(int quiet)
610 ret = repo_default_branch_name(the_repository, quiet);
616 * *string and *len will only be substituted, and *string returned (for
617 * later free()ing) if the string passed in is a magic short-hand form
620 static char *substitute_branch_name(struct repository *r,
621 const char **string, int *len,
622 int nonfatal_dangling_mark)
624 struct strbuf buf = STRBUF_INIT;
625 struct interpret_branch_name_options options = {
626 .nonfatal_dangling_mark = nonfatal_dangling_mark
628 int ret = repo_interpret_branch_name(r, *string, *len, &buf, &options);
632 *string = strbuf_detach(&buf, &size);
634 return (char *)*string;
640 int repo_dwim_ref(struct repository *r, const char *str, int len,
641 struct object_id *oid, char **ref, int nonfatal_dangling_mark)
643 char *last_branch = substitute_branch_name(r, &str, &len,
644 nonfatal_dangling_mark);
645 int refs_found = expand_ref(r, str, len, oid, ref);
650 int expand_ref(struct repository *repo, const char *str, int len,
651 struct object_id *oid, char **ref)
655 struct strbuf fullref = STRBUF_INIT;
658 for (p = ref_rev_parse_rules; *p; p++) {
659 struct object_id oid_from_ref;
660 struct object_id *this_result;
663 this_result = refs_found ? &oid_from_ref : oid;
664 strbuf_reset(&fullref);
665 strbuf_addf(&fullref, *p, len, str);
666 r = refs_resolve_ref_unsafe(get_main_ref_store(repo),
667 fullref.buf, RESOLVE_REF_READING,
672 if (!warn_ambiguous_refs)
674 } else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
675 warning(_("ignoring dangling symref %s"), fullref.buf);
676 } else if ((flag & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
677 warning(_("ignoring broken ref %s"), fullref.buf);
680 strbuf_release(&fullref);
684 int repo_dwim_log(struct repository *r, const char *str, int len,
685 struct object_id *oid, char **log)
687 struct ref_store *refs = get_main_ref_store(r);
688 char *last_branch = substitute_branch_name(r, &str, &len, 0);
691 struct strbuf path = STRBUF_INIT;
694 for (p = ref_rev_parse_rules; *p; p++) {
695 struct object_id hash;
696 const char *ref, *it;
699 strbuf_addf(&path, *p, len, str);
700 ref = refs_resolve_ref_unsafe(refs, path.buf,
705 if (refs_reflog_exists(refs, path.buf))
707 else if (strcmp(ref, path.buf) &&
708 refs_reflog_exists(refs, ref))
716 if (!warn_ambiguous_refs)
719 strbuf_release(&path);
724 int dwim_log(const char *str, int len, struct object_id *oid, char **log)
726 return repo_dwim_log(the_repository, str, len, oid, log);
729 static int is_per_worktree_ref(const char *refname)
731 return starts_with(refname, "refs/worktree/") ||
732 starts_with(refname, "refs/bisect/") ||
733 starts_with(refname, "refs/rewritten/");
736 static int is_pseudoref_syntax(const char *refname)
740 for (c = refname; *c; c++) {
741 if (!isupper(*c) && *c != '-' && *c != '_')
748 static int is_main_pseudoref_syntax(const char *refname)
750 return skip_prefix(refname, "main-worktree/", &refname) &&
752 is_pseudoref_syntax(refname);
755 static int is_other_pseudoref_syntax(const char *refname)
757 if (!skip_prefix(refname, "worktrees/", &refname))
759 refname = strchr(refname, '/');
760 if (!refname || !refname[1])
762 return is_pseudoref_syntax(refname + 1);
765 enum ref_type ref_type(const char *refname)
767 if (is_per_worktree_ref(refname))
768 return REF_TYPE_PER_WORKTREE;
769 if (is_pseudoref_syntax(refname))
770 return REF_TYPE_PSEUDOREF;
771 if (is_main_pseudoref_syntax(refname))
772 return REF_TYPE_MAIN_PSEUDOREF;
773 if (is_other_pseudoref_syntax(refname))
774 return REF_TYPE_OTHER_PSEUDOREF;
775 return REF_TYPE_NORMAL;
778 long get_files_ref_lock_timeout_ms(void)
780 static int configured = 0;
782 /* The default timeout is 100 ms: */
783 static int timeout_ms = 100;
786 git_config_get_int("core.filesreflocktimeout", &timeout_ms);
793 int refs_delete_ref(struct ref_store *refs, const char *msg,
795 const struct object_id *old_oid,
798 struct ref_transaction *transaction;
799 struct strbuf err = STRBUF_INIT;
801 transaction = ref_store_transaction_begin(refs, &err);
803 ref_transaction_delete(transaction, refname, old_oid,
805 ref_transaction_commit(transaction, &err)) {
806 error("%s", err.buf);
807 ref_transaction_free(transaction);
808 strbuf_release(&err);
811 ref_transaction_free(transaction);
812 strbuf_release(&err);
816 int delete_ref(const char *msg, const char *refname,
817 const struct object_id *old_oid, unsigned int flags)
819 return refs_delete_ref(get_main_ref_store(the_repository), msg, refname,
823 static void copy_reflog_msg(struct strbuf *sb, const char *msg)
828 while ((c = *msg++)) {
829 if (wasspace && isspace(c))
831 wasspace = isspace(c);
839 static char *normalize_reflog_message(const char *msg)
841 struct strbuf sb = STRBUF_INIT;
844 copy_reflog_msg(&sb, msg);
845 return strbuf_detach(&sb, NULL);
848 int should_autocreate_reflog(const char *refname)
850 switch (log_all_ref_updates) {
851 case LOG_REFS_ALWAYS:
853 case LOG_REFS_NORMAL:
854 return starts_with(refname, "refs/heads/") ||
855 starts_with(refname, "refs/remotes/") ||
856 starts_with(refname, "refs/notes/") ||
857 !strcmp(refname, "HEAD");
863 int is_branch(const char *refname)
865 return !strcmp(refname, "HEAD") || starts_with(refname, "refs/heads/");
868 struct read_ref_at_cb {
873 struct object_id *oid;
876 struct object_id ooid;
877 struct object_id noid;
881 timestamp_t *cutoff_time;
886 static void set_read_ref_cutoffs(struct read_ref_at_cb *cb,
887 timestamp_t timestamp, int tz, const char *message)
890 *cb->msg = xstrdup(message);
892 *cb->cutoff_time = timestamp;
896 *cb->cutoff_cnt = cb->reccnt;
899 static int read_ref_at_ent(struct object_id *ooid, struct object_id *noid,
900 const char *email, timestamp_t timestamp, int tz,
901 const char *message, void *cb_data)
903 struct read_ref_at_cb *cb = cb_data;
907 cb->date = timestamp;
910 * It is not possible for cb->cnt == 0 on the first iteration because
911 * that special case is handled in read_ref_at().
915 reached_count = cb->cnt == 0 && !is_null_oid(ooid);
916 if (timestamp <= cb->at_time || reached_count) {
917 set_read_ref_cutoffs(cb, timestamp, tz, message);
919 * we have not yet updated cb->[n|o]oid so they still
920 * hold the values for the previous record.
922 if (!is_null_oid(&cb->ooid) && !oideq(&cb->ooid, noid))
923 warning(_("log for ref %s has gap after %s"),
924 cb->refname, show_date(cb->date, cb->tz, DATE_MODE(RFC2822)));
926 oidcpy(cb->oid, ooid);
927 else if (!is_null_oid(&cb->ooid) || cb->date == cb->at_time)
928 oidcpy(cb->oid, noid);
929 else if (!oideq(noid, cb->oid))
930 warning(_("log for ref %s unexpectedly ended on %s"),
931 cb->refname, show_date(cb->date, cb->tz,
932 DATE_MODE(RFC2822)));
936 oidcpy(&cb->ooid, ooid);
937 oidcpy(&cb->noid, noid);
941 static int read_ref_at_ent_newest(struct object_id *ooid, struct object_id *noid,
942 const char *email, timestamp_t timestamp,
943 int tz, const char *message, void *cb_data)
945 struct read_ref_at_cb *cb = cb_data;
947 set_read_ref_cutoffs(cb, timestamp, tz, message);
948 oidcpy(cb->oid, noid);
949 /* We just want the first entry */
953 static int read_ref_at_ent_oldest(struct object_id *ooid, struct object_id *noid,
954 const char *email, timestamp_t timestamp,
955 int tz, const char *message, void *cb_data)
957 struct read_ref_at_cb *cb = cb_data;
959 set_read_ref_cutoffs(cb, timestamp, tz, message);
960 oidcpy(cb->oid, ooid);
961 if (is_null_oid(cb->oid))
962 oidcpy(cb->oid, noid);
963 /* We just want the first entry */
967 int read_ref_at(struct ref_store *refs, const char *refname,
968 unsigned int flags, timestamp_t at_time, int cnt,
969 struct object_id *oid, char **msg,
970 timestamp_t *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
972 struct read_ref_at_cb cb;
974 memset(&cb, 0, sizeof(cb));
975 cb.refname = refname;
976 cb.at_time = at_time;
979 cb.cutoff_time = cutoff_time;
980 cb.cutoff_tz = cutoff_tz;
981 cb.cutoff_cnt = cutoff_cnt;
985 refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent_newest, &cb);
989 refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent, &cb);
992 if (flags & GET_OID_QUIETLY)
995 die(_("log for %s is empty"), refname);
1000 refs_for_each_reflog_ent(refs, refname, read_ref_at_ent_oldest, &cb);
1005 struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
1008 struct ref_transaction *tr;
1011 CALLOC_ARRAY(tr, 1);
1012 tr->ref_store = refs;
1016 struct ref_transaction *ref_transaction_begin(struct strbuf *err)
1018 return ref_store_transaction_begin(get_main_ref_store(the_repository), err);
1021 void ref_transaction_free(struct ref_transaction *transaction)
1028 switch (transaction->state) {
1029 case REF_TRANSACTION_OPEN:
1030 case REF_TRANSACTION_CLOSED:
1033 case REF_TRANSACTION_PREPARED:
1034 BUG("free called on a prepared reference transaction");
1037 BUG("unexpected reference transaction state");
1041 for (i = 0; i < transaction->nr; i++) {
1042 free(transaction->updates[i]->msg);
1043 free(transaction->updates[i]);
1045 free(transaction->updates);
1049 struct ref_update *ref_transaction_add_update(
1050 struct ref_transaction *transaction,
1051 const char *refname, unsigned int flags,
1052 const struct object_id *new_oid,
1053 const struct object_id *old_oid,
1056 struct ref_update *update;
1058 if (transaction->state != REF_TRANSACTION_OPEN)
1059 BUG("update called for transaction that is not open");
1061 FLEX_ALLOC_STR(update, refname, refname);
1062 ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
1063 transaction->updates[transaction->nr++] = update;
1065 update->flags = flags;
1067 if (flags & REF_HAVE_NEW)
1068 oidcpy(&update->new_oid, new_oid);
1069 if (flags & REF_HAVE_OLD)
1070 oidcpy(&update->old_oid, old_oid);
1071 update->msg = normalize_reflog_message(msg);
1075 int ref_transaction_update(struct ref_transaction *transaction,
1076 const char *refname,
1077 const struct object_id *new_oid,
1078 const struct object_id *old_oid,
1079 unsigned int flags, const char *msg,
1084 if ((new_oid && !is_null_oid(new_oid)) ?
1085 check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
1086 !refname_is_safe(refname)) {
1087 strbuf_addf(err, _("refusing to update ref with bad name '%s'"),
1092 if (flags & ~REF_TRANSACTION_UPDATE_ALLOWED_FLAGS)
1093 BUG("illegal flags 0x%x passed to ref_transaction_update()", flags);
1095 flags |= (new_oid ? REF_HAVE_NEW : 0) | (old_oid ? REF_HAVE_OLD : 0);
1097 ref_transaction_add_update(transaction, refname, flags,
1098 new_oid, old_oid, msg);
1102 int ref_transaction_create(struct ref_transaction *transaction,
1103 const char *refname,
1104 const struct object_id *new_oid,
1105 unsigned int flags, const char *msg,
1108 if (!new_oid || is_null_oid(new_oid))
1109 BUG("create called without valid new_oid");
1110 return ref_transaction_update(transaction, refname, new_oid,
1111 null_oid(), flags, msg, err);
1114 int ref_transaction_delete(struct ref_transaction *transaction,
1115 const char *refname,
1116 const struct object_id *old_oid,
1117 unsigned int flags, const char *msg,
1120 if (old_oid && is_null_oid(old_oid))
1121 BUG("delete called with old_oid set to zeros");
1122 return ref_transaction_update(transaction, refname,
1123 null_oid(), old_oid,
1127 int ref_transaction_verify(struct ref_transaction *transaction,
1128 const char *refname,
1129 const struct object_id *old_oid,
1134 BUG("verify called with old_oid set to NULL");
1135 return ref_transaction_update(transaction, refname,
1140 int refs_update_ref(struct ref_store *refs, const char *msg,
1141 const char *refname, const struct object_id *new_oid,
1142 const struct object_id *old_oid, unsigned int flags,
1143 enum action_on_err onerr)
1145 struct ref_transaction *t = NULL;
1146 struct strbuf err = STRBUF_INIT;
1149 t = ref_store_transaction_begin(refs, &err);
1151 ref_transaction_update(t, refname, new_oid, old_oid, flags, msg,
1153 ref_transaction_commit(t, &err)) {
1155 ref_transaction_free(t);
1158 const char *str = _("update_ref failed for ref '%s': %s");
1161 case UPDATE_REFS_MSG_ON_ERR:
1162 error(str, refname, err.buf);
1164 case UPDATE_REFS_DIE_ON_ERR:
1165 die(str, refname, err.buf);
1167 case UPDATE_REFS_QUIET_ON_ERR:
1170 strbuf_release(&err);
1173 strbuf_release(&err);
1175 ref_transaction_free(t);
1179 int update_ref(const char *msg, const char *refname,
1180 const struct object_id *new_oid,
1181 const struct object_id *old_oid,
1182 unsigned int flags, enum action_on_err onerr)
1184 return refs_update_ref(get_main_ref_store(the_repository), msg, refname, new_oid,
1185 old_oid, flags, onerr);
1188 char *refs_shorten_unambiguous_ref(struct ref_store *refs,
1189 const char *refname, int strict)
1192 static char **scanf_fmts;
1193 static int nr_rules;
1195 struct strbuf resolved_buf = STRBUF_INIT;
1199 * Pre-generate scanf formats from ref_rev_parse_rules[].
1200 * Generate a format suitable for scanf from a
1201 * ref_rev_parse_rules rule by interpolating "%s" at the
1202 * location of the "%.*s".
1204 size_t total_len = 0;
1207 /* the rule list is NULL terminated, count them first */
1208 for (nr_rules = 0; ref_rev_parse_rules[nr_rules]; nr_rules++)
1209 /* -2 for strlen("%.*s") - strlen("%s"); +1 for NUL */
1210 total_len += strlen(ref_rev_parse_rules[nr_rules]) - 2 + 1;
1212 scanf_fmts = xmalloc(st_add(st_mult(sizeof(char *), nr_rules), total_len));
1215 for (i = 0; i < nr_rules; i++) {
1216 assert(offset < total_len);
1217 scanf_fmts[i] = (char *)&scanf_fmts[nr_rules] + offset;
1218 offset += xsnprintf(scanf_fmts[i], total_len - offset,
1219 ref_rev_parse_rules[i], 2, "%s") + 1;
1223 /* bail out if there are no rules */
1225 return xstrdup(refname);
1227 /* buffer for scanf result, at most refname must fit */
1228 short_name = xstrdup(refname);
1230 /* skip first rule, it will always match */
1231 for (i = nr_rules - 1; i > 0 ; --i) {
1233 int rules_to_fail = i;
1236 if (1 != sscanf(refname, scanf_fmts[i], short_name))
1239 short_name_len = strlen(short_name);
1242 * in strict mode, all (except the matched one) rules
1243 * must fail to resolve to a valid non-ambiguous ref
1246 rules_to_fail = nr_rules;
1249 * check if the short name resolves to a valid ref,
1250 * but use only rules prior to the matched one
1252 for (j = 0; j < rules_to_fail; j++) {
1253 const char *rule = ref_rev_parse_rules[j];
1255 /* skip matched rule */
1260 * the short name is ambiguous, if it resolves
1261 * (with this previous rule) to a valid ref
1262 * read_ref() returns 0 on success
1264 strbuf_reset(&resolved_buf);
1265 strbuf_addf(&resolved_buf, rule,
1266 short_name_len, short_name);
1267 if (refs_ref_exists(refs, resolved_buf.buf))
1272 * short name is non-ambiguous if all previous rules
1273 * haven't resolved to a valid ref
1275 if (j == rules_to_fail) {
1276 strbuf_release(&resolved_buf);
1281 strbuf_release(&resolved_buf);
1283 return xstrdup(refname);
1286 char *shorten_unambiguous_ref(const char *refname, int strict)
1288 return refs_shorten_unambiguous_ref(get_main_ref_store(the_repository),
1292 static struct string_list *hide_refs;
1294 int parse_hide_refs_config(const char *var, const char *value, const char *section)
1297 if (!strcmp("transfer.hiderefs", var) ||
1298 (!parse_config_key(var, section, NULL, NULL, &key) &&
1299 !strcmp(key, "hiderefs"))) {
1304 return config_error_nonbool(var);
1305 ref = xstrdup(value);
1307 while (len && ref[len - 1] == '/')
1310 CALLOC_ARRAY(hide_refs, 1);
1311 hide_refs->strdup_strings = 1;
1313 string_list_append(hide_refs, ref);
1318 int ref_is_hidden(const char *refname, const char *refname_full)
1324 for (i = hide_refs->nr - 1; i >= 0; i--) {
1325 const char *match = hide_refs->items[i].string;
1326 const char *subject;
1330 if (*match == '!') {
1335 if (*match == '^') {
1336 subject = refname_full;
1342 /* refname can be NULL when namespaces are used. */
1344 skip_prefix(subject, match, &p) &&
1351 const char *find_descendant_ref(const char *dirname,
1352 const struct string_list *extras,
1353 const struct string_list *skip)
1361 * Look at the place where dirname would be inserted into
1362 * extras. If there is an entry at that position that starts
1363 * with dirname (remember, dirname includes the trailing
1364 * slash) and is not in skip, then we have a conflict.
1366 for (pos = string_list_find_insert_index(extras, dirname, 0);
1367 pos < extras->nr; pos++) {
1368 const char *extra_refname = extras->items[pos].string;
1370 if (!starts_with(extra_refname, dirname))
1373 if (!skip || !string_list_has_string(skip, extra_refname))
1374 return extra_refname;
1379 int refs_rename_ref_available(struct ref_store *refs,
1380 const char *old_refname,
1381 const char *new_refname)
1383 struct string_list skip = STRING_LIST_INIT_NODUP;
1384 struct strbuf err = STRBUF_INIT;
1387 string_list_insert(&skip, old_refname);
1388 ok = !refs_verify_refname_available(refs, new_refname,
1391 error("%s", err.buf);
1393 string_list_clear(&skip, 0);
1394 strbuf_release(&err);
1398 int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1400 struct object_id oid;
1403 if (!refs_read_ref_full(refs, "HEAD", RESOLVE_REF_READING,
1405 return fn("HEAD", &oid, flag, cb_data);
1410 int head_ref(each_ref_fn fn, void *cb_data)
1412 return refs_head_ref(get_main_ref_store(the_repository), fn, cb_data);
1415 struct ref_iterator *refs_ref_iterator_begin(
1416 struct ref_store *refs,
1417 const char *prefix, int trim, int flags)
1419 struct ref_iterator *iter;
1421 if (ref_paranoia < 0)
1422 ref_paranoia = git_env_bool("GIT_REF_PARANOIA", 0);
1424 flags |= DO_FOR_EACH_INCLUDE_BROKEN;
1426 iter = refs->be->iterator_begin(refs, prefix, flags);
1429 * `iterator_begin()` already takes care of prefix, but we
1430 * might need to do some trimming:
1433 iter = prefix_ref_iterator_begin(iter, "", trim);
1435 /* Sanity check for subclasses: */
1437 BUG("reference iterator is not ordered");
1443 * Call fn for each reference in the specified submodule for which the
1444 * refname begins with prefix. If trim is non-zero, then trim that
1445 * many characters off the beginning of each refname before passing
1446 * the refname to fn. flags can be DO_FOR_EACH_INCLUDE_BROKEN to
1447 * include broken references in the iteration. If fn ever returns a
1448 * non-zero value, stop the iteration and return that value;
1449 * otherwise, return 0.
1451 static int do_for_each_repo_ref(struct repository *r, const char *prefix,
1452 each_repo_ref_fn fn, int trim, int flags,
1455 struct ref_iterator *iter;
1456 struct ref_store *refs = get_main_ref_store(r);
1461 iter = refs_ref_iterator_begin(refs, prefix, trim, flags);
1463 return do_for_each_repo_ref_iterator(r, iter, fn, cb_data);
1466 struct do_for_each_ref_help {
1471 static int do_for_each_ref_helper(struct repository *r,
1472 const char *refname,
1473 const struct object_id *oid,
1477 struct do_for_each_ref_help *hp = cb_data;
1479 return hp->fn(refname, oid, flags, hp->cb_data);
1482 static int do_for_each_ref(struct ref_store *refs, const char *prefix,
1483 each_ref_fn fn, int trim, int flags, void *cb_data)
1485 struct ref_iterator *iter;
1486 struct do_for_each_ref_help hp = { fn, cb_data };
1491 iter = refs_ref_iterator_begin(refs, prefix, trim, flags);
1493 return do_for_each_repo_ref_iterator(the_repository, iter,
1494 do_for_each_ref_helper, &hp);
1497 int refs_for_each_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1499 return do_for_each_ref(refs, "", fn, 0, 0, cb_data);
1502 int for_each_ref(each_ref_fn fn, void *cb_data)
1504 return refs_for_each_ref(get_main_ref_store(the_repository), fn, cb_data);
1507 int refs_for_each_ref_in(struct ref_store *refs, const char *prefix,
1508 each_ref_fn fn, void *cb_data)
1510 return do_for_each_ref(refs, prefix, fn, strlen(prefix), 0, cb_data);
1513 int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data)
1515 return refs_for_each_ref_in(get_main_ref_store(the_repository), prefix, fn, cb_data);
1518 int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data, unsigned int broken)
1520 unsigned int flag = 0;
1523 flag = DO_FOR_EACH_INCLUDE_BROKEN;
1524 return do_for_each_ref(get_main_ref_store(the_repository),
1525 prefix, fn, 0, flag, cb_data);
1528 int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix,
1529 each_ref_fn fn, void *cb_data,
1530 unsigned int broken)
1532 unsigned int flag = 0;
1535 flag = DO_FOR_EACH_INCLUDE_BROKEN;
1536 return do_for_each_ref(refs, prefix, fn, 0, flag, cb_data);
1539 int for_each_replace_ref(struct repository *r, each_repo_ref_fn fn, void *cb_data)
1541 return do_for_each_repo_ref(r, git_replace_ref_base, fn,
1542 strlen(git_replace_ref_base),
1543 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1546 int for_each_namespaced_ref(each_ref_fn fn, void *cb_data)
1548 struct strbuf buf = STRBUF_INIT;
1550 strbuf_addf(&buf, "%srefs/", get_git_namespace());
1551 ret = do_for_each_ref(get_main_ref_store(the_repository),
1552 buf.buf, fn, 0, 0, cb_data);
1553 strbuf_release(&buf);
1557 int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1559 return do_for_each_ref(refs, "", fn, 0,
1560 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1563 int for_each_rawref(each_ref_fn fn, void *cb_data)
1565 return refs_for_each_rawref(get_main_ref_store(the_repository), fn, cb_data);
1568 static int qsort_strcmp(const void *va, const void *vb)
1570 const char *a = *(const char **)va;
1571 const char *b = *(const char **)vb;
1573 return strcmp(a, b);
1576 static void find_longest_prefixes_1(struct string_list *out,
1577 struct strbuf *prefix,
1578 const char **patterns, size_t nr)
1582 for (i = 0; i < nr; i++) {
1583 char c = patterns[i][prefix->len];
1584 if (!c || is_glob_special(c)) {
1585 string_list_append(out, prefix->buf);
1595 * Set "end" to the index of the element _after_ the last one
1598 for (end = i + 1; end < nr; end++) {
1599 if (patterns[i][prefix->len] != patterns[end][prefix->len])
1603 strbuf_addch(prefix, patterns[i][prefix->len]);
1604 find_longest_prefixes_1(out, prefix, patterns + i, end - i);
1605 strbuf_setlen(prefix, prefix->len - 1);
1611 static void find_longest_prefixes(struct string_list *out,
1612 const char **patterns)
1614 struct strvec sorted = STRVEC_INIT;
1615 struct strbuf prefix = STRBUF_INIT;
1617 strvec_pushv(&sorted, patterns);
1618 QSORT(sorted.v, sorted.nr, qsort_strcmp);
1620 find_longest_prefixes_1(out, &prefix, sorted.v, sorted.nr);
1622 strvec_clear(&sorted);
1623 strbuf_release(&prefix);
1626 int for_each_fullref_in_prefixes(const char *namespace,
1627 const char **patterns,
1628 each_ref_fn fn, void *cb_data,
1629 unsigned int broken)
1631 struct string_list prefixes = STRING_LIST_INIT_DUP;
1632 struct string_list_item *prefix;
1633 struct strbuf buf = STRBUF_INIT;
1634 int ret = 0, namespace_len;
1636 find_longest_prefixes(&prefixes, patterns);
1639 strbuf_addstr(&buf, namespace);
1640 namespace_len = buf.len;
1642 for_each_string_list_item(prefix, &prefixes) {
1643 strbuf_addstr(&buf, prefix->string);
1644 ret = for_each_fullref_in(buf.buf, fn, cb_data, broken);
1647 strbuf_setlen(&buf, namespace_len);
1650 string_list_clear(&prefixes, 0);
1651 strbuf_release(&buf);
1655 static int refs_read_special_head(struct ref_store *ref_store,
1656 const char *refname, struct object_id *oid,
1657 struct strbuf *referent, unsigned int *type)
1659 struct strbuf full_path = STRBUF_INIT;
1660 struct strbuf content = STRBUF_INIT;
1662 strbuf_addf(&full_path, "%s/%s", ref_store->gitdir, refname);
1664 if (strbuf_read_file(&content, full_path.buf, 0) < 0)
1667 result = parse_loose_ref_contents(content.buf, oid, referent, type);
1670 strbuf_release(&full_path);
1671 strbuf_release(&content);
1675 int refs_read_raw_ref(struct ref_store *ref_store, const char *refname,
1676 struct object_id *oid, struct strbuf *referent,
1677 unsigned int *type, int *failure_errno)
1681 if (!strcmp(refname, "FETCH_HEAD") || !strcmp(refname, "MERGE_HEAD")) {
1682 return refs_read_special_head(ref_store, refname, oid, referent,
1686 return ref_store->be->read_raw_ref(ref_store, refname, oid, referent,
1687 type, failure_errno);
1690 const char *refs_resolve_ref_unsafe_with_errno(struct ref_store *refs,
1691 const char *refname,
1693 struct object_id *oid,
1694 int *flags, int *failure_errno)
1696 static struct strbuf sb_refname = STRBUF_INIT;
1697 struct object_id unused_oid;
1704 flags = &unused_flags;
1709 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1710 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1711 !refname_is_safe(refname)) {
1712 *failure_errno = EINVAL;
1717 * dwim_ref() uses REF_ISBROKEN to distinguish between
1718 * missing refs and refs that were present but invalid,
1719 * to complain about the latter to stderr.
1721 * We don't know whether the ref exists, so don't set
1724 *flags |= REF_BAD_NAME;
1727 for (symref_count = 0; symref_count < SYMREF_MAXDEPTH; symref_count++) {
1728 unsigned int read_flags = 0;
1729 int read_failure = 0;
1731 if (refs_read_raw_ref(refs, refname, oid, &sb_refname,
1732 &read_flags, &read_failure)) {
1733 *flags |= read_flags;
1735 *failure_errno = read_failure;
1737 /* In reading mode, refs must eventually resolve */
1738 if (resolve_flags & RESOLVE_REF_READING)
1742 * Otherwise a missing ref is OK. But the files backend
1743 * may show errors besides ENOENT if there are
1744 * similarly-named refs.
1746 if (read_failure != ENOENT && read_failure != EISDIR &&
1747 read_failure != ENOTDIR)
1751 if (*flags & REF_BAD_NAME)
1752 *flags |= REF_ISBROKEN;
1756 *flags |= read_flags;
1758 if (!(read_flags & REF_ISSYMREF)) {
1759 if (*flags & REF_BAD_NAME) {
1761 *flags |= REF_ISBROKEN;
1766 refname = sb_refname.buf;
1767 if (resolve_flags & RESOLVE_REF_NO_RECURSE) {
1771 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1772 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1773 !refname_is_safe(refname)) {
1774 *failure_errno = EINVAL;
1778 *flags |= REF_ISBROKEN | REF_BAD_NAME;
1782 *failure_errno = ELOOP;
1786 const char *refs_resolve_ref_unsafe(struct ref_store *refs, const char *refname,
1787 int resolve_flags, struct object_id *oid,
1791 return refs_resolve_ref_unsafe_with_errno(refs, refname, resolve_flags,
1792 oid, flags, &ignore);
1795 /* backend functions */
1796 int refs_init_db(struct strbuf *err)
1798 struct ref_store *refs = get_main_ref_store(the_repository);
1800 return refs->be->init_db(refs, err);
1803 const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
1804 struct object_id *oid, int *flags)
1806 return refs_resolve_ref_unsafe(get_main_ref_store(the_repository), refname,
1807 resolve_flags, oid, flags);
1810 int resolve_gitlink_ref(const char *submodule, const char *refname,
1811 struct object_id *oid)
1813 struct ref_store *refs;
1816 refs = get_submodule_ref_store(submodule);
1821 if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &flags) ||
1827 struct ref_store_hash_entry
1829 struct hashmap_entry ent;
1831 struct ref_store *refs;
1833 /* NUL-terminated identifier of the ref store: */
1834 char name[FLEX_ARRAY];
1837 static int ref_store_hash_cmp(const void *unused_cmp_data,
1838 const struct hashmap_entry *eptr,
1839 const struct hashmap_entry *entry_or_key,
1840 const void *keydata)
1842 const struct ref_store_hash_entry *e1, *e2;
1845 e1 = container_of(eptr, const struct ref_store_hash_entry, ent);
1846 e2 = container_of(entry_or_key, const struct ref_store_hash_entry, ent);
1847 name = keydata ? keydata : e2->name;
1849 return strcmp(e1->name, name);
1852 static struct ref_store_hash_entry *alloc_ref_store_hash_entry(
1853 const char *name, struct ref_store *refs)
1855 struct ref_store_hash_entry *entry;
1857 FLEX_ALLOC_STR(entry, name, name);
1858 hashmap_entry_init(&entry->ent, strhash(name));
1863 /* A hashmap of ref_stores, stored by submodule name: */
1864 static struct hashmap submodule_ref_stores;
1866 /* A hashmap of ref_stores, stored by worktree id: */
1867 static struct hashmap worktree_ref_stores;
1870 * Look up a ref store by name. If that ref_store hasn't been
1871 * registered yet, return NULL.
1873 static struct ref_store *lookup_ref_store_map(struct hashmap *map,
1876 struct ref_store_hash_entry *entry;
1879 if (!map->tablesize)
1880 /* It's initialized on demand in register_ref_store(). */
1883 hash = strhash(name);
1884 entry = hashmap_get_entry_from_hash(map, hash, name,
1885 struct ref_store_hash_entry, ent);
1886 return entry ? entry->refs : NULL;
1890 * Create, record, and return a ref_store instance for the specified
1893 static struct ref_store *ref_store_init(const char *gitdir,
1896 const char *be_name = "files";
1897 struct ref_storage_be *be = find_ref_storage_backend(be_name);
1898 struct ref_store *refs;
1901 BUG("reference backend %s is unknown", be_name);
1903 refs = be->init(gitdir, flags);
1907 struct ref_store *get_main_ref_store(struct repository *r)
1909 if (r->refs_private)
1910 return r->refs_private;
1913 BUG("attempting to get main_ref_store outside of repository");
1915 r->refs_private = ref_store_init(r->gitdir, REF_STORE_ALL_CAPS);
1916 r->refs_private = maybe_debug_wrap_ref_store(r->gitdir, r->refs_private);
1917 return r->refs_private;
1921 * Associate a ref store with a name. It is a fatal error to call this
1922 * function twice for the same name.
1924 static void register_ref_store_map(struct hashmap *map,
1926 struct ref_store *refs,
1929 struct ref_store_hash_entry *entry;
1931 if (!map->tablesize)
1932 hashmap_init(map, ref_store_hash_cmp, NULL, 0);
1934 entry = alloc_ref_store_hash_entry(name, refs);
1935 if (hashmap_put(map, &entry->ent))
1936 BUG("%s ref_store '%s' initialized twice", type, name);
1939 struct ref_store *get_submodule_ref_store(const char *submodule)
1941 struct strbuf submodule_sb = STRBUF_INIT;
1942 struct ref_store *refs;
1943 char *to_free = NULL;
1949 len = strlen(submodule);
1950 while (len && is_dir_sep(submodule[len - 1]))
1956 /* We need to strip off one or more trailing slashes */
1957 submodule = to_free = xmemdupz(submodule, len);
1959 refs = lookup_ref_store_map(&submodule_ref_stores, submodule);
1963 strbuf_addstr(&submodule_sb, submodule);
1964 if (!is_nonbare_repository_dir(&submodule_sb))
1967 if (submodule_to_gitdir(&submodule_sb, submodule))
1970 /* assume that add_submodule_odb() has been called */
1971 refs = ref_store_init(submodule_sb.buf,
1972 REF_STORE_READ | REF_STORE_ODB);
1973 register_ref_store_map(&submodule_ref_stores, "submodule",
1977 strbuf_release(&submodule_sb);
1983 struct ref_store *get_worktree_ref_store(const struct worktree *wt)
1985 struct ref_store *refs;
1989 return get_main_ref_store(the_repository);
1991 id = wt->id ? wt->id : "/";
1992 refs = lookup_ref_store_map(&worktree_ref_stores, id);
1997 refs = ref_store_init(git_common_path("worktrees/%s", wt->id),
1998 REF_STORE_ALL_CAPS);
2000 refs = ref_store_init(get_git_common_dir(),
2001 REF_STORE_ALL_CAPS);
2004 register_ref_store_map(&worktree_ref_stores, "worktree",
2009 void base_ref_store_init(struct ref_store *refs,
2010 const struct ref_storage_be *be)
2015 /* backend functions */
2016 int refs_pack_refs(struct ref_store *refs, unsigned int flags)
2018 return refs->be->pack_refs(refs, flags);
2021 int peel_iterated_oid(const struct object_id *base, struct object_id *peeled)
2023 if (current_ref_iter &&
2024 (current_ref_iter->oid == base ||
2025 oideq(current_ref_iter->oid, base)))
2026 return ref_iterator_peel(current_ref_iter, peeled);
2028 return peel_object(base, peeled);
2031 int refs_create_symref(struct ref_store *refs,
2032 const char *ref_target,
2033 const char *refs_heads_master,
2039 msg = normalize_reflog_message(logmsg);
2040 retval = refs->be->create_symref(refs, ref_target, refs_heads_master,
2046 int create_symref(const char *ref_target, const char *refs_heads_master,
2049 return refs_create_symref(get_main_ref_store(the_repository), ref_target,
2050 refs_heads_master, logmsg);
2053 int ref_update_reject_duplicates(struct string_list *refnames,
2056 size_t i, n = refnames->nr;
2060 for (i = 1; i < n; i++) {
2061 int cmp = strcmp(refnames->items[i - 1].string,
2062 refnames->items[i].string);
2066 _("multiple updates for ref '%s' not allowed"),
2067 refnames->items[i].string);
2069 } else if (cmp > 0) {
2070 BUG("ref_update_reject_duplicates() received unsorted list");
2076 static int run_transaction_hook(struct ref_transaction *transaction,
2079 struct strbuf buf = STRBUF_INIT;
2080 struct run_hooks_opt opt = RUN_HOOKS_OPT_INIT;
2081 struct string_list to_stdin = STRING_LIST_INIT_DUP;
2083 char o[GIT_MAX_HEXSZ + 1], n[GIT_MAX_HEXSZ + 1];
2085 if (!hook_exists("reference-transaction"))
2088 strvec_push(&opt.args, state);
2090 for (i = 0; i < transaction->nr; i++) {
2091 struct ref_update *update = transaction->updates[i];
2092 oid_to_hex_r(o, &update->old_oid);
2093 oid_to_hex_r(n, &update->new_oid);
2096 strbuf_addf(&buf, "%s %s %s", o, n, update->refname);
2097 string_list_append(&to_stdin, buf.buf);
2100 opt.feed_pipe = pipe_from_string_list;
2101 opt.feed_pipe_ctx = &to_stdin;
2103 ret = run_hooks("reference-transaction", &opt);
2104 run_hooks_opt_clear(&opt);
2105 strbuf_release(&buf);
2106 string_list_clear(&to_stdin, 0);
2111 int ref_transaction_prepare(struct ref_transaction *transaction,
2114 struct ref_store *refs = transaction->ref_store;
2117 switch (transaction->state) {
2118 case REF_TRANSACTION_OPEN:
2121 case REF_TRANSACTION_PREPARED:
2122 BUG("prepare called twice on reference transaction");
2124 case REF_TRANSACTION_CLOSED:
2125 BUG("prepare called on a closed reference transaction");
2128 BUG("unexpected reference transaction state");
2132 if (getenv(GIT_QUARANTINE_ENVIRONMENT)) {
2134 _("ref updates forbidden inside quarantine environment"));
2138 ret = refs->be->transaction_prepare(refs, transaction, err);
2142 ret = run_transaction_hook(transaction, "prepared");
2144 ref_transaction_abort(transaction, err);
2145 die(_("ref updates aborted by hook"));
2151 int ref_transaction_abort(struct ref_transaction *transaction,
2154 struct ref_store *refs = transaction->ref_store;
2157 switch (transaction->state) {
2158 case REF_TRANSACTION_OPEN:
2159 /* No need to abort explicitly. */
2161 case REF_TRANSACTION_PREPARED:
2162 ret = refs->be->transaction_abort(refs, transaction, err);
2164 case REF_TRANSACTION_CLOSED:
2165 BUG("abort called on a closed reference transaction");
2168 BUG("unexpected reference transaction state");
2172 run_transaction_hook(transaction, "aborted");
2174 ref_transaction_free(transaction);
2178 int ref_transaction_commit(struct ref_transaction *transaction,
2181 struct ref_store *refs = transaction->ref_store;
2184 switch (transaction->state) {
2185 case REF_TRANSACTION_OPEN:
2186 /* Need to prepare first. */
2187 ret = ref_transaction_prepare(transaction, err);
2191 case REF_TRANSACTION_PREPARED:
2192 /* Fall through to finish. */
2194 case REF_TRANSACTION_CLOSED:
2195 BUG("commit called on a closed reference transaction");
2198 BUG("unexpected reference transaction state");
2202 ret = refs->be->transaction_finish(refs, transaction, err);
2204 run_transaction_hook(transaction, "committed");
2208 int refs_verify_refname_available(struct ref_store *refs,
2209 const char *refname,
2210 const struct string_list *extras,
2211 const struct string_list *skip,
2215 const char *extra_refname;
2216 struct strbuf dirname = STRBUF_INIT;
2217 struct strbuf referent = STRBUF_INIT;
2218 struct object_id oid;
2220 struct ref_iterator *iter;
2225 * For the sake of comments in this function, suppose that
2226 * refname is "refs/foo/bar".
2231 strbuf_grow(&dirname, strlen(refname) + 1);
2232 for (slash = strchr(refname, '/'); slash; slash = strchr(slash + 1, '/')) {
2233 /* Expand dirname to the new prefix, not including the trailing slash: */
2234 strbuf_add(&dirname, refname + dirname.len, slash - refname - dirname.len);
2237 * We are still at a leading dir of the refname (e.g.,
2238 * "refs/foo"; if there is a reference with that name,
2239 * it is a conflict, *unless* it is in skip.
2241 if (skip && string_list_has_string(skip, dirname.buf))
2244 if (!refs_read_raw_ref(refs, dirname.buf, &oid, &referent,
2246 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2247 dirname.buf, refname);
2251 if (extras && string_list_has_string(extras, dirname.buf)) {
2252 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2253 refname, dirname.buf);
2259 * We are at the leaf of our refname (e.g., "refs/foo/bar").
2260 * There is no point in searching for a reference with that
2261 * name, because a refname isn't considered to conflict with
2262 * itself. But we still need to check for references whose
2263 * names are in the "refs/foo/bar/" namespace, because they
2266 strbuf_addstr(&dirname, refname + dirname.len);
2267 strbuf_addch(&dirname, '/');
2269 iter = refs_ref_iterator_begin(refs, dirname.buf, 0,
2270 DO_FOR_EACH_INCLUDE_BROKEN);
2271 while ((ok = ref_iterator_advance(iter)) == ITER_OK) {
2273 string_list_has_string(skip, iter->refname))
2276 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2277 iter->refname, refname);
2278 ref_iterator_abort(iter);
2282 if (ok != ITER_DONE)
2283 BUG("error while iterating over references");
2285 extra_refname = find_descendant_ref(dirname.buf, extras, skip);
2287 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2288 refname, extra_refname);
2293 strbuf_release(&referent);
2294 strbuf_release(&dirname);
2298 int refs_for_each_reflog(struct ref_store *refs, each_ref_fn fn, void *cb_data)
2300 struct ref_iterator *iter;
2301 struct do_for_each_ref_help hp = { fn, cb_data };
2303 iter = refs->be->reflog_iterator_begin(refs);
2305 return do_for_each_repo_ref_iterator(the_repository, iter,
2306 do_for_each_ref_helper, &hp);
2309 int for_each_reflog(each_ref_fn fn, void *cb_data)
2311 return refs_for_each_reflog(get_main_ref_store(the_repository), fn, cb_data);
2314 int refs_for_each_reflog_ent_reverse(struct ref_store *refs,
2315 const char *refname,
2316 each_reflog_ent_fn fn,
2319 return refs->be->for_each_reflog_ent_reverse(refs, refname,
2323 int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn,
2326 return refs_for_each_reflog_ent_reverse(get_main_ref_store(the_repository),
2327 refname, fn, cb_data);
2330 int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname,
2331 each_reflog_ent_fn fn, void *cb_data)
2333 return refs->be->for_each_reflog_ent(refs, refname, fn, cb_data);
2336 int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn,
2339 return refs_for_each_reflog_ent(get_main_ref_store(the_repository), refname,
2343 int refs_reflog_exists(struct ref_store *refs, const char *refname)
2345 return refs->be->reflog_exists(refs, refname);
2348 int reflog_exists(const char *refname)
2350 return refs_reflog_exists(get_main_ref_store(the_repository), refname);
2353 int refs_create_reflog(struct ref_store *refs, const char *refname,
2354 int force_create, struct strbuf *err)
2356 return refs->be->create_reflog(refs, refname, force_create, err);
2359 int safe_create_reflog(const char *refname, int force_create,
2362 return refs_create_reflog(get_main_ref_store(the_repository), refname,
2366 int refs_delete_reflog(struct ref_store *refs, const char *refname)
2368 return refs->be->delete_reflog(refs, refname);
2371 int delete_reflog(const char *refname)
2373 return refs_delete_reflog(get_main_ref_store(the_repository), refname);
2376 int refs_reflog_expire(struct ref_store *refs,
2377 const char *refname, const struct object_id *oid,
2379 reflog_expiry_prepare_fn prepare_fn,
2380 reflog_expiry_should_prune_fn should_prune_fn,
2381 reflog_expiry_cleanup_fn cleanup_fn,
2382 void *policy_cb_data)
2384 return refs->be->reflog_expire(refs, refname, oid, flags,
2385 prepare_fn, should_prune_fn,
2386 cleanup_fn, policy_cb_data);
2389 int reflog_expire(const char *refname, const struct object_id *oid,
2391 reflog_expiry_prepare_fn prepare_fn,
2392 reflog_expiry_should_prune_fn should_prune_fn,
2393 reflog_expiry_cleanup_fn cleanup_fn,
2394 void *policy_cb_data)
2396 return refs_reflog_expire(get_main_ref_store(the_repository),
2397 refname, oid, flags,
2398 prepare_fn, should_prune_fn,
2399 cleanup_fn, policy_cb_data);
2402 int initial_ref_transaction_commit(struct ref_transaction *transaction,
2405 struct ref_store *refs = transaction->ref_store;
2407 return refs->be->initial_transaction_commit(refs, transaction, err);
2410 int refs_delete_refs(struct ref_store *refs, const char *logmsg,
2411 struct string_list *refnames, unsigned int flags)
2416 msg = normalize_reflog_message(logmsg);
2417 retval = refs->be->delete_refs(refs, msg, refnames, flags);
2422 int delete_refs(const char *msg, struct string_list *refnames,
2425 return refs_delete_refs(get_main_ref_store(the_repository), msg, refnames, flags);
2428 int refs_rename_ref(struct ref_store *refs, const char *oldref,
2429 const char *newref, const char *logmsg)
2434 msg = normalize_reflog_message(logmsg);
2435 retval = refs->be->rename_ref(refs, oldref, newref, msg);
2440 int rename_ref(const char *oldref, const char *newref, const char *logmsg)
2442 return refs_rename_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);
2445 int refs_copy_existing_ref(struct ref_store *refs, const char *oldref,
2446 const char *newref, const char *logmsg)
2451 msg = normalize_reflog_message(logmsg);
2452 retval = refs->be->copy_ref(refs, oldref, newref, msg);
2457 int copy_existing_ref(const char *oldref, const char *newref, const char *logmsg)
2459 return refs_copy_existing_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);