home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume1 / checkin < prev    next >
Internet Message Format  |  1986-11-30  |  6KB

  1. From: decvax!tektronix!ogcvax!fosterm
  2. Date: Sat, 11 May 85 18:12:17 pdt
  3. Subject: checkin: editor interface for RCS logs
  4.  
  5. This tool provides 
  6.     -- an editor interface for creating RCS log messages.
  7.     -- automatic RCS checkin using just-created logs.
  8.  
  9. If you are a user of RCS, and find yourself frequently using `rcsdiff`
  10. to create a log messages, `checkin` may be useful.  Additionally, checkin
  11. retains a log message, once created, if, for some reason the RCS checkin 
  12. procedure `ci` fails.
  13.  
  14. The man page and csh script, in shar format, are included below.
  15.  
  16. `checkin` has been in use by several users on our Vaxen for a few months.
  17. We are running 4.2bsd.
  18.  
  19. --
  20. Mark Foster
  21. Oregon Graduate Center
  22.  
  23. usenet: {allegra,tektronix,reed}!ogcvax!fosterm
  24. csnet:  fosterm @ oregon-grad
  25.  
  26. =======cut here======
  27. # This is a shell archive.  Remove anything before this line,
  28. # then unpack it by saving it in a file and typing "sh file".
  29. #
  30. # Wrapped by ogcvax!fosterm on Sat May 11 17:54:33 PDT 1985
  31. # Contents:  checkin.1 checkin.csh
  32.  
  33. echo x - checkin.1
  34. sed 's/^@//' > "checkin.1" <<'@//E*O*F checkin.1//'
  35. @.TH checkin 1L "OGC 3/11/85"
  36. @.SH NAME
  37. checkin \- editor interface to rcs `ci`
  38. @.SH SYNOPSIS
  39. @.B checkin
  40. @.I "[file1 file2 ...]"
  41. @.SH DESCRIPTION
  42. @.LP
  43. \fBcheckin\fR provides for the creation of rcs logs to be used
  44. in rcs ci(1) procedures.
  45. For each file specified, \fBcheckin\fR does an rcsdiff(1) on the
  46. file and the latest checked-in version of that file.
  47. If a difference exists, EDITOR is invoked on a temporary file
  48. containing the diff.
  49. The user creates a log based on the diff, saves the temporary file,
  50. and exits the editor.
  51. The query:
  52. @.IP 
  53. \fLWant to checkin "file" with log? (y)\fR
  54. @.LP
  55. Allows the user to verify the checkin with the just-created log.
  56. If checkin is to proceed, reply with one of \fI<CR>, y, yes\fR.
  57. If a checkin with the just-created log is not desired, reply with \fIn\fR.
  58. @.LP
  59. The actual `ci` process for the verified logs starts once all logs
  60. for all files have been created.
  61. @.LP
  62. checkin examines the environment variables EDITOR and CHECKIN.
  63. If EDITOR is set, it specifies the editor to invoke on the temporary
  64. file; `vi` is used by default.
  65. If CHECKIN is set, it specifies the `ci` options to use during
  66. the checkin; "-l" (the letter ell) is used by default, this
  67. checks the file back out locked.
  68. @.SH FILES
  69. /tmp/CI.*.$$  -- temporary files, removed on completion 
  70. @.br
  71. _log.*.$$ -- saved log files if `ci` error.
  72. @.SH AUTHOR
  73. Mark Foster (Oregon Graduate Center, Beaverton, OR)
  74. .br
  75. usenet: {allegra,tektronix,reed}!ogcvax!fosterm
  76. .br
  77. csnet:  fosterm @ oregon-grad
  78. @.SH "SEE ALSO"
  79. ci(1), rcsdiff(1), csh(1)
  80. @.SH DIAGNOSTICS
  81. @.LP
  82. If there is an error on the rcsdiff of a file (i.e.,  the file has
  83. not been checked in before, so this is the initial version), the
  84. error message is used for the edit buffer, rather than the diff.
  85. @.LP
  86. If the `ci` for a file fails, the log is saved in a "unique" file
  87. in the current directory, using the source filename as part of the log 
  88. filename. 
  89. @.SH BUGS
  90. @.LP
  91. This process relies on a fast-starting, fast-exiting editor to be 
  92. interactively useful.
  93. @.SH NOTES
  94. @.LP
  95. Users of vi(1) may find a macro "kill to end of buffer" useful to
  96. delete the diff once the log is created.  Include in ~/.exrc the line
  97. @.IP
  98. map K :+1,$ d ^V^M
  99. @//E*O*F checkin.1//
  100. chmod u=rw,g=r,o=r checkin.1
  101.  
  102. echo x - checkin.csh
  103. sed 's/^@//' > "checkin.csh" <<'@//E*O*F checkin.csh//'
  104. #! /bin/csh -f
  105. # checkin  -- prompt user to create log files, then do `ci -l` for the
  106. #          files that have a log.
  107. #
  108. # 03/85 mhfoster, ogc
  109. #
  110. # usage:
  111. #    checkin [file1 file2 ...]
  112. #
  113. # For each file specified on the command line:
  114. #
  115. # If there was a difference in the checked-out version
  116. # and the latest checked-in version OR the rcsdiff failed,
  117. # put the user into their editor, editing the diff (or fail 
  118. # message).  This allows a user to peruse the diff, and create 
  119. # a comment based on such.  (Alternatively, a separate message 
  120. # could be defined and included while in the editor.)
  121. #
  122. # Once a group of log files has been created, the source files are
  123. # checked-in using the defined log files.
  124. #
  125. # Notes:
  126. #  If environment variable CHECKIN is set, it specifies `ci` options;
  127. #  default is -l for "check back out locked".
  128. #  If environment variable EDITOR is set, it specifies the editor to use;
  129. #  default is `vi`.
  130. #
  131. onintr quiter
  132.  
  133. set cmd = $0
  134. set cmd = $cmd:t
  135. if ($#argv < 1) then
  136.     echo "usage: $cmd file1 file2 ..."
  137.     exit
  138. endif
  139.  
  140. set cilist = ""
  141. set tmpdir = "/tmp"
  142. set versfile = $tmpdir/CI.v.$$
  143. set diffile = $tmpdir/CI.d.$$
  144. if ($?EDITOR) then
  145.     set editor = $EDITOR
  146. else
  147.     set editor = "vi"
  148. endif
  149. if ($?CHECKIN) then
  150.     set ciopts = "$CHECKIN"
  151. else
  152.     set ciopts = "-l"
  153. endif
  154.  
  155. foreach f ($*)
  156.     if (-d "$f") then
  157.         echo "Cannot checkin: $f  is a directory"
  158.     else
  159.         echo "Checking for differences in $f"
  160.         set tmplogf = $tmpdir/CI.d.${f:t}.$$
  161.         set loclogf = _log.${f:t}.$$
  162.         (rcsdiff $f > $diffile) |& tee $versfile
  163.  
  164.         set diffstat = "$status"
  165.         if ( !(-z $diffile) || ($diffstat)) then
  166.             cat $versfile $diffile > $tmplogf
  167.             if ($diffstat) then
  168. echo "Enter Description (this is NOT the log message)" >> $tmplogf
  169.             endif
  170.             $editor $tmplogf
  171.             echo -n "Want to checkin $f with the log? (y) "
  172.             set r = "$<"
  173.             if (($r =~ "") || ($r =~ y*)) then
  174.                 mv $tmplogf $loclogf
  175.                 set cilist = "$cilist $f"
  176.             endif
  177.         endif
  178.     endif
  179. end
  180. if ("$cilist" != "") then
  181.     echo " "
  182.     echo "Performing checkin of:"
  183.     echo "$cilist"
  184.     echo " "
  185. endif
  186. # this portion is separated from the above loop so the user doesn't have
  187. # to interactively wait for the actual rcs checkin (ci) process to finish
  188. foreach f ($cilist)
  189.     set loclogf = _log.${f:t}.$$
  190.     if (! (-z $f)) then
  191.         ci $ciopts $f < $loclogf
  192.         if (! $status) then
  193.             rm $loclogf
  194.         else
  195.             "$cmd, ci error, log saved: $loclogf"
  196.         endif
  197.     else
  198.         "$cmd error: $f does not exist (cannot checkin)"
  199.     endif
  200. end
  201. rm $tmpdir/CI*.$$
  202. exit
  203.  
  204. quiter:
  205. echo "$cmd, Abort."
  206. rm $tmpdir/CI*.$$
  207. exit
  208. @//E*O*F checkin.csh//
  209. chmod u=rwx,g=rx,o=rx checkin.csh
  210.  
  211. echo Inspecting for damage in transit...
  212. temp=/tmp/shar$$; dtemp=/tmp/.shar$$
  213. trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
  214. cat > $temp <<\!!!
  215.       60     367    2067 checkin.1
  216.      104     442    2511 checkin.csh
  217.      164     809    4578 total
  218. !!!
  219. wc  checkin.1 checkin.csh | sed 's=[^ ]*/==' | diff -b $temp - >$dtemp
  220. if [ -s $dtemp ]
  221. then echo "Ouch [diff of wc output]:" ; cat $dtemp
  222. else echo "No problems found."
  223. fi
  224. exit 0
  225.  
  226.