#!/bin/bash # # autodist-tool # Copyright (c) 2008-2010 by Silvan Calarco # . /etc/autodist/config me=(${0##*/} $VERSION "Tue Oct 28 2008") DATE_NOW=`date +%s` RPMDIR=/usr/src/RPM/ AUTOUPDATEDIR=/var/ftp/pub/openmamba/$AUTODIST_REPOSITORY/autoupdate/ BUILDDEPSFILE=/var/ftp/pub/openmamba/distromatic/$AUTODIST_REPOSITORY/builddeps-i586 SOURCESDIR=$AUTOUPDATEDIR/sources/ SRCPKGLIST=/var/ftp/pub/openmamba/$AUTODIST_REPOSITORY/srcpkglist SUCCESSLISTDIR=$AUTOUPDATEDIR SKIPPEDLISTDIR=$AUTOUPDATEDIR DISTDBFILE=/etc/autodist/distdb #eval `autospec -q --eval="srpms_dir"` #eval `autospec -q --eval="rpms_dir"` eval `autospec -q --eval="spec_dir"` #eval `autospec -q --eval="source_dir"` #eval `autospec -q --eval="tmppath_dir"` function usage() { echo "\ ${me[0]} ${me[1]} "$"Copyright (C) 2008 Silvan Calarco "" "$"Released under the terms of the GNU GPL v3 license" echo " "$"Usage"": $me makepatch package [build|update|remove] $me schedule job_regexp $me unschedule job_regexp $me skip job_regexp " } [ $# -gt 0 ] || { usage ; exit 1; } unset OPERATION COMMAND PKG for ((i=1; i<=$#; i++)); do case ${!i} in -h|--help) usage; exit 1 ;; *) if [ ! "$COMMAND" ]; then COMMAND=${!i} elif [ ! "$JOB" ]; then JOB=${!i} else OPERATION=${!i} fi ;; esac done [ "${JOB/*\#}" != "${JOB}" ] && { JOBVER="+${JOB/*\#}" JOB="${JOB/\#*}" } || JOBVER="+0" if [ "$COMMAND" = "makepatch" ]; then [ "$JOB" ] || { echo "Error: package non specified." exit 1 } if [ ! "$OPERATION" ]; then [ -e $AUTOUPDATEDIR/spec-patches-update/$JOB.spec.patch ] && { echo "== update patch ==" cat $AUTOUPDATEDIR/spec-patches-update/$JOB.spec.patch } [ -e $AUTOUPDATEDIR/spec-patches-build/$JOB.spec.patch ] && { echo "== build patch ==" cat $AUTOUPDATEDIR/spec-patches-build/$JOB.spec.patch } exit 0 elif [ "$OPERATION" = "remove" ]; then echo -n "== Removing patches for $JOB package" rm -f $AUTOUPDATEDIR/spec-patches-update/$JOB.spec.patch rm -f $AUTOUPDATEDIR/spec-patches-build/$JOB.spec.patch echo exit 0 fi echo diff $spec_dir/.$JOB.spec.autodist.pre$OPERATION $spec_dir/$JOB.spec > \ $AUTOUPDATEDIR/spec-patches-$OPERATION/$JOB.spec.patch diff $spec_dir/.$JOB.spec.autodist.pre$OPERATION $spec_dir/$JOB.spec > \ $AUTOUPDATEDIR/spec-patches-$OPERATION/$JOB.spec.patch RET=$? if [ $RET -eq 1 ]; then echo "Created $OPERATION patch for $JOB:" cat $AUTOUPDATEDIR/spec-patches-$OPERATION/$JOB.spec.patch exit 0 elif [ $RET -eq 0 ]; then echo "Info: files are identical." rm $AUTOUPDATEDIR/spec-patches-$OPERATION/$JOB.spec.patch exit 0 else echo "Error: diff returned $RET while creating the patch." exit 1 fi elif [ "$COMMAND" = "schedule" ]; then [ "$JOB" ] || { echo "Scheduled jobs:" cat $AUTOUPDATEDIR/manual.in exit 0 } # cat $BUILDDEPSFILE | sort -k2 -n | # while read line; do # set -- $line # if [ "`echo \" $1 \" | grep \" $JOB \"`" ]; then if [ "`grep \"^$JOB \" $SRCPKGLIST`" -o "`grep \"^$JOB=(\" $DISTDBFILE`" ]; then echo "Job $JOB scheduled for automatic update or rebuild" sed -i "/^$JOB .*/d" $AUTOUPDATEDIR/manual.in echo "$JOB $JOBVER 0" >> $AUTOUPDATEDIR/manual.in || exit 1 else echo "Unknown job $JOB." fi # done elif [ "$COMMAND" = "unschedule" ]; then [ "$JOB" ] || { echo "Scheduled jobs:" cat $AUTOUPDATEDIR/manual.in exit 0 } # cat $AUTOUPDATEDIR/manual.in | sort -k2 -n | # while read line; do # set -- $line # if [ "`echo \" $1 \" | grep \" $JOB \"`" ]; then if [ "`grep \"^$JOB \" $AUTOUPDATEDIR/manual.in`" ]; then sed -i "/^$JOB .*/d" $AUTOUPDATEDIR/manual.in echo "Job $JOB removed from schedule" fi # done elif [ "$COMMAND" = "skip" ]; then [ "$JOB" ] || { echo "Error: package non specified." exit 1 } SKIPPEDLINE=`awk '{ print $1" "$2 }' $SKIPPEDLISTDIR/*.skip | grep -m1 "^$JOB "` if [ "$SKIPPEDLINE" ]; then sed -i "/^$PKGNAME /d" $SKIPPEDLISTDIR/*.skip fi if [ "`grep \"^$JOB \" $SRCPKGLIST`" -o "`grep \"^$JOB=(\" $DISTDBFILE`" ]; then echo "$JOB $DATE_NOW 101" >> $SKIPPEDLISTDIR/auto.skip echo "Job $JOB skipped from automatic builds" else echo "Unknown job $JOB." fi else echo "Error: invalid command $COMMAND" fi