refs.c 49.6 KB
Newer Older
1 2 3 4
/*
 * The backend-independent part of the reference module.
 */

D
Daniel Barkalow 已提交
5
#include "cache.h"
6
#include "hashmap.h"
7
#include "lockfile.h"
8
#include "iterator.h"
9
#include "refs.h"
10
#include "refs/refs-internal.h"
11 12
#include "object.h"
#include "tag.h"
13
#include "submodule.h"
14
#include "worktree.h"
15

16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
/*
 * List of all available backends
 */
static struct ref_storage_be *refs_backends = &refs_be_files;

static struct ref_storage_be *find_ref_storage_backend(const char *name)
{
	struct ref_storage_be *be;
	for (be = refs_backends; be; be = be->next)
		if (!strcmp(be->name, name))
			return be;
	return NULL;
}

int ref_storage_backend_exists(const char *name)
{
	return find_ref_storage_backend(name) != NULL;
}

35
/*
36 37
 * How to handle various characters in refnames:
 * 0: An acceptable character for refs
38 39 40
 * 1: End-of-component
 * 2: ., look for a preceding . to reject .. in refs
 * 3: {, look for a preceding @ to reject @{ in refs
41
 * 4: A bad character: ASCII control characters, and
42 43
 *    ":", "?", "[", "\", "^", "~", SP, or TAB
 * 5: *, reject unless REFNAME_REFSPEC_PATTERN is set
44 45
 */
static unsigned char refname_disposition[256] = {
46 47
	1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
	4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
48
	4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 2, 1,
49
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4,
50
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51 52 53
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 4, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 4, 4
54 55 56 57 58 59 60
};

/*
 * Try to read one refname component from the front of refname.
 * Return the length of the component found, or -1 if the component is
 * not legal.  It is legal if it is something reasonable to have under
 * ".git/refs/"; We do not like it if:
61 62 63
 *
 * - any path component of it begins with ".", or
 * - it has double dots "..", or
64
 * - it has ASCII control characters, or
65 66
 * - it has ":", "?", "[", "\", "^", "~", SP, or TAB anywhere, or
 * - it has "*" anywhere unless REFNAME_REFSPEC_PATTERN is set, or
67 68 69
 * - it ends with a "/", or
 * - it ends with ".lock", or
 * - it contains a "@{" portion
70
 */
71
static int check_refname_component(const char *refname, int *flags)
72 73 74 75 76
{
	const char *cp;
	char last = '\0';

	for (cp = refname; ; cp++) {
77 78 79
		int ch = *cp & 255;
		unsigned char disp = refname_disposition[ch];
		switch (disp) {
80
		case 1:
81
			goto out;
82
		case 2:
83 84 85
			if (last == '.')
				return -1; /* Refname contains "..". */
			break;
86
		case 3:
87 88
			if (last == '@')
				return -1; /* Refname contains "@{". */
89
			break;
90
		case 4:
91
			return -1;
92 93 94 95 96 97 98 99 100 101
		case 5:
			if (!(*flags & REFNAME_REFSPEC_PATTERN))
				return -1; /* refspec can't be a pattern */

			/*
			 * Unset the pattern flag so that we only accept
			 * a single asterisk for one side of refspec.
			 */
			*flags &= ~ REFNAME_REFSPEC_PATTERN;
			break;
102
		}
103 104
		last = ch;
	}
105
out:
106
	if (cp == refname)
107
		return 0; /* Component has zero length. */
108 109
	if (refname[0] == '.')
		return -1; /* Component starts with '.'. */
110 111
	if (cp - refname >= LOCK_SUFFIX_LEN &&
	    !memcmp(cp - LOCK_SUFFIX_LEN, LOCK_SUFFIX, LOCK_SUFFIX_LEN))
112 113 114 115
		return -1; /* Refname ends with ".lock". */
	return cp - refname;
}

116
int check_refname_format(const char *refname, int flags)
117 118 119
{
	int component_len, component_count = 0;

F
Felipe Contreras 已提交
120 121 122 123
	if (!strcmp(refname, "@"))
		/* Refname is a single character '@'. */
		return -1;

124 125
	while (1) {
		/* We are at the start of a path component. */
126 127 128 129
		component_len = check_refname_component(refname, &flags);
		if (component_len <= 0)
			return -1;

130 131 132 133 134 135 136 137 138 139 140 141 142 143
		component_count++;
		if (refname[component_len] == '\0')
			break;
		/* Skip to next component. */
		refname += component_len + 1;
	}

	if (refname[component_len - 1] == '.')
		return -1; /* Refname ends with '.'. */
	if (!(flags & REFNAME_ALLOW_ONELEVEL) && component_count < 2)
		return -1; /* Refname has only one component. */
	return 0;
}

144
int refname_is_safe(const char *refname)
145
{
146 147 148
	const char *rest;

	if (skip_prefix(refname, "refs/", &rest)) {
149 150
		char *buf;
		int result;
151 152 153 154 155
		size_t restlen = strlen(rest);

		/* rest must not be empty, or start or end with "/" */
		if (!restlen || *rest == '/' || rest[restlen - 1] == '/')
			return 0;
156 157 158 159 160 161

		/*
		 * Does the refname try to escape refs/?
		 * For example: refs/foo/../bar is safe but refs/foo/../../bar
		 * is not.
		 */
162 163
		buf = xmallocz(restlen);
		result = !normalize_path_copy(buf, rest) && !strcmp(buf, rest);
164 165 166
		free(buf);
		return result;
	}
167 168

	do {
169 170 171
		if (!isupper(*refname) && *refname != '_')
			return 0;
		refname++;
172
	} while (*refname);
173 174 175
	return 1;
}

176 177 178 179 180 181 182 183 184 185 186
char *refs_resolve_refdup(struct ref_store *refs,
			  const char *refname, int resolve_flags,
			  unsigned char *sha1, int *flags)
{
	const char *result;

	result = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
					 sha1, flags);
	return xstrdup_or_null(result);
}

187 188
char *resolve_refdup(const char *refname, int resolve_flags,
		     unsigned char *sha1, int *flags)
189
{
190 191 192
	return refs_resolve_refdup(get_main_ref_store(),
				   refname, resolve_flags,
				   sha1, flags);
193 194
}

195 196 197 198 199 200
/* The argument to filter_refs */
struct ref_filter {
	const char *pattern;
	each_ref_fn *fn;
	void *cb_data;
};
201

202 203
int refs_read_ref_full(struct ref_store *refs, const char *refname,
		       int resolve_flags, unsigned char *sha1, int *flags)
204
{
205
	if (refs_resolve_ref_unsafe(refs, refname, resolve_flags, sha1, flags))
206 207
		return 0;
	return -1;
208 209
}

210 211 212 213 214 215
int read_ref_full(const char *refname, int resolve_flags, unsigned char *sha1, int *flags)
{
	return refs_read_ref_full(get_main_ref_store(), refname,
				  resolve_flags, sha1, flags);
}

216
int read_ref(const char *refname, unsigned char *sha1)
217
{
218
	return read_ref_full(refname, RESOLVE_REF_READING, sha1, NULL);
219 220
}

221
int ref_exists(const char *refname)
222
{
223 224
	unsigned char sha1[20];
	return !!resolve_ref_unsafe(refname, RESOLVE_REF_READING, sha1, NULL);
225 226
}

227 228
static int filter_refs(const char *refname, const struct object_id *oid,
			   int flags, void *data)
229
{
230 231 232 233 234
	struct ref_filter *filter = (struct ref_filter *)data;

	if (wildmatch(filter->pattern, refname, 0, NULL))
		return 0;
	return filter->fn(refname, oid, flags, filter->cb_data);
235 236
}

237
enum peel_status peel_object(const unsigned char *name, unsigned char *sha1)
238
{
239
	struct object *o = lookup_unknown_object(name);
240

241 242 243 244 245
	if (o->type == OBJ_NONE) {
		int type = sha1_object_info(name, NULL);
		if (type < 0 || !object_as_type(o, type, 0))
			return PEEL_INVALID;
	}
246

247 248
	if (o->type != OBJ_TAG)
		return PEEL_NON_TAG;
249

250 251 252 253
	o = deref_tag_noverify(o);
	if (!o)
		return PEEL_INVALID;

J
Junio C Hamano 已提交
254
	hashcpy(sha1, o->oid.hash);
255
	return PEEL_PEELED;
256 257
}

258 259 260 261 262 263
struct warn_if_dangling_data {
	FILE *fp;
	const char *refname;
	const struct string_list *refnames;
	const char *msg_fmt;
};
264

265 266 267 268 269 270
static int warn_if_dangling_symref(const char *refname, const struct object_id *oid,
				   int flags, void *cb_data)
{
	struct warn_if_dangling_data *d = cb_data;
	const char *resolves_to;
	struct object_id junk;
271

272 273
	if (!(flags & REF_ISSYMREF))
		return 0;
274

275 276 277 278 279 280 281
	resolves_to = resolve_ref_unsafe(refname, 0, junk.hash, NULL);
	if (!resolves_to
	    || (d->refname
		? strcmp(resolves_to, d->refname)
		: !string_list_has_string(d->refnames, resolves_to))) {
		return 0;
	}
282

283 284 285
	fprintf(d->fp, d->msg_fmt, refname);
	fputc('\n', d->fp);
	return 0;
286 287
}

