]> git.ipfire.org Git - thirdparty/git.git/blame - refs.c
lock_ref_sha1_basic(): improve diagnostics for ref D/F conflicts
[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,
4a32b2e0
MH
2336 unsigned int flags, int *type_p,
2337 struct strbuf *err)
4bd18c43 2338{
434cd0cd 2339 char *ref_file;
dfefa935 2340 const char *orig_refname = refname;
4bd18c43 2341 struct ref_lock *lock;
5cc3cef9 2342 int last_errno = 0;
acd3b9ec 2343 int type, lflags;
4431fcc4 2344 int mustexist = (old_sha1 && !is_null_sha1(old_sha1));
7695d118 2345 int resolve_flags = 0;
c4c61c76 2346 int attempts_remaining = 3;
4a32b2e0
MH
2347
2348 assert(err);
4bd18c43
SP
2349
2350 lock = xcalloc(1, sizeof(struct ref_lock));
2351 lock->lock_fd = -1;
2352
7695d118
RS
2353 if (mustexist)
2354 resolve_flags |= RESOLVE_REF_READING;
d0f810f0
RS
2355 if (flags & REF_DELETING) {
2356 resolve_flags |= RESOLVE_REF_ALLOW_BAD_NAME;
2357 if (flags & REF_NODEREF)
2358 resolve_flags |= RESOLVE_REF_NO_RECURSE;
2359 }
7695d118
RS
2360
2361 refname = resolve_ref_unsafe(refname, resolve_flags,
2362 lock->old_sha1, &type);
dfefa935 2363 if (!refname && errno == EISDIR) {
bc7127ef
JH
2364 /* we are trying to lock foo but we used to
2365 * have foo/bar which now does not exist;
2366 * it is normal for the empty directory 'foo'
2367 * to remain.
2368 */
dfefa935 2369 ref_file = git_path("%s", orig_refname);
5cc3cef9
JH
2370 if (remove_empty_directories(ref_file)) {
2371 last_errno = errno;
5b2d8d6f
MH
2372
2373 if (!verify_refname_available(orig_refname, extras, skip,
2374 get_loose_refs(&ref_cache), err))
2375 strbuf_addf(err, "there are still refs under '%s'",
2376 orig_refname);
2377
5cc3cef9
JH
2378 goto error_return;
2379 }
7695d118
RS
2380 refname = resolve_ref_unsafe(orig_refname, resolve_flags,
2381 lock->old_sha1, &type);
bc7127ef 2382 }
68db31cc
SV
2383 if (type_p)
2384 *type_p = type;
dfefa935 2385 if (!refname) {
5cc3cef9 2386 last_errno = errno;
5b2d8d6f
MH
2387 if (last_errno != ENOTDIR ||
2388 !verify_refname_available(orig_refname, extras, skip,
2389 get_loose_refs(&ref_cache), err))
2390 strbuf_addf(err, "unable to resolve reference %s: %s",
2391 orig_refname, strerror(last_errno));
2392
5cc3cef9 2393 goto error_return;
4bd18c43 2394 }
074336e5
MH
2395 /*
2396 * If the ref did not exist and we are creating it, make sure
2397 * there is no existing packed ref whose name begins with our
2398 * refname, nor a packed ref whose name is a proper prefix of
2399 * our refname.
c976d415 2400 */
074336e5 2401 if (is_null_sha1(lock->old_sha1) &&
1146f17e 2402 verify_refname_available(refname, extras, skip,
4a32b2e0 2403 get_packed_refs(&ref_cache), err)) {
f475e08e 2404 last_errno = ENOTDIR;
c976d415 2405 goto error_return;
f475e08e 2406 }
22a3844e 2407
c33d5174 2408 lock->lk = xcalloc(1, sizeof(struct lock_file));
4bd18c43 2409
e5c223e9 2410 lflags = 0;
acd3b9ec 2411 if (flags & REF_NODEREF) {
dfefa935 2412 refname = orig_refname;
47ba4662 2413 lflags |= LOCK_NO_DEREF;
acd3b9ec 2414 }
dfefa935
MH
2415 lock->ref_name = xstrdup(refname);
2416 lock->orig_ref_name = xstrdup(orig_refname);
2417 ref_file = git_path("%s", refname);
4bd18c43 2418
c4c61c76
MH
2419 retry:
2420 switch (safe_create_leading_directories(ref_file)) {
2421 case SCLD_OK:
2422 break; /* success */
2423 case SCLD_VANISHED:
2424 if (--attempts_remaining > 0)
2425 goto retry;
2426 /* fall through */
2427 default:
5cc3cef9 2428 last_errno = errno;
4a32b2e0 2429 strbuf_addf(err, "unable to create directory for %s", ref_file);
5cc3cef9
JH
2430 goto error_return;
2431 }
4bd18c43 2432
acd3b9ec 2433 lock->lock_fd = hold_lock_file_for_update(lock->lk, ref_file, lflags);
e5c223e9 2434 if (lock->lock_fd < 0) {
06839515 2435 last_errno = errno;
e5c223e9
MH
2436 if (errno == ENOENT && --attempts_remaining > 0)
2437 /*
2438 * Maybe somebody just deleted one of the
2439 * directories leading to ref_file. Try
2440 * again:
2441 */
2442 goto retry;
06839515 2443 else {
4a32b2e0 2444 unable_to_lock_message(ref_file, errno, err);
06839515
RS
2445 goto error_return;
2446 }
e5c223e9 2447 }
4bd18c43 2448 return old_sha1 ? verify_lock(lock, old_sha1, mustexist) : lock;
5cc3cef9
JH
2449
2450 error_return:
2451 unlock_ref(lock);
2452 errno = last_errno;
2453 return NULL;
4bd18c43
SP
2454}
2455
fec3137f
MH
2456/*
2457 * Write an entry to the packed-refs file for the specified refname.
2458 * If peeled is non-NULL, write it as the entry's peeled value.
2459 */
9540ce50 2460static void write_packed_entry(FILE *fh, char *refname, unsigned char *sha1,
fec3137f 2461 unsigned char *peeled)
d66da478 2462{
9540ce50
JK
2463 fprintf_or_die(fh, "%s %s\n", sha1_to_hex(sha1), refname);
2464 if (peeled)
2465 fprintf_or_die(fh, "^%s\n", sha1_to_hex(peeled));
fec3137f
MH
2466}
2467
7b40d396
MH
2468/*
2469 * An each_ref_entry_fn that writes the entry to a packed-refs file.
2470 */
2471static int write_packed_entry_fn(struct ref_entry *entry, void *cb_data)
2472{
7b40d396
MH
2473 enum peel_status peel_status = peel_entry(entry, 0);
2474
2475 if (peel_status != PEEL_PEELED && peel_status != PEEL_NON_TAG)
2476 error("internal error: %s is not a valid packed reference!",
2477 entry->name);
9540ce50 2478 write_packed_entry(cb_data, entry->name, entry->u.value.sha1,
7b40d396
MH
2479 peel_status == PEEL_PEELED ?
2480 entry->u.value.peeled : NULL);
2481 return 0;
2482}
2483
447ff1bf 2484/* This should return a meaningful errno on failure */
9f69d297
MH
2485int lock_packed_refs(int flags)
2486{
2487 struct packed_ref_cache *packed_ref_cache;
2488
9f69d297
MH
2489 if (hold_lock_file_for_update(&packlock, git_path("packed-refs"), flags) < 0)
2490 return -1;
5d478f5c
MH
2491 /*
2492 * Get the current packed-refs while holding the lock. If the
2493 * packed-refs file has been modified since we last read it,
2494 * this will automatically invalidate the cache and re-read
2495 * the packed-refs file.
2496 */
9f69d297
MH
2497 packed_ref_cache = get_packed_ref_cache(&ref_cache);
2498 packed_ref_cache->lock = &packlock;
4f6b83e3
MH
2499 /* Increment the reference count to prevent it from being freed: */
2500 acquire_packed_ref_cache(packed_ref_cache);
9f69d297
MH
2501 return 0;
2502}
2503
d3f66555
RS
2504/*
2505 * Commit the packed refs changes.
2506 * On error we must make sure that errno contains a meaningful value.
2507 */
9f69d297
MH
2508int commit_packed_refs(void)
2509{
2510 struct packed_ref_cache *packed_ref_cache =
2511 get_packed_ref_cache(&ref_cache);
2512 int error = 0;
d3f66555 2513 int save_errno = 0;
9540ce50 2514 FILE *out;
9f69d297
MH
2515
2516 if (!packed_ref_cache->lock)
2517 die("internal error: packed-refs not locked");
9f69d297 2518
6e578a31 2519 out = fdopen_lock_file(packed_ref_cache->lock, "w");
9540ce50
JK
2520 if (!out)
2521 die_errno("unable to fdopen packed-refs descriptor");
2522
2523 fprintf_or_die(out, "%s", PACKED_REFS_HEADER);
9f69d297 2524 do_for_each_entry_in_dir(get_packed_ref_dir(packed_ref_cache),
9540ce50 2525 0, write_packed_entry_fn, out);
9540ce50 2526
d3f66555
RS
2527 if (commit_lock_file(packed_ref_cache->lock)) {
2528 save_errno = errno;
9f69d297 2529 error = -1;
d3f66555 2530 }
9f69d297 2531 packed_ref_cache->lock = NULL;
4f6b83e3 2532 release_packed_ref_cache(packed_ref_cache);
d3f66555 2533 errno = save_errno;
9f69d297
MH
2534 return error;
2535}
2536
2537void rollback_packed_refs(void)
2538{
2539 struct packed_ref_cache *packed_ref_cache =
2540 get_packed_ref_cache(&ref_cache);
2541
2542 if (!packed_ref_cache->lock)
2543 die("internal error: packed-refs not locked");
2544 rollback_lock_file(packed_ref_cache->lock);
2545 packed_ref_cache->lock = NULL;
4f6b83e3 2546 release_packed_ref_cache(packed_ref_cache);
9f69d297
MH
2547 clear_packed_ref_cache(&ref_cache);
2548}
2549
32d462ce
MH
2550struct ref_to_prune {
2551 struct ref_to_prune *next;
2552 unsigned char sha1[20];
2553 char name[FLEX_ARRAY];
2554};
2555
2556struct pack_refs_cb_data {
2557 unsigned int flags;
267f9a8c 2558 struct ref_dir *packed_refs;
32d462ce 2559 struct ref_to_prune *ref_to_prune;
32d462ce
MH
2560};
2561
267f9a8c
MH
2562/*
2563 * An each_ref_entry_fn that is run over loose references only. If
2564 * the loose reference can be packed, add an entry in the packed ref
2565 * cache. If the reference should be pruned, also add it to
2566 * ref_to_prune in the pack_refs_cb_data.
2567 */
2568static int pack_if_possible_fn(struct ref_entry *entry, void *cb_data)
32d462ce
MH
2569{
2570 struct pack_refs_cb_data *cb = cb_data;
f85354b5 2571 enum peel_status peel_status;
267f9a8c 2572 struct ref_entry *packed_entry;
59556548 2573 int is_tag_ref = starts_with(entry->name, "refs/tags/");
32d462ce 2574
267f9a8c
MH
2575 /* ALWAYS pack tags */
2576 if (!(cb->flags & PACK_REFS_ALL) && !is_tag_ref)
32d462ce
MH
2577 return 0;
2578
b2a8226d
MH
2579 /* Do not pack symbolic or broken refs: */
2580 if ((entry->flag & REF_ISSYMREF) || !ref_resolves_to_object(entry))
2581 return 0;
2582
267f9a8c 2583 /* Add a packed ref cache entry equivalent to the loose entry. */
f85354b5 2584 peel_status = peel_entry(entry, 1);
0f29920f 2585 if (peel_status != PEEL_PEELED && peel_status != PEEL_NON_TAG)
f85354b5
MH
2586 die("internal error peeling reference %s (%s)",
2587 entry->name, sha1_to_hex(entry->u.value.sha1));
267f9a8c
MH
2588 packed_entry = find_ref(cb->packed_refs, entry->name);
2589 if (packed_entry) {
2590 /* Overwrite existing packed entry with info from loose entry */
2591 packed_entry->flag = REF_ISPACKED | REF_KNOWS_PEELED;
2592 hashcpy(packed_entry->u.value.sha1, entry->u.value.sha1);
2593 } else {
2594 packed_entry = create_ref_entry(entry->name, entry->u.value.sha1,
2595 REF_ISPACKED | REF_KNOWS_PEELED, 0);
2596 add_ref(cb->packed_refs, packed_entry);
2597 }
2598 hashcpy(packed_entry->u.value.peeled, entry->u.value.peeled);
32d462ce 2599
267f9a8c
MH
2600 /* Schedule the loose reference for pruning if requested. */
2601 if ((cb->flags & PACK_REFS_PRUNE)) {
12e77559 2602 int namelen = strlen(entry->name) + 1;
32d462ce 2603 struct ref_to_prune *n = xcalloc(1, sizeof(*n) + namelen);
12e77559
MH
2604 hashcpy(n->sha1, entry->u.value.sha1);
2605 strcpy(n->name, entry->name);
32d462ce
MH
2606 n->next = cb->ref_to_prune;
2607 cb->ref_to_prune = n;
2608 }
d66da478
MH
2609 return 0;
2610}
2611
32d462ce
MH
2612/*
2613 * Remove empty parents, but spare refs/ and immediate subdirs.
2614 * Note: munges *name.
2615 */
2616static void try_remove_empty_parents(char *name)
2617{
2618 char *p, *q;
2619 int i;
2620 p = name;
2621 for (i = 0; i < 2; i++) { /* refs/{heads,tags,...}/ */
2622 while (*p && *p != '/')
2623 p++;
2624 /* tolerate duplicate slashes; see check_refname_format() */
2625 while (*p == '/')
2626 p++;
2627 }
2628 for (q = p; *q; q++)
2629 ;
2630 while (1) {
2631 while (q > p && *q != '/')
2632 q--;
2633 while (q > p && *(q-1) == '/')
2634 q--;
2635 if (q == p)
2636 break;
2637 *q = '\0';
2638 if (rmdir(git_path("%s", name)))
2639 break;
2640 }
2641}
2642
2643/* make sure nobody touched the ref, and unlink */
2644static void prune_ref(struct ref_to_prune *r)
2645{
029cdb4a
RS
2646 struct ref_transaction *transaction;
2647 struct strbuf err = STRBUF_INIT;
32d462ce 2648
88e7dff9 2649 if (check_refname_format(r->name, 0))
cba12021 2650 return;
32d462ce 2651
029cdb4a
RS
2652 transaction = ref_transaction_begin(&err);
2653 if (!transaction ||
2654 ref_transaction_delete(transaction, r->name, r->sha1,
fb5a6bb6 2655 REF_ISPRUNING, NULL, &err) ||
db7516ab 2656 ref_transaction_commit(transaction, &err)) {
029cdb4a
RS
2657 ref_transaction_free(transaction);
2658 error("%s", err.buf);
2659 strbuf_release(&err);
2660 return;
32d462ce 2661 }
029cdb4a
RS
2662 ref_transaction_free(transaction);
2663 strbuf_release(&err);
2664 try_remove_empty_parents(r->name);
32d462ce
MH
2665}
2666
2667static void prune_refs(struct ref_to_prune *r)
2668{
2669 while (r) {
2670 prune_ref(r);
2671 r = r->next;
2672 }
2673}
2674
32d462ce
MH
2675int pack_refs(unsigned int flags)
2676{
32d462ce
MH
2677 struct pack_refs_cb_data cbdata;
2678
2679 memset(&cbdata, 0, sizeof(cbdata));
2680 cbdata.flags = flags;
2681
9f69d297 2682 lock_packed_refs(LOCK_DIE_ON_ERROR);
267f9a8c 2683 cbdata.packed_refs = get_packed_refs(&ref_cache);
32d462ce 2684
267f9a8c
MH
2685 do_for_each_entry_in_dir(get_loose_refs(&ref_cache), 0,
2686 pack_if_possible_fn, &cbdata);
32d462ce 2687
9f69d297 2688 if (commit_packed_refs())
32d462ce 2689 die_errno("unable to overwrite old ref-pack file");
9f69d297 2690
32d462ce
MH
2691 prune_refs(cbdata.ref_to_prune);
2692 return 0;
2693}
2694
4a45b2f3 2695int repack_without_refs(struct string_list *refnames, struct strbuf *err)
c0277d15 2696{
7618fd80 2697 struct ref_dir *packed;
ea56c4e0 2698 struct string_list_item *refname;
4a45b2f3 2699 int ret, needs_repacking = 0, removed = 0;
61cee0db 2700
5a603b04
JN
2701 assert(err);
2702
61cee0db 2703 /* Look for a packed ref */
4a45b2f3
MH
2704 for_each_string_list_item(refname, refnames) {
2705 if (get_packed_ref(refname->string)) {
2706 needs_repacking = 1;
61cee0db 2707 break;
4a45b2f3
MH
2708 }
2709 }
7618fd80 2710
61cee0db 2711 /* Avoid locking if we have nothing to do */
4a45b2f3 2712 if (!needs_repacking)
61cee0db 2713 return 0; /* no refname exists in packed refs */
7618fd80 2714
9f69d297 2715 if (lock_packed_refs(0)) {
5a603b04
JN
2716 unable_to_lock_message(git_path("packed-refs"), errno, err);
2717 return -1;
1b018fd9 2718 }
9da31cb0 2719 packed = get_packed_refs(&ref_cache);
7b40d396 2720
61cee0db 2721 /* Remove refnames from the cache */
4a45b2f3
MH
2722 for_each_string_list_item(refname, refnames)
2723 if (remove_entry(packed, refname->string) != -1)
61cee0db
BK
2724 removed = 1;
2725 if (!removed) {
506a760d 2726 /*
61cee0db 2727 * All packed entries disappeared while we were
506a760d
MH
2728 * acquiring the lock.
2729 */
9f69d297 2730 rollback_packed_refs();
506a760d
MH
2731 return 0;
2732 }
7b40d396 2733
61cee0db 2734 /* Write what remains */
60bca085 2735 ret = commit_packed_refs();
5a603b04 2736 if (ret)
60bca085
RS
2737 strbuf_addf(err, "unable to overwrite old ref-pack file: %s",
2738 strerror(errno));
2739 return ret;
c0277d15
JH
2740}
2741
dbdcac7d 2742static int delete_ref_loose(struct ref_lock *lock, int flag, struct strbuf *err)
2ddb5d17 2743{
5a603b04
JN
2744 assert(err);
2745
045a476f 2746 if (!(flag & REF_ISPACKED) || flag & REF_ISSYMREF) {
91f1f191
MH
2747 /*
2748 * loose. The loose file name is the same as the
2749 * lockfile name, minus ".lock":
2750 */
ec38b4e4 2751 char *loose_filename = get_locked_file_path(lock->lk);
dbdcac7d 2752 int res = unlink_or_msg(loose_filename, err);
91f1f191 2753 free(loose_filename);
dbdcac7d 2754 if (res)
2ddb5d17 2755 return 1;
c0277d15 2756 }
2ddb5d17
BK
2757 return 0;
2758}
2759
fec14ec3 2760int delete_ref(const char *refname, const unsigned char *sha1, unsigned int flags)
c0277d15 2761{
7521cc46
RS
2762 struct ref_transaction *transaction;
2763 struct strbuf err = STRBUF_INIT;
c0277d15 2764
7521cc46
RS
2765 transaction = ref_transaction_begin(&err);
2766 if (!transaction ||
fb5a6bb6
MH
2767 ref_transaction_delete(transaction, refname,
2768 (sha1 && !is_null_sha1(sha1)) ? sha1 : NULL,
2769 flags, NULL, &err) ||
db7516ab 2770 ref_transaction_commit(transaction, &err)) {
7521cc46
RS
2771 error("%s", err.buf);
2772 ref_transaction_free(transaction);
2773 strbuf_release(&err);
c0277d15 2774 return 1;
7521cc46
RS
2775 }
2776 ref_transaction_free(transaction);
2777 strbuf_release(&err);
2778 return 0;
4bd18c43
SP
2779}
2780
765c2258
PH
2781/*
2782 * People using contrib's git-new-workdir have .git/logs/refs ->
2783 * /some/other/path/.git/logs/refs, and that may live on another device.
2784 *
2785 * IOW, to avoid cross device rename errors, the temporary renamed log must
2786 * live into logs/refs.
2787 */
2788#define TMP_RENAMED_LOG "logs/refs/.tmp-renamed-log"
2789
fa59ae79
MH
2790static int rename_tmp_log(const char *newrefname)
2791{
f1e9e9a4 2792 int attempts_remaining = 4;
ae4a283e
MH
2793
2794 retry:
08f555cb
MH
2795 switch (safe_create_leading_directories(git_path("logs/%s", newrefname))) {
2796 case SCLD_OK:
2797 break; /* success */
2798 case SCLD_VANISHED:
2799 if (--attempts_remaining > 0)
2800 goto retry;
2801 /* fall through */
2802 default:
fa59ae79
MH
2803 error("unable to create directory for %s", newrefname);
2804 return -1;
2805 }
2806
fa59ae79 2807 if (rename(git_path(TMP_RENAMED_LOG), git_path("logs/%s", newrefname))) {
f1e9e9a4 2808 if ((errno==EISDIR || errno==ENOTDIR) && --attempts_remaining > 0) {
fa59ae79
MH
2809 /*
2810 * rename(a, b) when b is an existing
2811 * directory ought to result in ISDIR, but
2812 * Solaris 5.8 gives ENOTDIR. Sheesh.
2813 */
2814 if (remove_empty_directories(git_path("logs/%s", newrefname))) {
2815 error("Directory not empty: logs/%s", newrefname);
2816 return -1;
2817 }
2818 goto retry;
ae4a283e
MH
2819 } else if (errno == ENOENT && --attempts_remaining > 0) {
2820 /*
2821 * Maybe another process just deleted one of
2822 * the directories in the path to newrefname.
2823 * Try again from the beginning.
2824 */
2825 goto retry;
fa59ae79
MH
2826 } else {
2827 error("unable to move logfile "TMP_RENAMED_LOG" to logs/%s: %s",
2828 newrefname, strerror(errno));
2829 return -1;
2830 }
2831 }
2832 return 0;
2833}
2834
5fe7d825
RS
2835static int rename_ref_available(const char *oldname, const char *newname)
2836{
2837 struct string_list skip = STRING_LIST_INIT_NODUP;
1146f17e 2838 struct strbuf err = STRBUF_INIT;
5fe7d825
RS
2839 int ret;
2840
2841 string_list_insert(&skip, oldname);
5baf37d3 2842 ret = !verify_refname_available(newname, NULL, &skip,
1146f17e 2843 get_packed_refs(&ref_cache), &err)
5baf37d3 2844 && !verify_refname_available(newname, NULL, &skip,
1146f17e
MH
2845 get_loose_refs(&ref_cache), &err);
2846 if (!ret)
2847 error("%s", err.buf);
2848
5fe7d825 2849 string_list_clear(&skip, 0);
1146f17e 2850 strbuf_release(&err);
5fe7d825
RS
2851 return ret;
2852}
2853
aae383db
RS
2854static int write_ref_sha1(struct ref_lock *lock, const unsigned char *sha1,
2855 const char *logmsg);
2856
dfefa935 2857int rename_ref(const char *oldrefname, const char *newrefname, const char *logmsg)
c976d415 2858{
c976d415
LH
2859 unsigned char sha1[20], orig_sha1[20];
2860 int flag = 0, logmoved = 0;
2861 struct ref_lock *lock;
c976d415 2862 struct stat loginfo;
dfefa935 2863 int log = !lstat(git_path("logs/%s", oldrefname), &loginfo);
eca35a25 2864 const char *symref = NULL;
4a32b2e0 2865 struct strbuf err = STRBUF_INIT;
c976d415 2866
450d4c0f 2867 if (log && S_ISLNK(loginfo.st_mode))
dfefa935 2868 return error("reflog for %s is a symlink", oldrefname);
c976d415 2869
7695d118
RS
2870 symref = resolve_ref_unsafe(oldrefname, RESOLVE_REF_READING,
2871 orig_sha1, &flag);
eca35a25 2872 if (flag & REF_ISSYMREF)
fa58186c 2873 return error("refname %s is a symbolic ref, renaming it is not supported",
dfefa935 2874 oldrefname);
eca35a25 2875 if (!symref)
dfefa935 2876 return error("refname %s not found", oldrefname);
c976d415 2877
5fe7d825 2878 if (!rename_ref_available(oldrefname, newrefname))
c976d415
LH
2879 return 1;
2880
dfefa935 2881 if (log && rename(git_path("logs/%s", oldrefname), git_path(TMP_RENAMED_LOG)))
765c2258 2882 return error("unable to move logfile logs/%s to "TMP_RENAMED_LOG": %s",
dfefa935 2883 oldrefname, strerror(errno));
c976d415 2884
dfefa935
MH
2885 if (delete_ref(oldrefname, orig_sha1, REF_NODEREF)) {
2886 error("unable to delete old %s", oldrefname);
c976d415
LH
2887 goto rollback;
2888 }
2889
7695d118 2890 if (!read_ref_full(newrefname, RESOLVE_REF_READING, sha1, NULL) &&
dfefa935 2891 delete_ref(newrefname, sha1, REF_NODEREF)) {
c976d415 2892 if (errno==EISDIR) {
dfefa935
MH
2893 if (remove_empty_directories(git_path("%s", newrefname))) {
2894 error("Directory not empty: %s", newrefname);
c976d415
LH
2895 goto rollback;
2896 }
2897 } else {
dfefa935 2898 error("unable to delete existing %s", newrefname);
c976d415
LH
2899 goto rollback;
2900 }
2901 }
2902
fa59ae79 2903 if (log && rename_tmp_log(newrefname))
c976d415 2904 goto rollback;
c976d415 2905
c976d415
LH
2906 logmoved = log;
2907
4a32b2e0 2908 lock = lock_ref_sha1_basic(newrefname, NULL, NULL, NULL, 0, NULL, &err);
c976d415 2909 if (!lock) {
4a32b2e0
MH
2910 error("%s", err.buf);
2911 strbuf_release(&err);
dfefa935 2912 error("unable to lock %s for update", newrefname);
c976d415
LH
2913 goto rollback;
2914 }
c976d415 2915 hashcpy(lock->old_sha1, orig_sha1);
678d0f4c 2916 if (write_ref_sha1(lock, orig_sha1, logmsg)) {
dfefa935 2917 error("unable to write current sha1 into %s", newrefname);
c976d415
LH
2918 goto rollback;
2919 }
2920
2921 return 0;
2922
2923 rollback:
4a32b2e0 2924 lock = lock_ref_sha1_basic(oldrefname, NULL, NULL, NULL, 0, NULL, &err);
c976d415 2925 if (!lock) {
4a32b2e0
MH
2926 error("%s", err.buf);
2927 strbuf_release(&err);
dfefa935 2928 error("unable to lock %s for rollback", oldrefname);
c976d415
LH
2929 goto rollbacklog;
2930 }
2931
c976d415
LH
2932 flag = log_all_ref_updates;
2933 log_all_ref_updates = 0;
2934 if (write_ref_sha1(lock, orig_sha1, NULL))
dfefa935 2935 error("unable to write current sha1 into %s", oldrefname);
c976d415
LH
2936 log_all_ref_updates = flag;
2937
2938 rollbacklog:
dfefa935 2939 if (logmoved && rename(git_path("logs/%s", newrefname), git_path("logs/%s", oldrefname)))
c976d415 2940 error("unable to restore logfile %s from %s: %s",
dfefa935 2941 oldrefname, newrefname, strerror(errno));
c976d415 2942 if (!logmoved && log &&
dfefa935 2943 rename(git_path(TMP_RENAMED_LOG), git_path("logs/%s", oldrefname)))
765c2258 2944 error("unable to restore logfile %s from "TMP_RENAMED_LOG": %s",
dfefa935 2945 oldrefname, strerror(errno));
c976d415
LH
2946
2947 return 1;
2948}
2949
0b1e6548 2950static int close_ref(struct ref_lock *lock)
b531394d
BC
2951{
2952 if (close_lock_file(lock->lk))
2953 return -1;
2954 lock->lock_fd = -1;
2955 return 0;
2956}
2957
0b1e6548 2958static int commit_ref(struct ref_lock *lock)
b531394d
BC
2959{
2960 if (commit_lock_file(lock->lk))
2961 return -1;
2962 lock->lock_fd = -1;
2963 return 0;
2964}
2965
0ec29a47
JH
2966/*
2967 * copy the reflog message msg to buf, which has been allocated sufficiently
2968 * large, while cleaning up the whitespaces. Especially, convert LF to space,
2969 * because reflog file is one line per entry.
2970 */
2971static int copy_msg(char *buf, const char *msg)
2972{
2973 char *cp = buf;
2974 char c;
2975 int wasspace = 1;
2976
2977 *cp++ = '\t';
2978 while ((c = *msg++)) {
2979 if (wasspace && isspace(c))
2980 continue;
2981 wasspace = isspace(c);
2982 if (wasspace)
2983 c = ' ';
2984 *cp++ = c;
2985 }
2986 while (buf < cp && isspace(cp[-1]))
2987 cp--;
2988 *cp++ = '\n';
2989 return cp - buf;
2990}
2991
bd3b02da 2992/* This function must set a meaningful errno on failure */
dfefa935 2993int log_ref_setup(const char *refname, char *logfile, int bufsize)
6de08ae6 2994{
859c3017 2995 int logfd, oflags = O_APPEND | O_WRONLY;
9a13f0b7 2996
dfefa935 2997 git_snpath(logfile, bufsize, "logs/%s", refname);
4057deb5 2998 if (log_all_ref_updates &&
59556548
CC
2999 (starts_with(refname, "refs/heads/") ||
3000 starts_with(refname, "refs/remotes/") ||
3001 starts_with(refname, "refs/notes/") ||
dfefa935 3002 !strcmp(refname, "HEAD"))) {
bd3b02da
RS
3003 if (safe_create_leading_directories(logfile) < 0) {
3004 int save_errno = errno;
3005 error("unable to create directory for %s", logfile);
3006 errno = save_errno;
3007 return -1;
3008 }
6de08ae6
SP
3009 oflags |= O_CREAT;
3010 }
3011
157aaea5 3012 logfd = open(logfile, oflags, 0666);
6de08ae6 3013 if (logfd < 0) {
9233887c 3014 if (!(oflags & O_CREAT) && (errno == ENOENT || errno == EISDIR))
6de08ae6 3015 return 0;
3b463c3f 3016
9233887c 3017 if (errno == EISDIR) {
157aaea5 3018 if (remove_empty_directories(logfile)) {
bd3b02da
RS
3019 int save_errno = errno;
3020 error("There are still logs under '%s'",
3021 logfile);
3022 errno = save_errno;
3023 return -1;
3b463c3f 3024 }
157aaea5 3025 logfd = open(logfile, oflags, 0666);
3b463c3f
JH
3026 }
3027
bd3b02da
RS
3028 if (logfd < 0) {
3029 int save_errno = errno;
3030 error("Unable to append to %s: %s", logfile,
3031 strerror(errno));
3032 errno = save_errno;
3033 return -1;
3034 }
6de08ae6
SP
3035 }
3036
157aaea5 3037 adjust_shared_perm(logfile);
859c3017
EM
3038 close(logfd);
3039 return 0;
3040}
443b92b6 3041
2c6207ab
RS
3042static int log_ref_write_fd(int fd, const unsigned char *old_sha1,
3043 const unsigned char *new_sha1,
3044 const char *committer, const char *msg)
3045{
3046 int msglen, written;
3047 unsigned maxlen, len;
3048 char *logrec;
3049
3050 msglen = msg ? strlen(msg) : 0;
3051 maxlen = strlen(committer) + msglen + 100;
3052 logrec = xmalloc(maxlen);
3053 len = sprintf(logrec, "%s %s %s\n",
3054 sha1_to_hex(old_sha1),
3055 sha1_to_hex(new_sha1),
3056 committer);
3057 if (msglen)
3058 len += copy_msg(logrec + len - 1, msg) - 1;
3059
3060 written = len <= maxlen ? write_in_full(fd, logrec, len) : -1;
3061 free(logrec);
3062 if (written != len)
3063 return -1;
3064
3065 return 0;
3066}
3067
dfefa935 3068static int log_ref_write(const char *refname, const unsigned char *old_sha1,
859c3017
EM
3069 const unsigned char *new_sha1, const char *msg)
3070{
2c6207ab 3071 int logfd, result, oflags = O_APPEND | O_WRONLY;
157aaea5 3072 char log_file[PATH_MAX];
859c3017
EM
3073
3074 if (log_all_ref_updates < 0)
3075 log_all_ref_updates = !is_bare_repository();
3076
dfefa935 3077 result = log_ref_setup(refname, log_file, sizeof(log_file));
859c3017
EM
3078 if (result)
3079 return result;
3080
3081 logfd = open(log_file, oflags);
3082 if (logfd < 0)
3083 return 0;
2c6207ab
RS
3084 result = log_ref_write_fd(logfd, old_sha1, new_sha1,
3085 git_committer_info(0), msg);
3086 if (result) {
dc615de8
RS
3087 int save_errno = errno;
3088 close(logfd);
3089 error("Unable to append to %s", log_file);
3090 errno = save_errno;
3091 return -1;
3092 }
3093 if (close(logfd)) {
3094 int save_errno = errno;
3095 error("Unable to append to %s", log_file);
3096 errno = save_errno;
3097 return -1;
3098 }
6de08ae6
SP
3099 return 0;
3100}
3101
e7e0f26e 3102int is_branch(const char *refname)
c3b0dec5 3103{
59556548 3104 return !strcmp(refname, "HEAD") || starts_with(refname, "refs/heads/");
c3b0dec5
LT
3105}
3106
aae383db
RS
3107/*
3108 * Write sha1 into the ref specified by the lock. Make sure that errno
3109 * is sane on error.
3110 */
3111static int write_ref_sha1(struct ref_lock *lock,
4bd18c43
SP
3112 const unsigned char *sha1, const char *logmsg)
3113{
3114 static char term = '\n';
c3b0dec5 3115 struct object *o;
4bd18c43 3116
c3b0dec5
LT
3117 o = parse_object(sha1);
3118 if (!o) {
7be8b3ba 3119 error("Trying to write ref %s with nonexistent object %s",
c3b0dec5
LT
3120 lock->ref_name, sha1_to_hex(sha1));
3121 unlock_ref(lock);
dc615de8 3122 errno = EINVAL;
c3b0dec5
LT
3123 return -1;
3124 }
3125 if (o->type != OBJ_COMMIT && is_branch(lock->ref_name)) {
3126 error("Trying to write non-commit object %s to branch %s",
3127 sha1_to_hex(sha1), lock->ref_name);
3128 unlock_ref(lock);
dc615de8 3129 errno = EINVAL;
c3b0dec5
LT
3130 return -1;
3131 }
93822c22 3132 if (write_in_full(lock->lock_fd, sha1_to_hex(sha1), 40) != 40 ||
dc615de8
RS
3133 write_in_full(lock->lock_fd, &term, 1) != 1 ||
3134 close_ref(lock) < 0) {
3135 int save_errno = errno;
cf6950d3 3136 error("Couldn't write %s", lock->lk->filename.buf);
4bd18c43 3137 unlock_ref(lock);
dc615de8 3138 errno = save_errno;
4bd18c43
SP
3139 return -1;
3140 }
9da31cb0 3141 clear_loose_ref_cache(&ref_cache);
bd104db1
NP
3142 if (log_ref_write(lock->ref_name, lock->old_sha1, sha1, logmsg) < 0 ||
3143 (strcmp(lock->ref_name, lock->orig_ref_name) &&
3144 log_ref_write(lock->orig_ref_name, lock->old_sha1, sha1, logmsg) < 0)) {
6de08ae6
SP
3145 unlock_ref(lock);
3146 return -1;
3147 }
605fac8b
NP
3148 if (strcmp(lock->orig_ref_name, "HEAD") != 0) {
3149 /*
3150 * Special hack: If a branch is updated directly and HEAD
3151 * points to it (may happen on the remote side of a push
3152 * for example) then logically the HEAD reflog should be
3153 * updated too.
3154 * A generic solution implies reverse symref information,
3155 * but finding all symrefs pointing to the given branch
3156 * would be rather costly for this rare event (the direct
3157 * update of a branch) to be worth it. So let's cheat and
3158 * check with HEAD only which should cover 99% of all usage
3159 * scenarios (even 100% of the default ones).
3160 */
3161 unsigned char head_sha1[20];
3162 int head_flag;
3163 const char *head_ref;
7695d118
RS
3164 head_ref = resolve_ref_unsafe("HEAD", RESOLVE_REF_READING,
3165 head_sha1, &head_flag);
605fac8b
NP
3166 if (head_ref && (head_flag & REF_ISSYMREF) &&
3167 !strcmp(head_ref, lock->ref_name))
3168 log_ref_write("HEAD", lock->old_sha1, sha1, logmsg);
3169 }
b531394d 3170 if (commit_ref(lock)) {
434cd0cd 3171 error("Couldn't set %s", lock->ref_name);
4bd18c43
SP
3172 unlock_ref(lock);
3173 return -1;
3174 }
4bd18c43
SP
3175 unlock_ref(lock);
3176 return 0;
95fc7512 3177}
d556fae2 3178
8b5157e4
NP
3179int create_symref(const char *ref_target, const char *refs_heads_master,
3180 const char *logmsg)
41b625b0
NP
3181{
3182 const char *lockpath;
3183 char ref[1000];
3184 int fd, len, written;
a4f34cbb 3185 char *git_HEAD = git_pathdup("%s", ref_target);
8b5157e4
NP
3186 unsigned char old_sha1[20], new_sha1[20];
3187
3188 if (logmsg && read_ref(ref_target, old_sha1))
3189 hashclr(old_sha1);
41b625b0 3190
d48744d1
JH
3191 if (safe_create_leading_directories(git_HEAD) < 0)
3192 return error("unable to create directory for %s", git_HEAD);
3193
41b625b0
NP
3194#ifndef NO_SYMLINK_HEAD
3195 if (prefer_symlink_refs) {
3196 unlink(git_HEAD);
3197 if (!symlink(refs_heads_master, git_HEAD))
8b5157e4 3198 goto done;
41b625b0
NP
3199 fprintf(stderr, "no symlink - falling back to symbolic ref\n");
3200 }
3201#endif
3202
3203 len = snprintf(ref, sizeof(ref), "ref: %s\n", refs_heads_master);
3204 if (sizeof(ref) <= len) {
3205 error("refname too long: %s", refs_heads_master);
47fc52e2 3206 goto error_free_return;
41b625b0
NP
3207 }
3208 lockpath = mkpath("%s.lock", git_HEAD);
3209 fd = open(lockpath, O_CREAT | O_EXCL | O_WRONLY, 0666);
3210 if (fd < 0) {
3211 error("Unable to open %s for writing", lockpath);
47fc52e2 3212 goto error_free_return;
41b625b0
NP
3213 }
3214 written = write_in_full(fd, ref, len);
91c8d590 3215 if (close(fd) != 0 || written != len) {
41b625b0 3216 error("Unable to write to %s", lockpath);
47fc52e2 3217 goto error_unlink_return;
41b625b0
NP
3218 }
3219 if (rename(lockpath, git_HEAD) < 0) {
41b625b0 3220 error("Unable to create %s", git_HEAD);
47fc52e2 3221 goto error_unlink_return;
41b625b0
NP
3222 }
3223 if (adjust_shared_perm(git_HEAD)) {
41b625b0 3224 error("Unable to fix permissions on %s", lockpath);
47fc52e2 3225 error_unlink_return:
691f1a28 3226 unlink_or_warn(lockpath);
47fc52e2
JH
3227 error_free_return:
3228 free(git_HEAD);
3229 return -1;
41b625b0 3230 }
8b5157e4 3231
ee96d11b 3232#ifndef NO_SYMLINK_HEAD
8b5157e4 3233 done:
ee96d11b 3234#endif
8b5157e4
NP
3235 if (logmsg && !read_ref(refs_heads_master, new_sha1))
3236 log_ref_write(ref_target, old_sha1, new_sha1, logmsg);
3237
47fc52e2 3238 free(git_HEAD);
41b625b0
NP
3239 return 0;
3240}
3241
4207ed28
RS
3242struct read_ref_at_cb {
3243 const char *refname;
3244 unsigned long at_time;
3245 int cnt;
3246 int reccnt;
3247 unsigned char *sha1;
3248 int found_it;
3249
3250 unsigned char osha1[20];
3251 unsigned char nsha1[20];
3252 int tz;
3253 unsigned long date;
3254 char **msg;
3255 unsigned long *cutoff_time;
3256 int *cutoff_tz;
3257 int *cutoff_cnt;
3258};
3259
3260static int read_ref_at_ent(unsigned char *osha1, unsigned char *nsha1,
3261 const char *email, unsigned long timestamp, int tz,
3262 const char *message, void *cb_data)
3263{
3264 struct read_ref_at_cb *cb = cb_data;
3265
3266 cb->reccnt++;
3267 cb->tz = tz;
3268 cb->date = timestamp;
3269
3270 if (timestamp <= cb->at_time || cb->cnt == 0) {
3271 if (cb->msg)
3272 *cb->msg = xstrdup(message);
3273 if (cb->cutoff_time)
3274 *cb->cutoff_time = timestamp;
3275 if (cb->cutoff_tz)
3276 *cb->cutoff_tz = tz;
3277 if (cb->cutoff_cnt)
3278 *cb->cutoff_cnt = cb->reccnt - 1;
3279 /*
3280 * we have not yet updated cb->[n|o]sha1 so they still
3281 * hold the values for the previous record.
3282 */
3283 if (!is_null_sha1(cb->osha1)) {
3284 hashcpy(cb->sha1, nsha1);
3285 if (hashcmp(cb->osha1, nsha1))
3286 warning("Log for ref %s has gap after %s.",
3287 cb->refname, show_date(cb->date, cb->tz, DATE_RFC2822));
3288 }
3289 else if (cb->date == cb->at_time)
3290 hashcpy(cb->sha1, nsha1);
3291 else if (hashcmp(nsha1, cb->sha1))
3292 warning("Log for ref %s unexpectedly ended on %s.",
3293 cb->refname, show_date(cb->date, cb->tz,
3294 DATE_RFC2822));
3295 hashcpy(cb->osha1, osha1);
3296 hashcpy(cb->nsha1, nsha1);
3297 cb->found_it = 1;
3298 return 1;
3299 }
3300 hashcpy(cb->osha1, osha1);
3301 hashcpy(cb->nsha1, nsha1);
3302 if (cb->cnt > 0)
3303 cb->cnt--;
3304 return 0;
3305}
3306
3307static int read_ref_at_ent_oldest(unsigned char *osha1, unsigned char *nsha1,
3308 const char *email, unsigned long timestamp,
3309 int tz, const char *message, void *cb_data)
3310{
3311 struct read_ref_at_cb *cb = cb_data;
3312
3313 if (cb->msg)
3314 *cb->msg = xstrdup(message);
3315 if (cb->cutoff_time)
3316 *cb->cutoff_time = timestamp;
3317 if (cb->cutoff_tz)
3318 *cb->cutoff_tz = tz;
3319 if (cb->cutoff_cnt)
3320 *cb->cutoff_cnt = cb->reccnt;
3321 hashcpy(cb->sha1, osha1);
3322 if (is_null_sha1(cb->sha1))
3323 hashcpy(cb->sha1, nsha1);
3324 /* We just want the first entry */
3325 return 1;
16d7cc90
JH
3326}
3327
c41a87dd 3328int read_ref_at(const char *refname, unsigned int flags, unsigned long at_time, int cnt,
dfefa935
MH
3329 unsigned char *sha1, char **msg,
3330 unsigned long *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
d556fae2 3331{
4207ed28 3332 struct read_ref_at_cb cb;
d556fae2 3333
4207ed28
RS
3334 memset(&cb, 0, sizeof(cb));
3335 cb.refname = refname;
3336 cb.at_time = at_time;
3337 cb.cnt = cnt;
3338 cb.msg = msg;
3339 cb.cutoff_time = cutoff_time;
3340 cb.cutoff_tz = cutoff_tz;
3341 cb.cutoff_cnt = cutoff_cnt;
3342 cb.sha1 = sha1;
3343
3344 for_each_reflog_ent_reverse(refname, read_ref_at_ent, &cb);
3345
c41a87dd
DA
3346 if (!cb.reccnt) {
3347 if (flags & GET_SHA1_QUIETLY)
3348 exit(128);
3349 else
3350 die("Log for %s is empty.", refname);
3351 }
4207ed28
RS
3352 if (cb.found_it)
3353 return 0;
3354
3355 for_each_reflog_ent(refname, read_ref_at_ent_oldest, &cb);
d556fae2 3356
16d7cc90 3357 return 1;
d556fae2 3358}
2ff81662 3359
4da58835
RS
3360int reflog_exists(const char *refname)
3361{
3362 struct stat st;
3363
3364 return !lstat(git_path("logs/%s", refname), &st) &&
3365 S_ISREG(st.st_mode);
3366}
3367
3368int delete_reflog(const char *refname)
3369{
3370 return remove_path(git_path("logs/%s", refname));
3371}
3372
9a7a183b
JH
3373static int show_one_reflog_ent(struct strbuf *sb, each_reflog_ent_fn fn, void *cb_data)
3374{
3375 unsigned char osha1[20], nsha1[20];
3376 char *email_end, *message;
3377 unsigned long timestamp;
3378 int tz;
3379
3380 /* old SP new SP name <email> SP time TAB msg LF */
3381 if (sb->len < 83 || sb->buf[sb->len - 1] != '\n' ||
3382 get_sha1_hex(sb->buf, osha1) || sb->buf[40] != ' ' ||
3383 get_sha1_hex(sb->buf + 41, nsha1) || sb->buf[81] != ' ' ||
3384 !(email_end = strchr(sb->buf + 82, '>')) ||
3385 email_end[1] != ' ' ||
3386 !(timestamp = strtoul(email_end + 2, &message, 10)) ||
3387 !message || message[0] != ' ' ||
3388 (message[1] != '+' && message[1] != '-') ||
3389 !isdigit(message[2]) || !isdigit(message[3]) ||
3390 !isdigit(message[4]) || !isdigit(message[5]))
3391 return 0; /* corrupt? */
3392 email_end[1] = '\0';
3393 tz = strtol(message + 1, NULL, 10);
3394 if (message[6] != '\t')
3395 message += 6;
3396 else
3397 message += 7;
3398 return fn(osha1, nsha1, sb->buf + 82, timestamp, tz, message, cb_data);
3399}
3400
98f85ff4
JH
3401static char *find_beginning_of_line(char *bob, char *scan)
3402{
3403 while (bob < scan && *(--scan) != '\n')
3404 ; /* keep scanning backwards */
3405 /*
3406 * Return either beginning of the buffer, or LF at the end of
3407 * the previous line.
3408 */
3409 return scan;
3410}
3411
3412int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn, void *cb_data)
2ff81662 3413{
8ca78803 3414 struct strbuf sb = STRBUF_INIT;
98f85ff4
JH
3415 FILE *logfp;
3416 long pos;
3417 int ret = 0, at_tail = 1;
2ff81662 3418
7ae07c1b 3419 logfp = fopen(git_path("logs/%s", refname), "r");
2ff81662 3420 if (!logfp)
883d60fa 3421 return -1;
101d15e0 3422
98f85ff4
JH
3423 /* Jump to the end */
3424 if (fseek(logfp, 0, SEEK_END) < 0)
3425 return error("cannot seek back reflog for %s: %s",
3426 refname, strerror(errno));
3427 pos = ftell(logfp);
3428 while (!ret && 0 < pos) {
3429 int cnt;
3430 size_t nread;
3431 char buf[BUFSIZ];
3432 char *endp, *scanp;
3433
3434 /* Fill next block from the end */
3435 cnt = (sizeof(buf) < pos) ? sizeof(buf) : pos;
3436 if (fseek(logfp, pos - cnt, SEEK_SET))
3437 return error("cannot seek back reflog for %s: %s",
3438 refname, strerror(errno));
3439 nread = fread(buf, cnt, 1, logfp);
e4ca819a 3440 if (nread != 1)
98f85ff4
JH
3441 return error("cannot read %d bytes from reflog for %s: %s",
3442 cnt, refname, strerror(errno));
3443 pos -= cnt;
3444
3445 scanp = endp = buf + cnt;
3446 if (at_tail && scanp[-1] == '\n')
3447 /* Looking at the final LF at the end of the file */
3448 scanp--;
3449 at_tail = 0;
3450
3451 while (buf < scanp) {
3452 /*
3453 * terminating LF of the previous line, or the beginning
3454 * of the buffer.
3455 */
3456 char *bp;
3457
3458 bp = find_beginning_of_line(buf, scanp);
3459
e5e73ff2 3460 if (*bp == '\n') {
98f85ff4 3461 /*
e5e73ff2
JK
3462 * The newline is the end of the previous line,
3463 * so we know we have complete line starting
3464 * at (bp + 1). Prefix it onto any prior data
3465 * we collected for the line and process it.
98f85ff4
JH
3466 */
3467 strbuf_splice(&sb, 0, 0, bp + 1, endp - (bp + 1));
3468 scanp = bp;
3469 endp = bp + 1;
e5e73ff2
JK
3470 ret = show_one_reflog_ent(&sb, fn, cb_data);
3471 strbuf_reset(&sb);
3472 if (ret)
3473 break;
3474 } else if (!pos) {
3475 /*
3476 * We are at the start of the buffer, and the
3477 * start of the file; there is no previous
3478 * line, and we have everything for this one.
3479 * Process it, and we can end the loop.
3480 */
3481 strbuf_splice(&sb, 0, 0, buf, endp - buf);
3482 ret = show_one_reflog_ent(&sb, fn, cb_data);
3483 strbuf_reset(&sb);
3484 break;
98f85ff4 3485 }
e5e73ff2
JK
3486
3487 if (bp == buf) {
3488 /*
3489 * We are at the start of the buffer, and there
3490 * is more file to read backwards. Which means
3491 * we are in the middle of a line. Note that we
3492 * may get here even if *bp was a newline; that
3493 * just means we are at the exact end of the
3494 * previous line, rather than some spot in the
3495 * middle.
3496 *
3497 * Save away what we have to be combined with
3498 * the data from the next read.
3499 */
3500 strbuf_splice(&sb, 0, 0, buf, endp - buf);
98f85ff4 3501 break;
e5e73ff2 3502 }
9d33f7c2 3503 }
101d15e0 3504
2ff81662 3505 }
98f85ff4 3506 if (!ret && sb.len)
69216bf7 3507 die("BUG: reverse reflog parser had leftover data");
98f85ff4 3508
2ff81662 3509 fclose(logfp);
8ca78803 3510 strbuf_release(&sb);
2266bf27 3511 return ret;
2ff81662 3512}
e29cb53a 3513
dfefa935 3514int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn, void *cb_data)
101d15e0 3515{
98f85ff4
JH
3516 FILE *logfp;
3517 struct strbuf sb = STRBUF_INIT;
3518 int ret = 0;
3519
3520 logfp = fopen(git_path("logs/%s", refname), "r");
3521 if (!logfp)
3522 return -1;
101d15e0 3523
98f85ff4
JH
3524 while (!ret && !strbuf_getwholeline(&sb, logfp, '\n'))
3525 ret = show_one_reflog_ent(&sb, fn, cb_data);
3526 fclose(logfp);
3527 strbuf_release(&sb);
3528 return ret;
3529}
989c0e5d
MH
3530/*
3531 * Call fn for each reflog in the namespace indicated by name. name
3532 * must be empty or end with '/'. Name will be used as a scratch
3533 * space, but its contents will be restored before return.
3534 */
3535static int do_for_each_reflog(struct strbuf *name, each_ref_fn fn, void *cb_data)
eb8381c8 3536{
989c0e5d 3537 DIR *d = opendir(git_path("logs/%s", name->buf));
fcee5a14 3538 int retval = 0;
93c603fc 3539 struct dirent *de;
989c0e5d 3540 int oldlen = name->len;
eb8381c8 3541
93c603fc 3542 if (!d)
989c0e5d 3543 return name->len ? errno : 0;
eb8381c8 3544
93c603fc
MH
3545 while ((de = readdir(d)) != NULL) {
3546 struct stat st;
eb8381c8 3547
93c603fc
MH
3548 if (de->d_name[0] == '.')
3549 continue;
2975c770 3550 if (ends_with(de->d_name, ".lock"))
93c603fc 3551 continue;
989c0e5d
MH
3552 strbuf_addstr(name, de->d_name);
3553 if (stat(git_path("logs/%s", name->buf), &st) < 0) {
3554 ; /* silently ignore */
93c603fc 3555 } else {
eb8381c8 3556 if (S_ISDIR(st.st_mode)) {
989c0e5d
MH
3557 strbuf_addch(name, '/');
3558 retval = do_for_each_reflog(name, fn, cb_data);
eb8381c8
NP
3559 } else {
3560 unsigned char sha1[20];
7695d118 3561 if (read_ref_full(name->buf, 0, sha1, NULL))
989c0e5d 3562 retval = error("bad ref for %s", name->buf);
eb8381c8 3563 else
989c0e5d 3564 retval = fn(name->buf, sha1, 0, cb_data);
eb8381c8
NP
3565 }
3566 if (retval)
3567 break;
3568 }
989c0e5d 3569 strbuf_setlen(name, oldlen);
eb8381c8 3570 }
93c603fc 3571 closedir(d);
eb8381c8
NP
3572 return retval;
3573}
3574
3575int for_each_reflog(each_ref_fn fn, void *cb_data)
3576{
989c0e5d
MH
3577 int retval;
3578 struct strbuf name;
3579 strbuf_init(&name, PATH_MAX);
3580 retval = do_for_each_reflog(&name, fn, cb_data);
3581 strbuf_release(&name);
3582 return retval;
eb8381c8 3583}
3d9f037c 3584
b5c8ea2a 3585/**
8df4e511
MH
3586 * Information needed for a single ref update. Set new_sha1 to the new
3587 * value or to null_sha1 to delete the ref. To check the old value
3588 * while the ref is locked, set (flags & REF_HAVE_OLD) and set
3589 * old_sha1 to the old value, or to null_sha1 to ensure the ref does
3590 * not exist before update.
b5c8ea2a
MH
3591 */
3592struct ref_update {
16180334
MH
3593 /*
3594 * If (flags & REF_HAVE_NEW), set the reference to this value:
3595 */
b5c8ea2a 3596 unsigned char new_sha1[20];
16180334
MH
3597 /*
3598 * If (flags & REF_HAVE_OLD), check that the reference
3599 * previously had this value:
3600 */
b5c8ea2a 3601 unsigned char old_sha1[20];
8df4e511 3602 /*
16180334 3603 * One or more of REF_HAVE_NEW, REF_HAVE_OLD, REF_NODEREF,
8df4e511
MH
3604 * REF_DELETING, and REF_ISPRUNING:
3605 */
3606 unsigned int flags;
81c960e4 3607 struct ref_lock *lock;
84178db7 3608 int type;
db7516ab 3609 char *msg;
88615910 3610 const char refname[FLEX_ARRAY];
b5c8ea2a
MH
3611};
3612
2bdc785f
RS
3613/*
3614 * Transaction states.
3615 * OPEN: The transaction is in a valid state and can accept new updates.
3616 * An OPEN transaction can be committed.
3617 * CLOSED: A closed transaction is no longer active and no other operations
3618 * than free can be used on it in this state.
3619 * A transaction can either become closed by successfully committing
3620 * an active transaction or if there is a failure while building
3621 * the transaction thus rendering it failed/inactive.
3622 */
3623enum ref_transaction_state {
3624 REF_TRANSACTION_OPEN = 0,
3625 REF_TRANSACTION_CLOSED = 1
3626};
3627
caa4046c
MH
3628/*
3629 * Data structure for holding a reference transaction, which can
3630 * consist of checks and updates to multiple references, carried out
3631 * as atomically as possible. This structure is opaque to callers.
3632 */
3633struct ref_transaction {
3634 struct ref_update **updates;
3635 size_t alloc;
3636 size_t nr;
2bdc785f 3637 enum ref_transaction_state state;
caa4046c
MH
3638};
3639
93a644ea 3640struct ref_transaction *ref_transaction_begin(struct strbuf *err)
caa4046c 3641{
5a603b04
JN
3642 assert(err);
3643
caa4046c
MH
3644 return xcalloc(1, sizeof(struct ref_transaction));
3645}
3646
026bd1d3 3647void ref_transaction_free(struct ref_transaction *transaction)
caa4046c
MH
3648{
3649 int i;
3650
1b07255c
RS
3651 if (!transaction)
3652 return;
3653
db7516ab
RS
3654 for (i = 0; i < transaction->nr; i++) {
3655 free(transaction->updates[i]->msg);
88615910 3656 free(transaction->updates[i]);
db7516ab 3657 }
caa4046c
MH
3658 free(transaction->updates);
3659 free(transaction);
3660}
3661
caa4046c
MH
3662static struct ref_update *add_update(struct ref_transaction *transaction,
3663 const char *refname)
3664{
88615910
MH
3665 size_t len = strlen(refname);
3666 struct ref_update *update = xcalloc(1, sizeof(*update) + len + 1);
caa4046c 3667
88615910 3668 strcpy((char *)update->refname, refname);
caa4046c
MH
3669 ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
3670 transaction->updates[transaction->nr++] = update;
3671 return update;
3672}
3673
8e34800e
RS
3674int ref_transaction_update(struct ref_transaction *transaction,
3675 const char *refname,
3676 const unsigned char *new_sha1,
3677 const unsigned char *old_sha1,
1d147bdf 3678 unsigned int flags, const char *msg,
8e34800e 3679 struct strbuf *err)
caa4046c 3680{
8e34800e 3681 struct ref_update *update;
caa4046c 3682
5a603b04
JN
3683 assert(err);
3684
2bdc785f
RS
3685 if (transaction->state != REF_TRANSACTION_OPEN)
3686 die("BUG: update called for transaction that is not open");
3687
16180334 3688 if (new_sha1 && !is_null_sha1(new_sha1) &&
d0f810f0
RS
3689 check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
3690 strbuf_addf(err, "refusing to update ref with bad name %s",
3691 refname);
3692 return -1;
3693 }
3694
8e34800e 3695 update = add_update(transaction, refname);
16180334
MH
3696 if (new_sha1) {
3697 hashcpy(update->new_sha1, new_sha1);
3698 flags |= REF_HAVE_NEW;
3699 }
1d147bdf 3700 if (old_sha1) {
caa4046c 3701 hashcpy(update->old_sha1, old_sha1);
8df4e511
MH
3702 flags |= REF_HAVE_OLD;
3703 }
3704 update->flags = flags;
db7516ab
RS
3705 if (msg)
3706 update->msg = xstrdup(msg);
8e34800e 3707 return 0;
caa4046c
MH
3708}
3709
b416af5b
RS
3710int ref_transaction_create(struct ref_transaction *transaction,
3711 const char *refname,
3712 const unsigned char *new_sha1,
fec14ec3 3713 unsigned int flags, const char *msg,
b416af5b 3714 struct strbuf *err)
caa4046c 3715{
f04c5b55
MH
3716 if (!new_sha1 || is_null_sha1(new_sha1))
3717 die("BUG: create called without valid new_sha1");
bc9f2925 3718 return ref_transaction_update(transaction, refname, new_sha1,
1d147bdf 3719 null_sha1, flags, msg, err);
caa4046c
MH
3720}
3721
8c8bdc0d
RS
3722int ref_transaction_delete(struct ref_transaction *transaction,
3723 const char *refname,
3724 const unsigned char *old_sha1,
fb5a6bb6 3725 unsigned int flags, const char *msg,
8c8bdc0d 3726 struct strbuf *err)
caa4046c 3727{
60294596
MH
3728 if (old_sha1 && is_null_sha1(old_sha1))
3729 die("BUG: delete called with old_sha1 set to zeros");
1d147bdf 3730 return ref_transaction_update(transaction, refname,
fb5a6bb6 3731 null_sha1, old_sha1,
1d147bdf 3732 flags, msg, err);
caa4046c
MH
3733}
3734
16180334
MH
3735int ref_transaction_verify(struct ref_transaction *transaction,
3736 const char *refname,
3737 const unsigned char *old_sha1,
3738 unsigned int flags,
3739 struct strbuf *err)
3740{
3741 if (!old_sha1)
3742 die("BUG: verify called with old_sha1 set to NULL");
3743 return ref_transaction_update(transaction, refname,
3744 NULL, old_sha1,
3745 flags, NULL, err);
3746}
3747
4b7b520b
MH
3748int update_ref(const char *msg, const char *refname,
3749 const unsigned char *new_sha1, const unsigned char *old_sha1,
fec14ec3 3750 unsigned int flags, enum action_on_err onerr)
4738a333 3751{
b4d75ac1
RS
3752 struct ref_transaction *t;
3753 struct strbuf err = STRBUF_INIT;
3754
3755 t = ref_transaction_begin(&err);
3756 if (!t ||
4b7b520b
MH
3757 ref_transaction_update(t, refname, new_sha1, old_sha1,
3758 flags, msg, &err) ||
db7516ab 3759 ref_transaction_commit(t, &err)) {
b4d75ac1
RS
3760 const char *str = "update_ref failed for ref '%s': %s";
3761
3762 ref_transaction_free(t);
3763 switch (onerr) {
3764 case UPDATE_REFS_MSG_ON_ERR:
3765 error(str, refname, err.buf);
3766 break;
3767 case UPDATE_REFS_DIE_ON_ERR:
3768 die(str, refname, err.buf);
3769 break;
3770 case UPDATE_REFS_QUIET_ON_ERR:
3771 break;
3772 }
3773 strbuf_release(&err);
4738a333 3774 return 1;
b4d75ac1
RS
3775 }
3776 strbuf_release(&err);
3777 ref_transaction_free(t);
3778 return 0;
4738a333
BK
3779}
3780
07f9c881 3781static int ref_update_reject_duplicates(struct string_list *refnames,
01319837 3782 struct strbuf *err)
98aee92d 3783{
07f9c881 3784 int i, n = refnames->nr;
5a603b04
JN
3785
3786 assert(err);
3787
98aee92d 3788 for (i = 1; i < n; i++)
07f9c881 3789 if (!strcmp(refnames->items[i - 1].string, refnames->items[i].string)) {
5a603b04
JN
3790 strbuf_addf(err,
3791 "Multiple updates for ref '%s' not allowed.",
07f9c881 3792 refnames->items[i].string);
98aee92d
BK
3793 return 1;
3794 }
3795 return 0;
3796}
3797
b5c8ea2a 3798int ref_transaction_commit(struct ref_transaction *transaction,
db7516ab 3799 struct strbuf *err)
98aee92d 3800{
4a45b2f3 3801 int ret = 0, i;
b5c8ea2a 3802 int n = transaction->nr;
6a402338 3803 struct ref_update **updates = transaction->updates;
4a45b2f3
MH
3804 struct string_list refs_to_delete = STRING_LIST_INIT_NODUP;
3805 struct string_list_item *ref_to_delete;
07f9c881 3806 struct string_list affected_refnames = STRING_LIST_INIT_NODUP;
98aee92d 3807
5a603b04
JN
3808 assert(err);
3809
2bdc785f
RS
3810 if (transaction->state != REF_TRANSACTION_OPEN)
3811 die("BUG: commit called for transaction that is not open");
3812
3813 if (!n) {
3814 transaction->state = REF_TRANSACTION_CLOSED;
98aee92d 3815 return 0;
2bdc785f 3816 }
98aee92d 3817
07f9c881
MH
3818 /* Fail if a refname appears more than once in the transaction: */
3819 for (i = 0; i < n; i++)
3820 string_list_append(&affected_refnames, updates[i]->refname);
3821 string_list_sort(&affected_refnames);
3822 if (ref_update_reject_duplicates(&affected_refnames, err)) {
28e6a97e 3823 ret = TRANSACTION_GENERIC_ERROR;
98aee92d 3824 goto cleanup;
28e6a97e 3825 }
98aee92d
BK
3826
3827 /* Acquire all locks while verifying old values */
3828 for (i = 0; i < n; i++) {
cb198d21 3829 struct ref_update *update = updates[i];
fec14ec3 3830 unsigned int flags = update->flags;
cb198d21 3831
16180334 3832 if ((flags & REF_HAVE_NEW) && is_null_sha1(update->new_sha1))
62a2d525 3833 flags |= REF_DELETING;
8df4e511
MH
3834 update->lock = lock_ref_sha1_basic(
3835 update->refname,
3836 ((update->flags & REF_HAVE_OLD) ?
3837 update->old_sha1 : NULL),
e911104c 3838 &affected_refnames, NULL,
8df4e511 3839 flags,
4a32b2e0
MH
3840 &update->type,
3841 err);
81c960e4 3842 if (!update->lock) {
28e6a97e
RS
3843 ret = (errno == ENOTDIR)
3844 ? TRANSACTION_NAME_CONFLICT
3845 : TRANSACTION_GENERIC_ERROR;
4a32b2e0
MH
3846 error("%s", err->buf);
3847 strbuf_reset(err);
5a603b04
JN
3848 strbuf_addf(err, "Cannot lock the ref '%s'.",
3849 update->refname);
98aee92d
BK
3850 goto cleanup;
3851 }
3852 }
3853
3854 /* Perform updates first so live commits remain referenced */
cb198d21
MH
3855 for (i = 0; i < n; i++) {
3856 struct ref_update *update = updates[i];
16180334 3857 int flags = update->flags;
cb198d21 3858
16180334 3859 if ((flags & REF_HAVE_NEW) && !is_null_sha1(update->new_sha1)) {
5a6f4707
SB
3860 int overwriting_symref = ((update->type & REF_ISSYMREF) &&
3861 (update->flags & REF_NODEREF));
3862
3863 if (!overwriting_symref
3864 && !hashcmp(update->lock->old_sha1, update->new_sha1)) {
3865 /*
3866 * The reference already has the desired
3867 * value, so we don't need to write it.
3868 */
706d5f81
MH
3869 unlock_ref(update->lock);
3870 update->lock = NULL;
3871 } else if (write_ref_sha1(update->lock, update->new_sha1,
3872 update->msg)) {
28e6a97e 3873 update->lock = NULL; /* freed by write_ref_sha1 */
5a603b04
JN
3874 strbuf_addf(err, "Cannot update the ref '%s'.",
3875 update->refname);
28e6a97e 3876 ret = TRANSACTION_GENERIC_ERROR;
98aee92d 3877 goto cleanup;
706d5f81
MH
3878 } else {
3879 /* freed by write_ref_sha1(): */
3880 update->lock = NULL;
04ad6223 3881 }
98aee92d 3882 }
cb198d21 3883 }
98aee92d
BK
3884
3885 /* Perform deletes now that updates are safely completed */
81c960e4
MH
3886 for (i = 0; i < n; i++) {
3887 struct ref_update *update = updates[i];
16180334 3888 int flags = update->flags;
81c960e4 3889
16180334 3890 if ((flags & REF_HAVE_NEW) && is_null_sha1(update->new_sha1)) {
65732845 3891 if (delete_ref_loose(update->lock, update->type, err)) {
28e6a97e 3892 ret = TRANSACTION_GENERIC_ERROR;
65732845
JN
3893 goto cleanup;
3894 }
28e6a97e 3895
16180334 3896 if (!(flags & REF_ISPRUNING))
4a45b2f3
MH
3897 string_list_append(&refs_to_delete,
3898 update->lock->ref_name);
98aee92d 3899 }
81c960e4
MH
3900 }
3901
4a45b2f3 3902 if (repack_without_refs(&refs_to_delete, err)) {
28e6a97e 3903 ret = TRANSACTION_GENERIC_ERROR;
65732845
JN
3904 goto cleanup;
3905 }
4a45b2f3
MH
3906 for_each_string_list_item(ref_to_delete, &refs_to_delete)
3907 unlink_or_warn(git_path("logs/%s", ref_to_delete->string));
98aee92d
BK
3908 clear_loose_ref_cache(&ref_cache);
3909
3910cleanup:
2bdc785f
RS
3911 transaction->state = REF_TRANSACTION_CLOSED;
3912
98aee92d 3913 for (i = 0; i < n; i++)
81c960e4
MH
3914 if (updates[i]->lock)
3915 unlock_ref(updates[i]->lock);
4a45b2f3 3916 string_list_clear(&refs_to_delete, 0);
07f9c881 3917 string_list_clear(&affected_refnames, 0);
caa4046c
MH
3918 return ret;
3919}
3920
dfefa935 3921char *shorten_unambiguous_ref(const char *refname, int strict)
7c2b3029
JK
3922{
3923 int i;
3924 static char **scanf_fmts;
3925 static int nr_rules;
3926 char *short_name;
3927
7c2b3029 3928 if (!nr_rules) {
4346663a
MH
3929 /*
3930 * Pre-generate scanf formats from ref_rev_parse_rules[].
3931 * Generate a format suitable for scanf from a
3932 * ref_rev_parse_rules rule by interpolating "%s" at the
3933 * location of the "%.*s".
3934 */
7c2b3029 3935 size_t total_len = 0;
84d5633f 3936 size_t offset = 0;
7c2b3029
JK
3937
3938 /* the rule list is NULL terminated, count them first */
a4165851 3939 for (nr_rules = 0; ref_rev_parse_rules[nr_rules]; nr_rules++)
7902fe03
MH
3940 /* -2 for strlen("%.*s") - strlen("%s"); +1 for NUL */
3941 total_len += strlen(ref_rev_parse_rules[nr_rules]) - 2 + 1;
7c2b3029
JK
3942
3943 scanf_fmts = xmalloc(nr_rules * sizeof(char *) + total_len);
3944
84d5633f 3945 offset = 0;
7c2b3029 3946 for (i = 0; i < nr_rules; i++) {
4346663a 3947 assert(offset < total_len);
84d5633f 3948 scanf_fmts[i] = (char *)&scanf_fmts[nr_rules] + offset;
4346663a
MH
3949 offset += snprintf(scanf_fmts[i], total_len - offset,
3950 ref_rev_parse_rules[i], 2, "%s") + 1;
7c2b3029
JK
3951 }
3952 }
3953
3954 /* bail out if there are no rules */
3955 if (!nr_rules)
dfefa935 3956 return xstrdup(refname);
7c2b3029 3957
dfefa935
MH
3958 /* buffer for scanf result, at most refname must fit */
3959 short_name = xstrdup(refname);
7c2b3029
JK
3960
3961 /* skip first rule, it will always match */
3962 for (i = nr_rules - 1; i > 0 ; --i) {
3963 int j;
6e7b3309 3964 int rules_to_fail = i;
7c2b3029
JK
3965 int short_name_len;
3966
dfefa935 3967 if (1 != sscanf(refname, scanf_fmts[i], short_name))
7c2b3029
JK
3968 continue;
3969
3970 short_name_len = strlen(short_name);
3971
6e7b3309
BW
3972 /*
3973 * in strict mode, all (except the matched one) rules
3974 * must fail to resolve to a valid non-ambiguous ref
3975 */
3976 if (strict)
3977 rules_to_fail = nr_rules;
3978
7c2b3029
JK
3979 /*
3980 * check if the short name resolves to a valid ref,
3981 * but use only rules prior to the matched one
3982 */
6e7b3309 3983 for (j = 0; j < rules_to_fail; j++) {
7c2b3029 3984 const char *rule = ref_rev_parse_rules[j];
7c2b3029
JK
3985 char refname[PATH_MAX];
3986
6e7b3309
BW
3987 /* skip matched rule */
3988 if (i == j)
3989 continue;
3990
7c2b3029
JK
3991 /*
3992 * the short name is ambiguous, if it resolves
3993 * (with this previous rule) to a valid ref
3994 * read_ref() returns 0 on success
3995 */
3996 mksnpath(refname, sizeof(refname),
3997 rule, short_name_len, short_name);
c6893323 3998 if (ref_exists(refname))
7c2b3029
JK
3999 break;
4000 }
4001
4002 /*
4003 * short name is non-ambiguous if all previous rules
4004 * haven't resolved to a valid ref
4005 */
6e7b3309 4006 if (j == rules_to_fail)
7c2b3029
JK
4007 return short_name;
4008 }
4009
4010 free(short_name);
dfefa935 4011 return xstrdup(refname);
7c2b3029 4012}
daebaa78
JH
4013
4014static struct string_list *hide_refs;
4015
4016int parse_hide_refs_config(const char *var, const char *value, const char *section)
4017{
4018 if (!strcmp("transfer.hiderefs", var) ||
4019 /* NEEDSWORK: use parse_config_key() once both are merged */
59556548 4020 (starts_with(var, section) && var[strlen(section)] == '.' &&
daebaa78
JH
4021 !strcmp(var + strlen(section), ".hiderefs"))) {
4022 char *ref;
4023 int len;
4024
4025 if (!value)
4026 return config_error_nonbool(var);
4027 ref = xstrdup(value);
4028 len = strlen(ref);
4029 while (len && ref[len - 1] == '/')
4030 ref[--len] = '\0';
4031 if (!hide_refs) {
4032 hide_refs = xcalloc(1, sizeof(*hide_refs));
4033 hide_refs->strdup_strings = 1;
4034 }
4035 string_list_append(hide_refs, ref);
4036 }
4037 return 0;
4038}
4039
4040int ref_is_hidden(const char *refname)
4041{
4042 struct string_list_item *item;
4043
4044 if (!hide_refs)
4045 return 0;
4046 for_each_string_list_item(item, hide_refs) {
4047 int len;
59556548 4048 if (!starts_with(refname, item->string))
daebaa78
JH
4049 continue;
4050 len = strlen(item->string);
4051 if (!refname[len] || refname[len] == '/')
4052 return 1;
4053 }
4054 return 0;
4055}
fa5b1830
MH
4056
4057struct expire_reflog_cb {
4058 unsigned int flags;
4059 reflog_expiry_should_prune_fn *should_prune_fn;
4060 void *policy_cb;
4061 FILE *newlog;
4062 unsigned char last_kept_sha1[20];
4063};
4064
4065static int expire_reflog_ent(unsigned char *osha1, unsigned char *nsha1,
4066 const char *email, unsigned long timestamp, int tz,
4067 const char *message, void *cb_data)
4068{
4069 struct expire_reflog_cb *cb = cb_data;
4070 struct expire_reflog_policy_cb *policy_cb = cb->policy_cb;
4071
4072 if (cb->flags & EXPIRE_REFLOGS_REWRITE)
4073 osha1 = cb->last_kept_sha1;
4074
4075 if ((*cb->should_prune_fn)(osha1, nsha1, email, timestamp, tz,
4076 message, policy_cb)) {
4077 if (!cb->newlog)
4078 printf("would prune %s", message);
4079 else if (cb->flags & EXPIRE_REFLOGS_VERBOSE)
4080 printf("prune %s", message);
4081 } else {
4082 if (cb->newlog) {
c653e034 4083 fprintf(cb->newlog, "%s %s %s %lu %+05d\t%s",
fa5b1830 4084 sha1_to_hex(osha1), sha1_to_hex(nsha1),
c653e034 4085 email, timestamp, tz, message);
fa5b1830
MH
4086 hashcpy(cb->last_kept_sha1, nsha1);
4087 }
4088 if (cb->flags & EXPIRE_REFLOGS_VERBOSE)
4089 printf("keep %s", message);
4090 }
4091 return 0;
4092}
4093
4094int reflog_expire(const char *refname, const unsigned char *sha1,
4095 unsigned int flags,
4096 reflog_expiry_prepare_fn prepare_fn,
4097 reflog_expiry_should_prune_fn should_prune_fn,
4098 reflog_expiry_cleanup_fn cleanup_fn,
4099 void *policy_cb_data)
4100{
4101 static struct lock_file reflog_lock;
4102 struct expire_reflog_cb cb;
4103 struct ref_lock *lock;
4104 char *log_file;
4105 int status = 0;
5e6f003c 4106 int type;
4a32b2e0 4107 struct strbuf err = STRBUF_INIT;
fa5b1830
MH
4108
4109 memset(&cb, 0, sizeof(cb));
4110 cb.flags = flags;
4111 cb.policy_cb = policy_cb_data;
4112 cb.should_prune_fn = should_prune_fn;
4113
4114 /*
4115 * The reflog file is locked by holding the lock on the
4116 * reference itself, plus we might need to update the
4117 * reference if --updateref was specified:
4118 */
4a32b2e0
MH
4119 lock = lock_ref_sha1_basic(refname, sha1, NULL, NULL, 0, &type, &err);
4120 if (!lock) {
4121 error("%s", err.buf);
4122 strbuf_release(&err);
fa5b1830 4123 return error("cannot lock ref '%s'", refname);
4a32b2e0 4124 }
fa5b1830
MH
4125 if (!reflog_exists(refname)) {
4126 unlock_ref(lock);
4127 return 0;
4128 }
4129
4130 log_file = git_pathdup("logs/%s", refname);
4131 if (!(flags & EXPIRE_REFLOGS_DRY_RUN)) {
4132 /*
4133 * Even though holding $GIT_DIR/logs/$reflog.lock has
4134 * no locking implications, we use the lock_file
4135 * machinery here anyway because it does a lot of the
4136 * work we need, including cleaning up if the program
4137 * exits unexpectedly.
4138 */
4139 if (hold_lock_file_for_update(&reflog_lock, log_file, 0) < 0) {
4140 struct strbuf err = STRBUF_INIT;
4141 unable_to_lock_message(log_file, errno, &err);
4142 error("%s", err.buf);
4143 strbuf_release(&err);
4144 goto failure;
4145 }
4146 cb.newlog = fdopen_lock_file(&reflog_lock, "w");
4147 if (!cb.newlog) {
4148 error("cannot fdopen %s (%s)",
4149 reflog_lock.filename.buf, strerror(errno));
4150 goto failure;
4151 }
4152 }
4153
4154 (*prepare_fn)(refname, sha1, cb.policy_cb);
4155 for_each_reflog_ent(refname, expire_reflog_ent, &cb);
4156 (*cleanup_fn)(cb.policy_cb);
4157
4158 if (!(flags & EXPIRE_REFLOGS_DRY_RUN)) {
5e6f003c
MH
4159 /*
4160 * It doesn't make sense to adjust a reference pointed
4161 * to by a symbolic ref based on expiring entries in
423c688b
MH
4162 * the symbolic reference's reflog. Nor can we update
4163 * a reference if there are no remaining reflog
4164 * entries.
5e6f003c
MH
4165 */
4166 int update = (flags & EXPIRE_REFLOGS_UPDATE_REF) &&
423c688b
MH
4167 !(type & REF_ISSYMREF) &&
4168 !is_null_sha1(cb.last_kept_sha1);
5e6f003c 4169
fa5b1830
MH
4170 if (close_lock_file(&reflog_lock)) {
4171 status |= error("couldn't write %s: %s", log_file,
4172 strerror(errno));
5e6f003c 4173 } else if (update &&
fa5b1830
MH
4174 (write_in_full(lock->lock_fd,
4175 sha1_to_hex(cb.last_kept_sha1), 40) != 40 ||
4176 write_str_in_full(lock->lock_fd, "\n") != 1 ||
4177 close_ref(lock) < 0)) {
4178 status |= error("couldn't write %s",
4179 lock->lk->filename.buf);
4180 rollback_lock_file(&reflog_lock);
4181 } else if (commit_lock_file(&reflog_lock)) {
4182 status |= error("unable to commit reflog '%s' (%s)",
4183 log_file, strerror(errno));
5e6f003c 4184 } else if (update && commit_ref(lock)) {
fa5b1830
MH
4185 status |= error("couldn't set %s", lock->ref_name);
4186 }
4187 }
4188 free(log_file);
4189 unlock_ref(lock);
4190 return status;
4191
4192 failure:
4193 rollback_lock_file(&reflog_lock);
4194 free(log_file);
4195 unlock_ref(lock);
4196 return -1;
4197}