From patchwork Sat Sep 11 20:36:40 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 12486621 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=-14.2 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,URIBL_BLOCKED,USER_AGENT_SANE_1 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 B1224C433EF for ; Sat, 11 Sep 2021 20:36:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 90C766113E for ; Sat, 11 Sep 2021 20:36:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233742AbhIKUh7 (ORCPT ); Sat, 11 Sep 2021 16:37:59 -0400 Received: from mout.web.de ([212.227.15.14]:47691 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229487AbhIKUh7 (ORCPT ); Sat, 11 Sep 2021 16:37:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1631392601; bh=TBENYHRuidEXPW4q60M8UqfnKK4nNXC+h6eQuRplbSE=; h=X-UI-Sender-Class:Subject:From:To:Cc:References:Date:In-Reply-To; b=DKRJBYsgtYSMWHEF95deEXcf0rY2Vi5GbpbPy/Jm2d6JTfRp6pW2WakrAUEiIU2cr kw0WI0gy5OQKLW3HujQayqIzwq4IIbntMkI81SkYCMZl/YpjqAfRcOkDpDRuwpCDyr luTlzK6NPTmGyqAu1tZw4jCU/94686EgaifinMgg= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from Mini-von-Rene.fritz.box ([79.203.20.171]) by smtp.web.de (mrweb002 [213.165.67.108]) with ESMTPSA (Nemesis) id 0MP047-1mJuoB3PNv-006N13; Sat, 11 Sep 2021 22:36:40 +0200 Subject: [PATCH 1/5] oidset: make oidset_size() an inline function From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: Junio C Hamano , Jeff King References: <4a702bfe-afd0-669a-c893-0262289c24b8@web.de> Message-ID: <3ec3b543-d5a7-5dce-ea5c-243ae8c78fbf@web.de> Date: Sat, 11 Sep 2021 22:36:40 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Provags-ID: V03:K1:sxA8awsee+hztngUVfqNzQfrR3mb8N0fb8ZRTC/3DEVhfmYjktc +6yIXk7yncaZF5aEpjLjTAvAzMUS6CZjaVM7JQ0BusYU6x3oiWFCFBCY3Omb100ilo3c69q OhJFwmQjDxLayWXfRd27uMyO+PHvStC+9EbpkKhUCDsACzRuyByTBZLc/TWnbdkeMflHtB/ HL9YoKD0cMLJ/eCBa/U3Q== X-UI-Out-Filterresults: notjunk:1;V03:K0:uQ48txMlZqg=:lPsNvk3767mAs/o+OuGRDL GpQjuv8oUJqOxP4j+3uS3nVw4xBfgRGY4AvoHq5SiEUTj/+KP1RB/bkEzpQFsBPd4+Q68w6VW GxFIRSYF/ww6+APoWtTi09u/FbHDpa4wQxCsPcF6aGw8ErIW487iF8bWHrtzqCx9biHsbUimK PnetkNHmL/gFzd6+gyx2D29KEO+xOTaRAiWtpWQ5GqCNUFmj6q7NU92hPZ+bYbxne5YraWRKe NukmX1gNuf0pEjdyExvUEQKiVDdmItyIPHlg6R1Ds7oW2/Oe5Hw7zkNUEJZWzh6oCl4BJVxkl ppYdwBD9oN3hLpx8PIElkJiUSHuHDtbpx9RKAbe5JVdqCC8vrY2xSg/n1d26BKw1k9gjRV9L7 9tQweNGlpEGo0MlvoGqCeHcGCoY/95Tcg7YGSS554+LwmmbYnyq2tf/87Yem3jAXOW0aG1pKL OV9BSq/L0P1OrAqwcYWBRDldGl7hjkSpvDvF0auadlY+DEnBhLtfQv4iseJcwnvLj7E29x+hz k5EZdvtb+mrRT0c/CCnSTifsSptE2NxilvxK3v/1KlJj5lHK2NfOI+Gz/AbvnafXg2EucKaUV lG79LTlFg9w9b7q8V28Wh6xPR74mgb1QRyn4hyy3uJSl3PAwkKUups/uVTdaTpWlyo8FVpGQK rONHAMVLsmNYObFibyPEXLVaZDK8fafVeu9n5j0UygU5sZXGbYUkLMU84Ei8iyATz3VASyqNj RdRXGWGMLQSMJ1OorMasyZRPPcrAUIzhOqfJ8YUWsLTKEQ+6qDFBNd5IbQYBbKdLcIPGzleC/ Ps2b68wQJzYttobOSLklehElrOwA0QW7tlY1ArCnJ8AKiYpgVe28RY6cLcUUbaB/fnSYnfUvz wQLQX9FRhigwjjlMK4JzZ06x24s4JY9ebA1qjihIwIy2AdUAHKnOOkM0glC2gFO2OGiCcWAh9 D1MkeRKQ7gyyKLk3tWPGMOU/Xl7Uf/ytMoEiPxLwx4k4hEbQH8tYHuO7i65nfopT+IKa28/Yn EEUAau0mHHuK/j3JNvfY0FozH645awMZRcTwrAu8iUvScYU5kIffc4zR1qqXmg9X3TL6F3D5Q aVKJSKxGAts890= Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org oidset_size() just reads a single word from memory and returns it. Avoid the function call overhead for this trivial operation by turning it into an inline function. While we're at it, declare its parameter const to allow it to be used on read-only oidsets. Suggested-by: Jeff King Signed-off-by: René Scharfe --- oidset.c | 5 ----- oidset.h | 5 ++++- 2 files changed, 4 insertions(+), 6 deletions(-) -- 2.33.0 diff --git a/oidset.c b/oidset.c index 5aac633c1f..b36a2bae86 100644 --- a/oidset.c +++ b/oidset.c @@ -36,11 +36,6 @@ void oidset_clear(struct oidset *set) oidset_init(set, 0); } -int oidset_size(struct oidset *set) -{ - return kh_size(&set->set); -} - void oidset_parse_file(struct oidset *set, const char *path) { oidset_parse_file_carefully(set, path, NULL, NULL); diff --git a/oidset.h b/oidset.h index 01f6560283..ba4a5a2cd3 100644 --- a/oidset.h +++ b/oidset.h @@ -57,7 +57,10 @@ int oidset_remove(struct oidset *set, const struct object_id *oid); /** * Returns the number of oids in the set. */ -int oidset_size(struct oidset *set); +static inline int oidset_size(const struct oidset *set) +{ + return kh_size(&set->set); +} /** * Remove all entries from the oidset, freeing any resources associated with From patchwork Sat Sep 11 20:39:31 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 12486623 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=-14.3 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_SANE_1 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 62DCDC433EF for ; Sat, 11 Sep 2021 20:39:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2D1A0611AD for ; Sat, 11 Sep 2021 20:39:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234040AbhIKUk6 (ORCPT ); Sat, 11 Sep 2021 16:40:58 -0400 Received: from mout.web.de ([212.227.15.4]:41443 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229487AbhIKUk4 (ORCPT ); Sat, 11 Sep 2021 16:40:56 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1631392772; bh=lHTXetwVNz9SumpRqgv0/wismiJmJUtXu2jqspkK58M=; h=X-UI-Sender-Class:Subject:From:To:Cc:References:Date:In-Reply-To; b=hFt1Q5iwRhZbt30Ixj5gShNo7PzDk1E+O0KmXAYVp4A5rAM+i2YJUf/nRMNqgGAUm 2ds+zoDqqyUyvYLyscVGGUfFHxyLZDlL8HehW9O3GR085d968iowvEh0DoJGAGxFeE aNoaWi5vnHF+KdipnZcQ3FDkGYhm/NPVo62rdhYc= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from Mini-von-Rene.fritz.box ([79.203.20.171]) by smtp.web.de (mrweb004 [213.165.67.108]) with ESMTPSA (Nemesis) id 0LzVMw-1n3WyM197a-014ncU; Sat, 11 Sep 2021 22:39:32 +0200 Subject: [PATCH 2/5] midx: inline nth_midxed_pack_entry() From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: Junio C Hamano , Jeff King References: <4a702bfe-afd0-669a-c893-0262289c24b8@web.de> Message-ID: <06f0f546-31c6-9cf5-5e11-999cb354c91a@web.de> Date: Sat, 11 Sep 2021 22:39:31 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Provags-ID: V03:K1:9jV0S9P0yWWhk2PaE7ctPVIhQ3Fd8Fovb82Z45MBh3XDhmy7j+4 JgAN4Qxkx7d61qjZHvmAd/LtL+MlQE7qYg/G5JAu13Z2SrF3S//tsyI/rYg/UCAroMWfYxf J5GljE1LeA7jL5tjbJCy6bQI/CjSHOGGcytQoDiu2CpEqIsDWGQa47VR9/PUaAKzSA1Guwe QCb7Jc8a/VLdGO+Y9Ko3g== X-UI-Out-Filterresults: notjunk:1;V03:K0:/iEfHntam08=:2fawZgIw4uB5rbD/eH8+6e anhpYSr3nQVmyYfpuYssb9E/MRZZmy1nARBDmbEME/r0BrPAJqw8aOIKPn6+6RZptBsofGuaA tdxLtdSby2YDLVSt2FexZ1rPVmVFAWvIDnEV4iHkun122Xj2KVnsAs1x9NTRO731hM6c8bXSI wyAiNL+N0Wp1DAOpNDjWBjWUqSds/9FLMwIYYQghTEHHuJsXZ0kInOQFWAT73bIzn9llUvW+l QWxDBLE02svpoUGuspiTqVJ8KM1Nf8A4GPrRLh8EiSmZ8/ovVi2746GL7NjFTF9I68XDEo7ek WPCbBxkcQYn+I0NKHWP8yNQF9tl/+ERbT8LTNncqJ7E9OAS78/B2tVGAJLDR0q1xpZsP0faMT X3Gy3dpEV094p+mIygph8VIqEUjJQjAZy0r8IAP8zYV9tTMFRJFi/GkhVf9pJbrvPK8bVkZ7D y8EuamoWo7UWAOPwVtBCzFNx/ODJsWVYM8MCZqORfntzTpK/njFtFfoTv+y7b/rtQbnGY8Io5 hKhyl3EorPcopjD0vKRIgIQw+qDYkOZh1SqXjjS6TjlhHluazv2YnmO9wYbxVU4cWOzWEmiRX U2SYa+BS3VU2Z/ypNAAGrZL8idOxcUyIzdkwjCRWIKFFLaLE+oJIRYDY9ND+0H+2Uk7fW1Oe+ 0PtCM0FlHudJ2EEWjYnANuRNUm+/7yojZSY9WfCZUYs1SpIdGWLzEewEJa2tljgTVLSHE/Gnl PydDB+3NzgvPWIEcOKcj97ejl6FqFxMmsZxF1LewhBmIxz1C5uR7Asqw6hUZYWmX0W3ueeSPz GL3efJsBd0fKfLxwuLSPxUaybaOqSHWPpN3259NiolbbeT29gb8KWOc3cmshSUt65EdGgBbSt HTK188xuG8qyN0jfnLuWt+VaynMCr7UItJTjlhflHFjeOIL7nBD1yWo2215QKWLgKlww4oqDU 5Aci2yK80eAhUVo8bi4A6jBVTPTewmpUNItI5EpNf3XtaO/jATy9xjM77gjRWzlpUdY9ruLB9 3768w+wFwIZ3jwjY0VpYS3VZ79oRMkI6v+AFuRaqAhiMq7n7QY99ghma2tOImJXwbMYfDGvH3 sG9nlQsdRsQRoU= Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org fill_midx_entry() finds the position of an object ID and passes it to nth_midxed_pack_entry(), which uses the position to look up the object ID for its own purposes. Inline the latter into the former to avoid that lookup. Signed-off-by: René Scharfe --- midx.c | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) -- 2.33.0 diff --git a/midx.c b/midx.c index 321c6fdd2f..8cb063023c 100644 --- a/midx.c +++ b/midx.c @@ -276,14 +276,18 @@ uint32_t nth_midxed_pack_int_id(struct multi_pack_index *m, uint32_t pos) (off_t)pos * MIDX_CHUNK_OFFSET_WIDTH); } -static int nth_midxed_pack_entry(struct repository *r, - struct multi_pack_index *m, - struct pack_entry *e, - uint32_t pos) +int fill_midx_entry(struct repository * r, + const struct object_id *oid, + struct pack_entry *e, + struct multi_pack_index *m) { + uint32_t pos; uint32_t pack_int_id; struct packed_git *p; + if (!bsearch_midx(oid, m, &pos)) + return 0; + if (pos >= m->num_objects) return 0; @@ -305,10 +309,8 @@ static int nth_midxed_pack_entry(struct repository *r, if (p->num_bad_objects) { uint32_t i; - struct object_id oid; - nth_midxed_object_oid(&oid, m, pos); for (i = 0; i < p->num_bad_objects; i++) - if (hasheq(oid.hash, + if (hasheq(oid->hash, p->bad_object_sha1 + the_hash_algo->rawsz * i)) return 0; } @@ -319,19 +321,6 @@ static int nth_midxed_pack_entry(struct repository *r, return 1; } -int fill_midx_entry(struct repository * r, - const struct object_id *oid, - struct pack_entry *e, - struct multi_pack_index *m) -{ - uint32_t pos; - - if (!bsearch_midx(oid, m, &pos)) - return 0; - - return nth_midxed_pack_entry(r, m, e, pos); -} - /* Match "foo.idx" against either "foo.pack" _or_ "foo.idx". */ static int cmp_idx_or_pack_name(const char *idx_or_pack_name, const char *idx_name) From patchwork Sat Sep 11 20:40:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 12486625 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=-14.3 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_SANE_1 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 16DE5C433EF for ; Sat, 11 Sep 2021 20:40:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id D868561153 for ; Sat, 11 Sep 2021 20:40:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234069AbhIKUlx (ORCPT ); Sat, 11 Sep 2021 16:41:53 -0400 Received: from mout.web.de ([212.227.15.14]:55559 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229487AbhIKUlw (ORCPT ); Sat, 11 Sep 2021 16:41:52 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1631392833; bh=1ybyE/TefLvk4oGIRd+lwdl6BRhAhvdxk/TeEKwPKCI=; h=X-UI-Sender-Class:Subject:From:To:Cc:References:Date:In-Reply-To; b=hybfs5o3TtqhDFyBHwEBFSUOHHR/a4aSIGAUdVOjaG6tz9XJDe0ze244MqWYnSZP7 mUj7xK+sSTZkAf6xWhI4u1PZu8gNFmTst5RK5wWHSjwHe5JoH4BrhjkXElQXLZzIw3 ZK6hKQAU3j6+Lf19iUrI4+k1fulzsTLGHefTGQFg= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from Mini-von-Rene.fritz.box ([79.203.20.171]) by smtp.web.de (mrweb004 [213.165.67.108]) with ESMTPSA (Nemesis) id 0LfVe5-1miqVc307V-00p2zZ; Sat, 11 Sep 2021 22:40:33 +0200 Subject: [PATCH 3/5] packfile: convert mark_bad_packed_object() to object_id From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: Junio C Hamano , Jeff King References: <4a702bfe-afd0-669a-c893-0262289c24b8@web.de> Message-ID: Date: Sat, 11 Sep 2021 22:40:33 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Provags-ID: V03:K1:+yJWF6BFW5yNjB98ca1D1+Utp85eWIwjA/9JPh+pdj2gphOK3fk 7paLIwDMIUyhOGkGDXniwo34g7Tx0CbZTJ06K/7X+/D6vRTr4so1JE9r1qJEQMcpfJ/U+KT 12DuEiEbDgBAO/CGpJcBrg+2JoXI1eFhbcjYjiA1WhT6FGWiHB6/8SeIG48Z78LmW4uCS/F BE6ByTXa31xRjfaB1IKyA== X-UI-Out-Filterresults: notjunk:1;V03:K0:HQ82SNxQHsM=:huX4zRSE7CTFMXqstdNXQJ N/XG15q0ydPRmQ3QZlx5RNIs0PBOW7MGlyejm16ArjjMIBOSL9e84IJNG0ekGu2/w6xEgFmSz 5Pe0LODu9z9y9c2sBpl0M9ao8wnXazlhLBhA01ZuKds+hh9XLltOWZA4taCVScIs7HrzIdqj5 0m3940EAL5vTUbeh9lpfCK0QHTtFJtecwkoadki21xUFjdkwxBZ3l44y43KBsClDuZa5X7WwU F7ZqEa7CBX8RvH8ARPsbk4X150Ghr0FDJwYUcK9An4MLEIzqkjBEk5z4oxYvQU598dCtL66eC 1iKDI+dZPUNctqMMPuoJbmvwnz0dqSr149Sw0oAPAPriGj+LhIagBez4frZKz/8lBYB9Nxp7h C5wSfJ0dl2MbbFOO0xmi4mbjsYjX/m1o8AjifdCrxfjUdPMtWLbozrVOX5l8oVoeuumI90jOv qlh9H/PprPd6hpaBkSyyZ6AZk8enqm4c9LG5ZdnqzWPwOunh8OWDOthI83GROBsP75i1gH8nv bbyREKMT7O0PuKbS4rPKi6G9R/TpsJn0M9PBke7Ycy0xpI8DyAz4PjNwF/Lof0fxuWE0de0/U pW1e7crGRFj0Hguvvm53LIhPPFj4AUF4tsd5nWbSFoydTyupmbRN7YsxlMcfjboU45cwXzuAW U4oetcGedhz1llsfch8Swp+NGbfAH8llNrupX/ZW+Kfs3B1RhWHvXfXLDCXwy3GCHKqlLGzYm RKA3MMropyu0UvTK3smt/+uOznun+lrbORVmXkrKQ7SL6k8xkUB3kCax3uHNPtxMfJj0D7Xi0 LOZl9pfCXL5+Dh7ppnoak7dQFJ7FvgXY5jTeeumNFcDZFqZ7KmVib/f3/mde+ntGy3LTRrRIQ W1JSU6jGLk9XlVCiNSHDv3RQpuXKOcZ0CYckWM9C3rPuSUUglx+sV+1n+O582asipRBO0NBT4 qY+Ia8+zhAAs2EW2usXp4PshM08tQSfg3ipKz7AUUQGcQM5Y9W+64ilEbMpEcq4UXsVm1/sCe qaT6DksKvrCEChvk79GN15DOlFMDdLYJgtQJbOLuntkacJkZt8N6hTJRO1fEMepbJQwo04lt1 FEQNcXdEOyM+ns= Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org All callers have full object IDs, so pass them on instead of just their hash member. Signed-off-by: René Scharfe --- object-file.c | 2 +- packfile.c | 12 ++++++------ packfile.h | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) -- 2.33.0 diff --git a/object-file.c b/object-file.c index a8be899481..fb5a385a06 100644 --- a/object-file.c +++ b/object-file.c @@ -1616,7 +1616,7 @@ static int do_oid_object_info_extended(struct repository *r, return 0; rtype = packed_object_info(r, e.p, e.offset, oi); if (rtype < 0) { - mark_bad_packed_object(e.p, real->hash); + mark_bad_packed_object(e.p, real); return do_oid_object_info_extended(r, real, oi, 0); } else if (oi->whence == OI_PACKED) { oi->u.packed.offset = e.offset; diff --git a/packfile.c b/packfile.c index 4d0d625238..fb15fc5b49 100644 --- a/packfile.c +++ b/packfile.c @@ -1161,17 +1161,17 @@ int unpack_object_header(struct packed_git *p, return type; } -void mark_bad_packed_object(struct packed_git *p, const unsigned char *sha1) +void mark_bad_packed_object(struct packed_git *p, const struct object_id *oid) { unsigned i; const unsigned hashsz = the_hash_algo->rawsz; for (i = 0; i < p->num_bad_objects; i++) - if (hasheq(sha1, p->bad_object_sha1 + hashsz * i)) + if (hasheq(oid->hash, p->bad_object_sha1 + hashsz * i)) return; p->bad_object_sha1 = xrealloc(p->bad_object_sha1, st_mult(GIT_MAX_RAWSZ, st_add(p->num_bad_objects, 1))); - hashcpy(p->bad_object_sha1 + hashsz * p->num_bad_objects, sha1); + hashcpy(p->bad_object_sha1 + hashsz * p->num_bad_objects, oid->hash); p->num_bad_objects++; } @@ -1272,7 +1272,7 @@ static int retry_bad_packed_offset(struct repository *r, if (offset_to_pack_pos(p, obj_offset, &pos) < 0) return OBJ_BAD; nth_packed_object_id(&oid, p, pack_pos_to_index(p, pos)); - mark_bad_packed_object(p, oid.hash); + mark_bad_packed_object(p, &oid); type = oid_object_info(r, &oid, NULL); if (type <= OBJ_NONE) return OBJ_BAD; @@ -1722,7 +1722,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset, nth_packed_object_id(&oid, p, index_pos); error("bad packed object CRC for %s", oid_to_hex(&oid)); - mark_bad_packed_object(p, oid.hash); + mark_bad_packed_object(p, &oid); data = NULL; goto out; } @@ -1811,7 +1811,7 @@ void *unpack_entry(struct repository *r, struct packed_git *p, off_t obj_offset, " at offset %"PRIuMAX" from %s", oid_to_hex(&base_oid), (uintmax_t)obj_offset, p->pack_name); - mark_bad_packed_object(p, base_oid.hash); + mark_bad_packed_object(p, &base_oid); base = read_object(r, &base_oid, &type, &base_size); external_base = base; } diff --git a/packfile.h b/packfile.h index 3ae117a8ae..a982ed9994 100644 --- a/packfile.h +++ b/packfile.h @@ -159,7 +159,7 @@ int packed_object_info(struct repository *r, struct packed_git *pack, off_t offset, struct object_info *); -void mark_bad_packed_object(struct packed_git *p, const unsigned char *sha1); +void mark_bad_packed_object(struct packed_git *, const struct object_id *); const struct packed_git *has_packed_and_bad(struct repository *r, const unsigned char *sha1); #define ON_DISK_KEEP_PACKS 1 From patchwork Sat Sep 11 20:42:20 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 12486627 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=-14.3 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_SANE_1 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 4691CC433F5 for ; Sat, 11 Sep 2021 20:42:29 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1B97A60EE7 for ; Sat, 11 Sep 2021 20:42:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234130AbhIKUnl (ORCPT ); Sat, 11 Sep 2021 16:43:41 -0400 Received: from mout.web.de ([212.227.15.3]:57737 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233608AbhIKUnk (ORCPT ); Sat, 11 Sep 2021 16:43:40 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1631392941; bh=xJZnghI+6gjHEugvJNlOxXX5Xoz8chOUFnGa2sT0nRI=; h=X-UI-Sender-Class:Subject:From:To:Cc:References:Date:In-Reply-To; b=iMArmhsKikIgAcAI04FJAx4f8FuVzKU89SQhGomo8ItjRqwxA/Wg4A1byy4aHWZye fq5GZIRjDnpWqKqTw09nakLl2bM1lqfUvWfTonjqw7CCVd/mwfl4pQk8j6TsFQndyc Dp7eTabltBNpCqVF5fGbv+vwocYN9t/SSXQ+ouSE= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from Mini-von-Rene.fritz.box ([79.203.20.171]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1N4vRY-1n6I5B2Cyy-010niP; Sat, 11 Sep 2021 22:42:21 +0200 Subject: [PATCH v2 4/5] packfile: convert has_packed_and_bad() to object_id From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: Junio C Hamano , Jeff King References: <4a702bfe-afd0-669a-c893-0262289c24b8@web.de> Message-ID: Date: Sat, 11 Sep 2021 22:42:20 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Provags-ID: V03:K1:MmIye8tj4DCf0A33sYPf+aUdCQZ/tZXhZUuDnZgtDcCX30qwBqb OS3bVkgtA66hakPDOO/vSEpvsipg7pIEGRJS/3ZQYT79xUwYs11QdHKW69JZyy8EG04Q1aq q9tpoKx32Cf4E13S5Xv8rJ6npsCHlyaibGaRV5Ujzfor6g6sILUcMmRhwbdCJWyBxtOGrx+ QEORu+nVTRyx3lVSw/iTw== X-UI-Out-Filterresults: notjunk:1;V03:K0:J9Fbrqh3iNU=:bKpMCs47JA1SjiTKmNReWl bYXU46J63D+zw0YH3Zg4ifPUpTzdOqNtuAFy9wLpfuV6KQhmqa+uLqjridFlHVcfY2Zcaa6LL lAxR0oR1BUdx/d+ioB86cZIaEWkkYG1bMcgE5KVErMDEPsEEShX4YwZmpTOAtNKaKIUx1Pg1+ vju7ew7VR++oZRYFOQdZXERia5pBjL01IXGrSL077Q0fsDwMc0Uv24/0m4wCwV6zwDzcWigqm lEo14NFnpzYMpVOi2Ic8vmYczxb4Jqq+EK4Xf/1WZ2gMEj9Vb/64SRFhXB9KmNUcdR6tVMIYa Q3jqbbwrjwWaqO4vuzztqQwJgYqzf2c7UpqMuZGReFu9UOj8sJyB2/obzsKqkUQ8T6T3UGyd2 bQTHWGWCHwsw4oU3sBPUU9XIoVd0qjFTQRBuNFyUlkIPiD/SY61EK1YHlqTaONPLfL5+i+Nk5 1OUIEMa1htBmyaltsRtqwTxkOS+9BGh7RwZ0HCKRqfZP2JR96x82VgG+J+Yf74MlTNtA2oZKs ZAV4t3JJQOoBSEKqXT1R2wep8zBY3ZhsvVSQtnwSJMcaMqzT0ZM0Nf5jdbd2GHKQQJozEk5bv R57f3NsuXMngx5DfhLuEm/qPJNtwmdIUZKWDV88vfB1bpJZEmnMtXuhinwqMhLHQQqJCsaS7U dhA6qIdUbeSt3RIFgSbyhq1EEcBze7YHjVNBIJqfMqv4sY69S9GHYLk1XLZXy/dnbrYS65vw3 iOfc6OBYuLwZKP3aDHgtsCRLhJR1iiP7k9JwVtH5eKfznerECmooxmp56uRRyyh5x/kBGcbXW LtSpTkG4vYYFbggA3gS06ROwm1LV/b6wUFGF0g6DPELcJeeq8s+xLuJmgPeuekH7lOVw/SQc8 SWPKm59rMp05gFQmftoBrWLkkk7Il/SWSaFIsmHJwHeUDRRXWNAP9GjWRRGGhRm4cogRSHOQi XqcqmjB2TiJtDESioxZvRIkKr8PVPHktlJENVRxoV1UxUoYmcRnsxCZrfLjs+QxzQDTZu5qFs jBVUCaYN+a8eVrZsNCgAav9ogqlNZEyU8cRdZuavviLXGAVgsfDaCtCdQxLy/N85WKzc3SPTC OJNRJMviYQetjs= Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The single caller has a full object ID, so pass it on instead of just its hash member. Signed-off-by: René Scharfe --- object-file.c | 2 +- packfile.c | 4 ++-- packfile.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) -- 2.33.0 diff --git a/object-file.c b/object-file.c index fb5a385a06..01e7058b4e 100644 --- a/object-file.c +++ b/object-file.c @@ -1725,7 +1725,7 @@ void *read_object_file_extended(struct repository *r, die(_("loose object %s (stored in %s) is corrupt"), oid_to_hex(repl), path); - if ((p = has_packed_and_bad(r, repl->hash)) != NULL) + if ((p = has_packed_and_bad(r, repl)) != NULL) die(_("packed object %s (stored in %s) is corrupt"), oid_to_hex(repl), p->pack_name); obj_read_unlock(); diff --git a/packfile.c b/packfile.c index fb15fc5b49..04080a558b 100644 --- a/packfile.c +++ b/packfile.c @@ -1176,14 +1176,14 @@ void mark_bad_packed_object(struct packed_git *p, const struct object_id *oid) } const struct packed_git *has_packed_and_bad(struct repository *r, - const unsigned char *sha1) + const struct object_id *oid) { struct packed_git *p; unsigned i; for (p = r->objects->packed_git; p; p = p->next) for (i = 0; i < p->num_bad_objects; i++) - if (hasheq(sha1, + if (hasheq(oid->hash, p->bad_object_sha1 + the_hash_algo->rawsz * i)) return p; return NULL; diff --git a/packfile.h b/packfile.h index a982ed9994..186146779d 100644 --- a/packfile.h +++ b/packfile.h @@ -160,7 +160,7 @@ int packed_object_info(struct repository *r, off_t offset, struct object_info *); void mark_bad_packed_object(struct packed_git *, const struct object_id *); -const struct packed_git *has_packed_and_bad(struct repository *r, const unsigned char *sha1); +const struct packed_git *has_packed_and_bad(struct repository *, const struct object_id *); #define ON_DISK_KEEP_PACKS 1 #define IN_CORE_KEEP_PACKS 2 From patchwork Sat Sep 11 20:43:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Ren=C3=A9_Scharfe?= X-Patchwork-Id: 12486629 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=-14.2 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,URIBL_BLOCKED,USER_AGENT_SANE_1 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 D2CD5C433F5 for ; Sat, 11 Sep 2021 20:43:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A9F5060F6F for ; Sat, 11 Sep 2021 20:43:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234138AbhIKUop (ORCPT ); Sat, 11 Sep 2021 16:44:45 -0400 Received: from mout.web.de ([212.227.15.3]:51813 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229487AbhIKUop (ORCPT ); Sat, 11 Sep 2021 16:44:45 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1631393007; bh=uCjBRV+uxPeb9a8ciZ5vB8vyzzvgzks4y9F7yoY5PLk=; h=X-UI-Sender-Class:Subject:From:To:Cc:References:Date:In-Reply-To; b=L01pj9IOBUacfbUcmIzvz2oRO2O4oDT7k73QjD5LzJ2JazIwczpPzj/xKwJ2Ch3qJ wL2dByHdTBSpvMwySTOddFrr4K3lwOKLzv8kB37OkpcHcZIu7pKGrqh5NhQtND5xpp z7jVretSi0maw/O97tZx3vDACRSFRSW3/ULCfkjg= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Received: from Mini-von-Rene.fritz.box ([79.203.20.171]) by smtp.web.de (mrweb001 [213.165.67.108]) with ESMTPSA (Nemesis) id 0LvS9z-1n7fmG1RhL-010e2d; Sat, 11 Sep 2021 22:43:27 +0200 Subject: [PATCH v2 5/5] packfile: use oidset for bad objects From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: Junio C Hamano , Jeff King References: <4a702bfe-afd0-669a-c893-0262289c24b8@web.de> Message-ID: Date: Sat, 11 Sep 2021 22:43:26 +0200 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.14.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Provags-ID: V03:K1:dkVQnLQ33Ee0aPkIGYwUlyuApKeuiB2LBbITuS5nN4Ntr0PuI+3 x716ExphXNzNaask0vbDBzAlcdGWfYfdYDG5mYTJeDF+QBmIfFBqy4ZjFQMjlKLAlMAbMOi wycRF7EWqAX7507Wnt+esE1oZ1pm4nbmLsu/mhl86YcdsUofOyxp6M8V+kNDGoJTp7KKSDX AoQTzZ/u9gNuhArvzoKfg== X-UI-Out-Filterresults: notjunk:1;V03:K0:gfEtr2xQHGE=:olKJ2mPZS619cZJzCHzPZ2 0UmBK1tbr06PRpXUdTv5702QpUYY5cHivBCJAoINSzL42twaGQdS/DwJnCCCxrrpzcUjT4yAF 44/YbB2Po4jUhJ5UgV7ny0oQqYPf/FXz4hkb4iPCuVJwJWNCzLURuSjEEwxn5xHKrbu7l3Xnn OQRtUhC4YgGtlurO20lBmz+xcBvJEFh9YYgtgcFraLjD2B68jYMfX2HOKy6gtSqW8KbgOrKfo HSmNDgDNV5r0efvnYYk83/WbNDOP/O4zA2jMkjucVAJZ4+TtFfx1CSl8uZ0wuyFg1CTVw27tT IbwScS6kW3Sfn3yKMbjqA6njgCxczkybPGj4E1TzF2mTWbtGSDfWd5gGf/ukPRMux8ndg0paZ TV3JUNWFvqfg+E8VENuEAWNif7jTXcrw6PmWuneqlnPXe/tRur9yLdalfqveBDJxkqANLJtQa YxEXOgpxZwRG1C453oVXZ4NLTpmp84LKsBE6u7AnZn/2/5dFySTVKQj77UTKc7MQc1q4Ep2PB L8s3hYgP+z9fmAVpdu7y5ZHcGZU08UEWgmEAeFCH5DYSqej/H1DEKtzv47UL6bsplFZve+8ha 6743hAnQhWJ62qfpLAZxv7dSVwATr008KxvAVgIE/4MpZ/OXXfhBgHOPlouQuKcMR+eU4qzT/ wiiH27CqFIioCNlpGqUCp0mRBgPntCxMl2bAUEW5AqFpRIKzaoemFVS1khWqM1hf8KtpWT7Dt abH6forIVdMQTKIZg6hd53Cf+CtOLjmMWzREe/1grNhsqOd66qd+kliym5+9XT12RprrywtPb letTGRRH4u+h0nYzrBk4CKSbziAG4goK2tkdBaPqIc8n/1JnQQ+9dWcKqaNffxTFq4/U0Jat/ 6D5C77ivmwXUVocluFljNFLKPFkDEIVIXJBkdnSNw8GVG3XJIUP6z5GpPusV93037yiHTCOOj 3GtXQB/40trAc4a5oMFT3rLmvmn1txAKENFXq4bql7plh0m6XZFCOCCXfbDGozUGppRR+np10 thMb0+c3ETg3rz/xGsMmsE9HKa4aLL+iviYijnT3XagYnlmHCyp1cCXN3d+95Mkr1nVdbpqkF OJKAYL+EApjEqQ= Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Store the object ID of broken pack entries in an oidset instead of keeping only their hashes in an unsorted array. The resulting code is shorter and easier to read. It also handles the (hopefully) very rare case of having a high number of bad objects better. Helped-by: Jeff King Signed-off-by: René Scharfe --- midx.c | 10 +++------- object-store.h | 4 ++-- packfile.c | 28 ++++++---------------------- 3 files changed, 11 insertions(+), 31 deletions(-) -- 2.33.0 diff --git a/midx.c b/midx.c index 8cb063023c..76322b713c 100644 --- a/midx.c +++ b/midx.c @@ -307,13 +307,9 @@ int fill_midx_entry(struct repository * r, if (!is_pack_valid(p)) return 0; - if (p->num_bad_objects) { - uint32_t i; - for (i = 0; i < p->num_bad_objects; i++) - if (hasheq(oid->hash, - p->bad_object_sha1 + the_hash_algo->rawsz * i)) - return 0; - } + if (oidset_size(&p->bad_objects) && + oidset_contains(&p->bad_objects, oid)) + return 0; e->offset = nth_midxed_offset(m, pos); e->p = p; diff --git a/object-store.h b/object-store.h index b4dc6668aa..c7bead66f6 100644 --- a/object-store.h +++ b/object-store.h @@ -10,6 +10,7 @@ #include "khash.h" #include "dir.h" #include "oidtree.h" +#include "oidset.h" struct object_directory { struct object_directory *next; @@ -75,9 +76,8 @@ struct packed_git { const void *index_data; size_t index_size; uint32_t num_objects; - uint32_t num_bad_objects; uint32_t crc_offset; - unsigned char *bad_object_sha1; + struct oidset bad_objects; int index_version; time_t mtime; int pack_fd; diff --git a/packfile.c b/packfile.c index 04080a558b..caba29c624 100644 --- a/packfile.c +++ b/packfile.c @@ -1163,29 +1163,17 @@ int unpack_object_header(struct packed_git *p, void mark_bad_packed_object(struct packed_git *p, const struct object_id *oid) { - unsigned i; - const unsigned hashsz = the_hash_algo->rawsz; - for (i = 0; i < p->num_bad_objects; i++) - if (hasheq(oid->hash, p->bad_object_sha1 + hashsz * i)) - return; - p->bad_object_sha1 = xrealloc(p->bad_object_sha1, - st_mult(GIT_MAX_RAWSZ, - st_add(p->num_bad_objects, 1))); - hashcpy(p->bad_object_sha1 + hashsz * p->num_bad_objects, oid->hash); - p->num_bad_objects++; + oidset_insert(&p->bad_objects, oid); } const struct packed_git *has_packed_and_bad(struct repository *r, const struct object_id *oid) { struct packed_git *p; - unsigned i; for (p = r->objects->packed_git; p; p = p->next) - for (i = 0; i < p->num_bad_objects; i++) - if (hasheq(oid->hash, - p->bad_object_sha1 + the_hash_algo->rawsz * i)) - return p; + if (oidset_contains(&p->bad_objects, oid)) + return p; return NULL; } @@ -2016,13 +2004,9 @@ static int fill_pack_entry(const struct object_id *oid, { off_t offset; - if (p->num_bad_objects) { - unsigned i; - for (i = 0; i < p->num_bad_objects; i++) - if (hasheq(oid->hash, - p->bad_object_sha1 + the_hash_algo->rawsz * i)) - return 0; - } + if (oidset_size(&p->bad_objects) && + oidset_contains(&p->bad_objects, oid)) + return 0; offset = find_pack_entry_one(oid->hash, p); if (!offset)