2 * The backend-independent part of the reference module.
5 #include "git-compat-util.h"
9 #include "environment.h"
16 #include "refs/refs-internal.h"
17 #include "run-command.h"
19 #include "object-name.h"
20 #include "object-store-ll.h"
24 #include "submodule.h"
27 #include "repository.h"
32 #include "wildmatch.h"
36 * List of all available backends
38 static struct ref_storage_be
*refs_backends
= &refs_be_files
;
40 static struct ref_storage_be
*find_ref_storage_backend(const char *name
)
42 struct ref_storage_be
*be
;
43 for (be
= refs_backends
; be
; be
= be
->next
)
44 if (!strcmp(be
->name
, name
))
50 * How to handle various characters in refnames:
51 * 0: An acceptable character for refs
53 * 2: ., look for a preceding . to reject .. in refs
54 * 3: {, look for a preceding @ to reject @{ in refs
55 * 4: A bad character: ASCII control characters, and
56 * ":", "?", "[", "\", "^", "~", SP, or TAB
57 * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
59 static unsigned char refname_disposition
[256] = {
60 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
61 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
62 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,
63 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
64 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
65 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,
66 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
67 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4
70 struct ref_namespace_info ref_namespace
[] = {
73 .decoration
= DECORATION_REF_HEAD
,
76 [NAMESPACE_BRANCHES
] = {
78 .decoration
= DECORATION_REF_LOCAL
,
82 .decoration
= DECORATION_REF_TAG
,
84 [NAMESPACE_REMOTE_REFS
] = {
86 * The default refspec for new remotes copies refs from
87 * refs/heads/ on the remote into refs/remotes/<remote>/.
88 * As such, "refs/remotes/" has special handling.
90 .ref
= "refs/remotes/",
91 .decoration
= DECORATION_REF_REMOTE
,
95 * The single ref "refs/stash" stores the latest stash.
96 * Older stashes can be found in the reflog.
100 .decoration
= DECORATION_REF_STASH
,
102 [NAMESPACE_REPLACE
] = {
104 * This namespace allows Git to act as if one object ID
105 * points to the content of another. Unlike the other
106 * ref namespaces, this one can be changed by the
107 * GIT_REPLACE_REF_BASE environment variable. This
108 * .namespace value will be overwritten in setup_git_env().
110 .ref
= "refs/replace/",
111 .decoration
= DECORATION_GRAFTED
,
113 [NAMESPACE_NOTES
] = {
115 * The refs/notes/commit ref points to the tip of a
116 * parallel commit history that adds metadata to commits
117 * in the normal history. This ref can be overwritten
118 * by the core.notesRef config variable or the
119 * GIT_NOTES_REFS environment variable.
121 .ref
= "refs/notes/commit",
124 [NAMESPACE_PREFETCH
] = {
126 * Prefetch refs are written by the background 'fetch'
127 * maintenance task. It allows faster foreground fetches
128 * by advertising these previously-downloaded tips without
129 * updating refs/remotes/ without user intervention.
131 .ref
= "refs/prefetch/",
133 [NAMESPACE_REWRITTEN
] = {
135 * Rewritten refs are used by the 'label' command in the
136 * sequencer. These are particularly useful during an
137 * interactive rebase that uses the 'merge' command.
139 .ref
= "refs/rewritten/",
143 void update_ref_namespace(enum ref_namespace
namespace, char *ref
)
145 struct ref_namespace_info
*info
= &ref_namespace
[namespace];
146 if (info
->ref_updated
)
149 info
->ref_updated
= 1;
153 * Try to read one refname component from the front of refname.
154 * Return the length of the component found, or -1 if the component is
155 * not legal. It is legal if it is something reasonable to have under
156 * ".git/refs/"; We do not like it if:
158 * - it begins with ".", or
159 * - it has double dots "..", or
160 * - it has ASCII control characters, or
161 * - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or
162 * - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or
163 * - it ends with a "/", or
164 * - it ends with ".lock", or
165 * - it contains a "@{" portion
167 * When sanitized is not NULL, instead of rejecting the input refname
168 * as an error, try to come up with a usable replacement for the input
171 static int check_refname_component(const char *refname
, int *flags
,
172 struct strbuf
*sanitized
)
176 size_t component_start
= 0; /* garbage - not a reasonable initial value */
179 component_start
= sanitized
->len
;
181 for (cp
= refname
; ; cp
++) {
183 unsigned char disp
= refname_disposition
[ch
];
185 if (sanitized
&& disp
!= 1)
186 strbuf_addch(sanitized
, ch
);
192 if (last
== '.') { /* Refname contains "..". */
194 /* collapse ".." to single "." */
195 strbuf_setlen(sanitized
, sanitized
->len
- 1);
201 if (last
== '@') { /* Refname contains "@{". */
203 sanitized
->buf
[sanitized
->len
-1] = '-';
211 sanitized
->buf
[sanitized
->len
-1] = '-';
216 if (!(*flags
& REFNAME_REFSPEC_PATTERN
)) {
217 /* refspec can't be a pattern */
219 sanitized
->buf
[sanitized
->len
-1] = '-';
225 * Unset the pattern flag so that we only accept
226 * a single asterisk for one side of refspec.
228 *flags
&= ~ REFNAME_REFSPEC_PATTERN
;
235 return 0; /* Component has zero length. */
237 if (refname
[0] == '.') { /* Component starts with '.'. */
239 sanitized
->buf
[component_start
] = '-';
243 if (cp
- refname
>= LOCK_SUFFIX_LEN
&&
244 !memcmp(cp
- LOCK_SUFFIX_LEN
, LOCK_SUFFIX
, LOCK_SUFFIX_LEN
)) {
247 /* Refname ends with ".lock". */
248 while (strbuf_strip_suffix(sanitized
, LOCK_SUFFIX
)) {
249 /* try again in case we have .lock.lock */
255 static int check_or_sanitize_refname(const char *refname
, int flags
,
256 struct strbuf
*sanitized
)
258 int component_len
, component_count
= 0;
260 if (!strcmp(refname
, "@")) {
261 /* Refname is a single character '@'. */
263 strbuf_addch(sanitized
, '-');
269 if (sanitized
&& sanitized
->len
)
270 strbuf_complete(sanitized
, '/');
272 /* We are at the start of a path component. */
273 component_len
= check_refname_component(refname
, &flags
,
275 if (sanitized
&& component_len
== 0)
276 ; /* OK, omit empty component */
277 else if (component_len
<= 0)
281 if (refname
[component_len
] == '\0')
283 /* Skip to next component. */
284 refname
+= component_len
+ 1;
287 if (refname
[component_len
- 1] == '.') {
288 /* Refname ends with '.'. */
290 ; /* omit ending dot */
294 if (!(flags
& REFNAME_ALLOW_ONELEVEL
) && component_count
< 2)
295 return -1; /* Refname has only one component. */
299 int check_refname_format(const char *refname
, int flags
)
301 return check_or_sanitize_refname(refname
, flags
, NULL
);
304 void sanitize_refname_component(const char *refname
, struct strbuf
*out
)
306 if (check_or_sanitize_refname(refname
, REFNAME_ALLOW_ONELEVEL
, out
))
307 BUG("sanitizing refname '%s' check returned error", refname
);
310 int refname_is_safe(const char *refname
)
314 if (skip_prefix(refname
, "refs/", &rest
)) {
317 size_t restlen
= strlen(rest
);
319 /* rest must not be empty, or start or end with "/" */
320 if (!restlen
|| *rest
== '/' || rest
[restlen
- 1] == '/')
324 * Does the refname try to escape refs/?
325 * For example: refs/foo/../bar is safe but refs/foo/../../bar
328 buf
= xmallocz(restlen
);
329 result
= !normalize_path_copy(buf
, rest
) && !strcmp(buf
, rest
);
335 if (!isupper(*refname
) && *refname
!= '_')
343 * Return true if refname, which has the specified oid and flags, can
344 * be resolved to an object in the database. If the referred-to object
345 * does not exist, emit a warning and return false.
347 int ref_resolves_to_object(const char *refname
,
348 struct repository
*repo
,
349 const struct object_id
*oid
,
352 if (flags
& REF_ISBROKEN
)
354 if (!repo_has_object_file(repo
, oid
)) {
355 error(_("%s does not point to a valid object!"), refname
);
361 char *refs_resolve_refdup(struct ref_store
*refs
,
362 const char *refname
, int resolve_flags
,
363 struct object_id
*oid
, int *flags
)
367 result
= refs_resolve_ref_unsafe(refs
, refname
, resolve_flags
,
369 return xstrdup_or_null(result
);
372 char *resolve_refdup(const char *refname
, int resolve_flags
,
373 struct object_id
*oid
, int *flags
)
375 return refs_resolve_refdup(get_main_ref_store(the_repository
),
376 refname
, resolve_flags
,
380 /* The argument to filter_refs */
388 int read_ref_full(const char *refname
, int resolve_flags
, struct object_id
*oid
, int *flags
)
390 struct ref_store
*refs
= get_main_ref_store(the_repository
);
392 if (refs_resolve_ref_unsafe(refs
, refname
, resolve_flags
,
398 int read_ref(const char *refname
, struct object_id
*oid
)
400 return read_ref_full(refname
, RESOLVE_REF_READING
, oid
, NULL
);
403 int refs_ref_exists(struct ref_store
*refs
, const char *refname
)
405 return !!refs_resolve_ref_unsafe(refs
, refname
, RESOLVE_REF_READING
,
409 int ref_exists(const char *refname
)
411 return refs_ref_exists(get_main_ref_store(the_repository
), refname
);
414 static int filter_refs(const char *refname
, const struct object_id
*oid
,
415 int flags
, void *data
)
417 struct ref_filter
*filter
= (struct ref_filter
*)data
;
419 if (wildmatch(filter
->pattern
, refname
, 0))
422 skip_prefix(refname
, filter
->prefix
, &refname
);
423 return filter
->fn(refname
, oid
, flags
, filter
->cb_data
);
426 enum peel_status
peel_object(const struct object_id
*name
, struct object_id
*oid
)
428 struct object
*o
= lookup_unknown_object(the_repository
, name
);
430 if (o
->type
== OBJ_NONE
) {
431 int type
= oid_object_info(the_repository
, name
, NULL
);
432 if (type
< 0 || !object_as_type(o
, type
, 0))
436 if (o
->type
!= OBJ_TAG
)
439 o
= deref_tag_noverify(o
);
443 oidcpy(oid
, &o
->oid
);
447 struct warn_if_dangling_data
{
450 const struct string_list
*refnames
;
454 static int warn_if_dangling_symref(const char *refname
,
455 const struct object_id
*oid UNUSED
,
456 int flags
, void *cb_data
)
458 struct warn_if_dangling_data
*d
= cb_data
;
459 const char *resolves_to
;
461 if (!(flags
& REF_ISSYMREF
))
464 resolves_to
= resolve_ref_unsafe(refname
, 0, NULL
, NULL
);
467 ? strcmp(resolves_to
, d
->refname
)
468 : !string_list_has_string(d
->refnames
, resolves_to
))) {
472 fprintf(d
->fp
, d
->msg_fmt
, refname
);
477 void warn_dangling_symref(FILE *fp
, const char *msg_fmt
, const char *refname
)
479 struct warn_if_dangling_data data
;
482 data
.refname
= refname
;
483 data
.refnames
= NULL
;
484 data
.msg_fmt
= msg_fmt
;
485 for_each_rawref(warn_if_dangling_symref
, &data
);
488 void warn_dangling_symrefs(FILE *fp
, const char *msg_fmt
, const struct string_list
*refnames
)
490 struct warn_if_dangling_data data
;
494 data
.refnames
= refnames
;
495 data
.msg_fmt
= msg_fmt
;
496 for_each_rawref(warn_if_dangling_symref
, &data
);
499 int refs_for_each_tag_ref(struct ref_store
*refs
, each_ref_fn fn
, void *cb_data
)
501 return refs_for_each_ref_in(refs
, "refs/tags/", fn
, cb_data
);
504 int for_each_tag_ref(each_ref_fn fn
, void *cb_data
)
506 return refs_for_each_tag_ref(get_main_ref_store(the_repository
), fn
, cb_data
);
509 int refs_for_each_branch_ref(struct ref_store
*refs
, each_ref_fn fn
, void *cb_data
)
511 return refs_for_each_ref_in(refs
, "refs/heads/", fn
, cb_data
);
514 int for_each_branch_ref(each_ref_fn fn
, void *cb_data
)
516 return refs_for_each_branch_ref(get_main_ref_store(the_repository
), fn
, cb_data
);
519 int refs_for_each_remote_ref(struct ref_store
*refs
, each_ref_fn fn
, void *cb_data
)
521 return refs_for_each_ref_in(refs
, "refs/remotes/", fn
, cb_data
);
524 int for_each_remote_ref(each_ref_fn fn
, void *cb_data
)
526 return refs_for_each_remote_ref(get_main_ref_store(the_repository
), fn
, cb_data
);
529 int head_ref_namespaced(each_ref_fn fn
, void *cb_data
)
531 struct strbuf buf
= STRBUF_INIT
;
533 struct object_id oid
;
536 strbuf_addf(&buf
, "%sHEAD", get_git_namespace());
537 if (!read_ref_full(buf
.buf
, RESOLVE_REF_READING
, &oid
, &flag
))
538 ret
= fn(buf
.buf
, &oid
, flag
, cb_data
);
539 strbuf_release(&buf
);
544 void normalize_glob_ref(struct string_list_item
*item
, const char *prefix
,
547 struct strbuf normalized_pattern
= STRBUF_INIT
;
550 BUG("pattern must not start with '/'");
553 strbuf_addstr(&normalized_pattern
, prefix
);
554 else if (!starts_with(pattern
, "refs/") &&
555 strcmp(pattern
, "HEAD"))
556 strbuf_addstr(&normalized_pattern
, "refs/");
558 * NEEDSWORK: Special case other symrefs such as REBASE_HEAD,
562 strbuf_addstr(&normalized_pattern
, pattern
);
563 strbuf_strip_suffix(&normalized_pattern
, "/");
565 item
->string
= strbuf_detach(&normalized_pattern
, NULL
);
566 item
->util
= has_glob_specials(pattern
) ? NULL
: item
->string
;
567 strbuf_release(&normalized_pattern
);
570 int for_each_glob_ref_in(each_ref_fn fn
, const char *pattern
,
571 const char *prefix
, void *cb_data
)
573 struct strbuf real_pattern
= STRBUF_INIT
;
574 struct ref_filter filter
;
577 if (!prefix
&& !starts_with(pattern
, "refs/"))
578 strbuf_addstr(&real_pattern
, "refs/");
580 strbuf_addstr(&real_pattern
, prefix
);
581 strbuf_addstr(&real_pattern
, pattern
);
583 if (!has_glob_specials(pattern
)) {
584 /* Append implied '/' '*' if not present. */
585 strbuf_complete(&real_pattern
, '/');
586 /* No need to check for '*', there is none. */
587 strbuf_addch(&real_pattern
, '*');
590 filter
.pattern
= real_pattern
.buf
;
591 filter
.prefix
= prefix
;
593 filter
.cb_data
= cb_data
;
594 ret
= for_each_ref(filter_refs
, &filter
);
596 strbuf_release(&real_pattern
);
600 int for_each_glob_ref(each_ref_fn fn
, const char *pattern
, void *cb_data
)
602 return for_each_glob_ref_in(fn
, pattern
, NULL
, cb_data
);
605 const char *prettify_refname(const char *name
)
607 if (skip_prefix(name
, "refs/heads/", &name
) ||
608 skip_prefix(name
, "refs/tags/", &name
) ||
609 skip_prefix(name
, "refs/remotes/", &name
))
614 static const char *ref_rev_parse_rules
[] = {
620 "refs/remotes/%.*s/HEAD",
624 #define NUM_REV_PARSE_RULES (ARRAY_SIZE(ref_rev_parse_rules) - 1)
627 * Is it possible that the caller meant full_name with abbrev_name?
628 * If so return a non-zero value to signal "yes"; the magnitude of
629 * the returned value gives the precedence used for disambiguation.
631 * If abbrev_name cannot mean full_name, return 0.
633 int refname_match(const char *abbrev_name
, const char *full_name
)
636 const int abbrev_name_len
= strlen(abbrev_name
);
637 const int num_rules
= NUM_REV_PARSE_RULES
;
639 for (p
= ref_rev_parse_rules
; *p
; p
++)
640 if (!strcmp(full_name
, mkpath(*p
, abbrev_name_len
, abbrev_name
)))
641 return &ref_rev_parse_rules
[num_rules
] - p
;
647 * Given a 'prefix' expand it by the rules in 'ref_rev_parse_rules' and add
648 * the results to 'prefixes'
650 void expand_ref_prefix(struct strvec
*prefixes
, const char *prefix
)
653 int len
= strlen(prefix
);
655 for (p
= ref_rev_parse_rules
; *p
; p
++)
656 strvec_pushf(prefixes
, *p
, len
, prefix
);
659 static const char default_branch_name_advice
[] = N_(
660 "Using '%s' as the name for the initial branch. This default branch name\n"
661 "is subject to change. To configure the initial branch name to use in all\n"
662 "of your new repositories, which will suppress this warning, call:\n"
664 "\tgit config --global init.defaultBranch <name>\n"
666 "Names commonly chosen instead of 'master' are 'main', 'trunk' and\n"
667 "'development'. The just-created branch can be renamed via this command:\n"
669 "\tgit branch -m <name>\n"
672 char *repo_default_branch_name(struct repository
*r
, int quiet
)
674 const char *config_key
= "init.defaultbranch";
675 const char *config_display_key
= "init.defaultBranch";
676 char *ret
= NULL
, *full_ref
;
677 const char *env
= getenv("GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME");
681 else if (repo_config_get_string(r
, config_key
, &ret
) < 0)
682 die(_("could not retrieve `%s`"), config_display_key
);
685 ret
= xstrdup("master");
687 advise(_(default_branch_name_advice
), ret
);
690 full_ref
= xstrfmt("refs/heads/%s", ret
);
691 if (check_refname_format(full_ref
, 0))
692 die(_("invalid branch name: %s = %s"), config_display_key
, ret
);
698 const char *git_default_branch_name(int quiet
)
703 ret
= repo_default_branch_name(the_repository
, quiet
);
709 * *string and *len will only be substituted, and *string returned (for
710 * later free()ing) if the string passed in is a magic short-hand form
713 static char *substitute_branch_name(struct repository
*r
,
714 const char **string
, int *len
,
715 int nonfatal_dangling_mark
)
717 struct strbuf buf
= STRBUF_INIT
;
718 struct interpret_branch_name_options options
= {
719 .nonfatal_dangling_mark
= nonfatal_dangling_mark
721 int ret
= repo_interpret_branch_name(r
, *string
, *len
, &buf
, &options
);
725 *string
= strbuf_detach(&buf
, &size
);
727 return (char *)*string
;
733 int repo_dwim_ref(struct repository
*r
, const char *str
, int len
,
734 struct object_id
*oid
, char **ref
, int nonfatal_dangling_mark
)
736 char *last_branch
= substitute_branch_name(r
, &str
, &len
,
737 nonfatal_dangling_mark
);
738 int refs_found
= expand_ref(r
, str
, len
, oid
, ref
);
743 int expand_ref(struct repository
*repo
, const char *str
, int len
,
744 struct object_id
*oid
, char **ref
)
748 struct strbuf fullref
= STRBUF_INIT
;
751 for (p
= ref_rev_parse_rules
; *p
; p
++) {
752 struct object_id oid_from_ref
;
753 struct object_id
*this_result
;
755 struct ref_store
*refs
= get_main_ref_store(repo
);
757 this_result
= refs_found
? &oid_from_ref
: oid
;
758 strbuf_reset(&fullref
);
759 strbuf_addf(&fullref
, *p
, len
, str
);
760 r
= refs_resolve_ref_unsafe(refs
, fullref
.buf
,
766 if (!warn_ambiguous_refs
)
768 } else if ((flag
& REF_ISSYMREF
) && strcmp(fullref
.buf
, "HEAD")) {
769 warning(_("ignoring dangling symref %s"), fullref
.buf
);
770 } else if ((flag
& REF_ISBROKEN
) && strchr(fullref
.buf
, '/')) {
771 warning(_("ignoring broken ref %s"), fullref
.buf
);
774 strbuf_release(&fullref
);
778 int repo_dwim_log(struct repository
*r
, const char *str
, int len
,
779 struct object_id
*oid
, char **log
)
781 struct ref_store
*refs
= get_main_ref_store(r
);
782 char *last_branch
= substitute_branch_name(r
, &str
, &len
, 0);
785 struct strbuf path
= STRBUF_INIT
;
788 for (p
= ref_rev_parse_rules
; *p
; p
++) {
789 struct object_id hash
;
790 const char *ref
, *it
;
793 strbuf_addf(&path
, *p
, len
, str
);
794 ref
= refs_resolve_ref_unsafe(refs
, path
.buf
,
796 oid
? &hash
: NULL
, NULL
);
799 if (refs_reflog_exists(refs
, path
.buf
))
801 else if (strcmp(ref
, path
.buf
) &&
802 refs_reflog_exists(refs
, ref
))
811 if (!warn_ambiguous_refs
)
814 strbuf_release(&path
);
819 int dwim_log(const char *str
, int len
, struct object_id
*oid
, char **log
)
821 return repo_dwim_log(the_repository
, str
, len
, oid
, log
);
824 int is_per_worktree_ref(const char *refname
)
826 return starts_with(refname
, "refs/worktree/") ||
827 starts_with(refname
, "refs/bisect/") ||
828 starts_with(refname
, "refs/rewritten/");
831 static int is_pseudoref_syntax(const char *refname
)
835 for (c
= refname
; *c
; c
++) {
836 if (!isupper(*c
) && *c
!= '-' && *c
!= '_')
841 * HEAD is not a pseudoref, but it certainly uses the
847 static int is_current_worktree_ref(const char *ref
) {
848 return is_pseudoref_syntax(ref
) || is_per_worktree_ref(ref
);
851 enum ref_worktree_type
parse_worktree_ref(const char *maybe_worktree_ref
,
852 const char **worktree_name
, int *worktree_name_length
,
853 const char **bare_refname
)
855 const char *name_dummy
;
856 int name_length_dummy
;
857 const char *ref_dummy
;
860 worktree_name
= &name_dummy
;
861 if (!worktree_name_length
)
862 worktree_name_length
= &name_length_dummy
;
864 bare_refname
= &ref_dummy
;
866 if (skip_prefix(maybe_worktree_ref
, "worktrees/", bare_refname
)) {
867 const char *slash
= strchr(*bare_refname
, '/');
869 *worktree_name
= *bare_refname
;
871 *worktree_name_length
= strlen(*worktree_name
);
873 /* This is an error condition, and the caller tell because the bare_refname is "" */
874 *bare_refname
= *worktree_name
+ *worktree_name_length
;
875 return REF_WORKTREE_OTHER
;
878 *worktree_name_length
= slash
- *bare_refname
;
879 *bare_refname
= slash
+ 1;
881 if (is_current_worktree_ref(*bare_refname
))
882 return REF_WORKTREE_OTHER
;
885 *worktree_name
= NULL
;
886 *worktree_name_length
= 0;
888 if (skip_prefix(maybe_worktree_ref
, "main-worktree/", bare_refname
)
889 && is_current_worktree_ref(*bare_refname
))
890 return REF_WORKTREE_MAIN
;
892 *bare_refname
= maybe_worktree_ref
;
893 if (is_current_worktree_ref(maybe_worktree_ref
))
894 return REF_WORKTREE_CURRENT
;
896 return REF_WORKTREE_SHARED
;
899 long get_files_ref_lock_timeout_ms(void)
901 static int configured
= 0;
903 /* The default timeout is 100 ms: */
904 static int timeout_ms
= 100;
907 git_config_get_int("core.filesreflocktimeout", &timeout_ms
);
914 int refs_delete_ref(struct ref_store
*refs
, const char *msg
,
916 const struct object_id
*old_oid
,
919 struct ref_transaction
*transaction
;
920 struct strbuf err
= STRBUF_INIT
;
922 transaction
= ref_store_transaction_begin(refs
, &err
);
924 ref_transaction_delete(transaction
, refname
, old_oid
,
926 ref_transaction_commit(transaction
, &err
)) {
927 error("%s", err
.buf
);
928 ref_transaction_free(transaction
);
929 strbuf_release(&err
);
932 ref_transaction_free(transaction
);
933 strbuf_release(&err
);
937 int delete_ref(const char *msg
, const char *refname
,
938 const struct object_id
*old_oid
, unsigned int flags
)
940 return refs_delete_ref(get_main_ref_store(the_repository
), msg
, refname
,
944 static void copy_reflog_msg(struct strbuf
*sb
, const char *msg
)
949 while ((c
= *msg
++)) {
950 if (wasspace
&& isspace(c
))
952 wasspace
= isspace(c
);
960 static char *normalize_reflog_message(const char *msg
)
962 struct strbuf sb
= STRBUF_INIT
;
965 copy_reflog_msg(&sb
, msg
);
966 return strbuf_detach(&sb
, NULL
);
969 int should_autocreate_reflog(const char *refname
)
971 switch (log_all_ref_updates
) {
972 case LOG_REFS_ALWAYS
:
974 case LOG_REFS_NORMAL
:
975 return starts_with(refname
, "refs/heads/") ||
976 starts_with(refname
, "refs/remotes/") ||
977 starts_with(refname
, "refs/notes/") ||
978 !strcmp(refname
, "HEAD");
984 int is_branch(const char *refname
)
986 return !strcmp(refname
, "HEAD") || starts_with(refname
, "refs/heads/");
989 struct read_ref_at_cb
{
994 struct object_id
*oid
;
997 struct object_id ooid
;
998 struct object_id noid
;
1002 timestamp_t
*cutoff_time
;
1007 static void set_read_ref_cutoffs(struct read_ref_at_cb
*cb
,
1008 timestamp_t timestamp
, int tz
, const char *message
)
1011 *cb
->msg
= xstrdup(message
);
1012 if (cb
->cutoff_time
)
1013 *cb
->cutoff_time
= timestamp
;
1015 *cb
->cutoff_tz
= tz
;
1017 *cb
->cutoff_cnt
= cb
->reccnt
;
1020 static int read_ref_at_ent(struct object_id
*ooid
, struct object_id
*noid
,
1021 const char *email UNUSED
,
1022 timestamp_t timestamp
, int tz
,
1023 const char *message
, void *cb_data
)
1025 struct read_ref_at_cb
*cb
= cb_data
;
1029 cb
->date
= timestamp
;
1032 * It is not possible for cb->cnt == 0 on the first iteration because
1033 * that special case is handled in read_ref_at().
1037 reached_count
= cb
->cnt
== 0 && !is_null_oid(ooid
);
1038 if (timestamp
<= cb
->at_time
|| reached_count
) {
1039 set_read_ref_cutoffs(cb
, timestamp
, tz
, message
);
1041 * we have not yet updated cb->[n|o]oid so they still
1042 * hold the values for the previous record.
1044 if (!is_null_oid(&cb
->ooid
) && !oideq(&cb
->ooid
, noid
))
1045 warning(_("log for ref %s has gap after %s"),
1046 cb
->refname
, show_date(cb
->date
, cb
->tz
, DATE_MODE(RFC2822
)));
1048 oidcpy(cb
->oid
, ooid
);
1049 else if (!is_null_oid(&cb
->ooid
) || cb
->date
== cb
->at_time
)
1050 oidcpy(cb
->oid
, noid
);
1051 else if (!oideq(noid
, cb
->oid
))
1052 warning(_("log for ref %s unexpectedly ended on %s"),
1053 cb
->refname
, show_date(cb
->date
, cb
->tz
,
1054 DATE_MODE(RFC2822
)));
1058 oidcpy(&cb
->ooid
, ooid
);
1059 oidcpy(&cb
->noid
, noid
);
1060 return cb
->found_it
;
1063 static int read_ref_at_ent_newest(struct object_id
*ooid UNUSED
,
1064 struct object_id
*noid
,
1065 const char *email UNUSED
,
1066 timestamp_t timestamp
, int tz
,
1067 const char *message
, void *cb_data
)
1069 struct read_ref_at_cb
*cb
= cb_data
;
1071 set_read_ref_cutoffs(cb
, timestamp
, tz
, message
);
1072 oidcpy(cb
->oid
, noid
);
1073 /* We just want the first entry */
1077 static int read_ref_at_ent_oldest(struct object_id
*ooid
, struct object_id
*noid
,
1078 const char *email UNUSED
,
1079 timestamp_t timestamp
, int tz
,
1080 const char *message
, void *cb_data
)
1082 struct read_ref_at_cb
*cb
= cb_data
;
1084 set_read_ref_cutoffs(cb
, timestamp
, tz
, message
);
1085 oidcpy(cb
->oid
, ooid
);
1086 if (is_null_oid(cb
->oid
))
1087 oidcpy(cb
->oid
, noid
);
1088 /* We just want the first entry */
1092 int read_ref_at(struct ref_store
*refs
, const char *refname
,
1093 unsigned int flags
, timestamp_t at_time
, int cnt
,
1094 struct object_id
*oid
, char **msg
,
1095 timestamp_t
*cutoff_time
, int *cutoff_tz
, int *cutoff_cnt
)
1097 struct read_ref_at_cb cb
;
1099 memset(&cb
, 0, sizeof(cb
));
1100 cb
.refname
= refname
;
1101 cb
.at_time
= at_time
;
1104 cb
.cutoff_time
= cutoff_time
;
1105 cb
.cutoff_tz
= cutoff_tz
;
1106 cb
.cutoff_cnt
= cutoff_cnt
;
1110 refs_for_each_reflog_ent_reverse(refs
, refname
, read_ref_at_ent_newest
, &cb
);
1114 refs_for_each_reflog_ent_reverse(refs
, refname
, read_ref_at_ent
, &cb
);
1117 if (flags
& GET_OID_QUIETLY
)
1120 die(_("log for %s is empty"), refname
);
1125 refs_for_each_reflog_ent(refs
, refname
, read_ref_at_ent_oldest
, &cb
);
1130 struct ref_transaction
*ref_store_transaction_begin(struct ref_store
*refs
,
1133 struct ref_transaction
*tr
;
1136 CALLOC_ARRAY(tr
, 1);
1137 tr
->ref_store
= refs
;
1141 struct ref_transaction
*ref_transaction_begin(struct strbuf
*err
)
1143 return ref_store_transaction_begin(get_main_ref_store(the_repository
), err
);
1146 void ref_transaction_free(struct ref_transaction
*transaction
)
1153 switch (transaction
->state
) {
1154 case REF_TRANSACTION_OPEN
:
1155 case REF_TRANSACTION_CLOSED
:
1158 case REF_TRANSACTION_PREPARED
:
1159 BUG("free called on a prepared reference transaction");
1162 BUG("unexpected reference transaction state");
1166 for (i
= 0; i
< transaction
->nr
; i
++) {
1167 free(transaction
->updates
[i
]->msg
);
1168 free(transaction
->updates
[i
]);
1170 free(transaction
->updates
);
1174 struct ref_update
*ref_transaction_add_update(
1175 struct ref_transaction
*transaction
,
1176 const char *refname
, unsigned int flags
,
1177 const struct object_id
*new_oid
,
1178 const struct object_id
*old_oid
,
1181 struct ref_update
*update
;
1183 if (transaction
->state
!= REF_TRANSACTION_OPEN
)
1184 BUG("update called for transaction that is not open");
1186 FLEX_ALLOC_STR(update
, refname
, refname
);
1187 ALLOC_GROW(transaction
->updates
, transaction
->nr
+ 1, transaction
->alloc
);
1188 transaction
->updates
[transaction
->nr
++] = update
;
1190 update
->flags
= flags
;
1192 if (flags
& REF_HAVE_NEW
)
1193 oidcpy(&update
->new_oid
, new_oid
);
1194 if (flags
& REF_HAVE_OLD
)
1195 oidcpy(&update
->old_oid
, old_oid
);
1196 update
->msg
= normalize_reflog_message(msg
);
1200 int ref_transaction_update(struct ref_transaction
*transaction
,
1201 const char *refname
,
1202 const struct object_id
*new_oid
,
1203 const struct object_id
*old_oid
,
1204 unsigned int flags
, const char *msg
,
1209 if (!(flags
& REF_SKIP_REFNAME_VERIFICATION
) &&
1210 ((new_oid
&& !is_null_oid(new_oid
)) ?
1211 check_refname_format(refname
, REFNAME_ALLOW_ONELEVEL
) :
1212 !refname_is_safe(refname
))) {
1213 strbuf_addf(err
, _("refusing to update ref with bad name '%s'"),
1218 if (flags
& ~REF_TRANSACTION_UPDATE_ALLOWED_FLAGS
)
1219 BUG("illegal flags 0x%x passed to ref_transaction_update()", flags
);
1222 * Clear flags outside the allowed set; this should be a noop because
1223 * of the BUG() check above, but it works around a -Wnonnull warning
1224 * with some versions of "gcc -O3".
1226 flags
&= REF_TRANSACTION_UPDATE_ALLOWED_FLAGS
;
1228 flags
|= (new_oid
? REF_HAVE_NEW
: 0) | (old_oid
? REF_HAVE_OLD
: 0);
1230 ref_transaction_add_update(transaction
, refname
, flags
,
1231 new_oid
, old_oid
, msg
);
1235 int ref_transaction_create(struct ref_transaction
*transaction
,
1236 const char *refname
,
1237 const struct object_id
*new_oid
,
1238 unsigned int flags
, const char *msg
,
1241 if (!new_oid
|| is_null_oid(new_oid
)) {
1242 strbuf_addf(err
, "'%s' has a null OID", refname
);
1245 return ref_transaction_update(transaction
, refname
, new_oid
,
1246 null_oid(), flags
, msg
, err
);
1249 int ref_transaction_delete(struct ref_transaction
*transaction
,
1250 const char *refname
,
1251 const struct object_id
*old_oid
,
1252 unsigned int flags
, const char *msg
,
1255 if (old_oid
&& is_null_oid(old_oid
))
1256 BUG("delete called with old_oid set to zeros");
1257 return ref_transaction_update(transaction
, refname
,
1258 null_oid(), old_oid
,
1262 int ref_transaction_verify(struct ref_transaction
*transaction
,
1263 const char *refname
,
1264 const struct object_id
*old_oid
,
1269 BUG("verify called with old_oid set to NULL");
1270 return ref_transaction_update(transaction
, refname
,
1275 int refs_update_ref(struct ref_store
*refs
, const char *msg
,
1276 const char *refname
, const struct object_id
*new_oid
,
1277 const struct object_id
*old_oid
, unsigned int flags
,
1278 enum action_on_err onerr
)
1280 struct ref_transaction
*t
= NULL
;
1281 struct strbuf err
= STRBUF_INIT
;
1284 t
= ref_store_transaction_begin(refs
, &err
);
1286 ref_transaction_update(t
, refname
, new_oid
, old_oid
, flags
, msg
,
1288 ref_transaction_commit(t
, &err
)) {
1290 ref_transaction_free(t
);
1293 const char *str
= _("update_ref failed for ref '%s': %s");
1296 case UPDATE_REFS_MSG_ON_ERR
:
1297 error(str
, refname
, err
.buf
);
1299 case UPDATE_REFS_DIE_ON_ERR
:
1300 die(str
, refname
, err
.buf
);
1302 case UPDATE_REFS_QUIET_ON_ERR
:
1305 strbuf_release(&err
);
1308 strbuf_release(&err
);
1310 ref_transaction_free(t
);
1314 int update_ref(const char *msg
, const char *refname
,
1315 const struct object_id
*new_oid
,
1316 const struct object_id
*old_oid
,
1317 unsigned int flags
, enum action_on_err onerr
)
1319 return refs_update_ref(get_main_ref_store(the_repository
), msg
, refname
, new_oid
,
1320 old_oid
, flags
, onerr
);
1324 * Check that the string refname matches a rule of the form
1325 * "{prefix}%.*s{suffix}". So "foo/bar/baz" would match the rule
1326 * "foo/%.*s/baz", and return the string "bar".
1328 static const char *match_parse_rule(const char *refname
, const char *rule
,
1332 * Check that rule matches refname up to the first percent in the rule.
1333 * We can bail immediately if not, but otherwise we leave "rule" at the
1334 * %-placeholder, and "refname" at the start of the potential matched
1337 while (*rule
!= '%') {
1339 BUG("rev-parse rule did not have percent");
1340 if (*refname
++ != *rule
++)
1345 * Check that our "%" is the expected placeholder. This assumes there
1346 * are no other percents (placeholder or quoted) in the string, but
1347 * that is sufficient for our rev-parse rules.
1349 if (!skip_prefix(rule
, "%.*s", &rule
))
1353 * And now check that our suffix (if any) matches.
1355 if (!strip_suffix(refname
, rule
, len
))
1358 return refname
; /* len set by strip_suffix() */
1361 char *refs_shorten_unambiguous_ref(struct ref_store
*refs
,
1362 const char *refname
, int strict
)
1365 struct strbuf resolved_buf
= STRBUF_INIT
;
1367 /* skip first rule, it will always match */
1368 for (i
= NUM_REV_PARSE_RULES
- 1; i
> 0 ; --i
) {
1370 int rules_to_fail
= i
;
1371 const char *short_name
;
1372 size_t short_name_len
;
1374 short_name
= match_parse_rule(refname
, ref_rev_parse_rules
[i
],
1380 * in strict mode, all (except the matched one) rules
1381 * must fail to resolve to a valid non-ambiguous ref
1384 rules_to_fail
= NUM_REV_PARSE_RULES
;
1387 * check if the short name resolves to a valid ref,
1388 * but use only rules prior to the matched one
1390 for (j
= 0; j
< rules_to_fail
; j
++) {
1391 const char *rule
= ref_rev_parse_rules
[j
];
1393 /* skip matched rule */
1398 * the short name is ambiguous, if it resolves
1399 * (with this previous rule) to a valid ref
1400 * read_ref() returns 0 on success
1402 strbuf_reset(&resolved_buf
);
1403 strbuf_addf(&resolved_buf
, rule
,
1404 cast_size_t_to_int(short_name_len
),
1406 if (refs_ref_exists(refs
, resolved_buf
.buf
))
1411 * short name is non-ambiguous if all previous rules
1412 * haven't resolved to a valid ref
1414 if (j
== rules_to_fail
) {
1415 strbuf_release(&resolved_buf
);
1416 return xmemdupz(short_name
, short_name_len
);
1420 strbuf_release(&resolved_buf
);
1421 return xstrdup(refname
);
1424 char *shorten_unambiguous_ref(const char *refname
, int strict
)
1426 return refs_shorten_unambiguous_ref(get_main_ref_store(the_repository
),
1430 int parse_hide_refs_config(const char *var
, const char *value
, const char *section
,
1431 struct string_list
*hide_refs
)
1434 if (!strcmp("transfer.hiderefs", var
) ||
1435 (!parse_config_key(var
, section
, NULL
, NULL
, &key
) &&
1436 !strcmp(key
, "hiderefs"))) {
1441 return config_error_nonbool(var
);
1442 ref
= xstrdup(value
);
1444 while (len
&& ref
[len
- 1] == '/')
1446 string_list_append_nodup(hide_refs
, ref
);
1451 int ref_is_hidden(const char *refname
, const char *refname_full
,
1452 const struct string_list
*hide_refs
)
1456 for (i
= hide_refs
->nr
- 1; i
>= 0; i
--) {
1457 const char *match
= hide_refs
->items
[i
].string
;
1458 const char *subject
;
1462 if (*match
== '!') {
1467 if (*match
== '^') {
1468 subject
= refname_full
;
1474 /* refname can be NULL when namespaces are used. */
1476 skip_prefix(subject
, match
, &p
) &&
1483 const char *find_descendant_ref(const char *dirname
,
1484 const struct string_list
*extras
,
1485 const struct string_list
*skip
)
1493 * Look at the place where dirname would be inserted into
1494 * extras. If there is an entry at that position that starts
1495 * with dirname (remember, dirname includes the trailing
1496 * slash) and is not in skip, then we have a conflict.
1498 for (pos
= string_list_find_insert_index(extras
, dirname
, 0);
1499 pos
< extras
->nr
; pos
++) {
1500 const char *extra_refname
= extras
->items
[pos
].string
;
1502 if (!starts_with(extra_refname
, dirname
))
1505 if (!skip
|| !string_list_has_string(skip
, extra_refname
))
1506 return extra_refname
;
1511 int refs_head_ref(struct ref_store
*refs
, each_ref_fn fn
, void *cb_data
)
1513 struct object_id oid
;
1516 if (refs_resolve_ref_unsafe(refs
, "HEAD", RESOLVE_REF_READING
,
1518 return fn("HEAD", &oid
, flag
, cb_data
);
1523 int head_ref(each_ref_fn fn
, void *cb_data
)
1525 return refs_head_ref(get_main_ref_store(the_repository
), fn
, cb_data
);
1528 struct ref_iterator
*refs_ref_iterator_begin(
1529 struct ref_store
*refs
,
1530 const char *prefix
, int trim
,
1531 enum do_for_each_ref_flags flags
)
1533 struct ref_iterator
*iter
;
1535 if (!(flags
& DO_FOR_EACH_INCLUDE_BROKEN
)) {
1536 static int ref_paranoia
= -1;
1538 if (ref_paranoia
< 0)
1539 ref_paranoia
= git_env_bool("GIT_REF_PARANOIA", 1);
1541 flags
|= DO_FOR_EACH_INCLUDE_BROKEN
;
1542 flags
|= DO_FOR_EACH_OMIT_DANGLING_SYMREFS
;
1546 iter
= refs
->be
->iterator_begin(refs
, prefix
, flags
);
1549 * `iterator_begin()` already takes care of prefix, but we
1550 * might need to do some trimming:
1553 iter
= prefix_ref_iterator_begin(iter
, "", trim
);
1555 /* Sanity check for subclasses: */
1557 BUG("reference iterator is not ordered");
1563 * Call fn for each reference in the specified submodule for which the
1564 * refname begins with prefix. If trim is non-zero, then trim that
1565 * many characters off the beginning of each refname before passing
1566 * the refname to fn. flags can be DO_FOR_EACH_INCLUDE_BROKEN to
1567 * include broken references in the iteration. If fn ever returns a
1568 * non-zero value, stop the iteration and return that value;
1569 * otherwise, return 0.
1571 static int do_for_each_repo_ref(struct repository
*r
, const char *prefix
,
1572 each_repo_ref_fn fn
, int trim
, int flags
,
1575 struct ref_iterator
*iter
;
1576 struct ref_store
*refs
= get_main_ref_store(r
);
1581 iter
= refs_ref_iterator_begin(refs
, prefix
, trim
, flags
);
1583 return do_for_each_repo_ref_iterator(r
, iter
, fn
, cb_data
);
1586 struct do_for_each_ref_help
{
1591 static int do_for_each_ref_helper(struct repository
*r
,
1592 const char *refname
,
1593 const struct object_id
*oid
,
1597 struct do_for_each_ref_help
*hp
= cb_data
;
1599 return hp
->fn(refname
, oid
, flags
, hp
->cb_data
);
1602 static int do_for_each_ref(struct ref_store
*refs
, const char *prefix
,
1603 each_ref_fn fn
, int trim
,
1604 enum do_for_each_ref_flags flags
, void *cb_data
)
1606 struct ref_iterator
*iter
;
1607 struct do_for_each_ref_help hp
= { fn
, cb_data
};
1612 iter
= refs_ref_iterator_begin(refs
, prefix
, trim
, flags
);
1614 return do_for_each_repo_ref_iterator(the_repository
, iter
,
1615 do_for_each_ref_helper
, &hp
);
1618 int refs_for_each_ref(struct ref_store
*refs
, each_ref_fn fn
, void *cb_data
)
1620 return do_for_each_ref(refs
, "", fn
, 0, 0, cb_data
);
1623 int for_each_ref(each_ref_fn fn
, void *cb_data
)
1625 return refs_for_each_ref(get_main_ref_store(the_repository
), fn
, cb_data
);
1628 int refs_for_each_ref_in(struct ref_store
*refs
, const char *prefix
,
1629 each_ref_fn fn
, void *cb_data
)
1631 return do_for_each_ref(refs
, prefix
, fn
, strlen(prefix
), 0, cb_data
);
1634 int for_each_ref_in(const char *prefix
, each_ref_fn fn
, void *cb_data
)
1636 return refs_for_each_ref_in(get_main_ref_store(the_repository
), prefix
, fn
, cb_data
);
1639 int for_each_fullref_in(const char *prefix
, each_ref_fn fn
, void *cb_data
)
1641 return do_for_each_ref(get_main_ref_store(the_repository
),
1642 prefix
, fn
, 0, 0, cb_data
);
1645 int refs_for_each_fullref_in(struct ref_store
*refs
, const char *prefix
,
1646 each_ref_fn fn
, void *cb_data
)
1648 return do_for_each_ref(refs
, prefix
, fn
, 0, 0, cb_data
);
1651 int for_each_replace_ref(struct repository
*r
, each_repo_ref_fn fn
, void *cb_data
)
1653 const char *git_replace_ref_base
= ref_namespace
[NAMESPACE_REPLACE
].ref
;
1654 return do_for_each_repo_ref(r
, git_replace_ref_base
, fn
,
1655 strlen(git_replace_ref_base
),
1656 DO_FOR_EACH_INCLUDE_BROKEN
, cb_data
);
1659 int for_each_namespaced_ref(each_ref_fn fn
, void *cb_data
)
1661 struct strbuf buf
= STRBUF_INIT
;
1663 strbuf_addf(&buf
, "%srefs/", get_git_namespace());
1664 ret
= do_for_each_ref(get_main_ref_store(the_repository
),
1665 buf
.buf
, fn
, 0, 0, cb_data
);
1666 strbuf_release(&buf
);
1670 int refs_for_each_rawref(struct ref_store
*refs
, each_ref_fn fn
, void *cb_data
)
1672 return do_for_each_ref(refs
, "", fn
, 0,
1673 DO_FOR_EACH_INCLUDE_BROKEN
, cb_data
);
1676 int for_each_rawref(each_ref_fn fn
, void *cb_data
)
1678 return refs_for_each_rawref(get_main_ref_store(the_repository
), fn
, cb_data
);
1681 static int qsort_strcmp(const void *va
, const void *vb
)
1683 const char *a
= *(const char **)va
;
1684 const char *b
= *(const char **)vb
;
1686 return strcmp(a
, b
);
1689 static void find_longest_prefixes_1(struct string_list
*out
,
1690 struct strbuf
*prefix
,
1691 const char **patterns
, size_t nr
)
1695 for (i
= 0; i
< nr
; i
++) {
1696 char c
= patterns
[i
][prefix
->len
];
1697 if (!c
|| is_glob_special(c
)) {
1698 string_list_append(out
, prefix
->buf
);
1708 * Set "end" to the index of the element _after_ the last one
1711 for (end
= i
+ 1; end
< nr
; end
++) {
1712 if (patterns
[i
][prefix
->len
] != patterns
[end
][prefix
->len
])
1716 strbuf_addch(prefix
, patterns
[i
][prefix
->len
]);
1717 find_longest_prefixes_1(out
, prefix
, patterns
+ i
, end
- i
);
1718 strbuf_setlen(prefix
, prefix
->len
- 1);
1724 static void find_longest_prefixes(struct string_list
*out
,
1725 const char **patterns
)
1727 struct strvec sorted
= STRVEC_INIT
;
1728 struct strbuf prefix
= STRBUF_INIT
;
1730 strvec_pushv(&sorted
, patterns
);
1731 QSORT(sorted
.v
, sorted
.nr
, qsort_strcmp
);
1733 find_longest_prefixes_1(out
, &prefix
, sorted
.v
, sorted
.nr
);
1735 strvec_clear(&sorted
);
1736 strbuf_release(&prefix
);
1739 int refs_for_each_fullref_in_prefixes(struct ref_store
*ref_store
,
1740 const char *namespace,
1741 const char **patterns
,
1742 each_ref_fn fn
, void *cb_data
)
1744 struct string_list prefixes
= STRING_LIST_INIT_DUP
;
1745 struct string_list_item
*prefix
;
1746 struct strbuf buf
= STRBUF_INIT
;
1747 int ret
= 0, namespace_len
;
1749 find_longest_prefixes(&prefixes
, patterns
);
1752 strbuf_addstr(&buf
, namespace);
1753 namespace_len
= buf
.len
;
1755 for_each_string_list_item(prefix
, &prefixes
) {
1756 strbuf_addstr(&buf
, prefix
->string
);
1757 ret
= refs_for_each_fullref_in(ref_store
, buf
.buf
, fn
, cb_data
);
1760 strbuf_setlen(&buf
, namespace_len
);
1763 string_list_clear(&prefixes
, 0);
1764 strbuf_release(&buf
);
1768 static int refs_read_special_head(struct ref_store
*ref_store
,
1769 const char *refname
, struct object_id
*oid
,
1770 struct strbuf
*referent
, unsigned int *type
,
1773 struct strbuf full_path
= STRBUF_INIT
;
1774 struct strbuf content
= STRBUF_INIT
;
1776 strbuf_addf(&full_path
, "%s/%s", ref_store
->gitdir
, refname
);
1778 if (strbuf_read_file(&content
, full_path
.buf
, 0) < 0)
1781 result
= parse_loose_ref_contents(content
.buf
, oid
, referent
, type
,
1785 strbuf_release(&full_path
);
1786 strbuf_release(&content
);
1790 int refs_read_raw_ref(struct ref_store
*ref_store
, const char *refname
,
1791 struct object_id
*oid
, struct strbuf
*referent
,
1792 unsigned int *type
, int *failure_errno
)
1794 assert(failure_errno
);
1795 if (!strcmp(refname
, "FETCH_HEAD") || !strcmp(refname
, "MERGE_HEAD")) {
1796 return refs_read_special_head(ref_store
, refname
, oid
, referent
,
1797 type
, failure_errno
);
1800 return ref_store
->be
->read_raw_ref(ref_store
, refname
, oid
, referent
,
1801 type
, failure_errno
);
1804 int refs_read_symbolic_ref(struct ref_store
*ref_store
, const char *refname
,
1805 struct strbuf
*referent
)
1807 return ref_store
->be
->read_symbolic_ref(ref_store
, refname
, referent
);
1810 const char *refs_resolve_ref_unsafe(struct ref_store
*refs
,
1811 const char *refname
,
1813 struct object_id
*oid
,
1816 static struct strbuf sb_refname
= STRBUF_INIT
;
1817 struct object_id unused_oid
;
1824 flags
= &unused_flags
;
1828 if (check_refname_format(refname
, REFNAME_ALLOW_ONELEVEL
)) {
1829 if (!(resolve_flags
& RESOLVE_REF_ALLOW_BAD_NAME
) ||
1830 !refname_is_safe(refname
))
1834 * repo_dwim_ref() uses REF_ISBROKEN to distinguish between
1835 * missing refs and refs that were present but invalid,
1836 * to complain about the latter to stderr.
1838 * We don't know whether the ref exists, so don't set
1841 *flags
|= REF_BAD_NAME
;
1844 for (symref_count
= 0; symref_count
< SYMREF_MAXDEPTH
; symref_count
++) {
1845 unsigned int read_flags
= 0;
1848 if (refs_read_raw_ref(refs
, refname
, oid
, &sb_refname
,
1849 &read_flags
, &failure_errno
)) {
1850 *flags
|= read_flags
;
1852 /* In reading mode, refs must eventually resolve */
1853 if (resolve_flags
& RESOLVE_REF_READING
)
1857 * Otherwise a missing ref is OK. But the files backend
1858 * may show errors besides ENOENT if there are
1859 * similarly-named refs.
1861 if (failure_errno
!= ENOENT
&&
1862 failure_errno
!= EISDIR
&&
1863 failure_errno
!= ENOTDIR
)
1867 if (*flags
& REF_BAD_NAME
)
1868 *flags
|= REF_ISBROKEN
;
1872 *flags
|= read_flags
;
1874 if (!(read_flags
& REF_ISSYMREF
)) {
1875 if (*flags
& REF_BAD_NAME
) {
1877 *flags
|= REF_ISBROKEN
;
1882 refname
= sb_refname
.buf
;
1883 if (resolve_flags
& RESOLVE_REF_NO_RECURSE
) {
1887 if (check_refname_format(refname
, REFNAME_ALLOW_ONELEVEL
)) {
1888 if (!(resolve_flags
& RESOLVE_REF_ALLOW_BAD_NAME
) ||
1889 !refname_is_safe(refname
))
1892 *flags
|= REF_ISBROKEN
| REF_BAD_NAME
;
1899 /* backend functions */
1900 int refs_init_db(struct strbuf
*err
)
1902 struct ref_store
*refs
= get_main_ref_store(the_repository
);
1904 return refs
->be
->init_db(refs
, err
);
1907 const char *resolve_ref_unsafe(const char *refname
, int resolve_flags
,
1908 struct object_id
*oid
, int *flags
)
1910 return refs_resolve_ref_unsafe(get_main_ref_store(the_repository
), refname
,
1911 resolve_flags
, oid
, flags
);
1914 int resolve_gitlink_ref(const char *submodule
, const char *refname
,
1915 struct object_id
*oid
)
1917 struct ref_store
*refs
;
1920 refs
= get_submodule_ref_store(submodule
);
1925 if (!refs_resolve_ref_unsafe(refs
, refname
, 0, oid
, &flags
) ||
1931 struct ref_store_hash_entry
1933 struct hashmap_entry ent
;
1935 struct ref_store
*refs
;
1937 /* NUL-terminated identifier of the ref store: */
1938 char name
[FLEX_ARRAY
];
1941 static int ref_store_hash_cmp(const void *cmp_data UNUSED
,
1942 const struct hashmap_entry
*eptr
,
1943 const struct hashmap_entry
*entry_or_key
,
1944 const void *keydata
)
1946 const struct ref_store_hash_entry
*e1
, *e2
;
1949 e1
= container_of(eptr
, const struct ref_store_hash_entry
, ent
);
1950 e2
= container_of(entry_or_key
, const struct ref_store_hash_entry
, ent
);
1951 name
= keydata
? keydata
: e2
->name
;
1953 return strcmp(e1
->name
, name
);
1956 static struct ref_store_hash_entry
*alloc_ref_store_hash_entry(
1957 const char *name
, struct ref_store
*refs
)
1959 struct ref_store_hash_entry
*entry
;
1961 FLEX_ALLOC_STR(entry
, name
, name
);
1962 hashmap_entry_init(&entry
->ent
, strhash(name
));
1967 /* A hashmap of ref_stores, stored by submodule name: */
1968 static struct hashmap submodule_ref_stores
;
1970 /* A hashmap of ref_stores, stored by worktree id: */
1971 static struct hashmap worktree_ref_stores
;
1974 * Look up a ref store by name. If that ref_store hasn't been
1975 * registered yet, return NULL.
1977 static struct ref_store
*lookup_ref_store_map(struct hashmap
*map
,
1980 struct ref_store_hash_entry
*entry
;
1983 if (!map
->tablesize
)
1984 /* It's initialized on demand in register_ref_store(). */
1987 hash
= strhash(name
);
1988 entry
= hashmap_get_entry_from_hash(map
, hash
, name
,
1989 struct ref_store_hash_entry
, ent
);
1990 return entry
? entry
->refs
: NULL
;
1994 * Create, record, and return a ref_store instance for the specified
1997 static struct ref_store
*ref_store_init(struct repository
*repo
,
2001 const char *be_name
= "files";
2002 struct ref_storage_be
*be
= find_ref_storage_backend(be_name
);
2003 struct ref_store
*refs
;
2006 BUG("reference backend %s is unknown", be_name
);
2008 refs
= be
->init(repo
, gitdir
, flags
);
2012 struct ref_store
*get_main_ref_store(struct repository
*r
)
2014 if (r
->refs_private
)
2015 return r
->refs_private
;
2018 BUG("attempting to get main_ref_store outside of repository");
2020 r
->refs_private
= ref_store_init(r
, r
->gitdir
, REF_STORE_ALL_CAPS
);
2021 r
->refs_private
= maybe_debug_wrap_ref_store(r
->gitdir
, r
->refs_private
);
2022 return r
->refs_private
;
2026 * Associate a ref store with a name. It is a fatal error to call this
2027 * function twice for the same name.
2029 static void register_ref_store_map(struct hashmap
*map
,
2031 struct ref_store
*refs
,
2034 struct ref_store_hash_entry
*entry
;
2036 if (!map
->tablesize
)
2037 hashmap_init(map
, ref_store_hash_cmp
, NULL
, 0);
2039 entry
= alloc_ref_store_hash_entry(name
, refs
);
2040 if (hashmap_put(map
, &entry
->ent
))
2041 BUG("%s ref_store '%s' initialized twice", type
, name
);
2044 struct ref_store
*get_submodule_ref_store(const char *submodule
)
2046 struct strbuf submodule_sb
= STRBUF_INIT
;
2047 struct ref_store
*refs
;
2048 char *to_free
= NULL
;
2050 struct repository
*subrepo
;
2055 len
= strlen(submodule
);
2056 while (len
&& is_dir_sep(submodule
[len
- 1]))
2062 /* We need to strip off one or more trailing slashes */
2063 submodule
= to_free
= xmemdupz(submodule
, len
);
2065 refs
= lookup_ref_store_map(&submodule_ref_stores
, submodule
);
2069 strbuf_addstr(&submodule_sb
, submodule
);
2070 if (!is_nonbare_repository_dir(&submodule_sb
))
2073 if (submodule_to_gitdir(&submodule_sb
, submodule
))
2076 subrepo
= xmalloc(sizeof(*subrepo
));
2078 * NEEDSWORK: Make get_submodule_ref_store() work with arbitrary
2079 * superprojects other than the_repository. This probably should be
2080 * done by making it take a struct repository * parameter instead of a
2083 if (repo_submodule_init(subrepo
, the_repository
, submodule
,
2088 refs
= ref_store_init(subrepo
, submodule_sb
.buf
,
2089 REF_STORE_READ
| REF_STORE_ODB
);
2090 register_ref_store_map(&submodule_ref_stores
, "submodule",
2094 strbuf_release(&submodule_sb
);
2100 struct ref_store
*get_worktree_ref_store(const struct worktree
*wt
)
2102 struct ref_store
*refs
;
2106 return get_main_ref_store(the_repository
);
2108 id
= wt
->id
? wt
->id
: "/";
2109 refs
= lookup_ref_store_map(&worktree_ref_stores
, id
);
2114 refs
= ref_store_init(the_repository
,
2115 git_common_path("worktrees/%s", wt
->id
),
2116 REF_STORE_ALL_CAPS
);
2118 refs
= ref_store_init(the_repository
,
2119 get_git_common_dir(),
2120 REF_STORE_ALL_CAPS
);
2123 register_ref_store_map(&worktree_ref_stores
, "worktree",
2128 void base_ref_store_init(struct ref_store
*refs
, struct repository
*repo
,
2129 const char *path
, const struct ref_storage_be
*be
)
2133 refs
->gitdir
= xstrdup(path
);
2136 /* backend functions */
2137 int refs_pack_refs(struct ref_store
*refs
, struct pack_refs_opts
*opts
)
2139 return refs
->be
->pack_refs(refs
, opts
);
2142 int peel_iterated_oid(const struct object_id
*base
, struct object_id
*peeled
)
2144 if (current_ref_iter
&&
2145 (current_ref_iter
->oid
== base
||
2146 oideq(current_ref_iter
->oid
, base
)))
2147 return ref_iterator_peel(current_ref_iter
, peeled
);
2149 return peel_object(base
, peeled
) ? -1 : 0;
2152 int refs_create_symref(struct ref_store
*refs
,
2153 const char *ref_target
,
2154 const char *refs_heads_master
,
2160 msg
= normalize_reflog_message(logmsg
);
2161 retval
= refs
->be
->create_symref(refs
, ref_target
, refs_heads_master
,
2167 int create_symref(const char *ref_target
, const char *refs_heads_master
,
2170 return refs_create_symref(get_main_ref_store(the_repository
), ref_target
,
2171 refs_heads_master
, logmsg
);
2174 int ref_update_reject_duplicates(struct string_list
*refnames
,
2177 size_t i
, n
= refnames
->nr
;
2181 for (i
= 1; i
< n
; i
++) {
2182 int cmp
= strcmp(refnames
->items
[i
- 1].string
,
2183 refnames
->items
[i
].string
);
2187 _("multiple updates for ref '%s' not allowed"),
2188 refnames
->items
[i
].string
);
2190 } else if (cmp
> 0) {
2191 BUG("ref_update_reject_duplicates() received unsorted list");
2197 static int run_transaction_hook(struct ref_transaction
*transaction
,
2200 struct child_process proc
= CHILD_PROCESS_INIT
;
2201 struct strbuf buf
= STRBUF_INIT
;
2205 hook
= find_hook("reference-transaction");
2209 strvec_pushl(&proc
.args
, hook
, state
, NULL
);
2211 proc
.stdout_to_stderr
= 1;
2212 proc
.trace2_hook_name
= "reference-transaction";
2214 ret
= start_command(&proc
);
2218 sigchain_push(SIGPIPE
, SIG_IGN
);
2220 for (i
= 0; i
< transaction
->nr
; i
++) {
2221 struct ref_update
*update
= transaction
->updates
[i
];
2224 strbuf_addf(&buf
, "%s %s %s\n",
2225 oid_to_hex(&update
->old_oid
),
2226 oid_to_hex(&update
->new_oid
),
2229 if (write_in_full(proc
.in
, buf
.buf
, buf
.len
) < 0) {
2230 if (errno
!= EPIPE
) {
2231 /* Don't leak errno outside this API */
2240 sigchain_pop(SIGPIPE
);
2241 strbuf_release(&buf
);
2243 ret
|= finish_command(&proc
);
2247 int ref_transaction_prepare(struct ref_transaction
*transaction
,
2250 struct ref_store
*refs
= transaction
->ref_store
;
2253 switch (transaction
->state
) {
2254 case REF_TRANSACTION_OPEN
:
2257 case REF_TRANSACTION_PREPARED
:
2258 BUG("prepare called twice on reference transaction");
2260 case REF_TRANSACTION_CLOSED
:
2261 BUG("prepare called on a closed reference transaction");
2264 BUG("unexpected reference transaction state");
2268 if (refs
->repo
->objects
->odb
->disable_ref_updates
) {
2270 _("ref updates forbidden inside quarantine environment"));
2274 ret
= refs
->be
->transaction_prepare(refs
, transaction
, err
);
2278 ret
= run_transaction_hook(transaction
, "prepared");
2280 ref_transaction_abort(transaction
, err
);
2281 die(_("ref updates aborted by hook"));
2287 int ref_transaction_abort(struct ref_transaction
*transaction
,
2290 struct ref_store
*refs
= transaction
->ref_store
;
2293 switch (transaction
->state
) {
2294 case REF_TRANSACTION_OPEN
:
2295 /* No need to abort explicitly. */
2297 case REF_TRANSACTION_PREPARED
:
2298 ret
= refs
->be
->transaction_abort(refs
, transaction
, err
);
2300 case REF_TRANSACTION_CLOSED
:
2301 BUG("abort called on a closed reference transaction");
2304 BUG("unexpected reference transaction state");
2308 run_transaction_hook(transaction
, "aborted");
2310 ref_transaction_free(transaction
);
2314 int ref_transaction_commit(struct ref_transaction
*transaction
,
2317 struct ref_store
*refs
= transaction
->ref_store
;
2320 switch (transaction
->state
) {
2321 case REF_TRANSACTION_OPEN
:
2322 /* Need to prepare first. */
2323 ret
= ref_transaction_prepare(transaction
, err
);
2327 case REF_TRANSACTION_PREPARED
:
2328 /* Fall through to finish. */
2330 case REF_TRANSACTION_CLOSED
:
2331 BUG("commit called on a closed reference transaction");
2334 BUG("unexpected reference transaction state");
2338 ret
= refs
->be
->transaction_finish(refs
, transaction
, err
);
2340 run_transaction_hook(transaction
, "committed");
2344 int refs_verify_refname_available(struct ref_store
*refs
,
2345 const char *refname
,
2346 const struct string_list
*extras
,
2347 const struct string_list
*skip
,
2351 const char *extra_refname
;
2352 struct strbuf dirname
= STRBUF_INIT
;
2353 struct strbuf referent
= STRBUF_INIT
;
2354 struct object_id oid
;
2356 struct ref_iterator
*iter
;
2361 * For the sake of comments in this function, suppose that
2362 * refname is "refs/foo/bar".
2367 strbuf_grow(&dirname
, strlen(refname
) + 1);
2368 for (slash
= strchr(refname
, '/'); slash
; slash
= strchr(slash
+ 1, '/')) {
2370 * Just saying "Is a directory" when we e.g. can't
2371 * lock some multi-level ref isn't very informative,
2372 * the user won't be told *what* is a directory, so
2373 * let's not use strerror() below.
2376 /* Expand dirname to the new prefix, not including the trailing slash: */
2377 strbuf_add(&dirname
, refname
+ dirname
.len
, slash
- refname
- dirname
.len
);
2380 * We are still at a leading dir of the refname (e.g.,
2381 * "refs/foo"; if there is a reference with that name,
2382 * it is a conflict, *unless* it is in skip.
2384 if (skip
&& string_list_has_string(skip
, dirname
.buf
))
2387 if (!refs_read_raw_ref(refs
, dirname
.buf
, &oid
, &referent
,
2388 &type
, &ignore_errno
)) {
2389 strbuf_addf(err
, _("'%s' exists; cannot create '%s'"),
2390 dirname
.buf
, refname
);
2394 if (extras
&& string_list_has_string(extras
, dirname
.buf
)) {
2395 strbuf_addf(err
, _("cannot process '%s' and '%s' at the same time"),
2396 refname
, dirname
.buf
);
2402 * We are at the leaf of our refname (e.g., "refs/foo/bar").
2403 * There is no point in searching for a reference with that
2404 * name, because a refname isn't considered to conflict with
2405 * itself. But we still need to check for references whose
2406 * names are in the "refs/foo/bar/" namespace, because they
2409 strbuf_addstr(&dirname
, refname
+ dirname
.len
);
2410 strbuf_addch(&dirname
, '/');
2412 iter
= refs_ref_iterator_begin(refs
, dirname
.buf
, 0,
2413 DO_FOR_EACH_INCLUDE_BROKEN
);
2414 while ((ok
= ref_iterator_advance(iter
)) == ITER_OK
) {
2416 string_list_has_string(skip
, iter
->refname
))
2419 strbuf_addf(err
, _("'%s' exists; cannot create '%s'"),
2420 iter
->refname
, refname
);
2421 ref_iterator_abort(iter
);
2425 if (ok
!= ITER_DONE
)
2426 BUG("error while iterating over references");
2428 extra_refname
= find_descendant_ref(dirname
.buf
, extras
, skip
);
2430 strbuf_addf(err
, _("cannot process '%s' and '%s' at the same time"),
2431 refname
, extra_refname
);
2436 strbuf_release(&referent
);
2437 strbuf_release(&dirname
);
2441 int refs_for_each_reflog(struct ref_store
*refs
, each_ref_fn fn
, void *cb_data
)
2443 struct ref_iterator
*iter
;
2444 struct do_for_each_ref_help hp
= { fn
, cb_data
};
2446 iter
= refs
->be
->reflog_iterator_begin(refs
);
2448 return do_for_each_repo_ref_iterator(the_repository
, iter
,
2449 do_for_each_ref_helper
, &hp
);
2452 int for_each_reflog(each_ref_fn fn
, void *cb_data
)
2454 return refs_for_each_reflog(get_main_ref_store(the_repository
), fn
, cb_data
);
2457 int refs_for_each_reflog_ent_reverse(struct ref_store
*refs
,
2458 const char *refname
,
2459 each_reflog_ent_fn fn
,
2462 return refs
->be
->for_each_reflog_ent_reverse(refs
, refname
,
2466 int for_each_reflog_ent_reverse(const char *refname
, each_reflog_ent_fn fn
,
2469 return refs_for_each_reflog_ent_reverse(get_main_ref_store(the_repository
),
2470 refname
, fn
, cb_data
);
2473 int refs_for_each_reflog_ent(struct ref_store
*refs
, const char *refname
,
2474 each_reflog_ent_fn fn
, void *cb_data
)
2476 return refs
->be
->for_each_reflog_ent(refs
, refname
, fn
, cb_data
);
2479 int for_each_reflog_ent(const char *refname
, each_reflog_ent_fn fn
,
2482 return refs_for_each_reflog_ent(get_main_ref_store(the_repository
), refname
,
2486 int refs_reflog_exists(struct ref_store
*refs
, const char *refname
)
2488 return refs
->be
->reflog_exists(refs
, refname
);
2491 int reflog_exists(const char *refname
)
2493 return refs_reflog_exists(get_main_ref_store(the_repository
), refname
);
2496 int refs_create_reflog(struct ref_store
*refs
, const char *refname
,
2499 return refs
->be
->create_reflog(refs
, refname
, err
);
2502 int safe_create_reflog(const char *refname
, struct strbuf
*err
)
2504 return refs_create_reflog(get_main_ref_store(the_repository
), refname
,
2508 int refs_delete_reflog(struct ref_store
*refs
, const char *refname
)
2510 return refs
->be
->delete_reflog(refs
, refname
);
2513 int delete_reflog(const char *refname
)
2515 return refs_delete_reflog(get_main_ref_store(the_repository
), refname
);
2518 int refs_reflog_expire(struct ref_store
*refs
,
2519 const char *refname
,
2521 reflog_expiry_prepare_fn prepare_fn
,
2522 reflog_expiry_should_prune_fn should_prune_fn
,
2523 reflog_expiry_cleanup_fn cleanup_fn
,
2524 void *policy_cb_data
)
2526 return refs
->be
->reflog_expire(refs
, refname
, flags
,
2527 prepare_fn
, should_prune_fn
,
2528 cleanup_fn
, policy_cb_data
);
2531 int reflog_expire(const char *refname
,
2533 reflog_expiry_prepare_fn prepare_fn
,
2534 reflog_expiry_should_prune_fn should_prune_fn
,
2535 reflog_expiry_cleanup_fn cleanup_fn
,
2536 void *policy_cb_data
)
2538 return refs_reflog_expire(get_main_ref_store(the_repository
),
2540 prepare_fn
, should_prune_fn
,
2541 cleanup_fn
, policy_cb_data
);
2544 int initial_ref_transaction_commit(struct ref_transaction
*transaction
,
2547 struct ref_store
*refs
= transaction
->ref_store
;
2549 return refs
->be
->initial_transaction_commit(refs
, transaction
, err
);
2552 void ref_transaction_for_each_queued_update(struct ref_transaction
*transaction
,
2553 ref_transaction_for_each_queued_update_fn cb
,
2558 for (i
= 0; i
< transaction
->nr
; i
++) {
2559 struct ref_update
*update
= transaction
->updates
[i
];
2562 (update
->flags
& REF_HAVE_OLD
) ? &update
->old_oid
: NULL
,
2563 (update
->flags
& REF_HAVE_NEW
) ? &update
->new_oid
: NULL
,
2568 int refs_delete_refs(struct ref_store
*refs
, const char *logmsg
,
2569 struct string_list
*refnames
, unsigned int flags
)
2574 msg
= normalize_reflog_message(logmsg
);
2575 retval
= refs
->be
->delete_refs(refs
, msg
, refnames
, flags
);
2580 int delete_refs(const char *msg
, struct string_list
*refnames
,
2583 return refs_delete_refs(get_main_ref_store(the_repository
), msg
, refnames
, flags
);
2586 int refs_rename_ref(struct ref_store
*refs
, const char *oldref
,
2587 const char *newref
, const char *logmsg
)
2592 msg
= normalize_reflog_message(logmsg
);
2593 retval
= refs
->be
->rename_ref(refs
, oldref
, newref
, msg
);
2598 int rename_ref(const char *oldref
, const char *newref
, const char *logmsg
)
2600 return refs_rename_ref(get_main_ref_store(the_repository
), oldref
, newref
, logmsg
);
2603 int refs_copy_existing_ref(struct ref_store
*refs
, const char *oldref
,
2604 const char *newref
, const char *logmsg
)
2609 msg
= normalize_reflog_message(logmsg
);
2610 retval
= refs
->be
->copy_ref(refs
, oldref
, newref
, msg
);
2615 int copy_existing_ref(const char *oldref
, const char *newref
, const char *logmsg
)
2617 return refs_copy_existing_ref(get_main_ref_store(the_repository
), oldref
, newref
, logmsg
);