jw-pkg/scripts/purge-stale-projects.sh
Jan Lindemann 005eafcf1b purge-stale-projects.sh: Handle btools and dspider shared
btools and dspider shared have been moved to git. This commit makes
purge-stale-projects.sh remove the CVS debris and links. Needs to be fetched
before it can work, so make pull will have to run twice in the projects dir. To
be removed after all work trees are in sync.

Signed-off-by: Jan Lindemann <jan@janware.com>
2019-06-19 07:39:08 +00:00

114 lines
2.7 KiB
Bash

#!/bin/bash
log()
{
echo $@
}
fatal()
{
log $@
exit 1
}
goodbye()
{
rm -f $scm_status
}
check_scm()
{
local p=$1
if [ -d $p/.git ]; then
log + checking git
#git -C $p pull --no-edit || fatal "git pull failed, giving up"
if git -C $p status --porcelain | grep -v '^??' | grep -q . ; then
git -C $p status
fatal "git in project \"$p\" has locally modified files, giving up"
fi
else
log + checking cvs
#cvs update -dP $p
cvs status $p > $scm_status 2>&1
if [ $? != 0 ]; then
cat $scm_status
fatal "\n======== cvs status failed in project \"$p\", giving up."
fi
grep -qi "locally modified" $scm_status && \
fatal "cvs copy in project \"$p\" has locally modified files, giving up"
grep -qi "needs" $scm_status && \
fatal "+ cvs copy in project \"$p\" is out-of-date, giving up"
fi
}
set -e
ssh=ssh
[ "$CVS_RSH" ] && ssh="$CVS_RSH"
[ "$GIT_SSH" ] && ssh="$GIT_SSH"
ssh=`which $ssh`
[ -x "$ssh" ] || fatal "SSH executable \"$ssh\" not found"
[ "$JANWARE_USER" ] || JANWARE_USER=`whoami`
ssh="$ssh -l $JANWARE_USER"
for host in cvs.janware.com git.janware.com; do
$ssh $host echo hallo >/dev/null 2>&1 || fatal "Can't ssh into host $host"
done
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.janware.com find /srv/cvs/proj -maxdepth 1 -mindepth 1 -type d -executable -readable | sed 's%.*/%%'`
remote_git_proj=`$ssh git.janware.com git-srv-admin.sh -j list-personal-projects`
date=`date +'%Y%m%d'`
myname=`basename $0`
trap goodbye EXIT INT QUIT KILL
scm_status=`mktemp /tmp/$myname""_XXXXXX`
for p in $local_cvs_proj; do
[ -L $p ] && continue
[ -d $p ] || continue
echo $remote_cvs_proj | grep -q "\(^\| \)$p\($\| \)" && continue
n=purged/cvs/$date/$p
mkdir -p `dirname $n`
echo "--------------- moving stale cvs project $p to $n"
if ! make -C $p distclean; then echo "distclean failed, ignoring"; fi
if ! make -C $p clean; then echo "clean failed, ignoring"; fi
mv $p $n
sed -i "/\/$p\// d" CVS/Entries
purged="$purged $p"
done
[ -d old ] && mv old purged
[ "$purged" ] && {
cp -p CVS/Entries CVS/Entries-$date-`date +'%H%M%S'`
}
for p in $purged; do
sed -i "/D\/$p\/\/\/\// d" CVS/Entries
done
if [ -d dspc/src/CVS ]; then
for i in shared; do
sed -i "/D\/$i\/\/\/\// d" dspc/src/CVS/Entries
done
fi
for i in dspider-btools dspider-shared; do
[ -L "$i" ] && rm $i
done
for p in $local_git_proj; do
[ -L $p ] && continue
[ -d $p ] || continue
echo $remote_git_proj | grep -q "\(^\| \)$p\($\| \)" && continue
check_scm $p
echo done checking scm
n=purged/git/$date/$p
mkdir -p `dirname $n`
mv $p $n
log "moving stale project \"$p\" to \"$n\""
done