I wrote a script to manage project releases for ProgClub. Basically you pass the project name to the script, and it will create a release tag in tags/release/year/month/day/serial and update tags/latest with the latest release.
#!/bin/bash if [ "$1" = "" ]; then echo "Expected project parameter."; exit 1; fi if [ "$2" = "" ]; then echo "Expected comment parameter."; exit 2; fi pcrepo="https://www.progclub.org/svn/pcrepo"; project="$1"; comment="$2"; echo Releasing $project; svn info $pcrepo/$project 2> /dev/null > /dev/null if [ "$?" -ne "0" ]; then echo $project does not exist. exit 3; fi year="`date --utc +%Y`"; month="`date --utc +%m`"; day="`date --utc +%d`"; serial="0"; serial_formatted="0"; svn_status="0"; while [ "$svn_status" = "0" ]; do serial="`echo \"$serial + 1\"|bc`"; if [ "$serial" = "100" ]; then echo "Out of serial numbers. You can't do any more releases today. Take a break!"; exit 4; fi less_than_ten="`echo \"$serial < 10\"|bc`"; serial_formatted=$serial; if [ "$less_than_ten" = "1" ]; then serial_formatted="0$serial"; fi url="$pcrepo/$project/tags/release/$year/$month/$day/$serial_formatted"; echo Checking availability of release: $url svn info $url 2> /dev/null > /dev/null svn_status="$?"; done trunk_url="$pcrepo/$project/trunk"; svn copy $trunk_url $url -m "Releasing $project: $year-$month-$day-$serial_formatted. $comment" --parents latest_url="$pcrepo/$project/tags/latest"; svn delete $latest_url -m "Updating $project/tags/latest..."; svn copy $url $latest_url -m "Updating $project/tags/latest. $comment";