From 4fcef0328406b5502db2b53a403845e4fa9d59a3 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Thu, 22 Sep 2016 09:08:14 +0000 Subject: [PATCH] purge-stale-projects.sh: Check for local modifications before moving Signed-off-by: Jan Lindemann --- scripts/purge-stale-projects.sh | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/scripts/purge-stale-projects.sh b/scripts/purge-stale-projects.sh index 29446f48..39bd083d 100644 --- a/scripts/purge-stale-projects.sh +++ b/scripts/purge-stale-projects.sh @@ -1,11 +1,31 @@ #!/bin/bash +log() +{ + echo $@ +} + +fatal() +{ + log $@ + exit 1 +} + +goodbye() +{ + rm -f $cvs_status +} + local_cvs_proj=`ls -d */CVS 2>/dev/null | sed 's%/[^/]*%%'` local_git_proj=`ls -d */.git 2>/dev/null | sed 's%/[^/]*%%'` remote_cvs_proj=`ssh cvs.jannet.de find /home/jannet/arc/cvs/proj -type d -maxdepth 1 -mindepth 1 | sed 's%.*/%%'` remote_git_proj=`ssh git.jannet.de git-srv-admin.sh -j list-personal-projects` date=`date +'%Y%m%d'` +myname=`basename $0` + +trap goodbye EXIT INT QUIT KILL +cvs_status=`mktemp /tmp/$myname""_XXXXXX` for p in $local_cvs_proj; do [ -L $p ] && continue @@ -18,6 +38,8 @@ for p in $local_cvs_proj; do purged="$purged $p" done +[ -d old ] && mv old purged + [ "$purged" ] && { cp -p CVS/Entries CVS/Entries-$date-`date +'%H%M%S'` } @@ -30,9 +52,16 @@ for p in $local_git_proj; do [ -L $p ] && continue [ -d $p ] || continue echo $remote_git_proj | grep -q "\(^\| \)$p\($\| \)" && continue - n=old/git/$date/$p + cvs status $p > $cvs_status 2>&1 + if [ $? != 0 ]; then + cat $cvs_status + fatal "\n======== cvs status failed in project $p, giving up." + fi + grep -qi "project $p has locally modified" $cvs_status && \ + fatal "cvs copy has locally modified files, giving up" + n=purged/git/$date/$p mkdir -p `dirname $n` mv $p $n - echo moving state git project $p to $n + log "moving stale CVS project \"$p\" to \"$n\"" done