From 4074486735c7f1ac675d7bdcc6f900fddeaa914f Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Mon, 17 Nov 2025 13:10:54 +0100 Subject: [PATCH] purge-stale-projects.sh: Re-add purge-stale-projects.sh, needed for purging Without purge-stale-projects.sh, projects not longer in the upstream directory don't get purged, so add it back. Signed-off-by: Jan Lindemann --- scripts/purge-stale-projects.sh | 114 ++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 scripts/purge-stale-projects.sh diff --git a/scripts/purge-stale-projects.sh b/scripts/purge-stale-projects.sh new file mode 100644 index 00000000..62190165 --- /dev/null +++ b/scripts/purge-stale-projects.sh @@ -0,0 +1,114 @@ +#!/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 --untracked-files=no | 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 dspcd 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 +