summaryrefslogtreecommitdiff
path: root/t/t1006-cat-file.sh
diff options
context:
space:
mode:
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>2021-12-28 13:28:47 (GMT)
committerJunio C Hamano <gitster@pobox.com>2021-12-30 21:05:29 (GMT)
commitb3fe468075b7f0aa40f7a22a5a50e5e3e5fb2148 (patch)
treedbecf0696bb0f308c6c9c1acfd653f41d22918c3 /t/t1006-cat-file.sh
parent485fd2c3dae9c05b43fe237f402274a59eb68e81 (diff)
downloadgit-b3fe468075b7f0aa40f7a22a5a50e5e3e5fb2148.zip
git-b3fe468075b7f0aa40f7a22a5a50e5e3e5fb2148.tar.gz
git-b3fe468075b7f0aa40f7a22a5a50e5e3e5fb2148.tar.bz2
cat-file: fix remaining usage bugs
With the migration of --batch-all-objects to OPT_CMDMODE() in the preceding commit one bug with combining it and other OPT_CMDMODE() options was solved, but we were still left with e.g. --buffer silently being discarded when not in batch mode. Fix all those bugs, and in addition emit errors telling the user specifically what options can't be combined with what other options, before this we'd usually just emit the cryptic usage text and leave the users to work it out by themselves. This change is rather large, because to do so we need to untangle the options processing so that we can not only error out, but emit sensible errors, and e.g. emit errors about options before errors about stray argc elements (as they might become valid if the option were removed). Some of the output changes ("error:" to "fatal:" with usage_msg_opt[f]()), but none of the exit codes change, except in those cases where we silently accepted bad option combinations before, now we'll error out. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t1006-cat-file.sh')
-rwxr-xr-xt/t1006-cat-file.sh41
1 files changed, 21 insertions, 20 deletions
diff --git a/t/t1006-cat-file.sh b/t/t1006-cat-file.sh
index ebec206..aa85927 100755
--- a/t/t1006-cat-file.sh
+++ b/t/t1006-cat-file.sh
@@ -24,7 +24,7 @@ done
test_incompatible_usage () {
test_expect_code 129 "$@" 2>err &&
- grep -E "^error:.**needs" err
+ grep -E "^(fatal|error):.*(requires|incompatible with|needs)" err
}
for opt in --batch --batch-check
@@ -34,48 +34,54 @@ do
'
done
+test_missing_usage () {
+ test_expect_code 129 "$@" 2>err &&
+ grep -E "^fatal:.*required" err
+}
+
short_modes="-e -p -t -s"
cw_modes="--textconv --filters"
for opt in $cw_modes
do
test_expect_success "usage: $opt requires another option" '
- test_expect_code 129 git cat-file $opt
+ test_missing_usage git cat-file $opt
'
done
for opt in $short_modes
do
test_expect_success "usage: $opt requires another option" '
- test_expect_code 129 git cat-file $opt
+ test_missing_usage git cat-file $opt
'
for opt2 in --batch \
--batch-check \
- --follow-symlinks
+ --follow-symlinks \
+ "--path=foo HEAD:some-path.txt"
do
- test_expect_failure "usage: incompatible options: $opt and $opt2" '
+ test_expect_success "usage: incompatible options: $opt and $opt2" '
test_incompatible_usage git cat-file $opt $opt2
'
done
-
- opt2="--path=foo HEAD:some-path.txt"
- test_expect_success "usage: incompatible options: $opt and $opt2" '
- test_incompatible_usage git cat-file $opt $opt2
- '
done
+test_too_many_arguments () {
+ test_expect_code 129 "$@" 2>err &&
+ grep -E "^fatal: too many arguments$" err
+}
+
for opt in $short_modes $cw_modes
do
args="one two three"
test_expect_success "usage: too many arguments: $opt $args" '
- test_expect_code 129 git cat-file $opt $args
+ test_too_many_arguments git cat-file $opt $args
'
for opt2 in --buffer --follow-symlinks
do
test_expect_success "usage: incompatible arguments: $opt with batch option $opt2" '
- test_expect_code 129 git cat-file $opt $opt2
+ test_incompatible_usage git cat-file $opt $opt2
'
done
done
@@ -84,14 +90,9 @@ for opt in --buffer \
--follow-symlinks \
--batch-all-objects
do
- status=success
- if test $opt = "--buffer"
- then
- status=failure
- fi
- test_expect_$status "usage: bad option combination: $opt without batch mode" '
- test_expect_code 129 git cat-file $opt &&
- test_expect_code 129 git cat-file $opt commit HEAD
+ test_expect_success "usage: bad option combination: $opt without batch mode" '
+ test_incompatible_usage git cat-file $opt &&
+ test_incompatible_usage git cat-file $opt commit HEAD
'
done