purge-stale-projects.sh: Check for local modifications before moving

Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
Jan Lindemann 2016-09-22 09:08:14 +00:00
commit 4fcef03284

View file

@ -1,11 +1,31 @@
#!/bin/bash #!/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_cvs_proj=`ls -d */CVS 2>/dev/null | sed 's%/[^/]*%%'`
local_git_proj=`ls -d */.git 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_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` remote_git_proj=`ssh git.jannet.de git-srv-admin.sh -j list-personal-projects`
date=`date +'%Y%m%d'` 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 for p in $local_cvs_proj; do
[ -L $p ] && continue [ -L $p ] && continue
@ -18,6 +38,8 @@ for p in $local_cvs_proj; do
purged="$purged $p" purged="$purged $p"
done done
[ -d old ] && mv old purged
[ "$purged" ] && { [ "$purged" ] && {
cp -p CVS/Entries CVS/Entries-$date-`date +'%H%M%S'` 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 [ -L $p ] && continue
[ -d $p ] || continue [ -d $p ] || continue
echo $remote_git_proj | grep -q "\(^\| \)$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` mkdir -p `dirname $n`
mv $p $n mv $p $n
echo moving state git project $p to $n log "moving stale CVS project \"$p\" to \"$n\""
done done