288
void warn_dangling_symref(FILE *fp, const char *msg_fmt, const char *refname)
289
{
290 291 292 293 294 295 296
	struct warn_if_dangling_data data;

	data.fp = fp;
	data.refname = refname;
	data.refnames = NULL;
	data.msg_fmt = msg_fmt;
	for_each_rawref(warn_if_dangling_symref, &data);
297 298
}

299
void warn_dangling_symrefs(FILE *fp, const char *msg_fmt, const struct string_list *refnames)
300
{
301
	struct warn_if_dangling_data data;
302

303 304 305 306 307
	data.fp = fp;
	data.refname = NULL;
	data.refnames = refnames;
	data.msg_fmt = msg_fmt;
	for_each_rawref(warn_if_dangling_symref, &data);
308 309
}

310 311 312 313 314
int refs_for_each_tag_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
{
	return refs_for_each_ref_in(refs, "refs/tags/", fn, cb_data);
}

315
int for_each_tag_ref(each_ref_fn fn, void *cb_data)
316
{
317
	return refs_for_each_tag_ref(get_main_ref_store(), fn, cb_data);
318 319
}

320
int for_each_tag_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
321
{
322 323 324 325 326 327 328
	return refs_for_each_tag_ref(get_submodule_ref_store(submodule),
				     fn, cb_data);
}

int refs_for_each_branch_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
{
	return refs_for_each_ref_in(refs, "refs/heads/", fn, cb_data);
329 330
}

331
int for_each_branch_ref(each_ref_fn fn, void *cb_data)
332
{
333
	return refs_for_each_branch_ref(get_main_ref_store(), fn, cb_data);
334 335
}

336
int for_each_branch_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
337
{
338 339 340 341 342 343 344
	return refs_for_each_branch_ref(get_submodule_ref_store(submodule),
					fn, cb_data);
}

int refs_for_each_remote_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
{
	return refs_for_each_ref_in(refs, "refs/remotes/", fn, cb_data);
345
}
346

347
int for_each_remote_ref(each_ref_fn fn, void *cb_data)
348
{
349
	return refs_for_each_remote_ref(get_main_ref_store(), fn, cb_data);
350 351
}

352
int for_each_remote_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
353
{
354 355
	return refs_for_each_remote_ref(get_submodule_ref_store(submodule),
					fn, cb_data);
356
}
357

358 359 360 361 362 363
int head_ref_namespaced(each_ref_fn fn, void *cb_data)
{
	struct strbuf buf = STRBUF_INIT;
	int ret = 0;
	struct object_id oid;
	int flag;
364

365 366 367 368
	strbuf_addf(&buf, "%sHEAD", get_git_namespace());
	if (!read_ref_full(buf.buf, RESOLVE_REF_READING, oid.hash, &flag))
		ret = fn(buf.buf, &oid, flag, cb_data);
	strbuf_release(&buf);
369

370
	return ret;
371
}
372

373 374
int for_each_glob_ref_in(each_ref_fn fn, const char *pattern,
	const char *prefix, void *cb_data)
375
{
376 377 378
	struct strbuf real_pattern = STRBUF_INIT;
	struct ref_filter filter;
	int ret;
I
Ilari Liusvaara 已提交
379

380
	if (!prefix && !starts_with(pattern, "refs/"))
I
Ilari Liusvaara 已提交
381
		strbuf_addstr(&real_pattern, "refs/");
382 383
	else if (prefix)
		strbuf_addstr(&real_pattern, prefix);
I
Ilari Liusvaara 已提交
384 385
	strbuf_addstr(&real_pattern, pattern);

386
	if (!has_glob_specials(pattern)) {
387
		/* Append implied '/' '*' if not present. */
388
		strbuf_complete(&real_pattern, '/');
I
Ilari Liusvaara 已提交
389 390 391 392 393 394 395 396 397 398 399 400 401
		/* No need to check for '*', there is none. */
		strbuf_addch(&real_pattern, '*');
	}

	filter.pattern = real_pattern.buf;
	filter.fn = fn;
	filter.cb_data = cb_data;
	ret = for_each_ref(filter_refs, &filter);

	strbuf_release(&real_pattern);
	return ret;
}

402 403 404 405 406
int for_each_glob_ref(each_ref_fn fn, const char *pattern, void *cb_data)
{
	return for_each_glob_ref_in(fn, pattern, NULL, cb_data);
}

407
const char *prettify_refname(const char *name)
408
{
409 410 411 412 413
	if (skip_prefix(name, "refs/heads/", &name) ||
	    skip_prefix(name, "refs/tags/", &name) ||
	    skip_prefix(name, "refs/remotes/", &name))
		; /* nothing */
	return name;
414 415
}

416
static const char *ref_rev_parse_rules[] = {
S
Steffen Prohaska 已提交
417 418 419 420 421 422 423 424 425
	"%.*s",
	"refs/%.*s",
	"refs/tags/%.*s",
	"refs/heads/%.*s",
	"refs/remotes/%.*s",
	"refs/remotes/%.*s/HEAD",
	NULL
};

426
int refname_match(const char *abbrev_name, const char *full_name)
S
Steffen Prohaska 已提交
427 428 429 430
{
	const char **p;
	const int abbrev_name_len = strlen(abbrev_name);

431
	for (p = ref_rev_parse_rules; *p; p++) {
S
Steffen Prohaska 已提交
432 433 434 435 436 437 438 439
		if (!strcmp(full_name, mkpath(*p, abbrev_name_len, abbrev_name))) {
			return 1;
		}
	}

	return 0;
}

440 441 442 443 444 445 446 447
/*
 * *string and *len will only be substituted, and *string returned (for
 * later free()ing) if the string passed in is a magic short-hand form
 * to name a branch.
 */
static char *substitute_branch_name(const char **string, int *len)
{
	struct strbuf buf = STRBUF_INIT;
448
	int ret = interpret_branch_name(*string, *len, &buf, 0);
449 450 451 452 453 454 455 456 457 458 459 460 461 462

	if (ret == *len) {
		size_t size;
		*string = strbuf_detach(&buf, &size);
		*len = size;
		return (char *)*string;
	}

	return NULL;
}

int dwim_ref(const char *str, int len, unsigned char *sha1, char **ref)
{
	char *last_branch = substitute_branch_name(&str, &len);
463 464 465 466 467 468 469
	int   refs_found  = expand_ref(str, len, sha1, ref);
	free(last_branch);
	return refs_found;
}

int expand_ref(const char *str, int len, unsigned char *sha1, char **ref)
{
470 471
	const char **p, *r;
	int refs_found = 0;
J
Jeff King 已提交
472
	struct strbuf fullref = STRBUF_INIT;
473 474 475 476 477 478 479 480

	*ref = NULL;
	for (p = ref_rev_parse_rules; *p; p++) {
		unsigned char sha1_from_ref[20];
		unsigned char *this_result;
		int flag;

		this_result = refs_found ? sha1_from_ref : sha1;
J
Jeff King 已提交
481 482 483
		strbuf_reset(&fullref);
		strbuf_addf(&fullref, *p, len, str);
		r = resolve_ref_unsafe(fullref.buf, RESOLVE_REF_READING,
484
				       this_result, &flag);
485 486 487 488 489
		if (r) {
			if (!refs_found++)
				*ref = xstrdup(r);
			if (!warn_ambiguous_refs)
				break;
J
Jeff King 已提交
490 491 492 493
		} else if ((flag & REF_ISSYMREF) && strcmp(fullref.buf, "HEAD")) {
			warning("ignoring dangling symref %s.", fullref.buf);
		} else if ((flag & REF_ISBROKEN) && strchr(fullref.buf, '/')) {
			warning("ignoring broken ref %s.", fullref.buf);
494
		}
495
	}
J
Jeff King 已提交
496
	strbuf_release(&fullref);
497 498 499 500 501 502 503 504
	return refs_found;
}

int dwim_log(const char *str, int len, unsigned char *sha1, char **log)
{
	char *last_branch = substitute_branch_name(&str, &len);
	const char **p;
	int logs_found = 0;
J
Jeff King 已提交
505
	struct strbuf path = STRBUF_INIT;
506 507 508 509 510 511

	*log = NULL;
	for (p = ref_rev_parse_rules; *p; p++) {
		unsigned char hash[20];
		const char *ref, *it;

J
Jeff King 已提交
512 513 514
		strbuf_reset(&path);
		strbuf_addf(&path, *p, len, str);
		ref = resolve_ref_unsafe(path.buf, RESOLVE_REF_READING,
515
					 hash, NULL);
516 517
		if (!ref)
			continue;
J
Jeff King 已提交
518 519 520
		if (reflog_exists(path.buf))
			it = path.buf;
		else if (strcmp(ref, path.buf) && reflog_exists(ref))
521 522 523 524 525 526 527
			it = ref;
		else
			continue;
		if (!logs_found++) {
			*log = xstrdup(it);
			hashcpy(sha1, hash);
		}
528 529
		if (!warn_ambiguous_refs)
			break;
J
Junio C Hamano 已提交
530
	}
J
Jeff King 已提交
531
	strbuf_release(&path);
532 533
	free(last_branch);
	return logs_found;
534 535
}

