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