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 | |
Paolo Bonzini | 8edddaa | 2023-06-18 23:10:39 +0200 | [diff] [blame] | 12 | test -z "$maybe_modules" && exit 0 |
Paolo Bonzini | 50cfed8 | 2023-05-25 12:36:28 +0200 | [diff] [blame] | 13 | test -z "$GIT" && GIT=$(command -v git) |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 14 | |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 15 | cd "$(dirname "$0")/.." |
| 16 | |
Paolo Bonzini | 8edddaa | 2023-06-18 23:10:39 +0200 | [diff] [blame] | 17 | no_git_error= |
| 18 | if ! test -e ".git"; then |
| 19 | no_git_error='no git checkout exists' |
| 20 | elif test -z "$GIT"; then |
| 21 | no_git_error='git binary not found' |
| 22 | fi |
| 23 | |
| 24 | is_git() { |
| 25 | test -z "$no_git_error" |
| 26 | } |
| 27 | |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 28 | update_error() { |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 29 | echo "$0: $*" |
| 30 | echo |
| 31 | echo "Unable to automatically checkout GIT submodules '$modules'." |
| 32 | echo "If you require use of an alternative GIT binary (for example to" |
Paolo Bonzini | 50cfed8 | 2023-05-25 12:36:28 +0200 | [diff] [blame] | 33 | echo "enable use of a transparent proxy), please disable automatic" |
| 34 | echo "GIT submodule checkout with:" |
Daniel P. Berrange | f62bbee | 2017-10-26 13:52:26 +0100 | [diff] [blame] | 35 | echo |
Paolo Bonzini | 6f3ae23 | 2023-05-30 16:03:50 +0200 | [diff] [blame] | 36 | echo " $ ./configure --disable-download" |
Daniel P. Berrange | f62bbee | 2017-10-26 13:52:26 +0100 | [diff] [blame] | 37 | echo |
| 38 | echo "and then manually update submodules prior to running make, with:" |
| 39 | echo |
Paolo Bonzini | 50cfed8 | 2023-05-25 12:36:28 +0200 | [diff] [blame] | 40 | echo " $ GIT='tsocks git' scripts/git-submodule.sh update $modules" |
Daniel P. Berrange | f62bbee | 2017-10-26 13:52:26 +0100 | [diff] [blame] | 41 | echo |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 42 | exit 1 |
| 43 | } |
| 44 | |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 45 | validate_error() { |
Paolo Bonzini | 8edddaa | 2023-06-18 23:10:39 +0200 | [diff] [blame] | 46 | if is_git && test "$1" = "validate"; then |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 47 | echo "GIT submodules checkout is out of date, and submodules" |
| 48 | echo "configured for validate only. Please run" |
| 49 | echo " scripts/git-submodule.sh update $maybe_modules" |
| 50 | echo "from the source directory or call configure with" |
Paolo Bonzini | 6f3ae23 | 2023-05-30 16:03:50 +0200 | [diff] [blame] | 51 | echo " --enable-download" |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 52 | fi |
| 53 | exit 1 |
| 54 | } |
| 55 | |
Paolo Bonzini | d120116 | 2023-05-30 17:27:48 +0200 | [diff] [blame] | 56 | check_updated() { |
| 57 | local CURSTATUS OLDSTATUS |
| 58 | CURSTATUS=$($GIT submodule status $module) |
| 59 | OLDSTATUS=$(grep $module $substat) |
| 60 | test "$CURSTATUS" = "$OLDSTATUS" |
| 61 | } |
| 62 | |
Paolo Bonzini | 8edddaa | 2023-06-18 23:10:39 +0200 | [diff] [blame] | 63 | if is_git; then |
| 64 | test -e $substat || touch $substat |
| 65 | modules="" |
| 66 | for m in $maybe_modules |
| 67 | do |
| 68 | $GIT submodule status $m 1> /dev/null 2>&1 |
| 69 | if test $? = 0 |
| 70 | then |
| 71 | modules="$modules $m" |
| 72 | grep $m $substat > /dev/null 2>&1 || $GIT submodule status $module >> $substat |
| 73 | else |
| 74 | echo "warn: ignoring non-existent submodule $m" |
| 75 | fi |
| 76 | done |
| 77 | else |
| 78 | modules=$maybe_modules |
Daniel P. Berrangé | dd84a90 | 2022-04-26 14:06:49 +0100 | [diff] [blame] | 79 | fi |
| 80 | |
Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 81 | case "$command" in |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 82 | status|validate) |
Juan Quintela | 1a920d2 | 2020-01-29 11:21:13 +0100 | [diff] [blame] | 83 | for module in $modules; do |
Paolo Bonzini | 8edddaa | 2023-06-18 23:10:39 +0200 | [diff] [blame] | 84 | if is_git; then |
| 85 | check_updated $module || validate_error "$command" |
| 86 | elif ! (set xyz "$module"/* && test -e "$2"); then |
| 87 | # The directory does not exist or it contains no files |
| 88 | echo "$0: sources not available for $module and $no_git_error" |
| 89 | validate_error "$command" |
| 90 | fi |
Juan Quintela | 1a920d2 | 2020-01-29 11:21:13 +0100 | [diff] [blame] | 91 | done |
Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 92 | ;; |
Paolo Bonzini | 8edddaa | 2023-06-18 23:10:39 +0200 | [diff] [blame] | 93 | |
Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 94 | update) |
Paolo Bonzini | 8edddaa | 2023-06-18 23:10:39 +0200 | [diff] [blame] | 95 | is_git || { |
| 96 | echo "$0: unexpectedly called with submodules but $no_git_error" |
| 97 | exit 1 |
| 98 | } |
Daniel P. Berrange | 49ad3cf | 2017-10-30 09:29:29 +0100 | [diff] [blame] | 99 | |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 100 | $GIT submodule update --init $modules 1>/dev/null |
Dan Streetman | 7d7dbf9 | 2021-01-19 12:20:46 -0500 | [diff] [blame] | 101 | test $? -ne 0 && update_error "failed to update modules" |
Paolo Bonzini | d120116 | 2023-05-30 17:27:48 +0200 | [diff] [blame] | 102 | for module in $modules; do |
| 103 | check_updated $module || echo Updated "$module" |
| 104 | done |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 105 | |
Paolo Bonzini | fdb8fd8 | 2023-05-30 17:10:29 +0200 | [diff] [blame] | 106 | (while read -r; do |
| 107 | for module in $modules; do |
| 108 | case $REPLY in |
| 109 | *" $module "*) continue 2 ;; |
| 110 | esac |
| 111 | done |
| 112 | printf '%s\n' "$REPLY" |
| 113 | done |
| 114 | $GIT submodule status $modules |
| 115 | test $? -ne 0 && update_error "failed to save git submodule status" >&2) < $substat > $substat.new |
| 116 | mv -f $substat.new $substat |
Daniel P. Berrange | aef45d5 | 2017-09-29 11:11:56 +0100 | [diff] [blame] | 117 | ;; |
| 118 | esac |
Daniel P. Berrange | cc84d63 | 2017-10-20 15:02:43 +0100 | [diff] [blame] | 119 | |
| 120 | exit 0 |