]> git.ipfire.org Git - thirdparty/git.git/blame - refs.c
PRItime: introduce a new "printf format" for timestamps
[thirdparty/git.git] / refs.c
CommitLineData
7bd9bcf3
MH
1/*
2 * The backend-independent part of the reference module.
3 */
4
95fc7512 5#include "cache.h"
7d4558c4 6#include "hashmap.h"
697cc8ef 7#include "lockfile.h"
85023577 8#include "refs.h"
4cb77009 9#include "refs/refs-internal.h"
cf0adba7
JH
10#include "object.h"
11#include "tag.h"
5d0bc90e 12#include "submodule.h"
3581d793 13
3dce444f
RS
14/*
15 * List of all available backends
16 */
17static struct ref_storage_be *refs_backends = &refs_be_files;
18
19static struct ref_storage_be *find_ref_storage_backend(const char *name)
20{
21 struct ref_storage_be *be;
22 for (be = refs_backends; be; be = be->next)
23 if (!strcmp(be->name, name))
24 return be;
25 return NULL;
26}
27
28int ref_storage_backend_exists(const char *name)
29{
30 return find_ref_storage_backend(name) != NULL;
31}
32
bc5fd6d3 33/*
dde8a902
DT
34 * How to handle various characters in refnames:
35 * 0: An acceptable character for refs
5e650228
JH
36 * 1: End-of-component
37 * 2: ., look for a preceding . to reject .. in refs
38 * 3: {, look for a preceding @ to reject @{ in refs
53a8555e 39 * 4: A bad character: ASCII control characters, and
cd377f45
JK
40 * ":", "?", "[", "\", "^", "~", SP, or TAB
41 * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
dde8a902
DT
42 */
43static unsigned char refname_disposition[256] = {
5e650228
JH
44 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
45 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
cd377f45 46 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,
5e650228 47 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
dde8a902 48 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
5e650228
JH
49 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,
50 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4
dde8a902
DT
52};
53
54/*
55 * Try to read one refname component from the front of refname.
56 * Return the length of the component found, or -1 if the component is
57 * not legal. It is legal if it is something reasonable to have under
58 * ".git/refs/"; We do not like it if:
bc5fd6d3
MH
59 *
60 * - any path component of it begins with ".", or
61 * - it has double dots "..", or
53a8555e 62 * - it has ASCII control characters, or
cd377f45
JK
63 * - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or
64 * - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or
53a8555e
JK
65 * - it ends with a "/", or
66 * - it ends with ".lock", or
67 * - it contains a "@{" portion
bc5fd6d3 68 */
cd377f45 69static int check_refname_component(const char *refname, int *flags)
bc5fd6d3
MH
70{
71 const char *cp;
72 char last = '\0';
73
74 for (cp = refname; ; cp++) {
dde8a902
DT
75 int ch = *cp & 255;
76 unsigned char disp = refname_disposition[ch];
77 switch (disp) {
5e650228 78 case 1:
dde8a902 79 goto out;
5e650228 80 case 2:
dde8a902
DT
81 if (last == '.')
82 return -1; /* Refname contains "..". */
83 break;
5e650228 84 case 3:
dde8a902
DT
85 if (last == '@')
86 return -1; /* Refname contains "@{". */
bc5fd6d3 87 break;
5e650228 88 case 4:
dde8a902 89 return -1;
cd377f45
JK
90 case 5:
91 if (!(*flags & REFNAME_REFSPEC_PATTERN))
92 return -1; /* refspec can't be a pattern */
93
94 /*
95 * Unset the pattern flag so that we only accept
96 * a single asterisk for one side of refspec.
97 */
98 *flags &= ~ REFNAME_REFSPEC_PATTERN;
99 break;
dde8a902 100 }
bc5fd6d3
MH
101 last = ch;
102 }
dde8a902 103out:
bc5fd6d3 104 if (cp == refname)
dac529e4 105 return 0; /* Component has zero length. */
f3cc52d8
JN
106 if (refname[0] == '.')
107 return -1; /* Component starts with '.'. */
7108ad23
MH
108 if (cp - refname >= LOCK_SUFFIX_LEN &&
109 !memcmp(cp - LOCK_SUFFIX_LEN, LOCK_SUFFIX, LOCK_SUFFIX_LEN))
bc5fd6d3
MH
110 return -1; /* Refname ends with ".lock". */
111 return cp - refname;
112}
113
5e650228 114int check_refname_format(const char *refname, int flags)
bc5fd6d3
MH
115{
116 int component_len, component_count = 0;
117
9ba89f48
FC
118 if (!strcmp(refname, "@"))
119 /* Refname is a single character '@'. */
120 return -1;
121
bc5fd6d3
MH
122 while (1) {
123 /* We are at the start of a path component. */
cd377f45
JK
124 component_len = check_refname_component(refname, &flags);
125 if (component_len <= 0)
126 return -1;
127
bc5fd6d3
MH
128 component_count++;
129 if (refname[component_len] == '\0')
130 break;
131 /* Skip to next component. */
132 refname += component_len + 1;
133 }
134
135 if (refname[component_len - 1] == '.')
136 return -1; /* Refname ends with '.'. */
137 if (!(flags & REFNAME_ALLOW_ONELEVEL) && component_count < 2)
138 return -1; /* Refname has only one component. */
139 return 0;
140}
141
4cb77009 142int refname_is_safe(const char *refname)
d0f810f0 143{
39950fef
MH
144 const char *rest;
145
146 if (skip_prefix(refname, "refs/", &rest)) {
d0f810f0
RS
147 char *buf;
148 int result;
e40f3557
MH
149 size_t restlen = strlen(rest);
150
151 /* rest must not be empty, or start or end with "/" */
152 if (!restlen || *rest == '/' || rest[restlen - 1] == '/')
153 return 0;
d0f810f0 154
d0f810f0
RS
155 /*
156 * Does the refname try to escape refs/?
157 * For example: refs/foo/../bar is safe but refs/foo/../../bar
158 * is not.
159 */
e40f3557
MH
160 buf = xmallocz(restlen);
161 result = !normalize_path_copy(buf, rest) && !strcmp(buf, rest);
d0f810f0
RS
162 free(buf);
163 return result;
164 }
35db25c6
MH
165
166 do {
d0f810f0
RS
167 if (!isupper(*refname) && *refname != '_')
168 return 0;
169 refname++;
35db25c6 170 } while (*refname);
d0f810f0
RS
171 return 1;
172}
173
7d2df051
NTND
174char *refs_resolve_refdup(struct ref_store *refs,
175 const char *refname, int resolve_flags,
176 unsigned char *sha1, int *flags)
177{
178 const char *result;
179
180 result = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
181 sha1, flags);
182 return xstrdup_or_null(result);
183}
184
7bd9bcf3
MH
185char *resolve_refdup(const char *refname, int resolve_flags,
186 unsigned char *sha1, int *flags)
e1e22e37 187{
7d2df051
NTND
188 return refs_resolve_refdup(get_main_ref_store(),
189 refname, resolve_flags,
190 sha1, flags);
cddc4258
MH
191}
192
7bd9bcf3
MH
193/* The argument to filter_refs */
194struct ref_filter {
195 const char *pattern;
196 each_ref_fn *fn;
197 void *cb_data;
198};
432ad41e 199
7d2df051
NTND
200int refs_read_ref_full(struct ref_store *refs, const char *refname,
201 int resolve_flags, unsigned char *sha1, int *flags)
732134ed 202{
7d2df051 203 if (refs_resolve_ref_unsafe(refs, refname, resolve_flags, sha1, flags))
7bd9bcf3
MH
204 return 0;
205 return -1;
732134ed
MH
206}
207
7d2df051
NTND
208int read_ref_full(const char *refname, int resolve_flags, unsigned char *sha1, int *flags)
209{
210 return refs_read_ref_full(get_main_ref_store(), refname,
211 resolve_flags, sha1, flags);
212}
213
7bd9bcf3 214int read_ref(const char *refname, unsigned char *sha1)
cddc4258 215{
7bd9bcf3 216 return read_ref_full(refname, RESOLVE_REF_READING, sha1, NULL);
c774aab9
JP
217}
218
7bd9bcf3 219int ref_exists(const char *refname)
bc5fd6d3 220{
7bd9bcf3
MH
221 unsigned char sha1[20];
222 return !!resolve_ref_unsafe(refname, RESOLVE_REF_READING, sha1, NULL);
bc5fd6d3
MH
223}
224
7bd9bcf3
MH
225static int filter_refs(const char *refname, const struct object_id *oid,
226 int flags, void *data)
432ad41e 227{
7bd9bcf3
MH
228 struct ref_filter *filter = (struct ref_filter *)data;
229
230 if (wildmatch(filter->pattern, refname, 0, NULL))
231 return 0;
232 return filter->fn(refname, oid, flags, filter->cb_data);
432ad41e
MH
233}
234
7bd9bcf3 235enum peel_status peel_object(const unsigned char *name, unsigned char *sha1)
c774aab9 236{
7bd9bcf3 237 struct object *o = lookup_unknown_object(name);
c774aab9 238
7bd9bcf3
MH
239 if (o->type == OBJ_NONE) {
240 int type = sha1_object_info(name, NULL);
241 if (type < 0 || !object_as_type(o, type, 0))
242 return PEEL_INVALID;
243 }
bc5fd6d3 244
7bd9bcf3
MH
245 if (o->type != OBJ_TAG)
246 return PEEL_NON_TAG;
e1980c9d 247
7bd9bcf3
MH
248 o = deref_tag_noverify(o);
249 if (!o)
250 return PEEL_INVALID;
251
844a9ce4 252 hashcpy(sha1, o->oid.hash);
7bd9bcf3 253 return PEEL_PEELED;
e1980c9d
JH
254}
255
7bd9bcf3
MH
256struct warn_if_dangling_data {
257 FILE *fp;
258 const char *refname;
259 const struct string_list *refnames;
260 const char *msg_fmt;
261};
bc5fd6d3 262
7bd9bcf3
MH
263static int warn_if_dangling_symref(const char *refname, const struct object_id *oid,
264 int flags, void *cb_data)
265{
266 struct warn_if_dangling_data *d = cb_data;
267 const char *resolves_to;
268 struct object_id junk;
bc5fd6d3 269
7bd9bcf3
MH
270 if (!(flags & REF_ISSYMREF))
271 return 0;
bc5fd6d3 272
7bd9bcf3
MH
273 resolves_to = resolve_ref_unsafe(refname, 0, junk.hash, NULL);
274 if (!resolves_to
275 || (d->refname
276 ? strcmp(resolves_to, d->refname)
277 : !string_list_has_string(d->refnames, resolves_to))) {
278 return 0;
279 }
bc5fd6d3 280
7bd9bcf3
MH
281 fprintf(d->fp, d->msg_fmt, refname);
282 fputc('\n', d->fp);
283 return 0;
bc5fd6d3
MH
284}
285
7bd9bcf3 286void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname)
f348ac92 287{
7bd9bcf3
MH
288 struct warn_if_dangling_data data;
289
290 data.fp = fp;
291 data.refname = refname;
292 data.refnames = NULL;
293 data.msg_fmt = msg_fmt;
294 for_each_rawref(warn_if_dangling_symref, &data);
f348ac92
MH
295}
296
7bd9bcf3 297void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct string_list *refnames)
432ad41e 298{
7bd9bcf3 299 struct warn_if_dangling_data data;
432ad41e 300
7bd9bcf3
MH
301 data.fp = fp;
302 data.refname = NULL;
303 data.refnames = refnames;
304 data.msg_fmt = msg_fmt;
305 for_each_rawref(warn_if_dangling_symref, &data);
432ad41e
MH
306}
307
7d2df051
NTND
308int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
309{
310 return refs_for_each_ref_in(refs, "refs/tags/", fn, cb_data);
311}
312
7bd9bcf3 313int for_each_tag_ref(each_ref_fn fn, void *cb_data)
432ad41e 314{
7d2df051 315 return refs_for_each_tag_ref(get_main_ref_store(), fn, cb_data);
432ad41e
MH
316}
317
7bd9bcf3 318int for_each_tag_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
506a760d 319{
7d2df051
NTND
320 return refs_for_each_tag_ref(get_submodule_ref_store(submodule),
321 fn, cb_data);
322}
323
324int refs_for_each_branch_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
325{
326 return refs_for_each_ref_in(refs, "refs/heads/", fn, cb_data);
432ad41e
MH
327}
328
7bd9bcf3 329int for_each_branch_ref(each_ref_fn fn, void *cb_data)
432ad41e 330{
7d2df051 331 return refs_for_each_branch_ref(get_main_ref_store(), fn, cb_data);
432ad41e
MH
332}
333
7bd9bcf3 334int for_each_branch_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
202a56a9 335{
7d2df051
NTND
336 return refs_for_each_branch_ref(get_submodule_ref_store(submodule),
337 fn, cb_data);
338}
339
340int refs_for_each_remote_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
341{
342 return refs_for_each_ref_in(refs, "refs/remotes/", fn, cb_data);
202a56a9 343}
432ad41e 344
7bd9bcf3 345int for_each_remote_ref(each_ref_fn fn, void *cb_data)
e9c4c111 346{
7d2df051 347 return refs_for_each_remote_ref(get_main_ref_store(), fn, cb_data);
202a56a9
MH
348}
349
7bd9bcf3 350int for_each_remote_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
e9c4c111 351{
7d2df051
NTND
352 return refs_for_each_remote_ref(get_submodule_ref_store(submodule),
353 fn, cb_data);
662428f4 354}
c774aab9 355
7bd9bcf3
MH
356int head_ref_namespaced(each_ref_fn fn, void *cb_data)
357{
358 struct strbuf buf = STRBUF_INIT;
359 int ret = 0;
360 struct object_id oid;
361 int flag;
c774aab9 362
7bd9bcf3
MH
363 strbuf_addf(&buf, "%sHEAD", get_git_namespace());
364 if (!read_ref_full(buf.buf, RESOLVE_REF_READING, oid.hash, &flag))
365 ret = fn(buf.buf, &oid, flag, cb_data);
366 strbuf_release(&buf);
c774aab9 367
7bd9bcf3 368 return ret;
e9c4c111 369}
c774aab9 370
7bd9bcf3
MH
371int for_each_glob_ref_in(each_ref_fn fn, const char *pattern,
372 const char *prefix, void *cb_data)
662428f4 373{
7bd9bcf3
MH
374 struct strbuf real_pattern = STRBUF_INIT;
375 struct ref_filter filter;
376 int ret;
d08bae7e 377
59556548 378 if (!prefix && !starts_with(pattern, "refs/"))
d08bae7e 379 strbuf_addstr(&real_pattern, "refs/");
b09fe971
IL
380 else if (prefix)
381 strbuf_addstr(&real_pattern, prefix);
d08bae7e
IL
382 strbuf_addstr(&real_pattern, pattern);
383
894a9d33 384 if (!has_glob_specials(pattern)) {
9517e6b8 385 /* Append implied '/' '*' if not present. */
00b6c178 386 strbuf_complete(&real_pattern, '/');
d08bae7e
IL
387 /* No need to check for '*', there is none. */
388 strbuf_addch(&real_pattern, '*');
389 }
390
391 filter.pattern = real_pattern.buf;
392 filter.fn = fn;
393 filter.cb_data = cb_data;
394 ret = for_each_ref(filter_refs, &filter);
395
396 strbuf_release(&real_pattern);
397 return ret;
398}
399
b09fe971
IL
400int for_each_glob_ref(each_ref_fn fn, const char *pattern, void *cb_data)
401{
402 return for_each_glob_ref_in(fn, pattern, NULL, cb_data);
403}
404
4577e483 405const char *prettify_refname(const char *name)
a9c37a72 406{
3e5b36c6
SG
407 if (skip_prefix(name, "refs/heads/", &name) ||
408 skip_prefix(name, "refs/tags/", &name) ||
409 skip_prefix(name, "refs/remotes/", &name))
410 ; /* nothing */
411 return name;
a9c37a72
DB
412}
413
54457fe5 414static const char *ref_rev_parse_rules[] = {
79803322
SP
415 "%.*s",
416 "refs/%.*s",
417 "refs/tags/%.*s",
418 "refs/heads/%.*s",
419 "refs/remotes/%.*s",
420 "refs/remotes/%.*s/HEAD",
421 NULL
422};
423
54457fe5 424int refname_match(const char *abbrev_name, const char *full_name)
79803322
SP
425{
426 const char **p;
427 const int abbrev_name_len = strlen(abbrev_name);
428
54457fe5 429 for (p = ref_rev_parse_rules; *p; p++) {
79803322
SP
430 if (!strcmp(full_name, mkpath(*p, abbrev_name_len, abbrev_name))) {
431 return 1;
432 }
433 }
434
435 return 0;
436}
437
ff74f7f1
JH
438/*
439 * *string and *len will only be substituted, and *string returned (for
440 * later free()ing) if the string passed in is a magic short-hand form
441 * to name a branch.
442 */
443static char *substitute_branch_name(const char **string, int *len)
444{
445 struct strbuf buf = STRBUF_INIT;
0e9f62da 446 int ret = interpret_branch_name(*string, *len, &buf, 0);
ff74f7f1
JH
447
448 if (ret == *len) {
449 size_t size;
450 *string = strbuf_detach(&buf, &size);
451 *len = size;
452 return (char *)*string;
453 }
454
455 return NULL;
456}
457
458int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)
459{
460 char *last_branch = substitute_branch_name(&str, &len);
41da7111
NTND
461 int refs_found = expand_ref(str, len, sha1, ref);
462 free(last_branch);
463 return refs_found;
464}
465
466int expand_ref(const char *str, int len, unsigned char *sha1, char **ref)
467{
ff74f7f1
JH
468 const char **p, *r;
469 int refs_found = 0;
6cd4a898 470 struct strbuf fullref = STRBUF_INIT;
ff74f7f1
JH
471
472 *ref = NULL;
473 for (p = ref_rev_parse_rules; *p; p++) {
ff74f7f1
JH
474 unsigned char sha1_from_ref[20];
475 unsigned char *this_result;
476 int flag;
477
478 this_result = refs_found ? sha1_from_ref : sha1;
6cd4a898
JK
479 strbuf_reset(&fullref);
480 strbuf_addf(&fullref, *p, len, str);
481 r = resolve_ref_unsafe(fullref.buf, RESOLVE_REF_READING,
7695d118 482 this_result, &flag);
ff74f7f1
JH
483 if (r) {
484 if (!refs_found++)
485 *ref = xstrdup(r);
486 if (!warn_ambiguous_refs)
487 break;
6cd4a898
JK
488 } else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
489 warning("ignoring dangling symref %s.", fullref.buf);
490 } else if ((flag & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
491 warning("ignoring broken ref %s.", fullref.buf);
55956350 492 }
ff74f7f1 493 }
6cd4a898 494 strbuf_release(&fullref);
ff74f7f1
JH
495 return refs_found;
496}
497
498int dwim_log(const char *str, int len, unsigned char *sha1, char **log)
499{
500 char *last_branch = substitute_branch_name(&str, &len);
501 const char **p;
502 int logs_found = 0;
6cd4a898 503 struct strbuf path = STRBUF_INIT;
ff74f7f1
JH
504
505 *log = NULL;
506 for (p = ref_rev_parse_rules; *p; p++) {
ff74f7f1 507 unsigned char hash[20];
ff74f7f1
JH
508 const char *ref, *it;
509
6cd4a898
JK
510 strbuf_reset(&path);
511 strbuf_addf(&path, *p, len, str);
512 ref = resolve_ref_unsafe(path.buf, RESOLVE_REF_READING,
7695d118 513 hash, NULL);
ff74f7f1
JH
514 if (!ref)
515 continue;
6cd4a898
JK
516 if (reflog_exists(path.buf))
517 it = path.buf;
518 else if (strcmp(ref, path.buf) && reflog_exists(ref))
ff74f7f1
JH
519 it = ref;
520 else
521 continue;
522 if (!logs_found++) {
523 *log = xstrdup(it);
524 hashcpy(sha1, hash);
525 }
7bd9bcf3
MH
526 if (!warn_ambiguous_refs)
527 break;
c0277d15 528 }
6cd4a898 529 strbuf_release(&path);
7bd9bcf3
MH
530 free(last_branch);
531 return logs_found;
2ddb5d17
BK
532}
533
266b1827
DT
534static int is_per_worktree_ref(const char *refname)
535{
ce414b33
DT
536 return !strcmp(refname, "HEAD") ||
537 starts_with(refname, "refs/bisect/");
266b1827
DT
538}
539
540static int is_pseudoref_syntax(const char *refname)
541{
542 const char *c;
543
544 for (c = refname; *c; c++) {
545 if (!isupper(*c) && *c != '-' && *c != '_')
546 return 0;
547 }
548
549 return 1;
550}
551
552enum ref_type ref_type(const char *refname)
553{
554 if (is_per_worktree_ref(refname))
555 return REF_TYPE_PER_WORKTREE;
556 if (is_pseudoref_syntax(refname))
557 return REF_TYPE_PSEUDOREF;
558 return REF_TYPE_NORMAL;
559}
560
74ec19d4
DT
561static int write_pseudoref(const char *pseudoref, const unsigned char *sha1,
562 const unsigned char *old_sha1, struct strbuf *err)
563{
564 const char *filename;
565 int fd;
566 static struct lock_file lock;
567 struct strbuf buf = STRBUF_INIT;
568 int ret = -1;
569
570 strbuf_addf(&buf, "%s\n", sha1_to_hex(sha1));
571
572 filename = git_path("%s", pseudoref);
573 fd = hold_lock_file_for_update(&lock, filename, LOCK_DIE_ON_ERROR);
574 if (fd < 0) {
0568c8e9 575 strbuf_addf(err, "could not open '%s' for writing: %s",
74ec19d4
DT
576 filename, strerror(errno));
577 return -1;
578 }
579
580 if (old_sha1) {
581 unsigned char actual_old_sha1[20];
2c3aed13
DT
582
583 if (read_ref(pseudoref, actual_old_sha1))
584 die("could not read ref '%s'", pseudoref);
74ec19d4 585 if (hashcmp(actual_old_sha1, old_sha1)) {
0568c8e9 586 strbuf_addf(err, "unexpected sha1 when writing '%s'", pseudoref);
74ec19d4
DT
587 rollback_lock_file(&lock);
588 goto done;
589 }
590 }
591
592 if (write_in_full(fd, buf.buf, buf.len) != buf.len) {
0568c8e9 593 strbuf_addf(err, "could not write to '%s'", filename);
74ec19d4
DT
594 rollback_lock_file(&lock);
595 goto done;
596 }
597
598 commit_lock_file(&lock);
599 ret = 0;
600done:
601 strbuf_release(&buf);
602 return ret;
603}
604
605static int delete_pseudoref(const char *pseudoref, const unsigned char *old_sha1)
606{
607 static struct lock_file lock;
608 const char *filename;
609
610 filename = git_path("%s", pseudoref);
611
612 if (old_sha1 && !is_null_sha1(old_sha1)) {
613 int fd;
614 unsigned char actual_old_sha1[20];
615
616 fd = hold_lock_file_for_update(&lock, filename,
617 LOCK_DIE_ON_ERROR);
618 if (fd < 0)
619 die_errno(_("Could not open '%s' for writing"), filename);
2c3aed13
DT
620 if (read_ref(pseudoref, actual_old_sha1))
621 die("could not read ref '%s'", pseudoref);
74ec19d4
DT
622 if (hashcmp(actual_old_sha1, old_sha1)) {
623 warning("Unexpected sha1 when deleting %s", pseudoref);
624 rollback_lock_file(&lock);
625 return -1;
a4c653df 626 }
74ec19d4
DT
627
628 unlink(filename);
629 rollback_lock_file(&lock);
630 } else {
631 unlink(filename);
4bd18c43 632 }
a4c653df 633
4bd18c43 634 return 0;
95fc7512 635}
d556fae2 636
c0fe4e8b
NTND
637int refs_delete_ref(struct ref_store *refs, const char *msg,
638 const char *refname,
639 const unsigned char *old_sha1,
640 unsigned int flags)
41b625b0 641{
7521cc46 642 struct ref_transaction *transaction;
a4c653df 643 struct strbuf err = STRBUF_INIT;
8b5157e4 644
c0fe4e8b
NTND
645 if (ref_type(refname) == REF_TYPE_PSEUDOREF) {
646 assert(refs == get_main_ref_store());
080cc646 647 return delete_pseudoref(refname, old_sha1);
c0fe4e8b 648 }
d48744d1 649
c0fe4e8b 650 transaction = ref_store_transaction_begin(refs, &err);
7521cc46 651 if (!transaction ||
fc67a082 652 ref_transaction_delete(transaction, refname, old_sha1,
755b49ae 653 flags, msg, &err) ||
db7516ab 654 ref_transaction_commit(transaction, &err)) {
7521cc46
RS
655 error("%s", err.buf);
656 ref_transaction_free(transaction);
657 strbuf_release(&err);
c0277d15 658 return 1;
41b625b0 659 }
7bd9bcf3
MH
660 ref_transaction_free(transaction);
661 strbuf_release(&err);
b531394d
BC
662 return 0;
663}
41b625b0 664
c0fe4e8b
NTND
665int delete_ref(const char *msg, const char *refname,
666 const unsigned char *old_sha1, unsigned int flags)
667{
668 return refs_delete_ref(get_main_ref_store(), msg, refname,
669 old_sha1, flags);
670}
671
4cb77009 672int copy_reflog_msg(char *buf, const char *msg)
0ec29a47
JH
673{
674 char *cp = buf;
675 char c;
676 int wasspace = 1;
8b5157e4 677
0ec29a47
JH
678 *cp++ = '\t';
679 while ((c = *msg++)) {
680 if (wasspace && isspace(c))
681 continue;
682 wasspace = isspace(c);
683 if (wasspace)
684 c = ' ';
685 *cp++ = c;
a4c653df 686 }
0ec29a47
JH
687 while (buf < cp && isspace(cp[-1]))
688 cp--;
689 *cp++ = '\n';
690 return cp - buf;
691}
8b5157e4 692
4cb77009 693int should_autocreate_reflog(const char *refname)
4e2bef57 694{
341fb286
CW
695 switch (log_all_ref_updates) {
696 case LOG_REFS_ALWAYS:
697 return 1;
698 case LOG_REFS_NORMAL:
699 return starts_with(refname, "refs/heads/") ||
700 starts_with(refname, "refs/remotes/") ||
701 starts_with(refname, "refs/notes/") ||
702 !strcmp(refname, "HEAD");
703 default:
4e2bef57 704 return 0;
341fb286 705 }
4e2bef57
DT
706}
707
e7e0f26e 708int is_branch(const char *refname)
c3b0dec5 709{
59556548 710 return !strcmp(refname, "HEAD") || starts_with(refname, "refs/heads/");
41b625b0
NP
711}
712
4207ed28
RS
713struct read_ref_at_cb {
714 const char *refname;
715 unsigned long at_time;
716 int cnt;
717 int reccnt;
718 unsigned char *sha1;
719 int found_it;
720
721 unsigned char osha1[20];
722 unsigned char nsha1[20];
723 int tz;
724 unsigned long date;
725 char **msg;
726 unsigned long *cutoff_time;
727 int *cutoff_tz;
728 int *cutoff_cnt;
729};
730
9461d272 731static int read_ref_at_ent(struct object_id *ooid, struct object_id *noid,
4207ed28
RS
732 const char *email, unsigned long timestamp, int tz,
733 const char *message, void *cb_data)
734{
735 struct read_ref_at_cb *cb = cb_data;
736
737 cb->reccnt++;
738 cb->tz = tz;
739 cb->date = timestamp;
740
741 if (timestamp <= cb->at_time || cb->cnt == 0) {
742 if (cb->msg)
743 *cb->msg = xstrdup(message);
744 if (cb->cutoff_time)
745 *cb->cutoff_time = timestamp;
746 if (cb->cutoff_tz)
747 *cb->cutoff_tz = tz;
748 if (cb->cutoff_cnt)
749 *cb->cutoff_cnt = cb->reccnt - 1;
750 /*
751 * we have not yet updated cb->[n|o]sha1 so they still
752 * hold the values for the previous record.
753 */
754 if (!is_null_sha1(cb->osha1)) {
9461d272 755 hashcpy(cb->sha1, noid->hash);
756 if (hashcmp(cb->osha1, noid->hash))
4207ed28 757 warning("Log for ref %s has gap after %s.",
a5481a6c 758 cb->refname, show_date(cb->date, cb->tz, DATE_MODE(RFC2822)));
4207ed28
RS
759 }
760 else if (cb->date == cb->at_time)
9461d272 761 hashcpy(cb->sha1, noid->hash);
762 else if (hashcmp(noid->hash, cb->sha1))
4207ed28
RS
763 warning("Log for ref %s unexpectedly ended on %s.",
764 cb->refname, show_date(cb->date, cb->tz,
a5481a6c 765 DATE_MODE(RFC2822)));
9461d272 766 hashcpy(cb->osha1, ooid->hash);
767 hashcpy(cb->nsha1, noid->hash);
4207ed28
RS
768 cb->found_it = 1;
769 return 1;
770 }
9461d272 771 hashcpy(cb->osha1, ooid->hash);
772 hashcpy(cb->nsha1, noid->hash);
4207ed28
RS
773 if (cb->cnt > 0)
774 cb->cnt--;
775 return 0;
776}
777
9461d272 778static int read_ref_at_ent_oldest(struct object_id *ooid, struct object_id *noid,
4207ed28
RS
779 const char *email, unsigned long timestamp,
780 int tz, const char *message, void *cb_data)
781{
782 struct read_ref_at_cb *cb = cb_data;
783
784 if (cb->msg)
785 *cb->msg = xstrdup(message);
786 if (cb->cutoff_time)
787 *cb->cutoff_time = timestamp;
788 if (cb->cutoff_tz)
789 *cb->cutoff_tz = tz;
790 if (cb->cutoff_cnt)
791 *cb->cutoff_cnt = cb->reccnt;
9461d272 792 hashcpy(cb->sha1, ooid->hash);
4207ed28 793 if (is_null_sha1(cb->sha1))
9461d272 794 hashcpy(cb->sha1, noid->hash);
4207ed28
RS
795 /* We just want the first entry */
796 return 1;
16d7cc90
JH
797}
798
c41a87dd 799int read_ref_at(const char *refname, unsigned int flags, unsigned long at_time, int cnt,
dfefa935
MH
800 unsigned char *sha1, char **msg,
801 unsigned long *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
d556fae2 802{
4207ed28 803 struct read_ref_at_cb cb;
d556fae2 804
4207ed28
RS
805 memset(&cb, 0, sizeof(cb));
806 cb.refname = refname;
807 cb.at_time = at_time;
808 cb.cnt = cnt;
809 cb.msg = msg;
810 cb.cutoff_time = cutoff_time;
811 cb.cutoff_tz = cutoff_tz;
812 cb.cutoff_cnt = cutoff_cnt;
813 cb.sha1 = sha1;
814
815 for_each_reflog_ent_reverse(refname, read_ref_at_ent, &cb);
816
c41a87dd
DA
817 if (!cb.reccnt) {
818 if (flags & GET_SHA1_QUIETLY)
819 exit(128);
820 else
821 die("Log for %s is empty.", refname);
822 }
4207ed28
RS
823 if (cb.found_it)
824 return 0;
825
826 for_each_reflog_ent(refname, read_ref_at_ent_oldest, &cb);
d556fae2 827
16d7cc90 828 return 1;
d556fae2 829}
2ff81662 830
c0fe4e8b
NTND
831struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
832 struct strbuf *err)
caa4046c 833{
c0fe4e8b 834 struct ref_transaction *tr;
5a603b04
JN
835 assert(err);
836
c0fe4e8b
NTND
837 tr = xcalloc(1, sizeof(struct ref_transaction));
838 tr->ref_store = refs;
839 return tr;
840}
841
842struct ref_transaction *ref_transaction_begin(struct strbuf *err)
843{
844 return ref_store_transaction_begin(get_main_ref_store(), err);
caa4046c
MH
845}
846
026bd1d3 847void ref_transaction_free(struct ref_transaction *transaction)
caa4046c
MH
848{
849 int i;
850
1b07255c
RS
851 if (!transaction)
852 return;
853
db7516ab
RS
854 for (i = 0; i < transaction->nr; i++) {
855 free(transaction->updates[i]->msg);
88615910 856 free(transaction->updates[i]);
db7516ab 857 }
caa4046c
MH
858 free(transaction->updates);
859 free(transaction);
860}
861
71564516
MH
862struct ref_update *ref_transaction_add_update(
863 struct ref_transaction *transaction,
864 const char *refname, unsigned int flags,
865 const unsigned char *new_sha1,
866 const unsigned char *old_sha1,
867 const char *msg)
caa4046c 868{
96ffc06f 869 struct ref_update *update;
71564516
MH
870
871 if (transaction->state != REF_TRANSACTION_OPEN)
872 die("BUG: update called for transaction that is not open");
873
874 if ((flags & REF_ISPRUNING) && !(flags & REF_NODEREF))
875 die("BUG: REF_ISPRUNING set without REF_NODEREF");
876
96ffc06f 877 FLEX_ALLOC_STR(update, refname, refname);
caa4046c
MH
878 ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
879 transaction->updates[transaction->nr++] = update;
71564516
MH
880
881 update->flags = flags;
882
883 if (flags & REF_HAVE_NEW)
884 hashcpy(update->new_sha1, new_sha1);
885 if (flags & REF_HAVE_OLD)
886 hashcpy(update->old_sha1, old_sha1);
13092a91 887 update->msg = xstrdup_or_null(msg);
caa4046c
MH
888 return update;
889}
890
8e34800e
RS
891int ref_transaction_update(struct ref_transaction *transaction,
892 const char *refname,
893 const unsigned char *new_sha1,
894 const unsigned char *old_sha1,
1d147bdf 895 unsigned int flags, const char *msg,
8e34800e 896 struct strbuf *err)
caa4046c 897{
5a603b04
JN
898 assert(err);
899
8a679de6
MH
900 if ((new_sha1 && !is_null_sha1(new_sha1)) ?
901 check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
902 !refname_is_safe(refname)) {
0568c8e9 903 strbuf_addf(err, "refusing to update ref with bad name '%s'",
d0f810f0
RS
904 refname);
905 return -1;
906 }
907
71564516
MH
908 flags |= (new_sha1 ? REF_HAVE_NEW : 0) | (old_sha1 ? REF_HAVE_OLD : 0);
909
910 ref_transaction_add_update(transaction, refname, flags,
911 new_sha1, old_sha1, msg);
8e34800e 912 return 0;
caa4046c
MH
913}
914
b416af5b
RS
915int ref_transaction_create(struct ref_transaction *transaction,
916 const char *refname,
917 const unsigned char *new_sha1,
fec14ec3 918 unsigned int flags, const char *msg,
b416af5b 919 struct strbuf *err)
caa4046c 920{
f04c5b55
MH
921 if (!new_sha1 || is_null_sha1(new_sha1))
922 die("BUG: create called without valid new_sha1");
bc9f2925 923 return ref_transaction_update(transaction, refname, new_sha1,
1d147bdf 924 null_sha1, flags, msg, err);
caa4046c
MH
925}
926
8c8bdc0d
RS
927int ref_transaction_delete(struct ref_transaction *transaction,
928 const char *refname,
929 const unsigned char *old_sha1,
fb5a6bb6 930 unsigned int flags, const char *msg,
8c8bdc0d 931 struct strbuf *err)
caa4046c 932{
60294596
MH
933 if (old_sha1 && is_null_sha1(old_sha1))
934 die("BUG: delete called with old_sha1 set to zeros");
1d147bdf 935 return ref_transaction_update(transaction, refname,
fb5a6bb6 936 null_sha1, old_sha1,
1d147bdf 937 flags, msg, err);
caa4046c
MH
938}
939
16180334
MH
940int ref_transaction_verify(struct ref_transaction *transaction,
941 const char *refname,
942 const unsigned char *old_sha1,
943 unsigned int flags,
944 struct strbuf *err)
945{
946 if (!old_sha1)
947 die("BUG: verify called with old_sha1 set to NULL");
948 return ref_transaction_update(transaction, refname,
949 NULL, old_sha1,
950 flags, NULL, err);
951}
952
8f6dc7e3 953int update_ref_oid(const char *msg, const char *refname,
954 const struct object_id *new_oid, const struct object_id *old_oid,
955 unsigned int flags, enum action_on_err onerr)
956{
957 return update_ref(msg, refname, new_oid ? new_oid->hash : NULL,
958 old_oid ? old_oid->hash : NULL, flags, onerr);
959}
960
c0fe4e8b
NTND
961int refs_update_ref(struct ref_store *refs, const char *msg,
962 const char *refname, const unsigned char *new_sha1,
963 const unsigned char *old_sha1, unsigned int flags,
964 enum action_on_err onerr)
4738a333 965{
74ec19d4 966 struct ref_transaction *t = NULL;
b4d75ac1 967 struct strbuf err = STRBUF_INIT;
74ec19d4 968 int ret = 0;
b4d75ac1 969
74ec19d4 970 if (ref_type(refname) == REF_TYPE_PSEUDOREF) {
c0fe4e8b 971 assert(refs == get_main_ref_store());
74ec19d4
DT
972 ret = write_pseudoref(refname, new_sha1, old_sha1, &err);
973 } else {
c0fe4e8b 974 t = ref_store_transaction_begin(refs, &err);
74ec19d4
DT
975 if (!t ||
976 ref_transaction_update(t, refname, new_sha1, old_sha1,
977 flags, msg, &err) ||
978 ref_transaction_commit(t, &err)) {
979 ret = 1;
980 ref_transaction_free(t);
981 }
982 }
983 if (ret) {
b4d75ac1
RS
984 const char *str = "update_ref failed for ref '%s': %s";
985
b4d75ac1
RS
986 switch (onerr) {
987 case UPDATE_REFS_MSG_ON_ERR:
988 error(str, refname, err.buf);
989 break;
990 case UPDATE_REFS_DIE_ON_ERR:
991 die(str, refname, err.buf);
992 break;
993 case UPDATE_REFS_QUIET_ON_ERR:
994 break;
995 }
996 strbuf_release(&err);
4738a333 997 return 1;
b4d75ac1
RS
998 }
999 strbuf_release(&err);
74ec19d4
DT
1000 if (t)
1001 ref_transaction_free(t);
b4d75ac1 1002 return 0;
4738a333
BK
1003}
1004
c0fe4e8b
NTND
1005int update_ref(const char *msg, const char *refname,
1006 const unsigned char *new_sha1,
1007 const unsigned char *old_sha1,
1008 unsigned int flags, enum action_on_err onerr)
1009{
1010 return refs_update_ref(get_main_ref_store(), msg, refname, new_sha1,
1011 old_sha1, flags, onerr);
1012}
1013
dfefa935 1014char *shorten_unambiguous_ref(const char *refname, int strict)
7c2b3029
JK
1015{
1016 int i;
1017 static char **scanf_fmts;
1018 static int nr_rules;
1019 char *short_name;
6cd4a898 1020 struct strbuf resolved_buf = STRBUF_INIT;
7c2b3029 1021
7c2b3029 1022 if (!nr_rules) {
4346663a
MH
1023 /*
1024 * Pre-generate scanf formats from ref_rev_parse_rules[].
1025 * Generate a format suitable for scanf from a
1026 * ref_rev_parse_rules rule by interpolating "%s" at the
1027 * location of the "%.*s".
1028 */
7c2b3029 1029 size_t total_len = 0;
84d5633f 1030 size_t offset = 0;
7c2b3029
JK
1031
1032 /* the rule list is NULL terminated, count them first */
a4165851 1033 for (nr_rules = 0; ref_rev_parse_rules[nr_rules]; nr_rules++)
7902fe03
MH
1034 /* -2 for strlen("%.*s") - strlen("%s"); +1 for NUL */
1035 total_len += strlen(ref_rev_parse_rules[nr_rules]) - 2 + 1;
7c2b3029 1036
50492f7b 1037 scanf_fmts = xmalloc(st_add(st_mult(sizeof(char *), nr_rules), total_len));
7c2b3029 1038
84d5633f 1039 offset = 0;
7c2b3029 1040 for (i = 0; i < nr_rules; i++) {
4346663a 1041 assert(offset < total_len);
84d5633f 1042 scanf_fmts[i] = (char *)&scanf_fmts[nr_rules] + offset;
4346663a
MH
1043 offset += snprintf(scanf_fmts[i], total_len - offset,
1044 ref_rev_parse_rules[i], 2, "%s") + 1;
7c2b3029
JK
1045 }
1046 }
1047
1048 /* bail out if there are no rules */
1049 if (!nr_rules)
dfefa935 1050 return xstrdup(refname);
7c2b3029 1051
dfefa935
MH
1052 /* buffer for scanf result, at most refname must fit */
1053 short_name = xstrdup(refname);
7c2b3029
JK
1054
1055 /* skip first rule, it will always match */
1056 for (i = nr_rules - 1; i > 0 ; --i) {
1057 int j;
6e7b3309 1058 int rules_to_fail = i;
7c2b3029
JK
1059 int short_name_len;
1060
dfefa935 1061 if (1 != sscanf(refname, scanf_fmts[i], short_name))
7c2b3029
JK
1062 continue;
1063
1064 short_name_len = strlen(short_name);
1065
6e7b3309
BW
1066 /*
1067 * in strict mode, all (except the matched one) rules
1068 * must fail to resolve to a valid non-ambiguous ref
1069 */
1070 if (strict)
1071 rules_to_fail = nr_rules;
1072
7c2b3029
JK
1073 /*
1074 * check if the short name resolves to a valid ref,
1075 * but use only rules prior to the matched one
1076 */
6e7b3309 1077 for (j = 0; j < rules_to_fail; j++) {
7c2b3029 1078 const char *rule = ref_rev_parse_rules[j];
7c2b3029 1079
6e7b3309
BW
1080 /* skip matched rule */
1081 if (i == j)
1082 continue;
1083
7c2b3029
JK
1084 /*
1085 * the short name is ambiguous, if it resolves
1086 * (with this previous rule) to a valid ref
1087 * read_ref() returns 0 on success
1088 */
6cd4a898
JK
1089 strbuf_reset(&resolved_buf);
1090 strbuf_addf(&resolved_buf, rule,
1091 short_name_len, short_name);
1092 if (ref_exists(resolved_buf.buf))
7c2b3029
JK
1093 break;
1094 }
1095
1096 /*
1097 * short name is non-ambiguous if all previous rules
1098 * haven't resolved to a valid ref
1099 */
6cd4a898
JK
1100 if (j == rules_to_fail) {
1101 strbuf_release(&resolved_buf);
7c2b3029 1102 return short_name;
6cd4a898 1103 }
7c2b3029
JK
1104 }
1105
6cd4a898 1106 strbuf_release(&resolved_buf);
7c2b3029 1107 free(short_name);
dfefa935 1108 return xstrdup(refname);
7c2b3029 1109}
daebaa78
JH
1110
1111static struct string_list *hide_refs;
1112
1113int parse_hide_refs_config(const char *var, const char *value, const char *section)
1114{
ad8c7cda 1115 const char *key;
daebaa78 1116 if (!strcmp("transfer.hiderefs", var) ||
ad8c7cda
JK
1117 (!parse_config_key(var, section, NULL, NULL, &key) &&
1118 !strcmp(key, "hiderefs"))) {
daebaa78
JH
1119 char *ref;
1120 int len;
1121
1122 if (!value)
1123 return config_error_nonbool(var);
1124 ref = xstrdup(value);
1125 len = strlen(ref);
1126 while (len && ref[len - 1] == '/')
1127 ref[--len] = '\0';
1128 if (!hide_refs) {
1129 hide_refs = xcalloc(1, sizeof(*hide_refs));
1130 hide_refs->strdup_strings = 1;
1131 }
1132 string_list_append(hide_refs, ref);
1133 }
1134 return 0;
1135}
1136
78a766ab 1137int ref_is_hidden(const char *refname, const char *refname_full)
daebaa78 1138{
2bc31d16 1139 int i;
daebaa78
JH
1140
1141 if (!hide_refs)
1142 return 0;
2bc31d16
JK
1143 for (i = hide_refs->nr - 1; i >= 0; i--) {
1144 const char *match = hide_refs->items[i].string;
78a766ab 1145 const char *subject;
2bc31d16 1146 int neg = 0;
daebaa78 1147 int len;
2bc31d16
JK
1148
1149 if (*match == '!') {
1150 neg = 1;
1151 match++;
1152 }
1153
78a766ab
LF
1154 if (*match == '^') {
1155 subject = refname_full;
1156 match++;
1157 } else {
1158 subject = refname;
1159 }
1160
1161 /* refname can be NULL when namespaces are used. */
1162 if (!subject || !starts_with(subject, match))
daebaa78 1163 continue;
2bc31d16 1164 len = strlen(match);
78a766ab 1165 if (!subject[len] || subject[len] == '/')
2bc31d16 1166 return !neg;
daebaa78
JH
1167 }
1168 return 0;
1169}
fa5b1830 1170
0845122c
DT
1171const char *find_descendant_ref(const char *dirname,
1172 const struct string_list *extras,
1173 const struct string_list *skip)
fa5b1830 1174{
0845122c 1175 int pos;
fa5b1830 1176
0845122c
DT
1177 if (!extras)
1178 return NULL;
fa5b1830
MH
1179
1180 /*
0845122c
DT
1181 * Look at the place where dirname would be inserted into
1182 * extras. If there is an entry at that position that starts
1183 * with dirname (remember, dirname includes the trailing
1184 * slash) and is not in skip, then we have a conflict.
fa5b1830 1185 */
0845122c
DT
1186 for (pos = string_list_find_insert_index(extras, dirname, 0);
1187 pos < extras->nr; pos++) {
1188 const char *extra_refname = extras->items[pos].string;
fa5b1830 1189
0845122c
DT
1190 if (!starts_with(extra_refname, dirname))
1191 break;
1192
1193 if (!skip || !string_list_has_string(skip, extra_refname))
1194 return extra_refname;
fa5b1830 1195 }
0845122c
DT
1196 return NULL;
1197}
fa5b1830 1198
7d2df051
NTND
1199int refs_rename_ref_available(struct ref_store *refs,
1200 const char *old_refname,
1201 const char *new_refname)
0845122c
DT
1202{
1203 struct string_list skip = STRING_LIST_INIT_NODUP;
1204 struct strbuf err = STRBUF_INIT;
ff3a299c 1205 int ok;
fa5b1830 1206
ff3a299c 1207 string_list_insert(&skip, old_refname);
7d2df051
NTND
1208 ok = !refs_verify_refname_available(refs, new_refname,
1209 NULL, &skip, &err);
ff3a299c 1210 if (!ok)
0845122c
DT
1211 error("%s", err.buf);
1212
1213 string_list_clear(&skip, 0);
1214 strbuf_release(&err);
ff3a299c 1215 return ok;
fa5b1830 1216}
2bf68ed5
DT
1217
1218int head_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
1219{
1220 struct object_id oid;
1221 int flag;
1222
1223 if (submodule) {
1224 if (resolve_gitlink_ref(submodule, "HEAD", oid.hash) == 0)
1225 return fn("HEAD", &oid, 0, cb_data);
1226
1227 return 0;
1228 }
1229
1230 if (!read_ref_full("HEAD", RESOLVE_REF_READING, oid.hash, &flag))
1231 return fn("HEAD", &oid, flag, cb_data);
1232
1233 return 0;
1234}
1235
1236int head_ref(each_ref_fn fn, void *cb_data)
1237{
1238 return head_ref_submodule(NULL, fn, cb_data);
1239}
93770590 1240
4c4de895
MH
1241/*
1242 * Call fn for each reference in the specified submodule for which the
1243 * refname begins with prefix. If trim is non-zero, then trim that
1244 * many characters off the beginning of each refname before passing
1245 * the refname to fn. flags can be DO_FOR_EACH_INCLUDE_BROKEN to
1246 * include broken references in the iteration. If fn ever returns a
1247 * non-zero value, stop the iteration and return that value;
1248 * otherwise, return 0.
1249 */
7d2df051 1250static int do_for_each_ref(struct ref_store *refs, const char *prefix,
4c4de895
MH
1251 each_ref_fn fn, int trim, int flags, void *cb_data)
1252{
1253 struct ref_iterator *iter;
1254
00eebe35
MH
1255 if (!refs)
1256 return 0;
1257
1a769003 1258 iter = refs->be->iterator_begin(refs, prefix, flags);
4c4de895
MH
1259 iter = prefix_ref_iterator_begin(iter, prefix, trim);
1260
1261 return do_for_each_ref_iterator(iter, fn, cb_data);
1262}
1263
7d2df051
NTND
1264int refs_for_each_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1265{
1266 return do_for_each_ref(refs, "", fn, 0, 0, cb_data);
1267}
1268
93770590
DT
1269int for_each_ref(each_ref_fn fn, void *cb_data)
1270{
7d2df051 1271 return refs_for_each_ref(get_main_ref_store(), fn, cb_data);
93770590
DT
1272}
1273
1274int for_each_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
1275{
7d2df051
NTND
1276 return refs_for_each_ref(get_submodule_ref_store(submodule), fn, cb_data);
1277}
1278
1279int refs_for_each_ref_in(struct ref_store *refs, const char *prefix,
1280 each_ref_fn fn, void *cb_data)
1281{
1282 return do_for_each_ref(refs, prefix, fn, strlen(prefix), 0, cb_data);
93770590
DT
1283}
1284
1285int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data)
1286{
7d2df051 1287 return refs_for_each_ref_in(get_main_ref_store(), prefix, fn, cb_data);
93770590
DT
1288}
1289
1290int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data, unsigned int broken)
1291{
1292 unsigned int flag = 0;
1293
1294 if (broken)
1295 flag = DO_FOR_EACH_INCLUDE_BROKEN;
7d2df051
NTND
1296 return do_for_each_ref(get_main_ref_store(),
1297 prefix, fn, 0, flag, cb_data);
93770590
DT
1298}
1299
1300int for_each_ref_in_submodule(const char *submodule, const char *prefix,
7d2df051 1301 each_ref_fn fn, void *cb_data)
93770590 1302{
7d2df051
NTND
1303 return refs_for_each_ref_in(get_submodule_ref_store(submodule),
1304 prefix, fn, cb_data);
93770590
DT
1305}
1306
1307int for_each_replace_ref(each_ref_fn fn, void *cb_data)
1308{
7d2df051
NTND
1309 return do_for_each_ref(get_main_ref_store(),
1310 git_replace_ref_base, fn,
1311 strlen(git_replace_ref_base),
1312 0, cb_data);
93770590
DT
1313}
1314
1315int for_each_namespaced_ref(each_ref_fn fn, void *cb_data)
1316{
1317 struct strbuf buf = STRBUF_INIT;
1318 int ret;
1319 strbuf_addf(&buf, "%srefs/", get_git_namespace());
7d2df051
NTND
1320 ret = do_for_each_ref(get_main_ref_store(),
1321 buf.buf, fn, 0, 0, cb_data);
93770590
DT
1322 strbuf_release(&buf);
1323 return ret;
1324}
1325
7d2df051 1326int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
93770590 1327{
7d2df051 1328 return do_for_each_ref(refs, "", fn, 0,
93770590
DT
1329 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
1330}
2d0663b2 1331
7d2df051
NTND
1332int for_each_rawref(each_ref_fn fn, void *cb_data)
1333{
1334 return refs_for_each_rawref(get_main_ref_store(), fn, cb_data);
1335}
1336
2d0663b2 1337/* This function needs to return a meaningful errno on failure */
7d2df051 1338const char *refs_resolve_ref_unsafe(struct ref_store *refs,
3c0cb0cb
MH
1339 const char *refname,
1340 int resolve_flags,
1341 unsigned char *sha1, int *flags)
2d0663b2
DT
1342{
1343 static struct strbuf sb_refname = STRBUF_INIT;
1344 int unused_flags;
1345 int symref_count;
1346
1347 if (!flags)
1348 flags = &unused_flags;
1349
1350 *flags = 0;
1351
1352 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1353 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1354 !refname_is_safe(refname)) {
1355 errno = EINVAL;
1356 return NULL;
1357 }
1358
1359 /*
1360 * dwim_ref() uses REF_ISBROKEN to distinguish between
1361 * missing refs and refs that were present but invalid,
1362 * to complain about the latter to stderr.
1363 *
1364 * We don't know whether the ref exists, so don't set
1365 * REF_ISBROKEN yet.
1366 */
1367 *flags |= REF_BAD_NAME;
1368 }
1369
1370 for (symref_count = 0; symref_count < SYMREF_MAXDEPTH; symref_count++) {
1371 unsigned int read_flags = 0;
1372
e1e33b72
MH
1373 if (refs->be->read_raw_ref(refs, refname,
1374 sha1, &sb_refname, &read_flags)) {
2d0663b2
DT
1375 *flags |= read_flags;
1376 if (errno != ENOENT || (resolve_flags & RESOLVE_REF_READING))
1377 return NULL;
1378 hashclr(sha1);
1379 if (*flags & REF_BAD_NAME)
1380 *flags |= REF_ISBROKEN;
1381 return refname;
1382 }
1383
1384 *flags |= read_flags;
1385
1386 if (!(read_flags & REF_ISSYMREF)) {
1387 if (*flags & REF_BAD_NAME) {
1388 hashclr(sha1);
1389 *flags |= REF_ISBROKEN;
1390 }
1391 return refname;
1392 }
1393
1394 refname = sb_refname.buf;
1395 if (resolve_flags & RESOLVE_REF_NO_RECURSE) {
1396 hashclr(sha1);
1397 return refname;
1398 }
1399 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1400 if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
1401 !refname_is_safe(refname)) {
1402 errno = EINVAL;
1403 return NULL;
1404 }
1405
1406 *flags |= REF_ISBROKEN | REF_BAD_NAME;
1407 }
1408 }
1409
1410 errno = ELOOP;
1411 return NULL;
1412}
00eebe35 1413
6fb5acfd
DT
1414/* backend functions */
1415int refs_init_db(struct strbuf *err)
1416{
077be78d 1417 struct ref_store *refs = get_main_ref_store();
6fb5acfd
DT
1418
1419 return refs->be->init_db(refs, err);
1420}
1421
bd40dcda
MH
1422const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
1423 unsigned char *sha1, int *flags)
1424{
7d2df051 1425 return refs_resolve_ref_unsafe(get_main_ref_store(), refname,
bd40dcda
MH
1426 resolve_flags, sha1, flags);
1427}
1428
a8355bb7
MH
1429int resolve_gitlink_ref(const char *submodule, const char *refname,
1430 unsigned char *sha1)
424dcc76 1431{
a8355bb7 1432 size_t len = strlen(submodule);
424dcc76
MH
1433 struct ref_store *refs;
1434 int flags;
1435
a8355bb7 1436 while (len && submodule[len - 1] == '/')
424dcc76 1437 len--;
48a8475f 1438
424dcc76
MH
1439 if (!len)
1440 return -1;
1441
a8355bb7 1442 if (submodule[len]) {
48a8475f 1443 /* We need to strip off one or more trailing slashes */
a8355bb7 1444 char *stripped = xmemdupz(submodule, len);
48a8475f 1445
18d0002d 1446 refs = get_submodule_ref_store(stripped);
48a8475f
MH
1447 free(stripped);
1448 } else {
18d0002d 1449 refs = get_submodule_ref_store(submodule);
48a8475f
MH
1450 }
1451
424dcc76
MH
1452 if (!refs)
1453 return -1;
1454
7d2df051 1455 if (!refs_resolve_ref_unsafe(refs, refname, 0, sha1, &flags) ||
424dcc76
MH
1456 is_null_sha1(sha1))
1457 return -1;
1458 return 0;
1459}
1460
7d4558c4
MH
1461struct submodule_hash_entry
1462{
1463 struct hashmap_entry ent; /* must be the first member! */
1464
1465 struct ref_store *refs;
1466
1467 /* NUL-terminated name of submodule: */
1468 char submodule[FLEX_ARRAY];
1469};
1470
1471static int submodule_hash_cmp(const void *entry, const void *entry_or_key,
1472 const void *keydata)
1473{
1474 const struct submodule_hash_entry *e1 = entry, *e2 = entry_or_key;
1475 const char *submodule = keydata ? keydata : e2->submodule;
1476
1477 return strcmp(e1->submodule, submodule);
1478}
1479
1480static struct submodule_hash_entry *alloc_submodule_hash_entry(
1481 const char *submodule, struct ref_store *refs)
1482{
1483 struct submodule_hash_entry *entry;
1484
1485 FLEX_ALLOC_STR(entry, submodule, submodule);
1486 hashmap_entry_init(entry, strhash(submodule));
1487 entry->refs = refs;
1488 return entry;
1489}
1490
00eebe35
MH
1491/* A pointer to the ref_store for the main repository: */
1492static struct ref_store *main_ref_store;
1493
7d4558c4
MH
1494/* A hashmap of ref_stores, stored by submodule name: */
1495static struct hashmap submodule_ref_stores;
00eebe35 1496
c468da4e 1497/*
9476c6ed
NTND
1498 * Return the ref_store instance for the specified submodule. If that
1499 * ref_store hasn't been initialized yet, return NULL.
c468da4e 1500 */
9476c6ed 1501static struct ref_store *lookup_submodule_ref_store(const char *submodule)
00eebe35 1502{
7d4558c4 1503 struct submodule_hash_entry *entry;
00eebe35 1504
7d4558c4
MH
1505 if (!submodule_ref_stores.tablesize)
1506 /* It's initialized on demand in register_ref_store(). */
1507 return NULL;
620a66b9 1508
7d4558c4
MH
1509 entry = hashmap_get_from_hash(&submodule_ref_stores,
1510 strhash(submodule), submodule);
1511 return entry ? entry->refs : NULL;
00eebe35
MH
1512}
1513
c468da4e
MH
1514/*
1515 * Create, record, and return a ref_store instance for the specified
5d0bc90e 1516 * gitdir.
c468da4e 1517 */
9e7ec634
NTND
1518static struct ref_store *ref_store_init(const char *gitdir,
1519 unsigned int flags)
00eebe35
MH
1520{
1521 const char *be_name = "files";
1522 struct ref_storage_be *be = find_ref_storage_backend(be_name);
ba88add5 1523 struct ref_store *refs;
00eebe35
MH
1524
1525 if (!be)
1526 die("BUG: reference backend %s is unknown", be_name);
1527
9e7ec634 1528 refs = be->init(gitdir, flags);
ba88add5 1529 return refs;
00eebe35
MH
1530}
1531
077be78d 1532struct ref_store *get_main_ref_store(void)
24c8407e
NTND
1533{
1534 if (main_ref_store)
1535 return main_ref_store;
1536
9e7ec634
NTND
1537 main_ref_store = ref_store_init(get_git_dir(),
1538 (REF_STORE_READ |
1539 REF_STORE_WRITE |
1540 REF_STORE_ODB |
1541 REF_STORE_MAIN));
378dc910
NTND
1542 return main_ref_store;
1543}
1544
1545/*
1546 * Register the specified ref_store to be the one that should be used
1547 * for submodule. It is a fatal error to call this function twice for
1548 * the same submodule.
1549 */
1550static void register_submodule_ref_store(struct ref_store *refs,
1551 const char *submodule)
1552{
1553 if (!submodule_ref_stores.tablesize)
1554 hashmap_init(&submodule_ref_stores, submodule_hash_cmp, 0);
1555
1556 if (hashmap_put(&submodule_ref_stores,
1557 alloc_submodule_hash_entry(submodule, refs)))
1558 die("BUG: ref_store for submodule '%s' initialized twice",
1559 submodule);
24c8407e
NTND
1560}
1561
18d0002d 1562struct ref_store *get_submodule_ref_store(const char *submodule)
00eebe35 1563{
126c9e05 1564 struct strbuf submodule_sb = STRBUF_INIT;
00eebe35 1565 struct ref_store *refs;
126c9e05 1566 int ret;
00eebe35
MH
1567
1568 if (!submodule || !*submodule) {
18d0002d
NTND
1569 /*
1570 * FIXME: This case is ideally not allowed. But that
1571 * can't happen until we clean up all the callers.
1572 */
24c8407e 1573 return get_main_ref_store();
126c9e05 1574 }
00eebe35 1575
126c9e05
NTND
1576 refs = lookup_submodule_ref_store(submodule);
1577 if (refs)
1578 return refs;
00eebe35 1579
126c9e05
NTND
1580 strbuf_addstr(&submodule_sb, submodule);
1581 ret = is_nonbare_repository_dir(&submodule_sb);
1582 strbuf_release(&submodule_sb);
1583 if (!ret)
1584 return NULL;
00eebe35 1585
5d0bc90e
NTND
1586 ret = submodule_to_gitdir(&submodule_sb, submodule);
1587 if (ret) {
1588 strbuf_release(&submodule_sb);
1589 return NULL;
00eebe35
MH
1590 }
1591
9e7ec634
NTND
1592 /* assume that add_submodule_odb() has been called */
1593 refs = ref_store_init(submodule_sb.buf,
1594 REF_STORE_READ | REF_STORE_ODB);
378dc910 1595 register_submodule_ref_store(refs, submodule);
5d0bc90e
NTND
1596
1597 strbuf_release(&submodule_sb);
00eebe35
MH
1598 return refs;
1599}
1600
620a66b9 1601void base_ref_store_init(struct ref_store *refs,
fbfd0a29 1602 const struct ref_storage_be *be)
00eebe35 1603{
620a66b9 1604 refs->be = be;
00eebe35 1605}
127b42a1
RS
1606
1607/* backend functions */
7d2df051 1608int refs_pack_refs(struct ref_store *refs, unsigned int flags)
8231527e 1609{
8231527e
MH
1610 return refs->be->pack_refs(refs, flags);
1611}
1612
7d2df051
NTND
1613int refs_peel_ref(struct ref_store *refs, const char *refname,
1614 unsigned char *sha1)
1615{
1616 return refs->be->peel_ref(refs, refname, sha1);
8231527e
MH
1617}
1618
bd427cf2
MH
1619int peel_ref(const char *refname, unsigned char *sha1)
1620{
7d2df051
NTND
1621 return refs_peel_ref(get_main_ref_store(), refname, sha1);
1622}
bd427cf2 1623
7d2df051
NTND
1624int refs_create_symref(struct ref_store *refs,
1625 const char *ref_target,
1626 const char *refs_heads_master,
1627 const char *logmsg)
1628{
1629 return refs->be->create_symref(refs, ref_target,
1630 refs_heads_master,
1631 logmsg);
bd427cf2
MH
1632}
1633
284689ba
MH
1634int create_symref(const char *ref_target, const char *refs_heads_master,
1635 const char *logmsg)
1636{
7d2df051
NTND
1637 return refs_create_symref(get_main_ref_store(), ref_target,
1638 refs_heads_master, logmsg);
284689ba
MH
1639}
1640
127b42a1
RS
1641int ref_transaction_commit(struct ref_transaction *transaction,
1642 struct strbuf *err)
1643{
c0fe4e8b 1644 struct ref_store *refs = transaction->ref_store;
127b42a1
RS
1645
1646 return refs->be->transaction_commit(refs, transaction, err);
1647}
62665823 1648
7d2df051
NTND
1649int refs_verify_refname_available(struct ref_store *refs,
1650 const char *refname,
1651 const struct string_list *extra,
1652 const struct string_list *skip,
1653 struct strbuf *err)
62665823 1654{
62665823
MH
1655 return refs->be->verify_refname_available(refs, refname, extra, skip, err);
1656}
e3688bd6 1657
7d2df051 1658int refs_for_each_reflog(struct ref_store *refs, each_ref_fn fn, void *cb_data)
e3688bd6 1659{
e3688bd6
DT
1660 struct ref_iterator *iter;
1661
1662 iter = refs->be->reflog_iterator_begin(refs);
1663
1664 return do_for_each_ref_iterator(iter, fn, cb_data);
1665}
1666
7d2df051 1667int for_each_reflog(each_ref_fn fn, void *cb_data)
e3688bd6 1668{
7d2df051
NTND
1669 return refs_for_each_reflog(get_main_ref_store(), fn, cb_data);
1670}
e3688bd6 1671
7d2df051
NTND
1672int refs_for_each_reflog_ent_reverse(struct ref_store *refs,
1673 const char *refname,
1674 each_reflog_ent_fn fn,
1675 void *cb_data)
1676{
e3688bd6
DT
1677 return refs->be->for_each_reflog_ent_reverse(refs, refname,
1678 fn, cb_data);
1679}
1680
7d2df051
NTND
1681int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn,
1682 void *cb_data)
1683{
1684 return refs_for_each_reflog_ent_reverse(get_main_ref_store(),
1685 refname, fn, cb_data);
1686}
1687
1688int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname,
1689 each_reflog_ent_fn fn, void *cb_data)
1690{
1691 return refs->be->for_each_reflog_ent(refs, refname, fn, cb_data);
1692}
1693
e3688bd6
DT
1694int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn,
1695 void *cb_data)
1696{
7d2df051
NTND
1697 return refs_for_each_reflog_ent(get_main_ref_store(), refname,
1698 fn, cb_data);
1699}
e3688bd6 1700
7d2df051
NTND
1701int refs_reflog_exists(struct ref_store *refs, const char *refname)
1702{
1703 return refs->be->reflog_exists(refs, refname);
e3688bd6
DT
1704}
1705
1706int reflog_exists(const char *refname)
1707{
7d2df051
NTND
1708 return refs_reflog_exists(get_main_ref_store(), refname);
1709}
e3688bd6 1710
7d2df051
NTND
1711int refs_create_reflog(struct ref_store *refs, const char *refname,
1712 int force_create, struct strbuf *err)
1713{
1714 return refs->be->create_reflog(refs, refname, force_create, err);
e3688bd6
DT
1715}
1716
1717int safe_create_reflog(const char *refname, int force_create,
1718 struct strbuf *err)
1719{
7d2df051
NTND
1720 return refs_create_reflog(get_main_ref_store(), refname,
1721 force_create, err);
1722}
e3688bd6 1723
7d2df051
NTND
1724int refs_delete_reflog(struct ref_store *refs, const char *refname)
1725{
1726 return refs->be->delete_reflog(refs, refname);
e3688bd6
DT
1727}
1728
1729int delete_reflog(const char *refname)
1730{
7d2df051
NTND
1731 return refs_delete_reflog(get_main_ref_store(), refname);
1732}
e3688bd6 1733
7d2df051
NTND
1734int refs_reflog_expire(struct ref_store *refs,
1735 const char *refname, const unsigned char *sha1,
1736 unsigned int flags,
1737 reflog_expiry_prepare_fn prepare_fn,
1738 reflog_expiry_should_prune_fn should_prune_fn,
1739 reflog_expiry_cleanup_fn cleanup_fn,
1740 void *policy_cb_data)
1741{
1742 return refs->be->reflog_expire(refs, refname, sha1, flags,
1743 prepare_fn, should_prune_fn,
1744 cleanup_fn, policy_cb_data);
e3688bd6
DT
1745}
1746
1747int reflog_expire(const char *refname, const unsigned char *sha1,
1748 unsigned int flags,
1749 reflog_expiry_prepare_fn prepare_fn,
1750 reflog_expiry_should_prune_fn should_prune_fn,
1751 reflog_expiry_cleanup_fn cleanup_fn,
1752 void *policy_cb_data)
1753{
7d2df051
NTND
1754 return refs_reflog_expire(get_main_ref_store(),
1755 refname, sha1, flags,
1756 prepare_fn, should_prune_fn,
1757 cleanup_fn, policy_cb_data);
e3688bd6 1758}
fc681463
DT
1759
1760int initial_ref_transaction_commit(struct ref_transaction *transaction,
1761 struct strbuf *err)
1762{
c0fe4e8b 1763 struct ref_store *refs = transaction->ref_store;
fc681463
DT
1764
1765 return refs->be->initial_transaction_commit(refs, transaction, err);
1766}
a27dcf89 1767
7d2df051
NTND
1768int refs_delete_refs(struct ref_store *refs, struct string_list *refnames,
1769 unsigned int flags)
a27dcf89 1770{
a27dcf89
DT
1771 return refs->be->delete_refs(refs, refnames, flags);
1772}
9b6b40d9 1773
7d2df051 1774int delete_refs(struct string_list *refnames, unsigned int flags)
9b6b40d9 1775{
7d2df051
NTND
1776 return refs_delete_refs(get_main_ref_store(), refnames, flags);
1777}
9b6b40d9 1778
7d2df051
NTND
1779int refs_rename_ref(struct ref_store *refs, const char *oldref,
1780 const char *newref, const char *logmsg)
1781{
9b6b40d9
DT
1782 return refs->be->rename_ref(refs, oldref, newref, logmsg);
1783}
7d2df051
NTND
1784
1785int rename_ref(const char *oldref, const char *newref, const char *logmsg)
1786{
1787 return refs_rename_ref(get_main_ref_store(), oldref, newref, logmsg);
1788}