git-submodule.sh (2743B)
1 #!/bin/sh 2 # 3 # This code is licensed under the GPL version 2 or later. See 4 # the COPYING file in the top-level directory. 5 6 substat=".git-submodule-status" 7 8 command=$1 9 shift 10 maybe_modules="$@" 11 12 # if --with-git-submodules=ignore, do nothing 13 test "$command" = "ignore" && exit 0 14 15 test -z "$GIT" && GIT=git 16 17 cd "$(dirname "$0")/.." 18 19 update_error() { 20 echo "$0: $*" 21 echo 22 echo "Unable to automatically checkout GIT submodules '$modules'." 23 echo "If you require use of an alternative GIT binary (for example to" 24 echo "enable use of a transparent proxy), then please specify it by" 25 echo "running configure by with the '--with-git' argument. e.g." 26 echo 27 echo " $ ./configure --with-git='tsocks git'" 28 echo 29 echo "Alternatively you may disable automatic GIT submodule checkout" 30 echo "with:" 31 echo 32 echo " $ ./configure --with-git-submodules=validate" 33 echo 34 echo "and then manually update submodules prior to running make, with:" 35 echo 36 echo " $ scripts/git-submodule.sh update $modules" 37 echo 38 exit 1 39 } 40 41 validate_error() { 42 if test "$1" = "validate"; then 43 echo "GIT submodules checkout is out of date, and submodules" 44 echo "configured for validate only. Please run" 45 echo " scripts/git-submodule.sh update $maybe_modules" 46 echo "from the source directory or call configure with" 47 echo " --with-git-submodules=update" 48 echo "To disable GIT submodules validation, use" 49 echo " --with-git-submodules=ignore" 50 fi 51 exit 1 52 } 53 54 if test -n "$maybe_modules" && ! test -e ".git" 55 then 56 echo "$0: unexpectedly called with submodules but no git checkout exists" 57 exit 1 58 fi 59 60 modules="" 61 for m in $maybe_modules 62 do 63 $GIT submodule status $m 1> /dev/null 2>&1 64 if test $? = 0 65 then 66 modules="$modules $m" 67 else 68 echo "warn: ignoring non-existent submodule $m" 69 fi 70 done 71 72 case "$command" in 73 status|validate) 74 if test -z "$maybe_modules" 75 then 76 test -s ${substat} && validate_error "$command" || exit 0 77 fi 78 79 test -f "$substat" || validate_error "$command" 80 for module in $modules; do 81 CURSTATUS=$($GIT submodule status $module) 82 OLDSTATUS=$(cat $substat | grep $module) 83 if test "$CURSTATUS" != "$OLDSTATUS"; then 84 validate_error "$command" 85 fi 86 done 87 exit 0 88 ;; 89 update) 90 if test -z "$maybe_modules" 91 then 92 test -e $substat || touch $substat 93 exit 0 94 fi 95 96 $GIT submodule update --init $modules 1>/dev/null 97 test $? -ne 0 && update_error "failed to update modules" 98 99 $GIT submodule status $modules > "${substat}" 100 test $? -ne 0 && update_error "failed to save git submodule status" >&2 101 ;; 102 esac 103 104 exit 0