home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / prgramer / unix / doc / cvs13.doc < prev    next >
Text File  |  1993-01-17  |  53KB  |  1,057 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.                                       CCVVSS IIII::
  11.                          PPaarraalllleelliizziinngg SSooffttwwaarree DDeevveellooppmmeenntt
  12.  
  13.                                    _B_r_i_a_n _B_e_r_l_i_n_e_r
  14.                                     _P_r_i_s_m_a_, _I_n_c_.
  15.                               _5_4_6_5 _M_a_r_k _D_a_b_l_i_n_g _B_l_v_d_.
  16.                             _C_o_l_o_r_a_d_o _S_p_r_i_n_g_s_, _C_O  _8_0_9_1_8
  17.                                 _b_e_r_l_i_n_e_r_@_p_r_i_s_m_a_._c_o_m
  18.  
  19.  
  20.                                       _A_B_S_T_R_A_C_T
  21.  
  22.                       The  program  described in this paper fills a
  23.                  need in the UNIX community for a freely  available
  24.                  tool  to manage software revision and release con-
  25.                  trol in a multi-developer, multi-directory, multi-
  26.                  group  environment.   This tool also addresses the
  27.                  increasing need for  tracking  third-party  vendor
  28.                  source  distributions  while  trying  to  maintain
  29.                  local modifications to earlier releases.
  30.  
  31.  
  32.             11..  BBaacckkggrroouunndd
  33.                  In large software development projects, it  is  usually
  34.             necessary for more than one software developer to be modify-
  35.             ing (usually different) modules of  the  code  at  the  same
  36.             time.   Some  of  these  code  modifications  are done in an
  37.             experimental sense, at least until the code  functions  cor-
  38.             rectly,  and  some  testing of the entire program is usually
  39.             necessary.  Then, the modifications are returned to a master
  40.             source  repository  so  that others in the project can enjoy
  41.             the new bug-fix or functionality.  In order to manage such a
  42.             project,  some sort of revision control system is necessary.
  43.                  Specifically, UNIX1 kernel development is an  excellent
  44.             example  of  the  problems that an adequate revision control
  45.             system  must address.  The SunOS2 kernel is composed of over
  46.             a thousand files spread across  a  hierarchy  of  dozens  of
  47.             directories.3 Pieces of the kernel must be  edited  by  many
  48.             -----------
  49.  
  50.  
  51.               1 UNIX is a registered trademark of AT&T.
  52.  
  53.  
  54.               2 SunOS is a trademark of Sun Microsystems, Inc.
  55.  
  56.  
  57.               3 Yes,  the SunOS 4.0 kernel is composed of over
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.                                          -2-
  71.  
  72.  
  73.             software  developers within an organization.  While undesir-
  74.             able in theory, it is not uncommon to have two or more  peo-
  75.             ple  making modifications to the same file within the kernel
  76.             sources in order to facilitate a desired  change.   Existing
  77.             revision  control  systems  like  RCS [Tichy] or SCCS [Bell]
  78.             serialize file modifications by allowing only one  developer
  79.             to  have  a  writable  copy  of a particular file at any one
  80.             point in time.  That developer is said  to  have  ``locked''
  81.             the  file  for  his exclusive use, and no other developer is
  82.             allowed to check out a writable copy of the file  until  the
  83.             locking  developer  has finished impeding others' productiv-
  84.             ity.  Development pressures of  productivity  and  deadlines
  85.             often  force organizations to require that multiple develop-
  86.             ers be able to simultaneously edit copies of the same  revi-
  87.             sion controlled file.
  88.                  The  necessity  for  multiple  developers to modify the
  89.             same file concurrently questions the value of serialization-
  90.             based  policies in traditional revision control.  This paper
  91.             discusses the approach that Prisma took in adapting a  stan-
  92.             dard  revision  control  system, RCS, along with an existing
  93.             public-domain collection of shell scripts that sits atop RCS
  94.             and  provides the basic conflict-resolution algorithms.  The
  95.             resulting program, ccvvss, addresses not only the issue of con-
  96.             flict-resolution  in a multi-developer open-editing environ-
  97.             ment, but also the issues of software  release  control  and
  98.             vendor source support and integration.
  99.  
  100.             22..  TThhee CCVVSS PPrrooggrraamm
  101.                  ccvvss  (Concurrent Versions System) is a front end to the
  102.             RCS revision control system  which  extends  the  notion  of
  103.             revision  control  from  a  collection  of files in a single
  104.             directory to a hierarchical collection of  directories  each
  105.             containing revision controlled files.  Directories and files
  106.             in the ccvvss system can be combined together in many  ways  to
  107.             form  a software release.  ccvvss provides the functions neces-
  108.             sary to manage these software releases and  to  control  the
  109.             concurrent  editing  of source files among multiple software
  110.             developers.
  111.                  The six major features of ccvvss  are  listed  below,  and
  112.             will be described in more detail in the following sections:
  113.                  1.   Concurrent  access  and  conflict-resolution algo-
  114.                       rithms to guarantee that source  changes  are  not
  115.                       ``lost.''
  116.                  2.   Support  for  tracking  third-party  vendor source
  117.                       distributions while maintaining the local  modifi-
  118.                       cations made to those sources.
  119.                  3.   A  flexible  module  database that provides a sym-
  120.                       bolic mapping of names to components of  a  larger
  121.                       software   distribution.   This  symbolic  mapping
  122.             -----------
  123.  
  124.  
  125.             a _t_h_o_u_s_a_n_d files!
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.                       provides  for  location  independence  within  the
  140.                       software  release  and, for example, allows one to
  141.                       check out a copy of the ``diff''  program  without
  142.                       ever knowing that the sources to ``diff'' actually
  143.                       reside in the ``bin/diff'' directory.
  144.                  4.   Configurable logging support allows all  ``commit-
  145.                       ted''  source  file  changes to be logged using an
  146.                       arbitrary program to save the log  messages  in  a
  147.                       file, notesfile, or news database.
  148.                  5.   A  software release can be symbolically tagged and
  149.                       checked out at any time based  on  that  tag.   An
  150.                       exact  copy  of a previous software release can be
  151.                       checked out at any  time,  _r_e_g_a_r_d_l_e_s_s  of  whether
  152.                       files  or directories have been added/removed from
  153.                       the ``current''  software  release.   As  well,  a
  154.                       ``date''  can  be used to check out the _e_x_a_c_t ver-
  155.                       sion of the software release as of  the  specified
  156.                       date.
  157.                  6.   A  ``patch''  format  file  [Wall] can be produced
  158.                       between  two  software  releases,  even   if   the
  159.                       releases span multiple directories.
  160.                  The  sources maintained by ccvvss are kept within a single
  161.             directory hierarchy  known  as  the  ``source  repository.''
  162.             This ``source repository'' holds the actual RCS ``,v'' files
  163.             directly, as well  as  a  special  per-repository  directory
  164.             (CVSROOT.adm)  which  contains a small number of administra-
  165.             tive files that describe the repository and how  it  can  be
  166.             accessed.  See Figure 1 for a picture of the ccvvss tree.
  167.  
  168.             22..11..  SSooffttwwaarree CCoonnfflliicctt RReessoolluuttiioonn44
  169.             -----------
  170.  
  171.  
  172.               4 The  basic conflict-resolution algorithms used
  173.  
  174.  
  175.             in the ccvvss program find their roots in the  origi-
  176.  
  177.  
  178.             nal  work done by Dick Grune at Vrije Universiteit
  179.  
  180.  
  181.             in Amsterdam and posted  to  ccoommpp..ssoouurrcceess..uunniixx  in
  182.  
  183.  
  184.             the volume 6 release sometime in 1986.  This orig-
  185.  
  186.  
  187.             inal version of ccvvss  was  a  collection  of  shell
  188.  
  189.  
  190.             scripts  that  combined to form a front end to the
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.                                          -4-
  203.  
  204.  
  205.                  __________________________________________________
  206.  
  207.                 line from 4.112,9.200 to 5.550,8.887
  208.                 line from 5.447,8.884 to 5.550,8.887 to 5.458,8.933
  209.                 line from 4.112,9.200 to 4.550,8.950
  210.                 line from 4.451,8.978 to 4.550,8.950 to 4.476,9.021
  211.                 line from 4.112,9.200 to 3.737,8.887
  212.                 line from 3.798,8.971 to 3.737,8.887 to 3.830,8.932
  213.                 line from 3.612,8.762 to 4.737,8.137
  214.                 line from 4.638,8.164 to 4.737,8.137 to 4.662,8.208
  215.                 line from 3.612,8.762 to 3.737,8.137
  216.                 line from 3.693,8.231 to 3.737,8.137 to 3.742,8.240
  217.                 line from 3.612,8.762 to 2.612,8.200
  218.                 line from 2.687,8.271 to 2.612,8.200 to 2.712,8.227
  219.                 line from 2.362,9.262 to 2.737,8.950
  220.                 line from 2.645,8.995 to 2.737,8.950 to 2.677,9.033
  221.                 line from 2.362,9.262 to 1.925,8.950
  222.                 line from 1.992,9.028 to 1.925,8.950 to 2.021,8.988
  223.                 line from 3.362,9.762 to 4.050,9.387
  224.                 line from 3.950,9.413 to 4.050,9.387 to 3.974,9.457
  225.                 line from 3.362,9.762 to 2.487,9.387
  226.                 line from 2.570,9.450 to 2.487,9.387 to 2.589,9.404
  227.                 "newfs.c,v" at 4.487,8.043 ljust
  228.                 "mkfs.c,v" at 3.487,8.043 ljust
  229.                 "Makefile,v" at 2.237,8.043 ljust
  230.                 "newfs" at 3.487,8.793 ljust
  231.                 "halt.c,v" at 5.487,8.793 ljust
  232.                 "Makefile,v" at 4.237,8.793 ljust
  233.                 "modules,v" at 2.487,8.793 ljust
  234.                 "loginfo,v" at 1.488,8.793 ljust
  235.                 "etc" at 3.987,9.293 ljust
  236.                 "CVSROOT.adm" at 1.988,9.293 ljust
  237.                 "/src/master" at 2.987,9.793 ljust
  238.  
  239.                  __________________________________________________
  240.  
  241.                                      FFiigguurree 11..
  242.                                ccvvss Source Repository
  243.  
  244.                  ccvvss allows several software developers to edit personal
  245.             copies  of  a  revision  controlled  file concurrently.  The
  246.             revision number of each checked out file is maintained inde-
  247.             pendently for each user, and ccvvss forces the checked out file
  248.             to be current with the ``head'' revision before  it  can  be
  249.             ``committed''  as a permanent change.  A checked out file is
  250.             brought up-to-date with  the  ``head''  revision  using  the
  251.             ``update''  command  of  ccvvss.   This  command  compares  the
  252.             ``head'' revision number with that of the  user's  file  and
  253.             performs  an  RCS  merge operation if they are not the same.
  254.             -----------
  255.  
  256.  
  257.             RCS programs.
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.             The result of the merge is a file that contains  the  user's
  272.             modifications  and  those  modifications that were ``commit-
  273.             ted'' after the user checked out his version of the file (as
  274.             well  as  a  backup  copy of the user's original file).  ccvvss
  275.             points out any conflicts during the merge.  It is the user's
  276.             responsibility  to resolve these conflicts and to ``commit''
  277.             his/her changes when ready.
  278.                  Although  the  ccvvss  conflict-resolution  algorithm  was
  279.             defined  in  1986,  it  is remarkably similar to the ``Copy-
  280.             Modify-Merge''  scenario included with NSE5 and described in
  281.             [Honda] and [Courington].  The  following  explanation  from
  282.             [Honda] also applies to ccvvss:
  283.                  Simply  stated, a developer copies an object with-
  284.                  out locking it, modifies the copy, and then merges
  285.                  the   modified   copy  with  the  original.   This
  286.                  paradigm allows developers to  work  in  isolation
  287.                  from  one another since changes are made to copies
  288.                  of objects.  Because locks are not used,  develop-
  289.                  ment  is  not serialized and can proceed in paral-
  290.                  lel.   Developers,  however,  must  merge  objects
  291.                  after  the changes have been made.  In particular,
  292.                  a developer must resolve conflicts when  the  same
  293.                  object has been modified by someone else.
  294.                  In practice, Prisma has found that conflicts that occur
  295.             when the same object has been modified by someone  else  are
  296.             quite  rare.   When  they do happen, the changes made by the
  297.             other developer are usually easily resolved.  This practical
  298.             use  has  shown that the ``Copy-Modify-Merge'' paradigm is a
  299.             correct and useful one.
  300.  
  301.             22..22..  TTrraacckkiinngg TThhiirrdd--PPaarrttyy SSoouurrccee DDiissttrriibbuuttiioonnss
  302.                  Currently, a large  amount  of  software  is  based  on
  303.             source  distributions from a third-party distributor.  It is
  304.             often the case that local modifications are to  be  made  to
  305.             this  distribution,  _a_n_d  that  the vendor's future releases
  306.             should be tracked.  Rolling your local modifications forward
  307.             into  the  new  vendor release is a time-consuming task, but
  308.             ccvvss can ease this burden somewhat.  The cchheecckkiinn  program  of
  309.             ccvvss initially sets up a source repository by integrating the
  310.             source modules directly from the vendor's release,  preserv-
  311.             ing  the  directory  hierarchy of the vendor's distribution.
  312.             The branch support of RCS  is  used  to  build  this  vendor
  313.             release  as  a branch of the main RCS trunk.  Figure 2 shows
  314.             how the ``head'' tracks a sample vendor branch when no local
  315.             modifications  have  been  made  to  the file.  Once this is
  316.             done, developers can check out files and make local  changes
  317.             -----------
  318.  
  319.  
  320.               5 NSE is the  Network  Software  Environment,  a
  321.  
  322.  
  323.             product of Sun Microsystems, Inc.
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.                                          -6-
  335.  
  336.  
  337.                  __________________________________________________
  338.  
  339.             ellipse at 3.237,6.763 wid 1.000 ht 0.500
  340.             dashwid = 0.050i
  341.             line dashed from 3.237,7.513 to 3.737,7.513 to 3.737,9.762 to 4.237,9.762
  342.             line from 4.138,9.737 to 4.237,9.762 to 4.138,9.787
  343.             line dashed from 2.237,8.262 to 3.237,8.262 to 3.237,7.013
  344.             line from 3.212,7.112 to 3.237,7.013 to 3.262,7.112
  345.             line from 3.737,6.763 to 4.237,6.763
  346.             line from 4.138,6.737 to 4.237,6.763 to 4.138,6.788
  347.             line from 2.237,6.763 to 2.737,6.763
  348.             line from 2.637,6.737 to 2.737,6.763 to 2.637,6.788
  349.             line from 1.738,6.013 to 1.738,6.513
  350.             line from 1.762,6.413 to 1.738,6.513 to 1.713,6.413
  351.             line from 1.238,7.013 to 2.237,7.013 to 2.237,6.513 to 1.238,6.513 to 1.238,7.013
  352.             line from 4.237,9.012 to 5.237,9.012 to 5.237,8.512 to 4.237,8.512 to 4.237,9.012
  353.             line from 4.237,8.012 to 5.237,8.012 to 5.237,7.513 to 4.237,7.513 to 4.237,8.012
  354.             line from 4.237,7.013 to 5.237,7.013 to 5.237,6.513 to 4.237,6.513 to 4.237,7.013
  355.             line from 4.737,7.013 to 4.737,7.513
  356.             line from 4.763,7.413 to 4.737,7.513 to 4.712,7.413
  357.             line from 4.737,8.012 to 4.737,8.512
  358.             line from 4.763,8.412 to 4.737,8.512 to 4.712,8.412
  359.             line from 4.237,10.012 to 5.237,10.012 to 5.237,9.512 to 4.237,9.512 to 4.237,10.012
  360.             line from 4.737,9.012 to 4.737,9.512
  361.             line from 4.763,9.412 to 4.737,9.512 to 4.712,9.412
  362.             line from 5.987,5.013 to 5.987,6.013 to 0.988,6.013 to 0.988,5.013 to 5.987,5.013
  363.             "
  364.             "'SunOS'" at 2.987,6.293 ljust
  365.             "1.1.1" at 3.050,6.793 ljust
  366.             "1.1" at 1.613,6.793 ljust
  367.             "1.1.1.1" at 4.487,6.793 ljust
  368.             "1.1.1.2" at 4.487,7.793 ljust
  369.             "1.1.1.3" at 4.487,8.793 ljust
  370.             "1.1.1.4" at 4.487,9.793 ljust
  371.             "'SunOS_4_0'" at 5.487,6.793 ljust
  372.             "'SunOS_4_0_1'" at 5.487,7.793 ljust
  373.             "'YAPT_5_5C'" at 5.487,8.793 ljust
  374.             "'SunOS_4_0_3'" at 5.487,9.793 ljust
  375.             "rcsfile.c,v" at 2.987,5.543 ljust
  376.  
  377.                  __________________________________________________
  378.  
  379.                                      FFiigguurree 22..
  380.                              ccvvss Vendor Branch Example
  381.             to  the  vendor's  source distribution.  These local changes
  382.             form a new branch to the tree which  is  then  used  as  the
  383.             source  for  future  check  outs.   Figure  3  shows how the
  384.             ``head'' moves to the main RCS trunk when a local  modifica-
  385.             tion is made.
  386.                  When  a new version of the vendor's source distribution
  387.             arrives, the cchheecckkiinn program adds the new and  changed  ven-
  388.             dor's  files to the already existing source repository.  For
  389.             files that have not been changed locally, the new file  from
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.                  __________________________________________________
  404.  
  405.             ellipse at 3.237,6.763 wid 1.000 ht 0.500
  406.             dashwid = 0.050i
  407.             line dashed from 2.800,9.075 to 1.738,9.075 to 1.738,8.012
  408.             line from 1.713,8.112 to 1.738,8.012 to 1.762,8.112
  409.             line from 1.738,7.013 to 1.738,7.513
  410.             line from 1.762,7.413 to 1.738,7.513 to 1.713,7.413
  411.             line from 1.238,8.012 to 2.237,8.012 to 2.237,7.513 to 1.238,7.513 to 1.238,8.012
  412.             line from 3.737,6.763 to 4.237,6.763
  413.             line from 4.138,6.737 to 4.237,6.763 to 4.138,6.788
  414.             line from 2.237,6.763 to 2.737,6.763
  415.             line from 2.637,6.737 to 2.737,6.763 to 2.637,6.788
  416.             line from 1.738,6.013 to 1.738,6.513
  417.             line from 1.762,6.413 to 1.738,6.513 to 1.713,6.413
  418.             line from 1.238,7.013 to 2.237,7.013 to 2.237,6.513 to 1.238,6.513 to 1.238,7.013
  419.             line from 4.237,9.012 to 5.237,9.012 to 5.237,8.512 to 4.237,8.512 to 4.237,9.012
  420.             line from 4.237,8.012 to 5.237,8.012 to 5.237,7.513 to 4.237,7.513 to 4.237,8.012
  421.             line from 4.237,7.013 to 5.237,7.013 to 5.237,6.513 to 4.237,6.513 to 4.237,7.013
  422.             line from 4.737,7.013 to 4.737,7.513
  423.             line from 4.763,7.413 to 4.737,7.513 to 4.712,7.413
  424.             line from 4.737,8.012 to 4.737,8.512
  425.             line from 4.763,8.412 to 4.737,8.512 to 4.712,8.412
  426.             line from 4.237,10.012 to 5.237,10.012 to 5.237,9.512 to 4.237,9.512 to 4.237,10.012
  427.             line from 4.737,9.012 to 4.737,9.512
  428.             line from 4.763,9.412 to 4.737,9.512 to 4.712,9.412
  429.             line from 5.987,5.013 to 5.987,6.013 to 0.988,6.013 to 0.988,5.013 to 5.987,5.013
  430.             "1.2" at 1.613,7.793 ljust
  431.             "
  432.             "'SunOS'" at 2.987,6.293 ljust
  433.             "1.1.1" at 3.050,6.793 ljust
  434.             "1.1" at 1.613,6.793 ljust
  435.             "1.1.1.1" at 4.487,6.793 ljust
  436.             "1.1.1.2" at 4.487,7.793 ljust
  437.             "1.1.1.3" at 4.487,8.793 ljust
  438.             "1.1.1.4" at 4.487,9.793 ljust
  439.             "'SunOS_4_0'" at 5.487,6.793 ljust
  440.             "'SunOS_4_0_1'" at 5.487,7.793 ljust
  441.             "'YAPT_5_5C'" at 5.487,8.793 ljust
  442.             "'SunOS_4_0_3'" at 5.487,9.793 ljust
  443.             "rcsfile.c,v" at 2.987,5.543 ljust
  444.  
  445.                  __________________________________________________
  446.  
  447.                                      FFiigguurree 33..
  448.                       ccvvss Local Modification to Vendor Branch
  449.  
  450.             the vendor becomes the current ``head'' revision.  For files
  451.             that have been modified locally, cchheecckkiinn warns that the file
  452.             must  be  merged  with  the  new  vendor  release.   The ccvvss
  453.             ``join'' command is a useful tool that aids this process  by
  454.             performing  the  necessary  RCS merge, as is done above when
  455.             performing an ``update.''
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.                                          -8-
  467.  
  468.  
  469.                  There is also limited support for ``dual''  derivations
  470.             for  source  files.   See Figure 4 for a sample dual-derived
  471.             file.
  472.                  __________________________________________________
  473.  
  474.             ellipse at 2.337,8.575 wid 0.700 ht 0.375
  475.             ellipse at 2.312,9.137 wid 0.700 ht 0.375
  476.             line from 1.225,9.012 to 1.225,9.363
  477.             line from 1.250,9.263 to 1.225,9.363 to 1.200,9.263
  478.             line from 0.875,9.725 to 1.600,9.725 to 1.600,9.363 to 0.875,9.363 to 0.875,9.725
  479.             line from 0.875,9.012 to 1.600,9.012 to 1.600,8.650 to 0.875,8.650 to 0.875,9.012
  480.             line from 4.050,10.200 to 4.775,10.200 to 4.775,9.850 to 4.050,9.850 to 4.050,10.200
  481.             line from 4.050,9.475 to 4.775,9.475 to 4.775,9.113 to 4.050,9.113 to 4.050,9.475
  482.             line from 4.050,8.762 to 4.775,8.762 to 4.775,8.400 to 4.050,8.400 to 4.050,8.762
  483.             line from 4.425,8.762 to 4.425,9.113
  484.             line from 4.450,9.013 to 4.425,9.113 to 4.400,9.013
  485.             line from 4.425,9.475 to 4.425,9.850
  486.             line from 4.450,9.750 to 4.425,9.850 to 4.400,9.750
  487.             line from 3.050,10.000 to 3.775,10.000 to 3.775,9.637 to 3.050,9.637 to 3.050,10.000
  488.             line from 3.050,9.312 to 3.775,9.312 to 3.775,8.950 to 3.050,8.950 to 3.050,9.312
  489.             line from 0.713,7.325 to 0.713,8.075 to 4.925,8.075 to 4.925,7.325 to 0.713,7.325
  490.             line from 1.238,8.075 to 1.238,8.637
  491.             line from 1.262,8.537 to 1.238,8.637 to 1.213,8.537
  492.             line from 1.613,8.825 to 1.975,8.575
  493.             line from 1.878,8.611 to 1.975,8.575 to 1.907,8.652
  494.             line from 2.675,8.575 to 4.050,8.575
  495.             line from 3.950,8.550 to 4.050,8.575 to 3.950,8.600
  496.             line from 2.675,9.137 to 3.050,9.137
  497.             line from 2.950,9.112 to 3.050,9.137 to 2.950,9.162
  498.             line from 3.425,9.325 to 3.425,9.637
  499.             line from 3.450,9.537 to 3.425,9.637 to 3.400,9.537
  500.             line from 1.613,8.825 to 1.925,9.137
  501.             line from 1.872,9.049 to 1.925,9.137 to 1.837,9.084
  502.             "'BSD'" at 2.138,9.481 ljust
  503.             "1.2" at 1.113,9.543 ljust
  504.             "1.1" at 1.125,8.831 ljust
  505.             "1.1.1.1" at 4.175,8.543 ljust
  506.             "1.1.1.2" at 4.175,9.281 ljust
  507.             "1.1.1.3" at 4.175,9.993 ljust
  508.             "1.1.2.2" at 3.175,9.793 ljust
  509.             "1.1.2.1" at 3.175,9.106 ljust
  510.             "rcsfile.c,v" at 2.425,7.706 ljust
  511.             "1.1.1" at 2.175,8.568 ljust
  512.             "'SunOS'" at 2.125,8.243 ljust
  513.             "1.1.2" at 2.163,9.131 ljust
  514.  
  515.                  __________________________________________________
  516.  
  517.                                      FFiigguurree 44..
  518.                         ccvvss Support For ``Dual'' Derivations
  519.  
  520.             This example tracks  the  SunOS  distribution  but  includes
  521.             major  changes  from  Berkeley.   These  BSD files are saved
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.             directly in the RCS file off a new branch.
  536.  
  537.             22..33..  LLooccaattiioonn IInnddeeppeennddeenntt MMoodduullee DDaattaabbaassee
  538.                  ccvvss contains support for a simple, yet powerful, ``mod-
  539.             ule'' database.  For reasons of efficiency, this database is
  540.             stored in nnddbbmm(3) format.  The module database  is  used  to
  541.             apply  names  to  collections  of directories and files as a
  542.             matter of convenience for checking out  pieces  of  a  large
  543.             software  distribution.   The  database records the physical
  544.             location of the sources as a  form  of  information  hiding,
  545.             allowing  one  to  check  out whole directory hierarchies or
  546.             individual files without regard for  their  actual  location
  547.             within the global source distribution.
  548.                  Consider   the  following  small  sample  of  a  module
  549.             database, which must be tailored manually to  each  specific
  550.             source repository environment:
  551.                            ##kkeeyy      [[--ooppttiioonn aarrgguummeenntt]] ddiirreeccttoorryy [[ffiilleess......]]
  552.                            ddiiffff      bbiinn//ddiiffff
  553.                            lliibbcc      lliibb//lliibbcc
  554.                            ssyyss       --oo ssyyss//ttoooollss//mmaakkee__lliinnkkss ssyyss
  555.                            mmoodduulleess   --ii mmkkmmoodduulleess CCVVSSRROOOOTT..aaddmm mmoodduulleess
  556.                            kkeerrnneell    --aa ssyyss llaanngg//aaddbb
  557.                            ppss        bbiinn MMaakkeeffiillee ppss..cc
  558.                  The ``diff'' and ``libc'' modules refer to whole direc-
  559.             tory hierarchies that  are  extracted  on  check  out.   The
  560.             ``sys''  module extracts the ``sys'' hierarchy, and runs the
  561.             ``make_links'' program at the end of the check  out  process
  562.             (the _-_o option specifies a program to run on check_out).  The
  563.             ``modules'' module allows one to edit  the  module  database
  564.             file and runs the ``mkmodules'' program on check_in to regen-
  565.             erate the nnddbbmm database that ccvvss uses.  The ``kernel''  mod-
  566.             ule  is  an  alias (as the _-_a option specifies) which causes
  567.             the remaining arguments  after  the  _-_a  to  be  interpreted
  568.             exactly  as  if they had been specified on the command line.
  569.             This is useful for objects that  require  shared  pieces  of
  570.             code  from  far  away  places to be compiled (as is the case
  571.             with the kernel debugger, kkaaddbb, which shares code  with  the
  572.             standard  aaddbb  debugger).   The ``ps'' module shows that the
  573.             source for ``ps'' lives in the ``bin'' directory,  but  only
  574.             _M_a_k_e_f_i_l_e and _p_s_._c are required to build the object.
  575.                  The  module database at Prisma is now populated for the
  576.             entire UNIX distribution and thereby allows us to issue  the
  577.             following convenient commands to check out components of the
  578.             UNIX distribution without regard for their  actual  location
  579.             within the master source repository:
  580.                            eexxaammppllee%% ccvvss cchheecckkoouutt ddiiffff
  581.                            eexxaammppllee%% ccvvss cchheecckkoouutt lliibbcc ppss
  582.                            eexxaammppllee%% ccdd ddiiffff;; mmaakkee
  583.                  In  building the module database file, it is quite pos-
  584.             sible to have name conflicts within a global  software  dis-
  585.             tribution.   For  example,  SunOS provides two ccaatt programs:
  586.             one for the standard environment, _/_b_i_n_/_c_a_t, and one for  the
  587.             System  V  environment,  _/_u_s_r_/_5_b_i_n_/_c_a_t.   We  resolved  this
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.                                         -10-
  599.  
  600.  
  601.             conflict by naming the standard ccaatt module ``cat'', and  the
  602.             System  V  ccaatt  module ``5cat''.  Similar name modifications
  603.             must be applied to other  conflicting  names,  as  might  be
  604.             found  between  a  utility  program  and a library function,
  605.             though Prisma chose not to include individual library  func-
  606.             tions within the module database at this time.
  607.  
  608.             22..44..  CCoonnffiigguurraabbllee LLooggggiinngg SSuuppppoorrtt
  609.                  The  ccvvss ``commit'' command is used to make a permanent
  610.             change to the master source repository (where the RCS ``,v''
  611.             files live).  Whenever a ``commit'' is done, the log message
  612.             for the change is carefully logged by an  arbitrary  program
  613.             (in  a  file, notesfile, news database, or mail).  For exam-
  614.             ple, a collection of these updates can be  used  to  produce
  615.             release  notices.  ccvvss can be configured to send log updates
  616.             through one or more filter  programs,  based  on  a  regular
  617.             expression  match  on  the  directory that is being changed.
  618.             This allows multiple related or unrelated projects to  exist
  619.             within  a  single ccvvss source repository tree, with each dif-
  620.             ferent project sending its ``commit'' reports  to  a  unique
  621.             log device.
  622.                  A  sample logging configuration file might look as fol-
  623.             lows:
  624.                       ##rreeggeexx      ffiilltteerr--pprrooggrraamm
  625.                       DDEEFFAAUULLTT     //uussrr//llooccaall//bbiinn//nnffppiippee --tt %%ss uuttiillss..uuppddaatteess
  626.                       ^^ddiiaagg       //uussrr//llooccaall//bbiinn//nnffppiippee --tt %%ss ddiiaagg..uuppddaatteess
  627.                       ^^llooccaall      //uussrr//llooccaall//bbiinn//nnffppiippee --tt %%ss llooccaall..uuppddaatteess
  628.                       ^^ppeerrff       //uussrr//llooccaall//bbiinn//nnffppiippee --tt %%ss ppeerrff..uuppddaatteess
  629.                       ^^ssyyss        //uussrr//llooccaall//bbiinn//nnffppiippee --tt %%ss kkeerrnneell..uuppddaatteess
  630.                  This sample  allows  the  diagnostics  and  performance
  631.             groups  to  share the same source repository with the kernel
  632.             and utilities groups.   Changes  that  they  make  are  sent
  633.             directly   to  their  own  notesfile  [Essick]  through  the
  634.             ``nfpipe'' program.  A sufficiently simple title is  substi-
  635.             tuted  for  the ``%s'' argument before the filter program is
  636.             executed.  This logging configuration file is tailored manu-
  637.             ally to each specific source repository environment.
  638.  
  639.             22..55..  TTaaggggeedd RReelleeaasseess aanndd DDaatteess
  640.                  Any  release  can  be given a symbolic tag name that is
  641.             stored directly in the RCS files.  This tag can be  used  at
  642.             any time to get an exact copy of any previous release.  With
  643.             equal ease, one can also extract an exact copy of the source
  644.             files  as  of any arbitrary date in the past as well.  Thus,
  645.             all that's required to tag the current kernel,  and  to  tag
  646.             the kernel as of the Fourth of July is:
  647.                       eexxaammppllee%% ccvvss ttaagg TTEESSTT__KKEERRNNEELL kkeerrnneell
  648.                       eexxaammppllee%% ccvvss ttaagg --DD ''JJuullyy 44'' PPAATTRRIIOOTTIICC__KKEERRNNEELL kkeerrnneell
  649.             The  following  command  would retrieve an exact copy of the
  650.             test kernel at some later date:
  651.                       eexxaammppllee%% ccvvss cchheecckkoouutt --ffpp --rrTTEESSTT__KKEERRNNEELL kkeerrnneell
  652.             The _-_f option causes only files that match the specified tag
  653.             to  be  extracted,  while the _-_p option automatically prunes
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.             empty directories.  Consequently, directories added  to  the
  668.             kernel  after the test kernel was tagged are not included in
  669.             the newly extracted copy of the test kernel.
  670.                  The ccvvss date support has exactly the same interface  as
  671.             that  provided with RCS, however ccvvss must process the ``,v''
  672.             files directly due to the special handling required  by  the
  673.             vendor  branch support.  The standard RCS date handling only
  674.             processes one branch (or the main trunk) when  checking  out
  675.             based on a date specification.  ccvvss must instead process the
  676.             current ``head'' branch and, if a match is not  found,  pro-
  677.             ceed  to  look for a match on the vendor branch.  This, com-
  678.             bined with reasons of  performance,  is  why  ccvvss  processes
  679.             revision  (symbolic  and  numeric)  and  date specifications
  680.             directly from the ``,v'' files.
  681.  
  682.             22..66..  BBuuiillddiinngg ````ppaattcchh'''' SSoouurrccee DDiissttrriibbuuttiioonnss
  683.                  ccvvss can produce a ``patch'' format [Wall]  output  file
  684.             which  can  be  used to bring a previously released software
  685.             distribution current with the newest  release.   This  patch
  686.             file  supports an entire directory hierarchy within a single
  687.             patch, as well as being able to add whole new files  to  the
  688.             previous  release.   One  can combine symbolic revisions and
  689.             dates together to display changes in a very generic way:
  690.                       eexxaammppllee%% ccvvss ppaattcchh --DD ''DDeecceemmbbeerr 11,, 11998888'' \\
  691.                                          --DD ''JJaannuuaarryy 11,, 11998899'' ssyyss
  692.             This example displays the kernel changes made in  the  month
  693.             of December, 1988.  To release a patch file, for example, to
  694.             take the ccvvss distribution from version 1.0  to  version  1.4
  695.             might be done as follows:
  696.                       eexxaammppllee%% ccvvss ppaattcchh --rrCCVVSS__11__00 --rrCCVVSS__11__44 ccvvss
  697.  
  698.             33..  CCVVSS EExxppeerriieennccee
  699.  
  700.             33..11..  SSttaattiissttiiccss
  701.                  A  quick  summary  of  the scale that ccvvss is addressing
  702.             today can be found in Table 1.
  703.             box center tab(:); c s c s c | c l | n .   RReevviissiioonn  CCoonnttrrooll
  704.             SSttaattiissttiiccss  aatt  PPrriissmmaa  aass ooff 1111//1111//8899 _ How Many...:Total =
  705.             Files:17243 Directories:1005 Lines of  code:3927255  Removed
  706.             files:131 Software developers:14 Software groups:6 Megabytes
  707.             of source:128
  708.                                       TTaabbllee 11..
  709.                                    ccvvss Statistics
  710.             Table 2 shows the history of files changed or added and  the
  711.             number  of  source  lines  affected by the change at Prisma.
  712.             Only changes made to the kernel sources are  included.   The
  713.             large  number  of  source file changes made in September are
  714.             the result of merging the SunOS 4.0.3 sources into the  ker-
  715.             nel.  This merge process is described in section 3.3.
  716.  
  717.             33..22..  PPeerrffoorrmmaannccee
  718.                  The  performance  of ccvvss is currently quite reasonable.
  719.             Little effort has been  expended  on  tuning  ccvvss,  although
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.                                         -12-
  731.  
  732.  
  733.             box center tab(:); c s s s s c s s s s c || c | c || c | c c
  734.             || c | c || c | c l || n | n || n | n.  PPrriissmmaa KKeerrnneell SSoouurrccee
  735.             FFiillee CChhaannggeess BByy MMoonntthh,, 11998888--11998899 _ Month:# Changed:# Lines:#
  736.             Added:#       Lines       :Files:Changed:Files:Added       =
  737.             Dec:87:3619:68:9266    Jan:39:4324:0:0    Feb:73:1578:5:3550
  738.             Mar:99:5301:18:11461                    Apr:112:7333:11:5759
  739.             May:138:5371:17:13986 Jun:65:2261:27:12875  Jul:34:2000:1:58
  740.             Aug:65:6378:8:4724  Sep:266:23410:113:39965 Oct:22:621:1:155
  741.             Total:1000:62196:269:101799
  742.                                       TTaabbllee 22..
  743.                           ccvvss Usage History for the Kernel
  744.  
  745.             performance  related  decisions  were  made  during  the ccvvss
  746.             design.  For  example,  ccvvss  parses  the  RCS  ``,v''  files
  747.             directly  instead  of running an RCS process.  This includes
  748.             following branches as well as integrating  with  the  vendor
  749.             source  branches  and the main trunk when checking out files
  750.             based on a date.
  751.                  Checking  out  the  entire  kernel  source  tree  (1223
  752.             files/59  directories) currently takes 16 wall clock minutes
  753.             on a Sun-4/280.  However, bringing the tree up-to-date  with
  754.             the  current  kernel  sources, once it has been checked out,
  755.             takes only 1.5 wall clock minutes.   Updating  the  _c_o_m_p_l_e_t_e
  756.             128  MByte  source  tree under ccvvss control (17243 files/1005
  757.             directories) takes roughly 28 wall clock  minutes  and  uti-
  758.             lizes  one-third  of  the machine.  For now this is entirely
  759.             acceptable; improvements on these numbers will  possibly  be
  760.             made in the future.
  761.  
  762.             33..33..  TThhee SSuunnOOSS 44..00..33 MMeerrggee
  763.                  The  true  test  of  the ccvvss vendor branch support came
  764.             with the arrival of the SunOS 4.0.3 source upgrade tape.  As
  765.             described above, the cchheecckkiinn program was used to install the
  766.             new sources and the resulting output file listed  the  files
  767.             that  had  been locally modified, needing to be merged manu-
  768.             ally.  For the kernel, there were 94 files in conflict.  The
  769.             ccvvss  ``join'' command was used on each of the 94 conflicting
  770.             files, and the remaining conflicts were resolved.
  771.                  The ``join'' command performs  an  rrccssmmeerrggee  operation.
  772.             This in turn uses _/_u_s_r_/_l_i_b_/_d_i_f_f_3 to produce a three-way diff
  773.             file.  As it happens, the ddiiffff33  program  has  a  hard-coded
  774.             limit of 200 source-file changes maximum.  This proved to be
  775.             too small for a few of the kernel files that needed  merging
  776.             by  hand,  due  to  the  large  number of local changes that
  777.             Prisma had made.  The ddiiffff33 problem was solved by increasing
  778.             the hard-coded limit by an order of magnitude.
  779.                  The SunOS 4.0.3 kernel source upgrade distribution con-
  780.             tained 346 files, 233 of which were modifications to  previ-
  781.             ously  released  files,  and  113  of which were newly added
  782.             files.  cchheecckkiinn added the 113 new files to the source repos-
  783.             itory  without intervention.  Of the 233 modified files, 139
  784.             dropped in cleanly by cchheecckkiinn, since Prisma had not made any
  785.             local changes to them, and 94 required manual merging due to
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.             local modifications.  The 233 modified  files  consisted  of
  800.             20,766 lines of differences.  It took one developer two days
  801.             to manually merge the 94 files using  the  ``join''  command
  802.             and  resolving  conflicts  manually.   An additional day was
  803.             required for kernel debugging.  The entire process of  merg-
  804.             ing  over  20,000 lines of differences was completed in less
  805.             than a week.  This one time-savings alone was  justification
  806.             enough  for  the  ccvvss  development effort; we expect to gain
  807.             even more when tracking future SunOS releases.
  808.  
  809.             44..  FFuuttuurree EEnnhhaanncceemmeennttss aanndd CCuurrrreenntt BBuuggss
  810.                  Since ccvvss was designed to be incomplete, for reasons of
  811.             design  simplicity,  there  are  naturally  a good number of
  812.             enhancements that can be made to make it  more  useful.   As
  813.             well, some nuisances exist in the current implementation.
  814.                  o  ccvvss  does  not  currently  ``remember''  who  has  a
  815.                     checked out a copy of a module.  As a result, it  is
  816.                     impossible  to know who might be working on the same
  817.                     module that you are.  A simple-minded database  that
  818.                     is updated nightly would likely suffice.
  819.                  o  Signal  processing,  keyboard  interrupt handling in
  820.                     particular, is currently somewhat weak.  This is due
  821.                     to  the  heavy use of the ssyysstteemm(3) library function
  822.                     to execute RCS programs like ccoo and  ccii.   It  some-
  823.                     times  takes  multiple  interrupts to make ccvvss quit.
  824.                     This can be fixed by  using  a  home-grown  ssyysstteemm()
  825.                     replacement.
  826.                  o  Security  of  the source repository is currently not
  827.                     dealt with directly.  The  usual  UNIX  approach  of
  828.                     user-group-other  security  permissions  through the
  829.                     file system is  utilized,  but  nothing  else.   ccvvss
  830.                     could  likely  be  a  set-group-id  executable  that
  831.                     checks a protected database to  verify  user  access
  832.                     permissions  for  particular objects before allowing
  833.                     any operations to affect those objects.
  834.                  o  With every checked-out directory, ccvvss maintains some
  835.                     administrative  files  that record the current revi-
  836.                     sion numbers of the checked-out files as well as the
  837.                     location  of  the respective source repository.  ccvvss
  838.                     does not recover nicely at all if these  administra-
  839.                     tive files are removed.
  840.                  o  The  source code for ccvvss has been tested extensively
  841.                     on Sun-3 and Sun-4 systems, all running SunOS 4.0 or
  842.                     later  versions  of the operating system.  Since the
  843.                     code has not yet been  compiled  under  other  plat-
  844.                     forms,  the overall portability of the code is still
  845.                     questionable.
  846.                  o  As witnessed in the previous section, the ccvvss method
  847.                     for tracking third party vendor source distributions
  848.                     can work  quite  nicely.   However,  if  the  vendor
  849.                     changes  the  directory  structure or the file names
  850.                     within the source distribution, ccvvss has  no  way  of
  851.                     matching  the  old  release with the new one.  It is
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.                                         -14-
  863.  
  864.  
  865.                     currently unclear as to how to solve this, though it
  866.                     is certain to happen in practice.
  867.  
  868.             55..  AAvvaaiillaabbiilliittyy
  869.                  The  ccvvss program sources can be found in a recent post-
  870.             ing to the ccoommpp..ssoouurrcceess..uunniixx newsgroup.   It  is  also  cur-
  871.             rently  available  via  anonymous  ftp  from ``prisma.com''.
  872.             Copying rights for ccvvss will be covered by  the  GNU  General
  873.             Public License.
  874.  
  875.             66..  SSuummmmaarryy
  876.                  Prisma  has  used  ccvvss  since  December,  1988.  It has
  877.             evolved to meet our specific needs of revision  and  release
  878.             control.   We  will  make  our code freely available so that
  879.             others can benefit from our work, and  can  enhance  ccvvss  to
  880.             meet broader needs yet.
  881.                  Many of the other software release and revision control
  882.             systems, like the one described in [Glew], appear to  use  a
  883.             collection of tools that are geared toward specific environ-
  884.             ments -- one set of  tools  for  the  kernel,  one  set  for
  885.             ``generic'' software, one set for utilities, and one set for
  886.             kernel and utilities.  Each of these  tool  sets  apparently
  887.             handle  some  specific  aspect of the problem uniquely.  ccvvss
  888.             took a somewhat different approach.   File  sharing  through
  889.             symbolic  or  hard links is not addressed; instead, the disk
  890.             space is simply burned since it is ``cheap.''   Support  for
  891.             producing   objects   for   multiple  architectures  is  not
  892.             addressed; instead, a parallel checked-out source tree  must
  893.             be  used  for each architecture, again wasting disk space to
  894.             simplify complexity and ease of use -- punting on this issue
  895.             allowed  _M_a_k_e_f_i_l_es  to remain unchanged, unlike the approach
  896.             taken in [Mahler], thereby maintaining closer  compatibility
  897.             with  the  third-party vendor sources.  ccvvss is essentially a
  898.             source-file server, making no assumptions  or  special  han-
  899.             dling of the sources that it controls.  To ccvvss:
  900.                  A source is a source, of course, of course, unless
  901.                  of course the source is Mr. Ed.6
  902.             Sources  are  maintained, saved, and retrievable at any time
  903.             based on symbolic or numeric revision or date in  the  past.
  904.             It  is  entirely  up  to ccvvss wrapper programs to provide for
  905.             release environments and such.
  906.                  The major advantage of ccvvss over the many other  similar
  907.             systems that have already been designed is the simplicity of
  908.             -----------
  909.  
  910.  
  911.               6 ccvvss, of course, does not  really  discriminate
  912.  
  913.  
  914.             against Mr. Ed.7
  915.  
  916.  
  917.               7 Yet.
  918.  
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.             ccvvss.  ccvvss contains only three programs that do all the  work
  932.             of release and revision control, and two manually-maintained
  933.             administrative files for each source repository.  Of course,
  934.             the  deciding  factor  of any tool is whether people use it,
  935.             and if they even _l_i_k_e to use it.  At Prisma,  ccvvss  prevented
  936.             members of the kernel group from killing each other.
  937.  
  938.             77..  AAcckknnoowwlleeddggeemmeennttss
  939.                  Many thanks to Dick Grune at Vrije Universiteit in Ams-
  940.             terdam for his work on the original version of ccvvss  and  for
  941.             making  it  available  to the world.  Thanks to Jeff Polk of
  942.             Prisma for helping with the design of the  module  database,
  943.             vendor  branch  support,  and  for writing the cchheecckkiinn shell
  944.             script.  Thanks also to the entire software group at  Prisma
  945.             for taking the time to review the paper and correct my gram-
  946.             mar.
  947.  
  948.             88..  RReeffeerreenncceess
  949.             [Bell]      Bell Telephone Laboratories.  ``Source Code Con-
  950.                         trol  System  User's  Guide.''   _U_N_I_X _S_y_s_t_e_m _I_I_I
  951.                         _P_r_o_g_r_a_m_m_e_r_'_s _M_a_n_u_a_l, October 1981.
  952.             [Courington]
  953.                         Courington, W.  _T_h_e  _N_e_t_w_o_r_k  _S_o_f_t_w_a_r_e  _E_n_v_i_r_o_n_-
  954.                         _m_e_n_t,   Sun   Technical   Report   FE197-0,  Sun
  955.                         Microsystems Inc, February 1989.
  956.             [Essick]    Essick, Raymond B.  and  Robert  Bruce  Kolstad.
  957.                         _N_o_t_e_s_f_i_l_e  _R_e_f_e_r_e_n_c_e  _M_a_n_u_a_l, Department of Com-
  958.                         puter Science Technical Report #1081, University
  959.                         of  Illinois  at Urbana-Champaign, Urbana, Illi-
  960.                         nois, 1982, p. 26.
  961.             [Glew]      Glew, Andy.  ``Boxes, Links, and Parallel Trees:
  962.                         Elements of a Configuration Management System.''
  963.                         _W_o_r_k_s_h_o_p _P_r_o_c_e_e_d_i_n_g_s _o_f _t_h_e _S_o_f_t_w_a_r_e  _M_a_n_a_g_e_m_e_n_t
  964.                         _C_o_n_f_e_r_e_n_c_e, USENIX, New Orleans, April 1989.
  965.             [Grune]     Grune,  Dick.   Distributed  the  original shell
  966.                         script version of ccvvss in  the  ccoommpp..ssoouurrcceess..uunniixx
  967.                         volume 6 release in 1986.
  968.             [Honda]     Honda, Masahiro and Terrence Miller.  ``Software
  969.                         Management Using a CASE Environment.''  _W_o_r_k_s_h_o_p
  970.                         _P_r_o_c_e_e_d_i_n_g_s  _o_f  _t_h_e _S_o_f_t_w_a_r_e _M_a_n_a_g_e_m_e_n_t _C_o_n_f_e_r_-
  971.                         _e_n_c_e, USENIX, New Orleans, April 1989.
  972.             [Mahler]    Mahler, Alex and  Andreas  Lampen.   ``An  Inte-
  973.                         grated Toolset for Engineering Software Configu-
  974.                         rations.''   _P_r_o_c_e_e_d_i_n_g_s   _o_f   _t_h_e   _A_C_M   _S_I_G_-
  975.                         _S_O_F_T_/_S_I_G_P_L_A_N  _S_o_f_t_w_a_r_e  _E_n_g_i_n_e_e_r_i_n_g _S_y_m_p_o_s_i_u_m _o_n
  976.                         _P_r_a_c_t_i_c_a_l  _S_o_f_t_w_a_r_e  _D_e_v_e_l_o_p_m_e_n_t   _E_n_v_i_r_o_n_m_e_n_t_s,
  977.                         ACM,  Boston,  November  1988.  Described is the
  978.                         sshhaappee toolkit posted  to  the  ccoommpp..ssoouurrcceess..uunniixx
  979.                         newsgroup in the volume 19 release.
  980.             [Tichy]     Tichy,  Walter F.  ``Design, Implementation, and
  981.                         Evaluation of a Revision Control System.''  _P_r_o_-
  982.                         _c_e_e_d_i_n_g_s  _o_f _t_h_e _6_t_h _I_n_t_e_r_n_a_t_i_o_n_a_l _C_o_n_f_e_r_e_n_c_e _o_n
  983.                         _S_o_f_t_w_a_r_e  _E_n_g_i_n_e_e_r_i_n_g,  IEEE,  Tokyo,  September
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.                                         -16-
  995.  
  996.  
  997.                         1982.
  998.             [Wall]      Wall, Larry.  The ppaattcchh program is an indispens-
  999.                         able tool for applying a diff file to an  origi-
  1000.                         nal.    Can   be   found   on   uunet.uu.net  in
  1001.                         ~ftp/pub/patch.tar.
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041.  
  1042.  
  1043.  
  1044.  
  1045.  
  1046.  
  1047.  
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.