Category Archives: CVS

CVS not updating

Perhaps an obvious one, but I attempted to do a cvs up on a directory, and nothing happened, even though there had been changes in the repository.  After being confused for a while, I noticed that there was a sticky tag:

Working revision:    1.66
   Repository revision: 1.66    /.../.../...
   Expansion option:    o
   Commit Identifier:   2104f3e32632ef7
   Sticky Tag:          1.66
   Sticky Date:         (none)
   Sticky Options:      o
   Merge From:          (none)

cvs up -A sorts this out:

cvs up -H
up: invalid option -- H
Usage: cvs update [-APCdflRp] [-k kopt] [-r rev] [-D date] [-j rev]
    [-I ign] [-W spec] [files...]
        -A Reset any sticky tags/date/kopts.
        -P      Prune empty directories.
        -C      Overwrite locally modified files with clean repository copies.
        -d      Build directories, like checkout does.
        -f      Force a head revision match if tag/date not found.
        -l      Local directory only, no recursion.
        -R      Process directories recursively.
        -p      Send updates to standard output (avoids stickiness).
        -k kopt Use RCS kopt -k option on checkout. (is sticky)
        -r rev  Update using specified revision/tag (is sticky).
        -D date Set date to update from (is sticky).
        -j rev  Merge in changes made between current revision and rev.
        -I ign  More files to ignore (! to reset).
        -W spec Wrappers specification line.

The version in the repository was 1.68, but the file was stuck at 1.66 for some reason.

Allowing CVS to recurse into subdirectories which aren’t part of CVS

Running cvs up or cvs st from a directory will recurse one directory deep.  If there are no CVS directories in these, it gives up.  To get around this, you can add a CVS directory  with an Entries file pointing to the directory you want to recurse into.  This is my example: CVS.  Replace ‘FolderToRecurseInTo’ in the Entries file with the correct folder name and put the correct repository in the repository file.  Then you can run cvs commands from the lower level directory and they will work on all the directories you specify in this way.

The CVS directory has to go in the directory above the place you run the command, pointing to the directory above that.  E.g. If you run commands from ‘/directory’, place the CVS directory in ‘/directory/meh’ and point the entries file to ‘yay’.  This will mean running cvs status in ‘/directory’ will show the status of files in the ‘/directory/meh/yay’ directory (along with any in ‘/directory/’ and directories one level up from there).

I found this useful because I can now simply run one cvs command to update all the files in my directory structure.