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