]> git.ipfire.org Git - thirdparty/git.git/blame - refs.c
Merge commit 'bg/alshopov/master'
[thirdparty/git.git] / refs.c
CommitLineData
95fc7512 1#include "cache.h"
85023577 2#include "refs.h"
cf0adba7
JH
3#include "object.h"
4#include "tag.h"
7155b727 5#include "dir.h"
daebaa78 6#include "string-list.h"
95fc7512 7
bc5fd6d3 8/*
dde8a902 9 * How to handle various characters in refnames:
745224e0
DT
10 * This table is used by both the SIMD and non-SIMD code. It has
11 * some cases that are only useful for the SIMD; these are handled
12 * equivalently to the listed disposition in the non-SIMD code.
dde8a902 13 * 0: An acceptable character for refs
745224e0
DT
14 * 1: @, look for a following { to reject @{ in refs (SIMD or = 0)
15 * 2: \0: End-of-component and string
16 * 3: /: End-of-component (SIMD or = 2)
17 * 4: ., look for a preceding . to reject .. in refs
18 * 5: {, look for a preceding @ to reject @{ in refs
19 * 6: *, usually a bad character except, once as a wildcard (SIMD or = 7)
20 * 7: A bad character except * (see check_refname_component below)
dde8a902
DT
21 */
22static unsigned char refname_disposition[256] = {
745224e0
DT
23 2, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
24 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
25 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 4, 3,
26 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7,
27 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
28 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 7, 0, 7, 0,
dde8a902 29 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
745224e0 30 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 7, 7
dde8a902
DT
31};
32
33/*
34 * Try to read one refname component from the front of refname.
35 * Return the length of the component found, or -1 if the component is
36 * not legal. It is legal if it is something reasonable to have under
37 * ".git/refs/"; We do not like it if:
bc5fd6d3
MH
38 *
39 * - any path component of it begins with ".", or
40 * - it has double dots "..", or
41 * - it has ASCII control character, "~", "^", ":" or SP, anywhere, or
745224e0
DT
42 * - it has pattern-matching notation "*", "?", "[", anywhere, or
43 * - it ends with a "/", or
44 * - it ends with ".lock", or
bc5fd6d3
MH
45 * - it contains a "\" (backslash)
46 */
bc5fd6d3
MH
47static int check_refname_component(const char *refname, int flags)
48{
49 const char *cp;
50 char last = '\0';
51
52 for (cp = refname; ; cp++) {
dde8a902
DT
53 int ch = *cp & 255;
54 unsigned char disp = refname_disposition[ch];
55 switch (disp) {
745224e0
DT
56 case 2: /* fall-through */
57 case 3:
dde8a902 58 goto out;
745224e0 59 case 4:
dde8a902
DT
60 if (last == '.')
61 return -1; /* Refname contains "..". */
62 break;
745224e0 63 case 5:
dde8a902
DT
64 if (last == '@')
65 return -1; /* Refname contains "@{". */
bc5fd6d3 66 break;
745224e0
DT
67 case 6: /* fall-through */
68 case 7:
dde8a902
DT
69 return -1;
70 }
bc5fd6d3
MH
71 last = ch;
72 }
dde8a902 73out:
bc5fd6d3 74 if (cp == refname)
dac529e4 75 return 0; /* Component has zero length. */
bc5fd6d3
MH
76 if (refname[0] == '.') {
77 if (!(flags & REFNAME_DOT_COMPONENT))
78 return -1; /* Component starts with '.'. */
79 /*
80 * Even if leading dots are allowed, don't allow "."
81 * as a component (".." is prevented by a rule above).
82 */
83 if (refname[1] == '\0')
84 return -1; /* Component equals ".". */
85 }
86 if (cp - refname >= 5 && !memcmp(cp - 5, ".lock", 5))
87 return -1; /* Refname ends with ".lock". */
88 return cp - refname;
89}
90
745224e0 91static int check_refname_format_bytewise(const char *refname, int flags)
bc5fd6d3
MH
92{
93 int component_len, component_count = 0;
94
9ba89f48
FC
95 if (!strcmp(refname, "@"))
96 /* Refname is a single character '@'. */
97 return -1;
98
bc5fd6d3
MH
99 while (1) {
100 /* We are at the start of a path component. */
101 component_len = check_refname_component(refname, flags);
dac529e4 102 if (component_len <= 0) {
bc5fd6d3
MH
103 if ((flags & REFNAME_REFSPEC_PATTERN) &&
104 refname[0] == '*' &&
105 (refname[1] == '\0' || refname[1] == '/')) {
106 /* Accept one wildcard as a full refname component. */
107 flags &= ~REFNAME_REFSPEC_PATTERN;
108 component_len = 1;
109 } else {
110 return -1;
111 }
112 }
113 component_count++;
114 if (refname[component_len] == '\0')
115 break;
116 /* Skip to next component. */
117 refname += component_len + 1;
118 }
119
120 if (refname[component_len - 1] == '.')
121 return -1; /* Refname ends with '.'. */
122 if (!(flags & REFNAME_ALLOW_ONELEVEL) && component_count < 2)
123 return -1; /* Refname has only one component. */
124 return 0;
125}
126
745224e0
DT
127#if defined(__GNUC__) && defined(__x86_64__)
128#define SSE_VECTOR_BYTES 16
129
130/* Vectorized version of check_refname_format. */
131int check_refname_format(const char *refname, int flags)
132{
133 const char *cp = refname;
134
135 const __m128i dot = _mm_set1_epi8('.');
136 const __m128i at = _mm_set1_epi8('@');
137 const __m128i curly = _mm_set1_epi8('{');
138 const __m128i slash = _mm_set1_epi8('/');
139 const __m128i zero = _mm_set1_epi8('\000');
140 const __m128i el = _mm_set1_epi8('l');
141
142 /* below '*', all characters are forbidden or rare */
143 const __m128i star_ub = _mm_set1_epi8('*' + 1);
144
145 const __m128i colon = _mm_set1_epi8(':');
146 const __m128i question = _mm_set1_epi8('?');
147
148 /* '['..'^' contains 4 characters: 3 forbidden and 1 rare */
149 const __m128i bracket_lb = _mm_set1_epi8('[' - 1);
150 const __m128i caret_ub = _mm_set1_epi8('^' + 1);
151
152 /* '~' and above are forbidden */
153 const __m128i tilde_lb = _mm_set1_epi8('~' - 1);
154
155 int component_count = 0;
6d17dc1d 156 int orig_flags = flags;
745224e0
DT
157
158 if (refname[0] == 0 || refname[0] == '/') {
159 /* entirely empty ref or initial ref component */
160 return -1;
161 }
162
163 /*
164 * Initial ref component of '.'; below we look for /. so we'll
165 * miss this.
166 */
167 if (refname[0] == '.') {
168 if (refname[1] == '/' || refname[1] == '\0')
169 return -1;
170 if (!(flags & REFNAME_DOT_COMPONENT))
171 return -1;
172 }
173 while(1) {
174 __m128i tmp, tmp1, result;
175 uint64_t mask;
176
177 if ((uintptr_t) cp % PAGE_SIZE > PAGE_SIZE - SSE_VECTOR_BYTES - 1)
178 /*
179 * End-of-page; fall back to slow method for
180 * this entire ref.
181 */
6d17dc1d 182 return check_refname_format_bytewise(refname, orig_flags);
745224e0
DT
183
184 tmp = _mm_loadu_si128((__m128i *)cp);
185 tmp1 = _mm_loadu_si128((__m128i *)(cp + 1));
186
187 /*
188 * This range (note the lt) contains some
189 * permissible-but-rare characters (including all
190 * characters >= 128), which we handle later. It also
191 * includes \000.
192 */
193 result = _mm_cmplt_epi8(tmp, star_ub);
194
195 result = _mm_or_si128(result, _mm_cmpeq_epi8(tmp, question));
196 result = _mm_or_si128(result, _mm_cmpeq_epi8(tmp, colon));
197
198 /* This range contains the permissible ] as bycatch */
199 result = _mm_or_si128(result, _mm_and_si128(
200 _mm_cmpgt_epi8(tmp, bracket_lb),
201 _mm_cmplt_epi8(tmp, caret_ub)));
202
203 result = _mm_or_si128(result, _mm_cmpgt_epi8(tmp, tilde_lb));
204
205 /* .. */
206 result = _mm_or_si128(result, _mm_and_si128(
207 _mm_cmpeq_epi8(tmp, dot),
208 _mm_cmpeq_epi8(tmp1, dot)));
209 /* @{ */
210 result = _mm_or_si128(result, _mm_and_si128(
211 _mm_cmpeq_epi8(tmp, at),
212 _mm_cmpeq_epi8(tmp1, curly)));
213 /* // */
214 result = _mm_or_si128(result, _mm_and_si128(
215 _mm_cmpeq_epi8(tmp, slash),
216 _mm_cmpeq_epi8(tmp1, slash)));
217 /* trailing / */
218 result = _mm_or_si128(result, _mm_and_si128(
219 _mm_cmpeq_epi8(tmp, slash),
220 _mm_cmpeq_epi8(tmp1, zero)));
221 /* .l, beginning of .lock */
222 result = _mm_or_si128(result, _mm_and_si128(
223 _mm_cmpeq_epi8(tmp, dot),
224 _mm_cmpeq_epi8(tmp1, el)));
225 /*
226 * Even though /. is not necessarily an error, we flag
227 * it anyway. If we find it, we'll check if it's valid
228 * and if so we'll advance just past it.
229 */
230 result = _mm_or_si128(result, _mm_and_si128(
231 _mm_cmpeq_epi8(tmp, slash),
232 _mm_cmpeq_epi8(tmp1, dot)));
233
234 mask = _mm_movemask_epi8(result);
235 if (mask) {
236 /*
237 * We've found either end-of-string, or some
238 * probably-bad character or substring.
239 */
240 int i = __builtin_ctz(mask);
241 switch (refname_disposition[cp[i] & 255]) {
242 case 0: /* fall-through */
243 case 5:
244 /*
245 * bycatch: a good character that's in
246 * one of the ranges of mostly-forbidden
247 * characters
248 */
249 cp += i + 1;
250 break;
251 case 1:
252 if (cp[i + 1] == '{')
253 return -1;
254 cp += i + 1;
255 break;
256 case 2:
257 if (!(flags & REFNAME_ALLOW_ONELEVEL)
258 && !component_count && !strchr(refname, '/'))
259 /* Refname has only one component. */
260 return -1;
261 return 0;
262 case 3:
263 component_count ++;
264 /*
265 * Even if leading dots are allowed, don't
266 * allow "." as a component (".." is
267 * prevented by case 4 below).
268 */
269 if (cp[i + 1] == '.') {
270 if (cp[i + 2] == '\0')
271 return -1;
272 if (flags & REFNAME_DOT_COMPONENT) {
273 /* skip to just after the /. */
274 cp += i + 2;
275 break;
276 }
277 return -1;
278 } else if (cp[i + 1] == '/' || cp[i + 1] == '\0')
279 return -1;
280 break;
281 case 4:
282 if (cp[i + 1] == '.' || cp[i + 1] == '\0')
283 return -1;
284 /* .lock as end-of-component or end-of-string */
285 if ((!strncmp(cp + i, ".lock", 5))
286 && (cp[i + 5] == '/' || cp[i + 5] == 0))
287 return -1;
288 cp += 1;
289 break;
290 case 6:
291 if (((cp == refname + i) || cp[i - 1] == '/')
292 && (cp[i + 1] == '/' || cp[i + 1] == 0))
293 if (flags & REFNAME_REFSPEC_PATTERN) {
294 flags &= ~REFNAME_REFSPEC_PATTERN;
295 /* restart after the * */
296 cp += i + 1;
297 continue;
298 }
299 /* fall-through */
300 case 7:
301 return -1;
302 }
303 } else
304 cp += SSE_VECTOR_BYTES;
305 }
306}
307
308#else
309
310int check_refname_format (const char *refname, int flags)
311{
312 return check_refname_format_bytewise(refname, flags);
313}
314
315#endif
316
bc5fd6d3 317struct ref_entry;
e1e22e37 318
28e6a34e
MH
319/*
320 * Information used (along with the information in ref_entry) to
321 * describe a single cached reference. This data structure only
322 * occurs embedded in a union in struct ref_entry, and only when
323 * (ref_entry->flag & REF_DIR) is zero.
324 */
593f1bb8 325struct ref_value {
6c6f58df
MH
326 /*
327 * The name of the object to which this reference resolves
328 * (which may be a tag object). If REF_ISBROKEN, this is
329 * null. If REF_ISSYMREF, then this is the name of the object
330 * referred to by the last reference in the symlink chain.
331 */
593f1bb8 332 unsigned char sha1[20];
6c6f58df
MH
333
334 /*
335 * If REF_KNOWS_PEELED, then this field holds the peeled value
336 * of this reference, or null if the reference is known not to
2312a793
MH
337 * be peelable. See the documentation for peel_ref() for an
338 * exact definition of "peelable".
6c6f58df 339 */
593f1bb8
MH
340 unsigned char peeled[20];
341};
342
f006c42a
MH
343struct ref_cache;
344
28e6a34e
MH
345/*
346 * Information used (along with the information in ref_entry) to
347 * describe a level in the hierarchy of references. This data
348 * structure only occurs embedded in a union in struct ref_entry, and
349 * only when (ref_entry.flag & REF_DIR) is set. In that case,
350 * (ref_entry.flag & REF_INCOMPLETE) determines whether the references
351 * in the directory have already been read:
352 *
353 * (ref_entry.flag & REF_INCOMPLETE) unset -- a directory of loose
354 * or packed references, already read.
355 *
356 * (ref_entry.flag & REF_INCOMPLETE) set -- a directory of loose
357 * references that hasn't been read yet (nor has any of its
358 * subdirectories).
359 *
360 * Entries within a directory are stored within a growable array of
361 * pointers to ref_entries (entries, nr, alloc). Entries 0 <= i <
362 * sorted are sorted by their component name in strcmp() order and the
363 * remaining entries are unsorted.
364 *
365 * Loose references are read lazily, one directory at a time. When a
366 * directory of loose references is read, then all of the references
367 * in that directory are stored, and REF_INCOMPLETE stubs are created
368 * for any subdirectories, but the subdirectories themselves are not
369 * read. The reading is triggered by get_ref_dir().
370 */
d3177275 371struct ref_dir {
e9c4c111 372 int nr, alloc;
e6ed3ca6
MH
373
374 /*
375 * Entries with index 0 <= i < sorted are sorted by name. New
376 * entries are appended to the list unsorted, and are sorted
377 * only when required; thus we avoid the need to sort the list
378 * after the addition of every reference.
379 */
380 int sorted;
381
f006c42a
MH
382 /* A pointer to the ref_cache that contains this ref_dir. */
383 struct ref_cache *ref_cache;
384
d3177275 385 struct ref_entry **entries;
e9c4c111
JP
386};
387
89df9c84
MH
388/*
389 * Bit values for ref_entry::flag. REF_ISSYMREF=0x01,
390 * REF_ISPACKED=0x02, and REF_ISBROKEN=0x04 are public values; see
391 * refs.h.
392 */
393
394/*
395 * The field ref_entry->u.value.peeled of this value entry contains
396 * the correct peeled value for the reference, which might be
397 * null_sha1 if the reference is not a tag or if it is broken.
398 */
432ad41e 399#define REF_KNOWS_PEELED 0x08
28e6a34e
MH
400
401/* ref_entry represents a directory of references */
432ad41e 402#define REF_DIR 0x10
cf0adba7 403
28e6a34e
MH
404/*
405 * Entry has not yet been read from disk (used only for REF_DIR
406 * entries representing loose references)
407 */
408#define REF_INCOMPLETE 0x20
409
432ad41e
MH
410/*
411 * A ref_entry represents either a reference or a "subdirectory" of
28e6a34e
MH
412 * references.
413 *
414 * Each directory in the reference namespace is represented by a
415 * ref_entry with (flags & REF_DIR) set and containing a subdir member
416 * that holds the entries in that directory that have been read so
417 * far. If (flags & REF_INCOMPLETE) is set, then the directory and
418 * its subdirectories haven't been read yet. REF_INCOMPLETE is only
419 * used for loose reference directories.
420 *
421 * References are represented by a ref_entry with (flags & REF_DIR)
422 * unset and a value member that describes the reference's value. The
423 * flag member is at the ref_entry level, but it is also needed to
424 * interpret the contents of the value field (in other words, a
425 * ref_value object is not very much use without the enclosing
426 * ref_entry).
432ad41e
MH
427 *
428 * Reference names cannot end with slash and directories' names are
429 * always stored with a trailing slash (except for the top-level
430 * directory, which is always denoted by ""). This has two nice
431 * consequences: (1) when the entries in each subdir are sorted
432 * lexicographically by name (as they usually are), the references in
433 * a whole tree can be generated in lexicographic order by traversing
434 * the tree in left-to-right, depth-first order; (2) the names of
435 * references and subdirectories cannot conflict, and therefore the
436 * presence of an empty subdirectory does not block the creation of a
437 * similarly-named reference. (The fact that reference names with the
438 * same leading components can conflict *with each other* is a
439 * separate issue that is regulated by is_refname_available().)
440 *
441 * Please note that the name field contains the fully-qualified
442 * reference (or subdirectory) name. Space could be saved by only
443 * storing the relative names. But that would require the full names
444 * to be generated on the fly when iterating in do_for_each_ref(), and
445 * would break callback functions, who have always been able to assume
446 * that the name strings that they are passed will not be freed during
447 * the iteration.
448 */
bc5fd6d3
MH
449struct ref_entry {
450 unsigned char flag; /* ISSYMREF? ISPACKED? */
593f1bb8 451 union {
432ad41e
MH
452 struct ref_value value; /* if not (flags&REF_DIR) */
453 struct ref_dir subdir; /* if (flags&REF_DIR) */
593f1bb8 454 } u;
432ad41e
MH
455 /*
456 * The full name of the reference (e.g., "refs/heads/master")
457 * or the full name of the directory with a trailing slash
458 * (e.g., "refs/heads/"):
459 */
bc5fd6d3
MH
460 char name[FLEX_ARRAY];
461};
e1e22e37 462
28e6a34e
MH
463static void read_loose_refs(const char *dirname, struct ref_dir *dir);
464
d7826d54
MH
465static struct ref_dir *get_ref_dir(struct ref_entry *entry)
466{
28e6a34e 467 struct ref_dir *dir;
d7826d54 468 assert(entry->flag & REF_DIR);
28e6a34e
MH
469 dir = &entry->u.subdir;
470 if (entry->flag & REF_INCOMPLETE) {
471 read_loose_refs(entry->name, dir);
472 entry->flag &= ~REF_INCOMPLETE;
473 }
474 return dir;
d7826d54
MH
475}
476
cddc4258
MH
477static struct ref_entry *create_ref_entry(const char *refname,
478 const unsigned char *sha1, int flag,
479 int check_name)
e1e22e37
LT
480{
481 int len;
cddc4258 482 struct ref_entry *ref;
e1e22e37 483
09116a1c 484 if (check_name &&
dfefa935
MH
485 check_refname_format(refname, REFNAME_ALLOW_ONELEVEL|REFNAME_DOT_COMPONENT))
486 die("Reference has invalid format: '%s'", refname);
cddc4258
MH
487 len = strlen(refname) + 1;
488 ref = xmalloc(sizeof(struct ref_entry) + len);
593f1bb8
MH
489 hashcpy(ref->u.value.sha1, sha1);
490 hashclr(ref->u.value.peeled);
cddc4258
MH
491 memcpy(ref->name, refname, len);
492 ref->flag = flag;
493 return ref;
494}
495
432ad41e
MH
496static void clear_ref_dir(struct ref_dir *dir);
497
732134ed
MH
498static void free_ref_entry(struct ref_entry *entry)
499{
27b5587c
MH
500 if (entry->flag & REF_DIR) {
501 /*
502 * Do not use get_ref_dir() here, as that might
503 * trigger the reading of loose refs.
504 */
505 clear_ref_dir(&entry->u.subdir);
506 }
732134ed
MH
507 free(entry);
508}
509
432ad41e
MH
510/*
511 * Add a ref_entry to the end of dir (unsorted). Entry is always
512 * stored directly in dir; no recursion into subdirectories is
513 * done.
514 */
515static void add_entry_to_dir(struct ref_dir *dir, struct ref_entry *entry)
cddc4258 516{
432ad41e
MH
517 ALLOC_GROW(dir->entries, dir->nr + 1, dir->alloc);
518 dir->entries[dir->nr++] = entry;
654ad400
MH
519 /* optimize for the case that entries are added in order */
520 if (dir->nr == 1 ||
521 (dir->nr == dir->sorted + 1 &&
522 strcmp(dir->entries[dir->nr - 2]->name,
523 dir->entries[dir->nr - 1]->name) < 0))
524 dir->sorted = dir->nr;
c774aab9
JP
525}
526
432ad41e
MH
527/*
528 * Clear and free all entries in dir, recursively.
529 */
d3177275 530static void clear_ref_dir(struct ref_dir *dir)
bc5fd6d3
MH
531{
532 int i;
d3177275
MH
533 for (i = 0; i < dir->nr; i++)
534 free_ref_entry(dir->entries[i]);
535 free(dir->entries);
536 dir->sorted = dir->nr = dir->alloc = 0;
537 dir->entries = NULL;
bc5fd6d3
MH
538}
539
432ad41e
MH
540/*
541 * Create a struct ref_entry object for the specified dirname.
542 * dirname is the name of the directory with a trailing slash (e.g.,
543 * "refs/heads/") or "" for the top-level directory.
544 */
f006c42a 545static struct ref_entry *create_dir_entry(struct ref_cache *ref_cache,
b9146f51
RS
546 const char *dirname, size_t len,
547 int incomplete)
432ad41e
MH
548{
549 struct ref_entry *direntry;
432ad41e 550 direntry = xcalloc(1, sizeof(struct ref_entry) + len + 1);
b9146f51
RS
551 memcpy(direntry->name, dirname, len);
552 direntry->name[len] = '\0';
f006c42a 553 direntry->u.subdir.ref_cache = ref_cache;
28e6a34e 554 direntry->flag = REF_DIR | (incomplete ? REF_INCOMPLETE : 0);
432ad41e
MH
555 return direntry;
556}
557
e9c4c111 558static int ref_entry_cmp(const void *a, const void *b)
c774aab9 559{
e9c4c111
JP
560 struct ref_entry *one = *(struct ref_entry **)a;
561 struct ref_entry *two = *(struct ref_entry **)b;
562 return strcmp(one->name, two->name);
563}
c774aab9 564
d3177275 565static void sort_ref_dir(struct ref_dir *dir);
bc5fd6d3 566
e1980c9d
JH
567struct string_slice {
568 size_t len;
569 const char *str;
570};
571
572static int ref_entry_cmp_sslice(const void *key_, const void *ent_)
573{
c971ddfd
RS
574 const struct string_slice *key = key_;
575 const struct ref_entry *ent = *(const struct ref_entry * const *)ent_;
576 int cmp = strncmp(key->str, ent->name, key->len);
e1980c9d
JH
577 if (cmp)
578 return cmp;
c971ddfd 579 return '\0' - (unsigned char)ent->name[key->len];
e1980c9d
JH
580}
581
432ad41e 582/*
9fc0a648
MH
583 * Return the index of the entry with the given refname from the
584 * ref_dir (non-recursively), sorting dir if necessary. Return -1 if
585 * no such entry is found. dir must already be complete.
432ad41e 586 */
9fc0a648 587static int search_ref_dir(struct ref_dir *dir, const char *refname, size_t len)
bc5fd6d3 588{
e1980c9d
JH
589 struct ref_entry **r;
590 struct string_slice key;
bc5fd6d3 591
432ad41e 592 if (refname == NULL || !dir->nr)
9fc0a648 593 return -1;
bc5fd6d3 594
d3177275 595 sort_ref_dir(dir);
e1980c9d
JH
596 key.len = len;
597 key.str = refname;
598 r = bsearch(&key, dir->entries, dir->nr, sizeof(*dir->entries),
599 ref_entry_cmp_sslice);
bc5fd6d3
MH
600
601 if (r == NULL)
9fc0a648 602 return -1;
bc5fd6d3 603
9fc0a648 604 return r - dir->entries;
bc5fd6d3
MH
605}
606
f348ac92
MH
607/*
608 * Search for a directory entry directly within dir (without
609 * recursing). Sort dir if necessary. subdirname must be a directory
610 * name (i.e., end in '/'). If mkdir is set, then create the
611 * directory if it is missing; otherwise, return NULL if the desired
28e6a34e 612 * directory cannot be found. dir must already be complete.
f348ac92 613 */
3f3aa1bc 614static struct ref_dir *search_for_subdir(struct ref_dir *dir,
dd02e728
RS
615 const char *subdirname, size_t len,
616 int mkdir)
f348ac92 617{
9fc0a648
MH
618 int entry_index = search_ref_dir(dir, subdirname, len);
619 struct ref_entry *entry;
620 if (entry_index == -1) {
f348ac92
MH
621 if (!mkdir)
622 return NULL;
28e6a34e
MH
623 /*
624 * Since dir is complete, the absence of a subdir
625 * means that the subdir really doesn't exist;
626 * therefore, create an empty record for it but mark
627 * the record complete.
628 */
b9146f51 629 entry = create_dir_entry(dir->ref_cache, subdirname, len, 0);
f348ac92 630 add_entry_to_dir(dir, entry);
9fc0a648
MH
631 } else {
632 entry = dir->entries[entry_index];
f348ac92 633 }
3f3aa1bc 634 return get_ref_dir(entry);
f348ac92
MH
635}
636
432ad41e
MH
637/*
638 * If refname is a reference name, find the ref_dir within the dir
639 * tree that should hold refname. If refname is a directory name
640 * (i.e., ends in '/'), then return that ref_dir itself. dir must
28e6a34e
MH
641 * represent the top-level directory and must already be complete.
642 * Sort ref_dirs and recurse into subdirectories as necessary. If
643 * mkdir is set, then create any missing directories; otherwise,
644 * return NULL if the desired directory cannot be found.
432ad41e
MH
645 */
646static struct ref_dir *find_containing_dir(struct ref_dir *dir,
647 const char *refname, int mkdir)
648{
5fa04418 649 const char *slash;
5fa04418 650 for (slash = strchr(refname, '/'); slash; slash = strchr(slash + 1, '/')) {
dd02e728 651 size_t dirnamelen = slash - refname + 1;
3f3aa1bc 652 struct ref_dir *subdir;
dd02e728 653 subdir = search_for_subdir(dir, refname, dirnamelen, mkdir);
663c1295
JH
654 if (!subdir) {
655 dir = NULL;
f348ac92 656 break;
432ad41e 657 }
3f3aa1bc 658 dir = subdir;
432ad41e
MH
659 }
660
432ad41e
MH
661 return dir;
662}
663
664/*
665 * Find the value entry with the given name in dir, sorting ref_dirs
666 * and recursing into subdirectories as necessary. If the name is not
667 * found or it corresponds to a directory entry, return NULL.
668 */
669static struct ref_entry *find_ref(struct ref_dir *dir, const char *refname)
670{
9fc0a648 671 int entry_index;
432ad41e
MH
672 struct ref_entry *entry;
673 dir = find_containing_dir(dir, refname, 0);
674 if (!dir)
675 return NULL;
9fc0a648
MH
676 entry_index = search_ref_dir(dir, refname, strlen(refname));
677 if (entry_index == -1)
678 return NULL;
679 entry = dir->entries[entry_index];
680 return (entry->flag & REF_DIR) ? NULL : entry;
432ad41e
MH
681}
682
506a760d
MH
683/*
684 * Remove the entry with the given name from dir, recursing into
685 * subdirectories as necessary. If refname is the name of a directory
686 * (i.e., ends with '/'), then remove the directory and its contents.
687 * If the removal was successful, return the number of entries
688 * remaining in the directory entry that contained the deleted entry.
689 * If the name was not found, return -1. Please note that this
690 * function only deletes the entry from the cache; it does not delete
691 * it from the filesystem or ensure that other cache entries (which
692 * might be symbolic references to the removed entry) are updated.
693 * Nor does it remove any containing dir entries that might be made
694 * empty by the removal. dir must represent the top-level directory
695 * and must already be complete.
696 */
697static int remove_entry(struct ref_dir *dir, const char *refname)
698{
699 int refname_len = strlen(refname);
700 int entry_index;
701 struct ref_entry *entry;
702 int is_dir = refname[refname_len - 1] == '/';
703 if (is_dir) {
704 /*
705 * refname represents a reference directory. Remove
706 * the trailing slash; otherwise we will get the
707 * directory *representing* refname rather than the
708 * one *containing* it.
709 */
710 char *dirname = xmemdupz(refname, refname_len - 1);
711 dir = find_containing_dir(dir, dirname, 0);
712 free(dirname);
713 } else {
714 dir = find_containing_dir(dir, refname, 0);
715 }
716 if (!dir)
717 return -1;
718 entry_index = search_ref_dir(dir, refname, refname_len);
719 if (entry_index == -1)
720 return -1;
721 entry = dir->entries[entry_index];
722
723 memmove(&dir->entries[entry_index],
724 &dir->entries[entry_index + 1],
725 (dir->nr - entry_index - 1) * sizeof(*dir->entries)
726 );
727 dir->nr--;
728 if (dir->sorted > entry_index)
729 dir->sorted--;
730 free_ref_entry(entry);
731 return dir->nr;
432ad41e
MH
732}
733
734/*
735 * Add a ref_entry to the ref_dir (unsorted), recursing into
736 * subdirectories as necessary. dir must represent the top-level
737 * directory. Return 0 on success.
738 */
739static int add_ref(struct ref_dir *dir, struct ref_entry *ref)
740{
741 dir = find_containing_dir(dir, ref->name, 1);
742 if (!dir)
743 return -1;
744 add_entry_to_dir(dir, ref);
745 return 0;
746}
747
202a56a9
MH
748/*
749 * Emit a warning and return true iff ref1 and ref2 have the same name
750 * and the same sha1. Die if they have the same name but different
751 * sha1s.
752 */
753static int is_dup_ref(const struct ref_entry *ref1, const struct ref_entry *ref2)
754{
432ad41e 755 if (strcmp(ref1->name, ref2->name))
202a56a9 756 return 0;
432ad41e
MH
757
758 /* Duplicate name; make sure that they don't conflict: */
759
760 if ((ref1->flag & REF_DIR) || (ref2->flag & REF_DIR))
761 /* This is impossible by construction */
762 die("Reference directory conflict: %s", ref1->name);
763
764 if (hashcmp(ref1->u.value.sha1, ref2->u.value.sha1))
765 die("Duplicated ref, and SHA1s don't match: %s", ref1->name);
766
767 warning("Duplicated ref: %s", ref1->name);
768 return 1;
202a56a9
MH
769}
770
e6ed3ca6 771/*
432ad41e
MH
772 * Sort the entries in dir non-recursively (if they are not already
773 * sorted) and remove any duplicate entries.
e6ed3ca6 774 */
d3177275 775static void sort_ref_dir(struct ref_dir *dir)
e9c4c111 776{
202a56a9 777 int i, j;
81a79d8e 778 struct ref_entry *last = NULL;
c774aab9 779
e6ed3ca6
MH
780 /*
781 * This check also prevents passing a zero-length array to qsort(),
782 * which is a problem on some platforms.
783 */
d3177275 784 if (dir->sorted == dir->nr)
e9c4c111 785 return;
c774aab9 786
d3177275 787 qsort(dir->entries, dir->nr, sizeof(*dir->entries), ref_entry_cmp);
c774aab9 788
81a79d8e
MH
789 /* Remove any duplicates: */
790 for (i = 0, j = 0; j < dir->nr; j++) {
791 struct ref_entry *entry = dir->entries[j];
792 if (last && is_dup_ref(last, entry))
793 free_ref_entry(entry);
794 else
795 last = dir->entries[i++] = entry;
e9c4c111 796 }
81a79d8e 797 dir->sorted = dir->nr = i;
e9c4c111 798}
c774aab9 799
fcce1703
MH
800/* Include broken references in a do_for_each_ref*() iteration: */
801#define DO_FOR_EACH_INCLUDE_BROKEN 0x01
c774aab9 802
662428f4
MH
803/*
804 * Return true iff the reference described by entry can be resolved to
805 * an object in the database. Emit a warning if the referred-to
806 * object does not exist.
807 */
808static int ref_resolves_to_object(struct ref_entry *entry)
809{
810 if (entry->flag & REF_ISBROKEN)
811 return 0;
812 if (!has_sha1_file(entry->u.value.sha1)) {
813 error("%s does not point to a valid object!", entry->name);
814 return 0;
815 }
816 return 1;
817}
c774aab9 818
7d76fdc8
MH
819/*
820 * current_ref is a performance hack: when iterating over references
821 * using the for_each_ref*() functions, current_ref is set to the
822 * current reference's entry before calling the callback function. If
823 * the callback function calls peel_ref(), then peel_ref() first
824 * checks whether the reference to be peeled is the current reference
825 * (it usually is) and if so, returns that reference's peeled version
826 * if it is available. This avoids a refname lookup in a common case.
827 */
bc5fd6d3 828static struct ref_entry *current_ref;
c774aab9 829
624cac35
MH
830typedef int each_ref_entry_fn(struct ref_entry *entry, void *cb_data);
831
832struct ref_entry_cb {
833 const char *base;
834 int trim;
835 int flags;
836 each_ref_fn *fn;
837 void *cb_data;
838};
839
fcce1703 840/*
624cac35
MH
841 * Handle one reference in a do_for_each_ref*()-style iteration,
842 * calling an each_ref_fn for each entry.
fcce1703 843 */
624cac35 844static int do_one_ref(struct ref_entry *entry, void *cb_data)
bc5fd6d3 845{
624cac35 846 struct ref_entry_cb *data = cb_data;
d0cf51e9 847 struct ref_entry *old_current_ref;
429213e4 848 int retval;
d0cf51e9 849
59556548 850 if (!starts_with(entry->name, data->base))
bc5fd6d3 851 return 0;
c774aab9 852
624cac35 853 if (!(data->flags & DO_FOR_EACH_INCLUDE_BROKEN) &&
662428f4 854 !ref_resolves_to_object(entry))
bc5fd6d3 855 return 0;
c774aab9 856
d0cf51e9
MH
857 /* Store the old value, in case this is a recursive call: */
858 old_current_ref = current_ref;
bc5fd6d3 859 current_ref = entry;
624cac35
MH
860 retval = data->fn(entry->name + data->trim, entry->u.value.sha1,
861 entry->flag, data->cb_data);
d0cf51e9 862 current_ref = old_current_ref;
429213e4 863 return retval;
bc5fd6d3 864}
c774aab9 865
c36b5bc2 866/*
d3177275 867 * Call fn for each reference in dir that has index in the range
432ad41e
MH
868 * offset <= index < dir->nr. Recurse into subdirectories that are in
869 * that index range, sorting them before iterating. This function
624cac35
MH
870 * does not sort dir itself; it should be sorted beforehand. fn is
871 * called for all references, including broken ones.
c36b5bc2 872 */
624cac35
MH
873static int do_for_each_entry_in_dir(struct ref_dir *dir, int offset,
874 each_ref_entry_fn fn, void *cb_data)
c36b5bc2
MH
875{
876 int i;
d3177275
MH
877 assert(dir->sorted == dir->nr);
878 for (i = offset; i < dir->nr; i++) {
432ad41e
MH
879 struct ref_entry *entry = dir->entries[i];
880 int retval;
881 if (entry->flag & REF_DIR) {
d7826d54
MH
882 struct ref_dir *subdir = get_ref_dir(entry);
883 sort_ref_dir(subdir);
624cac35 884 retval = do_for_each_entry_in_dir(subdir, 0, fn, cb_data);
432ad41e 885 } else {
624cac35 886 retval = fn(entry, cb_data);
432ad41e 887 }
c36b5bc2
MH
888 if (retval)
889 return retval;
890 }
891 return 0;
892}
893
b3fd060f 894/*
d3177275 895 * Call fn for each reference in the union of dir1 and dir2, in order
432ad41e
MH
896 * by refname. Recurse into subdirectories. If a value entry appears
897 * in both dir1 and dir2, then only process the version that is in
898 * dir2. The input dirs must already be sorted, but subdirs will be
624cac35
MH
899 * sorted as needed. fn is called for all references, including
900 * broken ones.
b3fd060f 901 */
624cac35
MH
902static int do_for_each_entry_in_dirs(struct ref_dir *dir1,
903 struct ref_dir *dir2,
904 each_ref_entry_fn fn, void *cb_data)
b3fd060f
MH
905{
906 int retval;
907 int i1 = 0, i2 = 0;
908
d3177275
MH
909 assert(dir1->sorted == dir1->nr);
910 assert(dir2->sorted == dir2->nr);
432ad41e
MH
911 while (1) {
912 struct ref_entry *e1, *e2;
913 int cmp;
914 if (i1 == dir1->nr) {
624cac35 915 return do_for_each_entry_in_dir(dir2, i2, fn, cb_data);
432ad41e
MH
916 }
917 if (i2 == dir2->nr) {
624cac35 918 return do_for_each_entry_in_dir(dir1, i1, fn, cb_data);
432ad41e
MH
919 }
920 e1 = dir1->entries[i1];
921 e2 = dir2->entries[i2];
922 cmp = strcmp(e1->name, e2->name);
923 if (cmp == 0) {
924 if ((e1->flag & REF_DIR) && (e2->flag & REF_DIR)) {
925 /* Both are directories; descend them in parallel. */
d7826d54
MH
926 struct ref_dir *subdir1 = get_ref_dir(e1);
927 struct ref_dir *subdir2 = get_ref_dir(e2);
928 sort_ref_dir(subdir1);
929 sort_ref_dir(subdir2);
624cac35
MH
930 retval = do_for_each_entry_in_dirs(
931 subdir1, subdir2, fn, cb_data);
432ad41e
MH
932 i1++;
933 i2++;
934 } else if (!(e1->flag & REF_DIR) && !(e2->flag & REF_DIR)) {
935 /* Both are references; ignore the one from dir1. */
624cac35 936 retval = fn(e2, cb_data);
432ad41e
MH
937 i1++;
938 i2++;
939 } else {
940 die("conflict between reference and directory: %s",
941 e1->name);
942 }
b3fd060f 943 } else {
432ad41e
MH
944 struct ref_entry *e;
945 if (cmp < 0) {
946 e = e1;
b3fd060f 947 i1++;
432ad41e
MH
948 } else {
949 e = e2;
950 i2++;
951 }
952 if (e->flag & REF_DIR) {
d7826d54
MH
953 struct ref_dir *subdir = get_ref_dir(e);
954 sort_ref_dir(subdir);
624cac35
MH
955 retval = do_for_each_entry_in_dir(
956 subdir, 0, fn, cb_data);
432ad41e 957 } else {
624cac35 958 retval = fn(e, cb_data);
b3fd060f
MH
959 }
960 }
961 if (retval)
962 return retval;
963 }
b3fd060f
MH
964}
965
98eeb09e
JK
966/*
967 * Load all of the refs from the dir into our in-memory cache. The hard work
968 * of loading loose refs is done by get_ref_dir(), so we just need to recurse
969 * through all of the sub-directories. We do not even need to care about
970 * sorting, as traversal order does not matter to us.
971 */
972static void prime_ref_dir(struct ref_dir *dir)
973{
974 int i;
975 for (i = 0; i < dir->nr; i++) {
976 struct ref_entry *entry = dir->entries[i];
977 if (entry->flag & REF_DIR)
978 prime_ref_dir(get_ref_dir(entry));
979 }
980}
d66da478
MH
981/*
982 * Return true iff refname1 and refname2 conflict with each other.
983 * Two reference names conflict if one of them exactly matches the
984 * leading components of the other; e.g., "foo/bar" conflicts with
985 * both "foo" and with "foo/bar/baz" but not with "foo/bar" or
986 * "foo/barbados".
987 */
988static int names_conflict(const char *refname1, const char *refname2)
989{
5a4d4947
MH
990 for (; *refname1 && *refname1 == *refname2; refname1++, refname2++)
991 ;
992 return (*refname1 == '\0' && *refname2 == '/')
993 || (*refname1 == '/' && *refname2 == '\0');
994}
995
996struct name_conflict_cb {
997 const char *refname;
998 const char *oldrefname;
999 const char *conflicting_refname;
1000};
1001
624cac35 1002static int name_conflict_fn(struct ref_entry *entry, void *cb_data)
5a4d4947
MH
1003{
1004 struct name_conflict_cb *data = (struct name_conflict_cb *)cb_data;
624cac35 1005 if (data->oldrefname && !strcmp(data->oldrefname, entry->name))
5a4d4947 1006 return 0;
624cac35
MH
1007 if (names_conflict(data->refname, entry->name)) {
1008 data->conflicting_refname = entry->name;
5a4d4947 1009 return 1;
d66da478 1010 }
5a4d4947 1011 return 0;
d66da478
MH
1012}
1013
bc5fd6d3
MH
1014/*
1015 * Return true iff a reference named refname could be created without
624cac35 1016 * conflicting with the name of an existing reference in dir. If
5a4d4947
MH
1017 * oldrefname is non-NULL, ignore potential conflicts with oldrefname
1018 * (e.g., because oldrefname is scheduled for deletion in the same
bc5fd6d3
MH
1019 * operation).
1020 */
1021static int is_refname_available(const char *refname, const char *oldrefname,
d3177275 1022 struct ref_dir *dir)
bc5fd6d3 1023{
5a4d4947
MH
1024 struct name_conflict_cb data;
1025 data.refname = refname;
1026 data.oldrefname = oldrefname;
1027 data.conflicting_refname = NULL;
1028
d3177275 1029 sort_ref_dir(dir);
624cac35 1030 if (do_for_each_entry_in_dir(dir, 0, name_conflict_fn, &data)) {
5a4d4947
MH
1031 error("'%s' exists; cannot create '%s'",
1032 data.conflicting_refname, refname);
1033 return 0;
bc5fd6d3
MH
1034 }
1035 return 1;
e1e22e37
LT
1036}
1037
2fff7812
MH
1038struct packed_ref_cache {
1039 struct ref_entry *root;
9f69d297 1040
5f5e2a88
MH
1041 /*
1042 * Count of references to the data structure in this instance,
1043 * including the pointer from ref_cache::packed if any. The
1044 * data will not be freed as long as the reference count is
1045 * nonzero.
1046 */
1047 unsigned int referrers;
1048
9f69d297
MH
1049 /*
1050 * Iff the packed-refs file associated with this instance is
1051 * currently locked for writing, this points at the associated
4f6b83e3
MH
1052 * lock (which is owned by somebody else). The referrer count
1053 * is also incremented when the file is locked and decremented
1054 * when it is unlocked.
9f69d297
MH
1055 */
1056 struct lock_file *lock;
ca919930
JK
1057
1058 /* The metadata from when this packed-refs cache was read */
1059 struct stat_validity validity;
2fff7812
MH
1060};
1061
5e290ff7
JH
1062/*
1063 * Future: need to be in "struct repository"
1064 * when doing a full libification.
1065 */
79c7ca54
MH
1066static struct ref_cache {
1067 struct ref_cache *next;
d12229f5 1068 struct ref_entry *loose;
2fff7812 1069 struct packed_ref_cache *packed;
9da31cb0
MH
1070 /*
1071 * The submodule name, or "" for the main repo. We allocate
1072 * length 1 rather than FLEX_ARRAY so that the main ref_cache
1073 * is initialized correctly.
1074 */
1075 char name[1];
1076} ref_cache, *submodule_ref_caches;
0e88c130 1077
9f69d297
MH
1078/* Lock used for the main packed-refs file: */
1079static struct lock_file packlock;
1080
5f5e2a88
MH
1081/*
1082 * Increment the reference count of *packed_refs.
1083 */
1084static void acquire_packed_ref_cache(struct packed_ref_cache *packed_refs)
1085{
1086 packed_refs->referrers++;
1087}
1088
1089/*
1090 * Decrease the reference count of *packed_refs. If it goes to zero,
1091 * free *packed_refs and return true; otherwise return false.
1092 */
1093static int release_packed_ref_cache(struct packed_ref_cache *packed_refs)
1094{
1095 if (!--packed_refs->referrers) {
1096 free_ref_entry(packed_refs->root);
ca919930 1097 stat_validity_clear(&packed_refs->validity);
5f5e2a88
MH
1098 free(packed_refs);
1099 return 1;
1100 } else {
1101 return 0;
1102 }
1103}
1104
760c4512 1105static void clear_packed_ref_cache(struct ref_cache *refs)
e1e22e37 1106{
d12229f5 1107 if (refs->packed) {
5f5e2a88
MH
1108 struct packed_ref_cache *packed_refs = refs->packed;
1109
1110 if (packed_refs->lock)
9f69d297 1111 die("internal error: packed-ref cache cleared while locked");
d12229f5 1112 refs->packed = NULL;
5f5e2a88 1113 release_packed_ref_cache(packed_refs);
d12229f5 1114 }
5e290ff7 1115}
e1e22e37 1116
760c4512
MH
1117static void clear_loose_ref_cache(struct ref_cache *refs)
1118{
d12229f5
MH
1119 if (refs->loose) {
1120 free_ref_entry(refs->loose);
1121 refs->loose = NULL;
1122 }
760c4512
MH
1123}
1124
79c7ca54 1125static struct ref_cache *create_ref_cache(const char *submodule)
e5dbf605 1126{
ce40979c 1127 int len;
79c7ca54 1128 struct ref_cache *refs;
ce40979c
MH
1129 if (!submodule)
1130 submodule = "";
1131 len = strlen(submodule) + 1;
79c7ca54 1132 refs = xcalloc(1, sizeof(struct ref_cache) + len);
ce40979c 1133 memcpy(refs->name, submodule, len);
e5dbf605
MH
1134 return refs;
1135}
1136
4349a668 1137/*
79c7ca54 1138 * Return a pointer to a ref_cache for the specified submodule. For
4349a668
MH
1139 * the main repository, use submodule==NULL. The returned structure
1140 * will be allocated and initialized but not necessarily populated; it
1141 * should not be freed.
1142 */
79c7ca54 1143static struct ref_cache *get_ref_cache(const char *submodule)
4349a668 1144{
9da31cb0
MH
1145 struct ref_cache *refs;
1146
1147 if (!submodule || !*submodule)
1148 return &ref_cache;
1149
1150 for (refs = submodule_ref_caches; refs; refs = refs->next)
0e88c130
MH
1151 if (!strcmp(submodule, refs->name))
1152 return refs;
0e88c130 1153
79c7ca54 1154 refs = create_ref_cache(submodule);
9da31cb0
MH
1155 refs->next = submodule_ref_caches;
1156 submodule_ref_caches = refs;
0e88c130 1157 return refs;
4349a668
MH
1158}
1159
3feb4f0c
MH
1160/* The length of a peeled reference line in packed-refs, including EOL: */
1161#define PEELED_LINE_LENGTH 42
1162
694b7a19
MH
1163/*
1164 * The packed-refs header line that we write out. Perhaps other
1165 * traits will be added later. The trailing space is required.
1166 */
1167static const char PACKED_REFS_HEADER[] =
1168 "# pack-refs with: peeled fully-peeled \n";
1169
bc5fd6d3
MH
1170/*
1171 * Parse one line from a packed-refs file. Write the SHA1 to sha1.
1172 * Return a pointer to the refname within the line (null-terminated),
1173 * or NULL if there was a problem.
1174 */
1175static const char *parse_ref_line(char *line, unsigned char *sha1)
1176{
1177 /*
1178 * 42: the answer to everything.
1179 *
1180 * In this case, it happens to be the answer to
1181 * 40 (length of sha1 hex representation)
1182 * +1 (space in between hex and name)
1183 * +1 (newline at the end of the line)
1184 */
1185 int len = strlen(line) - 42;
1186
1187 if (len <= 0)
1188 return NULL;
1189 if (get_sha1_hex(line, sha1) < 0)
1190 return NULL;
1191 if (!isspace(line[40]))
1192 return NULL;
1193 line += 41;
1194 if (isspace(*line))
1195 return NULL;
1196 if (line[len] != '\n')
1197 return NULL;
1198 line[len] = 0;
1199
1200 return line;
1201}
1202
c29c46fa
MH
1203/*
1204 * Read f, which is a packed-refs file, into dir.
1205 *
1206 * A comment line of the form "# pack-refs with: " may contain zero or
1207 * more traits. We interpret the traits as follows:
1208 *
1209 * No traits:
1210 *
1211 * Probably no references are peeled. But if the file contains a
1212 * peeled value for a reference, we will use it.
1213 *
1214 * peeled:
1215 *
1216 * References under "refs/tags/", if they *can* be peeled, *are*
1217 * peeled in this file. References outside of "refs/tags/" are
1218 * probably not peeled even if they could have been, but if we find
1219 * a peeled value for such a reference we will use it.
1220 *
1221 * fully-peeled:
1222 *
1223 * All references in the file that can be peeled are peeled.
1224 * Inversely (and this is more important), any references in the
1225 * file for which no peeled value is recorded is not peelable. This
1226 * trait should typically be written alongside "peeled" for
1227 * compatibility with older clients, but we do not require it
1228 * (i.e., "peeled" is a no-op if "fully-peeled" is set).
1229 */
d3177275 1230static void read_packed_refs(FILE *f, struct ref_dir *dir)
f4204ab9 1231{
e9c4c111 1232 struct ref_entry *last = NULL;
f4204ab9 1233 char refline[PATH_MAX];
c29c46fa 1234 enum { PEELED_NONE, PEELED_TAGS, PEELED_FULLY } peeled = PEELED_NONE;
f4204ab9
JH
1235
1236 while (fgets(refline, sizeof(refline), f)) {
1237 unsigned char sha1[20];
dfefa935 1238 const char *refname;
f4204ab9
JH
1239 static const char header[] = "# pack-refs with:";
1240
1241 if (!strncmp(refline, header, sizeof(header)-1)) {
1242 const char *traits = refline + sizeof(header) - 1;
c29c46fa
MH
1243 if (strstr(traits, " fully-peeled "))
1244 peeled = PEELED_FULLY;
1245 else if (strstr(traits, " peeled "))
1246 peeled = PEELED_TAGS;
f4204ab9
JH
1247 /* perhaps other traits later as well */
1248 continue;
1249 }
1250
dfefa935
MH
1251 refname = parse_ref_line(refline, sha1);
1252 if (refname) {
c29c46fa
MH
1253 last = create_ref_entry(refname, sha1, REF_ISPACKED, 1);
1254 if (peeled == PEELED_FULLY ||
59556548 1255 (peeled == PEELED_TAGS && starts_with(refname, "refs/tags/")))
c29c46fa 1256 last->flag |= REF_KNOWS_PEELED;
d3177275 1257 add_ref(dir, last);
f4204ab9
JH
1258 continue;
1259 }
1260 if (last &&
1261 refline[0] == '^' &&
3feb4f0c
MH
1262 strlen(refline) == PEELED_LINE_LENGTH &&
1263 refline[PEELED_LINE_LENGTH - 1] == '\n' &&
c29c46fa 1264 !get_sha1_hex(refline + 1, sha1)) {
593f1bb8 1265 hashcpy(last->u.value.peeled, sha1);
c29c46fa
MH
1266 /*
1267 * Regardless of what the file header said,
1268 * we definitely know the value of *this*
1269 * reference:
1270 */
1271 last->flag |= REF_KNOWS_PEELED;
1272 }
f4204ab9 1273 }
f4204ab9
JH
1274}
1275
2fff7812
MH
1276/*
1277 * Get the packed_ref_cache for the specified ref_cache, creating it
1278 * if necessary.
1279 */
1280static struct packed_ref_cache *get_packed_ref_cache(struct ref_cache *refs)
5e290ff7 1281{
ca919930
JK
1282 const char *packed_refs_file;
1283
1284 if (*refs->name)
1285 packed_refs_file = git_path_submodule(refs->name, "packed-refs");
1286 else
1287 packed_refs_file = git_path("packed-refs");
1288
1289 if (refs->packed &&
1290 !stat_validity_check(&refs->packed->validity, packed_refs_file))
1291 clear_packed_ref_cache(refs);
1292
d12229f5 1293 if (!refs->packed) {
4349a668 1294 FILE *f;
0bad611b 1295
2fff7812 1296 refs->packed = xcalloc(1, sizeof(*refs->packed));
5f5e2a88 1297 acquire_packed_ref_cache(refs->packed);
2fff7812 1298 refs->packed->root = create_dir_entry(refs, "", 0, 0);
4349a668 1299 f = fopen(packed_refs_file, "r");
e1e22e37 1300 if (f) {
ca919930 1301 stat_validity_update(&refs->packed->validity, fileno(f));
2fff7812 1302 read_packed_refs(f, get_ref_dir(refs->packed->root));
e1e22e37 1303 fclose(f);
e1e22e37 1304 }
e1e22e37 1305 }
2fff7812
MH
1306 return refs->packed;
1307}
1308
1309static struct ref_dir *get_packed_ref_dir(struct packed_ref_cache *packed_ref_cache)
1310{
1311 return get_ref_dir(packed_ref_cache->root);
1312}
1313
1314static struct ref_dir *get_packed_refs(struct ref_cache *refs)
1315{
1316 return get_packed_ref_dir(get_packed_ref_cache(refs));
e1e22e37
LT
1317}
1318
30249ee6
MH
1319void add_packed_ref(const char *refname, const unsigned char *sha1)
1320{
9f69d297
MH
1321 struct packed_ref_cache *packed_ref_cache =
1322 get_packed_ref_cache(&ref_cache);
1323
1324 if (!packed_ref_cache->lock)
1325 die("internal error: packed refs not locked");
1326 add_ref(get_packed_ref_dir(packed_ref_cache),
9da31cb0 1327 create_ref_entry(refname, sha1, REF_ISPACKED, 1));
30249ee6
MH
1328}
1329
abc39098 1330/*
28e6a34e
MH
1331 * Read the loose references from the namespace dirname into dir
1332 * (without recursing). dirname must end with '/'. dir must be the
1333 * directory entry corresponding to dirname.
abc39098 1334 */
423a1afc 1335static void read_loose_refs(const char *dirname, struct ref_dir *dir)
e1e22e37 1336{
423a1afc 1337 struct ref_cache *refs = dir->ref_cache;
d3177275 1338 DIR *d;
0bad611b 1339 const char *path;
d5fdae67 1340 struct dirent *de;
abc39098 1341 int dirnamelen = strlen(dirname);
72b64b44 1342 struct strbuf refname;
0bad611b 1343
3b124823 1344 if (*refs->name)
66a3d20b 1345 path = git_path_submodule(refs->name, "%s", dirname);
0bad611b 1346 else
66a3d20b 1347 path = git_path("%s", dirname);
0bad611b 1348
d3177275 1349 d = opendir(path);
d5fdae67
MH
1350 if (!d)
1351 return;
1352
66a3d20b
MH
1353 strbuf_init(&refname, dirnamelen + 257);
1354 strbuf_add(&refname, dirname, dirnamelen);
d5fdae67
MH
1355
1356 while ((de = readdir(d)) != NULL) {
1357 unsigned char sha1[20];
1358 struct stat st;
1359 int flag;
d5fdae67
MH
1360 const char *refdir;
1361
1362 if (de->d_name[0] == '.')
1363 continue;
2975c770 1364 if (ends_with(de->d_name, ".lock"))
d5fdae67 1365 continue;
72b64b44 1366 strbuf_addstr(&refname, de->d_name);
d5fdae67 1367 refdir = *refs->name
72b64b44
MH
1368 ? git_path_submodule(refs->name, "%s", refname.buf)
1369 : git_path("%s", refname.buf);
1370 if (stat(refdir, &st) < 0) {
1371 ; /* silently ignore */
1372 } else if (S_ISDIR(st.st_mode)) {
abc39098 1373 strbuf_addch(&refname, '/');
28e6a34e 1374 add_entry_to_dir(dir,
b9146f51
RS
1375 create_dir_entry(refs, refname.buf,
1376 refname.len, 1));
72b64b44 1377 } else {
3b124823 1378 if (*refs->name) {
f8948e2f 1379 hashclr(sha1);
0bad611b 1380 flag = 0;
72b64b44 1381 if (resolve_gitlink_ref(refs->name, refname.buf, sha1) < 0) {
0bad611b 1382 hashclr(sha1);
98ac34b2 1383 flag |= REF_ISBROKEN;
0bad611b 1384 }
72b64b44 1385 } else if (read_ref_full(refname.buf, sha1, 1, &flag)) {
09116a1c
JH
1386 hashclr(sha1);
1387 flag |= REF_ISBROKEN;
1388 }
9f2fb4a3
MH
1389 add_entry_to_dir(dir,
1390 create_ref_entry(refname.buf, sha1, flag, 1));
e1e22e37 1391 }
66a3d20b 1392 strbuf_setlen(&refname, dirnamelen);
e1e22e37 1393 }
72b64b44 1394 strbuf_release(&refname);
d5fdae67 1395 closedir(d);
e1e22e37
LT
1396}
1397
d3177275 1398static struct ref_dir *get_loose_refs(struct ref_cache *refs)
e1e22e37 1399{
d12229f5 1400 if (!refs->loose) {
28e6a34e
MH
1401 /*
1402 * Mark the top-level directory complete because we
1403 * are about to read the only subdirectory that can
1404 * hold references:
1405 */
b9146f51 1406 refs->loose = create_dir_entry(refs, "", 0, 0);
28e6a34e
MH
1407 /*
1408 * Create an incomplete entry for "refs/":
1409 */
1410 add_entry_to_dir(get_ref_dir(refs->loose),
b9146f51 1411 create_dir_entry(refs, "refs/", 5, 1));
e1e22e37 1412 }
d7826d54 1413 return get_ref_dir(refs->loose);
e1e22e37
LT
1414}
1415
ca8db142
LT
1416/* We allow "recursive" symbolic refs. Only within reason, though */
1417#define MAXDEPTH 5
0ebde32c
LT
1418#define MAXREFLEN (1024)
1419
e5fa45c1
JH
1420/*
1421 * Called by resolve_gitlink_ref_recursive() after it failed to read
b0626608
MH
1422 * from the loose refs in ref_cache refs. Find <refname> in the
1423 * packed-refs file for the submodule.
e5fa45c1 1424 */
b0626608 1425static int resolve_gitlink_packed_ref(struct ref_cache *refs,
85be1fe3 1426 const char *refname, unsigned char *sha1)
0ebde32c 1427{
2c5c66be 1428 struct ref_entry *ref;
d3177275 1429 struct ref_dir *dir = get_packed_refs(refs);
0ebde32c 1430
432ad41e 1431 ref = find_ref(dir, refname);
b0626608
MH
1432 if (ref == NULL)
1433 return -1;
1434
50546b15 1435 hashcpy(sha1, ref->u.value.sha1);
b0626608 1436 return 0;
0ebde32c
LT
1437}
1438
b0626608 1439static int resolve_gitlink_ref_recursive(struct ref_cache *refs,
85be1fe3 1440 const char *refname, unsigned char *sha1,
dfefa935 1441 int recursion)
0ebde32c 1442{
064d51dc 1443 int fd, len;
0ebde32c 1444 char buffer[128], *p;
064d51dc 1445 char *path;
0ebde32c 1446
064d51dc 1447 if (recursion > MAXDEPTH || strlen(refname) > MAXREFLEN)
0ebde32c 1448 return -1;
064d51dc
MH
1449 path = *refs->name
1450 ? git_path_submodule(refs->name, "%s", refname)
1451 : git_path("%s", refname);
1452 fd = open(path, O_RDONLY);
0ebde32c 1453 if (fd < 0)
b0626608 1454 return resolve_gitlink_packed_ref(refs, refname, sha1);
0ebde32c
LT
1455
1456 len = read(fd, buffer, sizeof(buffer)-1);
1457 close(fd);
1458 if (len < 0)
1459 return -1;
1460 while (len && isspace(buffer[len-1]))
1461 len--;
1462 buffer[len] = 0;
1463
1464 /* Was it a detached head or an old-fashioned symlink? */
85be1fe3 1465 if (!get_sha1_hex(buffer, sha1))
0ebde32c
LT
1466 return 0;
1467
1468 /* Symref? */
1469 if (strncmp(buffer, "ref:", 4))
1470 return -1;
1471 p = buffer + 4;
1472 while (isspace(*p))
1473 p++;
1474
064d51dc 1475 return resolve_gitlink_ref_recursive(refs, p, sha1, recursion+1);
0ebde32c
LT
1476}
1477
85be1fe3 1478int resolve_gitlink_ref(const char *path, const char *refname, unsigned char *sha1)
0ebde32c
LT
1479{
1480 int len = strlen(path), retval;
064d51dc 1481 char *submodule;
b0626608 1482 struct ref_cache *refs;
0ebde32c
LT
1483
1484 while (len && path[len-1] == '/')
1485 len--;
1486 if (!len)
1487 return -1;
b0626608
MH
1488 submodule = xstrndup(path, len);
1489 refs = get_ref_cache(submodule);
1490 free(submodule);
1491
064d51dc 1492 retval = resolve_gitlink_ref_recursive(refs, refname, sha1, 0);
0ebde32c
LT
1493 return retval;
1494}
ca8db142 1495
4886b89f 1496/*
63331581
MH
1497 * Return the ref_entry for the given refname from the packed
1498 * references. If it does not exist, return NULL.
4886b89f 1499 */
63331581 1500static struct ref_entry *get_packed_ref(const char *refname)
c224ca7f 1501{
9da31cb0 1502 return find_ref(get_packed_refs(&ref_cache), refname);
c224ca7f
MH
1503}
1504
47f534bf
MH
1505/*
1506 * A loose ref file doesn't exist; check for a packed ref. The
1507 * options are forwarded from resolve_safe_unsafe().
1508 */
1509static const char *handle_missing_loose_ref(const char *refname,
1510 unsigned char *sha1,
1511 int reading,
1512 int *flag)
1513{
1514 struct ref_entry *entry;
1515
1516 /*
1517 * The loose reference file does not exist; check for a packed
1518 * reference.
1519 */
1520 entry = get_packed_ref(refname);
1521 if (entry) {
1522 hashcpy(sha1, entry->u.value.sha1);
1523 if (flag)
1524 *flag |= REF_ISPACKED;
1525 return refname;
1526 }
1527 /* The reference is not a packed reference, either. */
1528 if (reading) {
1529 return NULL;
1530 } else {
1531 hashclr(sha1);
1532 return refname;
1533 }
1534}
1535
76d70dc0 1536/* This function needs to return a meaningful errno on failure */
8d68493f 1537const char *resolve_ref_unsafe(const char *refname, unsigned char *sha1, int reading, int *flag)
8a65ff76 1538{
0104ca09
HO
1539 int depth = MAXDEPTH;
1540 ssize_t len;
a876ed83 1541 char buffer[256];
dfefa935 1542 static char refname_buffer[256];
ca8db142 1543
8da19775
JH
1544 if (flag)
1545 *flag = 0;
1546
76d70dc0
RS
1547 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
1548 errno = EINVAL;
8384d788 1549 return NULL;
76d70dc0 1550 }
8384d788 1551
a876ed83 1552 for (;;) {
55956350 1553 char path[PATH_MAX];
a876ed83
JH
1554 struct stat st;
1555 char *buf;
1556 int fd;
8a65ff76 1557
76d70dc0
RS
1558 if (--depth < 0) {
1559 errno = ELOOP;
a876ed83 1560 return NULL;
76d70dc0 1561 }
ca8db142 1562
dfefa935 1563 git_snpath(path, sizeof(path), "%s", refname);
c224ca7f 1564
fcb7c762
MH
1565 /*
1566 * We might have to loop back here to avoid a race
1567 * condition: first we lstat() the file, then we try
1568 * to read it as a link or as a file. But if somebody
1569 * changes the type of the file (file <-> directory
1570 * <-> symlink) between the lstat() and reading, then
1571 * we don't want to report that as an error but rather
1572 * try again starting with the lstat().
1573 */
1574 stat_ref:
a876ed83 1575 if (lstat(path, &st) < 0) {
47f534bf
MH
1576 if (errno == ENOENT)
1577 return handle_missing_loose_ref(refname, sha1,
1578 reading, flag);
1579 else
a876ed83 1580 return NULL;
a876ed83 1581 }
ca8db142 1582
a876ed83
JH
1583 /* Follow "normalized" - ie "refs/.." symlinks by hand */
1584 if (S_ISLNK(st.st_mode)) {
1585 len = readlink(path, buffer, sizeof(buffer)-1);
fcb7c762
MH
1586 if (len < 0) {
1587 if (errno == ENOENT || errno == EINVAL)
1588 /* inconsistent with lstat; retry */
1589 goto stat_ref;
1590 else
1591 return NULL;
1592 }
b54cb795 1593 buffer[len] = 0;
59556548 1594 if (starts_with(buffer, "refs/") &&
1f58a038 1595 !check_refname_format(buffer, 0)) {
dfefa935
MH
1596 strcpy(refname_buffer, buffer);
1597 refname = refname_buffer;
8da19775
JH
1598 if (flag)
1599 *flag |= REF_ISSYMREF;
a876ed83
JH
1600 continue;
1601 }
ca8db142 1602 }
a876ed83 1603
7a21632f
DS
1604 /* Is it a directory? */
1605 if (S_ISDIR(st.st_mode)) {
1606 errno = EISDIR;
1607 return NULL;
1608 }
1609
a876ed83
JH
1610 /*
1611 * Anything else, just open it and try to use it as
1612 * a ref
1613 */
1614 fd = open(path, O_RDONLY);
fcb7c762
MH
1615 if (fd < 0) {
1616 if (errno == ENOENT)
1617 /* inconsistent with lstat; retry */
1618 goto stat_ref;
1619 else
1620 return NULL;
1621 }
93d26e4c 1622 len = read_in_full(fd, buffer, sizeof(buffer)-1);
76d70dc0
RS
1623 if (len < 0) {
1624 int save_errno = errno;
1625 close(fd);
1626 errno = save_errno;
28775050 1627 return NULL;
76d70dc0
RS
1628 }
1629 close(fd);
28775050
MH
1630 while (len && isspace(buffer[len-1]))
1631 len--;
1632 buffer[len] = '\0';
a876ed83
JH
1633
1634 /*
1635 * Is it a symbolic ref?
1636 */
59556548 1637 if (!starts_with(buffer, "ref:")) {
2884c06a
MH
1638 /*
1639 * Please note that FETCH_HEAD has a second
1640 * line containing other data.
1641 */
1642 if (get_sha1_hex(buffer, sha1) ||
1643 (buffer[40] != '\0' && !isspace(buffer[40]))) {
1644 if (flag)
1645 *flag |= REF_ISBROKEN;
76d70dc0 1646 errno = EINVAL;
2884c06a
MH
1647 return NULL;
1648 }
1649 return refname;
1650 }
55956350
JH
1651 if (flag)
1652 *flag |= REF_ISSYMREF;
a876ed83 1653 buf = buffer + 4;
28775050
MH
1654 while (isspace(*buf))
1655 buf++;
313fb010 1656 if (check_refname_format(buf, REFNAME_ALLOW_ONELEVEL)) {
55956350
JH
1657 if (flag)
1658 *flag |= REF_ISBROKEN;
76d70dc0 1659 errno = EINVAL;
313fb010
MH
1660 return NULL;
1661 }
dfefa935 1662 refname = strcpy(refname_buffer, buf);
8a65ff76 1663 }
a876ed83
JH
1664}
1665
96ec7b1e
NTND
1666char *resolve_refdup(const char *ref, unsigned char *sha1, int reading, int *flag)
1667{
8cad4744 1668 const char *ret = resolve_ref_unsafe(ref, sha1, reading, flag);
96ec7b1e
NTND
1669 return ret ? xstrdup(ret) : NULL;
1670}
1671
d08bae7e
IL
1672/* The argument to filter_refs */
1673struct ref_filter {
1674 const char *pattern;
1675 each_ref_fn *fn;
1676 void *cb_data;
1677};
1678
dfefa935 1679int read_ref_full(const char *refname, unsigned char *sha1, int reading, int *flags)
a876ed83 1680{
8d68493f 1681 if (resolve_ref_unsafe(refname, sha1, reading, flags))
a876ed83
JH
1682 return 0;
1683 return -1;
8a65ff76
LT
1684}
1685
dfefa935 1686int read_ref(const char *refname, unsigned char *sha1)
c6893323 1687{
dfefa935 1688 return read_ref_full(refname, sha1, 1, NULL);
c6893323
NTND
1689}
1690
bc5fd6d3 1691int ref_exists(const char *refname)
ef06b918 1692{
bc5fd6d3
MH
1693 unsigned char sha1[20];
1694 return !!resolve_ref_unsafe(refname, sha1, 1, NULL);
ef06b918
JH
1695}
1696
85be1fe3 1697static int filter_refs(const char *refname, const unsigned char *sha1, int flags,
dfefa935 1698 void *data)
d08bae7e
IL
1699{
1700 struct ref_filter *filter = (struct ref_filter *)data;
eb07894f 1701 if (wildmatch(filter->pattern, refname, 0, NULL))
d08bae7e 1702 return 0;
85be1fe3 1703 return filter->fn(refname, sha1, flags, filter->cb_data);
d08bae7e
IL
1704}
1705
68cf8703
MH
1706enum peel_status {
1707 /* object was peeled successfully: */
1708 PEEL_PEELED = 0,
1709
1710 /*
1711 * object cannot be peeled because the named object (or an
1712 * object referred to by a tag in the peel chain), does not
1713 * exist.
1714 */
1715 PEEL_INVALID = -1,
1716
1717 /* object cannot be peeled because it is not a tag: */
9a489f3c
MH
1718 PEEL_NON_TAG = -2,
1719
1720 /* ref_entry contains no peeled value because it is a symref: */
1721 PEEL_IS_SYMREF = -3,
1722
1723 /*
1724 * ref_entry cannot be peeled because it is broken (i.e., the
1725 * symbolic reference cannot even be resolved to an object
1726 * name):
1727 */
1728 PEEL_BROKEN = -4
68cf8703
MH
1729};
1730
cb2ae1c4
MH
1731/*
1732 * Peel the named object; i.e., if the object is a tag, resolve the
68cf8703
MH
1733 * tag recursively until a non-tag is found. If successful, store the
1734 * result to sha1 and return PEEL_PEELED. If the object is not a tag
1735 * or is not valid, return PEEL_NON_TAG or PEEL_INVALID, respectively,
1736 * and leave sha1 unchanged.
cb2ae1c4 1737 */
68cf8703 1738static enum peel_status peel_object(const unsigned char *name, unsigned char *sha1)
cb2ae1c4
MH
1739{
1740 struct object *o = lookup_unknown_object(name);
1741
1742 if (o->type == OBJ_NONE) {
1743 int type = sha1_object_info(name, NULL);
8ff226a9 1744 if (type < 0 || !object_as_type(o, type, 0))
68cf8703 1745 return PEEL_INVALID;
cb2ae1c4
MH
1746 }
1747
1748 if (o->type != OBJ_TAG)
68cf8703 1749 return PEEL_NON_TAG;
cb2ae1c4
MH
1750
1751 o = deref_tag_noverify(o);
1752 if (!o)
68cf8703 1753 return PEEL_INVALID;
cb2ae1c4
MH
1754
1755 hashcpy(sha1, o->sha1);
68cf8703 1756 return PEEL_PEELED;
cb2ae1c4
MH
1757}
1758
9a489f3c 1759/*
f85354b5
MH
1760 * Peel the entry (if possible) and return its new peel_status. If
1761 * repeel is true, re-peel the entry even if there is an old peeled
1762 * value that is already stored in it.
694b7a19
MH
1763 *
1764 * It is OK to call this function with a packed reference entry that
1765 * might be stale and might even refer to an object that has since
1766 * been garbage-collected. In such a case, if the entry has
1767 * REF_KNOWS_PEELED then leave the status unchanged and return
1768 * PEEL_PEELED or PEEL_NON_TAG; otherwise, return PEEL_INVALID.
9a489f3c 1769 */
f85354b5 1770static enum peel_status peel_entry(struct ref_entry *entry, int repeel)
9a489f3c
MH
1771{
1772 enum peel_status status;
1773
f85354b5
MH
1774 if (entry->flag & REF_KNOWS_PEELED) {
1775 if (repeel) {
1776 entry->flag &= ~REF_KNOWS_PEELED;
1777 hashclr(entry->u.value.peeled);
1778 } else {
1779 return is_null_sha1(entry->u.value.peeled) ?
1780 PEEL_NON_TAG : PEEL_PEELED;
1781 }
1782 }
9a489f3c
MH
1783 if (entry->flag & REF_ISBROKEN)
1784 return PEEL_BROKEN;
1785 if (entry->flag & REF_ISSYMREF)
1786 return PEEL_IS_SYMREF;
1787
1788 status = peel_object(entry->u.value.sha1, entry->u.value.peeled);
1789 if (status == PEEL_PEELED || status == PEEL_NON_TAG)
1790 entry->flag |= REF_KNOWS_PEELED;
1791 return status;
1792}
1793
dfefa935 1794int peel_ref(const char *refname, unsigned char *sha1)
cf0adba7
JH
1795{
1796 int flag;
1797 unsigned char base[20];
cf0adba7 1798
dfefa935 1799 if (current_ref && (current_ref->name == refname
9a489f3c 1800 || !strcmp(current_ref->name, refname))) {
f85354b5 1801 if (peel_entry(current_ref, 0))
9a489f3c
MH
1802 return -1;
1803 hashcpy(sha1, current_ref->u.value.peeled);
1804 return 0;
0ae91be0
SP
1805 }
1806
dfefa935 1807 if (read_ref_full(refname, base, 1, &flag))
cf0adba7
JH
1808 return -1;
1809
9a489f3c
MH
1810 /*
1811 * If the reference is packed, read its ref_entry from the
1812 * cache in the hope that we already know its peeled value.
1813 * We only try this optimization on packed references because
1814 * (a) forcing the filling of the loose reference cache could
1815 * be expensive and (b) loose references anyway usually do not
1816 * have REF_KNOWS_PEELED.
1817 */
1818 if (flag & REF_ISPACKED) {
f361baeb 1819 struct ref_entry *r = get_packed_ref(refname);
9a489f3c 1820 if (r) {
f85354b5 1821 if (peel_entry(r, 0))
9a489f3c 1822 return -1;
593f1bb8 1823 hashcpy(sha1, r->u.value.peeled);
e9c4c111 1824 return 0;
cf0adba7 1825 }
cf0adba7
JH
1826 }
1827
cb2ae1c4 1828 return peel_object(base, sha1);
cf0adba7
JH
1829}
1830
bc5fd6d3
MH
1831struct warn_if_dangling_data {
1832 FILE *fp;
1833 const char *refname;
e6bea66d 1834 const struct string_list *refnames;
bc5fd6d3
MH
1835 const char *msg_fmt;
1836};
1837
1838static int warn_if_dangling_symref(const char *refname, const unsigned char *sha1,
1839 int flags, void *cb_data)
1840{
1841 struct warn_if_dangling_data *d = cb_data;
1842 const char *resolves_to;
1843 unsigned char junk[20];
1844
1845 if (!(flags & REF_ISSYMREF))
1846 return 0;
1847
1848 resolves_to = resolve_ref_unsafe(refname, junk, 0, NULL);
e6bea66d
JL
1849 if (!resolves_to
1850 || (d->refname
1851 ? strcmp(resolves_to, d->refname)
1852 : !string_list_has_string(d->refnames, resolves_to))) {
bc5fd6d3 1853 return 0;
e6bea66d 1854 }
bc5fd6d3
MH
1855
1856 fprintf(d->fp, d->msg_fmt, refname);
1be65eda 1857 fputc('\n', d->fp);
bc5fd6d3
MH
1858 return 0;
1859}
1860
1861void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname)
1862{
1863 struct warn_if_dangling_data data;
1864
1865 data.fp = fp;
1866 data.refname = refname;
e6bea66d
JL
1867 data.refnames = NULL;
1868 data.msg_fmt = msg_fmt;
1869 for_each_rawref(warn_if_dangling_symref, &data);
1870}
1871
1872void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct string_list *refnames)
1873{
1874 struct warn_if_dangling_data data;
1875
1876 data.fp = fp;
1877 data.refname = NULL;
1878 data.refnames = refnames;
bc5fd6d3
MH
1879 data.msg_fmt = msg_fmt;
1880 for_each_rawref(warn_if_dangling_symref, &data);
1881}
1882
fcce1703 1883/*
65cf102b 1884 * Call fn for each reference in the specified ref_cache, omitting
624cac35
MH
1885 * references not in the containing_dir of base. fn is called for all
1886 * references, including broken ones. If fn ever returns a non-zero
fcce1703
MH
1887 * value, stop the iteration and return that value; otherwise, return
1888 * 0.
1889 */
65cf102b 1890static int do_for_each_entry(struct ref_cache *refs, const char *base,
624cac35 1891 each_ref_entry_fn fn, void *cb_data)
8a65ff76 1892{
98eeb09e
JK
1893 struct packed_ref_cache *packed_ref_cache;
1894 struct ref_dir *loose_dir;
1895 struct ref_dir *packed_dir;
933ac036
MH
1896 int retval = 0;
1897
98eeb09e
JK
1898 /*
1899 * We must make sure that all loose refs are read before accessing the
1900 * packed-refs file; this avoids a race condition in which loose refs
1901 * are migrated to the packed-refs file by a simultaneous process, but
1902 * our in-memory view is from before the migration. get_packed_ref_cache()
1903 * takes care of making sure our view is up to date with what is on
1904 * disk.
1905 */
1906 loose_dir = get_loose_refs(refs);
933ac036 1907 if (base && *base) {
933ac036
MH
1908 loose_dir = find_containing_dir(loose_dir, base, 0);
1909 }
98eeb09e
JK
1910 if (loose_dir)
1911 prime_ref_dir(loose_dir);
1912
1913 packed_ref_cache = get_packed_ref_cache(refs);
8baf2bb9 1914 acquire_packed_ref_cache(packed_ref_cache);
98eeb09e 1915 packed_dir = get_packed_ref_dir(packed_ref_cache);
933ac036
MH
1916 if (base && *base) {
1917 packed_dir = find_containing_dir(packed_dir, base, 0);
933ac036
MH
1918 }
1919
1920 if (packed_dir && loose_dir) {
1921 sort_ref_dir(packed_dir);
1922 sort_ref_dir(loose_dir);
624cac35
MH
1923 retval = do_for_each_entry_in_dirs(
1924 packed_dir, loose_dir, fn, cb_data);
933ac036
MH
1925 } else if (packed_dir) {
1926 sort_ref_dir(packed_dir);
624cac35
MH
1927 retval = do_for_each_entry_in_dir(
1928 packed_dir, 0, fn, cb_data);
933ac036
MH
1929 } else if (loose_dir) {
1930 sort_ref_dir(loose_dir);
624cac35
MH
1931 retval = do_for_each_entry_in_dir(
1932 loose_dir, 0, fn, cb_data);
933ac036
MH
1933 }
1934
8baf2bb9 1935 release_packed_ref_cache(packed_ref_cache);
933ac036 1936 return retval;
8a65ff76
LT
1937}
1938
624cac35 1939/*
65cf102b 1940 * Call fn for each reference in the specified ref_cache for which the
624cac35
MH
1941 * refname begins with base. If trim is non-zero, then trim that many
1942 * characters off the beginning of each refname before passing the
1943 * refname to fn. flags can be DO_FOR_EACH_INCLUDE_BROKEN to include
1944 * broken references in the iteration. If fn ever returns a non-zero
1945 * value, stop the iteration and return that value; otherwise, return
1946 * 0.
1947 */
65cf102b
MH
1948static int do_for_each_ref(struct ref_cache *refs, const char *base,
1949 each_ref_fn fn, int trim, int flags, void *cb_data)
624cac35
MH
1950{
1951 struct ref_entry_cb data;
1952 data.base = base;
1953 data.trim = trim;
1954 data.flags = flags;
1955 data.fn = fn;
1956 data.cb_data = cb_data;
1957
65cf102b 1958 return do_for_each_entry(refs, base, do_one_ref, &data);
624cac35
MH
1959}
1960
0bad611b 1961static int do_head_ref(const char *submodule, each_ref_fn fn, void *cb_data)
723c31fe
LT
1962{
1963 unsigned char sha1[20];
8da19775
JH
1964 int flag;
1965
0bad611b
HV
1966 if (submodule) {
1967 if (resolve_gitlink_ref(submodule, "HEAD", sha1) == 0)
1968 return fn("HEAD", sha1, 0, cb_data);
1969
1970 return 0;
1971 }
1972
c6893323 1973 if (!read_ref_full("HEAD", sha1, 1, &flag))
8da19775 1974 return fn("HEAD", sha1, flag, cb_data);
0bad611b 1975
2f34ba32 1976 return 0;
723c31fe
LT
1977}
1978
0bad611b
HV
1979int head_ref(each_ref_fn fn, void *cb_data)
1980{
1981 return do_head_ref(NULL, fn, cb_data);
1982}
1983
9ef6aeb0
HV
1984int head_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
1985{
1986 return do_head_ref(submodule, fn, cb_data);
1987}
1988
cb5d709f 1989int for_each_ref(each_ref_fn fn, void *cb_data)
8a65ff76 1990{
9da31cb0 1991 return do_for_each_ref(&ref_cache, "", fn, 0, 0, cb_data);
a62be77f
SE
1992}
1993
9ef6aeb0
HV
1994int for_each_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
1995{
65cf102b 1996 return do_for_each_ref(get_ref_cache(submodule), "", fn, 0, 0, cb_data);
a62be77f
SE
1997}
1998
2a8177b6
CC
1999int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data)
2000{
9da31cb0 2001 return do_for_each_ref(&ref_cache, prefix, fn, strlen(prefix), 0, cb_data);
2a8177b6
CC
2002}
2003
9ef6aeb0
HV
2004int for_each_ref_in_submodule(const char *submodule, const char *prefix,
2005 each_ref_fn fn, void *cb_data)
2006{
65cf102b 2007 return do_for_each_ref(get_ref_cache(submodule), prefix, fn, strlen(prefix), 0, cb_data);
2a8177b6
CC
2008}
2009
cb5d709f 2010int for_each_tag_ref(each_ref_fn fn, void *cb_data)
a62be77f 2011{
2a8177b6 2012 return for_each_ref_in("refs/tags/", fn, cb_data);
a62be77f
SE
2013}
2014
9ef6aeb0
HV
2015int for_each_tag_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
2016{
2017 return for_each_ref_in_submodule(submodule, "refs/tags/", fn, cb_data);
2018}
2019
cb5d709f 2020int for_each_branch_ref(each_ref_fn fn, void *cb_data)
a62be77f 2021{
2a8177b6 2022 return for_each_ref_in("refs/heads/", fn, cb_data);
a62be77f
SE
2023}
2024
9ef6aeb0
HV
2025int for_each_branch_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
2026{
2027 return for_each_ref_in_submodule(submodule, "refs/heads/", fn, cb_data);
2028}
2029
cb5d709f 2030int for_each_remote_ref(each_ref_fn fn, void *cb_data)
a62be77f 2031{
2a8177b6 2032 return for_each_ref_in("refs/remotes/", fn, cb_data);
f8948e2f
JH
2033}
2034
9ef6aeb0
HV
2035int for_each_remote_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
2036{
2037 return for_each_ref_in_submodule(submodule, "refs/remotes/", fn, cb_data);
2038}
2039
29268700
CC
2040int for_each_replace_ref(each_ref_fn fn, void *cb_data)
2041{
9da31cb0 2042 return do_for_each_ref(&ref_cache, "refs/replace/", fn, 13, 0, cb_data);
29268700
CC
2043}
2044
a1bea2c1
JT
2045int head_ref_namespaced(each_ref_fn fn, void *cb_data)
2046{
2047 struct strbuf buf = STRBUF_INIT;
2048 int ret = 0;
2049 unsigned char sha1[20];
2050 int flag;
2051
2052 strbuf_addf(&buf, "%sHEAD", get_git_namespace());
c6893323 2053 if (!read_ref_full(buf.buf, sha1, 1, &flag))
a1bea2c1
JT
2054 ret = fn(buf.buf, sha1, flag, cb_data);
2055 strbuf_release(&buf);
2056
2057 return ret;
2058}
2059
2060int for_each_namespaced_ref(each_ref_fn fn, void *cb_data)
2061{
2062 struct strbuf buf = STRBUF_INIT;
2063 int ret;
2064 strbuf_addf(&buf, "%srefs/", get_git_namespace());
9da31cb0 2065 ret = do_for_each_ref(&ref_cache, buf.buf, fn, 0, 0, cb_data);
a1bea2c1
JT
2066 strbuf_release(&buf);
2067 return ret;
2068}
2069
b09fe971
IL
2070int for_each_glob_ref_in(each_ref_fn fn, const char *pattern,
2071 const char *prefix, void *cb_data)
d08bae7e
IL
2072{
2073 struct strbuf real_pattern = STRBUF_INIT;
2074 struct ref_filter filter;
d08bae7e
IL
2075 int ret;
2076
59556548 2077 if (!prefix && !starts_with(pattern, "refs/"))
d08bae7e 2078 strbuf_addstr(&real_pattern, "refs/");
b09fe971
IL
2079 else if (prefix)
2080 strbuf_addstr(&real_pattern, prefix);
d08bae7e
IL
2081 strbuf_addstr(&real_pattern, pattern);
2082
894a9d33 2083 if (!has_glob_specials(pattern)) {
9517e6b8 2084 /* Append implied '/' '*' if not present. */
d08bae7e
IL
2085 if (real_pattern.buf[real_pattern.len - 1] != '/')
2086 strbuf_addch(&real_pattern, '/');
2087 /* No need to check for '*', there is none. */
2088 strbuf_addch(&real_pattern, '*');
2089 }
2090
2091 filter.pattern = real_pattern.buf;
2092 filter.fn = fn;
2093 filter.cb_data = cb_data;
2094 ret = for_each_ref(filter_refs, &filter);
2095
2096 strbuf_release(&real_pattern);
2097 return ret;
2098}
2099
b09fe971
IL
2100int for_each_glob_ref(each_ref_fn fn, const char *pattern, void *cb_data)
2101{
2102 return for_each_glob_ref_in(fn, pattern, NULL, cb_data);
2103}
2104
f8948e2f
JH
2105int for_each_rawref(each_ref_fn fn, void *cb_data)
2106{
9da31cb0 2107 return do_for_each_ref(&ref_cache, "", fn, 0,
f8948e2f 2108 DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
8a65ff76
LT
2109}
2110
4577e483 2111const char *prettify_refname(const char *name)
a9c37a72 2112{
a9c37a72 2113 return name + (
59556548
CC
2114 starts_with(name, "refs/heads/") ? 11 :
2115 starts_with(name, "refs/tags/") ? 10 :
2116 starts_with(name, "refs/remotes/") ? 13 :
a9c37a72
DB
2117 0);
2118}
2119
54457fe5 2120static const char *ref_rev_parse_rules[] = {
79803322
SP
2121 "%.*s",
2122 "refs/%.*s",
2123 "refs/tags/%.*s",
2124 "refs/heads/%.*s",
2125 "refs/remotes/%.*s",
2126 "refs/remotes/%.*s/HEAD",
2127 NULL
2128};
2129
54457fe5 2130int refname_match(const char *abbrev_name, const char *full_name)
79803322
SP
2131{
2132 const char **p;
2133 const int abbrev_name_len = strlen(abbrev_name);
2134
54457fe5 2135 for (p = ref_rev_parse_rules; *p; p++) {
79803322
SP
2136 if (!strcmp(full_name, mkpath(*p, abbrev_name_len, abbrev_name))) {
2137 return 1;
2138 }
2139 }
2140
2141 return 0;
2142}
2143
835e3c99 2144/* This function should make sure errno is meaningful on error */
e5f38ec3 2145static struct ref_lock *verify_lock(struct ref_lock *lock,
4bd18c43
SP
2146 const unsigned char *old_sha1, int mustexist)
2147{
c6893323 2148 if (read_ref_full(lock->ref_name, lock->old_sha1, mustexist, NULL)) {
835e3c99 2149 int save_errno = errno;
434cd0cd 2150 error("Can't verify ref %s", lock->ref_name);
4bd18c43 2151 unlock_ref(lock);
835e3c99 2152 errno = save_errno;
4bd18c43
SP
2153 return NULL;
2154 }
a89fccd2 2155 if (hashcmp(lock->old_sha1, old_sha1)) {
434cd0cd 2156 error("Ref %s is at %s but expected %s", lock->ref_name,
4bd18c43
SP
2157 sha1_to_hex(lock->old_sha1), sha1_to_hex(old_sha1));
2158 unlock_ref(lock);
835e3c99 2159 errno = EBUSY;
4bd18c43
SP
2160 return NULL;
2161 }
2162 return lock;
2163}
2164
7155b727 2165static int remove_empty_directories(const char *file)
bc7127ef
JH
2166{
2167 /* we want to create a file but there is a directory there;
2168 * if that is an empty directory (or a directory that contains
2169 * only empty directories), remove them.
2170 */
7155b727 2171 struct strbuf path;
470a91ef 2172 int result, save_errno;
bc7127ef 2173
7155b727
JS
2174 strbuf_init(&path, 20);
2175 strbuf_addstr(&path, file);
2176
a0f4afbe 2177 result = remove_dir_recursively(&path, REMOVE_DIR_EMPTY_ONLY);
470a91ef 2178 save_errno = errno;
7155b727
JS
2179
2180 strbuf_release(&path);
470a91ef 2181 errno = save_errno;
7155b727
JS
2182
2183 return result;
bc7127ef
JH
2184}
2185
ff74f7f1
JH
2186/*
2187 * *string and *len will only be substituted, and *string returned (for
2188 * later free()ing) if the string passed in is a magic short-hand form
2189 * to name a branch.
2190 */
2191static char *substitute_branch_name(const char **string, int *len)
2192{
2193 struct strbuf buf = STRBUF_INIT;
cf99a761 2194 int ret = interpret_branch_name(*string, *len, &buf);
ff74f7f1
JH
2195
2196 if (ret == *len) {
2197 size_t size;
2198 *string = strbuf_detach(&buf, &size);
2199 *len = size;
2200 return (char *)*string;
2201 }
2202
2203 return NULL;
2204}
2205
2206int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)
2207{
2208 char *last_branch = substitute_branch_name(&str, &len);
2209 const char **p, *r;
2210 int refs_found = 0;
2211
2212 *ref = NULL;
2213 for (p = ref_rev_parse_rules; *p; p++) {
2214 char fullref[PATH_MAX];
2215 unsigned char sha1_from_ref[20];
2216 unsigned char *this_result;
2217 int flag;
2218
2219 this_result = refs_found ? sha1_from_ref : sha1;
2220 mksnpath(fullref, sizeof(fullref), *p, len, str);
8cad4744 2221 r = resolve_ref_unsafe(fullref, this_result, 1, &flag);
ff74f7f1
JH
2222 if (r) {
2223 if (!refs_found++)
2224 *ref = xstrdup(r);
2225 if (!warn_ambiguous_refs)
2226 break;
55956350 2227 } else if ((flag & REF_ISSYMREF) && strcmp(fullref, "HEAD")) {
ff74f7f1 2228 warning("ignoring dangling symref %s.", fullref);
55956350
JH
2229 } else if ((flag & REF_ISBROKEN) && strchr(fullref, '/')) {
2230 warning("ignoring broken ref %s.", fullref);
2231 }
ff74f7f1
JH
2232 }
2233 free(last_branch);
2234 return refs_found;
2235}
2236
2237int dwim_log(const char *str, int len, unsigned char *sha1, char **log)
2238{
2239 char *last_branch = substitute_branch_name(&str, &len);
2240 const char **p;
2241 int logs_found = 0;
2242
2243 *log = NULL;
2244 for (p = ref_rev_parse_rules; *p; p++) {
ff74f7f1
JH
2245 unsigned char hash[20];
2246 char path[PATH_MAX];
2247 const char *ref, *it;
2248
2249 mksnpath(path, sizeof(path), *p, len, str);
8cad4744 2250 ref = resolve_ref_unsafe(path, hash, 1, NULL);
ff74f7f1
JH
2251 if (!ref)
2252 continue;
4da58835 2253 if (reflog_exists(path))
ff74f7f1 2254 it = path;
4da58835 2255 else if (strcmp(ref, path) && reflog_exists(ref))
ff74f7f1
JH
2256 it = ref;
2257 else
2258 continue;
2259 if (!logs_found++) {
2260 *log = xstrdup(it);
2261 hashcpy(sha1, hash);
2262 }
2263 if (!warn_ambiguous_refs)
2264 break;
2265 }
2266 free(last_branch);
2267 return logs_found;
2268}
2269
470a91ef 2270/* This function should make sure errno is meaningful on error */
dfefa935
MH
2271static struct ref_lock *lock_ref_sha1_basic(const char *refname,
2272 const unsigned char *old_sha1,
2273 int flags, int *type_p)
4bd18c43 2274{
434cd0cd 2275 char *ref_file;
dfefa935 2276 const char *orig_refname = refname;
4bd18c43 2277 struct ref_lock *lock;
5cc3cef9 2278 int last_errno = 0;
acd3b9ec 2279 int type, lflags;
4431fcc4 2280 int mustexist = (old_sha1 && !is_null_sha1(old_sha1));
5bdd8d4a 2281 int missing = 0;
c4c61c76 2282 int attempts_remaining = 3;
4bd18c43
SP
2283
2284 lock = xcalloc(1, sizeof(struct ref_lock));
2285 lock->lock_fd = -1;
2286
8d68493f 2287 refname = resolve_ref_unsafe(refname, lock->old_sha1, mustexist, &type);
dfefa935 2288 if (!refname && errno == EISDIR) {
bc7127ef
JH
2289 /* we are trying to lock foo but we used to
2290 * have foo/bar which now does not exist;
2291 * it is normal for the empty directory 'foo'
2292 * to remain.
2293 */
dfefa935 2294 ref_file = git_path("%s", orig_refname);
5cc3cef9
JH
2295 if (remove_empty_directories(ref_file)) {
2296 last_errno = errno;
dfefa935 2297 error("there are still refs under '%s'", orig_refname);
5cc3cef9
JH
2298 goto error_return;
2299 }
8d68493f 2300 refname = resolve_ref_unsafe(orig_refname, lock->old_sha1, mustexist, &type);
bc7127ef 2301 }
68db31cc
SV
2302 if (type_p)
2303 *type_p = type;
dfefa935 2304 if (!refname) {
5cc3cef9 2305 last_errno = errno;
818f477c 2306 error("unable to resolve reference %s: %s",
dfefa935 2307 orig_refname, strerror(errno));
5cc3cef9 2308 goto error_return;
4bd18c43 2309 }
5bdd8d4a 2310 missing = is_null_sha1(lock->old_sha1);
c976d415
LH
2311 /* When the ref did not exist and we are creating it,
2312 * make sure there is no existing ref that is packed
2313 * whose name begins with our refname, nor a ref whose
2314 * name is a proper prefix of our refname.
2315 */
5bdd8d4a 2316 if (missing &&
9da31cb0 2317 !is_refname_available(refname, NULL, get_packed_refs(&ref_cache))) {
f475e08e 2318 last_errno = ENOTDIR;
c976d415 2319 goto error_return;
f475e08e 2320 }
22a3844e 2321
c33d5174 2322 lock->lk = xcalloc(1, sizeof(struct lock_file));
4bd18c43 2323
e5c223e9 2324 lflags = 0;
acd3b9ec 2325 if (flags & REF_NODEREF) {
dfefa935 2326 refname = orig_refname;
acd3b9ec
JH
2327 lflags |= LOCK_NODEREF;
2328 }
dfefa935
MH
2329 lock->ref_name = xstrdup(refname);
2330 lock->orig_ref_name = xstrdup(orig_refname);
2331 ref_file = git_path("%s", refname);
5bdd8d4a 2332 if (missing)
68db31cc
SV
2333 lock->force_write = 1;
2334 if ((flags & REF_NODEREF) && (type & REF_ISSYMREF))
2335 lock->force_write = 1;
4bd18c43 2336
c4c61c76
MH
2337 retry:
2338 switch (safe_create_leading_directories(ref_file)) {
2339 case SCLD_OK:
2340 break; /* success */
2341 case SCLD_VANISHED:
2342 if (--attempts_remaining > 0)
2343 goto retry;
2344 /* fall through */
2345 default:
5cc3cef9
JH
2346 last_errno = errno;
2347 error("unable to create directory for %s", ref_file);
2348 goto error_return;
2349 }
4bd18c43 2350
acd3b9ec 2351 lock->lock_fd = hold_lock_file_for_update(lock->lk, ref_file, lflags);
e5c223e9
MH
2352 if (lock->lock_fd < 0) {
2353 if (errno == ENOENT && --attempts_remaining > 0)
2354 /*
2355 * Maybe somebody just deleted one of the
2356 * directories leading to ref_file. Try
2357 * again:
2358 */
2359 goto retry;
2360 else
2361 unable_to_lock_index_die(ref_file, errno);
2362 }
4bd18c43 2363 return old_sha1 ? verify_lock(lock, old_sha1, mustexist) : lock;
5cc3cef9
JH
2364
2365 error_return:
2366 unlock_ref(lock);
2367 errno = last_errno;
2368 return NULL;
4bd18c43
SP
2369}
2370
dfefa935 2371struct ref_lock *lock_ref_sha1(const char *refname, const unsigned char *old_sha1)
95fc7512 2372{
53cce84c 2373 char refpath[PATH_MAX];
dfefa935 2374 if (check_refname_format(refname, 0))
4bd18c43 2375 return NULL;
dfefa935 2376 strcpy(refpath, mkpath("refs/%s", refname));
68db31cc 2377 return lock_ref_sha1_basic(refpath, old_sha1, 0, NULL);
4bd18c43
SP
2378}
2379
dfefa935 2380struct ref_lock *lock_any_ref_for_update(const char *refname,
9bbb0fa1
BK
2381 const unsigned char *old_sha1,
2382 int flags, int *type_p)
4bd18c43 2383{
dfefa935 2384 if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL))
257f3020 2385 return NULL;
9bbb0fa1 2386 return lock_ref_sha1_basic(refname, old_sha1, flags, type_p);
c0277d15
JH
2387}
2388
fec3137f
MH
2389/*
2390 * Write an entry to the packed-refs file for the specified refname.
2391 * If peeled is non-NULL, write it as the entry's peeled value.
2392 */
2393static void write_packed_entry(int fd, char *refname, unsigned char *sha1,
2394 unsigned char *peeled)
d66da478 2395{
d66da478
MH
2396 char line[PATH_MAX + 100];
2397 int len;
2398
d66da478
MH
2399 len = snprintf(line, sizeof(line), "%s %s\n",
2400 sha1_to_hex(sha1), refname);
2401 /* this should not happen but just being defensive */
2402 if (len > sizeof(line))
2403 die("too long a refname '%s'", refname);
fec3137f
MH
2404 write_or_die(fd, line, len);
2405
2406 if (peeled) {
2407 if (snprintf(line, sizeof(line), "^%s\n",
2408 sha1_to_hex(peeled)) != PEELED_LINE_LENGTH)
2409 die("internal error");
2410 write_or_die(fd, line, PEELED_LINE_LENGTH);
2411 }
2412}
2413
7b40d396
MH
2414/*
2415 * An each_ref_entry_fn that writes the entry to a packed-refs file.
2416 */
2417static int write_packed_entry_fn(struct ref_entry *entry, void *cb_data)
2418{
2419 int *fd = cb_data;
2420 enum peel_status peel_status = peel_entry(entry, 0);
2421
2422 if (peel_status != PEEL_PEELED && peel_status != PEEL_NON_TAG)
2423 error("internal error: %s is not a valid packed reference!",
2424 entry->name);
2425 write_packed_entry(*fd, entry->name, entry->u.value.sha1,
2426 peel_status == PEEL_PEELED ?
2427 entry->u.value.peeled : NULL);
2428 return 0;
2429}
2430
447ff1bf 2431/* This should return a meaningful errno on failure */
9f69d297
MH
2432int lock_packed_refs(int flags)
2433{
2434 struct packed_ref_cache *packed_ref_cache;
2435
9f69d297
MH
2436 if (hold_lock_file_for_update(&packlock, git_path("packed-refs"), flags) < 0)
2437 return -1;
5d478f5c
MH
2438 /*
2439 * Get the current packed-refs while holding the lock. If the
2440 * packed-refs file has been modified since we last read it,
2441 * this will automatically invalidate the cache and re-read
2442 * the packed-refs file.
2443 */
9f69d297
MH
2444 packed_ref_cache = get_packed_ref_cache(&ref_cache);
2445 packed_ref_cache->lock = &packlock;
4f6b83e3
MH
2446 /* Increment the reference count to prevent it from being freed: */
2447 acquire_packed_ref_cache(packed_ref_cache);
9f69d297
MH
2448 return 0;
2449}
2450
d3f66555
RS
2451/*
2452 * Commit the packed refs changes.
2453 * On error we must make sure that errno contains a meaningful value.
2454 */
9f69d297
MH
2455int commit_packed_refs(void)
2456{
2457 struct packed_ref_cache *packed_ref_cache =
2458 get_packed_ref_cache(&ref_cache);
2459 int error = 0;
d3f66555 2460 int save_errno = 0;
9f69d297
MH
2461
2462 if (!packed_ref_cache->lock)
2463 die("internal error: packed-refs not locked");
2464 write_or_die(packed_ref_cache->lock->fd,
2465 PACKED_REFS_HEADER, strlen(PACKED_REFS_HEADER));
2466
2467 do_for_each_entry_in_dir(get_packed_ref_dir(packed_ref_cache),
2468 0, write_packed_entry_fn,
2469 &packed_ref_cache->lock->fd);
d3f66555
RS
2470 if (commit_lock_file(packed_ref_cache->lock)) {
2471 save_errno = errno;
9f69d297 2472 error = -1;
d3f66555 2473 }
9f69d297 2474 packed_ref_cache->lock = NULL;
4f6b83e3 2475 release_packed_ref_cache(packed_ref_cache);
d3f66555 2476 errno = save_errno;
9f69d297
MH
2477 return error;
2478}
2479
2480void rollback_packed_refs(void)
2481{
2482 struct packed_ref_cache *packed_ref_cache =
2483 get_packed_ref_cache(&ref_cache);
2484
2485 if (!packed_ref_cache->lock)
2486 die("internal error: packed-refs not locked");
2487 rollback_lock_file(packed_ref_cache->lock);
2488 packed_ref_cache->lock = NULL;
4f6b83e3 2489 release_packed_ref_cache(packed_ref_cache);
9f69d297
MH
2490 clear_packed_ref_cache(&ref_cache);
2491}
2492
32d462ce
MH
2493struct ref_to_prune {
2494 struct ref_to_prune *next;
2495 unsigned char sha1[20];
2496 char name[FLEX_ARRAY];
2497};
2498
2499struct pack_refs_cb_data {
2500 unsigned int flags;
267f9a8c 2501 struct ref_dir *packed_refs;
32d462ce 2502 struct ref_to_prune *ref_to_prune;
32d462ce
MH
2503};
2504
267f9a8c
MH
2505/*
2506 * An each_ref_entry_fn that is run over loose references only. If
2507 * the loose reference can be packed, add an entry in the packed ref
2508 * cache. If the reference should be pruned, also add it to
2509 * ref_to_prune in the pack_refs_cb_data.
2510 */
2511static int pack_if_possible_fn(struct ref_entry *entry, void *cb_data)
32d462ce
MH
2512{
2513 struct pack_refs_cb_data *cb = cb_data;
f85354b5 2514 enum peel_status peel_status;
267f9a8c 2515 struct ref_entry *packed_entry;
59556548 2516 int is_tag_ref = starts_with(entry->name, "refs/tags/");
32d462ce 2517
267f9a8c
MH
2518 /* ALWAYS pack tags */
2519 if (!(cb->flags & PACK_REFS_ALL) && !is_tag_ref)
32d462ce
MH
2520 return 0;
2521
b2a8226d
MH
2522 /* Do not pack symbolic or broken refs: */
2523 if ((entry->flag & REF_ISSYMREF) || !ref_resolves_to_object(entry))
2524 return 0;
2525
267f9a8c 2526 /* Add a packed ref cache entry equivalent to the loose entry. */
f85354b5 2527 peel_status = peel_entry(entry, 1);
0f29920f 2528 if (peel_status != PEEL_PEELED && peel_status != PEEL_NON_TAG)
f85354b5
MH
2529 die("internal error peeling reference %s (%s)",
2530 entry->name, sha1_to_hex(entry->u.value.sha1));
267f9a8c
MH
2531 packed_entry = find_ref(cb->packed_refs, entry->name);
2532 if (packed_entry) {
2533 /* Overwrite existing packed entry with info from loose entry */
2534 packed_entry->flag = REF_ISPACKED | REF_KNOWS_PEELED;
2535 hashcpy(packed_entry->u.value.sha1, entry->u.value.sha1);
2536 } else {
2537 packed_entry = create_ref_entry(entry->name, entry->u.value.sha1,
2538 REF_ISPACKED | REF_KNOWS_PEELED, 0);
2539 add_ref(cb->packed_refs, packed_entry);
2540 }
2541 hashcpy(packed_entry->u.value.peeled, entry->u.value.peeled);
32d462ce 2542
267f9a8c
MH
2543 /* Schedule the loose reference for pruning if requested. */
2544 if ((cb->flags & PACK_REFS_PRUNE)) {
12e77559 2545 int namelen = strlen(entry->name) + 1;
32d462ce 2546 struct ref_to_prune *n = xcalloc(1, sizeof(*n) + namelen);
12e77559
MH
2547 hashcpy(n->sha1, entry->u.value.sha1);
2548 strcpy(n->name, entry->name);
32d462ce
MH
2549 n->next = cb->ref_to_prune;
2550 cb->ref_to_prune = n;
2551 }
d66da478
MH
2552 return 0;
2553}
2554
32d462ce
MH
2555/*
2556 * Remove empty parents, but spare refs/ and immediate subdirs.
2557 * Note: munges *name.
2558 */
2559static void try_remove_empty_parents(char *name)
2560{
2561 char *p, *q;
2562 int i;
2563 p = name;
2564 for (i = 0; i < 2; i++) { /* refs/{heads,tags,...}/ */
2565 while (*p && *p != '/')
2566 p++;
2567 /* tolerate duplicate slashes; see check_refname_format() */
2568 while (*p == '/')
2569 p++;
2570 }
2571 for (q = p; *q; q++)
2572 ;
2573 while (1) {
2574 while (q > p && *q != '/')
2575 q--;
2576 while (q > p && *(q-1) == '/')
2577 q--;
2578 if (q == p)
2579 break;
2580 *q = '\0';
2581 if (rmdir(git_path("%s", name)))
2582 break;
2583 }
2584}
2585
2586/* make sure nobody touched the ref, and unlink */
2587static void prune_ref(struct ref_to_prune *r)
2588{
2589 struct ref_lock *lock = lock_ref_sha1(r->name + 5, r->sha1);
2590
2591 if (lock) {
2592 unlink_or_warn(git_path("%s", r->name));
2593 unlock_ref(lock);
2594 try_remove_empty_parents(r->name);
2595 }
2596}
2597
2598static void prune_refs(struct ref_to_prune *r)
2599{
2600 while (r) {
2601 prune_ref(r);
2602 r = r->next;
2603 }
2604}
2605
32d462ce
MH
2606int pack_refs(unsigned int flags)
2607{
32d462ce
MH
2608 struct pack_refs_cb_data cbdata;
2609
2610 memset(&cbdata, 0, sizeof(cbdata));
2611 cbdata.flags = flags;
2612
9f69d297 2613 lock_packed_refs(LOCK_DIE_ON_ERROR);
267f9a8c 2614 cbdata.packed_refs = get_packed_refs(&ref_cache);
32d462ce 2615
267f9a8c
MH
2616 do_for_each_entry_in_dir(get_loose_refs(&ref_cache), 0,
2617 pack_if_possible_fn, &cbdata);
32d462ce 2618
9f69d297 2619 if (commit_packed_refs())
32d462ce 2620 die_errno("unable to overwrite old ref-pack file");
9f69d297 2621
32d462ce
MH
2622 prune_refs(cbdata.ref_to_prune);
2623 return 0;
2624}
2625
7b40d396
MH
2626/*
2627 * If entry is no longer needed in packed-refs, add it to the string
2628 * list pointed to by cb_data. Reasons for deleting entries:
2629 *
2630 * - Entry is broken.
2631 * - Entry is overridden by a loose ref.
2632 * - Entry does not point at a valid object.
2633 *
2634 * In the first and third cases, also emit an error message because these
2635 * are indications of repository corruption.
2636 */
2637static int curate_packed_ref_fn(struct ref_entry *entry, void *cb_data)
c0277d15 2638{
7b40d396 2639 struct string_list *refs_to_delete = cb_data;
fec3137f 2640
ab292bc4
MH
2641 if (entry->flag & REF_ISBROKEN) {
2642 /* This shouldn't happen to packed refs. */
2643 error("%s is broken!", entry->name);
7b40d396 2644 string_list_append(refs_to_delete, entry->name);
c0277d15 2645 return 0;
ab292bc4
MH
2646 }
2647 if (!has_sha1_file(entry->u.value.sha1)) {
2648 unsigned char sha1[20];
2649 int flags;
2650
2651 if (read_ref_full(entry->name, sha1, 0, &flags))
2652 /* We should at least have found the packed ref. */
2653 die("Internal error");
7b40d396 2654 if ((flags & REF_ISSYMREF) || !(flags & REF_ISPACKED)) {
ab292bc4
MH
2655 /*
2656 * This packed reference is overridden by a
2657 * loose reference, so it is OK that its value
2658 * is no longer valid; for example, it might
2659 * refer to an object that has been garbage
2660 * collected. For this purpose we don't even
2661 * care whether the loose reference itself is
2662 * invalid, broken, symbolic, etc. Silently
7b40d396 2663 * remove the packed reference.
ab292bc4 2664 */
7b40d396 2665 string_list_append(refs_to_delete, entry->name);
ab292bc4 2666 return 0;
7b40d396 2667 }
ab292bc4
MH
2668 /*
2669 * There is no overriding loose reference, so the fact
2670 * that this reference doesn't refer to a valid object
2671 * indicates some kind of repository corruption.
2672 * Report the problem, then omit the reference from
2673 * the output.
2674 */
2675 error("%s does not point to a valid object!", entry->name);
7b40d396 2676 string_list_append(refs_to_delete, entry->name);
ab292bc4
MH
2677 return 0;
2678 }
2679
d66da478
MH
2680 return 0;
2681}
2682
60bca085 2683int repack_without_refs(const char **refnames, int n, struct strbuf *err)
c0277d15 2684{
7618fd80 2685 struct ref_dir *packed;
7b40d396
MH
2686 struct string_list refs_to_delete = STRING_LIST_INIT_DUP;
2687 struct string_list_item *ref_to_delete;
60bca085 2688 int i, ret, removed = 0;
61cee0db
BK
2689
2690 /* Look for a packed ref */
2691 for (i = 0; i < n; i++)
2692 if (get_packed_ref(refnames[i]))
2693 break;
7618fd80 2694
61cee0db
BK
2695 /* Avoid locking if we have nothing to do */
2696 if (i == n)
2697 return 0; /* no refname exists in packed refs */
7618fd80 2698
9f69d297 2699 if (lock_packed_refs(0)) {
60bca085
RS
2700 if (err) {
2701 unable_to_lock_message(git_path("packed-refs"), errno,
2702 err);
2703 return -1;
2704 }
1b018fd9 2705 unable_to_lock_error(git_path("packed-refs"), errno);
61cee0db 2706 return error("cannot delete '%s' from packed refs", refnames[i]);
1b018fd9 2707 }
9da31cb0 2708 packed = get_packed_refs(&ref_cache);
7b40d396 2709
61cee0db
BK
2710 /* Remove refnames from the cache */
2711 for (i = 0; i < n; i++)
2712 if (remove_entry(packed, refnames[i]) != -1)
2713 removed = 1;
2714 if (!removed) {
506a760d 2715 /*
61cee0db 2716 * All packed entries disappeared while we were
506a760d
MH
2717 * acquiring the lock.
2718 */
9f69d297 2719 rollback_packed_refs();
506a760d
MH
2720 return 0;
2721 }
7b40d396 2722
61cee0db 2723 /* Remove any other accumulated cruft */
7b40d396
MH
2724 do_for_each_entry_in_dir(packed, 0, curate_packed_ref_fn, &refs_to_delete);
2725 for_each_string_list_item(ref_to_delete, &refs_to_delete) {
2726 if (remove_entry(packed, ref_to_delete->string) == -1)
2727 die("internal error");
2728 }
2729
61cee0db 2730 /* Write what remains */
60bca085
RS
2731 ret = commit_packed_refs();
2732 if (ret && err)
2733 strbuf_addf(err, "unable to overwrite old ref-pack file: %s",
2734 strerror(errno));
2735 return ret;
c0277d15
JH
2736}
2737
61cee0db 2738static int repack_without_ref(const char *refname)
c0277d15 2739{
60bca085 2740 return repack_without_refs(&refname, 1, NULL);
61cee0db 2741}
c0277d15 2742
2ddb5d17
BK
2743static int delete_ref_loose(struct ref_lock *lock, int flag)
2744{
045a476f 2745 if (!(flag & REF_ISPACKED) || flag & REF_ISSYMREF) {
c0277d15 2746 /* loose */
2ddb5d17
BK
2747 int err, i = strlen(lock->lk->filename) - 5; /* .lock */
2748
547d058f
RS
2749 lock->lk->filename[i] = 0;
2750 err = unlink_or_warn(lock->lk->filename);
547d058f 2751 lock->lk->filename[i] = '.';
2ddb5d17
BK
2752 if (err && errno != ENOENT)
2753 return 1;
c0277d15 2754 }
2ddb5d17
BK
2755 return 0;
2756}
2757
eca35a25 2758int delete_ref(const char *refname, const unsigned char *sha1, int delopt)
c0277d15
JH
2759{
2760 struct ref_lock *lock;
2ddb5d17 2761 int ret = 0, flag = 0;
c0277d15 2762
547d058f 2763 lock = lock_ref_sha1_basic(refname, sha1, delopt, &flag);
c0277d15
JH
2764 if (!lock)
2765 return 1;
2ddb5d17 2766 ret |= delete_ref_loose(lock, flag);
691f1a28 2767
c0277d15
JH
2768 /* removing the loose one could have resurrected an earlier
2769 * packed one. Also, if it was not loose we need to repack
2770 * without it.
2771 */
b274a714 2772 ret |= repack_without_ref(lock->ref_name);
c0277d15 2773
691f1a28 2774 unlink_or_warn(git_path("logs/%s", lock->ref_name));
9da31cb0 2775 clear_loose_ref_cache(&ref_cache);
c0277d15
JH
2776 unlock_ref(lock);
2777 return ret;
4bd18c43
SP
2778}
2779
765c2258
PH
2780/*
2781 * People using contrib's git-new-workdir have .git/logs/refs ->
2782 * /some/other/path/.git/logs/refs, and that may live on another device.
2783 *
2784 * IOW, to avoid cross device rename errors, the temporary renamed log must
2785 * live into logs/refs.
2786 */
2787#define TMP_RENAMED_LOG "logs/refs/.tmp-renamed-log"
2788
fa59ae79
MH
2789static int rename_tmp_log(const char *newrefname)
2790{
f1e9e9a4 2791 int attempts_remaining = 4;
ae4a283e
MH
2792
2793 retry:
08f555cb
MH
2794 switch (safe_create_leading_directories(git_path("logs/%s", newrefname))) {
2795 case SCLD_OK:
2796 break; /* success */
2797 case SCLD_VANISHED:
2798 if (--attempts_remaining > 0)
2799 goto retry;
2800 /* fall through */
2801 default:
fa59ae79
MH
2802 error("unable to create directory for %s", newrefname);
2803 return -1;
2804 }
2805
fa59ae79 2806 if (rename(git_path(TMP_RENAMED_LOG), git_path("logs/%s", newrefname))) {
f1e9e9a4 2807 if ((errno==EISDIR || errno==ENOTDIR) && --attempts_remaining > 0) {
fa59ae79
MH
2808 /*
2809 * rename(a, b) when b is an existing
2810 * directory ought to result in ISDIR, but
2811 * Solaris 5.8 gives ENOTDIR. Sheesh.
2812 */
2813 if (remove_empty_directories(git_path("logs/%s", newrefname))) {
2814 error("Directory not empty: logs/%s", newrefname);
2815 return -1;
2816 }
2817 goto retry;
ae4a283e
MH
2818 } else if (errno == ENOENT && --attempts_remaining > 0) {
2819 /*
2820 * Maybe another process just deleted one of
2821 * the directories in the path to newrefname.
2822 * Try again from the beginning.
2823 */
2824 goto retry;
fa59ae79
MH
2825 } else {
2826 error("unable to move logfile "TMP_RENAMED_LOG" to logs/%s: %s",
2827 newrefname, strerror(errno));
2828 return -1;
2829 }
2830 }
2831 return 0;
2832}
2833
dfefa935 2834int rename_ref(const char *oldrefname, const char *newrefname, const char *logmsg)
c976d415 2835{
c976d415
LH
2836 unsigned char sha1[20], orig_sha1[20];
2837 int flag = 0, logmoved = 0;
2838 struct ref_lock *lock;
c976d415 2839 struct stat loginfo;
dfefa935 2840 int log = !lstat(git_path("logs/%s", oldrefname), &loginfo);
eca35a25 2841 const char *symref = NULL;
c976d415 2842
450d4c0f 2843 if (log && S_ISLNK(loginfo.st_mode))
dfefa935 2844 return error("reflog for %s is a symlink", oldrefname);
c976d415 2845
8d68493f 2846 symref = resolve_ref_unsafe(oldrefname, orig_sha1, 1, &flag);
eca35a25 2847 if (flag & REF_ISSYMREF)
fa58186c 2848 return error("refname %s is a symbolic ref, renaming it is not supported",
dfefa935 2849 oldrefname);
eca35a25 2850 if (!symref)
dfefa935 2851 return error("refname %s not found", oldrefname);
c976d415 2852
9da31cb0 2853 if (!is_refname_available(newrefname, oldrefname, get_packed_refs(&ref_cache)))
c976d415
LH
2854 return 1;
2855
9da31cb0 2856 if (!is_refname_available(newrefname, oldrefname, get_loose_refs(&ref_cache)))
c976d415
LH
2857 return 1;
2858
dfefa935 2859 if (log && rename(git_path("logs/%s", oldrefname), git_path(TMP_RENAMED_LOG)))
765c2258 2860 return error("unable to move logfile logs/%s to "TMP_RENAMED_LOG": %s",
dfefa935 2861 oldrefname, strerror(errno));
c976d415 2862
dfefa935
MH
2863 if (delete_ref(oldrefname, orig_sha1, REF_NODEREF)) {
2864 error("unable to delete old %s", oldrefname);
c976d415
LH
2865 goto rollback;
2866 }
2867
dfefa935
MH
2868 if (!read_ref_full(newrefname, sha1, 1, &flag) &&
2869 delete_ref(newrefname, sha1, REF_NODEREF)) {
c976d415 2870 if (errno==EISDIR) {
dfefa935
MH
2871 if (remove_empty_directories(git_path("%s", newrefname))) {
2872 error("Directory not empty: %s", newrefname);
c976d415
LH
2873 goto rollback;
2874 }
2875 } else {
dfefa935 2876 error("unable to delete existing %s", newrefname);
c976d415
LH
2877 goto rollback;
2878 }
2879 }
2880
fa59ae79 2881 if (log && rename_tmp_log(newrefname))
c976d415 2882 goto rollback;
c976d415 2883
c976d415
LH
2884 logmoved = log;
2885
dfefa935 2886 lock = lock_ref_sha1_basic(newrefname, NULL, 0, NULL);
c976d415 2887 if (!lock) {
dfefa935 2888 error("unable to lock %s for update", newrefname);
c976d415
LH
2889 goto rollback;
2890 }
c976d415
LH
2891 lock->force_write = 1;
2892 hashcpy(lock->old_sha1, orig_sha1);
678d0f4c 2893 if (write_ref_sha1(lock, orig_sha1, logmsg)) {
dfefa935 2894 error("unable to write current sha1 into %s", newrefname);
c976d415
LH
2895 goto rollback;
2896 }
2897
2898 return 0;
2899
2900 rollback:
dfefa935 2901 lock = lock_ref_sha1_basic(oldrefname, NULL, 0, NULL);
c976d415 2902 if (!lock) {
dfefa935 2903 error("unable to lock %s for rollback", oldrefname);
c976d415
LH
2904 goto rollbacklog;
2905 }
2906
2907 lock->force_write = 1;
2908 flag = log_all_ref_updates;
2909 log_all_ref_updates = 0;
2910 if (write_ref_sha1(lock, orig_sha1, NULL))
dfefa935 2911 error("unable to write current sha1 into %s", oldrefname);
c976d415
LH
2912 log_all_ref_updates = flag;
2913
2914 rollbacklog:
dfefa935 2915 if (logmoved && rename(git_path("logs/%s", newrefname), git_path("logs/%s", oldrefname)))
c976d415 2916 error("unable to restore logfile %s from %s: %s",
dfefa935 2917 oldrefname, newrefname, strerror(errno));
c976d415 2918 if (!logmoved && log &&
dfefa935 2919 rename(git_path(TMP_RENAMED_LOG), git_path("logs/%s", oldrefname)))
765c2258 2920 error("unable to restore logfile %s from "TMP_RENAMED_LOG": %s",
dfefa935 2921 oldrefname, strerror(errno));
c976d415
LH
2922
2923 return 1;
2924}
2925
435fc852 2926int close_ref(struct ref_lock *lock)
b531394d
BC
2927{
2928 if (close_lock_file(lock->lk))
2929 return -1;
2930 lock->lock_fd = -1;
2931 return 0;
2932}
2933
435fc852 2934int commit_ref(struct ref_lock *lock)
b531394d
BC
2935{
2936 if (commit_lock_file(lock->lk))
2937 return -1;
2938 lock->lock_fd = -1;
2939 return 0;
2940}
2941
e5f38ec3 2942void unlock_ref(struct ref_lock *lock)
4bd18c43 2943{
4ed7cd3a
BC
2944 /* Do not free lock->lk -- atexit() still looks at them */
2945 if (lock->lk)
2946 rollback_lock_file(lock->lk);
434cd0cd 2947 free(lock->ref_name);
1655707c 2948 free(lock->orig_ref_name);
4bd18c43
SP
2949 free(lock);
2950}
2951
0ec29a47
JH
2952/*
2953 * copy the reflog message msg to buf, which has been allocated sufficiently
2954 * large, while cleaning up the whitespaces. Especially, convert LF to space,
2955 * because reflog file is one line per entry.
2956 */
2957static int copy_msg(char *buf, const char *msg)
2958{
2959 char *cp = buf;
2960 char c;
2961 int wasspace = 1;
2962
2963 *cp++ = '\t';
2964 while ((c = *msg++)) {
2965 if (wasspace && isspace(c))
2966 continue;
2967 wasspace = isspace(c);
2968 if (wasspace)
2969 c = ' ';
2970 *cp++ = c;
2971 }
2972 while (buf < cp && isspace(cp[-1]))
2973 cp--;
2974 *cp++ = '\n';
2975 return cp - buf;
2976}
2977
bd3b02da 2978/* This function must set a meaningful errno on failure */
dfefa935 2979int log_ref_setup(const char *refname, char *logfile, int bufsize)
6de08ae6 2980{
859c3017 2981 int logfd, oflags = O_APPEND | O_WRONLY;
9a13f0b7 2982
dfefa935 2983 git_snpath(logfile, bufsize, "logs/%s", refname);
4057deb5 2984 if (log_all_ref_updates &&
59556548
CC
2985 (starts_with(refname, "refs/heads/") ||
2986 starts_with(refname, "refs/remotes/") ||
2987 starts_with(refname, "refs/notes/") ||
dfefa935 2988 !strcmp(refname, "HEAD"))) {
bd3b02da
RS
2989 if (safe_create_leading_directories(logfile) < 0) {
2990 int save_errno = errno;
2991 error("unable to create directory for %s", logfile);
2992 errno = save_errno;
2993 return -1;
2994 }
6de08ae6
SP
2995 oflags |= O_CREAT;
2996 }
2997
157aaea5 2998 logfd = open(logfile, oflags, 0666);
6de08ae6 2999 if (logfd < 0) {
1974bf62 3000 if (!(oflags & O_CREAT) && errno == ENOENT)
6de08ae6 3001 return 0;
3b463c3f
JH
3002
3003 if ((oflags & O_CREAT) && errno == EISDIR) {
157aaea5 3004 if (remove_empty_directories(logfile)) {
bd3b02da
RS
3005 int save_errno = errno;
3006 error("There are still logs under '%s'",
3007 logfile);
3008 errno = save_errno;
3009 return -1;
3b463c3f 3010 }
157aaea5 3011 logfd = open(logfile, oflags, 0666);
3b463c3f
JH
3012 }
3013
bd3b02da
RS
3014 if (logfd < 0) {
3015 int save_errno = errno;
3016 error("Unable to append to %s: %s", logfile,
3017 strerror(errno));
3018 errno = save_errno;
3019 return -1;
3020 }
6de08ae6
SP
3021 }
3022
157aaea5 3023 adjust_shared_perm(logfile);
859c3017
EM
3024 close(logfd);
3025 return 0;
3026}
443b92b6 3027
dfefa935 3028static int log_ref_write(const char *refname, const unsigned char *old_sha1,
859c3017
EM
3029 const unsigned char *new_sha1, const char *msg)
3030{
3031 int logfd, result, written, oflags = O_APPEND | O_WRONLY;
3032 unsigned maxlen, len;
3033 int msglen;
157aaea5 3034 char log_file[PATH_MAX];
859c3017
EM
3035 char *logrec;
3036 const char *committer;
3037
3038 if (log_all_ref_updates < 0)
3039 log_all_ref_updates = !is_bare_repository();
3040
dfefa935 3041 result = log_ref_setup(refname, log_file, sizeof(log_file));
859c3017
EM
3042 if (result)
3043 return result;
3044
3045 logfd = open(log_file, oflags);
3046 if (logfd < 0)
3047 return 0;
0ec29a47 3048 msglen = msg ? strlen(msg) : 0;
774751a8 3049 committer = git_committer_info(0);
8ac65937
JH
3050 maxlen = strlen(committer) + msglen + 100;
3051 logrec = xmalloc(maxlen);
3052 len = sprintf(logrec, "%s %s %s\n",
9a13f0b7
NP
3053 sha1_to_hex(old_sha1),
3054 sha1_to_hex(new_sha1),
8ac65937
JH
3055 committer);
3056 if (msglen)
0ec29a47 3057 len += copy_msg(logrec + len - 1, msg) - 1;
93822c22 3058 written = len <= maxlen ? write_in_full(logfd, logrec, len) : -1;
6de08ae6 3059 free(logrec);
dc615de8
RS
3060 if (written != len) {
3061 int save_errno = errno;
3062 close(logfd);
3063 error("Unable to append to %s", log_file);
3064 errno = save_errno;
3065 return -1;
3066 }
3067 if (close(logfd)) {
3068 int save_errno = errno;
3069 error("Unable to append to %s", log_file);
3070 errno = save_errno;
3071 return -1;
3072 }
6de08ae6
SP
3073 return 0;
3074}
3075
e7e0f26e 3076int is_branch(const char *refname)
c3b0dec5 3077{
59556548 3078 return !strcmp(refname, "HEAD") || starts_with(refname, "refs/heads/");
c3b0dec5
LT
3079}
3080
dc615de8 3081/* This function must return a meaningful errno */
4bd18c43
SP
3082int write_ref_sha1(struct ref_lock *lock,
3083 const unsigned char *sha1, const char *logmsg)
3084{
3085 static char term = '\n';
c3b0dec5 3086 struct object *o;
4bd18c43 3087
dc615de8
RS
3088 if (!lock) {
3089 errno = EINVAL;
95fc7512 3090 return -1;
dc615de8 3091 }
a89fccd2 3092 if (!lock->force_write && !hashcmp(lock->old_sha1, sha1)) {
4bd18c43
SP
3093 unlock_ref(lock);
3094 return 0;
95fc7512 3095 }
c3b0dec5
LT
3096 o = parse_object(sha1);
3097 if (!o) {
7be8b3ba 3098 error("Trying to write ref %s with nonexistent object %s",
c3b0dec5
LT
3099 lock->ref_name, sha1_to_hex(sha1));
3100 unlock_ref(lock);
dc615de8 3101 errno = EINVAL;
c3b0dec5
LT
3102 return -1;
3103 }
3104 if (o->type != OBJ_COMMIT && is_branch(lock->ref_name)) {
3105 error("Trying to write non-commit object %s to branch %s",
3106 sha1_to_hex(sha1), lock->ref_name);
3107 unlock_ref(lock);
dc615de8 3108 errno = EINVAL;
c3b0dec5
LT
3109 return -1;
3110 }
93822c22 3111 if (write_in_full(lock->lock_fd, sha1_to_hex(sha1), 40) != 40 ||
dc615de8
RS
3112 write_in_full(lock->lock_fd, &term, 1) != 1 ||
3113 close_ref(lock) < 0) {
3114 int save_errno = errno;
c33d5174 3115 error("Couldn't write %s", lock->lk->filename);
4bd18c43 3116 unlock_ref(lock);
dc615de8 3117 errno = save_errno;
4bd18c43
SP
3118 return -1;
3119 }
9da31cb0 3120 clear_loose_ref_cache(&ref_cache);
bd104db1
NP
3121 if (log_ref_write(lock->ref_name, lock->old_sha1, sha1, logmsg) < 0 ||
3122 (strcmp(lock->ref_name, lock->orig_ref_name) &&
3123 log_ref_write(lock->orig_ref_name, lock->old_sha1, sha1, logmsg) < 0)) {
6de08ae6
SP
3124 unlock_ref(lock);
3125 return -1;
3126 }
605fac8b
NP
3127 if (strcmp(lock->orig_ref_name, "HEAD") != 0) {
3128 /*
3129 * Special hack: If a branch is updated directly and HEAD
3130 * points to it (may happen on the remote side of a push
3131 * for example) then logically the HEAD reflog should be
3132 * updated too.
3133 * A generic solution implies reverse symref information,
3134 * but finding all symrefs pointing to the given branch
3135 * would be rather costly for this rare event (the direct
3136 * update of a branch) to be worth it. So let's cheat and
3137 * check with HEAD only which should cover 99% of all usage
3138 * scenarios (even 100% of the default ones).
3139 */
3140 unsigned char head_sha1[20];
3141 int head_flag;
3142 const char *head_ref;
8cad4744 3143 head_ref = resolve_ref_unsafe("HEAD", head_sha1, 1, &head_flag);
605fac8b
NP
3144 if (head_ref && (head_flag & REF_ISSYMREF) &&
3145 !strcmp(head_ref, lock->ref_name))
3146 log_ref_write("HEAD", lock->old_sha1, sha1, logmsg);
3147 }
b531394d 3148 if (commit_ref(lock)) {
434cd0cd 3149 error("Couldn't set %s", lock->ref_name);
4bd18c43
SP
3150 unlock_ref(lock);
3151 return -1;
3152 }
4bd18c43
SP
3153 unlock_ref(lock);
3154 return 0;
95fc7512 3155}
d556fae2 3156
8b5157e4
NP
3157int create_symref(const char *ref_target, const char *refs_heads_master,
3158 const char *logmsg)
41b625b0
NP
3159{
3160 const char *lockpath;
3161 char ref[1000];
3162 int fd, len, written;
a4f34cbb 3163 char *git_HEAD = git_pathdup("%s", ref_target);
8b5157e4
NP
3164 unsigned char old_sha1[20], new_sha1[20];
3165
3166 if (logmsg && read_ref(ref_target, old_sha1))
3167 hashclr(old_sha1);
41b625b0 3168
d48744d1
JH
3169 if (safe_create_leading_directories(git_HEAD) < 0)
3170 return error("unable to create directory for %s", git_HEAD);
3171
41b625b0
NP
3172#ifndef NO_SYMLINK_HEAD
3173 if (prefer_symlink_refs) {
3174 unlink(git_HEAD);
3175 if (!symlink(refs_heads_master, git_HEAD))
8b5157e4 3176 goto done;
41b625b0
NP
3177 fprintf(stderr, "no symlink - falling back to symbolic ref\n");
3178 }
3179#endif
3180
3181 len = snprintf(ref, sizeof(ref), "ref: %s\n", refs_heads_master);
3182 if (sizeof(ref) <= len) {
3183 error("refname too long: %s", refs_heads_master);
47fc52e2 3184 goto error_free_return;
41b625b0
NP
3185 }
3186 lockpath = mkpath("%s.lock", git_HEAD);
3187 fd = open(lockpath, O_CREAT | O_EXCL | O_WRONLY, 0666);
3188 if (fd < 0) {
3189 error("Unable to open %s for writing", lockpath);
47fc52e2 3190 goto error_free_return;
41b625b0
NP
3191 }
3192 written = write_in_full(fd, ref, len);
91c8d590 3193 if (close(fd) != 0 || written != len) {
41b625b0 3194 error("Unable to write to %s", lockpath);
47fc52e2 3195 goto error_unlink_return;
41b625b0
NP
3196 }
3197 if (rename(lockpath, git_HEAD) < 0) {
41b625b0 3198 error("Unable to create %s", git_HEAD);
47fc52e2 3199 goto error_unlink_return;
41b625b0
NP
3200 }
3201 if (adjust_shared_perm(git_HEAD)) {
41b625b0 3202 error("Unable to fix permissions on %s", lockpath);
47fc52e2 3203 error_unlink_return:
691f1a28 3204 unlink_or_warn(lockpath);
47fc52e2
JH
3205 error_free_return:
3206 free(git_HEAD);
3207 return -1;
41b625b0 3208 }
8b5157e4 3209
ee96d11b 3210#ifndef NO_SYMLINK_HEAD
8b5157e4 3211 done:
ee96d11b 3212#endif
8b5157e4
NP
3213 if (logmsg && !read_ref(refs_heads_master, new_sha1))
3214 log_ref_write(ref_target, old_sha1, new_sha1, logmsg);
3215
47fc52e2 3216 free(git_HEAD);
41b625b0
NP
3217 return 0;
3218}
3219
4207ed28
RS
3220struct read_ref_at_cb {
3221 const char *refname;
3222 unsigned long at_time;
3223 int cnt;
3224 int reccnt;
3225 unsigned char *sha1;
3226 int found_it;
3227
3228 unsigned char osha1[20];
3229 unsigned char nsha1[20];
3230 int tz;
3231 unsigned long date;
3232 char **msg;
3233 unsigned long *cutoff_time;
3234 int *cutoff_tz;
3235 int *cutoff_cnt;
3236};
3237
3238static int read_ref_at_ent(unsigned char *osha1, unsigned char *nsha1,
3239 const char *email, unsigned long timestamp, int tz,
3240 const char *message, void *cb_data)
3241{
3242 struct read_ref_at_cb *cb = cb_data;
3243
3244 cb->reccnt++;
3245 cb->tz = tz;
3246 cb->date = timestamp;
3247
3248 if (timestamp <= cb->at_time || cb->cnt == 0) {
3249 if (cb->msg)
3250 *cb->msg = xstrdup(message);
3251 if (cb->cutoff_time)
3252 *cb->cutoff_time = timestamp;
3253 if (cb->cutoff_tz)
3254 *cb->cutoff_tz = tz;
3255 if (cb->cutoff_cnt)
3256 *cb->cutoff_cnt = cb->reccnt - 1;
3257 /*
3258 * we have not yet updated cb->[n|o]sha1 so they still
3259 * hold the values for the previous record.
3260 */
3261 if (!is_null_sha1(cb->osha1)) {
3262 hashcpy(cb->sha1, nsha1);
3263 if (hashcmp(cb->osha1, nsha1))
3264 warning("Log for ref %s has gap after %s.",
3265 cb->refname, show_date(cb->date, cb->tz, DATE_RFC2822));
3266 }
3267 else if (cb->date == cb->at_time)
3268 hashcpy(cb->sha1, nsha1);
3269 else if (hashcmp(nsha1, cb->sha1))
3270 warning("Log for ref %s unexpectedly ended on %s.",
3271 cb->refname, show_date(cb->date, cb->tz,
3272 DATE_RFC2822));
3273 hashcpy(cb->osha1, osha1);
3274 hashcpy(cb->nsha1, nsha1);
3275 cb->found_it = 1;
3276 return 1;
3277 }
3278 hashcpy(cb->osha1, osha1);
3279 hashcpy(cb->nsha1, nsha1);
3280 if (cb->cnt > 0)
3281 cb->cnt--;
3282 return 0;
3283}
3284
3285static int read_ref_at_ent_oldest(unsigned char *osha1, unsigned char *nsha1,
3286 const char *email, unsigned long timestamp,
3287 int tz, const char *message, void *cb_data)
3288{
3289 struct read_ref_at_cb *cb = cb_data;
3290
3291 if (cb->msg)
3292 *cb->msg = xstrdup(message);
3293 if (cb->cutoff_time)
3294 *cb->cutoff_time = timestamp;
3295 if (cb->cutoff_tz)
3296 *cb->cutoff_tz = tz;
3297 if (cb->cutoff_cnt)
3298 *cb->cutoff_cnt = cb->reccnt;
3299 hashcpy(cb->sha1, osha1);
3300 if (is_null_sha1(cb->sha1))
3301 hashcpy(cb->sha1, nsha1);
3302 /* We just want the first entry */
3303 return 1;
16d7cc90
JH
3304}
3305
dfefa935
MH
3306int read_ref_at(const char *refname, unsigned long at_time, int cnt,
3307 unsigned char *sha1, char **msg,
3308 unsigned long *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
d556fae2 3309{
4207ed28 3310 struct read_ref_at_cb cb;
d556fae2 3311
4207ed28
RS
3312 memset(&cb, 0, sizeof(cb));
3313 cb.refname = refname;
3314 cb.at_time = at_time;
3315 cb.cnt = cnt;
3316 cb.msg = msg;
3317 cb.cutoff_time = cutoff_time;
3318 cb.cutoff_tz = cutoff_tz;
3319 cb.cutoff_cnt = cutoff_cnt;
3320 cb.sha1 = sha1;
3321
3322 for_each_reflog_ent_reverse(refname, read_ref_at_ent, &cb);
3323
3324 if (!cb.reccnt)
3325 die("Log for %s is empty.", refname);
3326 if (cb.found_it)
3327 return 0;
3328
3329 for_each_reflog_ent(refname, read_ref_at_ent_oldest, &cb);
d556fae2 3330
16d7cc90 3331 return 1;
d556fae2 3332}
2ff81662 3333
4da58835
RS
3334int reflog_exists(const char *refname)
3335{
3336 struct stat st;
3337
3338 return !lstat(git_path("logs/%s", refname), &st) &&
3339 S_ISREG(st.st_mode);
3340}
3341
3342int delete_reflog(const char *refname)
3343{
3344 return remove_path(git_path("logs/%s", refname));
3345}
3346
9a7a183b
JH
3347static int show_one_reflog_ent(struct strbuf *sb, each_reflog_ent_fn fn, void *cb_data)
3348{
3349 unsigned char osha1[20], nsha1[20];
3350 char *email_end, *message;
3351 unsigned long timestamp;
3352 int tz;
3353
3354 /* old SP new SP name <email> SP time TAB msg LF */
3355 if (sb->len < 83 || sb->buf[sb->len - 1] != '\n' ||
3356 get_sha1_hex(sb->buf, osha1) || sb->buf[40] != ' ' ||
3357 get_sha1_hex(sb->buf + 41, nsha1) || sb->buf[81] != ' ' ||
3358 !(email_end = strchr(sb->buf + 82, '>')) ||
3359 email_end[1] != ' ' ||
3360 !(timestamp = strtoul(email_end + 2, &message, 10)) ||
3361 !message || message[0] != ' ' ||
3362 (message[1] != '+' && message[1] != '-') ||
3363 !isdigit(message[2]) || !isdigit(message[3]) ||
3364 !isdigit(message[4]) || !isdigit(message[5]))
3365 return 0; /* corrupt? */
3366 email_end[1] = '\0';
3367 tz = strtol(message + 1, NULL, 10);
3368 if (message[6] != '\t')
3369 message += 6;
3370 else
3371 message += 7;
3372 return fn(osha1, nsha1, sb->buf + 82, timestamp, tz, message, cb_data);
3373}
3374
98f85ff4
JH
3375static char *find_beginning_of_line(char *bob, char *scan)
3376{
3377 while (bob < scan && *(--scan) != '\n')
3378 ; /* keep scanning backwards */
3379 /*
3380 * Return either beginning of the buffer, or LF at the end of
3381 * the previous line.
3382 */
3383 return scan;
3384}
3385
3386int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn, void *cb_data)
2ff81662 3387{
8ca78803 3388 struct strbuf sb = STRBUF_INIT;
98f85ff4
JH
3389 FILE *logfp;
3390 long pos;
3391 int ret = 0, at_tail = 1;
2ff81662 3392
7ae07c1b 3393 logfp = fopen(git_path("logs/%s", refname), "r");
2ff81662 3394 if (!logfp)
883d60fa 3395 return -1;
101d15e0 3396
98f85ff4
JH
3397 /* Jump to the end */
3398 if (fseek(logfp, 0, SEEK_END) < 0)
3399 return error("cannot seek back reflog for %s: %s",
3400 refname, strerror(errno));
3401 pos = ftell(logfp);
3402 while (!ret && 0 < pos) {
3403 int cnt;
3404 size_t nread;
3405 char buf[BUFSIZ];
3406 char *endp, *scanp;
3407
3408 /* Fill next block from the end */
3409 cnt = (sizeof(buf) < pos) ? sizeof(buf) : pos;
3410 if (fseek(logfp, pos - cnt, SEEK_SET))
3411 return error("cannot seek back reflog for %s: %s",
3412 refname, strerror(errno));
3413 nread = fread(buf, cnt, 1, logfp);
e4ca819a 3414 if (nread != 1)
98f85ff4
JH
3415 return error("cannot read %d bytes from reflog for %s: %s",
3416 cnt, refname, strerror(errno));
3417 pos -= cnt;
3418
3419 scanp = endp = buf + cnt;
3420 if (at_tail && scanp[-1] == '\n')
3421 /* Looking at the final LF at the end of the file */
3422 scanp--;
3423 at_tail = 0;
3424
3425 while (buf < scanp) {
3426 /*
3427 * terminating LF of the previous line, or the beginning
3428 * of the buffer.
3429 */
3430 char *bp;
3431
3432 bp = find_beginning_of_line(buf, scanp);
3433
3434 if (*bp != '\n') {
3435 strbuf_splice(&sb, 0, 0, buf, endp - buf);
3436 if (pos)
3437 break; /* need to fill another block */
3438 scanp = buf - 1; /* leave loop */
3439 } else {
3440 /*
3441 * (bp + 1) thru endp is the beginning of the
3442 * current line we have in sb
3443 */
3444 strbuf_splice(&sb, 0, 0, bp + 1, endp - (bp + 1));
3445 scanp = bp;
3446 endp = bp + 1;
3447 }
3448 ret = show_one_reflog_ent(&sb, fn, cb_data);
3449 strbuf_reset(&sb);
3450 if (ret)
3451 break;
9d33f7c2 3452 }
101d15e0 3453
2ff81662 3454 }
98f85ff4 3455 if (!ret && sb.len)
9a7a183b 3456 ret = show_one_reflog_ent(&sb, fn, cb_data);
98f85ff4 3457
2ff81662 3458 fclose(logfp);
8ca78803 3459 strbuf_release(&sb);
2266bf27 3460 return ret;
2ff81662 3461}
e29cb53a 3462
dfefa935 3463int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn, void *cb_data)
101d15e0 3464{
98f85ff4
JH
3465 FILE *logfp;
3466 struct strbuf sb = STRBUF_INIT;
3467 int ret = 0;
3468
3469 logfp = fopen(git_path("logs/%s", refname), "r");
3470 if (!logfp)
3471 return -1;
101d15e0 3472
98f85ff4
JH
3473 while (!ret && !strbuf_getwholeline(&sb, logfp, '\n'))
3474 ret = show_one_reflog_ent(&sb, fn, cb_data);
3475 fclose(logfp);
3476 strbuf_release(&sb);
3477 return ret;
3478}
989c0e5d
MH
3479/*
3480 * Call fn for each reflog in the namespace indicated by name. name
3481 * must be empty or end with '/'. Name will be used as a scratch
3482 * space, but its contents will be restored before return.
3483 */
3484static int do_for_each_reflog(struct strbuf *name, each_ref_fn fn, void *cb_data)
eb8381c8 3485{
989c0e5d 3486 DIR *d = opendir(git_path("logs/%s", name->buf));
fcee5a14 3487 int retval = 0;
93c603fc 3488 struct dirent *de;
989c0e5d 3489 int oldlen = name->len;
eb8381c8 3490
93c603fc 3491 if (!d)
989c0e5d 3492 return name->len ? errno : 0;
eb8381c8 3493
93c603fc
MH
3494 while ((de = readdir(d)) != NULL) {
3495 struct stat st;
eb8381c8 3496
93c603fc
MH
3497 if (de->d_name[0] == '.')
3498 continue;
2975c770 3499 if (ends_with(de->d_name, ".lock"))
93c603fc 3500 continue;
989c0e5d
MH
3501 strbuf_addstr(name, de->d_name);
3502 if (stat(git_path("logs/%s", name->buf), &st) < 0) {
3503 ; /* silently ignore */
93c603fc 3504 } else {
eb8381c8 3505 if (S_ISDIR(st.st_mode)) {
989c0e5d
MH
3506 strbuf_addch(name, '/');
3507 retval = do_for_each_reflog(name, fn, cb_data);
eb8381c8
NP
3508 } else {
3509 unsigned char sha1[20];
989c0e5d
MH
3510 if (read_ref_full(name->buf, sha1, 0, NULL))
3511 retval = error("bad ref for %s", name->buf);
eb8381c8 3512 else
989c0e5d 3513 retval = fn(name->buf, sha1, 0, cb_data);
eb8381c8
NP
3514 }
3515 if (retval)
3516 break;
3517 }
989c0e5d 3518 strbuf_setlen(name, oldlen);
eb8381c8 3519 }
93c603fc 3520 closedir(d);
eb8381c8
NP
3521 return retval;
3522}
3523
3524int for_each_reflog(each_ref_fn fn, void *cb_data)
3525{
989c0e5d
MH
3526 int retval;
3527 struct strbuf name;
3528 strbuf_init(&name, PATH_MAX);
3529 retval = do_for_each_reflog(&name, fn, cb_data);
3530 strbuf_release(&name);
3531 return retval;
eb8381c8 3532}
3d9f037c 3533
4738a333
BK
3534static struct ref_lock *update_ref_lock(const char *refname,
3535 const unsigned char *oldval,
3536 int flags, int *type_p,
3537 enum action_on_err onerr)
3d9f037c 3538{
4738a333
BK
3539 struct ref_lock *lock;
3540 lock = lock_any_ref_for_update(refname, oldval, flags, type_p);
3d9f037c
CR
3541 if (!lock) {
3542 const char *str = "Cannot lock the ref '%s'.";
3543 switch (onerr) {
f4124112
MH
3544 case UPDATE_REFS_MSG_ON_ERR: error(str, refname); break;
3545 case UPDATE_REFS_DIE_ON_ERR: die(str, refname); break;
3546 case UPDATE_REFS_QUIET_ON_ERR: break;
3d9f037c 3547 }
3d9f037c 3548 }
4738a333
BK
3549 return lock;
3550}
3551
3552static int update_ref_write(const char *action, const char *refname,
3553 const unsigned char *sha1, struct ref_lock *lock,
c1703d76 3554 struct strbuf *err, enum action_on_err onerr)
4738a333 3555{
3d9f037c
CR
3556 if (write_ref_sha1(lock, sha1, action) < 0) {
3557 const char *str = "Cannot update the ref '%s'.";
c1703d76
RS
3558 if (err)
3559 strbuf_addf(err, str, refname);
3560
3d9f037c 3561 switch (onerr) {
f4124112
MH
3562 case UPDATE_REFS_MSG_ON_ERR: error(str, refname); break;
3563 case UPDATE_REFS_DIE_ON_ERR: die(str, refname); break;
3564 case UPDATE_REFS_QUIET_ON_ERR: break;
3d9f037c
CR
3565 }
3566 return 1;
3567 }
3568 return 0;
3569}
cda69f48 3570
b5c8ea2a
MH
3571/**
3572 * Information needed for a single ref update. Set new_sha1 to the
3573 * new value or to zero to delete the ref. To check the old value
3574 * while locking the ref, set have_old to 1 and set old_sha1 to the
3575 * value or to zero to ensure the ref does not exist before update.
3576 */
3577struct ref_update {
b5c8ea2a
MH
3578 unsigned char new_sha1[20];
3579 unsigned char old_sha1[20];
3580 int flags; /* REF_NODEREF? */
3581 int have_old; /* 1 if old_sha1 is valid, 0 otherwise */
81c960e4 3582 struct ref_lock *lock;
84178db7 3583 int type;
88615910 3584 const char refname[FLEX_ARRAY];
b5c8ea2a
MH
3585};
3586
caa4046c
MH
3587/*
3588 * Data structure for holding a reference transaction, which can
3589 * consist of checks and updates to multiple references, carried out
3590 * as atomically as possible. This structure is opaque to callers.
3591 */
3592struct ref_transaction {
3593 struct ref_update **updates;
3594 size_t alloc;
3595 size_t nr;
3596};
3597
3598struct ref_transaction *ref_transaction_begin(void)
3599{
3600 return xcalloc(1, sizeof(struct ref_transaction));
3601}
3602
026bd1d3 3603void ref_transaction_free(struct ref_transaction *transaction)
caa4046c
MH
3604{
3605 int i;
3606
1b07255c
RS
3607 if (!transaction)
3608 return;
3609
88615910
MH
3610 for (i = 0; i < transaction->nr; i++)
3611 free(transaction->updates[i]);
caa4046c
MH
3612
3613 free(transaction->updates);
3614 free(transaction);
3615}
3616
caa4046c
MH
3617static struct ref_update *add_update(struct ref_transaction *transaction,
3618 const char *refname)
3619{
88615910
MH
3620 size_t len = strlen(refname);
3621 struct ref_update *update = xcalloc(1, sizeof(*update) + len + 1);
caa4046c 3622
88615910 3623 strcpy((char *)update->refname, refname);
caa4046c
MH
3624 ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
3625 transaction->updates[transaction->nr++] = update;
3626 return update;
3627}
3628
8e34800e
RS
3629int ref_transaction_update(struct ref_transaction *transaction,
3630 const char *refname,
3631 const unsigned char *new_sha1,
3632 const unsigned char *old_sha1,
3633 int flags, int have_old,
3634 struct strbuf *err)
caa4046c 3635{
8e34800e 3636 struct ref_update *update;
caa4046c 3637
8e34800e
RS
3638 if (have_old && !old_sha1)
3639 die("BUG: have_old is true but old_sha1 is NULL");
caa4046c 3640
8e34800e 3641 update = add_update(transaction, refname);
caa4046c
MH
3642 hashcpy(update->new_sha1, new_sha1);
3643 update->flags = flags;
3644 update->have_old = have_old;
3645 if (have_old)
3646 hashcpy(update->old_sha1, old_sha1);
8e34800e 3647 return 0;
caa4046c
MH
3648}
3649
3650void ref_transaction_create(struct ref_transaction *transaction,
3651 const char *refname,
f1c9350a 3652 const unsigned char *new_sha1,
caa4046c
MH
3653 int flags)
3654{
3655 struct ref_update *update = add_update(transaction, refname);
3656
3657 assert(!is_null_sha1(new_sha1));
3658 hashcpy(update->new_sha1, new_sha1);
3659 hashclr(update->old_sha1);
3660 update->flags = flags;
3661 update->have_old = 1;
3662}
3663
3664void ref_transaction_delete(struct ref_transaction *transaction,
3665 const char *refname,
f1c9350a 3666 const unsigned char *old_sha1,
caa4046c
MH
3667 int flags, int have_old)
3668{
3669 struct ref_update *update = add_update(transaction, refname);
3670
3671 update->flags = flags;
3672 update->have_old = have_old;
3673 if (have_old) {
3674 assert(!is_null_sha1(old_sha1));
3675 hashcpy(update->old_sha1, old_sha1);
3676 }
3677}
3678
4738a333
BK
3679int update_ref(const char *action, const char *refname,
3680 const unsigned char *sha1, const unsigned char *oldval,
3681 int flags, enum action_on_err onerr)
3682{
3683 struct ref_lock *lock;
ce1e8462 3684 lock = update_ref_lock(refname, oldval, flags, NULL, onerr);
4738a333
BK
3685 if (!lock)
3686 return 1;
c1703d76 3687 return update_ref_write(action, refname, sha1, lock, NULL, onerr);
4738a333
BK
3688}
3689
98aee92d
BK
3690static int ref_update_compare(const void *r1, const void *r2)
3691{
3692 const struct ref_update * const *u1 = r1;
3693 const struct ref_update * const *u2 = r2;
5524e241 3694 return strcmp((*u1)->refname, (*u2)->refname);
98aee92d
BK
3695}
3696
3697static int ref_update_reject_duplicates(struct ref_update **updates, int n,
01319837 3698 struct strbuf *err)
98aee92d
BK
3699{
3700 int i;
3701 for (i = 1; i < n; i++)
5524e241 3702 if (!strcmp(updates[i - 1]->refname, updates[i]->refname)) {
98aee92d
BK
3703 const char *str =
3704 "Multiple updates for ref '%s' not allowed.";
038d0051
RS
3705 if (err)
3706 strbuf_addf(err, str, updates[i]->refname);
3707
98aee92d
BK
3708 return 1;
3709 }
3710 return 0;
3711}
3712
b5c8ea2a 3713int ref_transaction_commit(struct ref_transaction *transaction,
01319837 3714 const char *msg, struct strbuf *err)
98aee92d
BK
3715{
3716 int ret = 0, delnum = 0, i;
98aee92d 3717 const char **delnames;
b5c8ea2a 3718 int n = transaction->nr;
6a402338 3719 struct ref_update **updates = transaction->updates;
98aee92d 3720
b5c8ea2a 3721 if (!n)
98aee92d
BK
3722 return 0;
3723
3724 /* Allocate work space */
98aee92d
BK
3725 delnames = xmalloc(sizeof(*delnames) * n);
3726
3727 /* Copy, sort, and reject duplicate refs */
98aee92d 3728 qsort(updates, n, sizeof(*updates), ref_update_compare);
01319837 3729 ret = ref_update_reject_duplicates(updates, n, err);
98aee92d
BK
3730 if (ret)
3731 goto cleanup;
3732
3733 /* Acquire all locks while verifying old values */
3734 for (i = 0; i < n; i++) {
cb198d21
MH
3735 struct ref_update *update = updates[i];
3736
81c960e4
MH
3737 update->lock = update_ref_lock(update->refname,
3738 (update->have_old ?
3739 update->old_sha1 : NULL),
3740 update->flags,
01319837
RS
3741 &update->type,
3742 UPDATE_REFS_QUIET_ON_ERR);
81c960e4 3743 if (!update->lock) {
995f8746
RS
3744 if (err)
3745 strbuf_addf(err, "Cannot lock the ref '%s'.",
3746 update->refname);
98aee92d
BK
3747 ret = 1;
3748 goto cleanup;
3749 }
3750 }
3751
3752 /* Perform updates first so live commits remain referenced */
cb198d21
MH
3753 for (i = 0; i < n; i++) {
3754 struct ref_update *update = updates[i];
3755
3756 if (!is_null_sha1(update->new_sha1)) {
b5c8ea2a 3757 ret = update_ref_write(msg,
cb198d21
MH
3758 update->refname,
3759 update->new_sha1,
01319837
RS
3760 update->lock, err,
3761 UPDATE_REFS_QUIET_ON_ERR);
81c960e4 3762 update->lock = NULL; /* freed by update_ref_write */
98aee92d
BK
3763 if (ret)
3764 goto cleanup;
3765 }
cb198d21 3766 }
98aee92d
BK
3767
3768 /* Perform deletes now that updates are safely completed */
81c960e4
MH
3769 for (i = 0; i < n; i++) {
3770 struct ref_update *update = updates[i];
3771
3772 if (update->lock) {
3773 delnames[delnum++] = update->lock->ref_name;
84178db7 3774 ret |= delete_ref_loose(update->lock, update->type);
98aee92d 3775 }
81c960e4
MH
3776 }
3777
60bca085 3778 ret |= repack_without_refs(delnames, delnum, err);
98aee92d
BK
3779 for (i = 0; i < delnum; i++)
3780 unlink_or_warn(git_path("logs/%s", delnames[i]));
3781 clear_loose_ref_cache(&ref_cache);
3782
3783cleanup:
3784 for (i = 0; i < n; i++)
81c960e4
MH
3785 if (updates[i]->lock)
3786 unlock_ref(updates[i]->lock);
98aee92d 3787 free(delnames);
caa4046c
MH
3788 return ret;
3789}
3790
dfefa935 3791char *shorten_unambiguous_ref(const char *refname, int strict)
7c2b3029
JK
3792{
3793 int i;
3794 static char **scanf_fmts;
3795 static int nr_rules;
3796 char *short_name;
3797
7c2b3029 3798 if (!nr_rules) {
4346663a
MH
3799 /*
3800 * Pre-generate scanf formats from ref_rev_parse_rules[].
3801 * Generate a format suitable for scanf from a
3802 * ref_rev_parse_rules rule by interpolating "%s" at the
3803 * location of the "%.*s".
3804 */
7c2b3029 3805 size_t total_len = 0;
84d5633f 3806 size_t offset = 0;
7c2b3029
JK
3807
3808 /* the rule list is NULL terminated, count them first */
a4165851 3809 for (nr_rules = 0; ref_rev_parse_rules[nr_rules]; nr_rules++)
7902fe03
MH
3810 /* -2 for strlen("%.*s") - strlen("%s"); +1 for NUL */
3811 total_len += strlen(ref_rev_parse_rules[nr_rules]) - 2 + 1;
7c2b3029
JK
3812
3813 scanf_fmts = xmalloc(nr_rules * sizeof(char *) + total_len);
3814
84d5633f 3815 offset = 0;
7c2b3029 3816 for (i = 0; i < nr_rules; i++) {
4346663a 3817 assert(offset < total_len);
84d5633f 3818 scanf_fmts[i] = (char *)&scanf_fmts[nr_rules] + offset;
4346663a
MH
3819 offset += snprintf(scanf_fmts[i], total_len - offset,
3820 ref_rev_parse_rules[i], 2, "%s") + 1;
7c2b3029
JK
3821 }
3822 }
3823
3824 /* bail out if there are no rules */
3825 if (!nr_rules)
dfefa935 3826 return xstrdup(refname);
7c2b3029 3827
dfefa935
MH
3828 /* buffer for scanf result, at most refname must fit */
3829 short_name = xstrdup(refname);
7c2b3029
JK
3830
3831 /* skip first rule, it will always match */
3832 for (i = nr_rules - 1; i > 0 ; --i) {
3833 int j;
6e7b3309 3834 int rules_to_fail = i;
7c2b3029
JK
3835 int short_name_len;
3836
dfefa935 3837 if (1 != sscanf(refname, scanf_fmts[i], short_name))
7c2b3029
JK
3838 continue;
3839
3840 short_name_len = strlen(short_name);
3841
6e7b3309
BW
3842 /*
3843 * in strict mode, all (except the matched one) rules
3844 * must fail to resolve to a valid non-ambiguous ref
3845 */
3846 if (strict)
3847 rules_to_fail = nr_rules;
3848
7c2b3029
JK
3849 /*
3850 * check if the short name resolves to a valid ref,
3851 * but use only rules prior to the matched one
3852 */
6e7b3309 3853 for (j = 0; j < rules_to_fail; j++) {
7c2b3029 3854 const char *rule = ref_rev_parse_rules[j];
7c2b3029
JK
3855 char refname[PATH_MAX];
3856
6e7b3309
BW
3857 /* skip matched rule */
3858 if (i == j)
3859 continue;
3860
7c2b3029
JK
3861 /*
3862 * the short name is ambiguous, if it resolves
3863 * (with this previous rule) to a valid ref
3864 * read_ref() returns 0 on success
3865 */
3866 mksnpath(refname, sizeof(refname),
3867 rule, short_name_len, short_name);
c6893323 3868 if (ref_exists(refname))
7c2b3029
JK
3869 break;
3870 }
3871
3872 /*
3873 * short name is non-ambiguous if all previous rules
3874 * haven't resolved to a valid ref
3875 */
6e7b3309 3876 if (j == rules_to_fail)
7c2b3029
JK
3877 return short_name;
3878 }
3879
3880 free(short_name);
dfefa935 3881 return xstrdup(refname);
7c2b3029 3882}
daebaa78
JH
3883
3884static struct string_list *hide_refs;
3885
3886int parse_hide_refs_config(const char *var, const char *value, const char *section)
3887{
3888 if (!strcmp("transfer.hiderefs", var) ||
3889 /* NEEDSWORK: use parse_config_key() once both are merged */
59556548 3890 (starts_with(var, section) && var[strlen(section)] == '.' &&
daebaa78
JH
3891 !strcmp(var + strlen(section), ".hiderefs"))) {
3892 char *ref;
3893 int len;
3894
3895 if (!value)
3896 return config_error_nonbool(var);
3897 ref = xstrdup(value);
3898 len = strlen(ref);
3899 while (len && ref[len - 1] == '/')
3900 ref[--len] = '\0';
3901 if (!hide_refs) {
3902 hide_refs = xcalloc(1, sizeof(*hide_refs));
3903 hide_refs->strdup_strings = 1;
3904 }
3905 string_list_append(hide_refs, ref);
3906 }
3907 return 0;
3908}
3909
3910int ref_is_hidden(const char *refname)
3911{
3912 struct string_list_item *item;
3913
3914 if (!hide_refs)
3915 return 0;
3916 for_each_string_list_item(item, hide_refs) {
3917 int len;
59556548 3918 if (!starts_with(refname, item->string))
daebaa78
JH
3919 continue;
3920 len = strlen(item->string);
3921 if (!refname[len] || refname[len] == '/')
3922 return 1;
3923 }
3924 return 0;
3925}