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