179 lines
3.9 KiB
Plaintext
179 lines
3.9 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
# A simple script to checkout or update a svn or git repo as source service
|
||
|
|
||
|
# defaults
|
||
|
MYSCM=""
|
||
|
MYURL=""
|
||
|
MYVERSION=""
|
||
|
MYPREFIX=""
|
||
|
MYFILENAME=""
|
||
|
MYREVISION=""
|
||
|
|
||
|
while test $# -gt 0; do
|
||
|
case $1 in
|
||
|
*-scm)
|
||
|
MYSCM="$2"
|
||
|
shift
|
||
|
;;
|
||
|
*-url)
|
||
|
MYURL="$2"
|
||
|
shift
|
||
|
;;
|
||
|
*-subdir)
|
||
|
MYSUBDIR="$2"
|
||
|
shift
|
||
|
;;
|
||
|
*-revision)
|
||
|
MYREVISION="$2"
|
||
|
shift
|
||
|
;;
|
||
|
*-version)
|
||
|
MYVERSION="$2"
|
||
|
shift
|
||
|
;;
|
||
|
*-versionprefix)
|
||
|
MYPREFIX="$2"
|
||
|
shift
|
||
|
;;
|
||
|
*-filename)
|
||
|
MYFILENAME="${2#/}"
|
||
|
shift
|
||
|
;;
|
||
|
*-outdir)
|
||
|
MYOUTDIR="$2"
|
||
|
shift
|
||
|
;;
|
||
|
*)
|
||
|
echo Unknown parameter $1.
|
||
|
echo 'Usage: tar_scm --scm $SCM --url $URL --outdir $OUT'
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
shift
|
||
|
done
|
||
|
|
||
|
FILE="$FILENAME"
|
||
|
VERSION="$MYVERSION"
|
||
|
|
||
|
if [ -z "$MYSCM" ]; then
|
||
|
echo "ERROR: no scm is given via --scm parameter (git/svn)!"
|
||
|
exit 1
|
||
|
fi
|
||
|
if [ -z "$MYURL" ]; then
|
||
|
echo "ERROR: no checkout URL is given via --url parameter!"
|
||
|
exit 1
|
||
|
fi
|
||
|
if [ -z "$MYOUTDIR" ]; then
|
||
|
echo "ERROR: no output directory is given via --outdir parameter!"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
cd "$MYOUTDIR"
|
||
|
|
||
|
if [ -z "$FILE" -a "$MYSCM" == "git" ]; then
|
||
|
FILE="${MYURL%/}"
|
||
|
FILE="${FILE##*/}"
|
||
|
FILE="${FILE%.git}"
|
||
|
fi
|
||
|
if [ -z "$FILE" -a "$MYSCM" == "svn" ]; then
|
||
|
FILE="${MYURL%/}"
|
||
|
FILE="${FILE##*/}"
|
||
|
fi
|
||
|
|
||
|
existing_tar=$(echo _service:tar_scm:${FILE}-*.tar*)
|
||
|
if [ -e "$existing_tar" ]; then
|
||
|
UNCOMPRESS="cat"
|
||
|
if [ "${existing_tar%.tar.gz}" != "$existing_tar" ]; then
|
||
|
UNCOMPRESS="gunzip -c"
|
||
|
elif [ "${existing_tar%.tar.bz2}" != "$existing_tar" ]; then
|
||
|
UNCOMPRESS="bunzip2 -c"
|
||
|
elif [ "${existing_tar%.tar.xz}" != "$existing_tar" ]; then
|
||
|
UNCOMPRESS="xz -dc"
|
||
|
fi
|
||
|
if $UNCOMPRESS "$existing_tar" | tar xf -; then
|
||
|
TAR_DIRECTORY=`find * -maxdepth 0 -a -type d`
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
if [ "$MYSCM" == "svn" ]; then
|
||
|
if [ -z "$SUBDIR" -a -d "$TAR_DIRECTORY" ]; then
|
||
|
# update existing content for speed/bandwidth reasons
|
||
|
cd "$TAR_DIRECTORY"
|
||
|
OLDVERSION=`LC_ALL=C svn info | sed -n 's,^Last Changed Rev: \(.*\),\1,p'`
|
||
|
if [ -n "$MYREVISION" ]; then
|
||
|
svn up -r"$MYREVISION" || exit 1
|
||
|
else
|
||
|
svn up || exit 1
|
||
|
fi
|
||
|
NEWVERSION=`LC_ALL=C svn info | sed -n 's,^Last Changed Rev: \(.*\),\1,p'`
|
||
|
cd -
|
||
|
if [ "$OLDVERSION" == "$NEWVERSION" ]; then
|
||
|
# cleanup and skip
|
||
|
rm -rf "$TAR_DIRECTORY"
|
||
|
exit 0
|
||
|
fi
|
||
|
mv "$TAR_DIRECTORY" "${FILE}" || exit 1
|
||
|
else
|
||
|
# new checkout
|
||
|
if [ -n "$MYREVISION" ]; then
|
||
|
svn co -r"$MYREVISION" "$MYURL" "${FILE}" || exit 1
|
||
|
else
|
||
|
svn co "$MYURL" "${FILE}" || exit 1
|
||
|
fi
|
||
|
fi
|
||
|
if [ -z "$VERSION" ]; then
|
||
|
cd "$FILE"
|
||
|
[ -n "$MYPREFIX" ] && MYPREFIX="$MYPREFIX.rev"
|
||
|
VERSION=$MYPREFIX`LC_ALL=C svn info | sed -n 's,^Last Changed Rev: \(.*\),\1,p'`
|
||
|
cd -
|
||
|
fi
|
||
|
elif [ "$MYSCM" == "git" ]; then
|
||
|
if [ -z "$SUBDIR" -a -d "$TAR_DIRECTORY" ]; then
|
||
|
# update existing content for speed/bandwidth reasons
|
||
|
cd "$TAR_DIRECTORY"
|
||
|
OLDVERSION=`git show --pretty=%at | head -n 1`
|
||
|
git pull || exit 1
|
||
|
if [ -n "$MYREVISION" ]; then
|
||
|
git checkout "$MYREVISION" || exit 1
|
||
|
fi
|
||
|
NEWVERSION=`git show --pretty=%at | head -n 1`
|
||
|
cd -
|
||
|
if [ "$OLDVERSION" == "$NEWVERSION" ]; then
|
||
|
# cleanup and skip
|
||
|
rm -rf "$TAR_DIRECTORY"
|
||
|
exit 0
|
||
|
fi
|
||
|
mv "$TAR_DIRECTORY" "${FILE}" || exit 1
|
||
|
else
|
||
|
# new checkout
|
||
|
git clone "$MYURL" "${FILE}" || exit 1
|
||
|
if [ -n "$MYREVISION" ]; then
|
||
|
cd "$FILE"
|
||
|
git checkout "$MYREVISION" || exit 1
|
||
|
cd -
|
||
|
fi
|
||
|
fi
|
||
|
if [ -z "$VERSION" ]; then
|
||
|
cd "$FILE"
|
||
|
[ -n "$MYPREFIX" ] && MYPREFIX="$MYPREFIX."
|
||
|
VERSION=$MYPREFIX`git show --pretty=%at | head -n 1`
|
||
|
cd -
|
||
|
fi
|
||
|
else
|
||
|
echo "ERROR: unknown scm $MYSCM"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
if [ ! -e "$FILE/$SUBDIR" ]; then
|
||
|
echo "Directory does not exist: $FILE/$SUBDIR"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
mv "$FILE/$SUBDIR" "${FILE}-${VERSION}" || exit 1
|
||
|
|
||
|
tar cf "$MYOUTDIR/${FILE}-${VERSION}.tar" "${FILE}-${VERSION}" || exit 1
|
||
|
rm -rf "${FILE}-${VERSION}"
|
||
|
|
||
|
exit 0
|