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