Signed-off-by: Lars Hjemli <hjemli@gmail.com>upstream
parent
95eaf2735e
commit
79f0c10df1
@ -1,5 +1,3 @@ |
||||
# This file maps a submodule path to an url from where the submodule |
||||
# can be obtained. The script "submodules.sh" finds the url in this file |
||||
# when invoked with -i to clone the submodules. |
||||
|
||||
git git://git.kernel.org/pub/scm/git/git.git |
||||
[submodule "git"] |
||||
url = git://git.kernel.org/pub/scm/git/git.git |
||||
path = git |
||||
|
@ -1,181 +0,0 @@ |
||||
#!/bin/sh |
||||
# |
||||
# submodules.sh: init, update or list git submodules |
||||
# |
||||
# Copyright (C) 2006 Lars Hjemli |
||||
# |
||||
# Licensed under GNU General Public License v2 |
||||
# (see COPYING for full license text) |
||||
# |
||||
|
||||
|
||||
usage="submodules.sh [-i | -u] [-q] [--cached] [path...]" |
||||
init= |
||||
update= |
||||
quiet= |
||||
cached= |
||||
|
||||
|
||||
say() |
||||
{ |
||||
if test -z "$quiet" |
||||
then |
||||
echo -e "$@" |
||||
fi |
||||
} |
||||
|
||||
|
||||
die() |
||||
{ |
||||
echo >&2 -e "$@" |
||||
exit 1 |
||||
} |
||||
|
||||
|
||||
|
||||
# |
||||
# Silently checkout specified submodule revision, return exit status of git-checkout |
||||
# |
||||
# $1 = local path |
||||
# $2 = requested sha1 |
||||
# |
||||
module_checkout() |
||||
{ |
||||
$(cd "$1" && git checkout "$2" 1>/dev/null 2>/dev/null) |
||||
} |
||||
|
||||
|
||||
# |
||||
# Find all (requested) submodules, run clone + checkout on missing paths |
||||
# |
||||
# $@ = requested paths (default to all) |
||||
# |
||||
modules_init() |
||||
{ |
||||
git ls-files --stage -- $@ | grep -e '^160000 ' | |
||||
while read mode sha1 stage path |
||||
do |
||||
test -d "$path/.git" && continue |
||||
|
||||
if test -d "$path" |
||||
then |
||||
rmdir "$path" 2>/dev/null || |
||||
die "Directory '$path' exist, but not as a submodule" |
||||
fi |
||||
|
||||
test -e "$path" && die "A file already exist at path '$path'" |
||||
|
||||
url=$(sed -nre "s/^$path[ \t]+//p" .gitmodules) |
||||
test -z "$url" && die "No url found for $path in .gitmodules" |
||||
|
||||
git clone "$url" "$path" || die "Clone of submodule '$path' failed" |
||||
module_checkout "$path" "$sha1" || die "Checkout of submodule '$path' failed" |
||||
say "Submodule '$path' initialized" |
||||
done |
||||
} |
||||
|
||||
# |
||||
# Checkout correct revision of each initialized submodule |
||||
# |
||||
# $@ = requested paths (default to all) |
||||
# |
||||
modules_update() |
||||
{ |
||||
git ls-files --stage -- $@ | grep -e '^160000 ' | |
||||
while read mode sha1 stage path |
||||
do |
||||
if ! test -d "$path/.git" |
||||
then |
||||
say "Submodule '$path' not initialized" |
||||
continue; |
||||
fi |
||||
subsha1=$(cd "$path" && git rev-parse --verify HEAD) || |
||||
die "Unable to find current revision of submodule '$path'" |
||||
if test "$subsha1" != "$sha1" |
||||
then |
||||
module_checkout "$path" "$sha1" || |
||||
die "Unable to checkout revision $sha1 of submodule '$path'" |
||||
say "Submodule '$path' reset to revision $sha1" |
||||
fi |
||||
done |
||||
} |
||||
|
||||
# |
||||
# List all registered submodules, prefixed with: |
||||
# - submodule not initialized |
||||
# + different version 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) |
||||
# |
||||
modules_list() |
||||
{ |
||||
git ls-files --stage -- $@ | grep -e '^160000 ' | |
||||
while read mode sha1 stage path |
||||
do |
||||
if ! test -d "$path/.git" |
||||
then |
||||
say "-$sha1 $path" |
||||
continue; |
||||
fi |
||||
revname=$(cd "$path" && git describe $sha1) |
||||
if git diff-files --quiet -- "$path" |
||||
then |
||||
say " $sha1 $path\t($revname)" |
||||
else |
||||
if test -z "$cached" |
||||
then |
||||
sha1=$(cd "$path" && git rev-parse HEAD) |
||||
revname=$(cd "$path" && git describe HEAD) |
||||
fi |
||||
say "+$sha1 $path\t($revname)" |
||||
fi |
||||
done |
||||
} |
||||
|
||||
|
||||
while case "$#" in 0) break ;; esac |
||||
do |
||||
case "$1" in |
||||
-i) |
||||
init=1 |
||||
;; |
||||
-u) |
||||
update=1 |
||||
;; |
||||
-q) |
||||
quiet=1 |
||||
;; |
||||
--cached) |
||||
cached=1 |
||||
;; |
||||
--) |
||||
break |
||||
;; |
||||
-*) |
||||
echo "Usage: $usage" |
||||
exit 1 |
||||
;; |
||||
--*) |
||||
echo "Usage: $usage" |
||||
exit 1 |
||||
;; |
||||
*) |
||||
break |
||||
;; |
||||
esac |
||||
shift |
||||
done |
||||
|
||||
|
||||
if test "$init" = "1" |
||||
then |
||||
modules_init $@ |
||||
elif test "$update" = "1" |
||||
then |
||||
modules_update $@ |
||||
else |
||||
modules_list $@ |
||||
fi |
Loading…
Reference in new issue