Skip to content

Commit 3f09ba7

Browse files
rsahlberggitster
authored andcommitted
fast-import.c: use a ref transaction when dumping tags
Signed-off-by: Ronnie Sahlberg <sahlberg@google.com> Reviewed-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 6629ea2 commit 3f09ba7

1 file changed

Lines changed: 23 additions & 6 deletions

File tree

fast-import.c

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1735,15 +1735,32 @@ static void dump_tags(void)
17351735
{
17361736
static const char *msg = "fast-import";
17371737
struct tag *t;
1738-
struct ref_lock *lock;
1739-
char ref_name[PATH_MAX];
1738+
struct strbuf ref_name = STRBUF_INIT;
1739+
struct strbuf err = STRBUF_INIT;
1740+
struct ref_transaction *transaction;
17401741

1742+
transaction = ref_transaction_begin(&err);
1743+
if (!transaction) {
1744+
failure |= error("%s", err.buf);
1745+
goto cleanup;
1746+
}
17411747
for (t = first_tag; t; t = t->next_tag) {
1742-
sprintf(ref_name, "tags/%s", t->name);
1743-
lock = lock_ref_sha1(ref_name, NULL);
1744-
if (!lock || write_ref_sha1(lock, t->sha1, msg) < 0)
1745-
failure |= error("Unable to update %s", ref_name);
1748+
strbuf_reset(&ref_name);
1749+
strbuf_addf(&ref_name, "refs/tags/%s", t->name);
1750+
1751+
if (ref_transaction_update(transaction, ref_name.buf, t->sha1,
1752+
NULL, 0, 0, &err)) {
1753+
failure |= error("%s", err.buf);
1754+
goto cleanup;
1755+
}
17461756
}
1757+
if (ref_transaction_commit(transaction, msg, &err))
1758+
failure |= error("%s", err.buf);
1759+
1760+
cleanup:
1761+
ref_transaction_free(transaction);
1762+
strbuf_release(&ref_name);
1763+
strbuf_release(&err);
17471764
}
17481765

17491766
static void dump_marks_helper(FILE *f,

0 commit comments

Comments
 (0)