xref: /openbsd/gnu/usr.bin/cvs/TODO (revision 1e72d8d2)
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