xref: /openbsd/gnu/usr.bin/cvs/PROJECTS (revision 2286d8ed)
11e72d8d2SderaadtThis is a list of projects for CVS.  In general, unlike the things in
21e72d8d2Sderaadtthe TODO file, these need more analysis to determine if and how
31e72d8d2Sderaadtworthwhile each task is.
41e72d8d2Sderaadt
51e72d8d2SderaadtI haven't gone through TODO, but it's likely that it has entries that
61e72d8d2Sderaadtare actually more appropriate for this list.
71e72d8d2Sderaadt
81e72d8d2Sderaadt0. Improved Efficency
91e72d8d2Sderaadt
101e72d8d2Sderaadt* CVS uses a single doubly linked list/hash table data structure for
111e72d8d2Sderaadt  all of its lists.  Since the back links are only used for deleting
121e72d8d2Sderaadt  list nodes it might be beneficial to use singly linked lists or a
131e72d8d2Sderaadt  tree structure.  Most likely, a single list implementation will not
141e72d8d2Sderaadt  be appropriate for all uses.
151e72d8d2Sderaadt
161e72d8d2Sderaadt  One easy change would be to remove the "type" field out of the list
171e72d8d2Sderaadt  and node structures.  I have found it to be of very little use when
181e72d8d2Sderaadt  debugging, and each instance eats up a word of memory.  This can add
191e72d8d2Sderaadt  up and be a problem on memory-starved machines.
201e72d8d2Sderaadt
211e72d8d2Sderaadt  Profiles have shown that on fast machines like the Alpha, fsortcmp()
221e72d8d2Sderaadt  is one of the hot spots.
231e72d8d2Sderaadt
241e72d8d2Sderaadt* Dynamically allocated character strings are created, copied, and
251e72d8d2Sderaadt  destroyed throughout CVS.  The overhead of malloc()/strcpy()/free()
261e72d8d2Sderaadt  needs to be measured.  If significant, it could be minimized by using a
271e72d8d2Sderaadt  reference counted string "class".
281e72d8d2Sderaadt
291e72d8d2Sderaadt* File modification time is stored as a character string.  It might be
301e72d8d2Sderaadt  worthwile to use a time_t internally if the time to convert a time_t
311e72d8d2Sderaadt  (from struct stat) to a string is greater that the time to convert a
321e72d8d2Sderaadt  ctime style string (from the entries file) to a time_t.  time_t is
331e72d8d2Sderaadt  an machine-dependant type (although it's pretty standard on UN*X
341e72d8d2Sderaadt  systems), so we would have to have different conversion routines.
351e72d8d2Sderaadt  Profiles show that both operations are called about the same number
361e72d8d2Sderaadt  of times.
371e72d8d2Sderaadt
381e72d8d2Sderaadt* stat() is one of the largest performance bottlenecks on systems
391e72d8d2Sderaadt  without the 4.4BSD filesystem.  By spliting information out of
401e72d8d2Sderaadt  the filesystem (perhaps the "rename database") we should be
411e72d8d2Sderaadt  able to improve performance.
421e72d8d2Sderaadt
431e72d8d2Sderaadt* Parsing RCS files is very expensive.  This might be unnecessary if
441e72d8d2Sderaadt  RCS files are only used as containers for revisions, and tag,
451e72d8d2Sderaadt  revision, and date information was available in easy to read
461e72d8d2Sderaadt  (and modify) indexes.  This becomes very apparent with files
471e72d8d2Sderaadt  with several hundred revisions.
481e72d8d2Sderaadt
491e72d8d2Sderaadt1. Improved testsuite/sanity check script
501e72d8d2Sderaadt
511e72d8d2Sderaadt* Need to use a code coverage tool to determine how much the sanity
521e72d8d2Sderaadt  script tests, and fill in the holes.
53*50bf276cStholo
54