From patchwork Thu Jan 12 12:55:23 2023 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: 13097932 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id F2840C54EBC for ; Thu, 12 Jan 2023 12:55:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229518AbjALMzl (ORCPT ); Thu, 12 Jan 2023 07:55:41 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230460AbjALMzg (ORCPT ); Thu, 12 Jan 2023 07:55:36 -0500 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AC2484D48B for ; Thu, 12 Jan 2023 04:55:33 -0800 (PST) Received: by mail-wm1-x32d.google.com with SMTP id j16-20020a05600c1c1000b003d9ef8c274bso10603287wms.0 for ; Thu, 12 Jan 2023 04:55:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZyHhpMNFBBtnIoEGNT1isi0WOjpUaWcd11btsDDC8l8=; b=hyiC6V1I8doBPd9tppODVg/ctGMz3082R61w4BSDxK4S+fyhnEvSPLMKB7ykYSbBAL +DqpBOGQp0EcMGHTK/nz+uf7HZaWbi78Pgpno1fiWCPGBufT8MUYWs6Hf4yJh5rMGvmi fi8kcQHG3QwEpXu7r6N5Gl3stt3UtV0yAIHEP+V7HiWnyVQc4uwcxqxH9E+RZeVvTnj4 AT40KJXN2N2g/N31Hkfmu5u4Y1nCCKo3gwDxwQbDKTN1onRYaIrv9Dzy4mbIfrxY5OET tOi0mlJtMgwrGAA6WVdBAOAKhGHHUTMGB81q3DqKCL+hw1acc7eb45aiSpREGQnv01+l jrpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZyHhpMNFBBtnIoEGNT1isi0WOjpUaWcd11btsDDC8l8=; b=asb6bBkDUfurbh0RdhcpJNWSrNtkAXrT1VKG8XnwjEi8Co/8/ijpQYOMJT4kCPDJsE +1PG9caKKxL8e/wDCSmudLs1jWZNE5xjWXDLBt7D/CW3j38BsceqtBPMQXD1+Mr9ifqn XJ3TB/qFIEPK425mQYWw1UM5M/es2L3O+9xMzX56gayVFGtW/VQrdZlHVFGOb1jlyeYF uVdQGm3SwwwqgDVz3SrticPRBLyvkxrNR1cQuGeZ9d03jcv/KD75me0wT8yrjWkMvxNU FfxQjGcUoB60/Jrjz6n4bdSNFROiEKH88HINR+32SmEYlsimWUAVB/m4mXo5i7lKefPF amWA== X-Gm-Message-State: AFqh2kqeQBQadGs9d98OZurUusBYqxW6LCv4Kf8nhit3k8GrrRsR2nHN yzVPbC+GGm1HNyBzCRf/cB1DHju1Dy/ipg== X-Google-Smtp-Source: AMrXdXvYQK+wyG00fU04cWS57PERlwUkXzQU5wtmMTNLuObs3jufyKXNp2UNLrwb5RFFchFBGRZuqA== X-Received: by 2002:a05:600c:1c2a:b0:3d2:3376:6f2e with SMTP id j42-20020a05600c1c2a00b003d233766f2emr56176933wms.9.1673528131924; Thu, 12 Jan 2023 04:55:31 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id f12-20020a05600c154c00b003d9fba3c7a4sm8462473wmg.16.2023.01.12.04.55.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jan 2023 04:55:30 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Derrick Stolee , Victoria Dye , Jeff Hostetler , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= Subject: [PATCH v2 1/6] builtin/difftool.c: { 0 }-initialize rather than using memset() Date: Thu, 12 Jan 2023 13:55:23 +0100 Message-Id: X-Mailer: git-send-email 2.39.0.1205.g2ca064edc27 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Refactor an initialization of a variable added in 03831ef7b50 (difftool: implement the functionality in the builtin, 2017-01-19). This refactoring makes a subsequent change smaller. Signed-off-by: Ævar Arnfjörð Bjarmason --- builtin/difftool.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/builtin/difftool.c b/builtin/difftool.c index d9b76226f6a..1f9d4324df5 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -361,7 +361,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, struct hashmap symlinks2 = HASHMAP_INIT(pair_cmp, NULL); struct hashmap_iter iter; struct pair_entry *entry; - struct index_state wtindex; + struct index_state wtindex = { 0 }; struct checkout lstate, rstate; int err = 0; struct child_process cmd = CHILD_PROCESS_INIT; @@ -387,8 +387,6 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, mkdir(ldir.buf, 0700); mkdir(rdir.buf, 0700); - memset(&wtindex, 0, sizeof(wtindex)); - memset(&lstate, 0, sizeof(lstate)); lstate.base_dir = lbase_dir = xstrdup(ldir.buf); lstate.base_dir_len = ldir.len; From patchwork Thu Jan 12 12:55:24 2023 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: 13097933 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3EE14C54EBD for ; Thu, 12 Jan 2023 12:55:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229912AbjALMzo (ORCPT ); Thu, 12 Jan 2023 07:55:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42186 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230496AbjALMzg (ORCPT ); Thu, 12 Jan 2023 07:55:36 -0500 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 D594A4C718 for ; Thu, 12 Jan 2023 04:55:34 -0800 (PST) Received: by mail-wm1-x330.google.com with SMTP id g19-20020a05600c4ed300b003d9eb1dbc0aso11994198wmq.3 for ; Thu, 12 Jan 2023 04:55:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qzu51gbI4kPQrM5vuhDrMD3XjxfNa8lhb2PtM0FzNUI=; b=fj7m8G4fMZrn/OC4GOjMmJ54xjpfhxRlYAwooGjjHyBxslWh3dkFK4KZNha/kWpYXM x0kVDsmyjpsvk+gXa35l6p/4GUSvoLPy37cpLfXn7vBCwsNpQd+sfMnRrtB7NNoCahBF CuyAvCTqsAhRcNzDeIsr9sV/GE+5ET6lqvtU462L++zVmEYIGVq27+lZfVKGpzDeym8Z 8i3ZujB8QtKWb4CMT+Z7QcvByGk8kjHqNnj8wIfmYVfK0duht4snI3PveAeuyKGA5Wn1 H67xNkSw2HOwTHXRIjw4k5SbSC+Tk0jiRdFGJENkuKNNisAQVhIEZv5TMCiRpdJbwPgo uCEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qzu51gbI4kPQrM5vuhDrMD3XjxfNa8lhb2PtM0FzNUI=; b=v/tPqQDMO9sQRgyCumolO2nFsFSTxrN4FDt/DYRo1v0QnoCbXgTYJWpcS3QxYIrv0w r4iMB2fUi6nBDzNVCjpmlRxgrEOo08jhR5D3cHG+rqQcJtbB6iF8D17sMKmPEXeaFnJf zFrgXKj+TZ7Pm1EiXqpZBRQmihwSrOThHPvqMgrSz14sZqjsMCuCTSo8SEW1ZsxaN9wZ MBjsQWSU/uSxkBrMvr6GEflYV2Myk20E+E9odihTQOfauPvB4xmKQhOipjEeldigIhVp ce/9KeF0pESw0HPYPa6MjotKIPhFA06nbLJrJtfDXhZd1zwClZ8ZyOhA2PGju9kQJdqz h0Xw== X-Gm-Message-State: AFqh2krALKdMQLW9wUTPmf3isyPa2JNFnGghb18aqSE3fx/3BQSq1Ncc zOxdrxXGrAaMvyNZk8ur38USukajuEHkrQ== X-Google-Smtp-Source: AMrXdXvOWcAlpm82989FyiKap/78qatcby2eTBn6+h6LYoK22JrLrTcsQBtEQViiMc9h05BJl3aLFQ== X-Received: by 2002:a05:600c:6016:b0:3d3:3c93:af5e with SMTP id az22-20020a05600c601600b003d33c93af5emr55791591wmb.35.1673528132947; Thu, 12 Jan 2023 04:55:32 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id f12-20020a05600c154c00b003d9fba3c7a4sm8462473wmg.16.2023.01.12.04.55.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jan 2023 04:55:32 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Derrick Stolee , Victoria Dye , Jeff Hostetler , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= Subject: [PATCH v2 2/6] sparse-index.c: expand_to_path() can assume non-NULL "istate" Date: Thu, 12 Jan 2023 13:55:24 +0100 Message-Id: X-Mailer: git-send-email 2.39.0.1205.g2ca064edc27 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org This function added in [1] was subsequently used in [2]. All of the calls to it are in name-hash.c, and come after calls to lazy_init_name_hash(istate). The first thing that function does is: if (istate->name_hash_initialized) return; So we can already assume that we have a non-NULL "istate" here, or we'd be segfaulting. Let's not confuse matters by making it appear that's not the case. 1. 71f82d032f3 (sparse-index: expand_to_path(), 2021-04-12) 2. 4589bca829a (name-hash: use expand_to_path(), 2021-04-12) Signed-off-by: Ævar Arnfjörð Bjarmason --- sparse-index.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sparse-index.c b/sparse-index.c index 8c269dab803..65a08d33c73 100644 --- a/sparse-index.c +++ b/sparse-index.c @@ -547,7 +547,7 @@ void expand_to_path(struct index_state *istate, if (in_expand_to_path) return; - if (!istate || !istate->sparse_index) + if (!istate->sparse_index) return; if (!istate->repo) From patchwork Thu Jan 12 12:55:25 2023 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: 13097934 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CE49DC54EBD for ; Thu, 12 Jan 2023 12:55:53 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229510AbjALMzv (ORCPT ); Thu, 12 Jan 2023 07:55:51 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42196 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230051AbjALMzh (ORCPT ); Thu, 12 Jan 2023 07:55:37 -0500 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 16CC44D707 for ; Thu, 12 Jan 2023 04:55:35 -0800 (PST) Received: by mail-wm1-x329.google.com with SMTP id m3so13139777wmq.0 for ; Thu, 12 Jan 2023 04:55:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5zK57SPwE6ICJ6DhEECGgSFWClqbZSAkKzXuz8ZxPP0=; b=VUrLJBiSFuYZutpjDoO0qZ+t7BKgxWXlTDpfxTeAjSWz7ZUQws48+iRN5QYRgr2yWM I7NJhRIaCE+25+P0kth03mH3NWXFpnQLkZdlXkqMMubY6G5il2PJ6N9SNgvepMUZPN8+ Er6BkV8AYzsoFHfCHlORc1qpJFl+lyoBEgTtbeIRvMvTceMNDtFIOAXtcz4DYcLFIMzQ cqyStkcdhvoPTlfsh1Uo+YtM5ca6frThEs2hDF95/rBaxvJeDjJGeSNivoluINEXdUKT S1QXMlzPuMTKq+cZ5eywrN+XV+tapRzU1Vv5oTekMBJHarIJRoLQhJzl60BX7+PLTbS7 J2Hg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5zK57SPwE6ICJ6DhEECGgSFWClqbZSAkKzXuz8ZxPP0=; b=HgxYc3L16Jk6n/GtGQs/A+MWH2/BOQ8bQewtJTSlt+kEEyq6/S4rCTdYBb432toCY+ TaPevELk5cQGSp98NLRZFwVjuV4bmX5lzqEP1RXNr3OSDje6GkrQWJ8zJgNErWip9Bj6 mvYaP4tI8zYXVmgoi1SoTthfostoek0uBbd30JAaCmho7iFd23BwJj0j+z7bW/RfXPto LqU9n7iWpqae8sF89UWrYYOeVRtwjtI4ir/LMrJdTRCS3EOUiaXc5ZCdMnftB6c87spQ vg98TDz8UlwcNfqZ4/lDJqCZMpFV4tKumx4ypbJI1DAIDTLYt/vQzX60ym1PYbZpKzId Q1jw== X-Gm-Message-State: AFqh2kresNgBemnqc155T28Nzdk0R8PJbwGRuVxMe5C+8aRQvR5n5N6a EQhab+pRMfn0jSLSGfR14ZHPxgXjBmQeTg== X-Google-Smtp-Source: AMrXdXtgWTijYbds3LMfjNe4aON/tABirhlFf/IpvmBUR6W3I3XbAM96wcKXu++VVJiopWtkwFhCWQ== X-Received: by 2002:a05:600c:a0f:b0:3cf:7704:50ce with SMTP id z15-20020a05600c0a0f00b003cf770450cemr56368726wmp.38.1673528134031; Thu, 12 Jan 2023 04:55:34 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id f12-20020a05600c154c00b003d9fba3c7a4sm8462473wmg.16.2023.01.12.04.55.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jan 2023 04:55:33 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Derrick Stolee , Victoria Dye , Jeff Hostetler , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= Subject: [PATCH v2 3/6] sparse-index API: BUG() out on NULL ensure_full_index() Date: Thu, 12 Jan 2023 13:55:25 +0100 Message-Id: X-Mailer: git-send-email 2.39.0.1205.g2ca064edc27 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Make the ensure_full_index() function stricter, and have it only accept a non-NULL "struct index_state". This function (and this behavior) was added in [1]. The only reason it needed to be this lax was due to interaction with repo_index_has_changes(). See the addition of that code in [2]. The other reason for why this was needed dates back to interaction with code added in [3]. In [4] we started calling ensure_full_index() in unpack_trees(), but the caller added in 34110cd4e39 wants to pass us a NULL "dst_index". Let's instead do the NULL check in unpack_trees() itself. 1. 4300f8442a2 (sparse-index: implement ensure_full_index(), 2021-03-30) 2. 0c18c059a15 (read-cache: ensure full index, 2021-04-01) 3. 34110cd4e39 (Make 'unpack_trees()' have a separate source and destination index, 2008-03-06) 4. 6863df35503 (unpack-trees: ensure full index, 2021-03-30) Signed-off-by: Ævar Arnfjörð Bjarmason --- sparse-index.c | 4 +++- unpack-trees.c | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/sparse-index.c b/sparse-index.c index 65a08d33c73..86e3b99870b 100644 --- a/sparse-index.c +++ b/sparse-index.c @@ -299,7 +299,7 @@ void expand_index(struct index_state *istate, struct pattern_list *pl) * If the index is already full, then keep it full. We will convert * it to a sparse index on write, if possible. */ - if (!istate || istate->sparse_index == INDEX_EXPANDED) + if (istate->sparse_index == INDEX_EXPANDED) return; /* @@ -424,6 +424,8 @@ void expand_index(struct index_state *istate, struct pattern_list *pl) void ensure_full_index(struct index_state *istate) { + if (!istate) + BUG("ensure_full_index() must get an index!"); expand_index(istate, NULL); } diff --git a/unpack-trees.c b/unpack-trees.c index ea09023b015..2381cd7cac4 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1880,7 +1880,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options prepare_repo_settings(repo); if (repo->settings.command_requires_full_index) { ensure_full_index(o->src_index); - ensure_full_index(o->dst_index); + if (o->dst_index) + ensure_full_index(o->dst_index); } if (o->reset == UNPACK_RESET_OVERWRITE_UNTRACKED && From patchwork Thu Jan 12 12:55:26 2023 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: 13097935 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 23130C54EBC for ; Thu, 12 Jan 2023 12:55:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230359AbjALMz5 (ORCPT ); Thu, 12 Jan 2023 07:55:57 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231222AbjALMzi (ORCPT ); Thu, 12 Jan 2023 07:55:38 -0500 Received: from mail-wm1-x336.google.com (mail-wm1-x336.google.com [IPv6:2a00:1450:4864:20::336]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CF2074ECA8 for ; Thu, 12 Jan 2023 04:55:36 -0800 (PST) Received: by mail-wm1-x336.google.com with SMTP id g10so13127688wmo.1 for ; Thu, 12 Jan 2023 04:55:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=31tuFpNq7eVLdV/O0mDNyKZE5qgZnSzPGxNRo80/t6Y=; b=LJstrtCzi5PTRfyn0xX2Fvppn1KinAe4l8Xo2wNsuqPHAu5mVuPzWkokrNHi9AS2Wb dMJPHEJ6fqKZHUWe2+hXFLx4VtFk7gex6HRnRrgKKPA41GqyEAr88P0A1NMiRXf+Egi0 rzUA3B3OT0G4lqljaLc6YinPj3w0rn4wrG7U9gy6z2qaBsdAaTEauGws4xpggIXvKWO8 WE+5R5YBxuf/QNtw4m/VILZveJqvL0C2XoEAiJQD3bCRBko+27HJ1cQ5LSYlV87wyGBZ JJJyL0dp5LP92dfRWq7M6WeeL0tz9c0151HgHucnym/ABwnOkZ5FQ1wmpAh1AgY/ts7F KFpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=31tuFpNq7eVLdV/O0mDNyKZE5qgZnSzPGxNRo80/t6Y=; b=3kiiUBVuWAcinYEAxvWP7zsH6uDXuhknlQ29gHjhiAcbs9t3Rs0TgMZi9TriTtWOdY UmUkV5tTA9roer7JHh7or75cS6gXW4tb2Yh9rJ+GwLWuzY12QF7cMr2dahGK5H2UxaUa e0fgwaKErF7ZWe/JROSb1IBBla157dWijihbb9ncRR3o9RYaE3j3NmWFxMMFPNc4Hjjv gVgL5WifF5W0GyJDqqMXYYKC/GYfolWlB8QiIxW9hxrfBt9L32EAe6b/yGKCgPzsWEcB rMGbJ3QTDigIwwQw8bxXZuy9zmRqHBAbfgCrxLGugnkvBaIvJqN2aPSyMXj1AJYtw0du x2qA== X-Gm-Message-State: AFqh2krez9lWz4zRvlL3bRt3JtCND10LuPU/ADQgOtNFt5Ql4d2JUVSi 3Yc0fXBOdDLkqPjdozWpGCUQxgOsT437uA== X-Google-Smtp-Source: AMrXdXt4OJW+opJr2EGjKQ9wDdygENFHz5KUMI6jSKGMeclQi7d2cFQsLv70AvFVvgcvyC5ea/GXoQ== X-Received: by 2002:a05:600c:48a8:b0:3cf:7197:e68a with SMTP id j40-20020a05600c48a800b003cf7197e68amr56290113wmp.18.1673528135046; Thu, 12 Jan 2023 04:55:35 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id f12-20020a05600c154c00b003d9fba3c7a4sm8462473wmg.16.2023.01.12.04.55.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jan 2023 04:55:34 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Derrick Stolee , Victoria Dye , Jeff Hostetler , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= Subject: [PATCH v2 4/6] read-cache.c: refactor set_new_index_sparsity() for subsequent commit Date: Thu, 12 Jan 2023 13:55:26 +0100 Message-Id: X-Mailer: git-send-email 2.39.0.1205.g2ca064edc27 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Refactor code added to set_new_index_sparsity() in [1] to eliminate indentation resulting from putting the body of his function within the "if" block. Let's instead return early if we have no istate->repo. This trivial change makes the subsequent commit's diff smaller. 1. 491df5f679f (read-cache: set sparsity when index is new, 2022-05-10) Signed-off-by: Ævar Arnfjörð Bjarmason --- read-cache.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/read-cache.c b/read-cache.c index cf87ad70970..25925c8c002 100644 --- a/read-cache.c +++ b/read-cache.c @@ -2300,12 +2300,12 @@ static void set_new_index_sparsity(struct index_state *istate) * If the index's repo exists, mark it sparse according to * repo settings. */ - if (istate->repo) { - prepare_repo_settings(istate->repo); - if (!istate->repo->settings.command_requires_full_index && - is_sparse_index_allowed(istate, 0)) - istate->sparse_index = 1; - } + if (!istate->repo) + return; + prepare_repo_settings(istate->repo); + if (!istate->repo->settings.command_requires_full_index && + is_sparse_index_allowed(istate, 0)) + istate->sparse_index = 1; } /* remember to discard_cache() before reading a different cache! */ From patchwork Thu Jan 12 12:55:27 2023 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: 13097962 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9663CC54EBC for ; Thu, 12 Jan 2023 12:56:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231715AbjALM4G (ORCPT ); Thu, 12 Jan 2023 07:56:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42270 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231295AbjALMzk (ORCPT ); Thu, 12 Jan 2023 07:55:40 -0500 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 215154FCEB for ; Thu, 12 Jan 2023 04:55:37 -0800 (PST) Received: by mail-wm1-x32f.google.com with SMTP id bi26-20020a05600c3d9a00b003d3404a89faso3883834wmb.1 for ; Thu, 12 Jan 2023 04:55:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ReENqZdE52nj1P0rpk69hqc9ZhFuKeYOzynpi04oeSo=; b=kT40PYGPbrhk3w0LtfvrIIWST+udVRFmkSaLricKAL7hSZ1ySF3C4vcQX5ziym2qzi MR7gRmWrcXdWozlqO0okTUUS43mFYMoZBV+M3/etqvxI+SeoSdDI/pubf62wfZ15ULxL +ISjOl0NxHsfUYep2qpYDj02IPiIznx7IZDcvJLzMB1LG7XmeRSGPlydly67p7NPKfAG bBNMT4e/gsK8MYo9xTqUqlSrmnMaQ5L6szicELhJP2HjgMIBQsiCPLN32HQ2+Zeq1CWA vWv1s/PAfZzbPIzf4GqrILGiNSsO8ge2pp58OeCrpBe+gbrbLhVdTwvbptB2eCTnMIyi 8HVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ReENqZdE52nj1P0rpk69hqc9ZhFuKeYOzynpi04oeSo=; b=rkJpOni6oKJObAuKTOk/i7RNOBSJrawYj/fB9NT3fA72wGqE6vr9FBciUyoDftL7Xy VxBTE11gUselVGR8rAXSDl8aBP56DoIGYQXJ2Tw1IB4gHU9zKUs0lwRfJ/UVeOoBQYrv Ma+V2Aon+fUj5Qb788RMd0lZBf2JeBW1LVURuqimc9MWT8QPFvVLWVQXAvTKEbQkoOmJ Vy5gcQZ959fRE1vYKujtFLTTXMTt1wTSNEOcIHk3aRxS/rIFvHBEtUIEJNdug7q1WdLY xvaCSjiQo2NJ4S4Wuckcd0amrbPtuwsAMZcu2IShimL+vmnFKslhTleB2Gee2jMud4b5 exlw== X-Gm-Message-State: AFqh2ko5Jsq/rWasLMRr7OGDb9jrgVZeXOgzMXqf9g1zciU8syYE6rcp 4n78ZrzWZYTHyr6AcJAdVkq60BvGzjDlrA== X-Google-Smtp-Source: AMrXdXu6htg02w/tmzBURGF+8rFvvUaAeCyj9PBNY0shag5miMGy4anY188OkaMAhbdA/h6fF6NuxA== X-Received: by 2002:a05:600c:3485:b0:3d0:761b:f86 with SMTP id a5-20020a05600c348500b003d0761b0f86mr54756786wmq.28.1673528136002; Thu, 12 Jan 2023 04:55:36 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id f12-20020a05600c154c00b003d9fba3c7a4sm8462473wmg.16.2023.01.12.04.55.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jan 2023 04:55:35 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Derrick Stolee , Victoria Dye , Jeff Hostetler , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= Subject: [PATCH v2 5/6] cache API: add a "INDEX_STATE_INIT" macro/function, add release_index() Date: Thu, 12 Jan 2023 13:55:27 +0100 Message-Id: X-Mailer: git-send-email 2.39.0.1205.g2ca064edc27 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org As we'll see in a subsequent commit we'll get advantages from always initializing the "repo" member of the "struct index_state". To make that easier let's introduce an initialization macro & function. The various ad-hoc initialization of the structure can then be changed over to it, and we can remove the various "0" assignments in discard_index() in favor of calling index_state_init() at the end. While not strictly necessary, let's also change the CALLOC_ARRAY() of various "struct index_state *" to use an ALLOC_ARRAY() followed by index_state_init() instead. We're then adding the release_index() function and converting some callers (including some of these allocations) over to it if they either won't need to use their "struct index_state" again, or are just about to call index_state_init(). Signed-off-by: Ævar Arnfjörð Bjarmason --- apply.c | 2 +- builtin/difftool.c | 2 +- builtin/sparse-checkout.c | 1 + builtin/stash.c | 16 ++++++++-------- builtin/worktree.c | 2 +- cache.h | 13 +++++++++++++ merge-recursive.c | 2 +- read-cache.c | 31 ++++++++++++++++++------------- repository.c | 6 ++++-- revision.c | 2 +- split-index.c | 3 ++- unpack-trees.c | 2 +- 12 files changed, 52 insertions(+), 30 deletions(-) diff --git a/apply.c b/apply.c index 85822280476..821fe411ec8 100644 --- a/apply.c +++ b/apply.c @@ -4105,7 +4105,7 @@ static int preimage_oid_in_gitlink_patch(struct patch *p, struct object_id *oid) static int build_fake_ancestor(struct apply_state *state, struct patch *list) { struct patch *patch; - struct index_state result = { NULL }; + struct index_state result = INDEX_STATE_INIT; struct lock_file lock = LOCK_INIT; int res; diff --git a/builtin/difftool.c b/builtin/difftool.c index 1f9d4324df5..758e7bd3b6a 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -361,7 +361,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, struct hashmap symlinks2 = HASHMAP_INIT(pair_cmp, NULL); struct hashmap_iter iter; struct pair_entry *entry; - struct index_state wtindex = { 0 }; + struct index_state wtindex = INDEX_STATE_INIT; struct checkout lstate, rstate; int err = 0; struct child_process cmd = CHILD_PROCESS_INIT; diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c index 58a22503f04..dc332c6d05f 100644 --- a/builtin/sparse-checkout.c +++ b/builtin/sparse-checkout.c @@ -217,6 +217,7 @@ static int update_working_directory(struct pattern_list *pl) o.head_idx = -1; o.src_index = r->index; o.dst_index = r->index; + index_state_init(&o.result); o.skip_sparse_checkout = 0; o.pl = pl; diff --git a/builtin/stash.c b/builtin/stash.c index bb0fd861434..a5f13fb1e9f 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1137,7 +1137,7 @@ static int save_untracked_files(struct stash_info *info, struct strbuf *msg, int ret = 0; struct strbuf untracked_msg = STRBUF_INIT; struct child_process cp_upd_index = CHILD_PROCESS_INIT; - struct index_state istate = { NULL }; + struct index_state istate = INDEX_STATE_INIT; cp_upd_index.git_cmd = 1; strvec_pushl(&cp_upd_index.args, "update-index", "-z", "--add", @@ -1165,7 +1165,7 @@ static int save_untracked_files(struct stash_info *info, struct strbuf *msg, } done: - discard_index(&istate); + release_index(&istate); strbuf_release(&untracked_msg); remove_path(stash_index_path.buf); return ret; @@ -1176,7 +1176,7 @@ static int stash_staged(struct stash_info *info, struct strbuf *out_patch, { int ret = 0; struct child_process cp_diff_tree = CHILD_PROCESS_INIT; - struct index_state istate = { NULL }; + struct index_state istate = INDEX_STATE_INIT; if (write_index_as_tree(&info->w_tree, &istate, the_repository->index_file, 0, NULL)) { @@ -1199,7 +1199,7 @@ static int stash_staged(struct stash_info *info, struct strbuf *out_patch, } done: - discard_index(&istate); + release_index(&istate); return ret; } @@ -1209,7 +1209,7 @@ static int stash_patch(struct stash_info *info, const struct pathspec *ps, int ret = 0; struct child_process cp_read_tree = CHILD_PROCESS_INIT; struct child_process cp_diff_tree = CHILD_PROCESS_INIT; - struct index_state istate = { NULL }; + struct index_state istate = INDEX_STATE_INIT; char *old_index_env = NULL, *old_repo_index_file; remove_path(stash_index_path.buf); @@ -1260,7 +1260,7 @@ static int stash_patch(struct stash_info *info, const struct pathspec *ps, } done: - discard_index(&istate); + release_index(&istate); remove_path(stash_index_path.buf); return ret; } @@ -1271,7 +1271,7 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps struct rev_info rev; struct child_process cp_upd_index = CHILD_PROCESS_INIT; struct strbuf diff_output = STRBUF_INIT; - struct index_state istate = { NULL }; + struct index_state istate = INDEX_STATE_INIT; init_revisions(&rev, NULL); copy_pathspec(&rev.prune_data, ps); @@ -1319,7 +1319,7 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps } done: - discard_index(&istate); + release_index(&istate); release_revisions(&rev); strbuf_release(&diff_output); remove_path(stash_index_path.buf); diff --git a/builtin/worktree.c b/builtin/worktree.c index 591d659faea..311d6e90750 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -923,7 +923,7 @@ static int unlock_worktree(int ac, const char **av, const char *prefix) static void validate_no_submodules(const struct worktree *wt) { - struct index_state istate = { NULL }; + struct index_state istate = INDEX_STATE_INIT; struct strbuf path = STRBUF_INIT; int i, found_submodules = 0; diff --git a/cache.h b/cache.h index 21ed9633b2a..be28fce12ac 100644 --- a/cache.h +++ b/cache.h @@ -360,6 +360,19 @@ struct index_state { struct pattern_list *sparse_checkout_patterns; }; +/** + * A "struct index_state istate" must be initialized with + * INDEX_STATE_INIT or the corresponding index_state_init(). + * + * If the variable won't be used again, use release_index() to free() + * its resources. If it needs to be used again use discard_index(), + * which does the same thing, but will use use index_state_init() at + * the end. + */ +#define INDEX_STATE_INIT { 0 } +void index_state_init(struct index_state *istate); +void release_index(struct index_state *istate); + /* Name hashing */ int test_lazy_init_name_hash(struct index_state *istate, int try_threaded); void add_name_hash(struct index_state *istate, struct cache_entry *ce); diff --git a/merge-recursive.c b/merge-recursive.c index 2fd0aa96875..0948b3ea961 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -412,7 +412,7 @@ static int unpack_trees_start(struct merge_options *opt, { int rc; struct tree_desc t[3]; - struct index_state tmp_index = { NULL }; + struct index_state tmp_index = INDEX_STATE_INIT; memset(&opt->priv->unpack_opts, 0, sizeof(opt->priv->unpack_opts)); if (opt->priv->call_depth) diff --git a/read-cache.c b/read-cache.c index 25925c8c002..d191741f600 100644 --- a/read-cache.c +++ b/read-cache.c @@ -2498,9 +2498,10 @@ int read_index_from(struct index_state *istate, const char *path, trace_performance_enter(); if (split_index->base) - discard_index(split_index->base); + release_index(split_index->base); else - CALLOC_ARRAY(split_index->base, 1); + ALLOC_ARRAY(split_index->base, 1); + index_state_init(split_index->base); base_oid_hex = oid_to_hex(&split_index->base_oid); base_path = xstrfmt("%s/sharedindex.%s", gitdir, base_oid_hex); @@ -2539,7 +2540,13 @@ int is_index_unborn(struct index_state *istate) return (!istate->cache_nr && !istate->timestamp.sec); } -void discard_index(struct index_state *istate) +void index_state_init(struct index_state *istate) +{ + struct index_state blank = INDEX_STATE_INIT; + memcpy(istate, &blank, sizeof(*istate)); +} + +void release_index(struct index_state *istate) { /* * Cache entries in istate->cache[] should have been allocated @@ -2551,20 +2558,12 @@ void discard_index(struct index_state *istate) validate_cache_entries(istate); resolve_undo_clear_index(istate); - istate->cache_nr = 0; - istate->cache_changed = 0; - istate->timestamp.sec = 0; - istate->timestamp.nsec = 0; free_name_hash(istate); cache_tree_free(&(istate->cache_tree)); - istate->initialized = 0; - istate->fsmonitor_has_run_once = 0; - FREE_AND_NULL(istate->fsmonitor_last_update); - FREE_AND_NULL(istate->cache); - istate->cache_alloc = 0; + free(istate->fsmonitor_last_update); + free(istate->cache); discard_split_index(istate); free_untracked_cache(istate->untracked); - istate->untracked = NULL; if (istate->sparse_checkout_patterns) { clear_pattern_list(istate->sparse_checkout_patterns); @@ -2577,6 +2576,12 @@ void discard_index(struct index_state *istate) } } +void discard_index(struct index_state *istate) +{ + release_index(istate); + index_state_init(istate); +} + /* * Validate the cache entries of this index. * All cache entries associated with this index diff --git a/repository.c b/repository.c index 3427085fd6d..a5805fa33b1 100644 --- a/repository.c +++ b/repository.c @@ -302,8 +302,10 @@ int repo_read_index(struct repository *repo) { int res; - if (!repo->index) - CALLOC_ARRAY(repo->index, 1); + if (!repo->index) { + ALLOC_ARRAY(repo->index, 1); + index_state_init(repo->index); + } /* Complete the double-reference */ if (!repo->index->repo) diff --git a/revision.c b/revision.c index 100e5ad5110..fb090886f5b 100644 --- a/revision.c +++ b/revision.c @@ -1813,7 +1813,7 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags) worktrees = get_worktrees(); for (p = worktrees; *p; p++) { struct worktree *wt = *p; - struct index_state istate = { NULL }; + struct index_state istate = INDEX_STATE_INIT; if (wt->is_current) continue; /* current index already taken care of */ diff --git a/split-index.c b/split-index.c index 9d0ccc30d00..a5b56c0c37f 100644 --- a/split-index.c +++ b/split-index.c @@ -90,7 +90,8 @@ void move_cache_to_base_index(struct index_state *istate) mem_pool_combine(istate->ce_mem_pool, istate->split_index->base->ce_mem_pool); } - CALLOC_ARRAY(si->base, 1); + ALLOC_ARRAY(si->base, 1); + index_state_init(si->base); si->base->version = istate->version; /* zero timestamp disables racy test in ce_write_index() */ si->base->timestamp = istate->timestamp; diff --git a/unpack-trees.c b/unpack-trees.c index 2381cd7cac4..d1d1b0f319e 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1905,7 +1905,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options populate_from_existing_patterns(o, &pl); } - memset(&o->result, 0, sizeof(o->result)); + index_state_init(&o->result); o->result.initialized = 1; o->result.timestamp.sec = o->src_index->timestamp.sec; o->result.timestamp.nsec = o->src_index->timestamp.nsec; From patchwork Thu Jan 12 12:55:28 2023 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: 13097963 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0E324C54EBC for ; Thu, 12 Jan 2023 12:56:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231559AbjALM4L (ORCPT ); Thu, 12 Jan 2023 07:56:11 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42196 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230190AbjALMzr (ORCPT ); Thu, 12 Jan 2023 07:55:47 -0500 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2B3EC4FD40 for ; Thu, 12 Jan 2023 04:55:39 -0800 (PST) Received: by mail-wm1-x32f.google.com with SMTP id c4-20020a1c3504000000b003d9e2f72093so11678648wma.1 for ; Thu, 12 Jan 2023 04:55:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=d47gTZJHH6X1rmjuM6TT30zXGOTWyfivhF+HDDdPg5A=; b=SAv5E1v3qiVuHGNonKvCImOsl0hgM/iwb0WUOQLl7ItQdohcy/soWR/0YzoDKoM+hF zasUdikIiRYwspLGRxTncK1tfejKMesfcLw9hYSxYkbdPwz+bycHeC23pllqgIJ2CgTp qEnQ8WprUu3erhA74VZsM+01EF0Syf72fM69NvZ2iH+zVtKKfOyrBq+0OJJTkZ/v/EhE WjkIXke9A3J975TScWYBc6yAUZ7fuOwNrUdz6ExQzhhFEOBOLVviDkUHWiN0yZPIj16o 9vmOWdIDVT79Ibe2TaZCrSYchBhk1xG8qqvVENHuDU8VG4ddXEBxx0aOHB/Az6smnixP lBYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=d47gTZJHH6X1rmjuM6TT30zXGOTWyfivhF+HDDdPg5A=; b=X8LP54XpcO5QRrqkjSNADbBcikMTiOsVFPq9fl2y5CdnxyjLGnTmu8SyVC36NrCrgL BjRLaWHrtwAThY6SWw34TEHFEGs3fJNWhDPhxu47kzpSseHf7PEqgND/7+CEODei88jF 8EvaTC8lf658+r+5UlwUqxE112W/m3eQIsMWWKh/lVOqFBQnUL6orBGNhr2ssg9WtA4g OUQSYGrCZ58nDQXuVa8FwDRNXmh5ZIyVhXPsESveOg7SRsZoRtOVh3Lgnnd0DNg8RtTM SnLgMSqnyz5FT+VXsnHEj4gxDzJbtq6QusYCkLJRlf7C1JFbO774GSO4wcpOEc/bB01y IoJQ== X-Gm-Message-State: AFqh2ko+6y2EKQO3vILWhTzpnDH5M/iDP7AzIztm/Hb9IT6jo+Rds7eQ lAFRlGSO5fsxghsb/72Djp/Rc5JMfWKRlQ== X-Google-Smtp-Source: AMrXdXug+/VA3R2+fxf8WI6gDxquMaDOJc2F+HRwhhvlJyXpeMBf0NvUcgUlw92jLIMduI+wev8j8Q== X-Received: by 2002:a05:600c:4e53:b0:3c6:e60f:3f4a with SMTP id e19-20020a05600c4e5300b003c6e60f3f4amr53926894wmq.1.1673528137050; Thu, 12 Jan 2023 04:55:37 -0800 (PST) Received: from vm.nix.is (vm.nix.is. [2a01:4f8:120:2468::2]) by smtp.gmail.com with ESMTPSA id f12-20020a05600c154c00b003d9fba3c7a4sm8462473wmg.16.2023.01.12.04.55.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 12 Jan 2023 04:55:36 -0800 (PST) From: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= To: git@vger.kernel.org Cc: Junio C Hamano , Derrick Stolee , Victoria Dye , Jeff Hostetler , =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBC?= =?utf-8?b?amFybWFzb24=?= Subject: [PATCH v2 6/6] treewide: always have a valid "index_state.repo" member Date: Thu, 12 Jan 2023 13:55:28 +0100 Message-Id: X-Mailer: git-send-email 2.39.0.1205.g2ca064edc27 In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org When the "repo" member was added to "the_index" in [1] the repo_read_index() was made to populate it, but the unpopulated "the_index" variable didn't get the same treatment. Let's do that in initialize_the_repository() when we set it up, and likewise for all of the current callers initialized an empty "struct index_state". This simplifies code that needs to deal with "the_index" or a custom "struct index_state", we no longer need to second-guess this part of the "index_state" deep in the stack. A recent example of such second-guessing is the "istate->repo ? istate->repo : the_repository" code in [2]. We can now simply use "istate->repo". We're doing this by making use of the INDEX_STATE_INIT() macro (and corresponding function) added in the preceding commit, which now have mandatory "repo" arguments. As seen here there are cases where we set it to NULL, but only if we're about to fill in the correct non-NULL "repo" right afterwards. For "fsmonitor-settings.c" we can remove the initialization of a NULL "r" argument to "the_repository". This was added back in [3], and was needed at the time for callers that would pass us the "r" from an "istate->repo". Before this change such a change to "fsmonitor-settings.c" would segfault all over the test suite (e.g. in t0002-gitfile.sh). This change has wider eventual implications for "fsmonitor-settings.c". The reason the other lazy loading behavior in it is required (starting with "if (!r->settings.fsmonitor) ..." is because of the previously passed "r" being "NULL". I have other local changes on top of this which move its configuration reading to "prepare_repo_settings()" in "repo-settings.c", as we could now start to rely on it being called for our "r". But let's leave all of that for now, and narrowly remove this particular part of the lazy-loading. 1. 1fd9ae517c4 (repository: add repo reference to index_state, 2021-01-23) 2. ee1f0c242ef (read-cache: add index.skipHash config option, 2023-01-06) 3. 1e0ea5c4316 (fsmonitor: config settings are repository-specific, 2022-03-25) Signed-off-by: Ævar Arnfjörð Bjarmason --- apply.c | 2 +- builtin/difftool.c | 2 +- builtin/sparse-checkout.c | 2 +- builtin/stash.c | 8 ++++---- builtin/worktree.c | 2 +- cache.h | 9 ++++++--- fsmonitor-settings.c | 14 -------------- fsmonitor.c | 2 +- merge-recursive.c | 2 +- read-cache.c | 17 +++++------------ repository.c | 4 +++- revision.c | 2 +- sparse-index.c | 9 --------- split-index.c | 2 +- unpack-trees.c | 2 +- 15 files changed, 27 insertions(+), 52 deletions(-) diff --git a/apply.c b/apply.c index 821fe411ec8..5eec433583e 100644 --- a/apply.c +++ b/apply.c @@ -4105,7 +4105,7 @@ static int preimage_oid_in_gitlink_patch(struct patch *p, struct object_id *oid) static int build_fake_ancestor(struct apply_state *state, struct patch *list) { struct patch *patch; - struct index_state result = INDEX_STATE_INIT; + struct index_state result = INDEX_STATE_INIT(state->repo); struct lock_file lock = LOCK_INIT; int res; diff --git a/builtin/difftool.c b/builtin/difftool.c index 758e7bd3b6a..dbbfb19f192 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -361,7 +361,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, struct hashmap symlinks2 = HASHMAP_INIT(pair_cmp, NULL); struct hashmap_iter iter; struct pair_entry *entry; - struct index_state wtindex = INDEX_STATE_INIT; + struct index_state wtindex = INDEX_STATE_INIT(the_repository); struct checkout lstate, rstate; int err = 0; struct child_process cmd = CHILD_PROCESS_INIT; diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c index dc332c6d05f..c3738154918 100644 --- a/builtin/sparse-checkout.c +++ b/builtin/sparse-checkout.c @@ -217,7 +217,7 @@ static int update_working_directory(struct pattern_list *pl) o.head_idx = -1; o.src_index = r->index; o.dst_index = r->index; - index_state_init(&o.result); + index_state_init(&o.result, r); o.skip_sparse_checkout = 0; o.pl = pl; diff --git a/builtin/stash.c b/builtin/stash.c index a5f13fb1e9f..839569a9803 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1137,7 +1137,7 @@ static int save_untracked_files(struct stash_info *info, struct strbuf *msg, int ret = 0; struct strbuf untracked_msg = STRBUF_INIT; struct child_process cp_upd_index = CHILD_PROCESS_INIT; - struct index_state istate = INDEX_STATE_INIT; + struct index_state istate = INDEX_STATE_INIT(the_repository); cp_upd_index.git_cmd = 1; strvec_pushl(&cp_upd_index.args, "update-index", "-z", "--add", @@ -1176,7 +1176,7 @@ static int stash_staged(struct stash_info *info, struct strbuf *out_patch, { int ret = 0; struct child_process cp_diff_tree = CHILD_PROCESS_INIT; - struct index_state istate = INDEX_STATE_INIT; + struct index_state istate = INDEX_STATE_INIT(the_repository); if (write_index_as_tree(&info->w_tree, &istate, the_repository->index_file, 0, NULL)) { @@ -1209,7 +1209,7 @@ static int stash_patch(struct stash_info *info, const struct pathspec *ps, int ret = 0; struct child_process cp_read_tree = CHILD_PROCESS_INIT; struct child_process cp_diff_tree = CHILD_PROCESS_INIT; - struct index_state istate = INDEX_STATE_INIT; + struct index_state istate = INDEX_STATE_INIT(the_repository); char *old_index_env = NULL, *old_repo_index_file; remove_path(stash_index_path.buf); @@ -1271,7 +1271,7 @@ static int stash_working_tree(struct stash_info *info, const struct pathspec *ps struct rev_info rev; struct child_process cp_upd_index = CHILD_PROCESS_INIT; struct strbuf diff_output = STRBUF_INIT; - struct index_state istate = INDEX_STATE_INIT; + struct index_state istate = INDEX_STATE_INIT(the_repository); init_revisions(&rev, NULL); copy_pathspec(&rev.prune_data, ps); diff --git a/builtin/worktree.c b/builtin/worktree.c index 311d6e90750..f51c40f1e1e 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -923,7 +923,7 @@ static int unlock_worktree(int ac, const char **av, const char *prefix) static void validate_no_submodules(const struct worktree *wt) { - struct index_state istate = INDEX_STATE_INIT; + struct index_state istate = INDEX_STATE_INIT(the_repository); struct strbuf path = STRBUF_INIT; int i, found_submodules = 0; diff --git a/cache.h b/cache.h index be28fce12ac..4bf14e0bd94 100644 --- a/cache.h +++ b/cache.h @@ -367,10 +367,13 @@ struct index_state { * If the variable won't be used again, use release_index() to free() * its resources. If it needs to be used again use discard_index(), * which does the same thing, but will use use index_state_init() at - * the end. + * the end. The discard_index() will use its own "istate->repo" as the + * "r" argument to index_state_init() in that case. */ -#define INDEX_STATE_INIT { 0 } -void index_state_init(struct index_state *istate); +#define INDEX_STATE_INIT(r) { \ + .repo = (r), \ +} +void index_state_init(struct index_state *istate, struct repository *r); void release_index(struct index_state *istate); /* Name hashing */ diff --git a/fsmonitor-settings.c b/fsmonitor-settings.c index ee63a97dc51..899bfe9c813 100644 --- a/fsmonitor-settings.c +++ b/fsmonitor-settings.c @@ -143,8 +143,6 @@ static void lookup_fsmonitor_settings(struct repository *r) enum fsmonitor_mode fsm_settings__get_mode(struct repository *r) { - if (!r) - r = the_repository; if (!r->settings.fsmonitor) lookup_fsmonitor_settings(r); @@ -153,8 +151,6 @@ enum fsmonitor_mode fsm_settings__get_mode(struct repository *r) const char *fsm_settings__get_hook_path(struct repository *r) { - if (!r) - r = the_repository; if (!r->settings.fsmonitor) lookup_fsmonitor_settings(r); @@ -174,8 +170,6 @@ void fsm_settings__set_ipc(struct repository *r) * Caller requested IPC explicitly, so avoid (possibly * recursive) config lookup. */ - if (!r) - r = the_repository; if (!r->settings.fsmonitor) r->settings.fsmonitor = alloc_settings(); @@ -197,8 +191,6 @@ void fsm_settings__set_hook(struct repository *r, const char *path) * Caller requested hook explicitly, so avoid (possibly * recursive) config lookup. */ - if (!r) - r = the_repository; if (!r->settings.fsmonitor) r->settings.fsmonitor = alloc_settings(); @@ -210,8 +202,6 @@ void fsm_settings__set_hook(struct repository *r, const char *path) void fsm_settings__set_disabled(struct repository *r) { - if (!r) - r = the_repository; if (!r->settings.fsmonitor) r->settings.fsmonitor = alloc_settings(); @@ -223,8 +213,6 @@ void fsm_settings__set_disabled(struct repository *r) void fsm_settings__set_incompatible(struct repository *r, enum fsmonitor_reason reason) { - if (!r) - r = the_repository; if (!r->settings.fsmonitor) r->settings.fsmonitor = alloc_settings(); @@ -235,8 +223,6 @@ void fsm_settings__set_incompatible(struct repository *r, enum fsmonitor_reason fsm_settings__get_reason(struct repository *r) { - if (!r) - r = the_repository; if (!r->settings.fsmonitor) lookup_fsmonitor_settings(r); diff --git a/fsmonitor.c b/fsmonitor.c index 08af00c7387..a5b9e75437b 100644 --- a/fsmonitor.c +++ b/fsmonitor.c @@ -304,7 +304,7 @@ void refresh_fsmonitor(struct index_state *istate) char *buf; unsigned int i; int is_trivial = 0; - struct repository *r = istate->repo ? istate->repo : the_repository; + struct repository *r = istate->repo; enum fsmonitor_mode fsm_mode = fsm_settings__get_mode(r); enum fsmonitor_reason reason = fsm_settings__get_reason(r); diff --git a/merge-recursive.c b/merge-recursive.c index 0948b3ea961..ae469f8cc81 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -412,7 +412,7 @@ static int unpack_trees_start(struct merge_options *opt, { int rc; struct tree_desc t[3]; - struct index_state tmp_index = INDEX_STATE_INIT; + struct index_state tmp_index = INDEX_STATE_INIT(opt->repo); memset(&opt->priv->unpack_opts, 0, sizeof(opt->priv->unpack_opts)); if (opt->priv->call_depth) diff --git a/read-cache.c b/read-cache.c index d191741f600..7bd12afb38c 100644 --- a/read-cache.c +++ b/read-cache.c @@ -2300,8 +2300,6 @@ static void set_new_index_sparsity(struct index_state *istate) * If the index's repo exists, mark it sparse according to * repo settings. */ - if (!istate->repo) - return; prepare_repo_settings(istate->repo); if (!istate->repo->settings.command_requires_full_index && is_sparse_index_allowed(istate, 0)) @@ -2330,8 +2328,6 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist) fd = open(path, O_RDONLY); if (fd < 0) { if (!must_exist && errno == ENOENT) { - if (!istate->repo) - istate->repo = the_repository; set_new_index_sparsity(istate); return 0; } @@ -2433,9 +2429,6 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist) trace2_data_intmax("index", the_repository, "read/cache_nr", istate->cache_nr); - if (!istate->repo) - istate->repo = the_repository; - /* * If the command explicitly requires a full index, force it * to be full. Otherwise, correct the sparsity based on repository @@ -2501,7 +2494,7 @@ int read_index_from(struct index_state *istate, const char *path, release_index(split_index->base); else ALLOC_ARRAY(split_index->base, 1); - index_state_init(split_index->base); + index_state_init(split_index->base, istate->repo); base_oid_hex = oid_to_hex(&split_index->base_oid); base_path = xstrfmt("%s/sharedindex.%s", gitdir, base_oid_hex); @@ -2540,9 +2533,9 @@ int is_index_unborn(struct index_state *istate) return (!istate->cache_nr && !istate->timestamp.sec); } -void index_state_init(struct index_state *istate) +void index_state_init(struct index_state *istate, struct repository *r) { - struct index_state blank = INDEX_STATE_INIT; + struct index_state blank = INDEX_STATE_INIT(r); memcpy(istate, &blank, sizeof(*istate)); } @@ -2579,7 +2572,7 @@ void release_index(struct index_state *istate) void discard_index(struct index_state *istate) { release_index(istate); - index_state_init(istate); + index_state_init(istate, istate->repo); } /* @@ -2933,7 +2926,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile, int ieot_entries = 1; struct index_entry_offset_table *ieot = NULL; int nr, nr_threads; - struct repository *r = istate->repo ? istate->repo : the_repository; + struct repository *r = istate->repo; f = hashfd(tempfile->fd, tempfile->filename.buf); diff --git a/repository.c b/repository.c index a5805fa33b1..0e15220e6ac 100644 --- a/repository.c +++ b/repository.c @@ -28,6 +28,8 @@ void initialize_the_repository(void) the_repo.remote_state = remote_state_new(); the_repo.parsed_objects = parsed_object_pool_new(); + index_state_init(&the_index, the_repository); + repo_set_hash_algo(&the_repo, GIT_HASH_SHA1); } @@ -304,7 +306,7 @@ int repo_read_index(struct repository *repo) if (!repo->index) { ALLOC_ARRAY(repo->index, 1); - index_state_init(repo->index); + index_state_init(repo->index, NULL /* set below */); } /* Complete the double-reference */ diff --git a/revision.c b/revision.c index fb090886f5b..21f5f572c22 100644 --- a/revision.c +++ b/revision.c @@ -1813,7 +1813,7 @@ void add_index_objects_to_pending(struct rev_info *revs, unsigned int flags) worktrees = get_worktrees(); for (p = worktrees; *p; p++) { struct worktree *wt = *p; - struct index_state istate = INDEX_STATE_INIT; + struct index_state istate = INDEX_STATE_INIT(revs->repo); if (wt->is_current) continue; /* current index already taken care of */ diff --git a/sparse-index.c b/sparse-index.c index 86e3b99870b..147a13386a4 100644 --- a/sparse-index.c +++ b/sparse-index.c @@ -128,9 +128,6 @@ int is_sparse_index_allowed(struct index_state *istate, int flags) if (!core_apply_sparse_checkout || !core_sparse_checkout_cone) return 0; - if (!istate->repo) - istate->repo = the_repository; - if (!(flags & SPARSE_INDEX_MEMORY_ONLY)) { int test_env; @@ -327,9 +324,6 @@ void expand_index(struct index_state *istate, struct pattern_list *pl) pl = NULL; } - if (!istate->repo) - istate->repo = the_repository; - /* * A NULL pattern set indicates we are expanding a full index, so * we use a special region name that indicates the full expansion. @@ -552,9 +546,6 @@ void expand_to_path(struct index_state *istate, if (!istate->sparse_index) return; - if (!istate->repo) - istate->repo = the_repository; - in_expand_to_path = 1; /* diff --git a/split-index.c b/split-index.c index a5b56c0c37f..5d0f04763ea 100644 --- a/split-index.c +++ b/split-index.c @@ -91,7 +91,7 @@ void move_cache_to_base_index(struct index_state *istate) } ALLOC_ARRAY(si->base, 1); - index_state_init(si->base); + index_state_init(si->base, istate->repo); si->base->version = istate->version; /* zero timestamp disables racy test in ce_write_index() */ si->base->timestamp = istate->timestamp; diff --git a/unpack-trees.c b/unpack-trees.c index d1d1b0f319e..3d05e45a279 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1905,7 +1905,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options populate_from_existing_patterns(o, &pl); } - index_state_init(&o->result); + index_state_init(&o->result, o->src_index->repo); o->result.initialized = 1; o->result.timestamp.sec = o->src_index->timestamp.sec; o->result.timestamp.nsec = o->src_index->timestamp.nsec;