]> git.ipfire.org Git - thirdparty/git.git/commitdiff
pack-objects: use standard option incompatibility functions
authorTaylor Blau <me@ttaylorr.com>
Mon, 23 Jun 2025 22:32:10 +0000 (18:32 -0400)
committerJunio C Hamano <gitster@pobox.com>
Mon, 23 Jun 2025 22:41:35 +0000 (15:41 -0700)
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>
builtin/pack-objects.c
t/t5331-pack-objects-stdin.sh

index 67941c8a603ae4775bca5835667b77c9c5f1aba1..e7274e0e0094166ca5a45e45603e0a4a883060e4 100644 (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");
        }
 
        /*
index b48c0cbe8fcfabc4fbc0074e10c52c5daffdc4c6..8fd07deb8d001ed209355631ddb697298e287d49 100755 (executable)
@@ -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
        )
 '