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