D
David Turner 已提交
536 537
static int is_per_worktree_ref(const char *refname)
{
538 539
	return !strcmp(refname, "HEAD") ||
		starts_with(refname, "refs/bisect/");
D
David Turner 已提交
540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562
}

static int is_pseudoref_syntax(const char *refname)
{
	const char *c;

	for (c = refname; *c; c++) {
		if (!isupper(*c) && *c != '-' && *c != '_')
			return 0;
	}

	return 1;
}

enum ref_type ref_type(const char *refname)
{
	if (is_per_worktree_ref(refname))
		return REF_TYPE_PER_WORKTREE;
	if (is_pseudoref_syntax(refname))
		return REF_TYPE_PSEUDOREF;
       return REF_TYPE_NORMAL;
}

563 564 565 566 567 568 569 570 571 572 573 574 575 576
static int write_pseudoref(const char *pseudoref, const unsigned char *sha1,
			   const unsigned char *old_sha1, struct strbuf *err)
{
	const char *filename;
	int fd;
	static struct lock_file lock;
	struct strbuf buf = STRBUF_INIT;
	int ret = -1;

	strbuf_addf(&buf, "%s\n", sha1_to_hex(sha1));

	filename = git_path("%s", pseudoref);
	fd = hold_lock_file_for_update(&lock, filename, LOCK_DIE_ON_ERROR);
	if (fd < 0) {
577
		strbuf_addf(err, "could not open '%s' for writing: %s",
578 579 580 581 582 583
			    filename, strerror(errno));
		return -1;
	}

	if (old_sha1) {
		unsigned char actual_old_sha1[20];
584 585 586

		if (read_ref(pseudoref, actual_old_sha1))
			die("could not read ref '%s'", pseudoref);
587
		if (hashcmp(actual_old_sha1, old_sha1)) {
588
			strbuf_addf(err, "unexpected sha1 when writing '%s'", pseudoref);
589 590 591 592 593 594
			rollback_lock_file(&lock);
			goto done;
		}
	}

	if (write_in_full(fd, buf.buf, buf.len) != buf.len) {
595
		strbuf_addf(err, "could not write to '%s'", filename);
596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621
		rollback_lock_file(&lock);
		goto done;
	}

	commit_lock_file(&lock);
	ret = 0;
done:
	strbuf_release(&buf);
	return ret;
}

static int delete_pseudoref(const char *pseudoref, const unsigned char *old_sha1)
{
	static struct lock_file lock;
	const char *filename;

	filename = git_path("%s", pseudoref);

	if (old_sha1 && !is_null_sha1(old_sha1)) {
		int fd;
		unsigned char actual_old_sha1[20];

		fd = hold_lock_file_for_update(&lock, filename,
					       LOCK_DIE_ON_ERROR);
		if (fd < 0)
			die_errno(_("Could not open '%s' for writing"), filename);
622 623
		if (read_ref(pseudoref, actual_old_sha1))
			die("could not read ref '%s'", pseudoref);
624 625 626 627
		if (hashcmp(actual_old_sha1, old_sha1)) {
			warning("Unexpected sha1 when deleting %s", pseudoref);
			rollback_lock_file(&lock);
			return -1;
628
		}
629 630 631 632 633

		unlink(filename);
		rollback_lock_file(&lock);
	} else {
		unlink(filename);
634
	}
635

636
	return 0;
D
Daniel Barkalow 已提交
637
}
638

639 640 641 642
int refs_delete_ref(struct ref_store *refs, const char *msg,
		    const char *refname,
		    const unsigned char *old_sha1,
		    unsigned int flags)
643
{
644
	struct ref_transaction *transaction;
645
	struct strbuf err = STRBUF_INIT;
646

647 648
	if (ref_type(refname) == REF_TYPE_PSEUDOREF) {
		assert(refs == get_main_ref_store());
J
Junio C Hamano 已提交
649
		return delete_pseudoref(refname, old_sha1);
650
	}
651

652
	transaction = ref_store_transaction_begin(refs, &err);
653
	if (!transaction ||
654
	    ref_transaction_delete(transaction, refname, old_sha1,
655
				   flags, msg, &err) ||
656
	    ref_transaction_commit(transaction, &err)) {
657 658 659
		error("%s", err.buf);
		ref_transaction_free(transaction);
		strbuf_release(&err);
J
Junio C Hamano 已提交
660
		return 1;
661
	}
662 663
	ref_transaction_free(transaction);
	strbuf_release(&err);
664 665
	return 0;
}
666

667 668 669 670 671 672 673
int delete_ref(const char *msg, const char *refname,
	       const unsigned char *old_sha1, unsigned int flags)
{
	return refs_delete_ref(get_main_ref_store(), msg, refname,
			       old_sha1, flags);
}

674
int copy_reflog_msg(char *buf, const char *msg)
675 676 677 678
{
	char *cp = buf;
	char c;
	int wasspace = 1;
679

680 681 682 683 684 685 686 687
	*cp++ = '\t';
	while ((c = *msg++)) {
		if (wasspace && isspace(c))
			continue;
		wasspace = isspace(c);
		if (wasspace)
			c = ' ';
		*cp++ = c;
688
	}
689 690 691 692 693
	while (buf < cp && isspace(cp[-1]))
		cp--;
	*cp++ = '\n';
	return cp - buf;
}
694

695
int should_autocreate_reflog(const char *refname)
696
{
697 698 699 700 701 702 703 704 705
	switch (log_all_ref_updates) {
	case LOG_REFS_ALWAYS:
		return 1;
	case LOG_REFS_NORMAL:
		return starts_with(refname, "refs/heads/") ||
			starts_with(refname, "refs/remotes/") ||
			starts_with(refname, "refs/notes/") ||
			!strcmp(refname, "HEAD");
	default:
706
		return 0;
707
	}
708 709
}

710
int is_branch(const char *refname)
711
{
712
	return !strcmp(refname, "HEAD") || starts_with(refname, "refs/heads/");
713 714
}

715 716
struct read_ref_at_cb {
	const char *refname;
717
	timestamp_t at_time;
718 719 720 721 722 723 724 725
	int cnt;
	int reccnt;
	unsigned char *sha1;
	int found_it;

	unsigned char osha1[20];
	unsigned char nsha1[20];
	int tz;
726
	timestamp_t date;
727
	char **msg;
728
	timestamp_t *cutoff_time;
729 730 731 732
	int *cutoff_tz;
	int *cutoff_cnt;
};

733
static int read_ref_at_ent(struct object_id *ooid, struct object_id *noid,
734
		const char *email, timestamp_t timestamp, int tz,
735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756
		const char *message, void *cb_data)
{
	struct read_ref_at_cb *cb = cb_data;

	cb->reccnt++;
	cb->tz = tz;
	cb->date = timestamp;

	if (timestamp <= cb->at_time || cb->cnt == 0) {
		if (cb->msg)
			*cb->msg = xstrdup(message);
		if (cb->cutoff_time)
			*cb->cutoff_time = timestamp;
		if (cb->cutoff_tz)
			*cb->cutoff_tz = tz;
		if (cb->cutoff_cnt)
			*cb->cutoff_cnt = cb->reccnt - 1;
		/*
		 * we have not yet updated cb->[n|o]sha1 so they still
		 * hold the values for the previous record.
		 */
		if (!is_null_sha1(cb->osha1)) {
757 758
			hashcpy(cb->sha1, noid->hash);
			if (hashcmp(cb->osha1, noid->hash))
759
				warning("Log for ref %s has gap after %s.",
760
					cb->refname, show_date(cb->date, cb->tz, DATE_MODE(RFC2822)));
761 762
		}
		else if (cb->date == cb->at_time)
763 764
			hashcpy(cb->sha1, noid->hash);
		else if (hashcmp(noid->hash, cb->sha1))
765 766
			warning("Log for ref %s unexpectedly ended on %s.",
				cb->refname, show_date(cb->date, cb->tz,
767
						       DATE_MODE(RFC2822)));
768 769
		hashcpy(cb->osha1, ooid->hash);
		hashcpy(cb->nsha1, noid->hash);
770 771 772
		cb->found_it = 1;
		return 1;
	}
773 774
	hashcpy(cb->osha1, ooid->hash);
	hashcpy(cb->nsha1, noid->hash);
775 776 777 778 779
	if (cb->cnt > 0)
		cb->cnt--;
	return 0;
}

