From 10b3f8eff083f31157505bbcb637d1cd2e00b8ad Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Sat, 9 Nov 2013 14:21:25 +0100 Subject: [PATCH] autoport: more checks on releases, repository fetch code reworked and more --- autoport | 65 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/autoport b/autoport index f8463c5..032865b 100755 --- a/autoport +++ b/autoport @@ -37,6 +37,7 @@ ${me[0]} ${me[1]} -u changelog "$"Rebuild packages with given changelog -v "$"More verbose output -x "$"Operate in cross build mode + --user user "$"Pass calling user name for Webbuild social messages"" arch "$"Target architecture job "$"Job specification for autodist"" @@ -86,7 +87,7 @@ function get_pkg_srcinfo() { [ $2 ] && pkg=$2 || return 1 [ -e $local_distromatic/srcpkglist ] || return 2 - + pkg_line=`grep "^$pkg " $local_distromatic/srcpkglist` [ "$pkg_line" ] || return 3 @@ -99,7 +100,6 @@ function get_pkg_srcinfo() { src_epoch=$5 src_release=$6 src_milestone=`echo $src_release | sed "s|[0-9.]*\(.*\)|\1|"` - } # get_pkg_buildinfo - uses distromatic generated build file for @@ -198,7 +198,14 @@ function find_requirements() { local OUTFILE=$1 if [ "`grep " is needed by " $OUTFILE`" ]; then - grep " is needed by " $OUTFILE | awk '{ print $1 }' | sort -u > $tf1 + grep " is needed by " $OUTFILE | while read line; do + set -- $line + if [ "$2" = "=" -o "$2" = ">=" ]; then + awk '{ print $1#$3 }' | sort -u > $tf1 + else + awk '{ print $1 }' | sort -u > $tf1 + fi + done elif [ "`grep " matches no packages" $OUTFILE`" ]; then grep " matches no packages" $OUTFILE | awk '{ print $2 }' | tr -d \' | sort -u > $tf1 elif [ "`grep " no package provides " $OUTFILE`" ]; then @@ -230,6 +237,15 @@ function find_requirements() { return 0 } +fetch_repfiles() { + curl -s ${REPS_BASE_URL}/$PORT_REPOSITORY/srcpkglist -o $DATADIR/$PORT_REPOSITORY/srcpkglist || + echo "Warning: unable to fetch ${REPS_BASE_URL}/$PORT_REPOSITORY/srcpkglist" + curl -s $PORT_REPOSITORY_DISTROMATIC_URL/sources-$BASE_ARCH -o $DATADIR/$PORT_REPOSITORY/sources-$BASE_ARCH || + echo "Warning: unable to fetch $PORT_REPOSITORY_DISTROMATIC_URL/sources-$BASE_ARCH" + curl -s $PORT_REPOSITORY_DISTROMATIC_URL/builds-$TARGET_ARCH.sh -o $DATADIR/$PORT_REPOSITORY/builds-$TARGET_ARCH.sh || + echo "Error: unable to fetch $PORT_REPOSITORY_DISTROMATIC_URL/builds-$TARGET_ARCH.sh" +} + [ $# -gt 0 ] || { usage ; exit 1; } BUILD_ARCH=`uname -i` @@ -272,6 +288,13 @@ for ((i=1; i<=$#; i++)); do TARGET_ARCHS="`echo ${!i} | tr , ' '`" CROSS_MODE=1 ;; + --user) let i+=1 + [ "${!i}" ] || { + echo "Error: --user parameter not given, aborting." + exit 1 + } + WEBBUILD_USER_CMDLINE="${!i}" + ;; -h|--help) usage exit 0 @@ -334,17 +357,13 @@ for TARGET_ARCH in ${TARGET_ARCHS}; do echo "Port repository is $PORT_REPOSITORY" echo "Release repository is $DEST_REPOSITORY" - curl -s ${REPS_BASE_URL}/$PORT_REPOSITORY/srcpkglist -o $DATADIR/$PORT_REPOSITORY/srcpkglist || - echo "Warning: unable to fetch ${REPS_BASE_URL}/$PORT_REPOSITORY/srcpkglist" - curl -s $PORT_REPOSITORY_DISTROMATIC_URL/sources-$BASE_ARCH -o $DATADIR/$PORT_REPOSITORY/sources-$BASE_ARCH || - echo "Warning: unable to fetch $PORT_REPOSITORY_DISTROMATIC_URL/sources-$BASE_ARCH" # old files cleanup rm -f $DATADIR/$PORT_REPOSITORY/sources-$TARGET_CPU rm -f $DATADIR/$PORT_REPOSITORY/builds-$BASE_ARCH.sh - curl -s $PORT_REPOSITORY_DISTROMATIC_URL/builds-$TARGET_ARCH.sh -o $DATADIR/$PORT_REPOSITORY/builds-$TARGET_ARCH.sh || - echo "Error: unable to fetch $PORT_REPOSITORY_DISTROMATIC_URL/builds-$TARGET_ARCH.sh" + + fetch_repfiles if [ "$BATCH_MODE" ]; then [ "${JOB[*]}" ] && { @@ -403,6 +422,7 @@ for TARGET_ARCH in ${TARGET_ARCHS}; do while [ "${JOB[*]}" ]; do step=`expr $step + 1` + [ $step -gt 1 ] && fetch_repfiles [ "$BATCH_MODE" -a $step -gt $AUTOPORT_MAX_STEPS ] && { echo "Maximum steps count reached for batch mode; exiting. See $logfile for details." break @@ -418,7 +438,12 @@ for TARGET_ARCH in ${TARGET_ARCHS}; do JOB_FAILED=() JOB_CANTINSTALL_OLD=(${JOB_CANTINSTALL[*]}) for JOB_NUM in `seq 1 ${#JOB[*]}`; do - JOB_CURRENT=${JOB[$JOB_NUM-1]} + JOB_CURRENT=${JOB[$JOB_NUM-1]/\#*} + if [ "${JOB_CURRENT}" != "${JOB[$JOB_NUM-1]}" ]; then + JOB_CURRENT_VERSION=${JOB[$JOB_NUM-1]/*\#} + else + JOB_CURRENT_VERSION= + fi if [ "`grep "^${JOB_CURRENT}$" /etc/autodist/unstage 2>/dev/null`" -o \ "`grep "^${JOB_CURRENT}$" /etc/autodist/unstage.${TARGET_ARCH} 2>/dev/null`" ]; then echo -n "^ $JOB_CURRENT: " @@ -444,7 +469,18 @@ for TARGET_ARCH in ${TARGET_ARCHS}; do JOB_FAILED=(${JOB_FAILED[*]} $JOB_CURRENT) continue fi - get_pkg_srcinfo $DATADIR/$PORT_REPOSITORY ${JOB_CURRENT} + get_pkg_srcinfo $DATADIR/$PORT_REPOSITORY ${JOB_CURRENT} || { + echo "< (FAILED) [error $? in get_pkg_srcinfo]" + JOB_FAILED=(${JOB_FAILED[*]} $JOB_CURRENT) + continue + } + if [ "$JOB_CURRENT_VERSION" -a \ + "$JOB_CURRENT_VERSION" != "$src_version" -a \ + "$JOB_CURRENT_VERSION" != "$src_version-$src_release" ]; then + echo "< (FAILED) [wrong version $src_version-$src_release != $JOB_CURRENT_VERSION]" + JOB_FAILED=(${JOB_FAILED[*]} $JOB_CURRENT) + continue + fi DONT_PREPARE_THIS= for p in ${JOB_CMDLINE[*]}; do @@ -575,8 +611,13 @@ for TARGET_ARCH in ${TARGET_ARCHS}; do echo -n "(OK) " autoport_log ${JOB_CURRENT} port ok $tmpfile if [ "$WEBBUILD_URL" -a "$WEBBUILD_USER" ]; then - curl -s "$WEBBUILD_URL?REQUEST=message&USER=$WEBBUILD_USER&SECRET=$WEBBUILD_SECRET&USER_EMAIL=$WEBBUILD_EMAIL&\ + if [ "$WEBBUILD_USER_CMDLINE" ]; then + curl -s "$WEBBUILD_URL?REQUEST=message&USER=$WEBBUILD_USER&SECRET=$WEBBUILD_SECRET&USER_EMAIL=$WEBBUILD_EMAIL&\ +MESSAGE=`cgi_encodevar \"(invoked by $WEBBUILD_USER_CMDLINE) ported $JOB_CURRENT to $TARGET_ARCH and sent it to $src_repository\"`" >/dev/null + else + curl -s "$WEBBUILD_URL?REQUEST=message&USER=$WEBBUILD_USER&SECRET=$WEBBUILD_SECRET&USER_EMAIL=$WEBBUILD_EMAIL&\ MESSAGE=`cgi_encodevar \"ported $JOB_CURRENT to $TARGET_ARCH and sent it to $src_repository\"`" >/dev/null + fi fi } echo -n "install"