pack-objects: use standard option incompatibility functions

pack-objects has a handful of explicit checks for pairs of command-line
options which are mutually incompatible. Many of these pre-date
a699367bb8 (i18n: factorize more 'incompatible options' messages,
2022-01-31).

Convert the explicit checks into die_for_incompatible_opt2() calls,
which simplifies the implementation and standardizes pack-objects'
output when given incompatible options (e.g., --stdin-packs with
--filter gives different output than --keep-unreachable with
--unpack-unreachable).

There is one minor piece of test fallout in t5331 that expects the old
format, which has been corrected.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Taylor Blau 2025-06-23 18:32:10 -04:00 committed by Junio C Hamano
parent f9aa0eedb3
commit 798ddd947f
2 changed files with 12 additions and 10 deletions

View File

@ -5010,9 +5010,10 @@ int cmd_pack_objects(int argc,
strvec_push(&rp, "--unpacked");
}

if (exclude_promisor_objects && exclude_promisor_objects_best_effort)
die(_("options '%s' and '%s' cannot be used together"),
"--exclude-promisor-objects", "--exclude-promisor-objects-best-effort");
die_for_incompatible_opt2(exclude_promisor_objects,
"--exclude-promisor-objects",
exclude_promisor_objects_best_effort,
"--exclude-promisor-objects-best-effort");
if (exclude_promisor_objects) {
use_internal_rev_list = 1;
fetch_if_missing = 0;
@ -5050,13 +5051,14 @@ int cmd_pack_objects(int argc,
if (!pack_to_stdout && thin)
die(_("--thin cannot be used to build an indexable pack"));

if (keep_unreachable && unpack_unreachable)
die(_("options '%s' and '%s' cannot be used together"), "--keep-unreachable", "--unpack-unreachable");
die_for_incompatible_opt2(keep_unreachable, "--keep-unreachable",
unpack_unreachable, "--unpack-unreachable");
if (!rev_list_all || !rev_list_reflog || !rev_list_index)
unpack_unreachable_expiration = 0;

if (stdin_packs && filter_options.choice)
die(_("cannot use --filter with --stdin-packs"));
die_for_incompatible_opt2(stdin_packs, "--stdin-packs",
filter_options.choice, "--filter");


if (stdin_packs && use_internal_rev_list)
die(_("cannot use internal rev list with --stdin-packs"));
@ -5064,8 +5066,8 @@ int cmd_pack_objects(int argc,
if (cruft) {
if (use_internal_rev_list)
die(_("cannot use internal rev list with --cruft"));
if (stdin_packs)
die(_("cannot use --stdin-packs with --cruft"));
die_for_incompatible_opt2(stdin_packs, "--stdin-packs",
cruft, "--cruft");
}

/*

View File

@ -64,7 +64,7 @@ test_expect_success '--stdin-packs is incompatible with --filter' '
cd stdin-packs &&
test_must_fail git pack-objects --stdin-packs --stdout \
--filter=blob:none </dev/null 2>err &&
test_grep "cannot use --filter with --stdin-packs" err
test_grep "options .--stdin-packs. and .--filter. cannot be used together" err
)
'