This area is an archive and is no longer actively maintained. Information found on this page is likely to be extremely out of date and therefore highly inaccurate. We recommend the Ximbiot - CVS Wiki for up-to-date information about CVS and its associtated tools.

If you do find anything useful on this page that is not yet in the Ximbiot - CVS Wiki and you have the time, please add it!

Unofficial patches to CVS

Unofficial patches to CVS

This page is for patches which are interesting for one reason or another but which have not been made part of the official CVS releases. Usually this is because they need further work before they are suitable. See the file HACKING in the CVS distribution for details on what is meant by suitable.

This page does not attempt to list all unofficial patches. Instead it lists those which seem particularly interesting to Cyclic. Perhaps at some point someone will try to maintain a larger unofficial patch archive.

This probably should go without saying, but just to re-emphasize: the patches here may be unpolished and may or may not be easy to get working. Your results may vary.

Note that some of the unofficial patches which used to be on this page have been moved to other pages; see our Development of CVS page for a list of pages with unofficial patches.

PreservePermissions

This patch is for making cvs import work with PreservePermissions.

Trying to use PreservePermissions will tend to fail with errors such as "hard linkage of 1.1.1.1 and working file do not match"; here is a report and a test case.

Larry Coffin has a nice web page concerning his patch for finer control of what to preserve. Specifically, one can preserve file permissions, but not devices, owners, and other things which are part of the CVS 1.10 PreservePermissions.

Filenames

Here is a patch concerning filenames which start with "-".

rcs-to-cvs

The contrib directory of the CVS source distribution contains a script call rcs-to-cvs which is intended to take RCS files and move them into CVS (this is not a complex process; the script is basically just creating directories and moving over RCS files). Here is a rewritten version of this script, in perl, from David MacKenzie.

Keywords

This patch adds a $Nokeywords keyword, which turns off keyword expansion in the rest of the file. It is not official because it is not clear to me whether it is a creeping feature or whether it really is sufficiently useful (see "Submitting patches (strategy)" in HACKING for more on this process).

Here are some ideas about the $Log keyword.

Here is a patch which allows one to define keywords (for example, you might want a $OpenBSD keyword which behaves like $Id but which only gets expanded for people who have specifically configured CVS to do so). The patch also adds Header0 and Header1 keywords which are variants on the existing Header keyword.

Error handling in cvs admin -n

Here is a patch to restore the CVS 1.9 behavior by which "cvs admin -n" gives a warning, not an error, if a tag name does not exist in one of the files.

Main branch import

Without this patch, the only way to import a source tree in a single command is if you want to put it on a vendor branch. While doing so actually turns out to be harmless, it is quite confusing especially to new users. So the patch makes it possible to import either to the trunk or to a vendor branch. Or here is an updated version of the patch from Dave Coffin.

Sticky tags versus -f option to get or update

Without this patch, if the -f option to get or update returns the head revision, it will set a sticky tag to the nonexistent revision, despite not having retrieved that revision. This patch changes that, but it is unclear how one would actually use the new behavior, or even -f in general.

CVS/Root and CVS/Repository

This patch changes certain aspects of how CVS handles CVS/Root and CVS/Repository files.

Another issue is CVS/Root handling: (1) CVS/Root stores the username, and it is possible that there should be a way to omit the username (if several users are using the same working directory); (2) if one has moved the repository or some such (perhaps temporarily, in case of several servers sharing a repository for example), CVS doesn't provide a way to update all the CVS/Root files. One possibility, which could help with both #1 and #2, is to provide a setting in CVSROOT/config (well, or some version of that file for clients, but that is another story) which just restores the CVS 1.3 behavior of not writing CVS/Root (and thus users would manage their CVSROOT environment variable as they did for CVS 1.3). Or maybe #1 should be fixed by moving the username from CVS/Root to ~/.cvspass (which fits in with the general vision of separating network security from CVS as feasible) (doesn't help with #2, but works for multiroot).

Obsolete Patches

For information on what has changed in CVS, probably you are better off with the Known Bugs page (for bug fixes) and the NEWS file in the CVS source distribution (for features). Or the ChangeLog files in the CVS source distribution for a more detailed look.

The patches in this section are no longer considered relevant (usually because the problem has been solved some other way or the patch has been made official). They are subject to disappear at any time; if you know of some reason why they might want to stick around, let us know.

  • May 1999: Move the -t/-f wrappers link to the triggers page. Move the Binary files and Multiple Developers (formerly "Reserved checkouts") pages directly to the main Development of CVS page. Move the "Date formats", "cvs log -r", "brief status display", and "annotate" items to the new CVS output page.
  • Apr 1999: the fix for --ifdef being broken client/server was checked in 1999-04-13.
  • 19 Jan 1999: a patch similar to the 8th bit set patch for log messages was checked in on 1998-12-23.
  • 17 Jan 1999: Moved the "Branches and dates", "Death support for directories", and "diff library" items to the Branching page.
  • Jan 1999: Moved the items about modules and the -d option to cvs get to the specifying files page.
  • Dec 1998: Moved CVSROOT/users items to the trigger page.
  • Nov 1998: cvs history and triggers (server side plug-in) patches moved to their own page.
  • A fix to make the CVS server use the gzip library was checked in 20 Oct 1998. Before this fix the server would somtimes have trouble finding the gzip program.
  • By default CVS does not allow one to commit files as root. The patch to skip this for the CVS client was made official on 14 Oct 1998.
  • Having the filenames in cvs diff output include the directory name (patches to CVS 1.9 or so and CVS 1.9.22) - checked in 1998-09-24.
  • Sep 1998: Move the testsuite material to the testsuite page.
  • Sep 1998: Some of the general discussion of CVS locks has been moved from this page to the Metadata page.
  • This patch puts the lock files in subdirectories in each repository directory (same issue should be solved by LockDir in CVSROOT/config, checked in 1998-09-07).
  • A change which should fix the problem with update -j and timestamps was checked in on 21 Jun 1998.
  • The recursion patches fix cases involving specifying subdirectories on the CVS command line; a version of this fix was checked in on 8 Apr 1998.
  • The patch for Empty log messages in RCS files was checked in on 19 Sep 1997.
  • Feb 1998: The patch and test case to fix adding directories on a branch (via "update -d" or "update -d -j") were made official on 22 Feb 1998 (with some changes).
  • Jan 1998: Andy Piper's gnu-win32 patches for CVS 1.9.18; see official 26 Nov 1997 change to lib/system.h together with the gzip library patch made official on 27 Dec 1997. Also see his patches for CVS 1.9.22.
  • Dec 1997: gzip library patch, made official on 27 Dec 1997.
  • Dec 1997: The Windows Makefile patch to CVS 1.9.20 for release and debug configurations should have been taken care of by the official change to cvsnt.mak on 29 Nov 1997. If not I'm sure someone will let us know.
  • Dec 1997: Kerberos 5 patches from Wolfgang Rupprecht (file krb5-cvs-1_1.tar.gz) or F Harvell, superceded by official GSSAPI patches on 12 Dec 1997.
  • Nov 1997: LINES_CRLF_TERMINATED, see official lib/system.h patch of 26 Nov 1997 plus the gzip library patch above.

[Cyclic Home]

Derek Price, CVS developer and technical editor of Essential CVS (Essentials line from O'Reilly Press) , and others offer consulting services and training through Ximbiot.