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