With our repository having been around for quite a while, and many people having left (in particular co-op students who are around for four months), our list of 'watchers' now has quite a bit of dead wood in it. "cvs watchers" lists people who haven't been around for a while.
Until someone implements an 'rwatch' command (or at least adds a '-w [who]' option to watch) the only alternatives I know of are to manually edit the CVS/fileattr file in the repository, or to impersonate the person who left, check out everything they worked on and issue a 'cvs watch remove' command. To simplify manually editing the CVS/fileattr file, I've put together these scripts: #!/bin/bash # file: unwatch if ! test "$1" ; then echo usage: $0 unwatch username echo where username is the user who is to be removed from watches exit 1; fi execdir=`echo "$0" | sed 's/\/[^\/]*$//'` find -name fileattr -exec $execdir/dounwatch {} $1 \; #!/bin/bash # file: dounwatch USER="$2" sed -e 's/\([=;,]\)'$USER'>[^;,]*/\1/;s/_watchers=$//;s/_watchers=,/_watchers=/;s/_ watchers=;//;s/,\([;,]\)/\1/;s/[;,]$//' $1 | grep "=" > $1.tmp mv $1 $1.bk mv $1.tmp $1 (the 'sed' line is all one line in the script) The intent is to run this script from the $CVSROOT directory. Running 'unwatch userA' against a fileattr (in my home directory) with these contents: FFile _watchers=userA>edit+unedit+commit FFile1 _watchers=userA>edit+unedit+commit,userB>edit+unedit+commit FFile2 _watchers=userB>edit+unedit+commit,userA>edit+unedit+commit FFile3 _watchers=userA>edit+unedit+commit,userB>edit+unedit+commit,userC>edit+unedi t+commit FFile4 _watchers=userB>edit+unedit+commit,userA>edit+unedit+commit,userC>edit+unedi t+commit FFile5 _watchers=userB>edit+unedit+commit,userC>edit+unedit+commit,userA>edit+unedi t+commit FFile6 _watched= FFile7 _watched=;_watchers=userA>edit+unedit+commit FFile8 _watched=;_watchers=userA>edit+unedit+commit,userB>edit+unedit+commit FFile9 _watched=;_watchers=userB>edit+unedit+commit,userA>edit+unedit+commit FFile10 _watched=;_watchers=userA>edit+unedit+commit,userB>edit+unedit+commit,userC> edit+unedit+commit FFile11 _watched=;_watchers=userB>edit+unedit+commit,userA>edit+unedit+commit,userC> edit+unedit+commit FFile12 _watched=;_watchers=userB>edit+unedit+commit,userC>edit+unedit+commit,userA> edit+unedit+commit FFile13 _watchers=userA>edit+unedit+commit;_watched= FFile14 _watchers=userA>edit+unedit+commit,userB>edit+unedit+commit;_watched= FFile15 _watchers=userB>edit+unedit+commit,userA>edit+unedit+commit;_watched= FFile16 _watchers=userA>edit+unedit+commit,userB>edit+unedit+commit,userC>edit+unedi t+commit;_watched= FFile17 _watchers=userB>edit+unedit+commit,userA>edit+unedit+commit,userC>edit+unedi t+commit;_watched= FFile18 _watchers=userB>edit+unedit+commit,userC>edit+unedit+commit,userA>edit+unedi t+commit;_watched= D _watchers=userB>edit+unedit+commit,userC>edit+unedit+commit,userA>edit+unedi t+commit;_watched= seems to work OK. Can anyone see any test cases I've overlooked? Any other options I've overlooked? -- Jim Hyslop Senior Software Designer Leitch Technology International Inc. ( http://www.leitch.com <http://www.leitch.com> ) Columnist, C/C++ Users Journal ( http://www.cuj.com/experts <http://www.cuj.com/experts> ) _______________________________________________ Info-cvs mailing list Info-cvs@gnu.org http://lists.gnu.org/mailman/listinfo/info-cvs