Skip to content

Commit

Permalink
fast-import.c: use a ref transaction when dumping tags
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
rsahlberg authored and gitster committed Sep 3, 2014
1 parent 6629ea2 commit 3f09ba7
Showing 1 changed file with 23 additions and 6 deletions.
29 changes: 23 additions & 6 deletions fast-import.c
Original file line number Diff line number Diff line change
Expand Up @@ -1735,15 +1735,32 @@ static void dump_tags(void)
{
static const char *msg = "fast-import";
struct tag *t;
struct ref_lock *lock;
char ref_name[PATH_MAX];
struct strbuf ref_name = STRBUF_INIT;
struct strbuf err = STRBUF_INIT;
struct ref_transaction *transaction;

transaction = ref_transaction_begin(&err);
if (!transaction) {
failure |= error("%s", err.buf);
goto cleanup;
}
for (t = first_tag; t; t = t->next_tag) {
sprintf(ref_name, "tags/%s", t->name);
lock = lock_ref_sha1(ref_name, NULL);
if (!lock || write_ref_sha1(lock, t->sha1, msg) < 0)
failure |= error("Unable to update %s", ref_name);
strbuf_reset(&ref_name);
strbuf_addf(&ref_name, "refs/tags/%s", t->name);

if (ref_transaction_update(transaction, ref_name.buf, t->sha1,
NULL, 0, 0, &err)) {
failure |= error("%s", err.buf);
goto cleanup;
}
}
if (ref_transaction_commit(transaction, msg, &err))
failure |= error("%s", err.buf);

cleanup:
ref_transaction_free(transaction);
strbuf_release(&ref_name);
strbuf_release(&err);
}

static void dump_marks_helper(FILE *f,
Expand Down

0 comments on commit 3f09ba7

Please sign in to comment.