home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume22 / cvs-berliner / part06 < prev    next >
Encoding:
Internet Message Format  |  1990-06-07  |  39.5 KB

  1. Subject:  v22i020:  Brian Berliner's concurrent RCS system, Part06/07
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 650b272e 9c97b2e2 dc58f4cc b93e2bcc
  5.  
  6. Submitted-by: Brian Berliner <berliner@prisma.com>
  7. Posting-number: Volume 22, Issue 20
  8. Archive-name: cvs-berliner/part06
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 6 (of 7)."
  17. # Contents:  doc/cvs.ms
  18. # Wrapped by rsalz@litchi.bbn.com on Thu May  3 16:59:06 1990
  19. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  20. if test -f 'doc/cvs.ms' -a "${1}" != "-c" ; then 
  21.   echo shar: Will not clobber existing file \"'doc/cvs.ms'\"
  22. else
  23. echo shar: Extracting \"'doc/cvs.ms'\" \(37780 characters\)
  24. sed "s/^X//" >'doc/cvs.ms' <<'END_OF_FILE'
  25. X.\" soelim cvs.ms | pic | tbl | troff -ms
  26. X.\" $Id: cvs.ms,v 1.1 89/11/19 23:16:42 berliner Exp $
  27. X.\"
  28. X.\"    troff source to the cvs USENIX article, Winter 1990, Washington, D.C.
  29. X.\"    Copyright (c) 1989, Brian Berliner
  30. X.\"
  31. X.\"    This program is free software; you can redistribute it and/or modify
  32. X.\"    it under the terms of the GNU General Public License as published by
  33. X.\"    the Free Software Foundation; either version 1, or (at your option)
  34. X.\"    any later version.
  35. X.\"
  36. X.\"    This program is distributed in the hope that it will be useful,
  37. X.\"    but WITHOUT ANY WARRANTY; without even the implied warranty of
  38. X.\"    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  39. X.\"    GNU General Public License for more details.
  40. X.\"
  41. X.\"    You should have received a copy of the GNU General Public License
  42. X.\"    along with this program; if not, write to the Free Software
  43. X.\"    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  44. X.\"
  45. X.\"    The author can be reached at:  berliner@prisma.com
  46. X.\"
  47. X.de SP
  48. X.if n .sp
  49. X.if t .sp .5
  50. X..
  51. X.de hl
  52. X.br
  53. X.in +0.5i
  54. X\l'\\n(LLu-1i'
  55. X.in -0.5i
  56. X.sp
  57. X..
  58. X.OH ""
  59. X.nr PS 11
  60. X.nr PO 1.25i
  61. X.pl -0.2i
  62. X.TL
  63. X.ps 14
  64. X.ft B
  65. X.nf
  66. XCVS II:
  67. XParallelizing Software Development
  68. X.fi
  69. X.ft
  70. X.ps
  71. X.AU
  72. X.ps 12
  73. X.ft I
  74. XBrian Berliner
  75. X.ft
  76. X.ps
  77. X.AI
  78. X.ps 12
  79. X.ft I
  80. XPrisma, Inc.
  81. X5465 Mark Dabling Blvd.
  82. XColorado Springs, CO  80918
  83. Xberliner@prisma.com
  84. X.ft
  85. X.ps
  86. X.AB
  87. XThe program described in this paper fills a need in the UNIX
  88. Xcommunity for a freely available tool to manage software revision and
  89. Xrelease control in a multi-developer, multi-directory, multi-group
  90. Xenvironment.
  91. XThis tool also addresses the increasing need for tracking third-party vendor
  92. Xsource distributions while trying to maintain local modifications to
  93. Xearlier releases.
  94. X.AE
  95. X.NH
  96. XBackground
  97. X.PP
  98. XIn large software development projects, it is usually necessary for more
  99. Xthan one software developer to be modifying (usually different) modules of the
  100. Xcode at the same time.
  101. XSome of these code modifications are done in an
  102. Xexperimental sense, at least until the code functions correctly, and some
  103. Xtesting of the entire program is usually necessary.
  104. XThen, the modifications are returned to a master source repository
  105. Xso that others in the project can
  106. Xenjoy the new bug-fix or functionality.
  107. XIn order to manage such a project, some sort of revision control system is
  108. Xnecessary.
  109. X.PP
  110. XSpecifically, UNIX\**
  111. X.FS
  112. XUNIX is a registered trademark of AT&T.
  113. X.FE
  114. Xkernel development is an excellent example of the
  115. Xproblems that an adequate revision control system must address.
  116. XThe SunOS\**
  117. X.FS
  118. XSunOS is a trademark of Sun Microsystems, Inc.
  119. X.FE
  120. Xkernel is composed of over a thousand files spread across a
  121. Xhierarchy of dozens of directories.\**
  122. X.FS
  123. XYes, the SunOS 4.0 kernel is composed of over a \fIthousand\fP files!
  124. X.FE
  125. XPieces of the kernel must be edited
  126. Xby many software developers within an organization.
  127. XWhile undesirable in
  128. Xtheory, it is not uncommon to have two or more people making
  129. Xmodifications to the same file within the kernel sources in
  130. Xorder to facilitate a desired change.
  131. XExisting revision control systems like
  132. X.SM
  133. XRCS
  134. X.LG
  135. X[Tichy] or
  136. X.SM
  137. XSCCS
  138. X.LG
  139. X[Bell] serialize file modifications by
  140. Xallowing only one developer to have a writable copy of a particular file at
  141. Xany one point in time.
  142. XThat developer is said to
  143. Xhave \*Qlocked\*U the file for his exclusive use, and no other developer is
  144. Xallowed to check out a writable copy of the file until the locking
  145. Xdeveloper has finished impeding others' productivity.
  146. XDevelopment pressures of productivity and deadlines
  147. Xoften force organizations to require that multiple developers be able to
  148. Xsimultaneously edit
  149. Xcopies of the same revision controlled file.
  150. X.PP
  151. XThe necessity for multiple developers to modify the same file concurrently
  152. Xquestions the value of serialization-based policies in traditional revision
  153. Xcontrol.
  154. XThis paper discusses the approach that
  155. XPrisma took in adapting a standard revision control system,
  156. X.SM
  157. XRCS\c
  158. X.LG
  159. X, along with an existing public-domain collection of shell scripts that sits
  160. Xatop
  161. X.SM
  162. XRCS
  163. X.LG
  164. Xand provides the basic conflict-resolution algorithms.
  165. XThe resulting
  166. Xprogram, \fBcvs\fP, addresses not only the issue of conflict-resolution in
  167. Xa multi-developer open-editing environment, but also the issues of
  168. Xsoftware release control and vendor source support and integration.
  169. X.NH
  170. XThe CVS Program
  171. X.PP
  172. X\fBcvs\fP
  173. X(Concurrent Versions System)
  174. Xis a front end to the
  175. X.SM
  176. XRCS
  177. X.LG
  178. Xrevision control system which extends
  179. Xthe notion of revision control from a collection of files in a single
  180. Xdirectory to a hierarchical collection of directories each containing
  181. Xrevision controlled files.
  182. XDirectories and files in the \fBcvs\fP system can be combined together in
  183. Xmany ways to form a software release.
  184. X\fBcvs\fP
  185. Xprovides the functions necessary to manage these software releases and to
  186. Xcontrol the concurrent editing of source files among multiple software
  187. Xdevelopers.
  188. X.PP
  189. XThe six major features of \fBcvs\fP are listed below, and will be
  190. Xdescribed in more detail in the following sections:
  191. X.RS
  192. X.IP 1.
  193. XConcurrent access and conflict-resolution algorithms to guarantee that
  194. Xsource changes are not \*Qlost.\*U
  195. X.IP 2.
  196. XSupport for tracking third-party vendor source distributions while
  197. Xmaintaining the local modifications made to those sources.
  198. X.IP 3.
  199. XA flexible module database that provides a symbolic mapping of names to
  200. Xcomponents of a larger software distribution.
  201. XThis symbolic mapping provides for location independence within the software
  202. Xrelease and, for example, allows one to check out a copy of the \*Qdiff\*U
  203. Xprogram without ever knowing that the sources to \*Qdiff\*U actually reside
  204. Xin the \*Qbin/diff\*U directory.
  205. X.IP 4.
  206. XConfigurable logging support allows all \*Qcommitted\*U source file changes
  207. Xto be logged using an arbitrary program to save the log messages in a file,
  208. Xnotesfile, or news database.
  209. X.IP 5.
  210. XA software release can be symbolically tagged and checked out at any time
  211. Xbased on that tag.
  212. XAn exact copy of a previous software release can be checked out at
  213. Xany time, \fIregardless\fP of whether files or directories have been
  214. Xadded/removed from the \*Qcurrent\*U software release.
  215. XAs well,
  216. Xa \*Qdate\*U can be used to check out the \fIexact\fP version of the software
  217. Xrelease as of the specified date.
  218. X.IP 6.
  219. XA \*Qpatch\*U format file [Wall] can be produced between two software
  220. Xreleases, even if the releases span multiple directories.
  221. X.RE
  222. X.PP
  223. XThe sources maintained by \fBcvs\fP are kept within a single directory
  224. Xhierarchy known as the \*Qsource repository.\*U
  225. XThis \*Qsource repository\*U holds the actual
  226. X.SM
  227. XRCS
  228. X.LG
  229. X\*Q,v\*U files directly, as well as a special per-repository directory
  230. X(\c
  231. X.SM
  232. XCVSROOT.adm\c
  233. X.LG
  234. X) which contains a small number of administrative files that describe the
  235. Xrepository and how it can be accessed.
  236. XSee Figure 1 for a picture of the \fBcvs\fP tree.
  237. X.KF
  238. X.hl
  239. X.DS B
  240. X.PS
  241. Xline from 4.112,9.200 to 5.550,8.887
  242. Xline from 5.447,8.884 to 5.550,8.887 to 5.458,8.933
  243. Xline from 4.112,9.200 to 4.550,8.950
  244. Xline from 4.451,8.978 to 4.550,8.950 to 4.476,9.021
  245. Xline from 4.112,9.200 to 3.737,8.887
  246. Xline from 3.798,8.971 to 3.737,8.887 to 3.830,8.932
  247. Xline from 3.612,8.762 to 4.737,8.137
  248. Xline from 4.638,8.164 to 4.737,8.137 to 4.662,8.208
  249. Xline from 3.612,8.762 to 3.737,8.137
  250. Xline from 3.693,8.231 to 3.737,8.137 to 3.742,8.240
  251. Xline from 3.612,8.762 to 2.612,8.200
  252. Xline from 2.687,8.271 to 2.612,8.200 to 2.712,8.227
  253. Xline from 2.362,9.262 to 2.737,8.950
  254. Xline from 2.645,8.995 to 2.737,8.950 to 2.677,9.033
  255. Xline from 2.362,9.262 to 1.925,8.950
  256. Xline from 1.992,9.028 to 1.925,8.950 to 2.021,8.988
  257. Xline from 3.362,9.762 to 4.050,9.387
  258. Xline from 3.950,9.413 to 4.050,9.387 to 3.974,9.457
  259. Xline from 3.362,9.762 to 2.487,9.387
  260. Xline from 2.570,9.450 to 2.487,9.387 to 2.589,9.404
  261. X.ps 11
  262. X"newfs.c,v" at 4.487,8.043 ljust
  263. X.ps 11
  264. X"mkfs.c,v" at 3.487,8.043 ljust
  265. X.ps 11
  266. X"Makefile,v" at 2.237,8.043 ljust
  267. X.ps 11
  268. X"newfs" at 3.487,8.793 ljust
  269. X.ps 11
  270. X"halt.c,v" at 5.487,8.793 ljust
  271. X.ps 11
  272. X"Makefile,v" at 4.237,8.793 ljust
  273. X.ps 11
  274. X"modules,v" at 2.487,8.793 ljust
  275. X.ps 11
  276. X"loginfo,v" at 1.488,8.793 ljust
  277. X.ps 11
  278. X"etc" at 3.987,9.293 ljust
  279. X.ps 11
  280. X"CVSROOT.adm" at 1.988,9.293 ljust
  281. X.ps 11
  282. X"/src/master" at 2.987,9.793 ljust
  283. X.PE
  284. X.DE
  285. X.hl
  286. X.ce 100
  287. X.LG
  288. X\fBFigure 1.\fP
  289. X.SM
  290. X\fBcvs\fP Source Repository
  291. X.ce 0
  292. X.sp
  293. X.KE
  294. X.NH 2
  295. XSoftware Conflict Resolution\**
  296. X.FS
  297. XThe basic conflict-resolution algorithms
  298. Xused in the \fBcvs\fP program find their roots
  299. Xin the original work done by Dick Grune at Vrije Universiteit in Amsterdam
  300. Xand posted to \fBcomp.sources.unix\fP in the volume 6 release sometime in 1986.
  301. XThis original version of \fBcvs\fP was a collection of shell scripts that
  302. Xcombined to form a front end to the
  303. X.SM
  304. XRCS
  305. X.LG
  306. Xprograms.
  307. X.FE
  308. X.PP
  309. X\fBcvs\fP allows several software developers to edit personal copies of a
  310. Xrevision controlled file concurrently.
  311. XThe revision number of each checked out file is maintained independently
  312. Xfor each user, and \fBcvs\fP forces the checked out file to be current with
  313. Xthe \*Qhead\*U revision before it can be \*Qcommitted\*U as a permanent change.
  314. XA checked out file is brought up-to-date with the \*Qhead\*U revision using
  315. Xthe \*Qupdate\*U command of \fBcvs\fP.
  316. XThis command compares the \*Qhead\*U revision number with that of the user's
  317. Xfile and performs an
  318. X.SM
  319. XRCS
  320. X.LG
  321. Xmerge operation if they are not the same.
  322. XThe result of the merge is a file that contains the user's modifications
  323. Xand those modifications that were \*Qcommitted\*U after the user
  324. Xchecked out his version of the file (as well as a backup copy of the
  325. Xuser's original file).
  326. X\fBcvs\fP points out any conflicts during the merge.
  327. XIt is the user's responsibility to resolve these conflicts
  328. Xand to \*Qcommit\*U his/her changes when ready.
  329. X.PP
  330. XAlthough the \fBcvs\fP conflict-resolution algorithm was defined in 1986,
  331. Xit is remarkably similar to the \*QCopy-Modify-Merge\*U scenario included
  332. Xwith NSE\**
  333. X.FS
  334. XNSE is the Network Software Environment, a product of Sun Microsystems, Inc.
  335. X.FE
  336. Xand described in [Honda] and [Courington].
  337. XThe following explanation from [Honda] also applies to \fBcvs\fP:
  338. X.QP
  339. XSimply stated, a developer copies an object without locking it, modifies
  340. Xthe copy, and then merges the modified copy with the original.
  341. XThis paradigm allows developers to work in isolation from one another since
  342. Xchanges are made to copies of objects.
  343. XBecause locks are not used, development is not serialized and can proceed
  344. Xin parallel.
  345. XDevelopers, however, must merge objects after the changes have been made.
  346. XIn particular, a developer must resolve conflicts when the same object has
  347. Xbeen modified by someone else.
  348. X.PP
  349. XIn practice, Prisma has found that conflicts that occur when the same
  350. Xobject has been modified by someone else are quite rare.
  351. XWhen they do happen, the changes made by the other developer are usually
  352. Xeasily resolved.
  353. XThis practical use has shown that the \*QCopy-Modify-Merge\*U paradigm is a
  354. Xcorrect and useful one.
  355. X.NH 2
  356. XTracking Third-Party Source Distributions
  357. X.PP
  358. XCurrently, a large amount of software is based on source
  359. Xdistributions from a third-party distributor.
  360. XIt is often the case that local modifications are to be made to this
  361. Xdistribution, \fIand\fP that the vendor's future releases should be
  362. Xtracked.
  363. XRolling your local modifications forward into the new vendor release is a
  364. Xtime-consuming task, but \fBcvs\fP can ease this burden somewhat.
  365. XThe \fBcheckin\fP program of \fBcvs\fP initially sets up a source
  366. Xrepository by integrating the source modules directly from the vendor's
  367. Xrelease, preserving the directory hierarchy of the vendor's distribution.
  368. XThe branch support of
  369. X.SM
  370. XRCS
  371. X.LG
  372. Xis used to build this vendor release as a branch of the main
  373. X.SM
  374. XRCS
  375. X.LG
  376. Xtrunk.
  377. XFigure 2 shows how the \*Qhead\*U tracks a sample vendor
  378. Xbranch when no local modifications have been made to the file.
  379. X.KF
  380. X.hl
  381. X.DS B
  382. X.PS
  383. Xellipse at 3.237,6.763 wid 1.000 ht 0.500
  384. Xdashwid = 0.050i
  385. Xline dashed from 3.237,7.513 to 3.737,7.513 to 3.737,9.762 to 4.237,9.762
  386. Xline from 4.138,9.737 to 4.237,9.762 to 4.138,9.787
  387. Xline dashed from 2.237,8.262 to 3.237,8.262 to 3.237,7.013
  388. Xline from 3.212,7.112 to 3.237,7.013 to 3.262,7.112
  389. Xline from 3.737,6.763 to 4.237,6.763
  390. Xline from 4.138,6.737 to 4.237,6.763 to 4.138,6.788
  391. Xline from 2.237,6.763 to 2.737,6.763
  392. Xline from 2.637,6.737 to 2.737,6.763 to 2.637,6.788
  393. Xline from 1.738,6.013 to 1.738,6.513
  394. Xline from 1.762,6.413 to 1.738,6.513 to 1.713,6.413
  395. Xline 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
  396. Xline 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
  397. Xline 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
  398. Xline 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
  399. Xline from 4.737,7.013 to 4.737,7.513
  400. Xline from 4.763,7.413 to 4.737,7.513 to 4.712,7.413
  401. Xline from 4.737,8.012 to 4.737,8.512
  402. Xline from 4.763,8.412 to 4.737,8.512 to 4.712,8.412
  403. Xline 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
  404. Xline from 4.737,9.012 to 4.737,9.512
  405. Xline from 4.763,9.412 to 4.737,9.512 to 4.712,9.412
  406. Xline 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
  407. X.ps 11
  408. X"\"HEAD\"" at 1.550,8.231 ljust
  409. X.ps 11
  410. X"'SunOS'" at 2.987,6.293 ljust
  411. X.ps 11
  412. X"1.1.1" at 3.050,6.793 ljust
  413. X.ps 11
  414. X"1.1" at 1.613,6.793 ljust
  415. X.ps 11
  416. X"1.1.1.1" at 4.487,6.793 ljust
  417. X.ps 11
  418. X"1.1.1.2" at 4.487,7.793 ljust
  419. X.ps 11
  420. X"1.1.1.3" at 4.487,8.793 ljust
  421. X.ps 11
  422. X"1.1.1.4" at 4.487,9.793 ljust
  423. X.ps 11
  424. X"'SunOS_4_0'" at 5.487,6.793 ljust
  425. X.ps 11
  426. X"'SunOS_4_0_1'" at 5.487,7.793 ljust
  427. X.ps 11
  428. X"'YAPT_5_5C'" at 5.487,8.793 ljust
  429. X.ps 11
  430. X"'SunOS_4_0_3'" at 5.487,9.793 ljust
  431. X.ps 11
  432. X"rcsfile.c,v" at 2.987,5.543 ljust
  433. X.PE
  434. X.DE
  435. X.hl
  436. X.ce 100
  437. X.LG
  438. X\fBFigure 2.\fP
  439. X.SM
  440. X\fBcvs\fP Vendor Branch Example
  441. X.ce 0
  442. X.sp .3
  443. X.KE
  444. XOnce this is done, developers can check out files and make local changes to
  445. Xthe vendor's source distribution.
  446. XThese local changes form a new branch to the tree which is then used as the
  447. Xsource for future check outs.
  448. XFigure 3 shows how the \*Qhead\*U moves to the main
  449. X.SM
  450. XRCS
  451. X.LG
  452. Xtrunk when a local modification is made.
  453. X.KF
  454. X.hl
  455. X.DS B
  456. X.PS
  457. Xellipse at 3.237,6.763 wid 1.000 ht 0.500
  458. Xdashwid = 0.050i
  459. Xline dashed from 2.800,9.075 to 1.738,9.075 to 1.738,8.012
  460. Xline from 1.713,8.112 to 1.738,8.012 to 1.762,8.112
  461. Xline from 1.738,7.013 to 1.738,7.513
  462. Xline from 1.762,7.413 to 1.738,7.513 to 1.713,7.413
  463. Xline 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
  464. Xline from 3.737,6.763 to 4.237,6.763
  465. Xline from 4.138,6.737 to 4.237,6.763 to 4.138,6.788
  466. Xline from 2.237,6.763 to 2.737,6.763
  467. Xline from 2.637,6.737 to 2.737,6.763 to 2.637,6.788
  468. Xline from 1.738,6.013 to 1.738,6.513
  469. Xline from 1.762,6.413 to 1.738,6.513 to 1.713,6.413
  470. Xline 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
  471. Xline 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
  472. Xline 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
  473. Xline 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
  474. Xline from 4.737,7.013 to 4.737,7.513
  475. Xline from 4.763,7.413 to 4.737,7.513 to 4.712,7.413
  476. Xline from 4.737,8.012 to 4.737,8.512
  477. Xline from 4.763,8.412 to 4.737,8.512 to 4.712,8.412
  478. Xline 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
  479. Xline from 4.737,9.012 to 4.737,9.512
  480. Xline from 4.763,9.412 to 4.737,9.512 to 4.712,9.412
  481. Xline 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
  482. X.ps 11
  483. X"1.2" at 1.613,7.793 ljust
  484. X.ps 11
  485. X"\"HEAD\"" at 2.862,9.043 ljust
  486. X.ps 11
  487. X"'SunOS'" at 2.987,6.293 ljust
  488. X.ps 11
  489. X"1.1.1" at 3.050,6.793 ljust
  490. X.ps 11
  491. X"1.1" at 1.613,6.793 ljust
  492. X.ps 11
  493. X"1.1.1.1" at 4.487,6.793 ljust
  494. X.ps 11
  495. X"1.1.1.2" at 4.487,7.793 ljust
  496. X.ps 11
  497. X"1.1.1.3" at 4.487,8.793 ljust
  498. X.ps 11
  499. X"1.1.1.4" at 4.487,9.793 ljust
  500. X.ps 11
  501. X"'SunOS_4_0'" at 5.487,6.793 ljust
  502. X.ps 11
  503. X"'SunOS_4_0_1'" at 5.487,7.793 ljust
  504. X.ps 11
  505. X"'YAPT_5_5C'" at 5.487,8.793 ljust
  506. X.ps 11
  507. X"'SunOS_4_0_3'" at 5.487,9.793 ljust
  508. X.ps 11
  509. X"rcsfile.c,v" at 2.987,5.543 ljust
  510. X.PE
  511. X.DE
  512. X.hl
  513. X.ce 100
  514. X.LG
  515. X\fBFigure 3.\fP
  516. X.SM
  517. X\fBcvs\fP Local Modification to Vendor Branch
  518. X.ce 0
  519. X.sp
  520. X.KE
  521. X.PP
  522. XWhen a new version of the vendor's source distribution arrives, the
  523. X\fBcheckin\fP program adds the new and changed vendor's files to the
  524. Xalready existing source repository.
  525. XFor files that have not been changed locally, the new file from the
  526. Xvendor becomes the current \*Qhead\*U revision.
  527. XFor files that have been modified locally, \fBcheckin\fP warns that the
  528. Xfile must be merged with the new vendor release.
  529. XThe \fBcvs\fP \*Qjoin\*U command is a useful tool that aids this process by
  530. Xperforming the necessary
  531. X.SM
  532. XRCS
  533. X.LG
  534. Xmerge, as is done above when performing an \*Qupdate.\*U
  535. X.PP
  536. XThere is also limited support for \*Qdual\*U derivations for source files.
  537. XSee Figure 4 for a sample dual-derived file.
  538. X.KF
  539. X.hl
  540. X.DS B
  541. X.PS
  542. Xellipse at 2.337,8.575 wid 0.700 ht 0.375
  543. Xellipse at 2.312,9.137 wid 0.700 ht 0.375
  544. Xline from 1.225,9.012 to 1.225,9.363
  545. Xline from 1.250,9.263 to 1.225,9.363 to 1.200,9.263
  546. Xline 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
  547. Xline 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
  548. Xline 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
  549. Xline 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
  550. Xline 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
  551. Xline from 4.425,8.762 to 4.425,9.113
  552. Xline from 4.450,9.013 to 4.425,9.113 to 4.400,9.013
  553. Xline from 4.425,9.475 to 4.425,9.850
  554. Xline from 4.450,9.750 to 4.425,9.850 to 4.400,9.750
  555. Xline 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
  556. Xline 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
  557. Xline 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
  558. Xline from 1.238,8.075 to 1.238,8.637
  559. Xline from 1.262,8.537 to 1.238,8.637 to 1.213,8.537
  560. Xline from 1.613,8.825 to 1.975,8.575
  561. Xline from 1.878,8.611 to 1.975,8.575 to 1.907,8.652
  562. Xline from 2.675,8.575 to 4.050,8.575
  563. Xline from 3.950,8.550 to 4.050,8.575 to 3.950,8.600
  564. Xline from 2.675,9.137 to 3.050,9.137
  565. Xline from 2.950,9.112 to 3.050,9.137 to 2.950,9.162
  566. Xline from 3.425,9.325 to 3.425,9.637
  567. Xline from 3.450,9.537 to 3.425,9.637 to 3.400,9.537
  568. Xline from 1.613,8.825 to 1.925,9.137
  569. Xline from 1.872,9.049 to 1.925,9.137 to 1.837,9.084
  570. X.ps 11
  571. X"'BSD'" at 2.138,9.481 ljust
  572. X.ps 11
  573. X"1.2" at 1.113,9.543 ljust
  574. X.ps 11
  575. X"1.1" at 1.125,8.831 ljust
  576. X.ps 11
  577. X"1.1.1.1" at 4.175,8.543 ljust
  578. X.ps 11
  579. X"1.1.1.2" at 4.175,9.281 ljust
  580. X.ps 11
  581. X"1.1.1.3" at 4.175,9.993 ljust
  582. X.ps 11
  583. X"1.1.2.2" at 3.175,9.793 ljust
  584. X.ps 11
  585. X"1.1.2.1" at 3.175,9.106 ljust
  586. X.ps 11
  587. X"rcsfile.c,v" at 2.425,7.706 ljust
  588. X.ps 11
  589. X"1.1.1" at 2.175,8.568 ljust
  590. X.ps 11
  591. X"'SunOS'" at 2.125,8.243 ljust
  592. X.ps 11
  593. X"1.1.2" at 2.163,9.131 ljust
  594. X.PE
  595. X.DE
  596. X.hl
  597. X.ce 100
  598. X.LG
  599. X\fBFigure 4.\fP
  600. X.SM
  601. X\fBcvs\fP Support For \*QDual\*U Derivations
  602. X.ce 0
  603. X.sp
  604. X.KE
  605. XThis example tracks the SunOS distribution but includes major changes from
  606. XBerkeley.
  607. XThese BSD files are saved directly in the
  608. X.SM
  609. XRCS
  610. X.LG
  611. Xfile off a new branch.
  612. X.NH 2
  613. XLocation Independent Module Database
  614. X.PP
  615. X\fBcvs\fP contains support for a simple, yet powerful, \*Qmodule\*U database.
  616. XFor reasons of efficiency, this database is stored in \fBndbm\fP\|(3) format.
  617. XThe module database is used to apply names to collections of directories
  618. Xand files as a matter of convenience for checking out pieces of a large
  619. Xsoftware distribution.
  620. XThe database records the physical location of the sources as a form of
  621. Xinformation hiding, allowing one to check out whole directory hierarchies
  622. Xor individual files without regard for their actual location within the
  623. Xglobal source distribution.
  624. X.PP
  625. XConsider the following small sample of a module database, which must be
  626. Xtailored manually to each specific source repository environment:
  627. X.DS
  628. X\f(CW        #key      [-option argument] directory [files...]
  629. X        diff      bin/diff
  630. X        libc      lib/libc
  631. X        sys       -o sys/tools/make_links sys
  632. X        modules   -i mkmodules CVSROOT.adm modules
  633. X        kernel    -a sys lang/adb
  634. X        ps        bin Makefile ps.c\fP
  635. X.DE
  636. X.PP
  637. XThe \*Qdiff\*U and \*Qlibc\*U modules refer to whole directory hierarchies that
  638. Xare extracted on check out.
  639. XThe \*Qsys\*U module extracts the \*Qsys\*U hierarchy, and runs the
  640. X\*Qmake_links\*U program at the end of the check out process (the \fI-o\fP
  641. Xoption specifies a program to run on check\fIo\fPut).
  642. XThe \*Qmodules\*U module allows one to edit the module database file and
  643. Xruns the \*Qmkmodules\*U program on check\fIi\fPn to regenerate the
  644. X\fBndbm\fP database that \fBcvs\fP uses.
  645. XThe \*Qkernel\*U module is an alias (as the \fI-a\fP option specifies)
  646. Xwhich causes the remaining arguments after the \fI-a\fP to be interpreted
  647. Xexactly as if they had been specified on the command line.
  648. XThis is useful for objects that require shared pieces of code from far away
  649. Xplaces to be compiled (as is the case with the kernel debugger, \fBkadb\fP,
  650. Xwhich shares code with the standard \fBadb\fP debugger).
  651. XThe \*Qps\*U module shows that the source for \*Qps\*U lives in the \*Qbin\*U
  652. Xdirectory, but only \fIMakefile\fP and \fIps.c\fP are required to build the
  653. Xobject.
  654. X.PP
  655. XThe module database at Prisma is now populated for the entire UNIX
  656. Xdistribution and thereby allows us to issue the
  657. Xfollowing convenient commands to check out components of the UNIX
  658. Xdistribution without regard for their actual location within the master source
  659. Xrepository:
  660. X.DS
  661. X\f(CW        example% cvs checkout diff
  662. X        example% cvs checkout libc ps
  663. X        example% cd diff; make\fP
  664. X.DE
  665. X.PP
  666. XIn building the module database file, it is quite possible to have name
  667. Xconflicts within a global software distribution.
  668. XFor example, SunOS provides two \fBcat\fP programs:
  669. Xone for the standard environment, \fI/bin/cat\fP, and one for the System V
  670. Xenvironment, \fI/usr/5bin/cat\fP.
  671. XWe resolved this conflict by naming the standard \fBcat\fP module
  672. X\*Qcat\*U, and the System V \fBcat\fP module \*Q5cat\*U.
  673. XSimilar name modifications must be applied to other conflicting names, as
  674. Xmight be found between a utility program and a library function, though
  675. XPrisma chose not to include individual library functions within the module
  676. Xdatabase at this time.
  677. X.NH 2
  678. XConfigurable Logging Support
  679. X.PP
  680. XThe \fBcvs\fP \*Qcommit\*U command is used to make a permanent change to the
  681. Xmaster source repository (where the
  682. X.SM
  683. XRCS
  684. X.LG
  685. X\*Q,v\*U files live).
  686. XWhenever a \*Qcommit\*U is done, the log message for the change is carefully
  687. Xlogged by an arbitrary program (in a file, notesfile, news database, or
  688. Xmail).
  689. XFor example, a collection of these updates can be used to produce release
  690. Xnotices.
  691. X\fBcvs\fP can be configured to send log updates through one or more filter
  692. Xprograms, based on a regular expression match on the directory that is
  693. Xbeing changed.
  694. XThis allows multiple related or unrelated projects to exist within a single
  695. X\fBcvs\fP source repository tree, with each different project sending its
  696. X\*Qcommit\*U reports to a unique log device.
  697. X.PP
  698. XA sample logging configuration file might look as follows:
  699. X.DS
  700. X\f(CW    #regex      filter-program
  701. X    DEFAULT     /usr/local/bin/nfpipe -t %s utils.updates
  702. X    ^diag       /usr/local/bin/nfpipe -t %s diag.updates
  703. X    ^local      /usr/local/bin/nfpipe -t %s local.updates
  704. X    ^perf       /usr/local/bin/nfpipe -t %s perf.updates
  705. X    ^sys        /usr/local/bin/nfpipe -t %s kernel.updates\fP
  706. X.DE
  707. X.PP
  708. XThis sample allows the diagnostics and performance groups to
  709. Xshare the same source repository with the kernel and utilities groups.
  710. XChanges that they make are sent directly to their own notesfile [Essick]
  711. Xthrough the \*Qnfpipe\*U program.
  712. XA sufficiently simple title is substituted for the \*Q%s\*U argument before
  713. Xthe filter program is executed.
  714. XThis logging configuration file is tailored manually to each specific
  715. Xsource repository environment.
  716. X.NH 2
  717. XTagged Releases and Dates
  718. X.PP
  719. XAny release can be given a symbolic tag name that is stored directly in the
  720. X.SM
  721. XRCS
  722. X.LG
  723. Xfiles.
  724. XThis tag can be used at any time to get an exact copy of any previous
  725. Xrelease.
  726. XWith equal ease, one can also extract an exact copy of the source files as
  727. Xof any arbitrary date in the past as well.
  728. XThus, all that's required to tag the current kernel, and to tag the kernel
  729. Xas of the Fourth of July is:
  730. X.DS
  731. X\f(CW    example% cvs tag TEST_KERNEL kernel
  732. X    example% cvs tag -D 'July 4' PATRIOTIC_KERNEL kernel\fP
  733. X.DE
  734. XThe following command would retrieve an exact copy of the test kernel at
  735. Xsome later date:
  736. X.DS
  737. X\f(CW    example% cvs checkout -fp -rTEST_KERNEL kernel\fP
  738. X.DE
  739. XThe \fI-f\fP option causes only files that match the specified tag to be
  740. Xextracted, while the \fI-p\fP option automatically prunes empty directories.
  741. XConsequently, directories added to the kernel after the test kernel was
  742. Xtagged are not included in the newly extracted copy of the test kernel.
  743. X.PP
  744. XThe \fBcvs\fP date support has exactly the same interface as that provided
  745. Xwith
  746. X.SM
  747. XRCS\c
  748. X.LG
  749. X, however \fBcvs\fP must process the \*Q,v\*U files directly due to the
  750. Xspecial handling required by the vendor branch support.
  751. XThe standard
  752. X.SM
  753. XRCS
  754. X.LG
  755. Xdate handling only processes one branch (or the main trunk) when checking
  756. Xout based on a date specification.
  757. X\fBcvs\fP must instead process the current \*Qhead\*U branch and, if a
  758. Xmatch is not found, proceed to look for a match on the vendor branch.
  759. XThis, combined with reasons of performance, is why \fBcvs\fP processes
  760. Xrevision (symbolic and numeric) and date specifications directly from the
  761. X\*Q,v\*U files.
  762. X.NH 2
  763. XBuilding \*Qpatch\*U Source Distributions
  764. X.PP
  765. X\fBcvs\fP can produce a \*Qpatch\*U format [Wall] output file which can be
  766. Xused to bring a previously released software distribution current with the
  767. Xnewest release.
  768. XThis patch file supports an entire directory hierarchy within a single
  769. Xpatch, as well as being able to add whole new files to the previous
  770. Xrelease.
  771. XOne can combine symbolic revisions and dates together to display changes in
  772. Xa very generic way:
  773. X.DS
  774. X\f(CW    example% cvs patch -D 'December 1, 1988' \e
  775. X                       -D 'January 1, 1989' sys\fP
  776. X.DE
  777. XThis example displays the kernel changes made in the month of December,
  778. X1988.
  779. XTo release a patch file, for example, to take the \fBcvs\fP distribution
  780. Xfrom version 1.0 to version 1.4 might be done as follows:
  781. X.DS
  782. X\f(CW    example% cvs patch -rCVS_1_0 -rCVS_1_4 cvs\fP
  783. X.DE
  784. X.NH
  785. XCVS Experience
  786. X.NH 2
  787. XStatistics
  788. X.PP
  789. XA quick summary of the scale that \fBcvs\fP is addressing today
  790. Xcan be found in Table 1.
  791. X.KF
  792. X.TS
  793. Xbox center tab(:);
  794. Xc s
  795. Xc s
  796. Xc | c
  797. Xl | n .
  798. X\fB\s+2Revision Control Statistics at Prisma
  799. Xas of 11/11/89\fP\s-2
  800. X_
  801. XHow Many...:Total
  802. X=
  803. XFiles:17243
  804. XDirectories:1005
  805. XLines of code:3927255
  806. XRemoved files:131
  807. XSoftware developers:14
  808. XSoftware groups:6
  809. XMegabytes of source:128
  810. X.TE
  811. X.ce 100
  812. X.LG
  813. X\fBTable 1.\fP
  814. X.SM
  815. X\fBcvs\fP Statistics
  816. X.ce 0
  817. X.sp .3
  818. X.KE
  819. XTable 2 shows the history of files changed or added and the number
  820. Xof source lines affected by the change at Prisma.
  821. XOnly changes made to the kernel sources are included.
  822. X.KF
  823. X.TS
  824. Xbox center tab(:);
  825. Xc s s s s
  826. Xc s s s s
  827. Xc || c | c || c | c
  828. Xc || c | c || c | c
  829. Xl || n | n || n | n.
  830. X\fB\s+2Prisma Kernel Source File Changes
  831. XBy Month, 1988-1989\fP\s-2
  832. X_
  833. XMonth:# Changed:# Lines:# Added:# Lines
  834. X\^:Files:Changed:Files:Added
  835. X=
  836. XDec:87:3619:68:9266
  837. XJan:39:4324:0:0
  838. XFeb:73:1578:5:3550
  839. XMar:99:5301:18:11461
  840. XApr:112:7333:11:5759
  841. XMay:138:5371:17:13986
  842. XJun:65:2261:27:12875
  843. XJul:34:2000:1:58
  844. XAug:65:6378:8:4724
  845. XSep:266:23410:113:39965
  846. XOct:22:621:1:155
  847. XTotal:1000:62196:269:101799
  848. X.TE
  849. X.ce 100
  850. X.LG
  851. X\fBTable 2.\fP
  852. X.SM
  853. X\fBcvs\fP Usage History for the Kernel
  854. X.ce 0
  855. X.sp
  856. X.KE
  857. XThe large number of source file changes made in September are the result of
  858. Xmerging the SunOS 4.0.3 sources into the kernel.
  859. XThis merge process is described in section 3.3.
  860. X.NH 2
  861. XPerformance
  862. X.PP
  863. XThe performance of \fBcvs\fP is currently quite reasonable.
  864. XLittle effort has been expended on tuning \fBcvs\fP, although performance
  865. Xrelated decisions were made during the \fBcvs\fP design.
  866. XFor example, \fBcvs\fP parses the
  867. X.SM
  868. XRCS
  869. X.LG
  870. X\*Q,v\*U files directly instead of running an
  871. X.SM
  872. XRCS
  873. X.LG
  874. Xprocess.
  875. XThis includes following branches as well as integrating with the vendor
  876. Xsource branches and the main trunk when checking out files based on a date.
  877. X.PP
  878. XChecking out the entire kernel source tree (1223 files/59 directories)
  879. Xcurrently takes 16 wall clock minutes on a Sun-4/280.
  880. XHowever, bringing the tree up-to-date with the current kernel sources, once
  881. Xit has been checked out, takes only 1.5 wall clock minutes.
  882. XUpdating the \fIcomplete\fP 128 MByte source tree under \fBcvs\fP control
  883. X(17243 files/1005 directories) takes roughly 28 wall clock minutes and
  884. Xutilizes one-third of the machine.
  885. XFor now this is entirely acceptable; improvements on these numbers will
  886. Xpossibly be made in the future.
  887. X.NH 2
  888. XThe SunOS 4.0.3 Merge
  889. X.PP
  890. XThe true test of the \fBcvs\fP vendor branch support came with the arrival
  891. Xof the SunOS 4.0.3 source upgrade tape.
  892. XAs described above, the \fBcheckin\fP program was used to install the new
  893. Xsources and the resulting output file listed the files that had been
  894. Xlocally modified, needing to be merged manually.
  895. XFor the kernel, there were 94 files in conflict.
  896. XThe \fBcvs\fP \*Qjoin\*U command was used on each of the 94 conflicting
  897. Xfiles, and the remaining conflicts were resolved.
  898. X.PP
  899. XThe \*Qjoin\*U command performs an \fBrcsmerge\fP operation.
  900. XThis in turn uses \fI/usr/lib/diff3\fP to produce a three-way diff file.
  901. XAs it happens, the \fBdiff3\fP program has a hard-coded limit of 200
  902. Xsource-file changes maximum.
  903. XThis proved to be too small for a few of the kernel files that needed
  904. Xmerging by hand, due to the large number of local changes that Prisma had
  905. Xmade.
  906. XThe \fBdiff3\fP problem was solved by increasing the hard-coded limit by an
  907. Xorder of magnitude.
  908. X.PP
  909. XThe SunOS 4.0.3 kernel source upgrade distribution contained
  910. X346 files, 233 of which were modifications to previously released files,
  911. Xand 113 of which were newly added files.
  912. X\fBcheckin\fP added the 113 new files to the source repository
  913. Xwithout intervention.
  914. XOf the 233 modified files, 139 dropped in cleanly by \fBcheckin\fP, since
  915. XPrisma had not made any local changes to them, and 94 required manual
  916. Xmerging due to local modifications.
  917. XThe 233 modified files consisted of 20,766 lines of differences.
  918. XIt took one developer two days to manually merge the 94 files using the
  919. X\*Qjoin\*U command and resolving conflicts manually.
  920. XAn additional day was required for kernel debugging.
  921. XThe entire process of merging over 20,000 lines of differences was
  922. Xcompleted in less than a week.
  923. XThis one time-savings alone was justification enough for the \fBcvs\fP
  924. Xdevelopment effort; we expect to gain even more when tracking future SunOS
  925. Xreleases.
  926. X.NH
  927. XFuture Enhancements and Current Bugs
  928. X.PP
  929. XSince \fBcvs\fP was designed to be incomplete, for reasons of design
  930. Xsimplicity, there are naturally a good
  931. Xnumber of enhancements that can be made to make it more useful.
  932. XAs well, some nuisances exist in the current implementation.
  933. X.RS
  934. X.IP \(bu 3
  935. X\fBcvs\fP does not currently \*Qremember\*U who has a checked out a copy of a
  936. Xmodule.
  937. XAs a result, it is impossible to know who might be working on the same
  938. Xmodule that you are.
  939. XA simple-minded database that is updated nightly would likely suffice.
  940. X.IP \(bu 3
  941. XSignal processing, keyboard interrupt handling in particular, is currently
  942. Xsomewhat weak.
  943. XThis is due to the heavy use of the \fBsystem\fP\|(3) library
  944. Xfunction to execute
  945. X.SM
  946. XRCS
  947. X.LG
  948. Xprograms like \fBco\fP and \fBci\fP.
  949. XIt sometimes takes multiple interrupts to make \fBcvs\fP quit.
  950. XThis can be fixed by using a home-grown \fBsystem\fP\|() replacement.
  951. X.IP \(bu 3
  952. XSecurity of the source repository is currently not dealt with directly.
  953. XThe usual UNIX approach of user-group-other security permissions through
  954. Xthe file system is utilized, but nothing else.
  955. X\fBcvs\fP could likely be a set-group-id executable that checks a
  956. Xprotected database to verify user access permissions for particular objects
  957. Xbefore allowing any operations to affect those objects.
  958. X.IP \(bu 3
  959. XWith every checked-out directory, \fBcvs\fP maintains some administrative
  960. Xfiles that record the current revision numbers of the checked-out files as
  961. Xwell as the location of the respective source repository.
  962. X\fBcvs\fP does not recover nicely at all if these administrative files are
  963. Xremoved.
  964. X.IP \(bu 3
  965. XThe source code for \fBcvs\fP has been tested extensively on Sun-3 and
  966. XSun-4 systems, all running SunOS 4.0 or later versions of the operating
  967. Xsystem.
  968. XSince the code has not yet been compiled under other platforms, the overall
  969. Xportability of the code is still questionable.
  970. X.IP \(bu 3
  971. XAs witnessed in the previous section, the \fBcvs\fP method for tracking
  972. Xthird party vendor source distributions can work quite nicely.
  973. XHowever, if the vendor changes the directory structure or the file names
  974. Xwithin the source distribution, \fBcvs\fP has no way of matching the old
  975. Xrelease with the new one.
  976. XIt is currently unclear as to how to solve this, though it is certain to
  977. Xhappen in practice.
  978. X.RE
  979. X.NH
  980. XAvailability
  981. X.PP
  982. XThe \fBcvs\fP program sources can be found in a recent posting to the
  983. X\fBcomp.sources.unix\fP newsgroup.
  984. XIt is also currently available via anonymous ftp from \*Qprisma.com\*U.
  985. XCopying rights for \fBcvs\fP will be covered by the GNU General Public
  986. XLicense.
  987. X.NH
  988. XSummary
  989. X.PP
  990. XPrisma has used \fBcvs\fP since December, 1988.
  991. XIt has evolved to meet our specific needs of revision and release control.
  992. XWe will make our code freely available so that others can
  993. Xbenefit from our work, and can enhance \fBcvs\fP to meet broader needs yet.
  994. X.PP
  995. XMany of the other software release and revision control systems, like the
  996. Xone described in [Glew], appear to use a collection of tools that are
  997. Xgeared toward specific environments \(em one set of tools for the kernel,
  998. Xone set for \*Qgeneric\*U software, one set for utilities, and one set for
  999. Xkernel and utilities.
  1000. XEach of these tool sets apparently handle some specific aspect of the
  1001. Xproblem uniquely.
  1002. X\fBcvs\fP took a somewhat different approach.
  1003. XFile sharing through symbolic or hard links is not addressed; instead, the
  1004. Xdisk space is simply burned since it is \*Qcheap.\*U
  1005. XSupport for producing objects for multiple architectures is not addressed;
  1006. Xinstead, a parallel checked-out source tree must be used for each
  1007. Xarchitecture, again wasting disk space to simplify complexity and ease of
  1008. Xuse \(em punting on this issue allowed \fIMakefile\fPs to remain
  1009. Xunchanged, unlike the approach taken in [Mahler], thereby maintaining closer
  1010. Xcompatibility with the third-party vendor sources.
  1011. X\fBcvs\fP is essentially a source-file server, making no assumptions or
  1012. Xspecial handling of the sources that it controls.
  1013. XTo \fBcvs\fP:
  1014. X.QP
  1015. XA source is a source, of course, of course, unless of course the source is
  1016. XMr. Ed.\**
  1017. X.FS
  1018. X\fBcvs\fP, of course, does not really discriminate against Mr. Ed.\**
  1019. X.FE
  1020. X.FS
  1021. XYet.
  1022. X.FE
  1023. X.LP
  1024. XSources are maintained, saved, and retrievable at any time based on
  1025. Xsymbolic or numeric revision or date in the past.
  1026. XIt is entirely up to \fBcvs\fP wrapper programs to provide for release
  1027. Xenvironments and such.
  1028. X.PP
  1029. XThe major advantage of \fBcvs\fP over the
  1030. Xmany other similar systems that have already been designed is the
  1031. Xsimplicity of \fBcvs\fP.
  1032. X\fBcvs\fP contains only three programs that do all the work of release
  1033. Xand revision control, and two manually-maintained administrative
  1034. Xfiles for each source repository.
  1035. XOf course, the deciding factor of any tool is whether people use it, and if
  1036. Xthey even \fIlike\fP to use it.
  1037. XAt Prisma, \fBcvs\fP prevented members of the kernel
  1038. Xgroup from killing each other.
  1039. X.NH
  1040. XAcknowledgements
  1041. X.PP
  1042. XMany thanks to Dick Grune at Vrije Universiteit in Amsterdam for his work
  1043. Xon the original version of \fBcvs\fP and for making it available to the
  1044. Xworld.
  1045. XThanks to Jeff Polk of Prisma for helping with the design of the module
  1046. Xdatabase, vendor branch support, and for writing the \fBcheckin\fP shell
  1047. Xscript.
  1048. XThanks also to the entire software group at Prisma for taking the
  1049. Xtime to review the paper and correct my grammar.
  1050. X.NH
  1051. XReferences
  1052. X.IP [Bell] 12
  1053. XBell Telephone Laboratories.
  1054. X\*QSource Code Control System User's Guide.\*U
  1055. X\fIUNIX System III Programmer's Manual\fP, October 1981.
  1056. X.IP [Courington] 12
  1057. XCourington, W.
  1058. X\fIThe Network Software Environment\fP,
  1059. XSun Technical Report FE197-0, Sun Microsystems Inc, February 1989.
  1060. X.IP [Essick] 12
  1061. XEssick, Raymond B. and Robert Bruce Kolstad.
  1062. X\fINotesfile Reference Manual\fP,
  1063. XDepartment of Computer Science Technical Report #1081,
  1064. XUniversity of Illinois at Urbana-Champaign, Urbana, Illinois,
  1065. X1982, p. 26.
  1066. X.IP [Glew] 12
  1067. XGlew, Andy.
  1068. X\*QBoxes, Links, and Parallel Trees:
  1069. XElements of a Configuration Management System.\*U
  1070. X\fIWorkshop Proceedings of the Software Management Conference\fP, USENIX,
  1071. XNew Orleans, April 1989.
  1072. X.IP [Grune] 12
  1073. XGrune, Dick.
  1074. XDistributed the original shell script version of \fBcvs\fP in the
  1075. X\fBcomp.sources.unix\fP volume 6 release in 1986.
  1076. X.IP [Honda] 12
  1077. XHonda, Masahiro and Terrence Miller.
  1078. X\*QSoftware Management Using a CASE Environment.\*U
  1079. X\fIWorkshop Proceedings of the Software Management Conference\fP, USENIX,
  1080. XNew Orleans, April 1989.
  1081. X.IP [Mahler] 12
  1082. XMahler, Alex and Andreas Lampen.
  1083. X\*QAn Integrated Toolset for Engineering Software Configurations.\*U
  1084. X\fIProceedings of the ACM SIGSOFT/SIGPLAN Software Engineering Symposium on
  1085. XPractical Software Development Environments\fP, ACM, Boston, November 1988.
  1086. XDescribed is the \fBshape\fP toolkit posted to the
  1087. X\fBcomp.sources.unix\fP newsgroup in the volume 19 release.
  1088. X.IP [Tichy] 12
  1089. XTichy, Walter F.
  1090. X\*QDesign, Implementation, and Evaluation of a Revision Control System.\*U
  1091. X\fIProceedings of the 6th International Conference on Software
  1092. XEngineering\fP, IEEE, Tokyo, September 1982.
  1093. X.IP [Wall] 12
  1094. XWall, Larry.
  1095. XThe \fBpatch\fP program is an indispensable tool for applying a diff file
  1096. Xto an original.
  1097. XCan be found on uunet.uu.net in ~ftp/pub/patch.tar.
  1098. END_OF_FILE
  1099. if test 37780 -ne `wc -c <'doc/cvs.ms'`; then
  1100.     echo shar: \"'doc/cvs.ms'\" unpacked with wrong size!
  1101. fi
  1102. # end of 'doc/cvs.ms'
  1103. fi
  1104. echo shar: End of archive 6 \(of 7\).
  1105. cp /dev/null ark6isdone
  1106. MISSING=""
  1107. for I in 1 2 3 4 5 6 7 ; do
  1108.     if test ! -f ark${I}isdone ; then
  1109.     MISSING="${MISSING} ${I}"
  1110.     fi
  1111. done
  1112. if test "${MISSING}" = "" ; then
  1113.     echo You have unpacked all 7 archives.
  1114.     rm -f ark[1-9]isdone
  1115. else
  1116.     echo You still need to unpack the following archives:
  1117.     echo "        " ${MISSING}
  1118. fi
  1119. ##  End of shell archive.
  1120. exit 0
  1121. exit 0 # Just in case...
  1122.