]> git.ipfire.org Git - thirdparty/git.git/blob - refs.c
Sync with 2.33.8
[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
273 result = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
274 oid, flags);
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 refs_read_ref_full(struct ref_store *refs, const char *refname,
295 int resolve_flags, struct object_id *oid, int *flags)
296 {
297 if (refs_resolve_ref_unsafe(refs, refname, resolve_flags, oid, flags))
298 return 0;
299 return -1;
300 }
301
302 int read_ref_full(const char *refname, int resolve_flags, struct object_id *oid, int *flags)
303 {
304 return refs_read_ref_full(get_main_ref_store(the_repository), refname,
305 resolve_flags, oid, flags);
306 }
307
308 int read_ref(const char *refname, struct object_id *oid)
309 {
310 return read_ref_full(refname, RESOLVE_REF_READING, oid, NULL);
311 }
312
313 int refs_ref_exists(struct ref_store *refs, const char *refname)
314 {
315 return !!refs_resolve_ref_unsafe(refs, refname, RESOLVE_REF_READING, NULL, NULL);
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
659 this_result = refs_found ? &oid_from_ref : oid;
660 strbuf_reset(&fullref);
661 strbuf_addf(&fullref, *p, len, str);
662 r = refs_resolve_ref_unsafe(get_main_ref_store(repo),
663 fullref.buf, RESOLVE_REF_READING,
664 this_result, &flag);
665 if (r) {
666 if (!refs_found++)
667 *ref = xstrdup(r);
668 if (!warn_ambiguous_refs)
669 break;
670 } else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
671 warning(_("ignoring dangling symref %s"), fullref.buf);
672 } else if ((flag & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
673 warning(_("ignoring broken ref %s"), fullref.buf);
674 }
675 }
676 strbuf_release(&fullref);
677 return refs_found;
678 }
679
680 int repo_dwim_log(struct repository *r, const char *str, int len,
681 struct object_id *oid, char **log)
682 {
683 struct ref_store *refs = get_main_ref_store(r);
684 char *last_branch = substitute_branch_name(r, &str, &len, 0);
685 const char **p;
686 int logs_found = 0;
687 struct strbuf path = STRBUF_INIT;
688
689 *log = NULL;
690 for (p = ref_rev_parse_rules; *p; p++) {
691 struct object_id hash;
692 const char *ref, *it;
693
694 strbuf_reset(&path);
695 strbuf_addf(&path, *p, len, str);
696 ref = refs_resolve_ref_unsafe(refs, path.buf,
697 RESOLVE_REF_READING,
698 oid ? &hash : NULL, NULL);
699 if (!ref)
700 continue;
701 if (refs_reflog_exists(refs, path.buf))
702 it = path.buf;
703 else if (strcmp(ref, path.buf) &&
704 refs_reflog_exists(refs, ref))
705 it = ref;
706 else
707 continue;
708 if (!logs_found++) {
709 *log = xstrdup(it);
710 if (oid)
711 oidcpy(oid, &hash);
712 }
713 if (!warn_ambiguous_refs)
714 break;
715 }
716 strbuf_release(&path);
717 free(last_branch);
718 return logs_found;
719 }
720
721 int dwim_log(const char *str, int len, struct object_id *oid, char **log)
722 {
723 return repo_dwim_log(the_repository, str, len, oid, log);
724 }
725
726 static int is_per_worktree_ref(const char *refname)
727 {
728 return starts_with(refname, "refs/worktree/") ||
729 starts_with(refname, "refs/bisect/") ||
730 starts_with(refname, "refs/rewritten/");
731 }
732
733 static int is_pseudoref_syntax(const char *refname)
734 {
735 const char *c;
736
737 for (c = refname; *c; c++) {
738 if (!isupper(*c) && *c != '-' && *c != '_')
739 return 0;
740 }
741
742 return 1;
743 }
744
745 static int is_main_pseudoref_syntax(const char *refname)
746 {
747 return skip_prefix(refname, "main-worktree/", &refname) &&
748 *refname &&
749 is_pseudoref_syntax(refname);
750 }
751
752 static int is_other_pseudoref_syntax(const char *refname)
753 {
754 if (!skip_prefix(refname, "worktrees/", &refname))
755 return 0;
756 refname = strchr(refname, '/');
757 if (!refname || !refname[1])
758 return 0;
759 return is_pseudoref_syntax(refname + 1);
760 }
761
762 enum ref_type ref_type(const char *refname)
763 {
764 if (is_per_worktree_ref(refname))
765 return REF_TYPE_PER_WORKTREE;
766 if (is_pseudoref_syntax(refname))
767 return REF_TYPE_PSEUDOREF;
768 if (is_main_pseudoref_syntax(refname))
769 return REF_TYPE_MAIN_PSEUDOREF;
770 if (is_other_pseudoref_syntax(refname))
771 return REF_TYPE_OTHER_PSEUDOREF;
772 return REF_TYPE_NORMAL;
773 }
774
775 long get_files_ref_lock_timeout_ms(void)
776 {
777 static int configured = 0;
778
779 /* The default timeout is 100 ms: */
780 static int timeout_ms = 100;
781
782 if (!configured) {
783 git_config_get_int("core.filesreflocktimeout", &timeout_ms);
784 configured = 1;
785 }
786
787 return timeout_ms;
788 }
789
790 int refs_delete_ref(struct ref_store *refs, const char *msg,
791 const char *refname,
792 const struct object_id *old_oid,
793 unsigned int flags)
794 {
795 struct ref_transaction *transaction;
796 struct strbuf err = STRBUF_INIT;
797
798 transaction = ref_store_transaction_begin(refs, &err);
799 if (!transaction ||
800 ref_transaction_delete(transaction, refname, old_oid,
801 flags, msg, &err) ||
802 ref_transaction_commit(transaction, &err)) {
803 error("%s", err.buf);
804 ref_transaction_free(transaction);
805 strbuf_release(&err);
806 return 1;
807 }
808 ref_transaction_free(transaction);
809 strbuf_release(&err);
810 return 0;
811 }
812
813 int delete_ref(const char *msg, const char *refname,
814 const struct object_id *old_oid, unsigned int flags)
815 {
816 return refs_delete_ref(get_main_ref_store(the_repository), msg, refname,
817 old_oid, flags);
818 }
819
820 static void copy_reflog_msg(struct strbuf *sb, const char *msg)
821 {
822 char c;
823 int wasspace = 1;
824
825 while ((c = *msg++)) {
826 if (wasspace && isspace(c))
827 continue;
828 wasspace = isspace(c);
829 if (wasspace)
830 c = ' ';
831 strbuf_addch(sb, c);
832 }
833 strbuf_rtrim(sb);
834 }
835
836 static char *normalize_reflog_message(const char *msg)
837 {
838 struct strbuf sb = STRBUF_INIT;
839
840 if (msg && *msg)
841 copy_reflog_msg(&sb, msg);
842 return strbuf_detach(&sb, NULL);
843 }
844
845 int should_autocreate_reflog(const char *refname)
846 {
847 switch (log_all_ref_updates) {
848 case LOG_REFS_ALWAYS:
849 return 1;
850 case LOG_REFS_NORMAL:
851 return starts_with(refname, "refs/heads/") ||
852 starts_with(refname, "refs/remotes/") ||
853 starts_with(refname, "refs/notes/") ||
854 !strcmp(refname, "HEAD");
855 default:
856 return 0;
857 }
858 }
859
860 int is_branch(const char *refname)
861 {
862 return !strcmp(refname, "HEAD") || starts_with(refname, "refs/heads/");
863 }
864
865 struct read_ref_at_cb {
866 const char *refname;
867 timestamp_t at_time;
868 int cnt;
869 int reccnt;
870 struct object_id *oid;
871 int found_it;
872
873 struct object_id ooid;
874 struct object_id noid;
875 int tz;
876 timestamp_t date;
877 char **msg;
878 timestamp_t *cutoff_time;
879 int *cutoff_tz;
880 int *cutoff_cnt;
881 };
882
883 static void set_read_ref_cutoffs(struct read_ref_at_cb *cb,
884 timestamp_t timestamp, int tz, const char *message)
885 {
886 if (cb->msg)
887 *cb->msg = xstrdup(message);
888 if (cb->cutoff_time)
889 *cb->cutoff_time = timestamp;
890 if (cb->cutoff_tz)
891 *cb->cutoff_tz = tz;
892 if (cb->cutoff_cnt)
893 *cb->cutoff_cnt = cb->reccnt;
894 }
895
896 static int read_ref_at_ent(struct object_id *ooid, struct object_id *noid,
897 const char *email, timestamp_t timestamp, int tz,
898 const char *message, void *cb_data)
899 {
900 struct read_ref_at_cb *cb = cb_data;
901 int reached_count;
902
903 cb->tz = tz;
904 cb->date = timestamp;
905
906 /*
907 * It is not possible for cb->cnt == 0 on the first iteration because
908 * that special case is handled in read_ref_at().
909 */
910 if (cb->cnt > 0)
911 cb->cnt--;
912 reached_count = cb->cnt == 0 && !is_null_oid(ooid);
913 if (timestamp <= cb->at_time || reached_count) {
914 set_read_ref_cutoffs(cb, timestamp, tz, message);
915 /*
916 * we have not yet updated cb->[n|o]oid so they still
917 * hold the values for the previous record.
918 */
919 if (!is_null_oid(&cb->ooid) && !oideq(&cb->ooid, noid))
920 warning(_("log for ref %s has gap after %s"),
921 cb->refname, show_date(cb->date, cb->tz, DATE_MODE(RFC2822)));
922 if (reached_count)
923 oidcpy(cb->oid, ooid);
924 else if (!is_null_oid(&cb->ooid) || cb->date == cb->at_time)
925 oidcpy(cb->oid, noid);
926 else if (!oideq(noid, cb->oid))
927 warning(_("log for ref %s unexpectedly ended on %s"),
928 cb->refname, show_date(cb->date, cb->tz,
929 DATE_MODE(RFC2822)));
930 cb->found_it = 1;
931 }
932 cb->reccnt++;
933 oidcpy(&cb->ooid, ooid);
934 oidcpy(&cb->noid, noid);
935 return cb->found_it;
936 }
937
938 static int read_ref_at_ent_newest(struct object_id *ooid, struct object_id *noid,
939 const char *email, timestamp_t timestamp,
940 int tz, const char *message, void *cb_data)
941 {
942 struct read_ref_at_cb *cb = cb_data;
943
944 set_read_ref_cutoffs(cb, timestamp, tz, message);
945 oidcpy(cb->oid, noid);
946 /* We just want the first entry */
947 return 1;
948 }
949
950 static int read_ref_at_ent_oldest(struct object_id *ooid, struct object_id *noid,
951 const char *email, timestamp_t timestamp,
952 int tz, const char *message, void *cb_data)
953 {
954 struct read_ref_at_cb *cb = cb_data;
955
956 set_read_ref_cutoffs(cb, timestamp, tz, message);
957 oidcpy(cb->oid, ooid);
958 if (is_null_oid(cb->oid))
959 oidcpy(cb->oid, noid);
960 /* We just want the first entry */
961 return 1;
962 }
963
964 int read_ref_at(struct ref_store *refs, const char *refname,
965 unsigned int flags, timestamp_t at_time, int cnt,
966 struct object_id *oid, char **msg,
967 timestamp_t *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
968 {
969 struct read_ref_at_cb cb;
970
971 memset(&cb, 0, sizeof(cb));
972 cb.refname = refname;
973 cb.at_time = at_time;
974 cb.cnt = cnt;
975 cb.msg = msg;
976 cb.cutoff_time = cutoff_time;
977 cb.cutoff_tz = cutoff_tz;
978 cb.cutoff_cnt = cutoff_cnt;
979 cb.oid = oid;
980
981 if (cb.cnt == 0) {
982 refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent_newest, &cb);
983 return 0;
984 }
985
986 refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent, &cb);
987
988 if (!cb.reccnt) {
989 if (flags & GET_OID_QUIETLY)
990 exit(128);
991 else
992 die(_("log for %s is empty"), refname);
993 }
994 if (cb.found_it)
995 return 0;
996
997 refs_for_each_reflog_ent(refs, refname, read_ref_at_ent_oldest, &cb);
998
999 return 1;
1000 }
1001
1002 struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
1003 struct strbuf *err)
1004 {
1005 struct ref_transaction *tr;
1006 assert(err);
1007
1008 CALLOC_ARRAY(tr, 1);
1009 tr->ref_store = refs;
1010 return tr;
1011 }
1012
1013 struct ref_transaction *ref_transaction_begin(struct strbuf *err)
1014 {
1015 return ref_store_transaction_begin(get_main_ref_store(the_repository), err);
1016 }
1017
1018 void ref_transaction_free(struct ref_transaction *transaction)
1019 {
1020 size_t i;
1021
1022 if (!transaction)
1023 return;
1024
1025 switch (transaction->state) {
1026 case REF_TRANSACTION_OPEN:
1027 case REF_TRANSACTION_CLOSED:
1028 /* OK */
1029 break;
1030 case REF_TRANSACTION_PREPARED:
1031 BUG("free called on a prepared reference transaction");
1032 break;
1033 default:
1034 BUG("unexpected reference transaction state");
1035 break;
1036 }
1037
1038 for (i = 0; i < transaction->nr; i++) {
1039 free(transaction->updates[i]->msg);
1040 free(transaction->updates[i]);
1041 }
1042 free(transaction->updates);
1043 free(transaction);
1044 }
1045
1046 struct ref_update *ref_transaction_add_update(
1047 struct ref_transaction *transaction,
1048 const char *refname, unsigned int flags,
1049 const struct object_id *new_oid,
1050 const struct object_id *old_oid,
1051 const char *msg)
1052 {
1053 struct ref_update *update;
1054
1055 if (transaction->state != REF_TRANSACTION_OPEN)
1056 BUG("update called for transaction that is not open");
1057
1058 FLEX_ALLOC_STR(update, refname, refname);
1059 ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
1060 transaction->updates[transaction->nr++] = update;
1061
1062 update->flags = flags;
1063
1064 if (flags & REF_HAVE_NEW)
1065 oidcpy(&update->new_oid, new_oid);
1066 if (flags & REF_HAVE_OLD)
1067 oidcpy(&update->old_oid, old_oid);
1068 update->msg = normalize_reflog_message(msg);
1069 return update;
1070 }
1071
1072 int ref_transaction_update(struct ref_transaction *transaction,
1073 const char *refname,
1074 const struct object_id *new_oid,
1075 const struct object_id *old_oid,
1076 unsigned int flags, const char *msg,
1077 struct strbuf *err)
1078 {
1079 assert(err);
1080
1081 if ((new_oid && !is_null_oid(new_oid)) ?
1082 check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
1083 !refname_is_safe(refname)) {
1084 strbuf_addf(err, _("refusing to update ref with bad name '%s'"),
1085 refname);
1086 return -1;
1087 }
1088
1089 if (flags & ~REF_TRANSACTION_UPDATE_ALLOWED_FLAGS)
1090 BUG("illegal flags 0x%x passed to ref_transaction_update()", flags);
1091
1092 flags |= (new_oid ? REF_HAVE_NEW : 0) | (old_oid ? REF_HAVE_OLD : 0);
1093
1094 ref_transaction_add_update(transaction, refname, flags,
1095 new_oid, old_oid, msg);
1096 return 0;
1097 }
1098
1099 int ref_transaction_create(struct ref_transaction *transaction,
1100 const char *refname,
1101 const struct object_id *new_oid,
1102 unsigned int flags, const char *msg,
1103 struct strbuf *err)
1104 {
1105 if (!new_oid || is_null_oid(new_oid))
1106 BUG("create called without valid new_oid");
1107 return ref_transaction_update(transaction, refname, new_oid,
1108 null_oid(), flags, msg, err);
1109 }
1110
1111 int ref_transaction_delete(struct ref_transaction *transaction,
1112 const char *refname,
1113 const struct object_id *old_oid,
1114 unsigned int flags, const char *msg,
1115 struct strbuf *err)
1116 {
1117 if (old_oid && is_null_oid(old_oid))
1118 BUG("delete called with old_oid set to zeros");
1119 return ref_transaction_update(transaction, refname,
1120 null_oid(), old_oid,
1121 flags, msg, err);
1122 }
1123
1124 int ref_transaction_verify(struct ref_transaction *transaction,
1125 const char *refname,
1126 const struct object_id *old_oid,
1127 unsigned int flags,
1128 struct strbuf *err)
1129 {
1130 if (!old_oid)
1131 BUG("verify called with old_oid set to NULL");
1132 return ref_transaction_update(transaction, refname,
1133 NULL, old_oid,
1134 flags, NULL, err);
1135 }
1136
1137 int refs_update_ref(struct ref_store *refs, const char *msg,
1138 const char *refname, const struct object_id *new_oid,
1139 const struct object_id *old_oid, unsigned int flags,
1140 enum action_on_err onerr)
1141 {
1142 struct ref_transaction *t = NULL;
1143 struct strbuf err = STRBUF_INIT;
1144 int ret = 0;
1145
1146 t = ref_store_transaction_begin(refs, &err);
1147 if (!t ||
1148 ref_transaction_update(t, refname, new_oid, old_oid, flags, msg,
1149 &err) ||
1150 ref_transaction_commit(t, &err)) {
1151 ret = 1;
1152 ref_transaction_free(t);
1153 }
1154 if (ret) {
1155 const char *str = _("update_ref failed for ref '%s': %s");
1156
1157 switch (onerr) {
1158 case UPDATE_REFS_MSG_ON_ERR:
1159 error(str, refname, err.buf);
1160 break;
1161 case UPDATE_REFS_DIE_ON_ERR:
1162 die(str, refname, err.buf);
1163 break;
1164 case UPDATE_REFS_QUIET_ON_ERR:
1165 break;
1166 }
1167 strbuf_release(&err);
1168 return 1;
1169 }
1170 strbuf_release(&err);
1171 if (t)
1172 ref_transaction_free(t);
1173 return 0;
1174 }
1175
1176 int update_ref(const char *msg, const char *refname,
1177 const struct object_id *new_oid,
1178 const struct object_id *old_oid,
1179 unsigned int flags, enum action_on_err onerr)
1180 {
1181 return refs_update_ref(get_main_ref_store(the_repository), msg, refname, new_oid,
1182 old_oid, flags, onerr);
1183 }
1184
1185 char *refs_shorten_unambiguous_ref(struct ref_store *refs,
1186 const char *refname, int strict)
1187 {
1188 int i;
1189 static char **scanf_fmts;
1190 static int nr_rules;
1191 char *short_name;
1192 struct strbuf resolved_buf = STRBUF_INIT;
1193
1194 if (!nr_rules) {
1195 /*
1196 * Pre-generate scanf formats from ref_rev_parse_rules[].
1197 * Generate a format suitable for scanf from a
1198 * ref_rev_parse_rules rule by interpolating "%s" at the
1199 * location of the "%.*s".
1200 */
1201 size_t total_len = 0;
1202 size_t offset = 0;
1203
1204 /* the rule list is NULL terminated, count them first */
1205 for (nr_rules = 0; ref_rev_parse_rules[nr_rules]; nr_rules++)
1206 /* -2 for strlen("%.*s") - strlen("%s"); +1 for NUL */
1207 total_len += strlen(ref_rev_parse_rules[nr_rules]) - 2 + 1;
1208
1209 scanf_fmts = xmalloc(st_add(st_mult(sizeof(char *), nr_rules), total_len));
1210
1211 offset = 0;
1212 for (i = 0; i < nr_rules; i++) {
1213 assert(offset < total_len);
1214 scanf_fmts[i] = (char *)&scanf_fmts[nr_rules] + offset;
1215 offset += xsnprintf(scanf_fmts[i], total_len - offset,
1216 ref_rev_parse_rules[i], 2, "%s") + 1;
1217 }
1218 }
1219
1220 /* bail out if there are no rules */
1221 if (!nr_rules)
1222 return xstrdup(refname);
1223
1224 /* buffer for scanf result, at most refname must fit */
1225 short_name = xstrdup(refname);
1226
1227 /* skip first rule, it will always match */
1228 for (i = nr_rules - 1; i > 0 ; --i) {
1229 int j;
1230 int rules_to_fail = i;
1231 int short_name_len;
1232
1233 if (1 != sscanf(refname, scanf_fmts[i], short_name))
1234 continue;
1235
1236 short_name_len = strlen(short_name);
1237
1238 /*
1239 * in strict mode, all (except the matched one) rules
1240 * must fail to resolve to a valid non-ambiguous ref
1241 */
1242 if (strict)
1243 rules_to_fail = nr_rules;
1244
1245 /*
1246 * check if the short name resolves to a valid ref,
1247 * but use only rules prior to the matched one
1248 */
1249 for (j = 0; j < rules_to_fail; j++) {
1250 const char *rule = ref_rev_parse_rules[j];
1251
1252 /* skip matched rule */
1253 if (i == j)
1254 continue;
1255
1256 /*
1257 * the short name is ambiguous, if it resolves
1258 * (with this previous rule) to a valid ref
1259 * read_ref() returns 0 on success
1260 */
1261 strbuf_reset(&resolved_buf);
1262 strbuf_addf(&resolved_buf, rule,
1263 short_name_len, short_name);
1264 if (refs_ref_exists(refs, resolved_buf.buf))
1265 break;
1266 }
1267
1268 /*
1269 * short name is non-ambiguous if all previous rules
1270 * haven't resolved to a valid ref
1271 */
1272 if (j == rules_to_fail) {
1273 strbuf_release(&resolved_buf);
1274 return short_name;
1275 }
1276 }
1277
1278 strbuf_release(&resolved_buf);
1279 free(short_name);
1280 return xstrdup(refname);
1281 }
1282
1283 char *shorten_unambiguous_ref(const char *refname, int strict)
1284 {
1285 return refs_shorten_unambiguous_ref(get_main_ref_store(the_repository),
1286 refname, strict);
1287 }
1288
1289 static struct string_list *hide_refs;
1290
1291 int parse_hide_refs_config(const char *var, const char *value, const char *section)
1292 {
1293 const char *key;
1294 if (!strcmp("transfer.hiderefs", var) ||
1295 (!parse_config_key(var, section, NULL, NULL, &key) &&
1296 !strcmp(key, "hiderefs"))) {
1297 char *ref;
1298 int len;
1299
1300 if (!value)
1301 return config_error_nonbool(var);
1302 ref = xstrdup(value);
1303 len = strlen(ref);
1304 while (len && ref[len - 1] == '/')
1305 ref[--len] = '\0';
1306 if (!hide_refs) {
1307 CALLOC_ARRAY(hide_refs, 1);
1308 hide_refs->strdup_strings = 1;
1309 }
1310 string_list_append(hide_refs, ref);
1311 }
1312 return 0;
1313 }
1314
1315 int ref_is_hidden(const char *refname, const char *refname_full)
1316 {
1317 int i;
1318
1319 if (!hide_refs)
1320 return 0;
1321 for (i = hide_refs->nr - 1; i >= 0; i--) {
1322 const char *match = hide_refs->items[i].string;
1323 const char *subject;
1324 int neg = 0;
1325 const char *p;
1326
1327 if (*match == '!') {
1328 neg = 1;
1329 match++;
1330 }
1331
1332 if (*match == '^') {
1333 subject = refname_full;
1334 match++;
1335 } else {
1336 subject = refname;
1337 }
1338
1339 /* refname can be NULL when namespaces are used. */
1340 if (subject &&
1341 skip_prefix(subject, match, &p) &&
1342 (!*p || *p == '/'))
1343 return !neg;
1344 }
1345 return 0;
1346 }
1347
1348 const char *find_descendant_ref(const char *dirname,
1349 const struct string_list *extras,
1350 const struct string_list *skip)
1351 {
1352 int pos;
1353
1354 if (!extras)
1355 return NULL;
1356
1357 /*
1358 * Look at the place where dirname would be inserted into
1359 * extras. If there is an entry at that position that starts
1360 * with dirname (remember, dirname includes the trailing
1361 * slash) and is not in skip, then we have a conflict.
1362 */
1363 for (pos = string_list_find_insert_index(extras, dirname, 0);
1364 pos < extras->nr; pos++) {
1365 const char *extra_refname = extras->items[pos].string;
1366
1367 if (!starts_with(extra_refname, dirname))
1368 break;
1369
1370 if (!skip || !string_list_has_string(skip, extra_refname))
1371 return extra_refname;
1372 }
1373 return NULL;
1374 }
1375
1376 int refs_rename_ref_available(struct ref_store *refs,
1377 const char *old_refname,
1378 const char *new_refname)
1379 {
1380 struct string_list skip = STRING_LIST_INIT_NODUP;
1381 struct strbuf err = STRBUF_INIT;
1382 int ok;
1383
1384 string_list_insert(&skip, old_refname);
1385 ok = !refs_verify_refname_available(refs, new_refname,
1386 NULL, &skip, &err);
1387 if (!ok)
1388 error("%s", err.buf);
1389
1390 string_list_clear(&skip, 0);
1391 strbuf_release(&err);
1392 return ok;
1393 }
1394
1395 int refs_head_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1396 {
1397 struct object_id oid;
1398 int flag;
1399
1400 if (!refs_read_ref_full(refs, "HEAD", RESOLVE_REF_READING,
1401 &oid, &flag))
1402 return fn("HEAD", &oid, flag, cb_data);
1403
1404 return 0;
1405 }
1406
1407 int head_ref(each_ref_fn fn, void *cb_data)
1408 {
1409 return refs_head_ref(get_main_ref_store(the_repository), fn, cb_data);
1410 }
1411
1412 struct ref_iterator *refs_ref_iterator_begin(
1413 struct ref_store *refs,
1414 const char *prefix, int trim,
1415 enum do_for_each_ref_flags flags)
1416 {
1417 struct ref_iterator *iter;
1418
1419 if (!(flags & DO_FOR_EACH_INCLUDE_BROKEN)) {
1420 static int ref_paranoia = -1;
1421
1422 if (ref_paranoia < 0)
1423 ref_paranoia = git_env_bool("GIT_REF_PARANOIA", 1);
1424 if (ref_paranoia) {
1425 flags |= DO_FOR_EACH_INCLUDE_BROKEN;
1426 flags |= DO_FOR_EACH_OMIT_DANGLING_SYMREFS;
1427 }
1428 }
1429
1430 iter = refs->be->iterator_begin(refs, prefix, flags);
1431
1432 /*
1433 * `iterator_begin()` already takes care of prefix, but we
1434 * might need to do some trimming:
1435 */
1436 if (trim)
1437 iter = prefix_ref_iterator_begin(iter, "", trim);
1438
1439 /* Sanity check for subclasses: */
1440 if (!iter->ordered)
1441 BUG("reference iterator is not ordered");
1442
1443 return iter;
1444 }
1445
1446 /*
1447 * Call fn for each reference in the specified submodule for which the
1448 * refname begins with prefix. If trim is non-zero, then trim that
1449 * many characters off the beginning of each refname before passing
1450 * the refname to fn. flags can be DO_FOR_EACH_INCLUDE_BROKEN to
1451 * include broken references in the iteration. If fn ever returns a
1452 * non-zero value, stop the iteration and return that value;
1453 * otherwise, return 0.
1454 */
1455 static int do_for_each_repo_ref(struct repository *r, const char *prefix,
1456 each_repo_ref_fn fn, int trim, int flags,
1457 void *cb_data)
1458 {
1459 struct ref_iterator *iter;
1460 struct ref_store *refs = get_main_ref_store(r);
1461
1462 if (!refs)
1463 return 0;
1464
1465 iter = refs_ref_iterator_begin(refs, prefix, trim, flags);
1466
1467 return do_for_each_repo_ref_iterator(r, iter, fn, cb_data);
1468 }
1469
1470 struct do_for_each_ref_help {
1471 each_ref_fn *fn;
1472 void *cb_data;
1473 };
1474
1475 static int do_for_each_ref_helper(struct repository *r,
1476 const char *refname,
1477 const struct object_id *oid,
1478 int flags,
1479 void *cb_data)
1480 {
1481 struct do_for_each_ref_help *hp = cb_data;
1482
1483 return hp->fn(refname, oid, flags, hp->cb_data);
1484 }
1485
1486 static int do_for_each_ref(struct ref_store *refs, const char *prefix,
1487 each_ref_fn fn, int trim,
1488 enum do_for_each_ref_flags flags, void *cb_data)
1489 {
1490 struct ref_iterator *iter;
1491 struct do_for_each_ref_help hp = { fn, cb_data };
1492
1493 if (!refs)
1494 return 0;
1495
1496 iter = refs_ref_iterator_begin(refs, prefix, trim, flags);
1497
1498 return do_for_each_repo_ref_iterator(the_repository, iter,
1499 do_for_each_ref_helper, &hp);
1500 }
1501
1502 int refs_for_each_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1503 {
1504 return do_for_each_ref(refs, "", fn, 0, 0, cb_data);
1505 }
1506
1507 int for_each_ref(each_ref_fn fn, void *cb_data)
1508 {
1509 return refs_for_each_ref(get_main_ref_store(the_repository), fn, cb_data);
1510 }
1511
1512 int refs_for_each_ref_in(struct ref_store *refs, const char *prefix,
1513 each_ref_fn fn, void *cb_data)
1514 {
1515 return do_for_each_ref(refs, prefix, fn, strlen(prefix), 0, cb_data);
1516 }
1517
1518 int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data)
1519 {
1520 return refs_for_each_ref_in(get_main_ref_store(the_repository), prefix, fn, cb_data);
1521 }
1522
1523 int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data)
1524 {
1525 return do_for_each_ref(get_main_ref_store(the_repository),
1526 prefix, fn, 0, 0, cb_data);
1527 }
1528
1529 int refs_for_each_fullref_in(struct ref_store *refs, const char *prefix,
1530 each_ref_fn fn, void *cb_data)
1531 {
1532 return do_for_each_ref(refs, prefix, fn, 0, 0, cb_data);
1533 }
1534
1535 int for_each_replace_ref(struct repository *r, each_repo_ref_fn fn, void *cb_data)
1536 {
1537 return do_for_each_repo_ref(r, git_replace_ref_base, fn,
1538 strlen(git_replace_ref_base),
1539 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1540 }
1541
1542 int for_each_namespaced_ref(each_ref_fn fn, void *cb_data)
1543 {
1544 struct strbuf buf = STRBUF_INIT;
1545 int ret;
1546 strbuf_addf(&buf, "%srefs/", get_git_namespace());
1547 ret = do_for_each_ref(get_main_ref_store(the_repository),
1548 buf.buf, fn, 0, 0, cb_data);
1549 strbuf_release(&buf);
1550 return ret;
1551 }
1552
1553 int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1554 {
1555 return do_for_each_ref(refs, "", fn, 0,
1556 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1557 }
1558
1559 int for_each_rawref(each_ref_fn fn, void *cb_data)
1560 {
1561 return refs_for_each_rawref(get_main_ref_store(the_repository), fn, cb_data);
1562 }
1563
1564 static int qsort_strcmp(const void *va, const void *vb)
1565 {
1566 const char *a = *(const char **)va;
1567 const char *b = *(const char **)vb;
1568
1569 return strcmp(a, b);
1570 }
1571
1572 static void find_longest_prefixes_1(struct string_list *out,
1573 struct strbuf *prefix,
1574 const char **patterns, size_t nr)
1575 {
1576 size_t i;
1577
1578 for (i = 0; i < nr; i++) {
1579 char c = patterns[i][prefix->len];
1580 if (!c || is_glob_special(c)) {
1581 string_list_append(out, prefix->buf);
1582 return;
1583 }
1584 }
1585
1586 i = 0;
1587 while (i < nr) {
1588 size_t end;
1589
1590 /*
1591 * Set "end" to the index of the element _after_ the last one
1592 * in our group.
1593 */
1594 for (end = i + 1; end < nr; end++) {
1595 if (patterns[i][prefix->len] != patterns[end][prefix->len])
1596 break;
1597 }
1598
1599 strbuf_addch(prefix, patterns[i][prefix->len]);
1600 find_longest_prefixes_1(out, prefix, patterns + i, end - i);
1601 strbuf_setlen(prefix, prefix->len - 1);
1602
1603 i = end;
1604 }
1605 }
1606
1607 static void find_longest_prefixes(struct string_list *out,
1608 const char **patterns)
1609 {
1610 struct strvec sorted = STRVEC_INIT;
1611 struct strbuf prefix = STRBUF_INIT;
1612
1613 strvec_pushv(&sorted, patterns);
1614 QSORT(sorted.v, sorted.nr, qsort_strcmp);
1615
1616 find_longest_prefixes_1(out, &prefix, sorted.v, sorted.nr);
1617
1618 strvec_clear(&sorted);
1619 strbuf_release(&prefix);
1620 }
1621
1622 int for_each_fullref_in_prefixes(const char *namespace,
1623 const char **patterns,
1624 each_ref_fn fn, void *cb_data)
1625 {
1626 struct string_list prefixes = STRING_LIST_INIT_DUP;
1627 struct string_list_item *prefix;
1628 struct strbuf buf = STRBUF_INIT;
1629 int ret = 0, namespace_len;
1630
1631 find_longest_prefixes(&prefixes, patterns);
1632
1633 if (namespace)
1634 strbuf_addstr(&buf, namespace);
1635 namespace_len = buf.len;
1636
1637 for_each_string_list_item(prefix, &prefixes) {
1638 strbuf_addstr(&buf, prefix->string);
1639 ret = for_each_fullref_in(buf.buf, fn, cb_data);
1640 if (ret)
1641 break;
1642 strbuf_setlen(&buf, namespace_len);
1643 }
1644
1645 string_list_clear(&prefixes, 0);
1646 strbuf_release(&buf);
1647 return ret;
1648 }
1649
1650 static int refs_read_special_head(struct ref_store *ref_store,
1651 const char *refname, struct object_id *oid,
1652 struct strbuf *referent, unsigned int *type)
1653 {
1654 struct strbuf full_path = STRBUF_INIT;
1655 struct strbuf content = STRBUF_INIT;
1656 int result = -1;
1657 strbuf_addf(&full_path, "%s/%s", ref_store->gitdir, refname);
1658
1659 if (strbuf_read_file(&content, full_path.buf, 0) < 0)
1660 goto done;
1661
1662 result = parse_loose_ref_contents(content.buf, oid, referent, type);
1663
1664 done:
1665 strbuf_release(&full_path);
1666 strbuf_release(&content);
1667 return result;
1668 }
1669
1670 int refs_read_raw_ref(struct ref_store *ref_store,
1671 const char *refname, struct object_id *oid,
1672 struct strbuf *referent, unsigned int *type)
1673 {
1674 if (!strcmp(refname, "FETCH_HEAD") || !strcmp(refname, "MERGE_HEAD")) {
1675 return refs_read_special_head(ref_store, refname, oid, referent,
1676 type);
1677 }
1678
1679 return ref_store->be->read_raw_ref(ref_store, refname, oid, referent,
1680 type, &errno);
1681 }
1682
1683 /* This function needs to return a meaningful errno on failure */
1684 const char *refs_resolve_ref_unsafe(struct ref_store *refs,
1685 const char *refname,
1686 int resolve_flags,
1687 struct object_id *oid, int *flags)
1688 {
1689 static struct strbuf sb_refname = STRBUF_INIT;
1690 struct object_id unused_oid;
1691 int unused_flags;
1692 int symref_count;
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 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,
1723 oid, &sb_refname, &read_flags)) {
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 (errno != ENOENT &&
1736 errno != EISDIR &&
1737 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 errno = EINVAL;
1765 return NULL;
1766 }
1767
1768 *flags |= REF_ISBROKEN | REF_BAD_NAME;
1769 }
1770 }
1771
1772 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 return refs_resolve_ref_unsafe(get_main_ref_store(the_repository), refname,
1788 resolve_flags, oid, flags);
1789 }
1790
1791 int resolve_gitlink_ref(const char *submodule, const char *refname,
1792 struct object_id *oid)
1793 {
1794 struct ref_store *refs;
1795 int flags;
1796
1797 refs = get_submodule_ref_store(submodule);
1798
1799 if (!refs)
1800 return -1;
1801
1802 if (!refs_resolve_ref_unsafe(refs, refname, 0, oid, &flags) ||
1803 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(struct repository *repo,
1875 const char *gitdir,
1876 unsigned int flags)
1877 {
1878 const char *be_name = "files";
1879 struct ref_storage_be *be = find_ref_storage_backend(be_name);
1880 struct ref_store *refs;
1881
1882 if (!be)
1883 BUG("reference backend %s is unknown", be_name);
1884
1885 refs = be->init(repo, gitdir, flags);
1886 return refs;
1887 }
1888
1889 struct ref_store *get_main_ref_store(struct repository *r)
1890 {
1891 if (r->refs_private)
1892 return r->refs_private;
1893
1894 if (!r->gitdir)
1895 BUG("attempting to get main_ref_store outside of repository");
1896
1897 r->refs_private = ref_store_init(r, r->gitdir, REF_STORE_ALL_CAPS);
1898 r->refs_private = maybe_debug_wrap_ref_store(r->gitdir, r->refs_private);
1899 return r->refs_private;
1900 }
1901
1902 /*
1903 * Associate a ref store with a name. It is a fatal error to call this
1904 * function twice for the same name.
1905 */
1906 static void register_ref_store_map(struct hashmap *map,
1907 const char *type,
1908 struct ref_store *refs,
1909 const char *name)
1910 {
1911 struct ref_store_hash_entry *entry;
1912
1913 if (!map->tablesize)
1914 hashmap_init(map, ref_store_hash_cmp, NULL, 0);
1915
1916 entry = alloc_ref_store_hash_entry(name, refs);
1917 if (hashmap_put(map, &entry->ent))
1918 BUG("%s ref_store '%s' initialized twice", type, name);
1919 }
1920
1921 struct ref_store *get_submodule_ref_store(const char *submodule)
1922 {
1923 struct strbuf submodule_sb = STRBUF_INIT;
1924 struct ref_store *refs;
1925 char *to_free = NULL;
1926 size_t len;
1927 struct repository *subrepo;
1928
1929 if (!submodule)
1930 return NULL;
1931
1932 len = strlen(submodule);
1933 while (len && is_dir_sep(submodule[len - 1]))
1934 len--;
1935 if (!len)
1936 return NULL;
1937
1938 if (submodule[len])
1939 /* We need to strip off one or more trailing slashes */
1940 submodule = to_free = xmemdupz(submodule, len);
1941
1942 refs = lookup_ref_store_map(&submodule_ref_stores, submodule);
1943 if (refs)
1944 goto done;
1945
1946 strbuf_addstr(&submodule_sb, submodule);
1947 if (!is_nonbare_repository_dir(&submodule_sb))
1948 goto done;
1949
1950 if (submodule_to_gitdir(&submodule_sb, submodule))
1951 goto done;
1952
1953 subrepo = xmalloc(sizeof(*subrepo));
1954 /*
1955 * NEEDSWORK: Make get_submodule_ref_store() work with arbitrary
1956 * superprojects other than the_repository. This probably should be
1957 * done by making it take a struct repository * parameter instead of a
1958 * submodule path.
1959 */
1960 if (repo_submodule_init(subrepo, the_repository, submodule,
1961 null_oid())) {
1962 free(subrepo);
1963 goto done;
1964 }
1965 refs = ref_store_init(subrepo, submodule_sb.buf,
1966 REF_STORE_READ | REF_STORE_ODB);
1967 register_ref_store_map(&submodule_ref_stores, "submodule",
1968 refs, submodule);
1969
1970 done:
1971 strbuf_release(&submodule_sb);
1972 free(to_free);
1973
1974 return refs;
1975 }
1976
1977 struct ref_store *get_worktree_ref_store(const struct worktree *wt)
1978 {
1979 struct ref_store *refs;
1980 const char *id;
1981
1982 if (wt->is_current)
1983 return get_main_ref_store(the_repository);
1984
1985 id = wt->id ? wt->id : "/";
1986 refs = lookup_ref_store_map(&worktree_ref_stores, id);
1987 if (refs)
1988 return refs;
1989
1990 if (wt->id)
1991 refs = ref_store_init(the_repository,
1992 git_common_path("worktrees/%s", wt->id),
1993 REF_STORE_ALL_CAPS);
1994 else
1995 refs = ref_store_init(the_repository,
1996 get_git_common_dir(),
1997 REF_STORE_ALL_CAPS);
1998
1999 if (refs)
2000 register_ref_store_map(&worktree_ref_stores, "worktree",
2001 refs, id);
2002 return refs;
2003 }
2004
2005 void base_ref_store_init(struct ref_store *refs,
2006 const struct ref_storage_be *be)
2007 {
2008 refs->be = be;
2009 }
2010
2011 /* backend functions */
2012 int refs_pack_refs(struct ref_store *refs, unsigned int flags)
2013 {
2014 return refs->be->pack_refs(refs, flags);
2015 }
2016
2017 int peel_iterated_oid(const struct object_id *base, struct object_id *peeled)
2018 {
2019 if (current_ref_iter &&
2020 (current_ref_iter->oid == base ||
2021 oideq(current_ref_iter->oid, base)))
2022 return ref_iterator_peel(current_ref_iter, peeled);
2023
2024 return peel_object(base, peeled) ? -1 : 0;
2025 }
2026
2027 int refs_create_symref(struct ref_store *refs,
2028 const char *ref_target,
2029 const char *refs_heads_master,
2030 const char *logmsg)
2031 {
2032 char *msg;
2033 int retval;
2034
2035 msg = normalize_reflog_message(logmsg);
2036 retval = refs->be->create_symref(refs, ref_target, refs_heads_master,
2037 msg);
2038 free(msg);
2039 return retval;
2040 }
2041
2042 int create_symref(const char *ref_target, const char *refs_heads_master,
2043 const char *logmsg)
2044 {
2045 return refs_create_symref(get_main_ref_store(the_repository), ref_target,
2046 refs_heads_master, logmsg);
2047 }
2048
2049 int ref_update_reject_duplicates(struct string_list *refnames,
2050 struct strbuf *err)
2051 {
2052 size_t i, n = refnames->nr;
2053
2054 assert(err);
2055
2056 for (i = 1; i < n; i++) {
2057 int cmp = strcmp(refnames->items[i - 1].string,
2058 refnames->items[i].string);
2059
2060 if (!cmp) {
2061 strbuf_addf(err,
2062 _("multiple updates for ref '%s' not allowed"),
2063 refnames->items[i].string);
2064 return 1;
2065 } else if (cmp > 0) {
2066 BUG("ref_update_reject_duplicates() received unsorted list");
2067 }
2068 }
2069 return 0;
2070 }
2071
2072 static int run_transaction_hook(struct ref_transaction *transaction,
2073 const char *state)
2074 {
2075 struct child_process proc = CHILD_PROCESS_INIT;
2076 struct strbuf buf = STRBUF_INIT;
2077 const char *hook;
2078 int ret = 0, i;
2079
2080 hook = find_hook("reference-transaction");
2081 if (!hook)
2082 return ret;
2083
2084 strvec_pushl(&proc.args, hook, state, NULL);
2085 proc.in = -1;
2086 proc.stdout_to_stderr = 1;
2087 proc.trace2_hook_name = "reference-transaction";
2088
2089 ret = start_command(&proc);
2090 if (ret)
2091 return ret;
2092
2093 sigchain_push(SIGPIPE, SIG_IGN);
2094
2095 for (i = 0; i < transaction->nr; i++) {
2096 struct ref_update *update = transaction->updates[i];
2097
2098 strbuf_reset(&buf);
2099 strbuf_addf(&buf, "%s %s %s\n",
2100 oid_to_hex(&update->old_oid),
2101 oid_to_hex(&update->new_oid),
2102 update->refname);
2103
2104 if (write_in_full(proc.in, buf.buf, buf.len) < 0) {
2105 if (errno != EPIPE)
2106 ret = -1;
2107 break;
2108 }
2109 }
2110
2111 close(proc.in);
2112 sigchain_pop(SIGPIPE);
2113 strbuf_release(&buf);
2114
2115 ret |= finish_command(&proc);
2116 return ret;
2117 }
2118
2119 int ref_transaction_prepare(struct ref_transaction *transaction,
2120 struct strbuf *err)
2121 {
2122 struct ref_store *refs = transaction->ref_store;
2123 int ret;
2124
2125 switch (transaction->state) {
2126 case REF_TRANSACTION_OPEN:
2127 /* Good. */
2128 break;
2129 case REF_TRANSACTION_PREPARED:
2130 BUG("prepare called twice on reference transaction");
2131 break;
2132 case REF_TRANSACTION_CLOSED:
2133 BUG("prepare called on a closed reference transaction");
2134 break;
2135 default:
2136 BUG("unexpected reference transaction state");
2137 break;
2138 }
2139
2140 if (getenv(GIT_QUARANTINE_ENVIRONMENT)) {
2141 strbuf_addstr(err,
2142 _("ref updates forbidden inside quarantine environment"));
2143 return -1;
2144 }
2145
2146 ret = refs->be->transaction_prepare(refs, transaction, err);
2147 if (ret)
2148 return ret;
2149
2150 ret = run_transaction_hook(transaction, "prepared");
2151 if (ret) {
2152 ref_transaction_abort(transaction, err);
2153 die(_("ref updates aborted by hook"));
2154 }
2155
2156 return 0;
2157 }
2158
2159 int ref_transaction_abort(struct ref_transaction *transaction,
2160 struct strbuf *err)
2161 {
2162 struct ref_store *refs = transaction->ref_store;
2163 int ret = 0;
2164
2165 switch (transaction->state) {
2166 case REF_TRANSACTION_OPEN:
2167 /* No need to abort explicitly. */
2168 break;
2169 case REF_TRANSACTION_PREPARED:
2170 ret = refs->be->transaction_abort(refs, transaction, err);
2171 break;
2172 case REF_TRANSACTION_CLOSED:
2173 BUG("abort called on a closed reference transaction");
2174 break;
2175 default:
2176 BUG("unexpected reference transaction state");
2177 break;
2178 }
2179
2180 run_transaction_hook(transaction, "aborted");
2181
2182 ref_transaction_free(transaction);
2183 return ret;
2184 }
2185
2186 int ref_transaction_commit(struct ref_transaction *transaction,
2187 struct strbuf *err)
2188 {
2189 struct ref_store *refs = transaction->ref_store;
2190 int ret;
2191
2192 switch (transaction->state) {
2193 case REF_TRANSACTION_OPEN:
2194 /* Need to prepare first. */
2195 ret = ref_transaction_prepare(transaction, err);
2196 if (ret)
2197 return ret;
2198 break;
2199 case REF_TRANSACTION_PREPARED:
2200 /* Fall through to finish. */
2201 break;
2202 case REF_TRANSACTION_CLOSED:
2203 BUG("commit called on a closed reference transaction");
2204 break;
2205 default:
2206 BUG("unexpected reference transaction state");
2207 break;
2208 }
2209
2210 ret = refs->be->transaction_finish(refs, transaction, err);
2211 if (!ret)
2212 run_transaction_hook(transaction, "committed");
2213 return ret;
2214 }
2215
2216 int refs_verify_refname_available(struct ref_store *refs,
2217 const char *refname,
2218 const struct string_list *extras,
2219 const struct string_list *skip,
2220 struct strbuf *err)
2221 {
2222 const char *slash;
2223 const char *extra_refname;
2224 struct strbuf dirname = STRBUF_INIT;
2225 struct strbuf referent = STRBUF_INIT;
2226 struct object_id oid;
2227 unsigned int type;
2228 struct ref_iterator *iter;
2229 int ok;
2230 int ret = -1;
2231
2232 /*
2233 * For the sake of comments in this function, suppose that
2234 * refname is "refs/foo/bar".
2235 */
2236
2237 assert(err);
2238
2239 strbuf_grow(&dirname, strlen(refname) + 1);
2240 for (slash = strchr(refname, '/'); slash; slash = strchr(slash + 1, '/')) {
2241 /* Expand dirname to the new prefix, not including the trailing slash: */
2242 strbuf_add(&dirname, refname + dirname.len, slash - refname - dirname.len);
2243
2244 /*
2245 * We are still at a leading dir of the refname (e.g.,
2246 * "refs/foo"; if there is a reference with that name,
2247 * it is a conflict, *unless* it is in skip.
2248 */
2249 if (skip && string_list_has_string(skip, dirname.buf))
2250 continue;
2251
2252 if (!refs_read_raw_ref(refs, dirname.buf, &oid, &referent, &type)) {
2253 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2254 dirname.buf, refname);
2255 goto cleanup;
2256 }
2257
2258 if (extras && string_list_has_string(extras, dirname.buf)) {
2259 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2260 refname, dirname.buf);
2261 goto cleanup;
2262 }
2263 }
2264
2265 /*
2266 * We are at the leaf of our refname (e.g., "refs/foo/bar").
2267 * There is no point in searching for a reference with that
2268 * name, because a refname isn't considered to conflict with
2269 * itself. But we still need to check for references whose
2270 * names are in the "refs/foo/bar/" namespace, because they
2271 * *do* conflict.
2272 */
2273 strbuf_addstr(&dirname, refname + dirname.len);
2274 strbuf_addch(&dirname, '/');
2275
2276 iter = refs_ref_iterator_begin(refs, dirname.buf, 0,
2277 DO_FOR_EACH_INCLUDE_BROKEN);
2278 while ((ok = ref_iterator_advance(iter)) == ITER_OK) {
2279 if (skip &&
2280 string_list_has_string(skip, iter->refname))
2281 continue;
2282
2283 strbuf_addf(err, _("'%s' exists; cannot create '%s'"),
2284 iter->refname, refname);
2285 ref_iterator_abort(iter);
2286 goto cleanup;
2287 }
2288
2289 if (ok != ITER_DONE)
2290 BUG("error while iterating over references");
2291
2292 extra_refname = find_descendant_ref(dirname.buf, extras, skip);
2293 if (extra_refname)
2294 strbuf_addf(err, _("cannot process '%s' and '%s' at the same time"),
2295 refname, extra_refname);
2296 else
2297 ret = 0;
2298
2299 cleanup:
2300 strbuf_release(&referent);
2301 strbuf_release(&dirname);
2302 return ret;
2303 }
2304
2305 int refs_for_each_reflog(struct ref_store *refs, each_ref_fn fn, void *cb_data)
2306 {
2307 struct ref_iterator *iter;
2308 struct do_for_each_ref_help hp = { fn, cb_data };
2309
2310 iter = refs->be->reflog_iterator_begin(refs);
2311
2312 return do_for_each_repo_ref_iterator(the_repository, iter,
2313 do_for_each_ref_helper, &hp);
2314 }
2315
2316 int for_each_reflog(each_ref_fn fn, void *cb_data)
2317 {
2318 return refs_for_each_reflog(get_main_ref_store(the_repository), fn, cb_data);
2319 }
2320
2321 int refs_for_each_reflog_ent_reverse(struct ref_store *refs,
2322 const char *refname,
2323 each_reflog_ent_fn fn,
2324 void *cb_data)
2325 {
2326 return refs->be->for_each_reflog_ent_reverse(refs, refname,
2327 fn, cb_data);
2328 }
2329
2330 int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn,
2331 void *cb_data)
2332 {
2333 return refs_for_each_reflog_ent_reverse(get_main_ref_store(the_repository),
2334 refname, fn, cb_data);
2335 }
2336
2337 int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname,
2338 each_reflog_ent_fn fn, void *cb_data)
2339 {
2340 return refs->be->for_each_reflog_ent(refs, refname, fn, cb_data);
2341 }
2342
2343 int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn,
2344 void *cb_data)
2345 {
2346 return refs_for_each_reflog_ent(get_main_ref_store(the_repository), refname,
2347 fn, cb_data);
2348 }
2349
2350 int refs_reflog_exists(struct ref_store *refs, const char *refname)
2351 {
2352 return refs->be->reflog_exists(refs, refname);
2353 }
2354
2355 int reflog_exists(const char *refname)
2356 {
2357 return refs_reflog_exists(get_main_ref_store(the_repository), refname);
2358 }
2359
2360 int refs_create_reflog(struct ref_store *refs, const char *refname,
2361 int force_create, struct strbuf *err)
2362 {
2363 return refs->be->create_reflog(refs, refname, force_create, err);
2364 }
2365
2366 int safe_create_reflog(const char *refname, int force_create,
2367 struct strbuf *err)
2368 {
2369 return refs_create_reflog(get_main_ref_store(the_repository), refname,
2370 force_create, err);
2371 }
2372
2373 int refs_delete_reflog(struct ref_store *refs, const char *refname)
2374 {
2375 return refs->be->delete_reflog(refs, refname);
2376 }
2377
2378 int delete_reflog(const char *refname)
2379 {
2380 return refs_delete_reflog(get_main_ref_store(the_repository), refname);
2381 }
2382
2383 int refs_reflog_expire(struct ref_store *refs,
2384 const char *refname,
2385 unsigned int flags,
2386 reflog_expiry_prepare_fn prepare_fn,
2387 reflog_expiry_should_prune_fn should_prune_fn,
2388 reflog_expiry_cleanup_fn cleanup_fn,
2389 void *policy_cb_data)
2390 {
2391 return refs->be->reflog_expire(refs, refname, flags,
2392 prepare_fn, should_prune_fn,
2393 cleanup_fn, policy_cb_data);
2394 }
2395
2396 int reflog_expire(const char *refname,
2397 unsigned int flags,
2398 reflog_expiry_prepare_fn prepare_fn,
2399 reflog_expiry_should_prune_fn should_prune_fn,
2400 reflog_expiry_cleanup_fn cleanup_fn,
2401 void *policy_cb_data)
2402 {
2403 return refs_reflog_expire(get_main_ref_store(the_repository),
2404 refname, flags,
2405 prepare_fn, should_prune_fn,
2406 cleanup_fn, policy_cb_data);
2407 }
2408
2409 int initial_ref_transaction_commit(struct ref_transaction *transaction,
2410 struct strbuf *err)
2411 {
2412 struct ref_store *refs = transaction->ref_store;
2413
2414 return refs->be->initial_transaction_commit(refs, transaction, err);
2415 }
2416
2417 int refs_delete_refs(struct ref_store *refs, const char *logmsg,
2418 struct string_list *refnames, unsigned int flags)
2419 {
2420 char *msg;
2421 int retval;
2422
2423 msg = normalize_reflog_message(logmsg);
2424 retval = refs->be->delete_refs(refs, msg, refnames, flags);
2425 free(msg);
2426 return retval;
2427 }
2428
2429 int delete_refs(const char *msg, struct string_list *refnames,
2430 unsigned int flags)
2431 {
2432 return refs_delete_refs(get_main_ref_store(the_repository), msg, refnames, flags);
2433 }
2434
2435 int refs_rename_ref(struct ref_store *refs, const char *oldref,
2436 const char *newref, const char *logmsg)
2437 {
2438 char *msg;
2439 int retval;
2440
2441 msg = normalize_reflog_message(logmsg);
2442 retval = refs->be->rename_ref(refs, oldref, newref, msg);
2443 free(msg);
2444 return retval;
2445 }
2446
2447 int rename_ref(const char *oldref, const char *newref, const char *logmsg)
2448 {
2449 return refs_rename_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);
2450 }
2451
2452 int refs_copy_existing_ref(struct ref_store *refs, const char *oldref,
2453 const char *newref, const char *logmsg)
2454 {
2455 char *msg;
2456 int retval;
2457
2458 msg = normalize_reflog_message(logmsg);
2459 retval = refs->be->copy_ref(refs, oldref, newref, msg);
2460 free(msg);
2461 return retval;
2462 }
2463
2464 int copy_existing_ref(const char *oldref, const char *newref, const char *logmsg)
2465 {
2466 return refs_copy_existing_ref(get_main_ref_store(the_repository), oldref, newref, logmsg);
2467 }