#!/bin/sh set -e action=$(basename $0 .sh) tar_excludes="--exclude CVSROOT --exclude .cvsignore --exclude .svn --exclude .arch-ids --exclude {arch} --exclude .hg --exclude .hgignore --exclude .hgtags" projects=${1:-$(find -mindepth 1 -maxdepth 1 -type d -printf '%f\n')} for project in $projects; do if [ -x $project/$action.sh ]; then echo " ** Custom updating project $project... **" (cd $project && ./$action.sh) else targets=${2:-$(find $project -mindepth 1 -maxdepth 1 -type d -printf '%f\n')} for target in $targets; do repository="" branch="" if [ -d "$project/$target/.hg" ]; then versys="Mercurial" versysfile="hg" repository="$(cat $project/$target/.hg/hgrc | perl -n -e '/^default\s+=\s+(\S+)/ && print "$1\n"')" elif [ -d "$project/$target/{arch}" ]; then versys="ARCH" versysfile="arch" repository="$(cat $project/$target/{arch}/++default-version)" elif [ -d "$project/$target/.svn" ]; then versys="SVN" versysfile="svn" elif [ -d "$project/$target/CVS" ]; then versys="CVS" versysfile="cvs" repository="$(cat $project/$target/CVS/Repository)" # Get Tag if available if [ -f $project/$target/CVS/Tag ]; then branch="$(egrep '^N' $project/$target/CVS/Tag | sed 's/^N//')" fi else echo "ERROR: Unknown version control system used for \"$project/$target\"." exit 1 fi case $action in update) echo " ** Updating $versys project \"$project\" target \"$target\"${repository:+ (repository \"$repository\"${branch:+ branch \"$branch\"})}" case $versys in CVS) ( cd $project/$target && cvs -z3 update -dP 2>&1 || exit 1 ) \ | egrep -v '^cvs(pserver)? (server|update): Updating' || [ $? -lt 2 ] # catch grep failures ;; SVN) ( cd $project/$target && svn update ) ;; ARCH) ( cd $project/$target && tla update ) ;; Mercurial) ( cd $project/$target && hg pull -u ) ;; *) echo "ERROR: Action \"$action\" not supported for \"$project/$target\"." exit 1 ;; esac ;; archive) echo " ** Creating snapshot of $versys project \"$project\" target \"$target\"${repository:+ (repository \"$repository\"${branch:+ branch \"$branch\"})}" case $versys in CVS|SVN|ARCH|Mercurial) ( cd $project && tar chf - --exclude CVS $tar_excludes $target ) \ | gzip -f9 > $project/$target-$versysfile$(date '+%Y%m%d').tar.gz ;; *) echo "ERROR: Action \"$action\" not supported for \"$project/$target\"." exit 1 ;; esac ;; mkchanges) echo " ** Building changelog of $versys project \"$project\" target \"$target\"${repository:+ (repository \"$repository\"${branch:+ branch \"$branch\"})}" case $versys in CVS) # ( cd $project/$target && cvs2cl --gmt -S --no-wrap -f ../$target.ChangeLog 2>&1 || exit 1 ) \ # ( cd $project/$target && cvs2cl --gmt -S --no-wrap ${branch:+-F $branch} -f ../$target.ChangeLog 2>&1 || exit 1 ) \ ( cd $project/$target && cvs2cl --gmt -S --no-wrap -F ${branch:-TRUNK} -f ../$target.ChangeLog 2>&1 || exit 1 ) \ | egrep -v '^cvs(pserver)? (server|log): Logging' || [ $? -lt 2 ] # catch grep failures ;; SVN) ( cd $project/$target && test -f ../$target.ChangeLog && mv -f ../$target.ChangeLog ../$target.ChangeLog.bak ) ( cd $project/$target && svn log -v | localsvnlog2cl > ../$target.ChangeLog ) ;; ARCH) ( cd $project/$target && test -f ../$target.ChangeLog && mv -f ../$target.ChangeLog ../$target.ChangeLog.bak ) ( cd $project/$target && tla changelog > ../$target.ChangeLog ) ;; Mercurial) ( cd $project/$target && test -f ../$target.ChangeLog && mv -f ../$target.ChangeLog ../$target.ChangeLog.bak ) ( cd $project/$target && hg log -v > ../$target.ChangeLog ) ;; *) echo "ERROR: Action \"$action\" not supported for \"$project/$target\"." exit 1 ;; esac ;; *) echo "ERROR: Unknown action \"$action\" for \"$project/$target\"." exit 1 ;; esac done fi done