handle Attic-only RCS files over CVS pserver
CVS repositories may contain RCS history in file,v as well as a corresponding Attic/file,v where each file contains separate events that occurred in history. The Attic version of the file results from file deletion events.
The rsync access method already uses history found in the Attic. However, a CVS server will only return RCS files from the Attic if we request them explicitly. If we do not request them then our converted history may end up missing deletion events for some files. Unfortunately, we cannot tell which RCS files have a corresponding file in the Attic, so we need to search all Attic directories by running the equivalent of 'cvs rlog' in each directory. This slows down pserver access considerably (and it was already quite slow compared to rsync). But we need to pay this price in order to obtain a valid conversion result.
This patch contains related fixes to cvsroot path handling, which was broken for the pserver case. Without these fixes we cannot create the correct paths for Attic directories to search.
Problem found while comparing conversion results of rsync and pserver access methods for the GNU dino CVS repository at cvs.savannah.gnu.org/sources/dino Add two new test cases based on RCS files from this repository.
Without this fix in place history would diverge at this commit: 8891a63 | larsl | Removed the MIDIEvent class | 04 May 2006, 01:11 UTC Because the files midievent.cpp and midievent.hpp would not get deleted when converting this commit via the pserver protocol.
Migrated from D6593 (view on Phabricator)