You are not logged in

I've attached a modified version of update.c, which was downloaded from the 1.11.23 sources. I've commented out 5 lines of code, which I believe are the culprit for this bug, (at least the comment directly above them indicates so)..

This is severely impacting our workflow. Our group does a lot of development in graphical, model-based software tools, and those files cannot be merged easily. We rely heavily on cvs-edit commands, and the fact the the edits are being cleared is causing us lots of grief.

I have attempted to create a workaround using the CVS scripting hooks, and I've got a solution that almost works, but doesn't quite make the cut.

Here is an overview of what I've attempted so far. CVS stores the edit/watch info inside the repository in CVS/fileattr files for each directory in CVS. The "notify" administrative file allows programs to be run whenever a user performs cvs-edit or cvs-unedit. I was able to create a perl-script that was run via notify that created a copy of all fileattr files affected by the unedit or edit command. The fileattr files were copied into a "fileattribbackup" subdirectory of CVSROOT, which mimics the directory structure of the actual repository.

The next step is to then copy the "backup" fileattr files stored in CVSROOT into the repository whenever a user performs a checkout, which can be performed by specifying the perl script to run in the "modules" file.

Now, the problem I'm facing is that when my script is called from "notify", CVS has not yet modified the fileattr files, so the files that get copied into the CVSROOT backup area are basically 1-rev behind. This is my major roadblock at this point. Does anyone have better ideas of how to handle this?

Another idea I was throwing around was to monitor all of the "fileattr" files for changes in a continuously running process, which would copy them to the backup location when they change. Then the checkout script could run as before. This seems like asking for trouble (at least more than the previous solution), because then I need to deal with cvs locks and such.

I appreciate that most cvs users don't make use of cvs edit, however for those of us that do this bug is a real pain.

We use TortoiseCVS in conjunction with WinMerge as a front end to cvs. Unfortunately the act of comparing historical revision changes on a file with WinMerge results in a checkout operation behind the scenes in a temporary directory, conseqently your cvs watch is cleared.

In the example below I will demonstrate that the cvs "locks" functionality will be wrongly cleared by CVS version 1.12.13, when the same user who did the lock (using cvs edit) later does a "cvs checkout" or "cvs export".

Since such additional "cvs export" operations easily can be a part of daily operations it is a very destructive bug in CVS. Especially problematic it is for non-mergeable files, when a multi-site CVS work group is using "cvs watch on+cvs edit" to signal, who is working where.

Note that the same problem exist when you replace the
second "cvs checkout" with "cvs export"

In the example above after "cvs edit README.txt" both
$CVSROOT/my_proj/CVS/fileattr and my_proj/CVS/Baserev show that
the file is being edited, after doing another cvs co
$CVSROOT/my_proj/CVS/fileattr does not show the file being edited
anymore but my_proj/CVS/Baserev does -> thus we have a mismatch.

Change wish:
------------
The "correct" operation by CVS would be NOT to clear the CVS locks, when doing more than one "cvs co" or "cvs export" by the same user.