1*1e72d8d2Sderaadt$CVSid: @(#)TODO 1.26 94/09/21 $ 2*1e72d8d2Sderaadt 3*1e72d8d2Sderaadt14. Pathname stripper, for checkout, as well as for writing the 4*1e72d8d2Sderaadt Repository file. 5*1e72d8d2Sderaadt [[ I have a simple one, but need to make sure to call it at all the 6*1e72d8d2Sderaadt appropriate points ]] 7*1e72d8d2Sderaadt (I'm not sure what this means -kingdon, Jun 1995). 8*1e72d8d2Sderaadt 9*1e72d8d2Sderaadt16. List of current users of a directory needs to be maintained. 10*1e72d8d2Sderaadt [[ sort of solved by history database ]] 11*1e72d8d2Sderaadt 12*1e72d8d2Sderaadt22. Catch signals for cleanup when "add"ing files. 13*1e72d8d2Sderaadt 14*1e72d8d2Sderaadt24. Insist on a log message. 15*1e72d8d2Sderaadt (This should be configurable via commitinfo or some new config file 16*1e72d8d2Sderaadt -kingdon, Jun 1995). 17*1e72d8d2Sderaadt 18*1e72d8d2Sderaadt30. Add "patch" program option to the modules database. 19*1e72d8d2Sderaadt 20*1e72d8d2Sderaadt31. Think hard about ^C recovery. 21*1e72d8d2Sderaadt 22*1e72d8d2Sderaadt35. Add "admin" command as an interface to "rcs". 23*1e72d8d2Sderaadt [[ a cheesy version is there, but it should be re-done ]] 24*1e72d8d2Sderaadt 25*1e72d8d2Sderaadt38. Think hard about using RCS state information to allow one to checkin 26*1e72d8d2Sderaadt a new vendor release without having it be accessed until it has been 27*1e72d8d2Sderaadt integrated into the local changes. 28*1e72d8d2Sderaadt 29*1e72d8d2Sderaadt39. Think about allowing parallel source trees that can easily track 30*1e72d8d2Sderaadt each other. 31*1e72d8d2Sderaadt [[ sort of solved with the automagic branch support, but I want more ]] 32*1e72d8d2Sderaadt 33*1e72d8d2Sderaadt45. Consider enhancing the "patch" and "tag" command support in the module 34*1e72d8d2Sderaadt database -- they seem hard to use since these commands deal directly 35*1e72d8d2Sderaadt with the RCS ,v files. 36*1e72d8d2Sderaadt 37*1e72d8d2Sderaadt46. Perhaps checkout/checkin/tag/patch commands should be imbedded in the 38*1e72d8d2Sderaadt file system directly, using special known command names? 39*1e72d8d2Sderaadt 40*1e72d8d2Sderaadt49. cvs xxx commands should be able to deal with files in other 41*1e72d8d2Sderaadt directories. I want to do a cvs add foo/bar.c. 42*1e72d8d2Sderaadt [[ most commands now use the generic recursion processor, but not all; 43*1e72d8d2Sderaadt this note is left here to remind me to fix the others ]] 44*1e72d8d2Sderaadt 45*1e72d8d2Sderaadt51. a way to identify what files other people are working on. Imagine "cvs 46*1e72d8d2Sderaadt modified", which prints out a table like 47*1e72d8d2Sderaadt 48*1e72d8d2Sderaadt file modifiers 49*1e72d8d2Sderaadt ===== ========= 50*1e72d8d2Sderaadt foo.c 51*1e72d8d2Sderaadt bar.c wsd 52*1e72d8d2Sderaadt baz.c nrt jda 53*1e72d8d2Sderaadt 54*1e72d8d2Sderaadt I think this would be pretty difficult; I don't know if this 55*1e72d8d2Sderaadt information is stored anywhere. Also it's hard to say how one gets a 56*1e72d8d2Sderaadt user name, maybe a path to their local hierarchy is all you could get. 57*1e72d8d2Sderaadt [[ the history stuff does some of this, but not all ]] 58*1e72d8d2Sderaadt 59*1e72d8d2Sderaadt52. SCCS has a feature that I would *love* to see in CVS, as it is very 60*1e72d8d2Sderaadt useful. One may make a private copy of SCCS suid to a particular user, 61*1e72d8d2Sderaadt so other users in the authentication list may check files in and out of 62*1e72d8d2Sderaadt a project directory without mucking about with groups. Is there any 63*1e72d8d2Sderaadt plan to provide a similar functionality to CVS? Our site (and, I'd 64*1e72d8d2Sderaadt imagine, many other sites with large user bases) has decided against 65*1e72d8d2Sderaadt having the user-groups feature of unix available to the users, due to 66*1e72d8d2Sderaadt perceived administrative, technical and performance headaches. A tool 67*1e72d8d2Sderaadt such as CVS with features that provide group-like functionality would 68*1e72d8d2Sderaadt be a huge help. 69*1e72d8d2Sderaadt 70*1e72d8d2Sderaadt53. I'd suggest a way to notify users if/when a file(s) is being worked on. 71*1e72d8d2Sderaadt I suggest: 72*1e72d8d2Sderaadt + Always checkout/update files a readonly. 73*1e72d8d2Sderaadt + To work on a file, the user should do: 74*1e72d8d2Sderaadt cvs advise filename 75*1e72d8d2Sderaadt + This would maintain their email address associated with that 76*1e72d8d2Sderaadt file name in the repository and change the file mode to writable. 77*1e72d8d2Sderaadt + If other references to that file exist, the registered individuals 78*1e72d8d2Sderaadt are notified via email that another user(s) is going to be working 79*1e72d8d2Sderaadt on same. 80*1e72d8d2Sderaadt + When a committ occurs, the user is automatically 'unadvise'd (the 81*1e72d8d2Sderaadt inverse command should be supported as well) and other's are notified 82*1e72d8d2Sderaadt that a merge will be necessary before their checkin can be 83*1e72d8d2Sderaadt successful. 84*1e72d8d2Sderaadt 85*1e72d8d2Sderaadt62. Consider using revision controlled files and directories to handle the 86*1e72d8d2Sderaadt new module format -- consider a cvs command front-end to 87*1e72d8d2Sderaadt add/delete/modify module contents, maybe. 88*1e72d8d2Sderaadt 89*1e72d8d2Sderaadt63. The "import" and vendor support commands (co -j) need to be documented 90*1e72d8d2Sderaadt better. 91*1e72d8d2Sderaadt 92*1e72d8d2Sderaadt64. Need to greatly increase the performance of an initial checkout. 93*1e72d8d2Sderaadt [[ it got better, then we added functionality, making it worse again ]] 94*1e72d8d2Sderaadt 95*1e72d8d2Sderaadt66. Length of the CVS temporary files must be limited to 14 characters for 96*1e72d8d2Sderaadt System-V stupid support. As weel as the length on the CVS.adm files. 97*1e72d8d2Sderaadt 98*1e72d8d2Sderaadt67. cvs import should populate the vendor sources with CVS.adm files so 99*1e72d8d2Sderaadt that one could use the vendor sources directly without having the check 100*1e72d8d2Sderaadt them out. 101*1e72d8d2Sderaadt 102*1e72d8d2Sderaadt69. Consider enhacing import to add a module automatically to the module 103*1e72d8d2Sderaadt database. Perhaps with a new option, or perhaps with an editor. 104*1e72d8d2Sderaadt 105*1e72d8d2Sderaadt72. Consider re-design of the module -o, -i, -t options to use the file 106*1e72d8d2Sderaadt system more intuitively. 107*1e72d8d2Sderaadt 108*1e72d8d2Sderaadt73. Consider an option (in .cvsrc?) to automatically add files that are new 109*1e72d8d2Sderaadt and specified to commit. 110*1e72d8d2Sderaadt 111*1e72d8d2Sderaadt74. Consider adding a way to remove directories/files that you are done 112*1e72d8d2Sderaadt with... somehow. 113*1e72d8d2Sderaadt [[ cvs release sort of does this ]] 114*1e72d8d2Sderaadt 115*1e72d8d2Sderaadt76. Consider adding a layer of abstraction so that CVS can work with both 116*1e72d8d2Sderaadt RCS and SCCS files. Larry says this should be #ifdef'ed. 117*1e72d8d2Sderaadt 118*1e72d8d2Sderaadt79. Might be nice to have some sort of interface to TFS and tagged 119*1e72d8d2Sderaadt revisions. 120*1e72d8d2Sderaadt 121*1e72d8d2Sderaadt82. Maybe the import stuff should allow an arbitrary revision to be 122*1e72d8d2Sderaadt specified. 123*1e72d8d2Sderaadt 124*1e72d8d2Sderaadt84. Improve the documentation about administration of the repository and 125*1e72d8d2Sderaadt how to add/remove files and the use of symbolic links. 126*1e72d8d2Sderaadt 127*1e72d8d2Sderaadt85. Add revision controlled symbolic links to CVS using one of the tag 128*1e72d8d2Sderaadt fields in the RCS file. 129*1e72d8d2Sderaadt 130*1e72d8d2Sderaadt91. Better document the format of the source repository and how one might 131*1e72d8d2Sderaadt convert their current SCCS or RCS files into CVS format. 132*1e72d8d2Sderaadt 133*1e72d8d2Sderaadt92. Look into this: 134*1e72d8d2Sderaadt After a bit of soul searching via dbx, I realized my sin was that I'd 135*1e72d8d2Sderaadt specified "echo" as the program to call from loginfo. The commit 136*1e72d8d2Sderaadt procedure worked fine till it hit my echo, then silently aborted 137*1e72d8d2Sderaadt leaving the lockfiles intact. Since I needn't use the loginfo 138*1e72d8d2Sderaadt facility, I simply removed those commands and it all works. 139*1e72d8d2Sderaadt 140*1e72d8d2Sderaadt93. Need to think hard about release and development environments. Think 141*1e72d8d2Sderaadt about execsets as well. 142*1e72d8d2Sderaadt 143*1e72d8d2Sderaadt97. The documentation should describe how to undo a change ("cvs 144*1e72d8d2Sderaadtupdate -j 1.2 -j 1.1 foo.c" followed by a commit undoes the change 145*1e72d8d2Sderaadtfrom 1.1 to 1.2). 146*1e72d8d2Sderaadt 147*1e72d8d2Sderaadt98. If diff3 bombs out (too many differences) cvs then thinks that the file 148*1e72d8d2Sderaadt has been updated and is OK to be commited even though the file 149*1e72d8d2Sderaadt has not yet been merged. 150*1e72d8d2Sderaadt 151*1e72d8d2Sderaadt100. Checked out files should have revision control support. Maybe. 152*1e72d8d2Sderaadt 153*1e72d8d2Sderaadt102. Perhaps directory modes should be propagated on all import check-ins. 154*1e72d8d2Sderaadt Not necessarily uid/gid changes. 155*1e72d8d2Sderaadt 156*1e72d8d2Sderaadt103. setuid/setgid on files is suspect. 157*1e72d8d2Sderaadt 158*1e72d8d2Sderaadt104. cvs should recover nicely on unreadable files/directories. 159*1e72d8d2Sderaadt 160*1e72d8d2Sderaadt105. cvs should have administrative tools to allow for changing permissions 161*1e72d8d2Sderaadt and modes and what not. In particular, this would make cvs a 162*1e72d8d2Sderaadt more attractive alternative to rdist. 163*1e72d8d2Sderaadt 164*1e72d8d2Sderaadt107. It should be possible to specify a list of symbolic revisions to 165*1e72d8d2Sderaadt checkout such that the list is processed in reverse order looking for 166*1e72d8d2Sderaadt matches within the RCS file for the symbolic revision. If there is 167*1e72d8d2Sderaadt not a match, the next symbolic rev on the list is checked, and so on, 168*1e72d8d2Sderaadt until all symbolic revs are exhausted. This would allow one to, say, 169*1e72d8d2Sderaadt checkout "4.0" + "4.0.3" + "4.0.3Patch1" + "4.0.3Patch2" to get the 170*1e72d8d2Sderaadt most recent 4.x stuff. This is usually handled by just specifying the 171*1e72d8d2Sderaadt right release_tag, but most people forget to do this. 172*1e72d8d2Sderaadt 173*1e72d8d2Sderaadt108. If someone creates a whole new directory (i.e. adds it to the cvs 174*1e72d8d2Sderaadt repository) and you happen to have a directory in your source farm by 175*1e72d8d2Sderaadt the same name, when you do your cvs update -d it SILENTLY does 176*1e72d8d2Sderaadt *nothing* to that directory. At least, I think it was silent; 177*1e72d8d2Sderaadt certainly, it did *not* abort my cvs update, as it would have if the 178*1e72d8d2Sderaadt same thing had happened with a file instead of a directory. 179*1e72d8d2Sderaadt 180*1e72d8d2Sderaadt109. I had gotten pieces of the sys directory in the past but not a 181*1e72d8d2Sderaadt complete tree. I just did something like: 182*1e72d8d2Sderaadt 183*1e72d8d2Sderaadt cvs get * 184*1e72d8d2Sderaadt 185*1e72d8d2Sderaadt Where sys was in * and got the message 186*1e72d8d2Sderaadt 187*1e72d8d2Sderaadt cvs get: Executing 'sys/tools/make_links sys' 188*1e72d8d2Sderaadt sh: sys/tools/make_links: not found 189*1e72d8d2Sderaadt 190*1e72d8d2Sderaadt I suspect this is because I didn't have the file in question, 191*1e72d8d2Sderaadt but I do not understand how I could fool it into getting an 192*1e72d8d2Sderaadt error. I think a later cvs get sys seemed to work so perhaps 193*1e72d8d2Sderaadt something is amiss in handling multiple arguments to cvs get? 194*1e72d8d2Sderaadt 195*1e72d8d2Sderaadt113. The "cvs update" command should tee its output to a log file in ".". 196*1e72d8d2Sderaadt (why? What is wrong with piping stdout to "tee"? -kingdon, Jun 1995) 197*1e72d8d2Sderaadt 198*1e72d8d2Sderaadt115. I still think "cvs modules" is a good idea. 199*1e72d8d2Sderaadt Since everything else is inside cvs, "mkmodules" should be in there too: 200*1e72d8d2Sderaadt 201*1e72d8d2Sderaadt Add a "modules" (synonym "mod") command directly in cvs. 202*1e72d8d2Sderaadt ("checkout -c" is not really intuitive. I'd move it into "mod -s".) 203*1e72d8d2Sderaadt 204*1e72d8d2Sderaadt "mod" Print database as typed. (line count as record id?) 205*1e72d8d2Sderaadt "mod -s" Print the sorted database (as "checkout -c" does now) 206*1e72d8d2Sderaadt "mod -m" Internal replacement for "mkmodules" command. 207*1e72d8d2Sderaadt "mod module ..." Print the raw dbm record for the named modules 208*1e72d8d2Sderaadt "mod -p module ..." Print relative filenames contained in modules.(no ",v") 209*1e72d8d2Sderaadt "mod -l module ..." Prints more info about relative filenames ("ls -l"?) 210*1e72d8d2Sderaadt "mod -f file ..." Tells you what module(s) the filenames are in. 211*1e72d8d2Sderaadt 212*1e72d8d2Sderaadt119. Consider an option to have import checkout the RCS or SCCS files 213*1e72d8d2Sderaadt if necessary. 214*1e72d8d2Sderaadt 215*1e72d8d2Sderaadt122. If Name_Repository fails, it currently causes CVS to die completely. It 216*1e72d8d2Sderaadt should instead return NULL and have the caller do something reasonable. 217*1e72d8d2Sderaadt 218*1e72d8d2Sderaadt123. Add a flag to import to not build vendor branches for local code. 219*1e72d8d2Sderaadt 220*1e72d8d2Sderaadt124. Anyway, I thought you might want to add something like the following 221*1e72d8d2Sderaadt to the cvs and mkmodules man pages: 222*1e72d8d2Sderaadt 223*1e72d8d2Sderaadt BUGS 224*1e72d8d2Sderaadt The sum of the sizes of a module key and its contents are 225*1e72d8d2Sderaadt limited. See ndbm(3). 226*1e72d8d2Sderaadt 227*1e72d8d2Sderaadt126. Do an analysis to see if CVS is forgetting to close file descriptors. 228*1e72d8d2Sderaadt Especially when committing many files (more than the open file limit 229*1e72d8d2Sderaadt for the particular UNIX). 230*1e72d8d2Sderaadt 231*1e72d8d2Sderaadt127. Look at *info files; they should all be quiet if the files are not 232*1e72d8d2Sderaadt there. Should be able to point at a RCS directory and go. 233*1e72d8d2Sderaadt 234*1e72d8d2Sderaadt128. When I tag a file, the message tells me that I'm tagging a directory. 235*1e72d8d2Sderaadt 236*1e72d8d2Sderaadt129. Something strange seems to have happened here. When I check this out, 237*1e72d8d2Sderaadt the update lines (U CFTS/...) seem to report a bogus leading CFTS 238*1e72d8d2Sderaadt (e.g. U CFTS/Medusa_TS/...) when the later files are checked out. 239*1e72d8d2Sderaadt 240*1e72d8d2Sderaadt The directory structure doesn't seem to be botched, just the 241*1e72d8d2Sderaadt messages. I don't recall seeing this before. 242*1e72d8d2Sderaadt 243*1e72d8d2Sderaadt130. cvs diff with no -r arguments does not need to look up the current RCS 244*1e72d8d2Sderaadt version number since it only cares about what's in the Entries file. 245*1e72d8d2Sderaadt This should make it much faster. 246*1e72d8d2Sderaadt 247*1e72d8d2Sderaadt It should ParseEntries itself and access the entries list much like 248*1e72d8d2Sderaadt Version_TS does (sticky tags and sticky options may need to be 249*1e72d8d2Sderaadt supported here as well). Then it should only diff the things that 250*1e72d8d2Sderaadt have the wrong time stamp (the ones that look modified). 251*1e72d8d2Sderaadt 252*1e72d8d2Sderaadt134. Make a statement about using hard NFS mounts to your source 253*1e72d8d2Sderaadt repository. Look into checking NULL fgets() returns with ferror() to 254*1e72d8d2Sderaadt see if an error had occurred. 255*1e72d8d2Sderaadt 256*1e72d8d2Sderaadt135. The email CVS sends with each checkin, should include the version 257*1e72d8d2Sderaadt number of each file it is checking in. 258*1e72d8d2Sderaadt [[ Sort of solved by contrib/log.pl, which does a good job of this ]] 259*1e72d8d2Sderaadt 260*1e72d8d2Sderaadt137. Some sites might want CVS to fsync() the RCS ,v file to protect 261*1e72d8d2Sderaadt against nasty hardware errors. There is a slight performance hit with 262*1e72d8d2Sderaadt doing so, though, so it should be configurable in the .cvsrc file. 263*1e72d8d2Sderaadt Also, along with this, we should look at the places where CVS itself 264*1e72d8d2Sderaadt could be a little more synchronous so as not to lose data. 265*1e72d8d2Sderaadt [[ I've done some of this, but it could use much more ]] 266*1e72d8d2Sderaadt 267*1e72d8d2Sderaadt138. Some people have suggested that CVS use a VPATH-like environment 268*1e72d8d2Sderaadt variable to limit the amount of sources that need to be duplicated for 269*1e72d8d2Sderaadt sites with giant source trees and no disk space. 270*1e72d8d2Sderaadt 271*1e72d8d2Sderaadt141. Import should accept modules as its directory argument. 272*1e72d8d2Sderaadt 273*1e72d8d2Sderaadt143. Update the documentation to show that the source repository is 274*1e72d8d2Sderaadt something far away from the files that you work on. 275*1e72d8d2Sderaadt 276*1e72d8d2Sderaadt144. Have cvs checkout look for the environment variable CVSPREFIX 277*1e72d8d2Sderaadt (or CVSMODPREFIX or some such). If it's set, then when looking 278*1e72d8d2Sderaadt up an alias in the modules database, first look it up with the 279*1e72d8d2Sderaadt value of CVSPREFIX attached, and then look for the alias itself. 280*1e72d8d2Sderaadt This would be useful when you have several projects in a single 281*1e72d8d2Sderaadt repository. You could have aliases abc_src and xyz_src and 282*1e72d8d2Sderaadt tell people working on project abc to put "setenv CVSPREFIX abc_" 283*1e72d8d2Sderaadt in their .cshrc file (or equivalent for other shells). 284*1e72d8d2Sderaadt Then they could do "cvs co src" to get a copy of their src 285*1e72d8d2Sderaadt directory, not xyz's. (This should create a directory called 286*1e72d8d2Sderaadt src, not abc_src.) 287*1e72d8d2Sderaadt 288*1e72d8d2Sderaadt145. After you create revision 1.1.1.1 in the previous scenario, if 289*1e72d8d2Sderaadt you do "cvs update -r1 filename" you get revision 1.1, not 290*1e72d8d2Sderaadt 1.1.1.1. It would be nice to get the later revision. Again, 291*1e72d8d2Sderaadt this restriction comes from RCS and is probably hard to 292*1e72d8d2Sderaadt change in CVS. Sigh. 293*1e72d8d2Sderaadt 294*1e72d8d2Sderaadt |"cvs update -r1 filename" does not tell RCS to follow any branches. CVS 295*1e72d8d2Sderaadt |tries to be consistent with RCS in this fashion, so I would not change 296*1e72d8d2Sderaadt |this. Within CVS we do have the flexibility of extending things, like 297*1e72d8d2Sderaadt |making a revision of the form "-r1HEAD" find the most recent revision 298*1e72d8d2Sderaadt |(branch or not) with a "1." prefix in the RCS file. This would get what 299*1e72d8d2Sderaadt |you want maybe. 300*1e72d8d2Sderaadt 301*1e72d8d2Sderaadt This would be very useful. Though I would prefer an option 302*1e72d8d2Sderaadt such as "-v1" rather than "-r1HEAD". This option might be 303*1e72d8d2Sderaadt used quite often. 304*1e72d8d2Sderaadt 305*1e72d8d2Sderaadt146. The merging of files should be controlled via a hook so that programs 306*1e72d8d2Sderaadt other than "rcsmerge" can be used, like Sun's filemerge or emacs's 307*1e72d8d2Sderaadt emerge.el. (but be careful in making this work client/server--it means 308*1e72d8d2Sderaadt doing the interactive merging at the end after the server is done). 309*1e72d8d2Sderaadt 310*1e72d8d2Sderaadt149. On Sun, 2 Feb 92 22:01:38 EST, rouilj@dl5000.bc.edu (John P. Rouillard) 311*1e72d8d2Sderaadt said: 312*1e72d8d2Sderaadt Maybe there should be an option to cvs admin that allows a user to 313*1e72d8d2Sderaadt change the Repository file with some degree of error checking? 314*1e72d8d2Sderaadt Something like "cvs admin reposmv /old/path /new/pretty/path". Before 315*1e72d8d2Sderaadt it does the replace it check to see that the files 316*1e72d8d2Sderaadt /new/pretty/path/<dir>/<files> exist. 317*1e72d8d2Sderaadt 318*1e72d8d2Sderaadt150. I have a customer request for a way to specify log message per 319*1e72d8d2Sderaadt file, non-interactively before the commit, such that a single, fully 320*1e72d8d2Sderaadt recursive commit prompts for one commit message, and concatenates the 321*1e72d8d2Sderaadt per file messages for each file. In short, one commit, one editor 322*1e72d8d2Sderaadt session, log messages allowed to vary across files within the commit. 323*1e72d8d2Sderaadt Also, the per file messages should be allowed to be written when the 324*1e72d8d2Sderaadt files are changed, which may predate the commit considerably. 325*1e72d8d2Sderaadt 326*1e72d8d2Sderaadt A new command seems appropriate for this. The state can be saved in the 327*1e72d8d2Sderaadt CVS directory. I.e., 328*1e72d8d2Sderaadt 329*1e72d8d2Sderaadt % cvs msg foo.c 330*1e72d8d2Sderaadt Enter log message for foo.c 331*1e72d8d2Sderaadt >> fixed an uninitialized variable 332*1e72d8d2Sderaadt >> ^D 333*1e72d8d2Sderaadt 334*1e72d8d2Sderaadt The text is saved as CVS/foo.c,m (or some such name) and commit is 335*1e72d8d2Sderaadt modified to append (prepend?) the text (if found) to the log message 336*1e72d8d2Sderaadt specified at commit time. Easy enough. 337*1e72d8d2Sderaadt 338*1e72d8d2Sderaadt151. Also, is there a flag I am missing that allows replacing Ulrtx_Build 339*1e72d8d2Sderaadt by Ultrix_build? I.E. I would like a tag replacement to be a one step 340*1e72d8d2Sderaadt operation rather than a two step "cvs rtag -r Ulrtx_Build Ultrix_Build" 341*1e72d8d2Sderaadt followed by "cvs trag -d Ulrtx_Build" 342*1e72d8d2Sderaadt 343*1e72d8d2Sderaadt152. The "cvs -n" option does not work as one would expect for all the 344*1e72d8d2Sderaadt commands. In particular, for "commit" and "import", where one would 345*1e72d8d2Sderaadt also like to see what it would do, without actually doing anything. 346*1e72d8d2Sderaadt 347*1e72d8d2Sderaadt153. There should be some command (maybe I just haven't figured 348*1e72d8d2Sderaadt out which one...) to import a source directory which is already 349*1e72d8d2Sderaadt RCS-administered without losing all prior RCS gathered data. Thus, it 350*1e72d8d2Sderaadt would have to examine the RCS files and choose a starting version and 351*1e72d8d2Sderaadt branch higher than previous ones used. 352*1e72d8d2Sderaadt 353*1e72d8d2Sderaadt154. When committing the modules file, a pre-commit check should be done to 354*1e72d8d2Sderaadt verify the validity of the new modules file before allowing it to be 355*1e72d8d2Sderaadt committed. This could easily be done by adding an option to mkmodules 356*1e72d8d2Sderaadt to perform the verification. 357*1e72d8d2Sderaadt 358*1e72d8d2Sderaadt155. The options for "cvs history" are mutually exclusive, even though 359*1e72d8d2Sderaadt useful queries can be done if they are not, as in specifying both a 360*1e72d8d2Sderaadt module and a tag. A workaround is to specify the module, then run the 361*1e72d8d2Sderaadt output through grep to only display lines that begin with T, which are 362*1e72d8d2Sderaadt tag lines. 363*1e72d8d2Sderaadt 364*1e72d8d2Sderaadt156. Also, how hard would it be to allow continuation lines in the 365*1e72d8d2Sderaadt {commit,rcs,log}info files? It would probably be useful with all of 366*1e72d8d2Sderaadt the various flags that are now available, or if somebody has a lot of 367*1e72d8d2Sderaadt files to put into a module. 368*1e72d8d2Sderaadt 369*1e72d8d2Sderaadt157. The "cvs release" command does not understand about module names with 370*1e72d8d2Sderaadt the same flexibility that the "checkout" and "rdiff" commands do. 371*1e72d8d2Sderaadt It should, though, since it's confusing right now. 372*1e72d8d2Sderaadt 373*1e72d8d2Sderaadt158. If I do a recursive commit and find that the same RCS file is checked 374*1e72d8d2Sderaadt out (and modified!) in two different places within my checked-out 375*1e72d8d2Sderaadt files (but within the realm of a single "commit"), CVS will commit the 376*1e72d8d2Sderaadt first change, then overwrite that change with the second change. We 377*1e72d8d2Sderaadt should catch this (typically unusual) case and issue an appropriate 378*1e72d8d2Sderaadt diagnostic and die. 379*1e72d8d2Sderaadt 380*1e72d8d2Sderaadt159. On "update", when a merge is done, CVS should remember that your file 381*1e72d8d2Sderaadt was merged into and should keep reminding you of this fact until you 382*1e72d8d2Sderaadt actually look at the file (change its access time). Once you do this, 383*1e72d8d2Sderaadt it should go back to being a normal, unmodified file. This way, after 384*1e72d8d2Sderaadt a big update, you can run update again to see which files just got 385*1e72d8d2Sderaadt merged and may need attention. 386*1e72d8d2Sderaadt 387*1e72d8d2Sderaadt160. The checks that the commit command does should be extended to make 388*1e72d8d2Sderaadt sure that the revision that we will lock is not already locked by 389*1e72d8d2Sderaadt someone else. Maybe it should also lock the new revision if the old 390*1e72d8d2Sderaadt revision was already locked by the user as well, thus moving the lock 391*1e72d8d2Sderaadt forward after the commit. 392*1e72d8d2Sderaadt 393*1e72d8d2Sderaadt161. The date parser included with CVS (lib/getdate.y) does not support 394*1e72d8d2Sderaadt such RCS-supported dates as "1992/03/07". It probably should. 395*1e72d8d2Sderaadt 396*1e72d8d2Sderaadt163. The rtag/tag commands should have an option that removes the specified 397*1e72d8d2Sderaadt tag from any file that is in the attic. This allows one to re-use a 398*1e72d8d2Sderaadt tag (like "Mon", "Tue", ...) all the time and still have it tag the 399*1e72d8d2Sderaadt real main-line code. 400*1e72d8d2Sderaadt 401*1e72d8d2Sderaadt164. The *info files should allow multiple ocurrences of $CVSROOT and/or 402*1e72d8d2Sderaadt other cvs variables. They probably should *not* expand environment 403*1e72d8d2Sderaadt variables, as their behavior probably should not depend on who is 404*1e72d8d2Sderaadt running CVS. 405*1e72d8d2Sderaadt 406*1e72d8d2Sderaadt165. The "import" command will create RCS files automatically, but will 407*1e72d8d2Sderaadt screw-up when trying to create long file names on short file name 408*1e72d8d2Sderaadt file systems. Perhaps import should be a bit more cautious. 409*1e72d8d2Sderaadt 410*1e72d8d2Sderaadt166. There really needs to be a "Getting Started" document which describes 411*1e72d8d2Sderaadt some of the new CVS philosophies. Folks coming straight from SCCS or 412*1e72d8d2Sderaadt RCS might be confused by "cvs import". Also need to explain: 413*1e72d8d2Sderaadt - How one might setup their $CVSROOT 414*1e72d8d2Sderaadt - What all the tags mean in an "import" command 415*1e72d8d2Sderaadt - Tags are important; revision numbers are not 416*1e72d8d2Sderaadt 417*1e72d8d2Sderaadt167. "cvs log" doesn't understand about CVS magic branch numbers. As such, 418*1e72d8d2Sderaadt the command: 419*1e72d8d2Sderaadt 420*1e72d8d2Sderaadt cvs log -r1.63.2 421*1e72d8d2Sderaadt cvs log -rC2 422*1e72d8d2Sderaadt 423*1e72d8d2Sderaadt where "C2" is a magic branch that resolves to 1.63.2 do not print the 424*1e72d8d2Sderaadt same things. Sigh. 425*1e72d8d2Sderaadt 426*1e72d8d2Sderaadt169. We are using CVS as the configuration control for a software reuse library. 427*1e72d8d2Sderaadt What we do is do system calls passing the needed arguments. In the next 428*1e72d8d2Sderaadt release, it would be nice to see an option to put cvs .o files into a 429*1e72d8d2Sderaadt archive library with an API. This enhancement would go nicely with the 430*1e72d8d2Sderaadt notion of being able to integrate tools into a large software engineering 431*1e72d8d2Sderaadt environment. 432*1e72d8d2Sderaadt 433*1e72d8d2Sderaadt170. Is there an "info" file that can be invoked when a file is checked out, or 434*1e72d8d2Sderaadt updated ? What I want to do is to advise users, particularly novices, of 435*1e72d8d2Sderaadt the state of their working source whenever they check something out, as 436*1e72d8d2Sderaadt a sanity check. 437*1e72d8d2Sderaadt 438*1e72d8d2Sderaadt For example, I've written a perl script which tells you what branch you're 439*1e72d8d2Sderaadt on, if any. Hopefully this will help guard against mistaken checkins to 440*1e72d8d2Sderaadt the trunk, or to the wrong branch. I suppose I can do this in 441*1e72d8d2Sderaadt "commitinfo", but it'd be nice to advise people before they edit their 442*1e72d8d2Sderaadt files. 443*1e72d8d2Sderaadt 444*1e72d8d2Sderaadt It would also be nice if there was some sort of "verboseness" switch to 445*1e72d8d2Sderaadt the checkout and update commands that could turn this invocation of the 446*1e72d8d2Sderaadt script off, for mature users. 447*1e72d8d2Sderaadt 448*1e72d8d2Sderaadt173. We have a tagged branch in CVS. How do we get the version of that branch 449*1e72d8d2Sderaadt (for an entire directory) that corresponds to the files on that branch on a 450*1e72d8d2Sderaadt certain day? I'd like to specify BOTH -r and -D to 'cvs checkout', but I 451*1e72d8d2Sderaadt can't. It looks like I can only specify the date for the main line (as 452*1e72d8d2Sderaadt opposed to any branches). True? Any workarounds to get what I need? 453*1e72d8d2Sderaadt 454*1e72d8d2Sderaadt174. I would like to see "cvs release" modified so that it only removes files 455*1e72d8d2Sderaadt which are known to CVS - all the files in the repository, plus those which 456*1e72d8d2Sderaadt are listed in .cvsignore. This way, if you do leave something valuable in 457*1e72d8d2Sderaadt a source tree you can "cvs release -d" the tree and your non-CVS goodies 458*1e72d8d2Sderaadt are still there. If a user is going to leave non-CVS files in their source 459*1e72d8d2Sderaadt trees, they really should have to clean them up by hand. 460*1e72d8d2Sderaadt 461*1e72d8d2Sderaadt175. And, in the feature request department, I'd dearly love a command-line 462*1e72d8d2Sderaadt interface to adding a new module to the CVSROOT/modules file. 463*1e72d8d2Sderaadt 464*1e72d8d2Sderaadt176. If you use the -i flag in the modules file, you can control access 465*1e72d8d2Sderaadt to source code; this is a Good Thing under certain circumstances. I 466*1e72d8d2Sderaadt just had a nasty thought, and on experiment discovered that the 467*1e72d8d2Sderaadt filter specified by -i is _not_ run before a cvs admin command; as 468*1e72d8d2Sderaadt this allows a user to go behind cvs's back and delete information 469*1e72d8d2Sderaadt (cvs admin -o1.4 file) this seems like a serious problem. 470*1e72d8d2Sderaadt 471*1e72d8d2Sderaadt177. We've got some external vendor source that sits under a source code 472*1e72d8d2Sderaadt hierarchy, and when we do a cvs update, it gets wiped out because 473*1e72d8d2Sderaadt its tag is different from the "main" distribution. I've tried to 474*1e72d8d2Sderaadt use "-I" to ignore the directory, as well as .cvsignore, but this 475*1e72d8d2Sderaadt doesn't work. 476*1e72d8d2Sderaadt 477*1e72d8d2Sderaadt179. "cvs admin" does not log its actions with loginfo, nor does it check 478*1e72d8d2Sderaadt whether the action is allowed with commitinfo. It should. 479