From patchwork Tue Nov 29 12:21:17 2022 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: 13058514 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 2612DC4321E for ; Tue, 29 Nov 2022 12:21:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234100AbiK2MVi (ORCPT ); Tue, 29 Nov 2022 07:21:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47308 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234046AbiK2MVa (ORCPT ); Tue, 29 Nov 2022 07:21:30 -0500 Received: from mout.web.de (mout.web.de [212.227.15.4]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85CF95DB83 for ; Tue, 29 Nov 2022 04:21:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1669724478; bh=64RcOQPsVobNySgLG/XWXDVwZQeJNovvPvrxXvUqpHE=; h=X-UI-Sender-Class:Date:Subject:From:To:Cc:References:In-Reply-To; b=lPa+IgmEXryW72LY36fo2PvG+ai9YGYfjfME2qPP9iOXMH7GcDpCkmKTNNSbmfI12 ovfg4jcOwM1z/N4twHINj9O+0vF+gPBxfyB8jaJ32tdrTD2KXWQINnrL83COw5w4Ud ZVMa7h8bVHWPkW8ssTbL0I9Me60g6M1OLaocfki5dbwsN+Utn8P6lHIrq9MsBhBhjK O/wM5Erz5wZ32RdcCmo4P1zo+5syKchzBtZxRp/CFB8MeAQpnZ84dM7Boc9LPc06yQ oIdLXwKe7hxab++li/8xjhjzhl3i3l3IfzdPbFbqIvcLbuzhIkBGdBHbxXPcFTwFvv Rcwj4xWU6MAjQ== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Received: from [192.168.178.29] ([91.47.154.159]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MP384-1pN08P3ieK-00PMMY; Tue, 29 Nov 2022 13:21:17 +0100 Message-ID: <05f162e2-0687-af8e-d4f8-4ab2ea003518@web.de> Date: Tue, 29 Nov 2022 13:21:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: [PATCH v3 1/5] t5317: stop losing return codes of git ls-files Content-Language: en-US From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , Taylor Blau , Christian Couder , Jeff King References: In-Reply-To: X-Provags-ID: V03:K1:fIXgJz96tp8zGau/DgVED+F5jJV0zqDRSgTvgVlMiti6/WZcyi9 JpjB7HI9sEkrIPFjSk3KQw7SzeQlQBBXtN8EpiO1w9UcrcQ7vq1kShdXPtLpXorqFbO7i9S bS4sRlO7KrE4SoIA2tdoLtepl8oM45MBFvzFVSBACLn1svhaXOKVulMH4+D4LrXaOsB/+ul cm4C7Te6N9wbS6qmwd0qA== UI-OutboundReport: notjunk:1;M01:P0:cAzyDsWkt+o=;RQ/hnZqKdARfq6HiA8VHL0ZP9lL b/D7hlqxtybkEvvoTxYm9HfSvkjgMxJV8KZbRBctp/0//O1+DjciXlDRZQksC0CBKmPyWW704 gAscwSg6abwf7+NWZwfgL8OvMLvp7pGbMD+zTP3Q7Nj7bh4aNIwuY6Ia57lt6KtP1Ya7Yw4sU n4GRDx6hKj0joLPznGmA/nHwKMhVUd9WcTigi+6zzQD2NfjMsYI1GtHaXr3veB0QqDK6wwBaG lJJJN8YDRY/If8UHDYxAHqruS3j2d8UXFfHuQbSdVo8lCUwK9R2C16liTkjJVx5s5HukPW1qv PlVgBb1qUtbHIbVIfTMB/dLLNXHh3HHi+X/CHA1UQrK3r4/CTwExoB3+YiRlT3G9yAvoj1aoc 9vEslz4ezierDRxuKMkf4hVFTO/YVP8hFxohPh67P+w4iOEmfjI7j8QJKt7uZLbV/Mfn5X9mF if4sQsc/iseIwk01k5y2f4lSUTBQkjlp2CIOLR2fG8FOtyk7bLLkGlH0OmRUfDbKFBta1g69n N3kUBz1ssvFpNW6PXi/8WDeGGEekXx7ZIaMX71q9APQ3VEcJcUexLQzCFQj2TqD2Ha0kmnN99 x3QQ7feMhlqI9TdsmlVdNlAWwoSgzrH33oTE4IPO/RMnAfAiAVsbzLPSTDivtABidr9rD+urb wAiAsStJlQGrvZlyXZwX1vrGNr62X+DZXZR7PTigcUz1wWxVnCQhK9ks8XwKcbZU+2OoO8dcK uZplX955IbkFuD8y/MtTrLFpW/zS5TkDRgxkdhpiQhe8DJledTBIALMwDE+TUF0KxRfHd3GaT N/xANvQ1Gs48pxlmLLlfsFy3lVUFFwD7hWasXojOzmgT/QEYCbLgxAFfXm8Ur2x4VcfHdl3nJ gSNl5FdCtpHP/T752Ktqpt6FOoNIq3Zt6XcXXaCC7UGAiGKZpsYggBXtXmJM8InTGmfwpnrgv a7msUG95zbixD5VT9vWmdjSeyb4= Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org fb2d0db502 (test-lib-functions: add parsing helpers for ls-files and ls-tree, 2022-04-04) not only started to use helper functions, it also started to pipe the output of git ls-files into them directly, without using a temporary file. No explanation was given. This causes the return code of that git command to be ignored. Revert that part of the change, use temporary files and check the return code of git ls-files again. Suggested-by: Ævar Arnfjörð Bjarmason Signed-off-by: René Scharfe --- t/t5317-pack-objects-filter-objects.sh | 52 ++++++++++++++------------ 1 file changed, 28 insertions(+), 24 deletions(-) -- 2.38.1 diff --git a/t/t5317-pack-objects-filter-objects.sh b/t/t5317-pack-objects-filter-objects.sh index bb633c9b09..82a22ecaa5 100755 --- a/t/t5317-pack-objects-filter-objects.sh +++ b/t/t5317-pack-objects-filter-objects.sh @@ -24,8 +24,9 @@ parse_verify_pack_blob_oid () { } test_expect_success 'verify blob count in normal packfile' ' - git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 | - test_parse_ls_files_stage_oids | + git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 \ + >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r1 pack-objects --revs --stdout >all.pack <<-EOF && @@ -123,8 +124,8 @@ test_expect_success 'setup r2' ' ' test_expect_success 'verify blob count in normal packfile' ' - git -C r2 ls-files -s large.1000 large.10000 | - test_parse_ls_files_stage_oids | + git -C r2 ls-files -s large.1000 large.10000 >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r2 pack-objects --revs --stdout >all.pack <<-EOF && @@ -161,8 +162,8 @@ test_expect_success 'verify blob:limit=1000' ' ' test_expect_success 'verify blob:limit=1001' ' - git -C r2 ls-files -s large.1000 | - test_parse_ls_files_stage_oids | + git -C r2 ls-files -s large.1000 >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r2 pack-objects --revs --stdout --filter=blob:limit=1001 >filter.pack <<-EOF && @@ -179,8 +180,8 @@ test_expect_success 'verify blob:limit=1001' ' ' test_expect_success 'verify blob:limit=10001' ' - git -C r2 ls-files -s large.1000 large.10000 | - test_parse_ls_files_stage_oids | + git -C r2 ls-files -s large.1000 large.10000 >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r2 pack-objects --revs --stdout --filter=blob:limit=10001 >filter.pack <<-EOF && @@ -197,8 +198,8 @@ test_expect_success 'verify blob:limit=10001' ' ' test_expect_success 'verify blob:limit=1k' ' - git -C r2 ls-files -s large.1000 | - test_parse_ls_files_stage_oids | + git -C r2 ls-files -s large.1000 >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r2 pack-objects --revs --stdout --filter=blob:limit=1k >filter.pack <<-EOF && @@ -215,8 +216,8 @@ test_expect_success 'verify blob:limit=1k' ' ' test_expect_success 'verify explicitly specifying oversized blob in input' ' - git -C r2 ls-files -s large.1000 large.10000 | - test_parse_ls_files_stage_oids | + git -C r2 ls-files -s large.1000 large.10000 >ls_files_result && + test_parse_ls_files_stage_oids expected && echo HEAD >objects && @@ -233,8 +234,8 @@ test_expect_success 'verify explicitly specifying oversized blob in input' ' ' test_expect_success 'verify blob:limit=1m' ' - git -C r2 ls-files -s large.1000 large.10000 | - test_parse_ls_files_stage_oids | + git -C r2 ls-files -s large.1000 large.10000 >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r2 pack-objects --revs --stdout --filter=blob:limit=1m >filter.pack <<-EOF && @@ -289,8 +290,9 @@ test_expect_success 'setup r3' ' ' test_expect_success 'verify blob count in normal packfile' ' - git -C r3 ls-files -s sparse1 sparse2 dir1/sparse1 dir1/sparse2 | - test_parse_ls_files_stage_oids | + git -C r3 ls-files -s sparse1 sparse2 dir1/sparse1 dir1/sparse2 \ + >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r3 pack-objects --revs --stdout >all.pack <<-EOF && @@ -341,8 +343,9 @@ test_expect_success 'setup r4' ' ' test_expect_success 'verify blob count in normal packfile' ' - git -C r4 ls-files -s pattern sparse1 sparse2 dir1/sparse1 dir1/sparse2 | - test_parse_ls_files_stage_oids | + git -C r4 ls-files -s pattern sparse1 sparse2 dir1/sparse1 dir1/sparse2 \ + >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r4 pack-objects --revs --stdout >all.pack <<-EOF && @@ -359,8 +362,8 @@ test_expect_success 'verify blob count in normal packfile' ' ' test_expect_success 'verify sparse:oid=OID' ' - git -C r4 ls-files -s dir1/sparse1 dir1/sparse2 | - test_parse_ls_files_stage_oids | + git -C r4 ls-files -s dir1/sparse1 dir1/sparse2 >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r4 ls-files -s pattern >staged && @@ -379,8 +382,8 @@ test_expect_success 'verify sparse:oid=OID' ' ' test_expect_success 'verify sparse:oid=oid-ish' ' - git -C r4 ls-files -s dir1/sparse1 dir1/sparse2 | - test_parse_ls_files_stage_oids | + git -C r4 ls-files -s dir1/sparse1 dir1/sparse2 >ls_files_result && + test_parse_ls_files_stage_oids expected && git -C r4 pack-objects --revs --stdout --filter=sparse:oid=main:pattern >filter.pack <<-EOF && @@ -400,8 +403,9 @@ test_expect_success 'verify sparse:oid=oid-ish' ' # This models previously omitted objects that we did not receive. test_expect_success 'setup r1 - delete loose blobs' ' - git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 | - test_parse_ls_files_stage_oids | + git -C r1 ls-files -s file.1 file.2 file.3 file.4 file.5 \ + >ls_files_result && + test_parse_ls_files_stage_oids expected && for id in `cat expected | sed "s|..|&/|"` From patchwork Tue Nov 29 12:22:26 2022 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: 13058516 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 58222C4321E for ; Tue, 29 Nov 2022 12:22:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233003AbiK2MWo (ORCPT ); Tue, 29 Nov 2022 07:22:44 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48474 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233193AbiK2MWk (ORCPT ); Tue, 29 Nov 2022 07:22:40 -0500 Received: from mout.web.de (mout.web.de [212.227.15.4]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1E1952669 for ; Tue, 29 Nov 2022 04:22:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1669724547; bh=WnnfKfjhZ3SoEJZflXoQGOVFFRGqnPKvi8AVNNTGWdw=; h=X-UI-Sender-Class:Date:Subject:From:To:Cc:References:In-Reply-To; b=PtsJ6sKmupZ8UtDd7TQtwXqhBdULXNvpJxap+a5MurhePd3LllnUgkjd/kvigmUtZ B6T+/daPE65c9TK/sVMvLuigWXUTJWPOLrnRg4KtNVFapnpcdg0LxVmFf6Gzi7qWPW W8tEMb+De8F8BMSZCeyIjcx7TIdjgaT8tjQpgpABx3EPt98wL2nuh1EJwAX7CZiwwn wiz2woVok2fLavt7m1TspRBPxlxvcv3OiFfcV5FyBuRxRkeMJpP1BlYZM+iaEnul4s zoueR24aNLYARnzxFpxT6cyt1cdPlXzf+szZM+/mTGJZZlKGaUgFZ3MAVG8Iv96ZfB eQ7fCfIyGc1Eg== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Received: from [192.168.178.29] ([91.47.154.159]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1N8Epo-1ovKrL1L2e-014FhG; Tue, 29 Nov 2022 13:22:27 +0100 Message-ID: <4d5a63e2-e4dc-1f51-cbfa-621c7bba0d9a@web.de> Date: Tue, 29 Nov 2022 13:22:26 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: [PATCH v3 2/5] t5317: demonstrate failure to handle multiple --filter options Content-Language: en-US From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , Taylor Blau , Christian Couder , Jeff King References: In-Reply-To: X-Provags-ID: V03:K1:cFCs015rZfX29l9xQ3OUcryUHQNNDKTYrnMjSRvDnEBLFPUT+Ph 1QEr/EZH4Ch/7fGtYzKWs5rk12SNUDsy3IrqinJacYGfXxgPmutJoiKfS/D+E/TuTh0Q2cb EOeTeWjeOjHMWTXfm8bnK6uV7yyH4SmReN6M/9sSqpESxuBk241dV6O4vcZGK0DYntAV3Sd O/DpqmhL4cL7jt9aGEdMA== UI-OutboundReport: notjunk:1;M01:P0:WAfA435D+Z8=;17nZt31fa9CkxGV+7NvZYyAOG81 IAOU+LXIcQuEzJWwofcld4HJypvhuIkgexjRD0magpxetEICUo3vQHzMqE65Idbgz8SZooAXw P0rqWv/Fb+g5URWLJDnxVacC7LZM1SrYHkN8YI/vArM+xrXMx0uAwrneKgNGo0ErgAGijyHRz AYZesh/8ZS70F0Mmlb/KcSMLTN4OPpQ40eMZ9J9aHMlQfULhBNhh5HMoTE5C4YlaQQoYOd0vN A5OK6QjgID4YCSQuy/NvoguKfGrTvSCLJIo6v/mQc77EOsKTMHYONZOTn11a/LZruE+jus2zX nJ/gyOGcLMoCanswU+3hDqS09DQ0DVasOVwWy+CKHizu24EN5gnlHpIwXzPp4cJcUMy/fmoMX SoZsQeJiVNtTCD8QLg+askaX2v20PloaUGVNJ8XBzO9Goe3utO+3rWyQmVQHEZ2tVDlMnW1yH zrY2JkNCH3ECnEfp66tBWv7F+wLApnu6fmHbclojBE8jGDmVgvzvNXZnm2aiUF+Ge+dPVIdw+ Baq2xOVLAk2VVIwmhwVWsMvyELRwVpiAF6NeJmdz0m2JXWhLq61TbNbdK0vv80lDgA/Wf9uVU oJYZavGcnWlOUKx5WkwMe68nU9WN+OsfLXoy4344Kmj1W/fGbS5gvJFXlg7uOd+PRSHuaN4b3 75h3HubfABOP19NXa9rBGQd3kjX1lfvz22B5rW/Tu0wtNUsoll0qRLNmojbRxMUHY+QTFlpzx cMVHrb9/zslkn9UO8xWBfldYqErlqbSXF9dkBRda9DzDRxMwiy6NOE/DpJPqZ4XjL/wAPrukE pI2kN0oQfK8s5nl0pd+Qp0cHFj6xk92J6C2/JBhsMpr/Jb5pKmGvYyJL8YIM7/Q9Mg/tHKhtg kq5w0ODah/kwmNgaZC8JLWg1jCcjhb2h4DUXuuZFZynCAq2uWcFoDQRNE5SDBkUeqoz8uWnFJ OsnY+RQ1NZLHHYqXYyqYaIqT0yQ= Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org git pack-objects should accept multiple --filter options as documented in Documentation/rev-list-options.txt, but currently the last one wins. Show that using tests with multiple blob size limits Signed-off-by: René Scharfe --- t/t5317-pack-objects-filter-objects.sh | 38 ++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) -- 2.38.1 diff --git a/t/t5317-pack-objects-filter-objects.sh b/t/t5317-pack-objects-filter-objects.sh index 82a22ecaa5..25faebaada 100755 --- a/t/t5317-pack-objects-filter-objects.sh +++ b/t/t5317-pack-objects-filter-objects.sh @@ -265,6 +265,44 @@ test_expect_success 'verify normal and blob:limit packfiles have same commits/tr test_cmp expected observed ' +test_expect_failure 'verify small limit and big limit results in small limit' ' + git -C r2 ls-files -s large.1000 >ls_files_result && + test_parse_ls_files_stage_oids expected && + + git -C r2 pack-objects --revs --stdout --filter=blob:limit=1001 \ + --filter=blob:limit=10001 >filter.pack <<-EOF && + HEAD + EOF + git -C r2 index-pack ../filter.pack && + + git -C r2 verify-pack -v ../filter.pack >verify_result && + grep blob verify_result | + parse_verify_pack_blob_oid | + sort >observed && + + test_cmp expected observed +' + +test_expect_success 'verify big limit and small limit results in small limit' ' + git -C r2 ls-files -s large.1000 >ls_files_result && + test_parse_ls_files_stage_oids expected && + + git -C r2 pack-objects --revs --stdout --filter=blob:limit=10001 \ + --filter=blob:limit=1001 >filter.pack <<-EOF && + HEAD + EOF + git -C r2 index-pack ../filter.pack && + + git -C r2 verify-pack -v ../filter.pack >verify_result && + grep blob verify_result | + parse_verify_pack_blob_oid | + sort >observed && + + test_cmp expected observed +' + # Test sparse:path= filter. # !!!! # NOTE: sparse:path filter support has been dropped for security reasons, From patchwork Tue Nov 29 12:23:53 2022 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: 13058517 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 130FCC4321E for ; Tue, 29 Nov 2022 12:24:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234032AbiK2MYM (ORCPT ); Tue, 29 Nov 2022 07:24:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49888 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230385AbiK2MYK (ORCPT ); Tue, 29 Nov 2022 07:24:10 -0500 Received: from mout.web.de (mout.web.de [212.227.15.14]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BCB804666A for ; Tue, 29 Nov 2022 04:24:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1669724634; bh=wQ9dT1YL3b+Y9bak8T+zeTQfONMXSU77JnQAOu/sN4o=; h=X-UI-Sender-Class:Date:Subject:From:To:Cc:References:In-Reply-To; b=MvN1wg8Zd5LfC/9psD1TpRuhBQAEbAMeZ9BT1JLUL5Gdv2a1wqBtrLIKCRydxa7PY w1tipIdjE0uXXWNcCPejJ+ygyhrOYyL73x0Cb59iuMkaDYReLwn/2FghXc7uYwrWYR aUMHaIZ+t70AyEIKm2Bv7Eo6SvteopYSqsKN+x/LnJwGoYrGMfebQ3w9HvAQD9DZTZ ljYHh7+SO0LLdu3ToXgBA/AZ7a8+P9y/LkhgmqQeEwiq5KtSjilI++gcNxAhBCoMSr i9s7/KqehxDc8FvRh4sr8wGDa3Px2yj5OyeuDO431lYwgxe/QSoAEPIO4AlLQ5Ii4H X2o+rDw7uG6Zg== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Received: from [192.168.178.29] ([91.47.154.159]) by smtp.web.de (mrweb006 [213.165.67.108]) with ESMTPSA (Nemesis) id 1N8n46-1oun8u1IqU-015taZ; Tue, 29 Nov 2022 13:23:54 +0100 Message-ID: <6c7ef5fb-59b5-df16-036d-9a9a3d987cb0@web.de> Date: Tue, 29 Nov 2022 13:23:53 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: [PATCH v3 3/5] pack-objects: fix handling of multiple --filter options Content-Language: en-US From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , Taylor Blau , Christian Couder , Jeff King References: In-Reply-To: X-Provags-ID: V03:K1:cCUR3x/pZ8IJzOPFS7ZJLtmVjor6E73KXhU0tb1sWDv4PhzBsdy NaezjAhlJBXJO2MSAdnNG1wtFqAdQ4nREs6fT1anUc3ZXAw0CWuDW1Ok72iqObVmN2zro9d uPxAb/ZhE69d+6gAit3FNRPRqi5JjHyQq4lwQsupBnBdMevuVYOGaASGMvvBcv6b6a/yvSG mU3saaYESJBmNRws04+XA== UI-OutboundReport: notjunk:1;M01:P0:4Etc4mtMTS0=;8EMjzz2gITaIZCIK7p3EA5xK8RM Gl4FFrPxwo6lfnNHKcymTJKcevckE3+LrT+nYOT1h6SH0QmUsLSBr7MRPceplI8qlGJDXLR+V o6bL23tjjkki6PchJpZJCtdq4iSfVWs30qW92uDIuXwgIxiqOW7iMjsLKFBtMJGRZQOGJgSQk awElhK8dvgAKJbvnVB85o9zxMiiqM3LvdMA+Cjyvc3BabDxcLw/S8YNWv5D1JP+cdz5BuvMkZ QoRbWCzF/UDWfleVhAmM7bKpJ94lq5ZR/rGIuyCoWrz6AevfupBKQIJHMXVAmNkqP/XZuwCws WtaP0xBeeU9X/TLi0acKCVLphusHH6WLEgZFbcG4dVnILEXGRa/Yw29PFjvIwdkaoMw/jTVVC Je9J/kWQBC2dH9TYZiN0HqeAYKvTnPuP5/S5waiSgGYh3/Jt0t+0+SDmemdPXHI2hnAH4KDPh c3/cjL0JBx/Y96vlY+yvSKOL4p0wiwbPMU2ZxYbjFuFUwjI5XrFVPSHseYWPtolFOq6TOmcyy 7niui0ZEfhWeG7Sv2TQq6Zz0RAazKCRZPo0gLiOplXC5jlOVkxIXwk9wni4VYaFtPhdujLgr3 ywJPD0WZLJUOYxxmiLUf+wQx49LSeAW/pTgRaOFMlmhRn5qOI79kRMsKg0dl+RpnGKH5fEhYd QR8Si+jFMf9pdzRrWnuxyPnpVdFUsw1XUIihzwjIyTo/TxDxeXR6bwXBH7KcIB8Z6lfu1t4EV L9iBHnvRIRCg559fkO3CPyLuSg/CQnsIwEt00HmsONV2ug7OWb9K5oIFAzf0HHAR0/C3fk5iA G7Yn8F8bV/4MlFSkO8cqkSYqIjSaE+xcZfiqzrLsl33xEhIPmUONiWJ3DMrmUUW3XtEb5raDo lEPYdDMZbsGRZGZeJm4UvtjFH7xCVy0XmhJWUy8Q5aqwrXQMw4CKyryenqf0pS35ZcdSj+wmo sEEJjpytgHhqr8HVU74DtHKr4Uk= Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Since 5cb28270a1 (pack-objects: lazily set up "struct rev_info", don't leak, 2022-03-28) --filter options given to git pack-objects overrule earlier ones, letting only the leftmost win and leaking the memory allocated for earlier ones. Fix that by only initializing the rev_info struct once. Signed-off-by: René Scharfe --- builtin/pack-objects.c | 3 ++- t/t5317-pack-objects-filter-objects.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) -- 2.38.1 diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 573d0b20b7..c702c09dd4 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -4158,7 +4158,8 @@ static struct list_objects_filter_options *po_filter_revs_init(void *value) { struct po_filter_data *data = value; - repo_init_revisions(the_repository, &data->revs, NULL); + if (!data->have_revs) + repo_init_revisions(the_repository, &data->revs, NULL); data->have_revs = 1; return &data->revs.filter; diff --git a/t/t5317-pack-objects-filter-objects.sh b/t/t5317-pack-objects-filter-objects.sh index 25faebaada..5b707d911b 100755 --- a/t/t5317-pack-objects-filter-objects.sh +++ b/t/t5317-pack-objects-filter-objects.sh @@ -265,7 +265,7 @@ test_expect_success 'verify normal and blob:limit packfiles have same commits/tr test_cmp expected observed ' -test_expect_failure 'verify small limit and big limit results in small limit' ' +test_expect_success 'verify small limit and big limit results in small limit' ' git -C r2 ls-files -s large.1000 >ls_files_result && test_parse_ls_files_stage_oids expected && From patchwork Tue Nov 29 12:25:05 2022 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: 13058518 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 BBAEAC4321E for ; Tue, 29 Nov 2022 12:25:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234086AbiK2MZT (ORCPT ); Tue, 29 Nov 2022 07:25:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50232 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230385AbiK2MZR (ORCPT ); Tue, 29 Nov 2022 07:25:17 -0500 Received: from mout.web.de (mout.web.de [212.227.15.3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8FBF048426 for ; Tue, 29 Nov 2022 04:25:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1669724705; bh=Gxe7hS/HUUyId9efRCahqvW3Z+HQHwcA2P72W6inP14=; h=X-UI-Sender-Class:Date:Subject:From:To:Cc:References:In-Reply-To; b=OUiXHgTk1Dqwelt33bx+Pyxmsa9PQItCiYUF+i/kw1H5CZnMibPpg7Lo9zgys1Ncx m1sDdyko1aktLf+wjIn7DuUcItDCc4iOAn3rgfKNHfPxJbIYcouLEFpM3o5bQ10yxV g0CL0jVj8eHpxQUzDoIFI208vN0Xkgm+pPQRM/zcOGGaPD7wWzjq+FLZfkDxyIHq6d 6Xgla3KcVR6SV5CeNw6g5D5I6omoCwctBR2jk001FN5M4z8ZrjnnrEpuiylx4h7soU Jk/RD6ZRkrMh7r2Zt1lUZ94ruJjuqWzPMFTECO+E18Ikq5jwqObz/YTISk+KlXyN9O g4DHWZcpu+o4A== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Received: from [192.168.178.29] ([91.47.154.159]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MiuOW-1oTwiD3OU8-00exeX; Tue, 29 Nov 2022 13:25:05 +0100 Message-ID: Date: Tue, 29 Nov 2022 13:25:05 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: [PATCH v3 4/5] pack-objects: simplify --filter handling Content-Language: en-US From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , Taylor Blau , Christian Couder , Jeff King References: In-Reply-To: X-Provags-ID: V03:K1:KoFuizDamAoCh2k3tJ/54Plwo4jt1V0Do89HkzDhwStAkzKv60O KCSHYG+cxVYOxKFy1rodYctu7loLaGMoqSAApZ0L1Z2hvKlUw949ui9RvR6720daZ3zhGKj IZgMZR8F4xwCVd+b1b10Bmn7g2fonHzzEfilYnS/65SrOukZqxMjAggHwbjIG04Ju+muts0 hQfzld1EQd8UuMuRXJ/Fw== UI-OutboundReport: notjunk:1;M01:P0:8HjOXloebBg=;YZ3Hm9PZGWT6Y05i3vpTJYYJxTP Z6NnyyVpWOZIE4AgbdEB46K396sKQkEwB8F0NqtPkxSrTaPQxRqhcF/8N6/2MbVOX3IhAonEi 8zqxmageJNX5PerUH17SPooOl/LLHEmqBRxsrdh6qF7ZjtyeVHYTpoQEIFU0OxRFDl3OLdIac aFOKbpbSM08Q4QtDDzp08EmLwDGCZpdPx01LHQ1AUMClnrQleInSINAJlywvtxIwfGUM9GLc+ fAQ1WTPgRaSJUa9kij+3h3Kl0Ck3swKfvJzHnM+rxNwbc43DBKkxnGoo8ZNwK824UyZeCK3Uu 5PXf8Beruk3KvX4eCMe8sR/jZOL83QVryIFSnjGR2l+wKwTKA6XerOIOE4fS7MuGJh7XAIQoT hW6unqBjHb5BvDjZVWCdaG9TSH/969CTGKmu5xzb8ajaAzQCNzLIHEwwzuH2Y4hr1yBk3KB+d 6cJfx2iIV/yN0z+IscznAa/6p6sFg/3MIP7oj6dGuMpM+VazAMWTEskDVJ2d53sZhkqURg8S8 szkBArJnM1pI4am7iZG5MDZYcFY0KEl8GxC0zuP916ApInlWZMJm899nAYW+472aKOJSYWqDk 9zdoASY66txzal410UylU2GxZ4todB7C+oPcDBV+K9eujJ5t9KGNiMJr6lUUaKumpfWJoxWm5 QDX3xHCviyOPcZkwcLpjikmpms2Lr6XYejz7NMV585jg0iL602ezBEy8in8264khIpCacuJYe 25eQX5K8VkSTtSjNkby6qlQHwJ45lL83gIo3x4YCc98YXvOTz2aComdnHcS7c3DExYgQ6ZChF /R7bXjDsqunj0HCg4ZcpjhCEUppV8suheCv81t0KjOjmnkZEZZkqinVVRb/DgOSjOVVA+0LSo r7mMrteflcNmB22Hb2ylML6kOGECoSJtAttuFtRYC6+UDXXvDcqZZXV5gG/YbSOUJKBsUnPj0 xAXLqg== Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org pack-objects uses OPT_PARSE_LIST_OBJECTS_FILTER_INIT() to initialize the a rev_info struct lazily before populating its filter member using the --filter option values. It tracks whether the initialization is needed using the .have_revs member of the callback data. There is a better way: Use a stand-alone list_objects_filter_options struct and build a rev_info struct with its .filter member after option parsing. This allows using the simpler OPT_PARSE_LIST_OBJECTS_FILTER() and getting rid of the extra callback mechanism. Even simpler would be using a struct rev_info as before 5cb28270a1 (pack-objects: lazily set up "struct rev_info", don't leak, 2022-03-28), but that would expose a memory leak caused by repo_init_revisions() followed by release_revisions() without a setup_revisions() call in between. Using list_objects_filter_options also allows pushing the rev_info struct into get_object_list(), where it arguably belongs. Either way, this is all left for later. Helped-by: Ævar Arnfjörð Bjarmason Signed-off-by: René Scharfe --- builtin/pack-objects.c | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) -- 2.38.1 diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index c702c09dd4..2193f80b89 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -4149,22 +4149,6 @@ static int option_parse_cruft_expiration(const struct option *opt, return 0; } -struct po_filter_data { - unsigned have_revs:1; - struct rev_info revs; -}; - -static struct list_objects_filter_options *po_filter_revs_init(void *value) -{ - struct po_filter_data *data = value; - - if (!data->have_revs) - repo_init_revisions(the_repository, &data->revs, NULL); - data->have_revs = 1; - - return &data->revs.filter; -} - int cmd_pack_objects(int argc, const char **argv, const char *prefix) { int use_internal_rev_list = 0; @@ -4175,7 +4159,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) int rev_list_index = 0; int stdin_packs = 0; struct string_list keep_pack_list = STRING_LIST_INIT_NODUP; - struct po_filter_data pfd = { .have_revs = 0 }; + struct list_objects_filter_options filter_options = + LIST_OBJECTS_FILTER_INIT; struct option pack_objects_options[] = { OPT_SET_INT('q', "quiet", &progress, @@ -4266,7 +4251,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) &write_bitmap_index, N_("write a bitmap index if possible"), WRITE_BITMAP_QUIET, PARSE_OPT_HIDDEN), - OPT_PARSE_LIST_OBJECTS_FILTER_INIT(&pfd, po_filter_revs_init), + OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options), OPT_CALLBACK_F(0, "missing", NULL, N_("action"), N_("handling for missing objects"), PARSE_OPT_NONEG, option_parse_missing_action), @@ -4386,7 +4371,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) if (!rev_list_all || !rev_list_reflog || !rev_list_index) unpack_unreachable_expiration = 0; - if (pfd.have_revs && pfd.revs.filter.choice) { + if (filter_options.choice) { if (!pack_to_stdout) die(_("cannot use --filter without --stdout")); if (stdin_packs) @@ -4473,13 +4458,11 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) read_cruft_objects(); } else if (!use_internal_rev_list) { read_object_list_from_stdin(); - } else if (pfd.have_revs) { - get_object_list(&pfd.revs, rp.nr, rp.v); - release_revisions(&pfd.revs); } else { struct rev_info revs; repo_init_revisions(the_repository, &revs, NULL); + list_objects_filter_copy(&revs.filter, &filter_options); get_object_list(&revs, rp.nr, rp.v); release_revisions(&revs); } @@ -4514,6 +4497,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) reuse_packfile_objects); cleanup: + list_objects_filter_release(&filter_options); strvec_clear(&rp); return 0; From patchwork Tue Nov 29 12:26:44 2022 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: 13058519 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 3BF88C4321E for ; Tue, 29 Nov 2022 12:26:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234049AbiK2M06 (ORCPT ); Tue, 29 Nov 2022 07:26:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51296 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234380AbiK2M0z (ORCPT ); Tue, 29 Nov 2022 07:26:55 -0500 Received: from mout.web.de (mout.web.de [212.227.15.14]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 240C95D6B8 for ; Tue, 29 Nov 2022 04:26:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1669724805; bh=CkS7oFS7sn4jN92pWWmKwGr/uuxaRS54kYeqEKNqhLw=; h=X-UI-Sender-Class:Date:Subject:From:To:Cc:References:In-Reply-To; b=a80gvvYpEvCp/mNLkinhFTKFMbvlGRsnYyDdWGdkQKCjenfgzpqRmp9YCJY0CKQaV 68ZVwRfWK/dAZoeD0WkQddMz21HmRVG9P4+4OHKMUzPrHAV0iouktFr6TTiUwONXMb 2En3s/iGe5jAP7//IJRQo1O9CE6UjiXBhnqi0KRw7FHNt9/rml8DcY+72GG3FAu4Vq CbFdrDR+U5/WIP8I+X9tiiISzettNhbQfMyqX2JKnPoZ8ugPQbOHeQC//e6kBm9vCm qbKYoiGYGhqRXwv68KmaF6yn0Y6R6eHoRsYB+revSUjfy2sProd5GKVRTib50zBRQm e/7SP8i43dhpg== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Received: from [192.168.178.29] ([91.47.154.159]) by smtp.web.de (mrweb005 [213.165.67.108]) with ESMTPSA (Nemesis) id 1MkVsg-1ob4DS4C6g-00m3zA; Tue, 29 Nov 2022 13:26:45 +0100 Message-ID: Date: Tue, 29 Nov 2022 13:26:44 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: [PATCH v3 5/5] list-objects-filter: remove OPT_PARSE_LIST_OBJECTS_FILTER_INIT() Content-Language: en-US From: =?utf-8?q?Ren=C3=A9_Scharfe?= To: Git List Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , Taylor Blau , Christian Couder , Jeff King References: In-Reply-To: X-Provags-ID: V03:K1:XmdGCGliL4y8k3mRdwwQdymTKZWEmRqA5svakbCetoQA4pqWSdS tuyenE20EvfacgLymXXX6xgbl642oS8mw46Rg4EFdwx0I9gPOTKmP8JSqfm0V1wSUV1jt7u N0tcg57ZPZHz75Eqo/yhcy4VM23wQwgZmiRuXWGaN2F1x1XEvFv8wtaVWWAERvacmmMUh2e VdcjAtqgly9QwnyYAezHg== UI-OutboundReport: notjunk:1;M01:P0:kdSFbljikBU=;2yhnYTjphhvx4y7OBLuObmq+RPf jzmH7P8Btpwyu/CQ52zj+NISWdvMrBavM6UErRlXZ8V8pKq9FdSJ5qzWTCqUw3Pco+hhySlxd xIaN+GkNvjpve7J+X1iYElrUhTW+dFBW6wtXnYdXVlxWeS9Y0FxMIfVyrS0qYfP6ztXDz2Aik 92iNUXXtVlVbNSsQTUJRszOiE/nMkJjvjwUwzrxfbRHpzLf1Ai7ey7bZMbE/JBiMGqBiuL/Sa MiDdb8nYTXHMgrc5cgMiHlWNF8zeI2O8aRYBupiyYj9Z0/OQ/FvpmD64WnE82l4wiFqukLwux 3KvPlTFkTdrNM/J7xF/OfUplkRoAwOvMKzdLHUCpZdrfbkefk7bkVaeHnRMvkAVKuyOtVzUjF B8cXoS5CIEAB3AFKU0HPzKvhw34L+MWf3mCxWK5j4hWPucGbk6LsaPsBgmzcz7jwnfBmYCDeB LFU/xHs8Itqf3HYdHAsi0rHJOPQ7Ni1uamb+H0KHzL98bzRLIETd0gFarCl2BW1ikGxe9Hso/ Rz9XsNBrWUeMvaNRxPV5S+Wtf/9EGL3cA5PR6ZPkeAGhYcjIXmEa0Bcsv2fG3zPgHdVsViehb ia/6hoMLL+51oTFtR3q71ZAfod6yyIU7Yd/MOrqbVXx+HsM3CW+rOHR/w9gSFZ0Why5o91bze Ha4IsThadZPGeg87+N2vIK1z1Y6hF2FNyjRcy6VwJVK2jj9YMugV98VY93cBal+ULSB7B/bf6 AcB2p2YFDQjftxOHXRTAwtMFbsrpLcLM5uQ0fXaBPi+HshsO5ponkHvbMewhRBmTrBu1zvAj5 iSYugKjaxSJg79fZVa47s4ckgYG+XM7W89kKoouWbtD8QEZIWxXI+p3SOI31XxgioOiVLO29k 1aet83EYTp5isU91sppEFX9+mB1R3W2qKhr20N1wtsJVLs9gYiwkAby1CVNtBuWPxJvWD+wiK NvXepmzhK6EvQpOLxo5ltvuTKG4= Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org OPT_PARSE_LIST_OBJECTS_FILTER_INIT() with a non-NULL second argument passes a function pointer via an object pointer, which is undefined. It may work fine on platforms that implement C99 extension J.5.7 (Function pointer casts). Remove the unused macro and avoid the dependency on that extension. Signed-off-by: René Scharfe --- list-objects-filter-options.c | 4 ---- list-objects-filter-options.h | 18 ++---------------- 2 files changed, 2 insertions(+), 20 deletions(-) -- 2.38.1 diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c index 5339660238..ee01bcd2cc 100644 --- a/list-objects-filter-options.c +++ b/list-objects-filter-options.c @@ -290,10 +290,6 @@ int opt_parse_list_objects_filter(const struct option *opt, const char *arg, int unset) { struct list_objects_filter_options *filter_options = opt->value; - opt_lof_init init = (opt_lof_init)opt->defval; - - if (init) - filter_options = init(opt->value); if (unset || !arg) list_objects_filter_set_no_filter(filter_options); diff --git a/list-objects-filter-options.h b/list-objects-filter-options.h index 7eeadab2dd..1fe393f447 100644 --- a/list-objects-filter-options.h +++ b/list-objects-filter-options.h @@ -111,27 +111,13 @@ void parse_list_objects_filter( * The opt->value to opt_parse_list_objects_filter() is either a * "struct list_objects_filter_option *" when using * OPT_PARSE_LIST_OBJECTS_FILTER(). - * - * Or, if using no "struct option" field is used by the callback, - * except the "defval" which is expected to be an "opt_lof_init" - * function, which is called with the "opt->value" and must return a - * pointer to the ""struct list_objects_filter_option *" to be used. - * - * The OPT_PARSE_LIST_OBJECTS_FILTER_INIT() can be used e.g. the - * "struct list_objects_filter_option" is embedded in a "struct - * rev_info", which the "defval" could be tasked with lazily - * initializing. See cmd_pack_objects() for an example. */ int opt_parse_list_objects_filter(const struct option *opt, const char *arg, int unset); -typedef struct list_objects_filter_options *(*opt_lof_init)(void *); -#define OPT_PARSE_LIST_OBJECTS_FILTER_INIT(fo, init) \ - { OPTION_CALLBACK, 0, "filter", (fo), N_("args"), \ - N_("object filtering"), 0, opt_parse_list_objects_filter, \ - (intptr_t)(init) } #define OPT_PARSE_LIST_OBJECTS_FILTER(fo) \ - OPT_PARSE_LIST_OBJECTS_FILTER_INIT((fo), NULL) + OPT_CALLBACK(0, "filter", (fo), N_("args"), \ + N_("object filtering"), opt_parse_list_objects_filter) /* * Translates abbreviated numbers in the filter's filter_spec into their