From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Glen Choo" <chooglen@google.com>,
"Jonas Bernoulli" <jonas@bernoul.li>, "Jeff King" <peff@peff.net>,
"Emily Shaffer" <emilyshaffer@google.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH 03/10] git-submodule.sh: dispatch directly to helper
Date: Mon, 17 Oct 2022 14:09:18 +0200 [thread overview]
Message-ID: <patch-03.10-97cb470c96a-20221017T115544Z-avarab@gmail.com> (raw)
In-Reply-To: <cover-00.10-00000000000-20221017T115544Z-avarab@gmail.com>
Change the dispatching logic in "git-submodule.sh" for the "add",
"init", "deinit", "set-branch", "set-url", "summary" and "status"
sub-commands to do away with the argument parsing in git-submodule.sh,
and instead dispatch directly to "git submodule--helper".
As in a preceding commit the only functional change here should be
that on invalid options we'll now emit more targeted "-h" output.
The isnumber() helper function was only used in the now-removed
cmd_summary(), the same goes for the $files variable. The $custom_name
and $branch variables were only used in cmd_add().
Since there are no dashed commands anymore in git-submodule.sh we can
get rid of the "$(echo | sed ...)" one-liner to change e.g. "set-url"
to "set_url".
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
git-submodule.sh | 321 +----------------------------------------------
1 file changed, 5 insertions(+), 316 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh
index 3fdfe864d37..2bdff5119c1 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -31,20 +31,17 @@ export GIT_PROTOCOL_FROM_USER
command=
quiet=
-branch=
force=
reference=
cached=
recursive=
init=
require_init=
-files=
remote=
nofetch=
rebase=
merge=
checkout=
-custom_name=
depth=
progress=
dissociate=
@@ -53,86 +50,7 @@ jobs=
recommend_shallow=
filter=
-isnumber()
-{
- n=$(($1 + 0)) 2>/dev/null && test "$n" = "$1"
-}
-
-#
-# Add a new submodule to the working tree, .gitmodules and the index
-#
-# $@ = repo path
-#
-# optional branch is stored in global branch variable
-#
-cmd_add()
-{
- # parse $args after "submodule ... add".
- reference_path=
- while test $# -ne 0
- do
- case "$1" in
- -b | --branch)
- case "$2" in '') usage ;; esac
- branch=$2
- shift
- ;;
- -f | --force)
- force=$1
- ;;
- -q|--quiet)
- quiet=1
- ;;
- --progress)
- progress=1
- ;;
- --reference)
- case "$2" in '') usage ;; esac
- reference_path=$2
- shift
- ;;
- --reference=*)
- reference_path="${1#--reference=}"
- ;;
- --dissociate)
- dissociate=1
- ;;
- --name)
- case "$2" in '') usage ;; esac
- custom_name=$2
- shift
- ;;
- --depth)
- case "$2" in '') usage ;; esac
- depth="--depth=$2"
- shift
- ;;
- --depth=*)
- depth=$1
- ;;
- --)
- shift
- break
- ;;
- -*)
- usage
- ;;
- *)
- break
- ;;
- esac
- shift
- done
-
- if test -z "$1"
- then
- usage
- fi
-
- git ${wt_prefix:+-C "$wt_prefix"} submodule--helper add ${quiet:+--quiet} ${force:+--force} ${progress:+"--progress"} ${branch:+--branch "$branch"} ${reference_path:+--reference "$reference_path"} ${dissociate:+--dissociate} ${custom_name:+--name "$custom_name"} ${depth:+"$depth"} -- "$@"
-}
-#
# Execute an arbitrary command sequence in each checked out
# submodule
#
@@ -163,73 +81,6 @@ cmd_foreach()
git ${wt_prefix:+-C "$wt_prefix"} submodule--helper foreach ${quiet:+--quiet} ${recursive:+--recursive} -- "$@"
}
-#
-# Register submodules in .git/config
-#
-# $@ = requested paths (default to all)
-#
-cmd_init()
-{
- # parse $args after "submodule ... init".
- while test $# -ne 0
- do
- case "$1" in
- -q|--quiet)
- quiet=1
- ;;
- --)
- shift
- break
- ;;
- -*)
- usage
- ;;
- *)
- break
- ;;
- esac
- shift
- done
-
- git ${wt_prefix:+-C "$wt_prefix"} submodule--helper init ${quiet:+--quiet} -- "$@"
-}
-
-#
-# Unregister submodules from .git/config and remove their work tree
-#
-cmd_deinit()
-{
- # parse $args after "submodule ... deinit".
- deinit_all=
- while test $# -ne 0
- do
- case "$1" in
- -f|--force)
- force=$1
- ;;
- -q|--quiet)
- quiet=1
- ;;
- --all)
- deinit_all=t
- ;;
- --)
- shift
- break
- ;;
- -*)
- usage
- ;;
- *)
- break
- ;;
- esac
- shift
- done
-
- git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit ${quiet:+--quiet} ${force:+--force} ${deinit_all:+--all} -- "$@"
-}
-
#
# Update each submodule path to correct revision, using clone and checkout as needed
#
@@ -360,168 +211,6 @@ cmd_update()
"$@"
}
-#
-# Configures a submodule's default branch
-#
-# $@ = requested path
-#
-cmd_set_branch() {
- default=
- branch=
-
- while test $# -ne 0
- do
- case "$1" in
- -q|--quiet)
- # we don't do anything with this but we need to accept it
- ;;
- -d|--default)
- default=1
- ;;
- -b|--branch)
- case "$2" in '') usage ;; esac
- branch=$2
- shift
- ;;
- --)
- shift
- break
- ;;
- -*)
- usage
- ;;
- *)
- break
- ;;
- esac
- shift
- done
-
- git ${wt_prefix:+-C "$wt_prefix"} submodule--helper set-branch ${quiet:+--quiet} ${branch:+--branch "$branch"} ${default:+--default} -- "$@"
-}
-
-#
-# Configures a submodule's remote url
-#
-# $@ = requested path, requested url
-#
-cmd_set_url() {
- while test $# -ne 0
- do
- case "$1" in
- -q|--quiet)
- quiet=1
- ;;
- --)
- shift
- break
- ;;
- -*)
- usage
- ;;
- *)
- break
- ;;
- esac
- shift
- done
-
- git ${wt_prefix:+-C "$wt_prefix"} submodule--helper set-url ${quiet:+--quiet} -- "$@"
-}
-
-#
-# Show commit summary for submodules in index or working tree
-#
-# If '--cached' is given, show summary between index and given commit,
-# or between working tree and given commit
-#
-# $@ = [commit (default 'HEAD'),] requested paths (default all)
-#
-cmd_summary() {
- summary_limit=-1
- for_status=
- diff_cmd=diff-index
-
- # parse $args after "submodule ... summary".
- while test $# -ne 0
- do
- case "$1" in
- --cached)
- cached=1
- ;;
- --files)
- files="$1"
- ;;
- --for-status)
- for_status="$1"
- ;;
- -n|--summary-limit)
- summary_limit="$2"
- isnumber "$summary_limit" || usage
- shift
- ;;
- --summary-limit=*)
- summary_limit="${1#--summary-limit=}"
- isnumber "$summary_limit" || usage
- ;;
- --)
- shift
- break
- ;;
- -*)
- usage
- ;;
- *)
- break
- ;;
- esac
- shift
- done
-
- git ${wt_prefix:+-C "$wt_prefix"} submodule--helper summary ${files:+--files} ${cached:+--cached} ${for_status:+--for-status} ${summary_limit:+-n $summary_limit} -- "$@"
-}
-#
-# List all submodules, prefixed with:
-# - submodule not initialized
-# + different revision checked out
-#
-# If --cached was specified the revision in the index will be printed
-# instead of the currently checked out revision.
-#
-# $@ = requested paths (default to all)
-#
-cmd_status()
-{
- # parse $args after "submodule ... status".
- while test $# -ne 0
- do
- case "$1" in
- -q|--quiet)
- quiet=1
- ;;
- --cached)
- cached=1
- ;;
- --recursive)
- recursive=1
- ;;
- --)
- shift
- break
- ;;
- -*)
- usage
- ;;
- *)
- break
- ;;
- esac
- shift
- done
-
- git ${wt_prefix:+-C "$wt_prefix"} submodule--helper status ${quiet:+--quiet} ${cached:+--cached} ${recursive:+--recursive} -- "$@"
-}
-
# This loop parses the command line arguments to find the
# subcommand name to dispatch. Parsing of the subcommand specific
# options are primarily done by the subcommand implementations.
@@ -574,11 +263,11 @@ case "$command" in
absorbgitdirs)
git submodule--helper "$command" --prefix "$wt_prefix" "$@"
;;
-sync)
- git ${wt_prefix:+-C "$wt_prefix"} submodule--helper "$command" \
- ${quiet:+--quiet} "$@"
+foreach | update)
+ "cmd_$command" "$@"
;;
-*)
- "cmd_$(echo $command | sed -e s/-/_/g)" "$@"
+add | init | deinit | set-branch | set-url | status | summary | sync)
+ git ${wt_prefix:+-C "$wt_prefix"} submodule--helper "$command" \
+ ${quiet:+--quiet} ${cached:+--cached} "$@"
;;
esac
--
2.38.0.1091.gf9d18265e59
next prev parent reply other threads:[~2022-10-17 12:09 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-17 12:09 [PATCH 00/10] submodule: make it a built-in, remove git-submodule.sh Ævar Arnfjörð Bjarmason
2022-10-17 12:09 ` [PATCH 01/10] git-submodule.sh: create a "case" dispatch statement Ævar Arnfjörð Bjarmason
2022-10-17 12:09 ` [PATCH 02/10] git-submodule.sh: dispatch "sync" to helper Ævar Arnfjörð Bjarmason
2022-10-20 20:42 ` Glen Choo
2022-10-17 12:09 ` Ævar Arnfjörð Bjarmason [this message]
2022-10-17 12:09 ` [PATCH 04/10] git-submodule.sh: dispatch "foreach" " Ævar Arnfjörð Bjarmason
2022-10-20 21:14 ` Glen Choo
2022-10-17 12:09 ` [PATCH 05/10] git-submodule.sh: dispatch "update" " Ævar Arnfjörð Bjarmason
2022-10-20 21:50 ` Glen Choo
2022-10-17 12:09 ` [PATCH 06/10] git-submodule.sh: don't support top-level "--cached" Ævar Arnfjörð Bjarmason
2022-10-20 22:14 ` Glen Choo
2022-10-17 12:09 ` [PATCH 07/10] submodule: make it a built-in, remove git-submodule.sh Ævar Arnfjörð Bjarmason
2022-10-20 22:49 ` Glen Choo
2022-10-17 12:09 ` [PATCH 08/10] submodule: support "--" with no other arguments Ævar Arnfjörð Bjarmason
2022-10-17 12:09 ` [PATCH 09/10] submodule: support sub-command-less "--recursive" option Ævar Arnfjörð Bjarmason
2022-10-20 23:05 ` Glen Choo
2022-10-17 12:09 ` [PATCH 10/10] submodule: don't use a subprocess to invoke "submodule--helper" Ævar Arnfjörð Bjarmason
2022-10-20 23:18 ` Glen Choo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=patch-03.10-97cb470c96a-20221017T115544Z-avarab@gmail.com \
--to=avarab@gmail.com \
--cc=chooglen@google.com \
--cc=emilyshaffer@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonas@bernoul.li \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).