gstreamer/scripts/git-update.sh
Krzysztof Konopko 527423fcd9 scripts: improve git-update.sh status message
By default when the script is about to exit (normally or due to an error),
it checks whether $ERROR_LOG file exists.  If the log file exists, the
script prints a "Failures: " message prefix and dumps the log file to the
output.

Apparently the log file is always created and if the update/build is
successful, the script finishes with a bit misleading "Failures: " message.

An improvement provided with this change lets the log file to be created as
needed, i.e. if there's an error message to be printed.  If the file
doesn't exists, the script prints a "Update done" message which clearly
indicates success.

https://bugzilla.gnome.org/show_bug.cgi?id=701177
2013-05-30 23:34:40 +01:00

150 lines
2.8 KiB
Bash
Executable file

#!/bin/bash
# update all known gstreamer modules
# build them one by one
# report failures at the end
# run this from a directory that contains the checkouts for each of the
# modules
PIDS=
CORE="\
gstreamer gst-plugins-base"
MODULES="\
gst-plugins-good gst-plugins-ugly gst-plugins-bad \
gst-libav"
EXTRA_MODULES="\
gst-editing-services \
gst-rtsp-server \
gst-python \
gnonlin"
tmp=${TMPDIR-/tmp}
tmp=$tmp/git-update.$(date +%Y%m%d-%H%M-).$RANDOM.$RANDOM.$RANDOM.$$
(umask 077 && mkdir "$tmp") || {
echo "Could not create temporary directory! Exiting." 1>&2
exit 1
}
ERROR_LOG="$tmp/failures.log"
ERROR_RETURN=255
for m in $CORE $MODULES $EXTRA_MODULES; do
if test -d $m; then
echo "+ updating $m"
cd $m
git pull origin master
if test $? -ne 0
then
echo "$m: update (trying stash, pull, stash apply)" >> $ERROR_LOG
git stash
git pull origin master
if test $? -ne 0
then
echo "$m: update" >> $ERROR_LOG
cd ..
continue
fi
git stash apply
fi
git submodule update
if test $? -ne 0
then
echo "$m: update (submodule)" >> $ERROR_LOG
cd ..
continue
fi
cd ..
fi
done
build()
{
if test -d $1; then
cd $1
if test ! -e Makefile
then
if test -e autoregen.sh
then
echo "+ $1: autoregen.sh"
./autoregen.sh > "$tmp/$1-regen.log" 2>&1
if test $? -ne 0
then
echo "$1: autoregen.sh [$tmp/$1-regen.log]" >> $ERROR_LOG
cd ..
return $ERROR_RETURN
fi
echo "+ $1: autoregen.sh done"
else
echo "+ $1: autogen.sh"
./autogen.sh > "$tmp/$1-gen.log" 2>&1
if test $? -ne 0
then
echo "$1: autogen.sh [$tmp/$1-gen.log]" >> $ERROR_LOG
cd ..
return $ERROR_RETURN
fi
echo "+ $1: autogen.sh done"
fi
fi
echo "+ $1: make"
make > "$tmp/$1-make.log" 2>&1
if test $? -ne 0
then
echo "$1: make [$tmp/$1-make.log]" >> $ERROR_LOG
cd ..
return $ERROR_RETURN
fi
echo "+ $1: make done"
if test "x$CHECK" != "x"; then
echo "+ $1: make check"
make check > "$tmp/$1-check.log" 2>&1
if test $? -ne 0
then
echo "$1: check [$tmp/$1-check.log]" >> $ERROR_LOG
cd ..
return
fi
echo "+ $1: make check done"
fi
cd ..
fi
}
beach()
{
if test -e $ERROR_LOG; then
echo "Failures:"
echo
cat $ERROR_LOG
else
echo "Update done"
rm -rf "$tmp"
fi
exit
}
# build core and base plugins sequentially
# exit if build fails (excluding checks)
for m in $CORE; do
build $m
if [ $? -eq $ERROR_RETURN ]; then
beach
fi
done
# build other modules in parallel
for m in $MODULES; do
build $m &
PIDS="$PIDS $!"
done
wait $PIDS
beach