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