Annotation of 43BSDReno/share/doc/ps1/14.sccs/sccs.me, revision 1.1

1.1     ! root        1: .\" Copyright (c) 1980 Regents of the University of California.
        !             2: .\" All rights reserved.  The Berkeley software License Agreement
        !             3: .\" specifies the terms and conditions for redistribution.
        !             4: .\"
        !             5: .\"    @(#)sccs.me     6.3 (Berkeley) 5/30/86
        !             6: .\"
        !             7: .eh '\fRPS1:14-%\fP''\fRAn Introduction to the Source Code Control System\fP'
        !             8: .oh '\fRAn Introduction to the Source Code Control System\fP''\fRPS1:14-%\fP'
        !             9: .ds S \s-1SCCS\s0
        !            10: .ds I \s-1SID\s0
        !            11: .nr bi 8n
        !            12: .ev 1                  \" only for keeps
        !            13: .ss 16
        !            14: .ev
        !            15: .\".he '\*S Introduction''%'
        !            16: .+c
        !            17: .(l C
        !            18: .sz 14
        !            19: .b
        !            20: An Introduction to the
        !            21: Source Code Control System
        !            22: .sz
        !            23: .r
        !            24: .sp
        !            25: Eric Allman
        !            26: .i "Project Ingres"
        !            27: .i "University of California at Berkeley"
        !            28: .)l
        !            29: .sp 3
        !            30: .pp
        !            31: .(f
        !            32: This is version 1.21 of this document.
        !            33: It was last modified on 12/5/80.
        !            34: .)f
        !            35: This document gives a quick introduction
        !            36: to using the Source Code Control System
        !            37: (\*S).
        !            38: The presentation is geared to programmers
        !            39: who are more concerned with
        !            40: what
        !            41: to do to get a task done
        !            42: rather than how it works;
        !            43: for this reason some of the examples
        !            44: are not well explained.
        !            45: For details of what the magic options do,
        !            46: see the section on
        !            47: .q "Further Information" .
        !            48: .(l F
        !            49: This is a working document.
        !            50: Please send any comments or suggestions
        !            51: to [email protected].
        !            52: .)l
        !            53: .sh 1 "Introduction"
        !            54: .pp
        !            55: \*S is a source management system.
        !            56: Such a system maintains a record of versions of a system;
        !            57: a record is kept with each set of changes
        !            58: of what the changes are,
        !            59: why they were made,
        !            60: and who made them and when.
        !            61: Old versions can be recovered,
        !            62: and different versions can be maintained simultaneously.
        !            63: In projects with more than one person,
        !            64: \*S will insure that two people are not
        !            65: editing the same file at the same time.
        !            66: .pp
        !            67: All versions of your program,
        !            68: plus the log and other information,
        !            69: is kept in a file called the
        !            70: .q "s-file" .
        !            71: There are three major operations
        !            72: that can be performed on the s-file:
        !            73: .np
        !            74: Get a file for compilation (not for editing).
        !            75: This operation retrieves a version of the file
        !            76: from the s-file.
        !            77: By default, the latest version is retrieved.
        !            78: This file is intended for compilation, printing, or whatever;
        !            79: it is specifically NOT intended to be edited
        !            80: or changed in any way;
        !            81: any changes made to a file retrieved
        !            82: in this way will probably be lost.
        !            83: .np
        !            84: Get a file for editing.
        !            85: This operation also retrieves a version of the file
        !            86: from the s-file,
        !            87: but this file is intended to be edited and then
        !            88: incorporated back into the s-file.
        !            89: Only one person may be editing a file at one time.
        !            90: .np
        !            91: Merge a file back into the s-file.
        !            92: This is the companion operation to (2).
        !            93: A new version number is assigned,
        !            94: and comments are saved explaining why this change was made.
        !            95: .sh 1 "Learning the Lingo"
        !            96: .pp
        !            97: There are a number of terms that are worth learning
        !            98: before we go any farther.
        !            99: .sh 2 "S-file"
        !           100: .pp
        !           101: The s-file
        !           102: is a single file that holds all the different versions
        !           103: of your file.
        !           104: The s-file is stored in
        !           105: differential format;
        !           106: .i i.e. ,
        !           107: only the differences between versions are stored,
        !           108: rather than the entire text of the new version.
        !           109: This saves disk space
        !           110: and allows selective changes to be removed later.
        !           111: Also included in the s-file
        !           112: is some header information for each version,
        !           113: including the comments given by the person who
        !           114: created the version explaining why the changes were made.
        !           115: .sh 2 "Deltas"
        !           116: .pp
        !           117: Each set of changes to the s-file
        !           118: (which is approximately [but not exactly!] equivalent
        !           119: to a version of the file)
        !           120: is called a
        !           121: .i delta .
        !           122: Although technically a delta only includes the
        !           123: .i changes
        !           124: made,
        !           125: in practice
        !           126: it is usual for
        !           127: each delta to be made with respect to
        !           128: all the deltas that have occurred before\**.
        !           129: .(f
        !           130: \**This matches normal usage, where the previous changes are not saved
        !           131: at all,
        !           132: so all changes are automatically based on all other changes
        !           133: that have happened through history.
        !           134: .)f
        !           135: However,
        !           136: it is possible to get a version of the file
        !           137: that has selected deltas removed out of the middle
        !           138: of the list of changes \*-
        !           139: equivalent to removing your changes later.
        !           140: .sh 2 "\*I's (or, version numbers)"
        !           141: .pp
        !           142: A \*I
        !           143: (\*S Id)
        !           144: is a number that represents a delta.
        !           145: This is normally a two-part number
        !           146: consisting of a
        !           147: .q release
        !           148: number and a
        !           149: .q level
        !           150: number.
        !           151: Normally the release number stays the same,
        !           152: however,
        !           153: it is possible to move into a new release
        !           154: if some major change is being made.
        !           155: .pp
        !           156: Since all past deltas are normally applied,
        !           157: the \*I of the final delta applied
        !           158: can be used to represent a version number of the file
        !           159: as a whole.
        !           160: .sh 2 "Id keywords"
        !           161: .pp
        !           162: When you get a version of a file
        !           163: with intent to compile and install it
        !           164: (\c
        !           165: .i i.e. ,
        !           166: something other than edit it),
        !           167: some special keywords are expanded inline
        !           168: by \*S.
        !           169: These
        !           170: .i "Id Keywords"
        !           171: can be used to include the current version number
        !           172: or other information into the file.
        !           173: All id keywords are of the form
        !           174: .b % \c
        !           175: .i x \c
        !           176: .b % ,
        !           177: where
        !           178: .i x
        !           179: is an upper case letter.
        !           180: For example,
        !           181: .b %\&I\&%
        !           182: is the \*I of the latest delta applied,
        !           183: .b %\&W\&%
        !           184: includes the module name,
        !           185: \*I,
        !           186: and a mark that makes it findable by a program,
        !           187: and
        !           188: .b %\&G\&%
        !           189: is the date of the latest delta applied.
        !           190: There are many others,
        !           191: most of which are of dubious usefulness.
        !           192: .pp
        !           193: When you get a file for editing,
        !           194: the id keywords are not expanded;
        !           195: this is so that after you put them back in to the s-file,
        !           196: they will be expanded automatically on each new version.
        !           197: But notice: if you were to get them
        !           198: expanded accidently,
        !           199: then your file would appear to be the same version
        !           200: forever more,
        !           201: which would of course defeat the purpose.
        !           202: Also,
        !           203: if you should install a version of the program
        !           204: without expanding the id keywords,
        !           205: it will be impossible to tell what version it is
        !           206: (since all it will have is
        !           207: .q %\&W\&%
        !           208: or whatever).
        !           209: .sh 1 "Creating \*S Files"
        !           210: .pp
        !           211: To put source files
        !           212: into
        !           213: \*S
        !           214: format, run the following shell script from csh:
        !           215: .(b
        !           216: mkdir SCCS save
        !           217: foreach i (*.[ch])
        !           218:        sccs admin \-i$i $i
        !           219:        mv $i save/$i
        !           220: end
        !           221: .)b
        !           222: This will put the named files
        !           223: into s-files
        !           224: in the subdirectory
        !           225: .q SCCS
        !           226: The files will be removed from the current directory
        !           227: and hidden away in the directory
        !           228: .q save ,
        !           229: so the next thing you will probably want to do
        !           230: is to get all the files
        !           231: (described below).
        !           232: When you are convinced that
        !           233: \*S has correctly created the s-files,
        !           234: you should remove the directory
        !           235: .q save .
        !           236: .pp
        !           237: If you want to have id keywords in the files,
        !           238: it is best to put them in before you create the s-files.
        !           239: If you do not,
        !           240: .i admin
        !           241: will print
        !           242: .q "No Id Keywords (cm7)" ,
        !           243: which is a warning message only.
        !           244: .sh 1 "Getting Files for Compilation"
        !           245: .pp
        !           246: To get a copy of the latest version
        !           247: of a file,
        !           248: run
        !           249: .(b
        !           250: sccs get prog.c
        !           251: .)b
        !           252: \*S will respond:
        !           253: .(b
        !           254: 1.1
        !           255: 87 lines
        !           256: .)b
        !           257: meaning that version 1.1 was retrieved\**
        !           258: .(f
        !           259: \**Actually,
        !           260: the \*I of the final delta applied was 1.1.
        !           261: .)f
        !           262: and that it has 87 lines.
        !           263: The file
        !           264: .i prog.c
        !           265: will be created
        !           266: in the current directory.
        !           267: The file will be read-only
        !           268: to remind you that you are not
        !           269: supposed to change it.
        !           270: .pp
        !           271: This copy of the file
        !           272: should not be changed,
        !           273: since \*S is unable
        !           274: to merge the changes
        !           275: back into the s-file.
        !           276: If you do make changes,
        !           277: they will be lost the next time
        !           278: someone does a
        !           279: .i get .
        !           280: .sh 1 "Changing Files (or, Creating Deltas)"
        !           281: .sh 2 "Getting a copy to edit"
        !           282: .pp
        !           283: To edit a source file,
        !           284: you must first get it,
        !           285: requesting permission to edit it\**:
        !           286: .(f
        !           287: \**The
        !           288: .q "edit"
        !           289: command is equivalent to using the \-e
        !           290: flag to
        !           291: .i "get" ,
        !           292: as:
        !           293: .(l
        !           294: sccs get \-e prog.c
        !           295: .)l
        !           296: Keep this in mind when reading other documentation.
        !           297: .)f
        !           298: .(b
        !           299: sccs edit prog.c
        !           300: .)b
        !           301: The response will be the same as with
        !           302: .i get
        !           303: except that it will also say:
        !           304: .(b
        !           305: New delta 1.2
        !           306: .)b
        !           307: You then edit it,
        !           308: using a standard text editor:
        !           309: .(b
        !           310: vi prog.c
        !           311: .)b
        !           312: .sh 2 "Merging the changes back into the s-file"
        !           313: .pp
        !           314: When the desired changes are made,
        !           315: you can put your changes into the
        !           316: \*S
        !           317: file using the
        !           318: .i delta
        !           319: command:
        !           320: .(b
        !           321: sccs delta prog.c
        !           322: .)b
        !           323: .pp
        !           324: Delta will prompt you for
        !           325: .q "comments?"
        !           326: before it merges the changes in.
        !           327: At this prompt you should type a one-line description
        !           328: of what the changes mean
        !           329: (more lines can be entered by ending each line
        !           330: except the last with a backslash\**).
        !           331: .(f
        !           332: \**Yes, this is a stupid default.
        !           333: .)f
        !           334: .i Delta
        !           335: will then type:
        !           336: .(b
        !           337: 1.2
        !           338: 5 inserted
        !           339: 3 deleted
        !           340: 84 unchanged
        !           341: .)b
        !           342: saying that delta 1.2 was created,
        !           343: and it inserted five lines,
        !           344: removed three lines,
        !           345: and left 84 lines unchanged\**.
        !           346: .(f
        !           347: \**Changes to a line are counted as a line deleted
        !           348: and a line inserted.
        !           349: .)f
        !           350: The
        !           351: .i prog.c
        !           352: file will be removed;
        !           353: it can be retrieved
        !           354: using
        !           355: .i get .
        !           356: .sh 2 "When to make deltas"
        !           357: .pp
        !           358: It is probably unwise to make a delta
        !           359: before every recompilation or test;
        !           360: otherwise,
        !           361: you tend to get a lot of deltas with comments like
        !           362: .q "fixed compilation problem in previous delta"
        !           363: or
        !           364: .q "fixed botch in 1.3" .
        !           365: However,
        !           366: it is very important to delta everything
        !           367: before installing a module for general use.
        !           368: A good technique is to edit the files you need,
        !           369: make all necessary changes and tests,
        !           370: compiling and editing as often as necessary
        !           371: without making deltas.
        !           372: When you are satisfied that you have a working version,
        !           373: delta everything being edited,
        !           374: re-get them,
        !           375: and recompile everything.
        !           376: .sh 2 "What's going on: the info command"
        !           377: .pp
        !           378: To find out what files where being edited,
        !           379: you can use:
        !           380: .(b
        !           381: sccs info
        !           382: .)b
        !           383: to print out all the files being edited
        !           384: and other information such as the name of the user
        !           385: who did the edit.
        !           386: Also,
        !           387: the command:
        !           388: .(b
        !           389: sccs check
        !           390: .)b
        !           391: is nearly equivalent to the
        !           392: .i info
        !           393: command,
        !           394: except that it is silent if nothing is being edited,
        !           395: and returns non-zero exit status if anything is being edited;
        !           396: it can be used in an
        !           397: .q install
        !           398: entry in a makefile
        !           399: to abort the install
        !           400: if anything has not been properly deltaed.
        !           401: .pp
        !           402: If you know that everything being edited should be deltaed,
        !           403: you can use:
        !           404: .(b
        !           405: sccs delta \`sccs tell\`
        !           406: .)b
        !           407: The
        !           408: .i tell
        !           409: command is similar to
        !           410: .i info
        !           411: except that only the names of files being edited
        !           412: are output,
        !           413: one per line.
        !           414: .pp
        !           415: All of these commands take a
        !           416: .b \-b
        !           417: flag
        !           418: to ignore
        !           419: .q branches
        !           420: (alternate versions, described later)
        !           421: and the
        !           422: .b \-u
        !           423: flag to only give files being edited by you.
        !           424: The
        !           425: .b \-u
        !           426: flag takes an optional
        !           427: .i user
        !           428: argument,
        !           429: giving only files being edited by that user.
        !           430: For example,
        !           431: .(b
        !           432: sccs info \-ujohn
        !           433: .)b
        !           434: gives a listing of files being edited by john.
        !           435: .sh 2 "ID keywords"
        !           436: .pp
        !           437: Id keywords can be inserted into your file
        !           438: that will be expanded automatically by
        !           439: .i get .
        !           440: For example,
        !           441: a line such as:
        !           442: .(b
        !           443: static char SccsId[] = "%\&W\&%\et%\&G\&%";
        !           444: .)b
        !           445: will be replaced with something like:
        !           446: .(b
        !           447: static char SccsId[] = "@\&(#)prog.c   1.2     08/29/80";
        !           448: .)b
        !           449: This tells you
        !           450: the name and version
        !           451: of the source file
        !           452: and the time the delta was created.
        !           453: The string
        !           454: .q "@\&(#)"
        !           455: is a special string
        !           456: which signals the beginning
        !           457: of an
        !           458: \*S
        !           459: Id keyword.
        !           460: .sh 3 "The what command"
        !           461: .pp
        !           462: To find out what version of a program
        !           463: is being run,
        !           464: use:
        !           465: .(b
        !           466: sccs what prog.c /usr/bin/prog
        !           467: .)b
        !           468: which will print all strings
        !           469: it finds that
        !           470: begin with
        !           471: .q "@\&(#)" .
        !           472: This works on all types of files,
        !           473: including binaries and libraries.
        !           474: For example, the above command will output something like:
        !           475: .(b
        !           476: prog.c:
        !           477:        prog.c  1.2     08/29/80
        !           478: /usr/bin/prog:
        !           479:        prog.c  1.1     02/05/79
        !           480: .)b
        !           481: From this I can see
        !           482: that the source that I have in prog.c
        !           483: will not compile into the same version
        !           484: as the binary in /usr/bin/prog.
        !           485: .sh 3 "Where to put id keywords"
        !           486: .pp
        !           487: ID keywords can be inserted anywhere,
        !           488: including in comments,
        !           489: but
        !           490: Id Keywords that are compiled into the object module
        !           491: are especially useful,
        !           492: since it lets you find out what version of
        !           493: the object is being run,
        !           494: as well as the source.
        !           495: However,
        !           496: there is a cost:
        !           497: data space is used up to store
        !           498: the keywords,
        !           499: and on small address space machines
        !           500: this may be prohibitive.
        !           501: .pp
        !           502: When you put id keywords into header files,
        !           503: it is important that you assign them to different variables.
        !           504: For example, you might use:
        !           505: .(b
        !           506: static char AccessSid[] = "%\&W\&%     %\&G\&%";
        !           507: .)b
        !           508: in the file
        !           509: .i access.h
        !           510: and:
        !           511: .(b
        !           512: static char OpsysSid[] = "%\&W\&%      %\&G\&%";
        !           513: .)b
        !           514: in the file
        !           515: .i opsys.h .
        !           516: Otherwise,
        !           517: you will get compilation errors because
        !           518: .q SccsId
        !           519: is redefined.
        !           520: The problem with this is that if the header file
        !           521: is included by many modules that are loaded together,
        !           522: the version number of that header file is included
        !           523: in the object module many times;
        !           524: you may find it more to your taste
        !           525: to put id keywords in header files
        !           526: in comments.
        !           527: .sh 2 "Keeping \*I's consistent across files"
        !           528: .pp
        !           529: With some care,
        !           530: it is possible to keep the \*I's consistent
        !           531: in multi-file systems.
        !           532: The trick here is to always
        !           533: .i edit
        !           534: all files
        !           535: at once.
        !           536: The changes can then be made
        !           537: to whatever files are necessary
        !           538: and then all files
        !           539: (even those not changed)
        !           540: are redeltaed.
        !           541: This can be done fairly easily
        !           542: by just specifying the name of the directory
        !           543: that the \*S files are in:
        !           544: .(b
        !           545: sccs edit SCCS
        !           546: .)b
        !           547: which will
        !           548: .i edit
        !           549: all files in that directory.
        !           550: To make the delta, use:
        !           551: .(b
        !           552: sccs delta SCCS
        !           553: .)b
        !           554: You will be prompted for comments only once.
        !           555: .sh 2 "Creating new releases"
        !           556: .pp
        !           557: When you want to create a new release
        !           558: of a program,
        !           559: you can specify the release number you want to create
        !           560: on the
        !           561: .i edit
        !           562: command.
        !           563: For example:
        !           564: .(b
        !           565: sccs edit \-r2 prog.c
        !           566: .)b
        !           567: will cause the next delta to be in release two
        !           568: (that is,
        !           569: it will be numbered 2.1).
        !           570: Future deltas will automatically be in release two.
        !           571: To change the release number
        !           572: of an entire system,
        !           573: use:
        !           574: .(b
        !           575: sccs edit \-r2 SCCS
        !           576: .)b
        !           577: .sh 1 "Restoring Old Versions"
        !           578: .sh 2 "Reverting to old versions"
        !           579: .pp
        !           580: Suppose that after delta 1.2
        !           581: was stable
        !           582: you made and released a delta 1.3.
        !           583: But this introduced a bug,
        !           584: so you made a delta 1.4 to correct it.
        !           585: But 1.4 was still buggy,
        !           586: and you decided you wanted to go back
        !           587: to the old version.
        !           588: You could
        !           589: revert to delta 1.2
        !           590: by choosing the \*I in a get:
        !           591: .(b
        !           592: sccs get \-r1.2 prog.c
        !           593: .)b
        !           594: This will produce a version of
        !           595: .i prog.c
        !           596: that is delta 1.2
        !           597: that can be reinstalled so that work can proceed.
        !           598: .pp
        !           599: In some cases you don't know
        !           600: what the \*I of the delta you want is.
        !           601: However,
        !           602: you can revert to the version of the program
        !           603: that was running as of a certain date
        !           604: by using the
        !           605: .b \-c
        !           606: (cutoff) flag.
        !           607: For example,
        !           608: .(b
        !           609: sccs get \-c800722120000 prog.c
        !           610: .)b
        !           611: will retrieve whatever version was current
        !           612: as of July 22, 1980
        !           613: at 12:00 noon.
        !           614: Trailing components can be stripped off
        !           615: (defaulting to their highest legal value),
        !           616: and punctuation can be inserted in the obvious
        !           617: places;
        !           618: for example,
        !           619: the above line could be equivalently stated:
        !           620: .(b
        !           621: sccs get \-c"80/07/22 12:00:00" prog.c
        !           622: .)b
        !           623: .sh 2 "Selectively deleting old deltas"
        !           624: .pp
        !           625: Suppose that you later decided
        !           626: that you liked the changes in delta 1.4,
        !           627: but that delta 1.3 should be removed.
        !           628: You could do this by
        !           629: .i excluding
        !           630: delta 1.3:
        !           631: .(b
        !           632: sccs edit \-x1.3 prog.c
        !           633: .)b
        !           634: When delta 1.5 is made,
        !           635: it will include the changes made
        !           636: in delta 1.4,
        !           637: but will exclude the changes made
        !           638: in delta 1.3.
        !           639: You can exclude a range of deltas
        !           640: using a dash.
        !           641: For example,
        !           642: if you want to get rid of 1.3 and 1.4
        !           643: you can use:
        !           644: .(b
        !           645: sccs edit \-x1.3\-1.4 prog.c
        !           646: .)b
        !           647: which will exclude all deltas from 1.3 to 1.4.
        !           648: Alternatively,
        !           649: .(b
        !           650: sccs edit \-x1.3\-1 prog.c
        !           651: .)b
        !           652: will exclude a range of deltas
        !           653: from 1.3 to the current highest delta in release 1.
        !           654: .pp
        !           655: In certain cases when using
        !           656: .b \-x
        !           657: (or
        !           658: .b \-i ;
        !           659: see below)
        !           660: there will be conflicts
        !           661: between versions;
        !           662: for example, it may be necessary
        !           663: to both include and delete
        !           664: a particular line.
        !           665: If this happens,
        !           666: \*S always prints out a message
        !           667: telling the range of lines effected;
        !           668: these lines should then be examined very carefully
        !           669: to see if the version \*S got
        !           670: is ok.
        !           671: .pp
        !           672: Since each delta
        !           673: (in the sense of
        !           674: .q "a set of changes" )
        !           675: can be excluded at will,
        !           676: that this makes it most useful
        !           677: to put each semantically distinct change
        !           678: into its own delta.
        !           679: .sh 1 "Auditing Changes"
        !           680: .sh 2 "The prt command"
        !           681: .pp
        !           682: When you created a delta,
        !           683: you presumably gave a reason for the delta
        !           684: to the
        !           685: .q "comments?"
        !           686: prompt.
        !           687: To print out these comments later,
        !           688: use:
        !           689: .(b
        !           690: sccs prt prog.c
        !           691: .)b
        !           692: This will produce
        !           693: a report
        !           694: for each delta
        !           695: of the \*I,
        !           696: time and date of creation,
        !           697: user who created the delta,
        !           698: number of lines inserted, deleted, and unchanged,
        !           699: and the comments associated with the delta.
        !           700: For example, the output of the above command might be:
        !           701: .(b
        !           702: D 1.2  80/08/29 12:35:31       bill    2       1       00005/00003/00084
        !           703: removed "-q" option
        !           704: .sp \n(psu
        !           705: D 1.1  79/02/05 00:19:31       eric    1       0       00087/00000/00000
        !           706: date and time created 80/06/10 00:19:31 by eric
        !           707: .)b
        !           708: .sh 2 "Finding why lines were inserted"
        !           709: .pp
        !           710: To find out
        !           711: why you inserted lines,
        !           712: you can get a copy of the file
        !           713: with each line
        !           714: preceded by the \*I that created it:
        !           715: .(b
        !           716: sccs get \-m prog.c
        !           717: .)b
        !           718: You can then find out
        !           719: what this delta did
        !           720: by printing the comments using
        !           721: .i prt .
        !           722: .pp
        !           723: To find out what lines are associated with a particular delta
        !           724: (\c
        !           725: .i e.g. ,
        !           726: 1.3),
        !           727: use:
        !           728: .(b
        !           729: sccs get \-m \-p prog.c \(bv grep \'^1.3\'
        !           730: .)b
        !           731: The
        !           732: .b \-p
        !           733: flag causes \*S to output the generated source
        !           734: to the standard output rather than to a file.
        !           735: .sh 2 "Finding what changes you have made"
        !           736: .pp
        !           737: When you are editing a file,
        !           738: you can find out what changes you have made using:
        !           739: .(b
        !           740: sccs diffs prog.c
        !           741: .)b
        !           742: Most of the ``diff'' flags can be used.
        !           743: To pass the
        !           744: .b \-c
        !           745: flag,
        !           746: use
        !           747: .b \-C .
        !           748: .pp
        !           749: To compare two versions that are in deltas,
        !           750: use:
        !           751: .(b
        !           752: sccs sccsdiff -r1.3 -r1.6 prog.c
        !           753: .)b
        !           754: to see the differences between delta 1.3 and delta 1.6.
        !           755: .sh 1 "Shorthand Notations"
        !           756: .pp
        !           757: There are several sequences of commands that get
        !           758: executed frequently.
        !           759: .i Sccs
        !           760: tries to make it easy to do these.
        !           761: .sh 2 "Delget"
        !           762: .pp
        !           763: A frequent requirement is to make a delta of some file
        !           764: and then get that file.
        !           765: This can be done by using:
        !           766: .(b
        !           767: sccs delget prog.c
        !           768: .)b
        !           769: which is entirely equivalent to using:
        !           770: .(b
        !           771: sccs delta prog.c
        !           772: sccs get prog.c
        !           773: .)b
        !           774: The
        !           775: .q deledit
        !           776: command is equivalent to
        !           777: .q delget
        !           778: except that the
        !           779: .q edit
        !           780: command is used
        !           781: instead of the
        !           782: .q get
        !           783: command.
        !           784: .sh 2 "Fix"
        !           785: .pp
        !           786: Frequently, there are small bugs
        !           787: in deltas,
        !           788: e.g., compilation errors,
        !           789: for which there is no reason to maintain an audit trail.
        !           790: To
        !           791: .i replace
        !           792: a delta, use:
        !           793: .(b
        !           794: sccs fix \-r1.4 prog.c
        !           795: .)b
        !           796: This will get a copy of delta 1.4 of prog.c for you to edit
        !           797: and then delete delta 1.4 from the \*S file.
        !           798: When you do a delta of prog.c,
        !           799: it will be delta 1.4 again.
        !           800: The \-r flag must be specified,
        !           801: and the delta that is specified must be a leaf delta,
        !           802: i.e., no other deltas may have been made subsequent
        !           803: to the creation of that delta.
        !           804: .sh 2 "Unedit"
        !           805: .pp
        !           806: If you found you edited a file
        !           807: that you did not want to edit,
        !           808: you can back out by using:
        !           809: .(b
        !           810: sccs unedit prog.c
        !           811: .)b
        !           812: .sh 2 "The \-d flag"
        !           813: .pp
        !           814: If you are working on a project
        !           815: where the \*S code is in a directory somewhere,
        !           816: you may be able to simplify things
        !           817: by using a shell alias.
        !           818: For example,
        !           819: the alias:
        !           820: .(b
        !           821: alias syssccs sccs \-d/usr/src
        !           822: .)b
        !           823: will allow you to issue commands such as:
        !           824: .(b
        !           825: syssccs edit cmd/who.c
        !           826: .)b
        !           827: which will look for the file
        !           828: .q "/usr/src/cmd/SCCS/who.c" .
        !           829: The file
        !           830: .q who.c
        !           831: will always be created in your current directory
        !           832: regardless of the value of the \-d flag.
        !           833: .sh 1 "Using \*S on a Project"
        !           834: .pp
        !           835: Working on a project with several people
        !           836: has its own set of special problems.
        !           837: The main problem occurs when two people
        !           838: modify a file at the same time.
        !           839: \*S prevents this by locking an s-file
        !           840: while it is being edited.
        !           841: .pp
        !           842: As a result,
        !           843: files should not be reserved for editing
        !           844: unless they are actually being edited at the time,
        !           845: since this will prevent other people on the project
        !           846: from making necessary changes.
        !           847: For example,
        !           848: a good scenario for working might be:
        !           849: .(b
        !           850: sccs edit a.c g.c t.c
        !           851: vi a.c g.c t.c
        !           852: # do testing of the (experimental) version
        !           853: sccs delget a.c g.c t.c
        !           854: sccs info
        !           855: # should respond "Nothing being edited"
        !           856: make install
        !           857: .)b
        !           858: .pp
        !           859: As a general rule,
        !           860: all source files should be deltaed
        !           861: before installing the program for general use.
        !           862: This will insure that it is possible
        !           863: to restore any version in use at any time.
        !           864: .sh 1 "Saving Yourself"
        !           865: .sh 2 "Recovering a munged edit file"
        !           866: .pp
        !           867: Sometimes you may find
        !           868: that you have destroyed or trashed
        !           869: a file that you were trying to edit\**.
        !           870: .(f
        !           871: \**Or given up and decided to start over.
        !           872: .)f
        !           873: Unfortunately,
        !           874: you can't just remove it
        !           875: and re-\c
        !           876: .i edit
        !           877: it;
        !           878: \*S keeps track
        !           879: of the fact
        !           880: that someone is trying to edit it,
        !           881: so it won't let you do it again.
        !           882: Neither can you just get it using
        !           883: .i get ,
        !           884: since that would expand the Id keywords.
        !           885: Instead,
        !           886: you can say:
        !           887: .(b
        !           888: sccs get \-k prog.c
        !           889: .)b
        !           890: This will not expand the Id keywords,
        !           891: so it is safe to do a delta
        !           892: with it.
        !           893: .pp
        !           894: Alternately,
        !           895: you can
        !           896: .i unedit
        !           897: and
        !           898: .i edit
        !           899: the file.
        !           900: .sh 2 "Restoring the s-file"
        !           901: .pp
        !           902: In particularly bad circumstances,
        !           903: the \*S file itself
        !           904: may get munged.
        !           905: The most common way this happens
        !           906: is that it gets edited.
        !           907: Since \*S keeps a checksum,
        !           908: you will get errors every time you read the file.
        !           909: To fix this checksum, use:
        !           910: .(b
        !           911: sccs admin \-z prog.c
        !           912: .)b
        !           913: .sh 1 "Using the Admin Command"
        !           914: .pp
        !           915: There are a number of parameters that can be set
        !           916: using the
        !           917: .i admin
        !           918: command.
        !           919: The most interesting of these are flags.
        !           920: Flags can be added by using the
        !           921: .b \-f
        !           922: flag.
        !           923: For example:
        !           924: .(b
        !           925: sccs admin \-fd1 prog.c
        !           926: .)b
        !           927: sets the
        !           928: .q d
        !           929: flag to the value
        !           930: .q 1 .
        !           931: This flag can be deleted by using:
        !           932: .(b
        !           933: sccs admin \-dd prog.c
        !           934: .)b
        !           935: The most useful flags are:
        !           936: .nr ii 7n
        !           937: .ip "b"
        !           938: Allow branches to be made using the
        !           939: \-b
        !           940: flag to
        !           941: .i edit .
        !           942: .ip "d\fISID\fP"
        !           943: Default \*I to be used on a
        !           944: .i get
        !           945: or
        !           946: .i edit .
        !           947: If this is just a release number
        !           948: it constrains the
        !           949: version
        !           950: to a particular release only.
        !           951: .ip "i"
        !           952: Give a fatal error
        !           953: if there are no Id Keywords in a file.
        !           954: This is useful to guarantee that a version of the
        !           955: file does not get merged into the s-file
        !           956: that has the Id Keywords inserted as constants
        !           957: instead of internal forms.
        !           958: .ip "y"
        !           959: The
        !           960: .q type
        !           961: of the module.
        !           962: Actually,
        !           963: the value of this flag is unused by \*S
        !           964: except that it replaces the
        !           965: .b %\&Y\&%
        !           966: keyword.
        !           967: .pp
        !           968: The
        !           969: .b \-t\fIfile\fR
        !           970: flag can be used
        !           971: to store descriptive text
        !           972: from
        !           973: .i file .
        !           974: This descriptive text might be the documentation
        !           975: or a design and implementation document.
        !           976: Using the
        !           977: .b \-t
        !           978: flag insures that if the \*S file is sent,
        !           979: the documentation will be sent also.
        !           980: If
        !           981: .i file
        !           982: is omitted,
        !           983: the descriptive text is deleted.
        !           984: To see the descriptive text,
        !           985: use
        !           986: .q "prt \-t" .
        !           987: .pp
        !           988: The
        !           989: .i admin
        !           990: command can be used safely
        !           991: any number of times on files.
        !           992: A file need not be gotten
        !           993: for
        !           994: .i admin
        !           995: to work.
        !           996: .sh 1 "Maintaining Different Versions (Branches)"
        !           997: .pp
        !           998: Sometimes it is convenient
        !           999: to maintain an experimental version of a program
        !          1000: for an extended period
        !          1001: while normal maintenance continues
        !          1002: on the version in production.
        !          1003: This can be done using a
        !          1004: .q branch.
        !          1005: Normally deltas continue in a straight line,
        !          1006: each depending on the delta before.
        !          1007: Creating a branch
        !          1008: .q "forks off"
        !          1009: a version of the program.
        !          1010: .pp
        !          1011: The ability to create branches
        !          1012: must be enabled in advance using:
        !          1013: .(b
        !          1014: sccs admin \-fb prog.c
        !          1015: .)b
        !          1016: The
        !          1017: .b \-fb
        !          1018: flag can be specified when the
        !          1019: \*S file is first created.
        !          1020: .sh 2 "Creating a branch"
        !          1021: .pp
        !          1022: To create a branch, use:
        !          1023: .(b
        !          1024: sccs edit \-b prog.c
        !          1025: .)b
        !          1026: This will create a branch
        !          1027: with (for example) \*I 1.5.1.1.
        !          1028: The deltas for this version
        !          1029: will be numbered
        !          1030: 1.5.1.\c
        !          1031: .i n .
        !          1032: .sh 2 "Getting from a branch"
        !          1033: .pp
        !          1034: Deltas in a branch are normally not included
        !          1035: when you do a get.
        !          1036: To get these versions,
        !          1037: you will have to say:
        !          1038: .(b
        !          1039: sccs get \-r1.5.1 prog.c
        !          1040: .)b
        !          1041: .sh 2 "Merging a branch back into the main trunk"
        !          1042: .pp
        !          1043: At some point you will have finished the experiment,
        !          1044: and if it was successful
        !          1045: you will want to incorporate it into the release version.
        !          1046: But in the meantime
        !          1047: someone may have created a delta 1.6
        !          1048: that you don't want to lose.
        !          1049: The commands:
        !          1050: .(b
        !          1051: sccs edit \-i1.5.1.1\-1.5.1 prog.c
        !          1052: sccs delta prog.c
        !          1053: .)b
        !          1054: will merge all of your changes
        !          1055: into the release system.
        !          1056: If some of the changes conflict,
        !          1057: get will print an error;
        !          1058: the generated result
        !          1059: should be carefully examined
        !          1060: before the delta is made.
        !          1061: .sh 2 "A more detailed example"
        !          1062: .pp
        !          1063: The following technique might be used
        !          1064: to maintain a different version of a program.
        !          1065: First,
        !          1066: create a directory to contain the new version:
        !          1067: .(b
        !          1068: mkdir ../newxyz
        !          1069: cd ../newxyz
        !          1070: .)b
        !          1071: Edit a copy of the program
        !          1072: on a branch:
        !          1073: .(b
        !          1074: sccs \-d../xyz edit prog.c
        !          1075: .)b
        !          1076: When using the old version,
        !          1077: be sure to use the
        !          1078: .b \-b
        !          1079: flag to info, check, tell, and clean
        !          1080: to avoid confusion.
        !          1081: For example, use:
        !          1082: .(b
        !          1083: sccs info \-b
        !          1084: .)b
        !          1085: when in the directory
        !          1086: .q xyz .
        !          1087: .pp
        !          1088: If you want to save a copy of the program
        !          1089: (still on the branch)
        !          1090: back in the s-file,
        !          1091: you can use:
        !          1092: .(b
        !          1093: sccs -d../xyz deledit prog.c
        !          1094: .)b
        !          1095: which will do a delta on the branch
        !          1096: and reedit it for you.
        !          1097: .pp
        !          1098: When the experiment is complete, merge it back into the s-file
        !          1099: using delta:
        !          1100: .(b
        !          1101: sccs -d../xyz delta prog.c
        !          1102: .)b
        !          1103: At this point you must decide whether this version
        !          1104: should be merged back into the trunk
        !          1105: (\c
        !          1106: .i i.e.
        !          1107: the default version),
        !          1108: which may have undergone changes.
        !          1109: If so, it can be merged using the
        !          1110: .b \-i
        !          1111: flag to
        !          1112: .i edit
        !          1113: as described above.
        !          1114: .sh 2 "A warning"
        !          1115: .pp
        !          1116: Branches should be kept to a minimum.
        !          1117: After the first branch from the trunk,
        !          1118: \*I's are assigned rather haphazardly,
        !          1119: and the structure gets complex fast.
        !          1120: .sh 1 "Using \*S with Make"
        !          1121: .pp
        !          1122: \*S and make can be made to work together
        !          1123: with a little care.
        !          1124: A few sample makefiles
        !          1125: for common applications are shown.
        !          1126: .pp
        !          1127: There are a few basic entries that every makefile
        !          1128: ought to have.
        !          1129: These are:
        !          1130: .nr ii 1i
        !          1131: .ip a.out
        !          1132: (or whatever the makefile generates.)
        !          1133: This entry regenerates whatever this makefile is
        !          1134: supposed to regenerate.
        !          1135: If the makefile regenerates many things,
        !          1136: this should be called
        !          1137: .q all
        !          1138: and should in turn
        !          1139: have dependencies on everything
        !          1140: the makefile can generate.
        !          1141: .ip install
        !          1142: Moves the objects to the final
        !          1143: resting place,
        !          1144: doing any special
        !          1145: .i chmod 's
        !          1146: or
        !          1147: .i ranlib 's
        !          1148: as appropriate.
        !          1149: .ip sources
        !          1150: Creates all the source files from \*S files.
        !          1151: .ip clean
        !          1152: Removes all files from the current directory
        !          1153: that can be regenerated from \*S files.
        !          1154: .ip print
        !          1155: Prints the contents of the directory.
        !          1156: .lp
        !          1157: The examples shown below are only partial examples,
        !          1158: and may omit some of these entries
        !          1159: when they are deemed to be obvious.
        !          1160: .pp
        !          1161: The
        !          1162: .i clean
        !          1163: entry should not remove files that can be
        !          1164: regenerated from the \*S files.
        !          1165: It is sufficiently important to have the
        !          1166: source files around at all times
        !          1167: that the only time they should be removed
        !          1168: is when the directory is being mothballed.
        !          1169: To do this, the command:
        !          1170: .(b
        !          1171: sccs clean
        !          1172: .)b
        !          1173: can be used.
        !          1174: This will remove all files for which an s-file
        !          1175: exists,
        !          1176: but which is not being edited.
        !          1177: .sh 2 "To maintain single programs"
        !          1178: .pp
        !          1179: Frequently there are directories with several
        !          1180: largely unrelated programs
        !          1181: (such as simple commands).
        !          1182: These can be put into a single makefile:
        !          1183: .(b
        !          1184: LDFLAGS= \-i \-s
        !          1185: .sp \n(psu
        !          1186: prog: prog.o
        !          1187:        $(CC) $(LDFLAGS) \-o prog prog.o
        !          1188: prog.o: prog.c prog.h
        !          1189: .sp \n(psu
        !          1190: example: example.o
        !          1191:        $(CC) $(LDFLAGS) \-o example example.o
        !          1192: example.o: example.c
        !          1193: .sp \n(psu
        !          1194: \&.DEFAULT:
        !          1195:        sccs get $<
        !          1196: .)b
        !          1197: The trick here
        !          1198: is that the .DEFAULT rule
        !          1199: is called every time
        !          1200: something is needed
        !          1201: that does not exist,
        !          1202: and no other rule exists to make it.
        !          1203: The explicit dependency of the
        !          1204: .b \&.o
        !          1205: file on the
        !          1206: .b \&.c
        !          1207: file is important.
        !          1208: Another way of doing the same thing is:
        !          1209: .(b
        !          1210: SRCS=  prog.c prog.h example.c
        !          1211: .sp \n(psu
        !          1212: LDFLAGS= \-i \-s
        !          1213: .sp \n(psu
        !          1214: prog: prog.o
        !          1215:        $(CC) $(LDFLAGS) \-o prog prog.o
        !          1216: prog.o: prog.h
        !          1217: .sp \n(psu
        !          1218: example: example.o
        !          1219:        $(CC) $(LDFLAGS) \-o example example.o
        !          1220: .sp \n(psu
        !          1221: sources: $(SRCS)
        !          1222: $(SRCS):
        !          1223:        sccs get $@
        !          1224: .)b
        !          1225: There are a couple of advantages to this approach:
        !          1226: (1) the explicit dependencies of the .o on the .c files are
        !          1227: not needed,
        !          1228: (2) there is an entry called "sources" so if you want to get
        !          1229: all the sources you can just say
        !          1230: .q "make sources" ,
        !          1231: and
        !          1232: (3) the makefile is less likely to do confusing things
        !          1233: since it won't try to
        !          1234: .i get
        !          1235: things that do not exist.
        !          1236: .sh 2 "To maintain a library"
        !          1237: .pp
        !          1238: Libraries that are largely static
        !          1239: are best updated using explicit commands,
        !          1240: since
        !          1241: .i make
        !          1242: doesn't know about updating them properly.
        !          1243: However,
        !          1244: libraries that are in the process of being developed
        !          1245: can be handled quite adequately.
        !          1246: The problem is that the .o files
        !          1247: have to be kept out of the library
        !          1248: as well as in the library.
        !          1249: .(b
        !          1250: # configuration information
        !          1251: OBJS=  a.o b.o c.o d.o
        !          1252: SRCS=  a.c b.c c.c d.s x.h y.h z.h
        !          1253: TARG=  /usr/lib
        !          1254: .sp \n(psu
        !          1255: # programs
        !          1256: GET=   sccs get
        !          1257: REL=
        !          1258: AR=    \-ar
        !          1259: RANLIB=        ranlib
        !          1260: .sp \n(psu
        !          1261: lib.a: $(OBJS)
        !          1262:        $(AR) rvu lib.a $(OBJS)
        !          1263:        $(RANLIB) lib.a
        !          1264: .sp \n(psu
        !          1265: install: lib.a
        !          1266:        sccs check
        !          1267:        cp lib.a $(TARG)/lib.a
        !          1268:        $(RANLIB) $(TARG)/lib.a
        !          1269: .sp \n(psu
        !          1270: sources: $(SRCS)
        !          1271: $(SRCS):
        !          1272:        $(GET) $(REL) $@
        !          1273: .sp \n(psu
        !          1274: print: sources
        !          1275:        pr *.h *.[cs]
        !          1276: clean:
        !          1277:        rm \-f *.o
        !          1278:        rm \-f core a.out $(LIB)
        !          1279: .)b
        !          1280: .pp
        !          1281: The
        !          1282: .q "$(REL)"
        !          1283: in the get
        !          1284: can be used to get old versions
        !          1285: easily; for example:
        !          1286: .(b
        !          1287: make b.o REL=\-r1.3
        !          1288: .)b
        !          1289: .pp
        !          1290: The
        !          1291: .i install
        !          1292: entry includes the line
        !          1293: .q "sccs check"
        !          1294: before anything else.
        !          1295: This guarantees that all the s-files
        !          1296: are up to date
        !          1297: (\c
        !          1298: .i i.e. ,
        !          1299: nothing is being edited),
        !          1300: and will abort the
        !          1301: .i make
        !          1302: if this condition is not met.
        !          1303: .sh 2 "To maintain a large program"
        !          1304: .(b
        !          1305: OBJS=  a.o b.o c.o d.o
        !          1306: SRCS=  a.c b.c c.y d.s x.h y.h z.h
        !          1307: .sp \n(psu
        !          1308: GET=   sccs get
        !          1309: REL=
        !          1310: .sp \n(psu
        !          1311: a.out: $(OBJS)
        !          1312:        $(CC) $(LDFLAGS) $(OBJS) $(LIBS)
        !          1313: .sp \n(psu
        !          1314: sources: $(SRCS)
        !          1315: $(SRCS):
        !          1316:        $(GET) $(REL) $@
        !          1317: .)b
        !          1318: (The
        !          1319: .i print
        !          1320: and
        !          1321: .i clean
        !          1322: entries are identical to the previous case.)
        !          1323: This makefile requires copies of the source and object files
        !          1324: to be kept during development.
        !          1325: It is probably also wise to include lines of the form:
        !          1326: .(b
        !          1327: a.o: x.h y.h
        !          1328: b.o: z.h
        !          1329: c.o: x.h y.h z.h
        !          1330: z.h: x.h
        !          1331: .)b
        !          1332: so that modules will be recompiled
        !          1333: if header files change.
        !          1334: .pp
        !          1335: Since
        !          1336: .i make
        !          1337: does not do transitive closure on dependencies,
        !          1338: you may find in some makefiles lines like:
        !          1339: .(b
        !          1340: z.h: x.h
        !          1341:        touch z.h
        !          1342: .)b
        !          1343: This would be used in cases where file z.h
        !          1344: has a line:
        !          1345: .(b
        !          1346: #include "x.h"
        !          1347: .)b
        !          1348: in order to bring the mod date of z.h in line
        !          1349: with the mod date of x.h.
        !          1350: When you have a makefile such as above,
        !          1351: the
        !          1352: .i touch
        !          1353: command can be removed completely;
        !          1354: the equivalent effect will be achieved
        !          1355: by doing an automatic
        !          1356: .i get
        !          1357: on z.h.
        !          1358: .sh 1 "Further Information"
        !          1359: .pp
        !          1360: The
        !          1361: .i "SCCS/PWB User's Manual"
        !          1362: gives a deeper description
        !          1363: of how to use \*S.
        !          1364: Of particular interest
        !          1365: are the numbering of branches,
        !          1366: the l-file,
        !          1367: which gives a description of what deltas were used on a get,
        !          1368: and certain other \*S commands.
        !          1369: .pp
        !          1370: The \*S manual pages
        !          1371: are a good last resort.
        !          1372: These should be read by software managers
        !          1373: and by people who want to know
        !          1374: everything about everything.
        !          1375: .pp
        !          1376: Both of these documents were written without the
        !          1377: .i sccs
        !          1378: front end in mind,
        !          1379: so most of the examples are slightly different from those
        !          1380: in this document.
        !          1381: .bp
        !          1382: .sz 12
        !          1383: .ce
        !          1384: .b "Quick Reference"
        !          1385: .sz
        !          1386: .sp 2
        !          1387: .sh 1 Commands 1
        !          1388: .pp
        !          1389: The following commands should all be preceded with
        !          1390: .q sccs .
        !          1391: This list is not exhaustive;
        !          1392: for more options see
        !          1393: .i "Further Information" .
        !          1394: .ip get 9n
        !          1395: Gets files for compilation (not for editing).
        !          1396: Id keywords are expanded.
        !          1397: .ba 9n
        !          1398: .nr ii 8n
        !          1399: .ip \-r\fI\*I\fP
        !          1400: Version to get.
        !          1401: .ip \-p
        !          1402: Send to standard output rather than to the actual file.
        !          1403: .ip \-k
        !          1404: Don't expand id keywords.
        !          1405: .ip \-i\fIlist\fP
        !          1406: List of deltas to include.
        !          1407: .ip \-x\fIlist\fP
        !          1408: List of deltas to exclude.
        !          1409: .ip \-m
        !          1410: Precede each line with \*I of creating delta.
        !          1411: .ip \-c\fIdate\fP
        !          1412: Don't apply any deltas created after
        !          1413: .i date.
        !          1414: .ba
        !          1415: .ip edit 9n
        !          1416: Gets files for editing.
        !          1417: Id keywords are not expanded.
        !          1418: Should be matched with a
        !          1419: .i delta
        !          1420: command.
        !          1421: .ba 9n
        !          1422: .nr ii 8n
        !          1423: .ip \-r\fI\*I\fP
        !          1424: Same as
        !          1425: .i get .
        !          1426: If
        !          1427: .i \*I
        !          1428: specifies a release that does not yet exist,
        !          1429: the highest numbered delta is retrieved
        !          1430: and the new delta is numbered with
        !          1431: .i \*I .
        !          1432: .ip \-b
        !          1433: Create a branch.
        !          1434: .ip \-i\fIlist\fP
        !          1435: Same as
        !          1436: .i get .
        !          1437: .ip \-x\fIlist\fP
        !          1438: Same as
        !          1439: .i get .
        !          1440: .ba
        !          1441: .ip delta 9n
        !          1442: Merge a file gotten using
        !          1443: .i edit
        !          1444: back into the s-file.
        !          1445: Collect comments about why this delta was made.
        !          1446: .ip unedit 9n
        !          1447: Remove a file that has been edited previously
        !          1448: without merging the changes into the s-file.
        !          1449: .ip prt 9n
        !          1450: Produce a report of changes.
        !          1451: .ba 9n
        !          1452: .nr ii 5n
        !          1453: .ip \-t
        !          1454: Print the descriptive text.
        !          1455: .ip \-e
        !          1456: Print (nearly) everything.
        !          1457: .ba
        !          1458: .ip info 9n
        !          1459: Give a list of all files being edited.
        !          1460: .ba 9n
        !          1461: .nr ii 5n
        !          1462: .ip \-b
        !          1463: Ignore branches.
        !          1464: .ip \-u[\fIuser\fP]
        !          1465: Ignore files not being edited by
        !          1466: .i user .
        !          1467: .ba
        !          1468: .ip check 9n
        !          1469: Same as
        !          1470: .i info ,
        !          1471: except that nothing is printed if nothing is being edited
        !          1472: and exit status is returned.
        !          1473: .ip tell 9n
        !          1474: Same as
        !          1475: .i info ,
        !          1476: except that one line is produced per file being edited containing
        !          1477: only the file name.
        !          1478: .ip clean 9n
        !          1479: Remove all files that can be regenerated from the
        !          1480: s-file.
        !          1481: .ip what 9n
        !          1482: Find and print id keywords.
        !          1483: .ip admin 9n
        !          1484: Create or set parameters on s-files.
        !          1485: .ba 9n
        !          1486: .nr ii 8n
        !          1487: .ip \-i\fIfile\fP
        !          1488: Create, using
        !          1489: .i file
        !          1490: as the initial contents.
        !          1491: .ip \-z
        !          1492: Rebuild the checksum in case
        !          1493: the file has been trashed.
        !          1494: .ip \-f\fIflag\fP
        !          1495: Turn on the
        !          1496: .i flag .
        !          1497: .ip \-d\fIflag\fP
        !          1498: Turn off (delete) the
        !          1499: .i flag .
        !          1500: .ip \-t\fIfile\fP
        !          1501: Replace the descriptive text
        !          1502: in the s-file with the contents of
        !          1503: .i file .
        !          1504: If
        !          1505: .i file
        !          1506: is omitted,
        !          1507: the text is deleted.
        !          1508: Useful for storing documentation
        !          1509: or
        !          1510: .q "design & implementation"
        !          1511: documents to insure they get distributed with the
        !          1512: s-file.
        !          1513: .lp
        !          1514: Useful flags are:
        !          1515: .ip b
        !          1516: Allow branches to be made using the \-b flag to
        !          1517: .i edit.
        !          1518: .ip d\fI\*I\fP
        !          1519: Default \*I to be used
        !          1520: on a
        !          1521: .i get
        !          1522: or
        !          1523: .i edit .
        !          1524: .ip i
        !          1525: Cause
        !          1526: .q "No Id Keywords"
        !          1527: error message
        !          1528: to be a fatal error rather than a warning.
        !          1529: .ip t
        !          1530: The module
        !          1531: .q type ;
        !          1532: the value of this flag replaces the
        !          1533: .b %\&Y\&%
        !          1534: keyword.
        !          1535: .ba
        !          1536: .ip fix 9n
        !          1537: Remove a delta and reedit it.
        !          1538: .ip delget 9n
        !          1539: Do a
        !          1540: .i delta
        !          1541: followed by a
        !          1542: .i get .
        !          1543: .ip deledit 9n
        !          1544: Do a
        !          1545: .i delta
        !          1546: followed by an
        !          1547: .i edit .
        !          1548: .sh 1 "Id Keywords"
        !          1549: .nr ii 6n
        !          1550: .ip "%\&Z\&%"
        !          1551: Expands to
        !          1552: .q @\&(#)
        !          1553: for the
        !          1554: .i what
        !          1555: command to find.
        !          1556: .ip "%\&M\&%"
        !          1557: The current module name,
        !          1558: .i e.g.,
        !          1559: .q prog.c .
        !          1560: .ip "%\&I\&%"
        !          1561: The highest \*I applied.
        !          1562: .ip "%\&W\&%"
        !          1563: A shorthand for
        !          1564: .q "%\&Z\&%%\&M\&% <tab> %\&I\&%" .
        !          1565: .ip "%\&G\&%"
        !          1566: The date of the delta
        !          1567: corresponding to the
        !          1568: .q "%\&I\&%"
        !          1569: keyword.
        !          1570: .ip "%\&R\&%"
        !          1571: The current release number,
        !          1572: .i i.e. ,
        !          1573: the first component of the
        !          1574: .q "%\&I\&%"
        !          1575: keyword.
        !          1576: .ip "%\&Y\&%"
        !          1577: Replaced by the value of the
        !          1578: .b t
        !          1579: flag
        !          1580: (set by
        !          1581: .i admin ).

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.