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