summary refs log tree commit diff stats
path: root/scripts/git-submodule.sh
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2017-11-07 11:42:57 +0000
committerPeter Maydell <peter.maydell@linaro.org>2017-11-07 11:42:57 +0000
commit0e82cdd0121efcb0d5bb968eaaecd009c3d69044 (patch)
treeb1c30b630c7fa28393b4f3982e94c88cb3b49e5c /scripts/git-submodule.sh
parentd2b8c0910e356f48fa02fe57d04ed29766fe8732 (diff)
parentc4b01c7c5171e9f77ed4ed6d9b4f63845410f641 (diff)
downloadfocaccia-qemu-0e82cdd0121efcb0d5bb968eaaecd009c3d69044.tar.gz
focaccia-qemu-0e82cdd0121efcb0d5bb968eaaecd009c3d69044.zip
Merge remote-tracking branch 'remotes/berrange/tags/pull-build-2017-11-07-1' into staging
Merge build 2017/11/07 v1

# gpg: Signature made Tue 07 Nov 2017 10:14:49 GMT
# gpg:                using RSA key 0xBE86EBB415104FDF
# gpg: Good signature from "Daniel P. Berrange <dan@berrange.com>"
# gpg:                 aka "Daniel P. Berrange <berrange@redhat.com>"
# Primary key fingerprint: DAF3 A6FD B26B 6291 2D0E  8E3F BE86 EBB4 1510 4FDF

* remotes/berrange/tags/pull-build-2017-11-07-1:
  build: remove use of MAKELEVEL optimization in submodule handling
  build: delay check for empty git submodule list
  build: don't fail if given a git submodule which does not exist
  build: allow automatic git submodule updates to be disabled
  build: don't create temporary files in source dir
  build: allow setting a custom GIT binary for transparent proxying

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'scripts/git-submodule.sh')
-rwxr-xr-xscripts/git-submodule.sh72
1 files changed, 58 insertions, 14 deletions
diff --git a/scripts/git-submodule.sh b/scripts/git-submodule.sh
index 08932a35f0..030617b4ac 100755
--- a/scripts/git-submodule.sh
+++ b/scripts/git-submodule.sh
@@ -3,21 +3,49 @@
 # This code is licensed under the GPL version 2 or later.  See
 # the COPYING file in the top-level directory.
 
-set -e
-
 substat=".git-submodule-status"
 
 command=$1
 shift
-modules="$@"
+maybe_modules="$@"
 
-if test -z "$modules"
-then
-    test -e $substat || touch $substat
-    exit 0
-fi
+test -z "$GIT" && GIT=git
+
+error() {
+    echo "$0: $*"
+    echo
+    echo "Unable to automatically checkout GIT submodules '$modules'."
+    echo "If you require use of an alternative GIT binary (for example to"
+    echo "enable use of a transparent proxy), then please specify it by"
+    echo "running configure by with the '--with-git' argument. e.g."
+    echo
+    echo " $ ./configure --with-git='tsocks git'"
+    echo
+    echo "Alternatively you may disable automatic GIT submodule checkout"
+    echo "with:"
+    echo
+    echo " $ ./configure --disable-git-update'"
+    echo
+    echo "and then manually update submodules prior to running make, with:"
+    echo
+    echo " $ scripts/git-sbumodule.sh update $modules"
+    echo
+    exit 1
+}
 
-if ! test -e ".git"
+modules=""
+for m in $maybe_modules
+do
+    $GIT submodule status $m 1> /dev/null 2>&1
+    if test $? = 0
+    then
+        modules="$modules $m"
+    else
+        echo "warn: ignoring non-existent submodule $m"
+    fi
+done
+
+if test -n "$maybe_modules" && ! test -e ".git"
 then
     echo "$0: unexpectedly called with submodules but no git checkout exists"
     exit 1
@@ -25,14 +53,30 @@ fi
 
 case "$command" in
 status)
+    if test -z "$maybe_modules"
+    then
+         test -s ${substat} && exit 1 || exit 0
+    fi
+
     test -f "$substat" || exit 1
-    trap "rm -f ${substat}.tmp" EXIT
-    git submodule status $modules > "${substat}.tmp"
-    diff "${substat}" "${substat}.tmp" >/dev/null
+    CURSTATUS=`$GIT submodule status $modules`
+    OLDSTATUS=`cat $substat`
+    test "$CURSTATUS" = "$OLDSTATUS"
     exit $?
     ;;
 update)
-    git submodule update --init $modules 1>/dev/null
-    git submodule status $modules > "${substat}"
+    if test -z "$maybe_modules"
+    then
+        test -e $substat || touch $substat
+        exit 0
+    fi
+
+    $GIT submodule update --init $modules 1>/dev/null
+    test $? -ne 0 && error "failed to update modules"
+
+    $GIT submodule status $modules > "${substat}"
+    test $? -ne 0 && error "failed to save git submodule status" >&2
     ;;
 esac
+
+exit 0