Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 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 | |
Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 6 | substat=".git-submodule-status" |
| 7 | |
| 8 | command=$1 |
| 9 | shift |
Daniel P. Berrange | 37b5e74 | 2017-10-27 10:49:58 +0100 | [diff] [blame] | 10 | maybe_modules="$@" |
Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 11 | |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 12 | # if --with-git-submodules=ignore, do nothing |
| 13 | test "$command" = "ignore" && exit 0 |
| 14 | |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 15 | test -z "$GIT" && GIT=git |
| 16 | |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 17 | cd "$(dirname "$0")/.." |
| 18 | |
| 19 | update_error() { |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 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 |
Daniel P. Berrange | f62bbee | 2017-10-26 13:52:26 +0100 | [diff] [blame] | 29 | echo "Alternatively you may disable automatic GIT submodule checkout" |
| 30 | echo "with:" |
| 31 | echo |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 32 | echo " $ ./configure --with-git-submodules=validate" |
Daniel P. Berrange | f62bbee | 2017-10-26 13:52:26 +0100 | [diff] [blame] | 33 | echo |
| 34 | echo "and then manually update submodules prior to running make, with:" |
| 35 | echo |
Laurent Vivier | bff8a0b | 2018-01-19 11:32:33 +0100 | [diff] [blame] | 36 | echo " $ scripts/git-submodule.sh update $modules" |
Daniel P. Berrange | f62bbee | 2017-10-26 13:52:26 +0100 | [diff] [blame] | 37 | echo |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 38 | exit 1 |
| 39 | } |
| 40 | |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 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 | |
Daniel P. Berrange | 37b5e74 | 2017-10-27 10:49:58 +0100 | [diff] [blame] | 54 | modules="" |
| 55 | for m in $maybe_modules |
| 56 | do |
| 57 | $GIT submodule status $m 1> /dev/null 2>&1 |
| 58 | if test $? = 0 |
| 59 | then |
| 60 | modules="$modules $m" |
| 61 | else |
| 62 | echo "warn: ignoring non-existent submodule $m" |
| 63 | fi |
| 64 | done |
| 65 | |
Daniel P. Berrange | 49ad3cf | 2017-10-30 09:29:29 +0100 | [diff] [blame] | 66 | if test -n "$maybe_modules" && ! test -e ".git" |
Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 67 | then |
| 68 | echo "$0: unexpectedly called with submodules but no git checkout exists" |
| 69 | exit 1 |
| 70 | fi |
| 71 | |
| 72 | case "$command" in |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 73 | status|validate) |
Daniel P. Berrange | 49ad3cf | 2017-10-30 09:29:29 +0100 | [diff] [blame] | 74 | if test -z "$maybe_modules" |
| 75 | then |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 76 | test -s ${substat} && validate_error "$command" || exit 0 |
Daniel P. Berrange | 49ad3cf | 2017-10-30 09:29:29 +0100 | [diff] [blame] | 77 | fi |
| 78 | |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 79 | test -f "$substat" || validate_error "$command" |
Juan Quintela | 1a920d2 | 2020-01-29 11:21:13 +0100 | [diff] [blame] | 80 | for module in $modules; do |
| 81 | CURSTATUS=$($GIT submodule status $module) |
| 82 | OLDSTATUS=$(cat $substat | grep $module) |
| 83 | if test "$CURSTATUS" != "$OLDSTATUS"; then |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 84 | validate_error "$command" |
Juan Quintela | 1a920d2 | 2020-01-29 11:21:13 +0100 | [diff] [blame] | 85 | fi |
| 86 | done |
| 87 | exit 0 |
Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 88 | ;; |
| 89 | update) |
Daniel P. Berrange | 49ad3cf | 2017-10-30 09:29:29 +0100 | [diff] [blame] | 90 | if test -z "$maybe_modules" |
| 91 | then |
| 92 | test -e $substat || touch $substat |
| 93 | exit 0 |
| 94 | fi |
| 95 | |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 96 | $GIT submodule update --init $modules 1>/dev/null |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 97 | test $? -ne 0 && update_error "failed to update modules" |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 98 | |
| 99 | $GIT submodule status $modules > "${substat}" |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 100 | test $? -ne 0 && update_error "failed to save git submodule status" >&2 |
Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 101 | ;; |
| 102 | esac |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 103 | |
| 104 | exit 0 |