#!/bin/sh ######################################################################### # # FILE : cvsremove # DATE : 09.09.2002 # AUTHOR : Patrick Meier / patrick.meier@profidatagroup.com # DESCRIPTION : remove files from the cvs # # Copyrigth (C) 2001 by Patrick Meier, Switzerland # ######################################################################### PN=`basename "$0"` CVS=/usr/local/bin/cvs-1.11.1p1-SUNOS-5.6 CVSPARAMETER="-f" STARTSTRING="==>" export CVS ######################################################################### # Usage ######################################################################### Usage() { echo "$PN - remove files from the cvs" echo "usage: $PN [-d cvs-root] file..." exit 1 } ######################################################################### # ParameterFailed ######################################################################### ParameterFailed() { echo "${STARTSTRING}Parameter faild: $1 ..."; echo "" Usage } ######################################################################### # cutEndSlash ######################################################################### cutEndSlash() { echo $@ | awk ' { text=$0; while( substr( text, length(text),1 ) == "/" ) { text=substr( text, 1, length(text)-1 ); } print text; }' } ######################################################################### # cutEndSlash ######################################################################### getFileName() { echo $@ | awk ' { text=$0; while( substr(text, length( text ),1) == "/" ) { text=substr(text, 1, length(text)-1 ); } for( i=length( text ); i>=1; i-- ) { if( substr( text, i,1) == "/" ) { text=substr( text, i+1, length( text )-i ); break; } } print text; }' } ######################################################################### # complete a given path # tested with: # completePath ../../kkk.c # completePath ../././kkk.c # completePath dsd/dd/dd.c # completePath ../../kkk.c /home/hh/dd/ ######################################################################### completePath() { if [ -z "$2" ] then initPath=`pwd` else initPath=`cutEndSlash $2` fi echo "$initPath $1" | awk ' { mainPath=$1 i=0; backPath=0; num=split( $2, separatedText, "/" ); numMainPath=split( $1, mainPathSeparated, "/" ); fileName="" for( i=1; i <=num; i++ ) { if( separatedText[ i ] == ".." ) backPath++; } for( i=1; i<=numMainPath-backPath; i++ ) { if( length( fileName )==0 ) fileName=mainPathSeparated[ i ]; else fileName=fileName"/"mainPathSeparated[ i ]; } for( i=backPath+1; i<=num; i++ ) { if( separatedText[ i ] != "." ) { if( length( fileName )==0 ) fileName=separatedText[ i ]; else fileName=fileName"/"separatedText[ i ]; } } print "/"fileName }' } ######################################################################### # get all cvs editors ######################################################################### getOwnerOfLockedFiles() { fileToEdit="`completePath $1`" cvsLine=`$CVS editors | grep "$1" | awk '{print $2" "$1}'` if [ -z "$cvsLine" ] then return else lockedUser="`echo $cvsLine | awk '{print $1}'`" cvsFileName="`echo $cvsLine | awk '{print $2}'`" cvsFullName=`completePath $cvsFileName` #echo "<$lockedUser> <$cvsFileName> <$cvsFullName>" fi if [ "$fileToEdit" = "$cvsFullName" ] then echo $lockedUser fi } ######################################################################### # cvs - remove ######################################################################### doCVSRemove() { echo "${STARTSTRING}Updating file $1" $CVS update -A -C $1 printf "${STARTSTRING}" cmd="$CVS remove $CVSPARAMETER $1 >/dev/null 2>&1" if( eval $cmd ) then $CVS commit -m "removing $1" $1 else printf "\n${STARTSTRING}ERROR: Can not remove file $1 from cvs!\n" fi } ######################################################################### # main ######################################################################### while [ $# -gt 0 ] do case "$1" in -d) if [ $# -gt 1 ] ; then CVSROOT="$2"; shift; else ParameterFailed $1; fi;; -h) Usage; exit 1;; -help) Usage; exit 1;; --help) Usage; exit 1;; -*) Usage; exit 1;; *) break;; esac shift done user="`who am i | awk '{print $1}'`" if [ $# -lt 1 ] then Usage else for i in $@ do if [ -r $i ] then lockedUser="`getOwnerOfLockedFiles $i`" if [ -z "$lockedUser" ] then doCVSRemove $i else if [ "$user" = "$lockedUser" ] then echo "${STARTSTRING}You have file $i locked! Please unlock it first!" else echo "${STARTSTRING}You can not delete file because file $i is in use from user $lockedUser!" fi fi else echo "${STARTSTRING}File $i not found!" fi done fi ######################################################################### # EOF #########################################################################