]> git.ipfire.org Git - thirdparty/git.git/blobdiff - bulk-checkin.c
test-ref-store: remove force-create argument for create-reflog
[thirdparty/git.git] / bulk-checkin.c
index b023d9959aae4360cd42414a7f33ee11c550c61a..8785b2ac80699255ae8abd0801922ba025235309 100644 (file)
@@ -23,9 +23,25 @@ static struct bulk_checkin_state {
        uint32_t nr_written;
 } state;
 
+static void finish_tmp_packfile(struct strbuf *basename,
+                               const char *pack_tmp_name,
+                               struct pack_idx_entry **written_list,
+                               uint32_t nr_written,
+                               struct pack_idx_option *pack_idx_opts,
+                               unsigned char hash[])
+{
+       char *idx_tmp_name = NULL;
+
+       stage_tmp_packfiles(basename, pack_tmp_name, written_list, nr_written,
+                           pack_idx_opts, hash, &idx_tmp_name);
+       rename_tmp_packfile_idx(basename, &idx_tmp_name);
+
+       free(idx_tmp_name);
+}
+
 static void finish_bulk_checkin(struct bulk_checkin_state *state)
 {
-       struct object_id oid;
+       unsigned char hash[GIT_MAX_RAWSZ];
        struct strbuf packname = STRBUF_INIT;
        int i;
 
@@ -37,19 +53,20 @@ static void finish_bulk_checkin(struct bulk_checkin_state *state)
                unlink(state->pack_tmp_name);
                goto clear_exit;
        } else if (state->nr_written == 1) {
-               finalize_hashfile(state->f, oid.hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
+               finalize_hashfile(state->f, hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
        } else {
-               int fd = finalize_hashfile(state->f, oid.hash, 0);
-               fixup_pack_header_footer(fd, oid.hash, state->pack_tmp_name,
-                                        state->nr_written, oid.hash,
+               int fd = finalize_hashfile(state->f, hash, 0);
+               fixup_pack_header_footer(fd, hash, state->pack_tmp_name,
+                                        state->nr_written, hash,
                                         state->offset);
                close(fd);
        }
 
-       strbuf_addf(&packname, "%s/pack/pack-", get_object_directory());
+       strbuf_addf(&packname, "%s/pack/pack-%s.", get_object_directory(),
+                   hash_to_hex(hash));
        finish_tmp_packfile(&packname, state->pack_tmp_name,
                            state->written, state->nr_written,
-                           &state->pack_idx_opts, oid.hash);
+                           &state->pack_idx_opts, hash);
        for (i = 0; i < state->nr_written; i++)
                free(state->written[i]);