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