780
static int read_ref_at_ent_oldest(struct object_id *ooid, struct object_id *noid,
781
				  const char *email, timestamp_t timestamp,
782 783 784 785 786 787 788 789 790 791 792 793
				  int tz, const char *message, void *cb_data)
{
	struct read_ref_at_cb *cb = cb_data;

	if (cb->msg)
		*cb->msg = xstrdup(message);
	if (cb->cutoff_time)
		*cb->cutoff_time = timestamp;
	if (cb->cutoff_tz)
		*cb->cutoff_tz = tz;
	if (cb->cutoff_cnt)
		*cb->cutoff_cnt = cb->reccnt;
794
	hashcpy(cb->sha1, ooid->hash);
795
	if (is_null_sha1(cb->sha1))
796
		hashcpy(cb->sha1, noid->hash);
797 798
	/* We just want the first entry */
	return 1;
799 800
}

801
int read_ref_at(const char *refname, unsigned int flags, timestamp_t at_time, int cnt,
802
		unsigned char *sha1, char **msg,
803
		timestamp_t *cutoff_time, int *cutoff_tz, int *cutoff_cnt)
804
{
805
	struct read_ref_at_cb cb;
806

807 808 809 810 811 812 813 814 815 816 817 818
	memset(&cb, 0, sizeof(cb));
	cb.refname = refname;
	cb.at_time = at_time;
	cb.cnt = cnt;
	cb.msg = msg;
	cb.cutoff_time = cutoff_time;
	cb.cutoff_tz = cutoff_tz;
	cb.cutoff_cnt = cutoff_cnt;
	cb.sha1 = sha1;

	for_each_reflog_ent_reverse(refname, read_ref_at_ent, &cb);

819 820 821 822 823 824
	if (!cb.reccnt) {
		if (flags & GET_SHA1_QUIETLY)
			exit(128);
		else
			die("Log for %s is empty.", refname);
	}
825 826 827 828
	if (cb.found_it)
		return 0;

	for_each_reflog_ent(refname, read_ref_at_ent_oldest, &cb);
829

830
	return 1;
831
}
832

833 834
struct ref_transaction *ref_store_transaction_begin(struct ref_store *refs,
						    struct strbuf *err)
835
{
836
	struct ref_transaction *tr;
837 838
	assert(err);

839 840 841 842 843 844 845 846
	tr = xcalloc(1, sizeof(struct ref_transaction));
	tr->ref_store = refs;
	return tr;
}

struct ref_transaction *ref_transaction_begin(struct strbuf *err)
{
	return ref_store_transaction_begin(get_main_ref_store(), err);
847 848
}

849
void ref_transaction_free(struct ref_transaction *transaction)
850
{
851
	size_t i;
852

853 854 855
	if (!transaction)
		return;

856 857 858 859 860 861 862 863 864 865 866 867 868
	switch (transaction->state) {
	case REF_TRANSACTION_OPEN:
	case REF_TRANSACTION_CLOSED:
		/* OK */
		break;
	case REF_TRANSACTION_PREPARED:
		die("BUG: free called on a prepared reference transaction");
		break;
	default:
		die("BUG: unexpected reference transaction state");
		break;
	}

869 870
	for (i = 0; i < transaction->nr; i++) {
		free(transaction->updates[i]->msg);
871
		free(transaction->updates[i]);
872
	}
873 874 875 876
	free(transaction->updates);
	free(transaction);
}

877 878 879 880 881 882
struct ref_update *ref_transaction_add_update(
		struct ref_transaction *transaction,
		const char *refname, unsigned int flags,
		const unsigned char *new_sha1,
		const unsigned char *old_sha1,
		const char *msg)
883
{
884
	struct ref_update *update;
885 886 887 888 889 890 891

	if (transaction->state != REF_TRANSACTION_OPEN)
		die("BUG: update called for transaction that is not open");

	if ((flags & REF_ISPRUNING) && !(flags & REF_NODEREF))
		die("BUG: REF_ISPRUNING set without REF_NODEREF");

892
	FLEX_ALLOC_STR(update, refname, refname);
893 894
	ALLOC_GROW(transaction->updates, transaction->nr + 1, transaction->alloc);
	transaction->updates[transaction->nr++] = update;
895 896 897 898

	update->flags = flags;

	if (flags & REF_HAVE_NEW)
899
		hashcpy(update->new_oid.hash, new_sha1);
900
	if (flags & REF_HAVE_OLD)
901
		hashcpy(update->old_oid.hash, old_sha1);
902
	update->msg = xstrdup_or_null(msg);
903 904 905
	return update;
}

906 907 908 909
int ref_transaction_update(struct ref_transaction *transaction,
			   const char *refname,
			   const unsigned char *new_sha1,
			   const unsigned char *old_sha1,
910
			   unsigned int flags, const char *msg,
911
			   struct strbuf *err)
912
{
913 914
	assert(err);

915 916 917
	if ((new_sha1 && !is_null_sha1(new_sha1)) ?
	    check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) :
	    !refname_is_safe(refname)) {
918
		strbuf_addf(err, "refusing to update ref with bad name '%s'",
919 920 921 922
			    refname);
		return -1;
	}

923 924 925 926
	flags |= (new_sha1 ? REF_HAVE_NEW : 0) | (old_sha1 ? REF_HAVE_OLD : 0);

	ref_transaction_add_update(transaction, refname, flags,
				   new_sha1, old_sha1, msg);
927
	return 0;
928 929
}

930 931 932
int ref_transaction_create(struct ref_transaction *transaction,
			   const char *refname,
			   const unsigned char *new_sha1,
933
			   unsigned int flags, const char *msg,
934
			   struct strbuf *err)
935
{
936 937
	if (!new_sha1 || is_null_sha1(new_sha1))
		die("BUG: create called without valid new_sha1");
938
	return ref_transaction_update(transaction, refname, new_sha1,
939
				      null_sha1, flags, msg, err);
940 941
}

942 943 944
int ref_transaction_delete(struct ref_transaction *transaction,
			   const char *refname,
			   const unsigned char *old_sha1,
945
			   unsigned int flags, const char *msg,
946
			   struct strbuf *err)
947
{
948 949
	if (old_sha1 && is_null_sha1(old_sha1))
		die("BUG: delete called with old_sha1 set to zeros");
950
	return ref_transaction_update(transaction, refname,
951
				      null_sha1, old_sha1,
952
				      flags, msg, err);
953 954
}

955 956 957 958 959 960 961 962 963 964 965 966 967
int ref_transaction_verify(struct ref_transaction *transaction,
			   const char *refname,
			   const unsigned char *old_sha1,
			   unsigned int flags,
			   struct strbuf *err)
{
	if (!old_sha1)
		die("BUG: verify called with old_sha1 set to NULL");
	return ref_transaction_update(transaction, refname,
				      NULL, old_sha1,
				      flags, NULL, err);
}

968 969 970 971 972 973 974 975
int update_ref_oid(const char *msg, const char *refname,
	       const struct object_id *new_oid, const struct object_id *old_oid,
	       unsigned int flags, enum action_on_err onerr)
{
	return update_ref(msg, refname, new_oid ? new_oid->hash : NULL,
		old_oid ? old_oid->hash : NULL, flags, onerr);
}

976 977 978 979
int refs_update_ref(struct ref_store *refs, const char *msg,
		    const char *refname, const unsigned char *new_sha1,
		    const unsigned char *old_sha1, unsigned int flags,
		    enum action_on_err onerr)
980
{
981
	struct ref_transaction *t = NULL;
982
	struct strbuf err = STRBUF_INIT;
983
	int ret = 0;
984

985
	if (ref_type(refname) == REF_TYPE_PSEUDOREF) {
986
		assert(refs == get_main_ref_store());
987 988
		ret = write_pseudoref(refname, new_sha1, old_sha1, &err);
	} else {
989
		t = ref_store_transaction_begin(refs, &err);
990 991 992 993 994 995 996 997 998
		if (!t ||
		    ref_transaction_update(t, refname, new_sha1, old_sha1,
					   flags, msg, &err) ||
		    ref_transaction_commit(t, &err)) {
			ret = 1;
			ref_transaction_free(t);
		}
	}
	if (ret) {
999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011
		const char *str = "update_ref failed for ref '%s': %s";

		switch (onerr) {
		case UPDATE_REFS_MSG_ON_ERR:
			error(str, refname, err.buf);
			break;
		case UPDATE_REFS_DIE_ON_ERR:
			die(str, refname, err.buf);
			break;
		case UPDATE_REFS_QUIET_ON_ERR:
			break;
		}
		strbuf_release(&err);
1012
		return 1;
1013 1014
	}
	strbuf_release(&err);
1015 1016
	if (t)
		ref_transaction_free(t);
1017
	return 0;
1018 1019
}

1020 1021 1022 1023 1024 1025 1026 1027 1028
int update_ref(const char *msg, const char *refname,
	       const unsigned char *new_sha1,
	       const unsigned char *old_sha1,
	       unsigned int flags, enum action_on_err onerr)
{
	return refs_update_ref(get_main_ref_store(), msg, refname, new_sha1,
			       old_sha1, flags, onerr);
}

