sequencer: assign only free()able strings to gpg_sign
[gitweb.git] / refs / packed-backend.c
index d500ebfaa5311fc37ae0b35144c8a6bd130b54be..74f1dea0f4f0bcb655e5e2ad02455925e1e3d040 100644 (file)
@@ -143,7 +143,7 @@ struct packed_ref_store {
         * "packed-refs" file. Note that this (and thus the enclosing
         * `packed_ref_store`) must not be freed.
         */
-       struct tempfile tempfile;
+       struct tempfile *tempfile;
 };
 
 /*
@@ -716,7 +716,7 @@ static struct snapshot *get_snapshot(struct packed_ref_store *refs)
 }
 
 static int packed_read_raw_ref(struct ref_store *ref_store,
-                              const char *refname, unsigned char *sha1,
+                              const char *refname, struct object_id *oid,
                               struct strbuf *referent, unsigned int *type)
 {
        struct packed_ref_store *refs =
@@ -734,7 +734,7 @@ static int packed_read_raw_ref(struct ref_store *ref_store,
                return -1;
        }
 
-       if (get_sha1_hex(rec, sha1))
+       if (get_oid_hex(rec, oid))
                die_invalid_line(refs->path, rec, snapshot->eof - rec);
 
        *type = REF_ISPACKED;
@@ -880,7 +880,7 @@ static int packed_ref_iterator_peel(struct ref_iterator *ref_iterator,
        } else if ((iter->base.flags & (REF_ISBROKEN | REF_ISSYMREF))) {
                return -1;
        } else {
-               return !!peel_object(iter->oid.hash, peeled->hash);
+               return !!peel_object(&iter->oid, peeled);
        }
 }
 
@@ -997,8 +997,9 @@ int packed_refs_lock(struct ref_store *ref_store, int flags, struct strbuf *err)
                return -1;
        }
 
-       if (close_lock_file(&refs->lock)) {
+       if (close_lock_file_gently(&refs->lock)) {
                strbuf_addf(err, "unable to close %s: %s", refs->path, strerror(errno));
+               rollback_lock_file(&refs->lock);
                return -1;
        }
 
@@ -1091,7 +1092,8 @@ static int write_with_updates(struct packed_ref_store *refs,
        packed_refs_path = get_locked_file_path(&refs->lock);
        strbuf_addf(&sb, "%s.new", packed_refs_path);
        free(packed_refs_path);
-       if (create_tempfile(&refs->tempfile, sb.buf) < 0) {
+       refs->tempfile = create_tempfile(sb.buf);
+       if (!refs->tempfile) {
                strbuf_addf(err, "unable to create file %s: %s",
                            sb.buf, strerror(errno));
                strbuf_release(&sb);
@@ -1099,7 +1101,7 @@ static int write_with_updates(struct packed_ref_store *refs,
        }
        strbuf_release(&sb);
 
-       out = fdopen_tempfile(&refs->tempfile, "w");
+       out = fdopen_tempfile(refs->tempfile, "w");
        if (!out) {
                strbuf_addf(err, "unable to fdopen packed-refs tempfile: %s",
                            strerror(errno));
@@ -1218,8 +1220,8 @@ static int write_with_updates(struct packed_ref_store *refs,
                        i++;
                } else {
                        struct object_id peeled;
-                       int peel_error = peel_object(update->new_oid.hash,
-                                                    peeled.hash);
+                       int peel_error = peel_object(&update->new_oid,
+                                                    &peeled);
 
                        if (write_packed_entry(out, update->refname,
                                               update->new_oid.hash,
@@ -1231,16 +1233,17 @@ static int write_with_updates(struct packed_ref_store *refs,
        }
 
        if (ok != ITER_DONE) {
-               strbuf_addf(err, "unable to write packed-refs file: "
-                           "error iterating over old contents");
+               strbuf_addstr(err, "unable to write packed-refs file: "
+                             "error iterating over old contents");
                goto error;
        }
 
-       if (close_tempfile(&refs->tempfile)) {
+       if (close_tempfile_gently(refs->tempfile)) {
                strbuf_addf(err, "error closing file %s: %s",
-                           get_tempfile_path(&refs->tempfile),
+                           get_tempfile_path(refs->tempfile),
                            strerror(errno));
                strbuf_release(&sb);
+               delete_tempfile(&refs->tempfile);
                return -1;
        }
 
@@ -1248,7 +1251,7 @@ static int write_with_updates(struct packed_ref_store *refs,
 
 write_error:
        strbuf_addf(err, "error writing to %s: %s",
-                   get_tempfile_path(&refs->tempfile), strerror(errno));
+                   get_tempfile_path(refs->tempfile), strerror(errno));
 
 error:
        if (iter)
@@ -1273,7 +1276,7 @@ static void packed_transaction_cleanup(struct packed_ref_store *refs,
        if (data) {
                string_list_clear(&data->updates, 0);
 
-               if (is_tempfile_active(&refs->tempfile))
+               if (is_tempfile_active(refs->tempfile))
                        delete_tempfile(&refs->tempfile);
 
                if (data->own_lock && is_lock_file_locked(&refs->lock)) {
@@ -1469,6 +1472,13 @@ static int packed_rename_ref(struct ref_store *ref_store,
        die("BUG: packed reference store does not support renaming references");
 }
 
+static int packed_copy_ref(struct ref_store *ref_store,
+                          const char *oldrefname, const char *newrefname,
+                          const char *logmsg)
+{
+       die("BUG: packed reference store does not support copying references");
+}
+
 static struct ref_iterator *packed_reflog_iterator_begin(struct ref_store *ref_store)
 {
        return empty_ref_iterator_begin();
@@ -1509,7 +1519,7 @@ static int packed_delete_reflog(struct ref_store *ref_store,
 }
 
 static int packed_reflog_expire(struct ref_store *ref_store,
-                               const char *refname, const unsigned char *sha1,
+                               const char *refname, const struct object_id *oid,
                                unsigned int flags,
                                reflog_expiry_prepare_fn prepare_fn,
                                reflog_expiry_should_prune_fn should_prune_fn,
@@ -1533,6 +1543,7 @@ struct ref_storage_be refs_be_packed = {
        packed_create_symref,
        packed_delete_refs,
        packed_rename_ref,
+       packed_copy_ref,
 
        packed_ref_iterator_begin,
        packed_read_raw_ref,