[PATCH 06/10] git-submodule.sh: don't support top-level "--cached"
From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2022-10-17 12:09:53
Subsystem:
the rest · Maintainer:
Linus Torvalds
Since the preceding commit all sub-commands of "git submodule" have
been dispatched to "git submodule--helper" directly, we therefore
don't need to emit "usage()" if we see "--cached" without the
sub-command being "status" or "summary", we can trust that
parse_options() will spot that and barf on it.
This does change one obscure aspect of undocumented behavior, for
"status" and "summary" we supported these undocumented forms:
git submodule --cached (status | summary)
As noted in a preceding commit to git-submodule.sh which removed the
"--branch" special-case, this comes down to emergent behavior seen in
5c08dbbdf1a (git-submodule: fix subcommand parser,
2008-01-15). I.e. we wanted to support was for subcommand-less invocations like:
git submodule --cached
To be synonymous with invocations that explicitly named the "status"
sub-command:
git submodule status --cached
But we did not intend to mix the two, and allow "--cached" to be an
option to the top-level "submodule" command when the "status" or
"summary" sub-commands were explicitly provided.
Let's remove this undocumented edge case, which makes a subsequent
removal of git-submodule.sh easier to reason about. The test case
added here is duplicated from the existing for-loop, except for the
different and desired handling of "git submodule --cached status".
Signed-off-by: Ævar Arnfjörð Bjarmason <redacted>
---
git-submodule.sh | 15 ++++++++-------
t/t7400-submodule-basic.sh | 15 +++++++++++++--
2 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index ac2f95c1285..4f8f62ce981 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh@@ -43,7 +43,14 @@ do quiet=1 ;; --cached) - cached=1 + if test -z "$command" + then + cached=1 && + shift && + break + else + usage + fi ;; --) break
@@ -69,12 +76,6 @@ then fi fi -# "--cached" is accepted only by "status" and "summary" -if test -n "$cached" && test "$command" != status && test "$command" != summary -then - usage -fi - case "$command" in absorbgitdirs) git submodule--helper "$command" --prefix "$wt_prefix" "$@"
diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index b50db3f1031..d8f7d6ee29a 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh@@ -31,7 +31,7 @@ test_expect_success 'submodule usage: status --' ' test_expect_code 1 git submodule --end-of-options ' -for opt in '--quiet' '--cached' +for opt in '--quiet' do test_expect_success "submodule usage: status $opt" ' git submodule $opt &&
@@ -40,6 +40,17 @@ do ' done +for opt in '--cached' +do + test_expect_success "submodule usage: status $opt" ' + git submodule $opt && + git submodule status $opt && + test_expect_code 1 git submodule $opt status >out 2>err && + grep "^usage: git submodule" err && + test_must_be_empty out + ' +done + test_expect_success 'submodule deinit works on empty repository' ' git submodule deinit --all '
@@ -576,7 +587,7 @@ test_expect_success 'status should be "modified" after submodule commit' ' ' test_expect_success 'the --cached sha1 should be rev1' ' - git submodule --cached status >list && + git submodule status --cached >list && grep "^+$rev1" list '
--
2.38.0.1091.gf9d18265e59