[PATCH/RFC 7/7] git-submodule: "update --force" to enforce cloning non-submodule
- From
Ping Yin <pkufranky@gmail.com>
- Date
- Apr 10, 2008, 15:50 UTC
- Message-ID
- <1207842625-9210-11-git-send-email-pkufranky@gmail.com>
- In-Reply-To
- <1207842625-9210-10-git-send-email-pkufranky@gmail.com>
If the update subcommand combines with --force, non-submodules (i.e. modules existing in .gitmodules or $GIT_DIR/config but not added to the super module) will be cloned and the master branch will be checked out.
However, if a non-submodule has already been cloned before, the update will be rejected since we don't know what the update means.
Signed-off-by: Ping Yin <pkufranky@gmail.com> --- git-submodule.sh | 14 +++++++++++++- 1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/git-submodule.sh b/git-submodule.sh index b4db676..153b61e 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -384,6 +384,9 @@ cmd_update() -q|--quiet) quiet=1 ;; + -f | --force) + force="$1" + ;; --) shift break @@ -406,7 +409,8 @@ cmd_update() test -z "$name" && exit_status=1 && continue if test $sha1 = 0000000000000000000000000000000000000000 then - say "Not a submodule: $name @ $path" + test -z "$force" && + say "Not a submodule: $name @ $path" && continue elif test -z "$url" then @@ -420,8 +424,15 @@ cmd_update() if ! test -d "$path"/.git then ! module_clone "$path" "$url" && exit_status=1 && continue + test "$sha1" = 0000000000000000000000000000000000000000 && + (unset GIT_DIR; cd "$path" && git checkout -q master) && + say "non-submodule cloned and master checked out: $name @ $path" && + continue subsha1= else + test "$sha1" = 0000000000000000000000000000000000000000 && + say "non-submodule already cloned: $name @ $path" && + continue subsha1=$(unset GIT_DIR; cd "$path" && git rev-parse --verify HEAD) || { @@ -431,6 +442,7 @@ cmd_update() } fi + if test "$subsha1" != "$sha1" then (unset GIT_DIR; cd "$path" && git-fetch &&
-- 1.5.5.23.g2a5f