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