1029
char *shorten_unambiguous_ref(const char *refname, int strict)
J
Jeff King 已提交
1030 1031 1032 1033 1034
{
	int i;
	static char **scanf_fmts;
	static int nr_rules;
	char *short_name;
J
Jeff King 已提交
1035
	struct strbuf resolved_buf = STRBUF_INIT;
J
Jeff King 已提交
1036 1037

	if (!nr_rules) {
1038 1039 1040 1041 1042 1043
		/*
		 * Pre-generate scanf formats from ref_rev_parse_rules[].
		 * Generate a format suitable for scanf from a
		 * ref_rev_parse_rules rule by interpolating "%s" at the
		 * location of the "%.*s".
		 */
J
Jeff King 已提交
1044
		size_t total_len = 0;
1045
		size_t offset = 0;
J
Jeff King 已提交
1046 1047

		/* the rule list is NULL terminated, count them first */
J
Jeff King 已提交
1048
		for (nr_rules = 0; ref_rev_parse_rules[nr_rules]; nr_rules++)
1049 1050
			/* -2 for strlen("%.*s") - strlen("%s"); +1 for NUL */
			total_len += strlen(ref_rev_parse_rules[nr_rules]) - 2 + 1;
J
Jeff King 已提交
1051

1052
		scanf_fmts = xmalloc(st_add(st_mult(sizeof(char *), nr_rules), total_len));
J
Jeff King 已提交
1053

1054
		offset = 0;
J
Jeff King 已提交
1055
		for (i = 0; i < nr_rules; i++) {
1056
			assert(offset < total_len);
1057
			scanf_fmts[i] = (char *)&scanf_fmts[nr_rules] + offset;
1058 1059
			offset += snprintf(scanf_fmts[i], total_len - offset,
					   ref_rev_parse_rules[i], 2, "%s") + 1;
J
Jeff King 已提交
1060 1061 1062 1063 1064
		}
	}

	/* bail out if there are no rules */
	if (!nr_rules)
1065
		return xstrdup(refname);
J
Jeff King 已提交
1066

1067 1068
	/* buffer for scanf result, at most refname must fit */
	short_name = xstrdup(refname);
J
Jeff King 已提交
1069 1070 1071 1072

	/* skip first rule, it will always match */
	for (i = nr_rules - 1; i > 0 ; --i) {
		int j;
1073
		int rules_to_fail = i;
J
Jeff King 已提交
1074 1075
		int short_name_len;

1076
		if (1 != sscanf(refname, scanf_fmts[i], short_name))
J
Jeff King 已提交
1077 1078 1079 1080
			continue;

		short_name_len = strlen(short_name);

1081 1082 1083 1084 1085 1086 1087
		/*
		 * in strict mode, all (except the matched one) rules
		 * must fail to resolve to a valid non-ambiguous ref
		 */
		if (strict)
			rules_to_fail = nr_rules;

J
Jeff King 已提交
1088 1089 1090 1091
		/*
		 * check if the short name resolves to a valid ref,
		 * but use only rules prior to the matched one
		 */
1092
		for (j = 0; j < rules_to_fail; j++) {
J
Jeff King 已提交
1093 1094
			const char *rule = ref_rev_parse_rules[j];

1095 1096 1097 1098
			/* skip matched rule */
			if (i == j)
				continue;

J
Jeff King 已提交
1099 1100 1101 1102 1103
			/*
			 * the short name is ambiguous, if it resolves
			 * (with this previous rule) to a valid ref
			 * read_ref() returns 0 on success
			 */
J
Jeff King 已提交
1104 1105 1106 1107
			strbuf_reset(&resolved_buf);
			strbuf_addf(&resolved_buf, rule,
				    short_name_len, short_name);
			if (ref_exists(resolved_buf.buf))
J
Jeff King 已提交
1108 1109 1110 1111 1112 1113 1114
				break;
		}

		/*
		 * short name is non-ambiguous if all previous rules
		 * haven't resolved to a valid ref
		 */
J
Jeff King 已提交
1115 1116
		if (j == rules_to_fail) {
			strbuf_release(&resolved_buf);
J
Jeff King 已提交
1117
			return short_name;
J
Jeff King 已提交
1118
		}
J
Jeff King 已提交
1119 1120
	}

J
Jeff King 已提交
1121
	strbuf_release(&resolved_buf);
J
Jeff King 已提交
1122
	free(short_name);
1123
	return xstrdup(refname);
J
Jeff King 已提交
1124
}
1125 1126 1127 1128 1129

static struct string_list *hide_refs;

int parse_hide_refs_config(const char *var, const char *value, const char *section)
{
1130
	const char *key;
1131
	if (!strcmp("transfer.hiderefs", var) ||
1132 1133
	    (!parse_config_key(var, section, NULL, NULL, &key) &&
	     !strcmp(key, "hiderefs"))) {
1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151
		char *ref;
		int len;

		if (!value)
			return config_error_nonbool(var);
		ref = xstrdup(value);
		len = strlen(ref);
		while (len && ref[len - 1] == '/')
			ref[--len] = '\0';
		if (!hide_refs) {
			hide_refs = xcalloc(1, sizeof(*hide_refs));
			hide_refs->strdup_strings = 1;
		}
		string_list_append(hide_refs, ref);
	}
	return 0;
}

1152
int ref_is_hidden(const char *refname, const char *refname_full)
1153
{
1154
	int i;
1155 1156 1157

	if (!hide_refs)
		return 0;
1158 1159
	for (i = hide_refs->nr - 1; i >= 0; i--) {
		const char *match = hide_refs->items[i].string;
1160
		const char *subject;
1161
		int neg = 0;
1162
		int len;
1163 1164 1165 1166 1167 1168

		if (*match == '!') {
			neg = 1;
			match++;
		}

1169 1170 1171 1172 1173 1174 1175 1176 1177
		if (*match == '^') {
			subject = refname_full;
			match++;
		} else {
			subject = refname;
		}

		/* refname can be NULL when namespaces are used. */
		if (!subject || !starts_with(subject, match))
1178
			continue;
1179
		len = strlen(match);
1180
		if (!subject[len] || subject[len] == '/')
1181
			return !neg;
1182 1183 1184
	}
	return 0;
}
1185

D
David Turner 已提交
1186 1187 1188
const char *find_descendant_ref(const char *dirname,
				const struct string_list *extras,
				const struct string_list *skip)
1189
{
D
David Turner 已提交
1190
	int pos;
1191

D
David Turner 已提交
1192 1193
	if (!extras)
		return NULL;
1194 1195

	/*
D
David Turner 已提交
1196 1197 1198 1199
	 * Look at the place where dirname would be inserted into
	 * extras. If there is an entry at that position that starts
	 * with dirname (remember, dirname includes the trailing
	 * slash) and is not in skip, then we have a conflict.
1200
	 */
D
David Turner 已提交
1201 1202 1203
	for (pos = string_list_find_insert_index(extras, dirname, 0);
	     pos < extras->nr; pos++) {
		const char *extra_refname = extras->items[pos].string;
1204

D
David Turner 已提交
1205 1206 1207 1208 1209
		if (!starts_with(extra_refname, dirname))
			break;

		if (!skip || !string_list_has_string(skip, extra_refname))
			return extra_refname;
1210
	}
D
David Turner 已提交
1211 1212
	return NULL;
}
1213

1214 1215 1216
int refs_rename_ref_available(struct ref_store *refs,
			      const char *old_refname,
			      const char *new_refname)
D
David Turner 已提交
1217 1218 1219
{
	struct string_list skip = STRING_LIST_INIT_NODUP;
	struct strbuf err = STRBUF_INIT;
1220
	int ok;
1221

1222
	string_list_insert(&skip, old_refname);
1223 1224
	ok = !refs_verify_refname_available(refs, new_refname,
					    NULL, &skip, &err);
1225
	if (!ok)
D
David Turner 已提交
1226 1227 1228 1229
		error("%s", err.buf);

	string_list_clear(&skip, 0);
	strbuf_release(&err);
1230
	return ok;
1231
}
1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254

int head_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
{
	struct object_id oid;
	int flag;

	if (submodule) {
		if (resolve_gitlink_ref(submodule, "HEAD", oid.hash) == 0)
			return fn("HEAD", &oid, 0, cb_data);

		return 0;
	}

	if (!read_ref_full("HEAD", RESOLVE_REF_READING, oid.hash, &flag))
		return fn("HEAD", &oid, flag, cb_data);

	return 0;
}

int head_ref(each_ref_fn fn, void *cb_data)
{
	return head_ref_submodule(NULL, fn, cb_data);
}
1255

