I hereby grant permission to distribute this patch under the terms of the GNU Public License.
BUG: 'cvs watch on' and 'cvs watch off' on an empty directory will clear any default '_watchers' in that directory.
VERSION APPLIES TO: both stable (1.11) and feature (1.12) branches.
TEST CASE:
Sorry, my shell programming skills are extremely limited. Someone who has the time and expertise should be able to convert this into a proper addition for sanity.sh:
#assumptions: 'test-directory' exists in the repository # as either a top-level directory or a CVS module, # and it has no default watchers/watched.
cvs co test-directory cd test-directory mkdir subdir cvs add subdir cd subdir
#START watch add/remove sequence cvs watch add grep '_watchers' $CVSROOT/test-directory/subdir/CVS/fileattr (the grep should succeed and currently does)
cvs watch on grep '_watchers' $CVSROOT/test-directory/subdir/CVS/fileattr (currently, this grep will fail - it should succeed) grep '_watched' $CVSROOT/test-directory/subdir/CVS/fileattr (this grep should succeed, and currently does)
cvs watch off grep '_watchers' $CVSROOT/test-directory/subdir/CVS/fileattr (currently, this grep will fail - it should succeed) grep '_watched' $CVSROOT/test-directory/subdir/CVS/fileattr (this grep should fail)
cvs watch remove ($CVSROOT/test-directory/subdir/CVS/fileattr should not exist) ($CVSROOT/test-directory/subdir/CVS should not exist) #END watch add/remove sequence echo Hi there>afile cvs add afile cvs ci -m "A file" afile (repeat add/remove sequence, results should be the same) (clean up)
PATCH:
The problem is, when onoff_fileproc and onoff_filesdoneproc call fileattr_set the current attributes have not yet been read from the current fileattr file. The patch simply forces the current fileattr values to be read into memory before modifying the attribute.
Index: src/edit.c =================================================================== RCS file: /cvs/ccvs/src/edit.c,v retrieving revision 1.57.4.4 diff -u -r1.57.4.4 edit.c --- src/edit.c 20 Mar 2004 22:25:49 -0000 1.57.4.4 +++ src/edit.c 12 Feb 2005 04:18:48 -0000 @@ -32,6 +32,7 @@ void *callerdat; struct file_info *finfo; { + fileattr_get0 (finfo->file, "_watched"); fileattr_set (finfo->file, "_watched", turning_on ? "" : NULL); return 0; } @@ -49,6 +50,7 @@ const char *update_dir; List *entries; { + fileattr_get0 (NULL, "_watched"); if (setting_default) fileattr_set (NULL, "_watched", turning_on ? "" : NULL); return err;
NEWS entry: * Thanks to a patch from Jim Hyslop <[EMAIL PROTECTED]>, issuing 'cvs watch on' or 'cvs watch off' in an empty directory no longer clears any watchers in that directory.
-- Jim
_______________________________________________ Bug-cvs mailing list Bug-cvs@gnu.org http://lists.gnu.org/mailman/listinfo/bug-cvs