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