1256 1257 1258 1259 1260 1261 1262
struct ref_iterator *refs_ref_iterator_begin(
		struct ref_store *refs,
		const char *prefix, int trim, int flags)
{
	struct ref_iterator *iter;

	iter = refs->be->iterator_begin(refs, prefix, flags);
1263 1264 1265 1266 1267 1268 1269

	/*
	 * `iterator_begin()` already takes care of prefix, but we
	 * might need to do some trimming:
	 */
	if (trim)
		iter = prefix_ref_iterator_begin(iter, "", trim);
1270 1271 1272 1273

	return iter;
}

1274 1275 1276 1277 1278 1279 1280 1281 1282
/*
 * Call fn for each reference in the specified submodule for which the
 * refname begins with prefix. If trim is non-zero, then trim that
 * many characters off the beginning of each refname before passing
 * the refname to fn. flags can be DO_FOR_EACH_INCLUDE_BROKEN to
 * include broken references in the iteration. If fn ever returns a
 * non-zero value, stop the iteration and return that value;
 * otherwise, return 0.
 */
1283
static int do_for_each_ref(struct ref_store *refs, const char *prefix,
1284 1285 1286 1287
			   each_ref_fn fn, int trim, int flags, void *cb_data)
{
	struct ref_iterator *iter;

1288 1289 1290
	if (!refs)
		return 0;

1291
	iter = refs_ref_iterator_begin(refs, prefix, trim, flags);
1292 1293 1294 1295

	return do_for_each_ref_iterator(iter, fn, cb_data);
}

1296 1297 1298 1299 1300
int refs_for_each_ref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
{
	return do_for_each_ref(refs, "", fn, 0, 0, cb_data);
}

1301 1302
int for_each_ref(each_ref_fn fn, void *cb_data)
{
1303
	return refs_for_each_ref(get_main_ref_store(), fn, cb_data);
1304 1305 1306 1307
}

int for_each_ref_submodule(const char *submodule, each_ref_fn fn, void *cb_data)
{
1308 1309 1310 1311 1312 1313 1314
	return refs_for_each_ref(get_submodule_ref_store(submodule), fn, cb_data);
}

int refs_for_each_ref_in(struct ref_store *refs, const char *prefix,
			 each_ref_fn fn, void *cb_data)
{
	return do_for_each_ref(refs, prefix, fn, strlen(prefix), 0, cb_data);
1315 1316 1317 1318
}

int for_each_ref_in(const char *prefix, each_ref_fn fn, void *cb_data)
{
1319
	return refs_for_each_ref_in(get_main_ref_store(), prefix, fn, cb_data);
1320 1321 1322 1323 1324 1325 1326 1327
}

int for_each_fullref_in(const char *prefix, each_ref_fn fn, void *cb_data, unsigned int broken)
{
	unsigned int flag = 0;

	if (broken)
		flag = DO_FOR_EACH_INCLUDE_BROKEN;
1328 1329
	return do_for_each_ref(get_main_ref_store(),
			       prefix, fn, 0, flag, cb_data);
1330 1331 1332
}

int for_each_ref_in_submodule(const char *submodule, const char *prefix,
1333
			      each_ref_fn fn, void *cb_data)
1334
{
1335 1336
	return refs_for_each_ref_in(get_submodule_ref_store(submodule),
				    prefix, fn, cb_data);
1337 1338 1339 1340
}

int for_each_replace_ref(each_ref_fn fn, void *cb_data)
{
1341 1342 1343 1344
	return do_for_each_ref(get_main_ref_store(),
			       git_replace_ref_base, fn,
			       strlen(git_replace_ref_base),
			       0, cb_data);
1345 1346 1347 1348 1349 1350 1351
}

int for_each_namespaced_ref(each_ref_fn fn, void *cb_data)
{
	struct strbuf buf = STRBUF_INIT;
	int ret;
	strbuf_addf(&buf, "%srefs/", get_git_namespace());
1352 1353
	ret = do_for_each_ref(get_main_ref_store(),
			      buf.buf, fn, 0, 0, cb_data);
1354 1355 1356 1357
	strbuf_release(&buf);
	return ret;
}

1358
int refs_for_each_rawref(struct ref_store *refs, each_ref_fn fn, void *cb_data)
1359
{
1360
	return do_for_each_ref(refs, "", fn, 0,
1361 1362
			       DO_FOR_EACH_INCLUDE_BROKEN, cb_data);
}
1363

1364 1365 1366 1367 1368
int for_each_rawref(each_ref_fn fn, void *cb_data)
{
	return refs_for_each_rawref(get_main_ref_store(), fn, cb_data);
}

1369 1370 1371 1372 1373 1374 1375
int refs_read_raw_ref(struct ref_store *ref_store,
		      const char *refname, unsigned char *sha1,
		      struct strbuf *referent, unsigned int *type)
{
	return ref_store->be->read_raw_ref(ref_store, refname, sha1, referent, type);
}

1376
/* This function needs to return a meaningful errno on failure */
1377
const char *refs_resolve_ref_unsafe(struct ref_store *refs,
1378 1379 1380
				    const char *refname,
				    int resolve_flags,
				    unsigned char *sha1, int *flags)
1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411
{
	static struct strbuf sb_refname = STRBUF_INIT;
	int unused_flags;
	int symref_count;

	if (!flags)
		flags = &unused_flags;

	*flags = 0;

	if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
		if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
		    !refname_is_safe(refname)) {
			errno = EINVAL;
			return NULL;
		}

		/*
		 * dwim_ref() uses REF_ISBROKEN to distinguish between
		 * missing refs and refs that were present but invalid,
		 * to complain about the latter to stderr.
		 *
		 * We don't know whether the ref exists, so don't set
		 * REF_ISBROKEN yet.
		 */
		*flags |= REF_BAD_NAME;
	}

	for (symref_count = 0; symref_count < SYMREF_MAXDEPTH; symref_count++) {
		unsigned int read_flags = 0;

1412 1413
		if (refs_read_raw_ref(refs, refname,
				      sha1, &sb_refname, &read_flags)) {
1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451
			*flags |= read_flags;
			if (errno != ENOENT || (resolve_flags & RESOLVE_REF_READING))
				return NULL;
			hashclr(sha1);
			if (*flags & REF_BAD_NAME)
				*flags |= REF_ISBROKEN;
			return refname;
		}

		*flags |= read_flags;

		if (!(read_flags & REF_ISSYMREF)) {
			if (*flags & REF_BAD_NAME) {
				hashclr(sha1);
				*flags |= REF_ISBROKEN;
			}
			return refname;
		}

		refname = sb_refname.buf;
		if (resolve_flags & RESOLVE_REF_NO_RECURSE) {
			hashclr(sha1);
			return refname;
		}
		if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL)) {
			if (!(resolve_flags & RESOLVE_REF_ALLOW_BAD_NAME) ||
			    !refname_is_safe(refname)) {
				errno = EINVAL;
				return NULL;
			}

			*flags |= REF_ISBROKEN | REF_BAD_NAME;
		}
	}

	errno = ELOOP;
	return NULL;
}
1452

D
David Turner 已提交
1453 1454 1455
/* backend functions */
int refs_init_db(struct strbuf *err)
{
1456
	struct ref_store *refs = get_main_ref_store();
D
David Turner 已提交
1457 1458 1459 1460

	return refs->be->init_db(refs, err);
}

1461 1462 1463
const char *resolve_ref_unsafe(const char *refname, int resolve_flags,
			       unsigned char *sha1, int *flags)
{
1464
	return refs_resolve_ref_unsafe(get_main_ref_store(), refname,
1465 1466 1467
				       resolve_flags, sha1, flags);
}

1468 1469
int resolve_gitlink_ref(const char *submodule, const char *refname,
			unsigned char *sha1)
1470
{
1471
	size_t len = strlen(submodule);
1472 1473 1474
	struct ref_store *refs;
	int flags;

1475
	while (len && submodule[len - 1] == '/')
1476
		len--;
1477

1478 1479 1480
	if (!len)
		return -1;

1481
	if (submodule[len]) {
1482
		/* We need to strip off one or more trailing slashes */
1483
		char *stripped = xmemdupz(submodule, len);
1484

1485
		refs = get_submodule_ref_store(stripped);
1486 1487
		free(stripped);
	} else {
1488
		refs = get_submodule_ref_store(submodule);
1489 1490
	}

1491 1492 1493
	if (!refs)
		return -1;

1494
	if (!refs_resolve_ref_unsafe(refs, refname, 0, sha1, &flags) ||
1495 1496 1497 1498 1499
	    is_null_sha1(sha1))
		return -1;
	return 0;
}

1500
struct ref_store_hash_entry
1501 1502 1503 1504 1505
{
	struct hashmap_entry ent; /* must be the first member! */

	struct ref_store *refs;

1506 1507
	/* NUL-terminated identifier of the ref store: */
	char name[FLEX_ARRAY];
1508 1509
};

1510
static int ref_store_hash_cmp(const void *entry, const void *entry_or_key,
1511 1512
			      const void *keydata)
{
1513 1514
	const struct ref_store_hash_entry *e1 = entry, *e2 = entry_or_key;
	const char *name = keydata ? keydata : e2->name;
1515

1516
	return strcmp(e1->name, name);
1517 1518
}

