From patchwork Tue Sep 7 19:42:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12479261 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D1559C433EF for ; Tue, 7 Sep 2021 19:42:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id BB09A6112F for ; Tue, 7 Sep 2021 19:42:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346001AbhIGTnx (ORCPT ); Tue, 7 Sep 2021 15:43:53 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59066 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345745AbhIGTnu (ORCPT ); Tue, 7 Sep 2021 15:43:50 -0400 Received: from mail-wm1-x329.google.com (mail-wm1-x329.google.com [IPv6:2a00:1450:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CD7B9C061575 for ; Tue, 7 Sep 2021 12:42:43 -0700 (PDT) Received: by mail-wm1-x329.google.com with SMTP id e26so7697470wmk.2 for ; Tue, 07 Sep 2021 12:42:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=raBne3wJrd4STWFqd5EtanWa1BaTBMWmMCu1TaJps+I=; b=JTGjXnxE3/FUeDuMWTd7A0yH7Hi+VLslP642auSWpG1sgGljXEAQrk8f0ndE3Xczac cGZBO7TMF0RMTQFOzYv7Qn3sbGFYbdUFyLuB7i4xbkuzo7M9VL0pCY5x2s8rvMj8lYfq VUWUAMjUsiDftk1Y2D388WFHPG14aE6Zjw04askbkvdHdfJq/MKNMK14WvuHYqsIXj0t +UQIqJ2v+KwhUGtkV15pyM0MTFanVDZnuhj25PG1wu841d/j9hYWyLV+ohJDMFTbeOcr aBdn8JIET99yciCIdqC9Pk43gavBABv+lfULjI5G13w/f5IY/uaA9kQdd8M33uYDwnXq gULQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=raBne3wJrd4STWFqd5EtanWa1BaTBMWmMCu1TaJps+I=; b=IZbt6SbVJpc2cKb/9+fl7nR/a9k6mdQl8hZFOKvrsTngqFP0pYPTOZsl6W+aRcvSHj 32hllTmLv2p8gDDiYqo6GEKYJwwlXUHDo/xM9IZDF/bWzwvf7kpF7dLtBhQT+aCbhaON YvXWxoTaLtkEwpbyYQsIrxVoR2fIhrrnHK1/SPSFCd9Tpj74xCVGy2lI3WCz5Hv+8Hfj CzqL6AHUjHvWy92MmYWzvqush9+uBN7uTRU77UmaHb25P614rR0R9Xk1gFOuSr3RSodV 7WsFZKcE61tx5RfYEYZMVBtzXXFsgWy3alChmuDvHR0lLJlvPiyNGnMVwt7GxLbvhzaR +WDQ== X-Gm-Message-State: AOAM530Hw8RkEtk7FLC0ZGptDfw2kS5XbGIQbr1Z8LmDrDf0ciGxRrSl fh8y5QUEw83TxD6SzUPIHq7+U0Bf4Q+f0g== X-Google-Smtp-Source: ABdhPJzijgTnIo/Cl4iQHKc8M8eV5U9CiEch44CyQd4ynIq8vmZqHWsfbiNeVm58YhAJ6e5OqjLEEg== X-Received: by 2002:a1c:cc03:: with SMTP id h3mr5523960wmb.73.1631043762183; Tue, 07 Sep 2021 12:42:42 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id a10sm12075320wrd.51.2021.09.07.12.42.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Sep 2021 12:42:41 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Jeff King , Taylor Blau , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFz?= =?utf-8?b?b24=?= Subject: [PATCH 1/3] pack-write: use more idiomatic strbuf usage for packname construction Date: Tue, 7 Sep 2021 21:42:36 +0200 Message-Id: X-Mailer: git-send-email 2.33.0.818.gd2ef2916285 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Change code added in 5889271114a (finish_tmp_packfile():use strbuf for pathname construction, 2014-03-03) to do strbuf_reset() instead of noting the length of the base template, and doing a strbuf_setlen() to reset it, also change the spacing in the finish_tmp_packfile() so that each setup of the template, rename, and strbuf_reset() is grouped together. Since the prototype of the previous "name_buffer" now has a "const" use this chance to wrap the overly long definition of the finish_tmp_packfile() function. This doesn't really matter for now, but as we'll see makes the subsequent change much easier, as we won't need to juggle the basename template v.s. its current contents anymore when writing bitmaps. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/pack-objects.c | 17 +++++++++++------ pack-write.c | 27 ++++++++++++--------------- pack.h | 7 ++++++- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index df49f656b96..717003563db 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1216,7 +1216,7 @@ static void write_pack_file(void) if (!pack_to_stdout) { struct stat st; - struct strbuf tmpname = STRBUF_INIT; + struct strbuf tmp_basename = STRBUF_INIT; /* * Packs are runtime accessed in their mtime @@ -1237,7 +1237,7 @@ static void write_pack_file(void) warning_errno(_("failed utime() on %s"), pack_tmp_name); } - strbuf_addf(&tmpname, "%s-", base_name); + strbuf_addf(&tmp_basename, "%s-", base_name); if (write_bitmap_index) { bitmap_writer_set_checksum(hash); @@ -1245,12 +1245,16 @@ static void write_pack_file(void) &to_pack, written_list, nr_written); } - finish_tmp_packfile(&tmpname, pack_tmp_name, + finish_tmp_packfile(&tmp_basename, pack_tmp_name, written_list, nr_written, &pack_idx_opts, hash); if (write_bitmap_index) { - strbuf_addf(&tmpname, "%s.bitmap", hash_to_hex(hash)); + struct strbuf sb = STRBUF_INIT; + + strbuf_addf(&sb, "%s%s.bitmap", + tmp_basename.buf, + hash_to_hex(hash)); stop_progress(&progress_state); @@ -1258,11 +1262,12 @@ static void write_pack_file(void) bitmap_writer_select_commits(indexed_commits, indexed_commits_nr, -1); bitmap_writer_build(&to_pack); bitmap_writer_finish(written_list, nr_written, - tmpname.buf, write_bitmap_options); + sb.buf, write_bitmap_options); write_bitmap_index = 0; + strbuf_release(&sb); } - strbuf_release(&tmpname); + strbuf_release(&tmp_basename); free(pack_tmp_name); puts(hash_to_hex(hash)); } diff --git a/pack-write.c b/pack-write.c index 277c60165e8..57b9fc11423 100644 --- a/pack-write.c +++ b/pack-write.c @@ -462,15 +462,15 @@ struct hashfile *create_tmp_packfile(char **pack_tmp_name) return hashfd(fd, *pack_tmp_name); } -void finish_tmp_packfile(struct strbuf *name_buffer, +void finish_tmp_packfile(const struct strbuf *tmp_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[]) { + struct strbuf sb = STRBUF_INIT; const char *idx_tmp_name, *rev_tmp_name = NULL; - int basename_len = name_buffer->len; if (adjust_shared_perm(pack_tmp_name)) die_errno("unable to make temporary pack file readable"); @@ -483,26 +483,23 @@ void finish_tmp_packfile(struct strbuf *name_buffer, rev_tmp_name = write_rev_file(NULL, written_list, nr_written, hash, pack_idx_opts->flags); - strbuf_addf(name_buffer, "%s.pack", hash_to_hex(hash)); - - if (rename(pack_tmp_name, name_buffer->buf)) + strbuf_addf(&sb, "%s%s.pack", tmp_basename->buf, hash_to_hex(hash)); + if (rename(pack_tmp_name, sb.buf)) die_errno("unable to rename temporary pack file"); - - strbuf_setlen(name_buffer, basename_len); + strbuf_reset(&sb); if (rev_tmp_name) { - strbuf_addf(name_buffer, "%s.rev", hash_to_hex(hash)); - if (rename(rev_tmp_name, name_buffer->buf)) + strbuf_addf(&sb, "%s%s.rev", tmp_basename->buf, + hash_to_hex(hash)); + if (rename(rev_tmp_name, sb.buf)) die_errno("unable to rename temporary reverse-index file"); - - strbuf_setlen(name_buffer, basename_len); + strbuf_reset(&sb); } - strbuf_addf(name_buffer, "%s.idx", hash_to_hex(hash)); - if (rename(idx_tmp_name, name_buffer->buf)) + strbuf_addf(&sb, "%s%s.idx", tmp_basename->buf, hash_to_hex(hash)); + if (rename(idx_tmp_name, sb.buf)) die_errno("unable to rename temporary index file"); - - strbuf_setlen(name_buffer, basename_len); + strbuf_reset(&sb); free((void *)idx_tmp_name); } diff --git a/pack.h b/pack.h index fa139545262..ae0c9e04cd9 100644 --- a/pack.h +++ b/pack.h @@ -110,6 +110,11 @@ int encode_in_pack_object_header(unsigned char *hdr, int hdr_len, int read_pack_header(int fd, struct pack_header *); struct hashfile *create_tmp_packfile(char **pack_tmp_name); -void finish_tmp_packfile(struct strbuf *name_buffer, const char *pack_tmp_name, struct pack_idx_entry **written_list, uint32_t nr_written, struct pack_idx_option *pack_idx_opts, unsigned char sha1[]); +void finish_tmp_packfile(const struct strbuf *name_buffer, + const char *pack_tmp_name, + struct pack_idx_entry **written_list, + uint32_t nr_written, + struct pack_idx_option *pack_idx_opts, + unsigned char sha1[]); #endif From patchwork Tue Sep 7 19:42:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12479263 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C1B39C433FE for ; Tue, 7 Sep 2021 19:42:50 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AB7596108D for ; Tue, 7 Sep 2021 19:42:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345764AbhIGTnz (ORCPT ); Tue, 7 Sep 2021 15:43:55 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59074 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1343833AbhIGTnv (ORCPT ); Tue, 7 Sep 2021 15:43:51 -0400 Received: from mail-wr1-x429.google.com (mail-wr1-x429.google.com [IPv6:2a00:1450:4864:20::429]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CFC5BC06175F for ; Tue, 7 Sep 2021 12:42:44 -0700 (PDT) Received: by mail-wr1-x429.google.com with SMTP id u9so16074218wrg.8 for ; Tue, 07 Sep 2021 12:42:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WLBnghxxVIYCOmLvO+X96lpSRdRpQimPxDrz++pbeUM=; b=TwuS+IWP7sVjDSjGnxDp8s2vJiH2yiEXbrFYeNIJUose1ZT2Wu2c8k5TAz/Gvr9BX8 Buat3Lxd4Ph+oDLvJTRo7hZbxUcF9rbUc+GzCrKKTFixALiDjXStgw3eifglgAferxOo tsk+onT/qstGJrW/Oh0cZEtafoaPauJu2uabjcvi5ReXeGiTVrb9aQys+jsJBBnuz3l3 bVrUGEUg6YkoyNFYMWR7OrkO2XeeV4K4sWwTF7NQw364+XLzycJrnbV9AiP6JTtspkhq 5e+RoDIVukLlt/HLdUCqpLO+A195Q832idjmqHvL0HzymvlyCG4LYYX1dDMiqFmX5FIl sPyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WLBnghxxVIYCOmLvO+X96lpSRdRpQimPxDrz++pbeUM=; b=b5wE7jmK0e30hVEgXqrls/KdmaJDaLIB/JqLTEJ0Ixi8b7+DAB5CbmScUaBxdTAizL 2z6q+UB5v8mxhLH+TYUM3rOqoxcWUVrVauY8s1LggOz6i/ga0xIAYFzgWf/hf39h720d 1IKapwvfzkEBHRiNOA3Ub4XpBJtf1FL/dk6BaI+pJJPSbtf26zrbIUZrIjZaaqNLrIo4 GYBm9Tk88rWvtNORbThBhbi3aVD6/RpfMntmLe0RagS48VeSR0RL6fYvDRWovwkdFT+v XpnLQn3o4tBgRsXb9+l9Vm12QpwXjUcudWwFTotGWWLbE+sRG5Xt0RlzHLO51l2gNS3N ceqA== X-Gm-Message-State: AOAM533X+yPUH4VYGe3izHVfQiNh5trLCB2AzRVIVocLELdLkOMJgMhp zFUCiGVuCXgoU/pF4T/82cOP/MMUsHfC+A== X-Google-Smtp-Source: ABdhPJz0Mk34fhLAMmepiDmPAaWZZgWI5BcRisCwghN5l6vJ9QcCgJnhBhkv89t3RAL3+NfeqwfGIQ== X-Received: by 2002:a05:6000:1081:: with SMTP id y1mr29256wrw.415.1631043763172; Tue, 07 Sep 2021 12:42:43 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id a10sm12075320wrd.51.2021.09.07.12.42.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Sep 2021 12:42:42 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Jeff King , Taylor Blau , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFz?= =?utf-8?b?b24=?= Subject: [PATCH 2/3] pack-write: split up finish_tmp_packfile() function Date: Tue, 7 Sep 2021 21:42:37 +0200 Message-Id: X-Mailer: git-send-email 2.33.0.818.gd2ef2916285 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Split up the finish_tmp_packfile() function and use the split-up version in pack-objects.c. This change should not change any functionality, but sets up code flow for a bug fix where we'll be able to move the *.idx in-place after the *.bitmap is written. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/pack-objects.c | 9 ++++++--- pack-write.c | 39 +++++++++++++++++++++++++++++++-------- pack.h | 9 +++++++++ 3 files changed, 46 insertions(+), 11 deletions(-) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 717003563db..9fa4c6a9be8 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1217,6 +1217,7 @@ static void write_pack_file(void) if (!pack_to_stdout) { struct stat st; struct strbuf tmp_basename = STRBUF_INIT; + char *idx_tmp_name = NULL; /* * Packs are runtime accessed in their mtime @@ -1245,9 +1246,10 @@ static void write_pack_file(void) &to_pack, written_list, nr_written); } - finish_tmp_packfile(&tmp_basename, pack_tmp_name, - written_list, nr_written, - &pack_idx_opts, hash); + stage_tmp_packfile(&tmp_basename, pack_tmp_name, + written_list, nr_written, + &pack_idx_opts, hash, &idx_tmp_name); + rename_tmp_packfile_idx(&tmp_basename, hash, &idx_tmp_name); if (write_bitmap_index) { struct strbuf sb = STRBUF_INIT; @@ -1267,6 +1269,7 @@ static void write_pack_file(void) strbuf_release(&sb); } + free(idx_tmp_name); strbuf_release(&tmp_basename); free(pack_tmp_name); puts(hash_to_hex(hash)); diff --git a/pack-write.c b/pack-write.c index 57b9fc11423..ba5c4767dc8 100644 --- a/pack-write.c +++ b/pack-write.c @@ -468,16 +468,33 @@ void finish_tmp_packfile(const struct strbuf *tmp_basename, uint32_t nr_written, struct pack_idx_option *pack_idx_opts, unsigned char hash[]) +{ + char *idx_tmp_name = NULL; + + stage_tmp_packfile(tmp_basename, pack_tmp_name, written_list, + nr_written, pack_idx_opts, hash, &idx_tmp_name); + rename_tmp_packfile_idx(tmp_basename, hash, &idx_tmp_name); + + free(idx_tmp_name); +} + +void stage_tmp_packfile(const struct strbuf *tmp_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) { struct strbuf sb = STRBUF_INIT; - const char *idx_tmp_name, *rev_tmp_name = NULL; + const char *rev_tmp_name = NULL; if (adjust_shared_perm(pack_tmp_name)) die_errno("unable to make temporary pack file readable"); - idx_tmp_name = write_idx_file(NULL, written_list, nr_written, - pack_idx_opts, hash); - if (adjust_shared_perm(idx_tmp_name)) + *idx_tmp_name = (char *)write_idx_file(NULL, written_list, nr_written, + pack_idx_opts, hash); + if (adjust_shared_perm(*idx_tmp_name)) die_errno("unable to make temporary index file readable"); rev_tmp_name = write_rev_file(NULL, written_list, nr_written, hash, @@ -496,12 +513,18 @@ void finish_tmp_packfile(const struct strbuf *tmp_basename, strbuf_reset(&sb); } + strbuf_release(&sb); +} + +void rename_tmp_packfile_idx(const struct strbuf *tmp_basename, + unsigned char hash[], char **idx_tmp_name) +{ + struct strbuf sb = STRBUF_INIT; + strbuf_addf(&sb, "%s%s.idx", tmp_basename->buf, hash_to_hex(hash)); - if (rename(idx_tmp_name, sb.buf)) + if (rename(*idx_tmp_name, sb.buf)) die_errno("unable to rename temporary index file"); - strbuf_reset(&sb); - - free((void *)idx_tmp_name); + strbuf_release(&sb); } void write_promisor_file(const char *promisor_name, struct ref **sought, int nr_sought) diff --git a/pack.h b/pack.h index ae0c9e04cd9..6c1508c3de7 100644 --- a/pack.h +++ b/pack.h @@ -110,6 +110,15 @@ int encode_in_pack_object_header(unsigned char *hdr, int hdr_len, int read_pack_header(int fd, struct pack_header *); struct hashfile *create_tmp_packfile(char **pack_tmp_name); +void stage_tmp_packfile(const struct strbuf *tmp_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); +void rename_tmp_packfile_idx(const struct strbuf *tmp_basename, + unsigned char hash[], char **idx_tmp_name); void finish_tmp_packfile(const struct strbuf *name_buffer, const char *pack_tmp_name, struct pack_idx_entry **written_list, From patchwork Tue Sep 7 19:42:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= X-Patchwork-Id: 12479265 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4DE57C433F5 for ; Tue, 7 Sep 2021 19:42:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 37CD26108D for ; Tue, 7 Sep 2021 19:42:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346063AbhIGTn5 (ORCPT ); Tue, 7 Sep 2021 15:43:57 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59080 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1346052AbhIGTnw (ORCPT ); Tue, 7 Sep 2021 15:43:52 -0400 Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [IPv6:2a00:1450:4864:20::330]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B8670C061575 for ; Tue, 7 Sep 2021 12:42:45 -0700 (PDT) Received: by mail-wm1-x330.google.com with SMTP id v20-20020a1cf714000000b002e71f4d2026so2449057wmh.1 for ; Tue, 07 Sep 2021 12:42:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=r4ja/DthYVVjk8gR2AfxMJhrIukxcL8H8bW47mNb82k=; b=MxHm8+2ewaKgAnie78Sex9/aICKfEAczfWAQXd9Msc0fjikcssn3bfckkc0RDJ6xXl qqTqoBWdb2iKLvWQPYZynf9vPlEXpRV6atVjFJI7uKtJUCqMvnbwF+xw0U9WuedKqxPf HiAxAekv5pKKM7a/W6UTZA+W1V1nqzzEXXbohb68paxuNE0bHzoiCf90DfhSorf0vAIK rPcDlisCZQZGIV2B1OsnaslMXZcqSXNjSE9vQte+rrpNp6Rrq+BUSx9+2XLxPeSl5Ao4 OAokrEVBiplQWeRIEAeCT8HNX4l3DibqL2weTn3McrtY0NC328lXnE2fmJ/1h99Dgdo3 r4rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=r4ja/DthYVVjk8gR2AfxMJhrIukxcL8H8bW47mNb82k=; b=cGWrgHyesZJlydoNCUaqHWrfMpzkIJ9ncVzKZMBOdtb/vmbh9pv8ebohtI1wA7hGsn 3fjUhZokYGcLxB8RD5FQJGa9RgaGFWSgw5jm8nh3GZLZPJopcDB3/V+iO9bhb1x8o31u 6a92mwstuIOn6B53xzcQUpfIn/4KIhYY1f1QrVZO9uRGl7syGICYkTfNRplmkkNYGBc9 4ELxbYfLCvghz1ApLhcMYxX0czFZ/Ngy6COA7xxJU+sUte/AwYVtjQz/SvE98Zh3K7m5 44eYk6hY1VU6HOPvH1JlIC0UzVjJ1tnu3BYlNJn0dMiaGv/V6BOot6h2BUC7ogRnYk2C BEDg== X-Gm-Message-State: AOAM531glx2V/ATnFecKCbs3fUkCFDnkfh3RpM69+9bSgh4dAt26m6BV m2clBmifEAJRX/s0vWE6SXgRl04PoccybA== X-Google-Smtp-Source: ABdhPJxnpO0YTk/PvpODColRyrwvvWze74bFB7yzLDIRZjyl3WRIE5OvS0cuQjvSUm8kE2SW753vKw== X-Received: by 2002:a05:600c:230c:: with SMTP id 12mr5670349wmo.41.1631043764058; Tue, 07 Sep 2021 12:42:44 -0700 (PDT) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id a10sm12075320wrd.51.2021.09.07.12.42.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Sep 2021 12:42:43 -0700 (PDT) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Jeff King , Taylor Blau , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFz?= =?utf-8?b?b24=?= Subject: [PATCH 3/3] pack-write: rename *.idx file into place last (really!) Date: Tue, 7 Sep 2021 21:42:38 +0200 Message-Id: X-Mailer: git-send-email 2.33.0.818.gd2ef2916285 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Follow-up a preceding commit (pack-write.c: rename `.idx` file into place last, 2021-08-16)[1] and rename the *.idx file in-place after we write the *.bitmap. The preceding commit fixed the issue of *.idx being written before *.rev files, but did not do so for *.idx files. See 7cc8f971085 (pack-objects: implement bitmap writing, 2013-12-21) for commentary at the time when *.bitmap was implemented about how those files are written out, nothing in that commit contradicts what's being done here. While we're at it let's add cross-commentary to both builtin/repack.c and builtin/pack-objects.c to point out the two places where we write out these sets of files in sequence. 1. https://lore.kernel.org/git/a6a4d2154e83d41c10986c5f455279ab249a910c.1630461918.git.me@ttaylorr.com/ Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/pack-objects.c | 11 ++++++++++- builtin/repack.c | 8 ++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 9fa4c6a9be8..fad3fe5651d 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1249,7 +1249,6 @@ static void write_pack_file(void) stage_tmp_packfile(&tmp_basename, pack_tmp_name, written_list, nr_written, &pack_idx_opts, hash, &idx_tmp_name); - rename_tmp_packfile_idx(&tmp_basename, hash, &idx_tmp_name); if (write_bitmap_index) { struct strbuf sb = STRBUF_INIT; @@ -1269,6 +1268,16 @@ static void write_pack_file(void) strbuf_release(&sb); } + /* + * We must write the *.idx last, so that anything that expects + * an accompanying *.rev, *.bitmap etc. can count on it being + * present. + * + * See also corresponding logic in the "exts" + * struct in builtin/repack.c + */ + rename_tmp_packfile_idx(&tmp_basename, hash, &idx_tmp_name); + free(idx_tmp_name); strbuf_release(&tmp_basename); free(pack_tmp_name); diff --git a/builtin/repack.c b/builtin/repack.c index c3e47716093..dd438ebb3ee 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -211,6 +211,14 @@ static struct { {".rev", 1}, {".bitmap", 1}, {".promisor", 1}, + /* + * We must write the *.idx last, so that anything that expects + * an accompanying *.rev, *.bitmap etc. can count on it being + * present. + * + * See also corresponding logic in write_pack_file() in + * builtin/pack-objects.c + */ {".idx"}, };