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