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 |
[submodule "git"] |
||||||
# can be obtained. The script "submodules.sh" finds the url in this file |
url = git://git.kernel.org/pub/scm/git/git.git |
||||||
# when invoked with -i to clone the submodules. |
path = git |
||||||
|
|
||||||
git git://git.kernel.org/pub/scm/git/git.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