1519 1520
static struct ref_store_hash_entry *alloc_ref_store_hash_entry(
		const char *name, struct ref_store *refs)
1521
{
1522
	struct ref_store_hash_entry *entry;
1523

1524 1525
	FLEX_ALLOC_STR(entry, name, name);
	hashmap_entry_init(entry, strhash(name));
1526 1527 1528 1529
	entry->refs = refs;
	return entry;
}

1530 1531 1532
/* A pointer to the ref_store for the main repository: */
static struct ref_store *main_ref_store;

1533 1534
/* A hashmap of ref_stores, stored by submodule name: */
static struct hashmap submodule_ref_stores;
1535

1536 1537 1538
/* A hashmap of ref_stores, stored by worktree id: */
static struct hashmap worktree_ref_stores;

1539
/*
1540 1541
 * Look up a ref store by name. If that ref_store hasn't been
 * registered yet, return NULL.
1542
 */
1543 1544
static struct ref_store *lookup_ref_store_map(struct hashmap *map,
					      const char *name)
1545
{
1546
	struct ref_store_hash_entry *entry;
1547

1548
	if (!map->tablesize)
1549 1550
		/* It's initialized on demand in register_ref_store(). */
		return NULL;
1551

1552
	entry = hashmap_get_from_hash(map, strhash(name), name);
1553
	return entry ? entry->refs : NULL;
1554 1555
}

1556 1557
/*
 * Create, record, and return a ref_store instance for the specified
1558
 * gitdir.
1559
 */
1560 1561
static struct ref_store *ref_store_init(const char *gitdir,
					unsigned int flags)
1562 1563 1564
{
	const char *be_name = "files";
	struct ref_storage_be *be = find_ref_storage_backend(be_name);
1565
	struct ref_store *refs;
1566 1567 1568 1569

	if (!be)
		die("BUG: reference backend %s is unknown", be_name);

1570
	refs = be->init(gitdir, flags);
1571
	return refs;
1572 1573
}

1574
struct ref_store *get_main_ref_store(void)
1575 1576 1577 1578
{
	if (main_ref_store)
		return main_ref_store;

1579
	main_ref_store = ref_store_init(get_git_dir(), REF_STORE_ALL_CAPS);
1580 1581 1582 1583
	return main_ref_store;
}

/*
1584 1585
 * Associate a ref store with a name. It is a fatal error to call this
 * function twice for the same name.
1586
 */
1587 1588 1589 1590
static void register_ref_store_map(struct hashmap *map,
				   const char *type,
				   struct ref_store *refs,
				   const char *name)
1591
{
1592 1593
	if (!map->tablesize)
		hashmap_init(map, ref_store_hash_cmp, 0);
1594

1595 1596
	if (hashmap_put(map, alloc_ref_store_hash_entry(name, refs)))
		die("BUG: %s ref_store '%s' initialized twice", type, name);
1597 1598
}

1599
struct ref_store *get_submodule_ref_store(const char *submodule)
1600
{
1601
	struct strbuf submodule_sb = STRBUF_INIT;
1602
	struct ref_store *refs;
1603
	int ret;
1604 1605

	if (!submodule || !*submodule) {
1606 1607 1608 1609
		/*
		 * FIXME: This case is ideally not allowed. But that
		 * can't happen until we clean up all the callers.
		 */
1610
		return get_main_ref_store();
1611
	}
1612

1613
	refs = lookup_ref_store_map(&submodule_ref_stores, submodule);
1614 1615
	if (refs)
		return refs;
1616

1617 1618 1619 1620 1621
	strbuf_addstr(&submodule_sb, submodule);
	ret = is_nonbare_repository_dir(&submodule_sb);
	strbuf_release(&submodule_sb);
	if (!ret)
		return NULL;
1622

1623 1624 1625 1626
	ret = submodule_to_gitdir(&submodule_sb, submodule);
	if (ret) {
		strbuf_release(&submodule_sb);
		return NULL;
1627 1628
	}

1629 1630 1631
	/* assume that add_submodule_odb() has been called */
	refs = ref_store_init(submodule_sb.buf,
			      REF_STORE_READ | REF_STORE_ODB);
1632 1633
	register_ref_store_map(&submodule_ref_stores, "submodule",
			       refs, submodule);
1634 1635

	strbuf_release(&submodule_sb);
1636 1637 1638
	return refs;
}

1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664
struct ref_store *get_worktree_ref_store(const struct worktree *wt)
{
	struct ref_store *refs;
	const char *id;

	if (wt->is_current)
		return get_main_ref_store();

	id = wt->id ? wt->id : "/";
	refs = lookup_ref_store_map(&worktree_ref_stores, id);
	if (refs)
		return refs;

	if (wt->id)
		refs = ref_store_init(git_common_path("worktrees/%s", wt->id),
				      REF_STORE_ALL_CAPS);
	else
		refs = ref_store_init(get_git_common_dir(),
				      REF_STORE_ALL_CAPS);

	if (refs)
		register_ref_store_map(&worktree_ref_stores, "worktree",
				       refs, id);
	return refs;
}

1665
void base_ref_store_init(struct ref_store *refs,
1666
			 const struct ref_storage_be *be)
1667
{
1668
	refs->be = be;
1669
}
1670 1671

/* backend functions */
1672
int refs_pack_refs(struct ref_store *refs, unsigned int flags)
1673 1674 1675 1676
{
	return refs->be->pack_refs(refs, flags);
}

1677 1678 1679 1680
int refs_peel_ref(struct ref_store *refs, const char *refname,
		  unsigned char *sha1)
{
	return refs->be->peel_ref(refs, refname, sha1);
1681 1682
}

M
Michael Haggerty 已提交
1683 1684
int peel_ref(const char *refname, unsigned char *sha1)
{
1685 1686
	return refs_peel_ref(get_main_ref_store(), refname, sha1);
}
M
Michael Haggerty 已提交
1687

1688 1689 1690 1691 1692 1693 1694 1695
int refs_create_symref(struct ref_store *refs,
		       const char *ref_target,
		       const char *refs_heads_master,
		       const char *logmsg)
{
	return refs->be->create_symref(refs, ref_target,
				       refs_heads_master,
				       logmsg);
M
Michael Haggerty 已提交
1696 1697
}

1698 1699 1700
int create_symref(const char *ref_target, const char *refs_heads_master,
		  const char *logmsg)
{
1701 1702
	return refs_create_symref(get_main_ref_store(), ref_target,
				  refs_heads_master, logmsg);
1703 1704
}

1705 1706 1707
int ref_update_reject_duplicates(struct string_list *refnames,
				 struct strbuf *err)
{
1708
	size_t i, n = refnames->nr;
1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721

	assert(err);

	for (i = 1; i < n; i++)
		if (!strcmp(refnames->items[i - 1].string, refnames->items[i].string)) {
			strbuf_addf(err,
				    "multiple updates for ref '%s' not allowed.",
				    refnames->items[i].string);
			return 1;
		}
	return 0;
}

1722 1723
int ref_transaction_prepare(struct ref_transaction *transaction,
			    struct strbuf *err)
1724
{
1725
	struct ref_store *refs = transaction->ref_store;
1726

1727 1728 1729 1730
	switch (transaction->state) {
	case REF_TRANSACTION_OPEN:
		/* Good. */
		break;
1731 1732 1733
	case REF_TRANSACTION_PREPARED:
		die("BUG: prepare called twice on reference transaction");
		break;
1734 1735 1736 1737 1738 1739 1740 1741
	case REF_TRANSACTION_CLOSED:
		die("BUG: prepare called on a closed reference transaction");
		break;
	default:
		die("BUG: unexpected reference transaction state");
		break;
	}

1742 1743 1744 1745 1746 1747
	if (getenv(GIT_QUARANTINE_ENVIRONMENT)) {
		strbuf_addstr(err,
			      _("ref updates forbidden inside quarantine environment"));
		return -1;
	}

1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800
	return refs->be->transaction_prepare(refs, transaction, err);
}

int ref_transaction_abort(struct ref_transaction *transaction,
			  struct strbuf *err)
{
	struct ref_store *refs = transaction->ref_store;
	int ret = 0;

	switch (transaction->state) {
	case REF_TRANSACTION_OPEN:
		/* No need to abort explicitly. */
		break;
	case REF_TRANSACTION_PREPARED:
		ret = refs->be->transaction_abort(refs, transaction, err);
		break;
	case REF_TRANSACTION_CLOSED:
		die("BUG: abort called on a closed reference transaction");
		break;
	default:
		die("BUG: unexpected reference transaction state");
		break;
	}

	ref_transaction_free(transaction);
	return ret;
}

int ref_transaction_commit(struct ref_transaction *transaction,
			   struct strbuf *err)
{
	struct ref_store *refs = transaction->ref_store;
	int ret;

