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