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