	switch (transaction->state) {
	case REF_TRANSACTION_OPEN:
		/* Need to prepare first. */
		ret = ref_transaction_prepare(transaction, err);
		if (ret)
			return ret;
		break;
	case REF_TRANSACTION_PREPARED:
		/* Fall through to finish. */
		break;
	case REF_TRANSACTION_CLOSED:
		die("BUG: commit called on a closed reference transaction");
		break;
	default:
		die("BUG: unexpected reference transaction state");
		break;
	}

	return refs->be->transaction_finish(refs, transaction, err);
1801
}
1802

1803 1804
int refs_verify_refname_available(struct ref_store *refs,
				  const char *refname,
1805
				  const struct string_list *extras,
1806 1807
				  const struct string_list *skip,
				  struct strbuf *err)
1808
{
1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889
	const char *slash;
	const char *extra_refname;
	struct strbuf dirname = STRBUF_INIT;
	struct strbuf referent = STRBUF_INIT;
	struct object_id oid;
	unsigned int type;
	struct ref_iterator *iter;
	int ok;
	int ret = -1;

	/*
	 * For the sake of comments in this function, suppose that
	 * refname is "refs/foo/bar".
	 */

	assert(err);

	strbuf_grow(&dirname, strlen(refname) + 1);
	for (slash = strchr(refname, '/'); slash; slash = strchr(slash + 1, '/')) {
		/* Expand dirname to the new prefix, not including the trailing slash: */
		strbuf_add(&dirname, refname + dirname.len, slash - refname - dirname.len);

		/*
		 * We are still at a leading dir of the refname (e.g.,
		 * "refs/foo"; if there is a reference with that name,
		 * it is a conflict, *unless* it is in skip.
		 */
		if (skip && string_list_has_string(skip, dirname.buf))
			continue;

		if (!refs_read_raw_ref(refs, dirname.buf, oid.hash, &referent, &type)) {
			strbuf_addf(err, "'%s' exists; cannot create '%s'",
				    dirname.buf, refname);
			goto cleanup;
		}

		if (extras && string_list_has_string(extras, dirname.buf)) {
			strbuf_addf(err, "cannot process '%s' and '%s' at the same time",
				    refname, dirname.buf);
			goto cleanup;
		}
	}

	/*
	 * We are at the leaf of our refname (e.g., "refs/foo/bar").
	 * There is no point in searching for a reference with that
	 * name, because a refname isn't considered to conflict with
	 * itself. But we still need to check for references whose
	 * names are in the "refs/foo/bar/" namespace, because they
	 * *do* conflict.
	 */
	strbuf_addstr(&dirname, refname + dirname.len);
	strbuf_addch(&dirname, '/');

	iter = refs_ref_iterator_begin(refs, dirname.buf, 0,
				       DO_FOR_EACH_INCLUDE_BROKEN);
	while ((ok = ref_iterator_advance(iter)) == ITER_OK) {
		if (skip &&
		    string_list_has_string(skip, iter->refname))
			continue;

		strbuf_addf(err, "'%s' exists; cannot create '%s'",
			    iter->refname, refname);
		ref_iterator_abort(iter);
		goto cleanup;
	}

	if (ok != ITER_DONE)
		die("BUG: error while iterating over references");

	extra_refname = find_descendant_ref(dirname.buf, extras, skip);
	if (extra_refname)
		strbuf_addf(err, "cannot process '%s' and '%s' at the same time",
			    refname, extra_refname);
	else
		ret = 0;

cleanup:
	strbuf_release(&referent);
	strbuf_release(&dirname);
	return ret;
1890
}
D
David Turner 已提交
1891

1892
int refs_for_each_reflog(struct ref_store *refs, each_ref_fn fn, void *cb_data)
D
David Turner 已提交
1893 1894 1895 1896 1897 1898 1899 1900
{
	struct ref_iterator *iter;

	iter = refs->be->reflog_iterator_begin(refs);

	return do_for_each_ref_iterator(iter, fn, cb_data);
}

1901
int for_each_reflog(each_ref_fn fn, void *cb_data)
D
David Turner 已提交
1902
{
1903 1904
	return refs_for_each_reflog(get_main_ref_store(), fn, cb_data);
}
D
David Turner 已提交
1905

1906 1907 1908 1909 1910
int refs_for_each_reflog_ent_reverse(struct ref_store *refs,
				     const char *refname,
				     each_reflog_ent_fn fn,
				     void *cb_data)
{
D
David Turner 已提交
1911 1912 1913 1914
	return refs->be->for_each_reflog_ent_reverse(refs, refname,
						     fn, cb_data);
}

1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927
int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn,
				void *cb_data)
{
	return refs_for_each_reflog_ent_reverse(get_main_ref_store(),
						refname, fn, cb_data);
}

int refs_for_each_reflog_ent(struct ref_store *refs, const char *refname,
			     each_reflog_ent_fn fn, void *cb_data)
{
	return refs->be->for_each_reflog_ent(refs, refname, fn, cb_data);
}

D
David Turner 已提交
1928 1929 1930
int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn,
			void *cb_data)
{
1931 1932 1933
	return refs_for_each_reflog_ent(get_main_ref_store(), refname,
					fn, cb_data);
}
D
David Turner 已提交
1934

1935 1936 1937
int refs_reflog_exists(struct ref_store *refs, const char *refname)
{
	return refs->be->reflog_exists(refs, refname);
D
David Turner 已提交
1938 1939 1940 1941
}

int reflog_exists(const char *refname)
{
1942 1943
	return refs_reflog_exists(get_main_ref_store(), refname);
}
D
David Turner 已提交
1944

1945 1946 1947 1948
int refs_create_reflog(struct ref_store *refs, const char *refname,
		       int force_create, struct strbuf *err)
{
	return refs->be->create_reflog(refs, refname, force_create, err);
D
David Turner 已提交
1949 1950 1951 1952 1953
}

int safe_create_reflog(const char *refname, int force_create,
		       struct strbuf *err)
{
1954 1955 1956
	return refs_create_reflog(get_main_ref_store(), refname,
				  force_create, err);
}
D
David Turner 已提交
1957

1958 1959 1960
int refs_delete_reflog(struct ref_store *refs, const char *refname)
{
	return refs->be->delete_reflog(refs, refname);
D
David Turner 已提交
1961 1962 1963 1964
}

int delete_reflog(const char *refname)
{
1965 1966
	return refs_delete_reflog(get_main_ref_store(), refname);
}
D
David Turner 已提交
1967

1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978
int refs_reflog_expire(struct ref_store *refs,
		       const char *refname, const unsigned char *sha1,
		       unsigned int flags,
		       reflog_expiry_prepare_fn prepare_fn,
		       reflog_expiry_should_prune_fn should_prune_fn,
		       reflog_expiry_cleanup_fn cleanup_fn,
		       void *policy_cb_data)
{
	return refs->be->reflog_expire(refs, refname, sha1, flags,
				       prepare_fn, should_prune_fn,
				       cleanup_fn, policy_cb_data);
D
David Turner 已提交
1979 1980 1981 1982 1983 1984 1985 1986 1987
}

int reflog_expire(const char *refname, const unsigned char *sha1,
		  unsigned int flags,
		  reflog_expiry_prepare_fn prepare_fn,
		  reflog_expiry_should_prune_fn should_prune_fn,
		  reflog_expiry_cleanup_fn cleanup_fn,
		  void *policy_cb_data)
{
1988 1989 1990 1991
	return refs_reflog_expire(get_main_ref_store(),
				  refname, sha1, flags,
				  prepare_fn, should_prune_fn,
				  cleanup_fn, policy_cb_data);
D
David Turner 已提交
1992
}
1993 1994 1995 1996

int initial_ref_transaction_commit(struct ref_transaction *transaction,
				   struct strbuf *err)
{
1997
	struct ref_store *refs = transaction->ref_store;
1998 1999 2000

	return refs->be->initial_transaction_commit(refs, transaction, err);
}
D
David Turner 已提交
2001

2002 2003
int refs_delete_refs(struct ref_store *refs, const char *msg,
		     struct string_list *refnames, unsigned int flags)
D
David Turner 已提交
2004
{
2005
	return refs->be->delete_refs(refs, msg, refnames, flags);
D
David Turner 已提交
2006
}
D
David Turner 已提交
2007

2008 2009
int delete_refs(const char *msg, struct string_list *refnames,
		unsigned int flags)
D
David Turner 已提交
2010
{
2011
	return refs_delete_refs(get_main_ref_store(), msg, refnames, flags);
2012
}
D
David Turner 已提交
2013

2014 2015 2016
int refs_rename_ref(struct ref_store *refs, const char *oldref,
		    const char *newref, const char *logmsg)
{
D
David Turner 已提交
2017 2018
	return refs->be->rename_ref(refs, oldref, newref, logmsg);
}
2019 2020 2021 2022 2023

int rename_ref(const char *oldref, const char *newref, const char *logmsg)
{
	return refs_rename_ref(get_main_ref_store(), oldref, newref, logmsg);
}