diff --git a/make/projects-dir.mk b/make/projects-dir.mk index b6e12022..6cd599e7 100644 --- a/make/projects-dir.mk +++ b/make/projects-dir.mk @@ -267,7 +267,7 @@ clean-all-dirs: purge: $(SSH_WRAPPER_SH) ifneq ($(PURGE_SH),/bin/bash purge-not-found) - $(PURGE_SH) + $(PURGE_SH) --vcs git endif $(PROJECTS_TXT): diff --git a/scripts/purge-stale-projects.sh b/scripts/purge-stale-projects.sh index f7c16f25..7692097f 100644 --- a/scripts/purge-stale-projects.sh +++ b/scripts/purge-stale-projects.sh @@ -43,6 +43,28 @@ check_scm() set -e +date=`date +'%Y%m%d'` +myname=`basename $0` +vcss="git" + +opts=$(getopt -o C --long "vcs:" -n $myname -- "$@") || fatal "Failed to parse options $@" +eval set -- "$opts" +while [ "$1" != -- ]; do +case "$1" in + --vcs) + vcss="$2" + shift + ;; + *) + fatal "Unknown option $1" + ;; + +esac +shift +done + +vcss=$(echo -e $vcss | sed 's/[, ]\+/\n/g' | sort -u) + ssh=ssh [ "$CVS_RSH" ] && ssh="$CVS_RSH" [ "$GIT_SSH" ] && ssh="$GIT_SSH" @@ -51,64 +73,60 @@ ssh=`which $ssh` [ "$JANWARE_USER" ] || JANWARE_USER=`whoami` ssh="$ssh -l $JANWARE_USER" -for host in cvs.janware.com git.janware.com; do +for vcs in $vcss; do + case "$vcs" in + cvs|CVS) host=cvs.janware.com;; + git|Git) host=git.janware.com;; + esac $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 /opt/jw-pkg/bin/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" +for vcs in $vcss; do + case $vcs in + cvs|CVS) + local_cvs_proj=`ls -d */CVS 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%.*/%%'` + 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 + + [ "$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 + } + ;; + git|Git) + local_git_proj=`ls -d */.git 2>/dev/null | sed 's%/[^/]*%%'` + remote_git_proj=`$ssh git.janware.com /opt/jw-pkg/bin/git-srv-admin.sh -j list-personal-projects` + 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 + ;; + *) + log "Unsupported version-control system >$vcs<, ignoring" + ;; + esac 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 -