<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=SVN</id>
	<title>SVN - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=SVN"/>
	<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=SVN&amp;action=history"/>
	<updated>2026-04-28T23:43:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://pickwiki.org/index.php?title=SVN&amp;diff=2227&amp;oldid=prev</id>
		<title>Conversion script: link fix</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=SVN&amp;diff=2227&amp;oldid=prev"/>
		<updated>2015-02-26T23:48:56Z</updated>

		<summary type="html">&lt;p&gt;link fix&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;BasicSource&amp;gt;&amp;gt;SvnWrapper&amp;gt;&amp;gt;SVN&lt;br /&gt;
&lt;br /&gt;
SVN Source code; once all source is compiled and cataloged, &amp;#039;SVN -H&amp;#039; will show usage.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;PRE&amp;gt;&lt;br /&gt;
* ===================================== SVN =============================================&lt;br /&gt;
* @TCL: SVN wrapper, to be run on the UV prompt&lt;br /&gt;
* =======================================================================================&lt;br /&gt;
* 04.Oct.2013 james: Check /released/ folder too when doing STATUS&lt;br /&gt;
* 20.Dec.2012 james: Add CATALOG&lt;br /&gt;
* 07.Sep.2012 james: New &amp;#039;COMMENTS&amp;#039; option to see the latest comment for each program.&lt;br /&gt;
* 12.May.2011 james: Handle &amp;#039;DICT/&amp;#039; in release (flist) files.&lt;br /&gt;
* 10.Aug.2010 james: Add &amp;#039;COMPILE&amp;#039; option to check a release before it goes out.&lt;br /&gt;
* 07.Oct.2009 james: Add &amp;#039;UPDATE&amp;#039;; only add -m if &amp;#039;[[RequiresComment]]&amp;#039;.. IS THIS OK !?&lt;br /&gt;
* 30.Jun.2009 james: Add &amp;#039;[[CheckReleaseStatus]]&amp;#039; to make sure nothing was committed after&lt;br /&gt;
*                    the Release&amp;#039;s Revision Number.&lt;br /&gt;
* 17.Nov.2008 chrisg: Added support for CLEANUP command&lt;br /&gt;
* 12.Jul.2008 chrisg: Added support for SVN PROPSET command&lt;br /&gt;
* 22.Apr.2008 manoj: Fixed a bug that limit the length of a new comment to the comment on &lt;br /&gt;
*                    line 4&lt;br /&gt;
* 11.Apr.2008 jim: Use the line 4 comment for the [[CommitComment]] ONLY IF there&amp;#039;s one item.&lt;br /&gt;
* 11.Feb.2008 jim: [[RequiresFileList]] = @FALSE for DELETE and STATUS; so those still work&lt;br /&gt;
*                  if files are in SVN but not in UV.&lt;br /&gt;
* 14.Jan.2008 manoj: Added DELETE&lt;br /&gt;
* 10.Jan.2008 manoj: Added revert&lt;br /&gt;
* 02.Jan.2008 jim: Restructure to improve error handling, etc.&lt;br /&gt;
* 31.Aug.2007 manoj: Created&lt;br /&gt;
* =======================================================================================&lt;br /&gt;
* $Id: SVN 44131 2013-11-12 02:57:36Z jim $&lt;br /&gt;
* =======================================================================================&lt;br /&gt;
*&lt;br /&gt;
* This invokes the svn command, with the proper svn URL and REAL.USER name&lt;br /&gt;
*&lt;br /&gt;
* Ex:&lt;br /&gt;
*&lt;br /&gt;
*  svn commit svn+ssh://manoj@svn.docmagic.com/opt/svn/dsi[[/Database/Universe/trunk/dsisrc]]&lt;br /&gt;
*&lt;br /&gt;
* Trac Reference: http://trac/dsi/wiki/UniverseInSvn&lt;br /&gt;
*&lt;br /&gt;
* =======================================================================================&lt;br /&gt;
&lt;br /&gt;
  $include RMS.BP EQU.CMDLINE&lt;br /&gt;
&lt;br /&gt;
  equate SVN$CMD          to &amp;quot;/usr/bin/svn&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  deffun GET.REALUSER( Err )&lt;br /&gt;
  deffun OPEN.FILE( FILENAME, FLAGS, FILEVAR, ERR.MSG )&lt;br /&gt;
&lt;br /&gt;
  username = GET.REALUSER( Err ) ; if Err # &amp;#039;&amp;#039; then stopm Err  ;*  Err not yet implemented anyway&lt;br /&gt;
  logFile  = &amp;quot;log[[/SVN]].LOG&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  gosub [[ParseCommandLine]]&lt;br /&gt;
  gosub [[PrepareSvnCommand]]&lt;br /&gt;
&lt;br /&gt;
  if Err # &amp;#039;&amp;#039; then&lt;br /&gt;
    gosub [[DisplayErrors]]&lt;br /&gt;
  end else&lt;br /&gt;
&lt;br /&gt;
    gosub [[ExecuteSvnCommand]]&lt;br /&gt;
    gosub [[ExecutePostSvnCommands]]&lt;br /&gt;
&lt;br /&gt;
  end&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
* =======================================================================================&lt;br /&gt;
&lt;br /&gt;
[[PrepareSvnCommand]]:&lt;br /&gt;
  [[RequiresFileList]] = @FALSE&lt;br /&gt;
  [[RequiresComment]]  = @FALSE&lt;br /&gt;
  * Also add svnOp below (in the [[ShowHelp]] )&lt;br /&gt;
  begin case&lt;br /&gt;
    case svnOp = &amp;quot;COMMENTS&amp;quot; ; [[RequiresFileList]] = @TRUE  ;*  NOT REALLY AN SVN COMMAND BUT IT&amp;#039;S HANDY !&lt;br /&gt;
    case svnOp = &amp;quot;BASIC&amp;quot;    ; [[RequiresFileList]] = @TRUE  ;*  NOT REALLY AN SVN COMMAND BUT IT&amp;#039;S HANDY !&lt;br /&gt;
    case svnOp = &amp;quot;COMPILE&amp;quot;  ; [[RequiresFileList]] = @TRUE  ;*  NOT REALLY AN SVN COMMAND BUT IT&amp;#039;S HANDY !&lt;br /&gt;
    case svnOp = &amp;quot;CATALOG&amp;quot;  ; [[RequiresFileList]] = @TRUE  ;*  NOT REALLY AN SVN COMMAND BUT IT&amp;#039;S HANDY !&lt;br /&gt;
    case svnOp = &amp;quot;COMMIT&amp;quot;   ; [[RequiresFileList]] = @TRUE  ; [[RequiresComment]] = @TRUE&lt;br /&gt;
    case svnOp = &amp;quot;ADD&amp;quot;      ; [[RequiresFileList]] = @TRUE&lt;br /&gt;
    case svnOp = &amp;quot;UPDATE&amp;quot;   ; [[RequiresFileList]] = @TRUE  ;*  Is this dangerous !? Just for messed up SVN !?!&lt;br /&gt;
    case svnOp = &amp;quot;DELETE&amp;quot;   ; [[RequiresFileList]] = @FALSE ;*  Allow delete from SVN with no UV item ?&lt;br /&gt;
    case svnOp = &amp;quot;DIFF&amp;quot;     ; [[RequiresFileList]] = @TRUE&lt;br /&gt;
    case svnOp = &amp;quot;INFO&amp;quot;     ; [[RequiresFileList]] = @TRUE&lt;br /&gt;
    case svnOp = &amp;quot;LISTS&amp;quot;    ; [[RequiresFileList]] = @TRUE  ;*  NOT REALLY AN SVN COMMAND BUT IT&amp;#039;S HANDY !&lt;br /&gt;
    case svnOp = &amp;quot;LOG&amp;quot;      ; [[RequiresFileList]] = @TRUE&lt;br /&gt;
    case svnOp = &amp;quot;REVERT&amp;quot;   ; [[RequiresFileList]] = @TRUE&lt;br /&gt;
    case svnOp = &amp;quot;PROPSET&amp;quot;  ; [[RequiresFileList]] = @TRUE&lt;br /&gt;
    &lt;br /&gt;
      if [[PropertyNameAndValue]] = &amp;#039;&amp;#039; then &lt;br /&gt;
        Err = svnOp:&amp;quot; requires -P, see help&amp;quot;; return&lt;br /&gt;
      end else&lt;br /&gt;
        [[PropertyNameAndValue]] = EREPLACE([[PropertyNameAndValue]], &amp;quot;=&amp;quot;, &amp;quot; &amp;quot;)&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
    case svnOp = &amp;quot;STATUS&amp;quot;  ; * [[FileList]] is NOT required; but use it if it&amp;#039;s there.&lt;br /&gt;
&lt;br /&gt;
      if [[FileList]] = &amp;#039;&amp;#039; then&lt;br /&gt;
        if [[FileName]] # &amp;#039;&amp;#039; then&lt;br /&gt;
          [[FileList]] = [[FileName]]&lt;br /&gt;
        end else&lt;br /&gt;
          [[FileList]] = &amp;quot;DSI.BP DA.BP WEB.BP RMS.BP&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
      end else Verbose = @TRUE ;*  Force Verbose if you list specific items.&lt;br /&gt;
      if Verbose then [[FileList]] := &amp;quot; -v&amp;quot;  ;*  Always VERBOSE (show lines NOT changed too...)&lt;br /&gt;
      [[CommitComment]] = &amp;#039;&amp;#039;   ;*  May have been set from &amp;#039;[[ReadRelease]]&amp;#039; ?&lt;br /&gt;
      &lt;br /&gt;
    case svnOp = &amp;quot;CLEANUP&amp;quot; ; [[FileList]] = [[FileName]]&lt;br /&gt;
    case svnOp = &amp;quot;HELP&amp;quot;    ; [[FileList]] = downcase([[FileName]]) ;*  NO options required; but may have 2nd parameter&lt;br /&gt;
    case 1&lt;br /&gt;
      Err = &amp;quot;Invalid SVN Operation &amp;#039;&amp;quot;:svnOp&lt;br /&gt;
  end case&lt;br /&gt;
&lt;br /&gt;
  if [[FileErrs]] # &amp;#039;&amp;#039; then crt [[FileErrs]] ; input j&lt;br /&gt;
&lt;br /&gt;
  if [[RequiresFileList]] then&lt;br /&gt;
    Err = [[FileErrs]] ; if Err # &amp;#039;&amp;#039; then return&lt;br /&gt;
    if [[FileList]] = &amp;#039;&amp;#039; then Err = svnOp:&amp;quot; requires a File and Item name&amp;quot; ; return&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  if [[RequiresComment]] and [[CommitComment]] = &amp;#039;&amp;#039; then&lt;br /&gt;
    if CMD.NUM.ARGS = 3 then  ;*  Only 1 file to commit: use it&amp;#039;s comment (Tacky ?) :&lt;br /&gt;
      [[FileName]] = CMD.ARG.S&amp;lt;1, 2&amp;gt;&lt;br /&gt;
      [[ItemID]]   = CMD.ARG.S&amp;lt;1, 3&amp;gt;&lt;br /&gt;
      open [[FileName]] to File then&lt;br /&gt;
        read [[ProgramItem]] from File, [[ItemID]] then&lt;br /&gt;
          [[CommentLine]] = [[ProgramItem]]&amp;lt;4&amp;gt;&lt;br /&gt;
          [[CommentUser]] = field( [[CommentLine]], &amp;#039; &amp;#039;, 3 )&lt;br /&gt;
          [[CommitComment]] = [[CommentLine]][ col2() + 1, 999 ]&lt;br /&gt;
        end else [[CommitComment]] = &amp;quot;&amp;quot;  ;*  Why would this be ? Throw an error ?&lt;br /&gt;
      end&lt;br /&gt;
    end&lt;br /&gt;
    gosub [[GetCommitComment]]&lt;br /&gt;
    if [[CommitComment]] = &amp;quot;&amp;quot; then Err = &amp;quot;Cannot &amp;quot;:svnOp:&amp;quot; with an empty comment&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
[[ExecuteSvnCommand]]:&lt;br /&gt;
  *  Force the username by passing to the &amp;quot;sudo&amp;quot; command below&lt;br /&gt;
  svnCommand = SVN$CMD:&amp;#039; &amp;#039;:downcase(svnOp):&amp;#039; &amp;#039;:[[PropertyNameAndValue]]:&amp;#039; &amp;#039;:[[FileList]]&lt;br /&gt;
  if [[RequiresComment]] and [[CommitComment]] # &amp;#039;&amp;#039; then&lt;br /&gt;
    svnCommand := &amp;#039; -m &amp;quot;&amp;#039;:[[CommitComment]]:&amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  begin case&lt;br /&gt;
    case svnOp = &amp;quot;COMMENTS&amp;quot;  ;*  Special hack: just to use the code that reads the Release&lt;br /&gt;
&lt;br /&gt;
      crt&lt;br /&gt;
      crt &amp;quot; (comments are always from the CURRENT version...)&amp;quot;&lt;br /&gt;
      crt&lt;br /&gt;
      [[FileList]] = trim( [[FileList]] )&lt;br /&gt;
      [[NumFiles]] = dcount([[FileList]], &amp;#039; &amp;#039;)&lt;br /&gt;
&lt;br /&gt;
      [[LongestName]] = 0&lt;br /&gt;
      for N.F = 1 to [[NumFiles]]&lt;br /&gt;
        [[OneProgram]] = field( [[FileList]], &amp;#039; &amp;#039;, N.F )&lt;br /&gt;
        if len([[OneProgram]]) &amp;gt; [[LongestName]] then [[LongestName]] = len([[OneProgram]])&lt;br /&gt;
      next N.F&lt;br /&gt;
      [[NameFmt]] = &amp;#039;L#&amp;#039;:[[LongestName]]&lt;br /&gt;
&lt;br /&gt;
      for N.F = 1 to [[NumFiles]]&lt;br /&gt;
        [[OneProgram]] = field( [[FileList]], &amp;#039; &amp;#039;, N.F )&lt;br /&gt;
        [[ProgramFile]] = field( [[OneProgram]], &amp;#039;/&amp;#039;, 1)&lt;br /&gt;
        [[ProgramID]]   = field( [[OneProgram]], &amp;#039;/&amp;#039;, 2)&lt;br /&gt;
        if not( OPEN.FILE( [[ProgramFile]], &amp;#039;&amp;#039;, PROGRAM.FILE,  Err ) ) then stopm Err&lt;br /&gt;
        read [[ProgramCode]] from PROGRAM.FILE, [[ProgramID]] else crt &amp;quot;No item named:  &amp;quot;:[[ProgramID]] ; return&lt;br /&gt;
        crt [[OneProgram]] [[NameFmt]]:&amp;#039; &amp;#039;:[[ProgramCode]]&amp;lt;4&amp;gt;&lt;br /&gt;
      next N.F&lt;br /&gt;
      crt&lt;br /&gt;
&lt;br /&gt;
    *  Special hack: just to use the code that reads the Release&lt;br /&gt;
    case svnOp = &amp;quot;COMPILE&amp;quot; or svnOp = &amp;quot;BASIC&amp;quot; or svnOp = &amp;quot;CATALOG&amp;quot;&lt;br /&gt;
&lt;br /&gt;
      [[FileList]] = trim( [[FileList]] )&lt;br /&gt;
      [[NumFiles]] = dcount([[FileList]], &amp;#039; &amp;#039;)&lt;br /&gt;
      for N.F = 1 to [[NumFiles]]&lt;br /&gt;
        [[OneProgram]] = field( [[FileList]], &amp;#039; &amp;#039;, N.F )&lt;br /&gt;
        convert &amp;#039;/&amp;#039; to &amp;#039; &amp;#039; in [[OneProgram]]&lt;br /&gt;
        if svnOp = &amp;quot;COMPILE&amp;quot; or svnOp = &amp;quot;BASIC&amp;quot; then [[TclCommand]] = &amp;quot;BASIC&amp;quot; else [[TclCommand]] = &amp;quot;CATALOG&amp;quot;&lt;br /&gt;
        execute [[TclCommand]]:&amp;quot; &amp;quot;:[[OneProgram]]&lt;br /&gt;
      next N.F&lt;br /&gt;
&lt;br /&gt;
    case svnOp = &amp;quot;LISTS&amp;quot;  ;*  Special hack: just to use the code that reads the Release&lt;br /&gt;
&lt;br /&gt;
      gosub [[SaveProgramLists]]&lt;br /&gt;
&lt;br /&gt;
    case 1&lt;br /&gt;
&lt;br /&gt;
      svnScript  = &amp;quot;(cd /u/dsisrc; sudo -u &amp;quot;:username:&amp;quot; &amp;quot;:svnCommand:&amp;quot; )&amp;quot;&lt;br /&gt;
      call APPEND.UNIX.LOG (svnScript, logFile, aulErr)&lt;br /&gt;
&lt;br /&gt;
      if [[DisplayCmd]] then&lt;br /&gt;
        crt svnScript ; crt&lt;br /&gt;
        input j ; j = upcase(j)&lt;br /&gt;
        if j = &amp;#039;X&amp;#039; or j = &amp;#039;Q&amp;#039; then stop&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
      if not([[NoExecute]]) then&lt;br /&gt;
        execute &amp;quot;SH -c \&amp;quot;:svnScript:&amp;quot;\&amp;quot; capturing [[SvnResponse]]&lt;br /&gt;
      end&lt;br /&gt;
      [[OutputResponse]] = [[SvnResponse]]&lt;br /&gt;
      convert @FM to char(10) in [[OutputResponse]]&lt;br /&gt;
      crt [[OutputResponse]]&lt;br /&gt;
&lt;br /&gt;
  end case&lt;br /&gt;
&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
[[ExecutePostSvnCommands]]:&lt;br /&gt;
  *  Now do anything special we need &amp;#039;post SVN&amp;#039; :&lt;br /&gt;
  begin case&lt;br /&gt;
&lt;br /&gt;
    case svnOp = &amp;quot;DIFF&amp;quot;&lt;br /&gt;
      if [[SvnResponse]] = &amp;#039;&amp;#039; then crt &amp;quot;The current version does not differ from what&amp;#039;s checked in.&amp;quot; ; crt&lt;br /&gt;
&lt;br /&gt;
    case svnOp = &amp;quot;COMMIT&amp;quot;&lt;br /&gt;
      if [[ReleaseNumber]] # &amp;#039;&amp;#039; then  ;*  Separate &amp;#039;if&amp;#039; because [[SvnLine]] will only be defined for -R :&lt;br /&gt;
        if [[SvnLine]] # 0 then       ;*  Release needs the SVN number:&lt;br /&gt;
          gosub [[AddReleaseNumber]]&lt;br /&gt;
        end&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
    case svnOp = &amp;quot;STATUS&amp;quot;&lt;br /&gt;
      if [[ReleaseNumber]] # &amp;#039;&amp;#039; then  ;*  [[SvnLine]] will only be defined for -R :&lt;br /&gt;
        gosub [[CheckReleaseStatus]]&lt;br /&gt;
      end&lt;br /&gt;
&lt;br /&gt;
  end case&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
[[SaveProgramLists]]:&lt;br /&gt;
  if not(OPEN.FILE(&amp;quot;&amp;amp;SAVEDLISTS&amp;amp;&amp;quot;, &amp;quot;&amp;quot;, SAVEDLISTS.FILE, Err)) then stopm Err&lt;br /&gt;
  [[FileList]] = trim( [[FileList]] )&lt;br /&gt;
  [[NumFiles]] = dcount([[FileList]], &amp;#039; &amp;#039;)&lt;br /&gt;
  F.P = 0 ; [[CurrentFile]] = &amp;#039;~&amp;#039; ; [[ItemList]] = &amp;#039;&amp;#039;&lt;br /&gt;
  loop&lt;br /&gt;
    F.P += 1&lt;br /&gt;
   while F.P &amp;lt;= [[NumFiles]] do&lt;br /&gt;
    [[OneProgram]] = field( [[FileList]], &amp;#039; &amp;#039;, F.P )&lt;br /&gt;
    [[ProgramFile]] = field( [[OneProgram]], &amp;#039;/&amp;#039;, 1 )&lt;br /&gt;
    [[ProgramItem]] = field( [[OneProgram]], &amp;#039;/&amp;#039;, 2 )&lt;br /&gt;
    if [[ProgramFile]] # [[CurrentFile]] then&lt;br /&gt;
      gosub [[SaveLastList]]&lt;br /&gt;
      [[CurrentFile]] = [[ProgramFile]]&lt;br /&gt;
    end&lt;br /&gt;
    [[ItemList]]&amp;lt;-1&amp;gt; = [[ProgramItem]]&lt;br /&gt;
  repeat&lt;br /&gt;
  gosub [[SaveLastList]]&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
[[SaveLastList]]:&lt;br /&gt;
  if [[CurrentFile]] # &amp;#039;~&amp;#039; then&lt;br /&gt;
    [[ListName]] = [[CurrentFile]]:&amp;quot;_&amp;quot;:[[ReleaseNumber]]&lt;br /&gt;
    crt &amp;quot;Writing list &amp;quot;:[[ListName]]&lt;br /&gt;
    write [[ItemList]] on SAVEDLISTS.FILE, [[ListName]]&lt;br /&gt;
    [[ItemList]] = &amp;#039;&amp;#039;&lt;br /&gt;
  end&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
* =======================================================================================&lt;br /&gt;
&lt;br /&gt;
[[AddReleaseNumber]]:&lt;br /&gt;
  [[RevisionNumber]] = &amp;#039;&amp;#039;&lt;br /&gt;
  [[NumResponseLines]] = dcount( [[SvnResponse]], @FM )&lt;br /&gt;
  for N.R.L = [[NumResponseLines]] to 1 step -1  ;*  Go backward since it&amp;#039;s at the end:&lt;br /&gt;
    [[ResponseLn]] = [[SvnResponse]]&amp;lt;N.R.L&amp;gt;&lt;br /&gt;
    if [[ResponseLn]][1,18] = &amp;quot;Committed revision&amp;quot; then&lt;br /&gt;
      [[RevisionNumber]] = trim( field([[ResponseLn]][19,999], &amp;#039;.&amp;#039;, 1) )&lt;br /&gt;
    end&lt;br /&gt;
  next N.R.L&lt;br /&gt;
  if [[RevisionNumber]] # &amp;#039;&amp;#039; then&lt;br /&gt;
    [[ReleaseText]]&amp;lt;SvnLine&amp;gt; = &amp;quot;SVN: &amp;quot;:[[RevisionNumber]]&lt;br /&gt;
    convert @FM to char(10) in [[ReleaseText]]&lt;br /&gt;
    *  Was &amp;quot;/home/release/&amp;quot;:[[ReleaseNumber]]:&amp;quot;/flist&amp;quot; but maybe in &amp;#039;released&amp;#039; now?:&lt;br /&gt;
    call WRITE.UNIX( [[ReleaseText]], flistPath, Err)&lt;br /&gt;
  end&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
*  SVN STATUS -R xxxx : Check if the SVN # of each item is &amp;gt; the Release&amp;#039;s #&lt;br /&gt;
&lt;br /&gt;
[[CheckReleaseStatus]]:&lt;br /&gt;
  [[RevisionNumber]] = field( [[ReleaseText]]&amp;lt;SvnLine&amp;gt;, &amp;#039; &amp;#039;, 2)&lt;br /&gt;
  if [[RevisionNumber]] = &amp;#039;&amp;#039; then return&lt;br /&gt;
&lt;br /&gt;
  if [[ReleaseLocation]] # &amp;#039;&amp;#039; then crt ; crt [[ReleaseLocation]] ; crt&lt;br /&gt;
&lt;br /&gt;
  crt ; crt &amp;quot;Checking that each file is before Revision &amp;quot;:[[RevisionNumber]]:&amp;#039;...&amp;#039; ; crt&lt;br /&gt;
  [[NumResponseLines]] = dcount( [[SvnResponse]], @FM )&lt;br /&gt;
  for N.R.L = 1 to [[NumResponseLines]]&lt;br /&gt;
    [[ResponseLn]] = [[SvnResponse]]&amp;lt;N.R.L&amp;gt;&lt;br /&gt;
    Revs = trim( [[ResponseLn]][12, 9999] )  ;*  Kind of a hack ? How else though ?&lt;br /&gt;
    [[LastCommitted]] = field(Revs, &amp;#039; &amp;#039;, 2)&lt;br /&gt;
    if [[LastCommitted]] &amp;gt; [[RevisionNumber]] then&lt;br /&gt;
      Path = field( Revs, &amp;#039; &amp;#039;, 4)&lt;br /&gt;
      crt Path:&amp;quot; has a Revision Number (&amp;quot;:[[LastCommitted]]:&amp;quot;) AFTER this Releases Revision # &amp;quot;:[[RevisionNumber]]:&amp;quot; ! (one-off Commit ?)&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
  next N.R.L&lt;br /&gt;
  crt&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
[[DisplayErrors]]:&lt;br /&gt;
  if Err # &amp;#039;&amp;#039; then&lt;br /&gt;
    crt&lt;br /&gt;
    crt &amp;#039;ERROR ! : &amp;#039;:Err&amp;lt;1&amp;gt;&lt;br /&gt;
    [[NumErrs]] = dcount(Err, @FM)&lt;br /&gt;
    for N.E = 2 to [[NumErrs]]&lt;br /&gt;
      crt &amp;#039;          &amp;#039;:Err&amp;lt;N.E&amp;gt;&lt;br /&gt;
    next N.E&lt;br /&gt;
    crt&lt;br /&gt;
    crt &amp;quot;   (&amp;#039;SVN -H&amp;#039; for more info)&amp;quot;&lt;br /&gt;
    crt&lt;br /&gt;
  end&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
[[ReadRelease]]:&lt;br /&gt;
  [[ReleaseLocation]] = &amp;#039;&amp;#039;&lt;br /&gt;
  flistPath = &amp;quot;/home/release/&amp;quot;:[[ReleaseNumber]]:&amp;quot;/flist&amp;quot;&lt;br /&gt;
  call READ.UNIX( [[ReleaseText]], flistPath, Err)&lt;br /&gt;
  if Err # &amp;#039;&amp;#039; then&lt;br /&gt;
    [[ReleaseLocation]] = &amp;#039; ** RELEASED **&amp;#039;&lt;br /&gt;
    flistPath = &amp;quot;/home/release/released/&amp;quot;:[[ReleaseNumber]]:&amp;quot;/flist&amp;quot;&lt;br /&gt;
    call READ.UNIX( [[ReleaseText]], flistPath, Err2)&lt;br /&gt;
    if Err2 # &amp;#039;&amp;#039; then&lt;br /&gt;
      crt Err ; crt Err2 ; input j ; return&lt;br /&gt;
    end&lt;br /&gt;
    Err = &amp;#039;&amp;#039;  ;*  Must be in &amp;#039;released&amp;#039;... so we&amp;#039;re good.&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  convert char(10):char(13) to @FM in [[ReleaseText]]&lt;br /&gt;
  [[SvnLine]] = 0 ;* Track the &amp;#039;SVN:&amp;#039; line to append the # if we are Committing and there&amp;#039;s not one already&lt;br /&gt;
  [[NumLines]] = dcount( [[ReleaseText]], @FM )&lt;br /&gt;
  for N.L = 1 to [[NumLines]]&lt;br /&gt;
    LN = trim( [[ReleaseText]]&amp;lt;N.L&amp;gt; )&lt;br /&gt;
    begin case&lt;br /&gt;
      case LN[1,2] = &amp;#039;**&amp;#039; and [[CommitComment]] = &amp;#039;&amp;#039;&lt;br /&gt;
        [[CommitComment]] = LN[3, 99999]       ;*  Special single comment line used for Commit&lt;br /&gt;
      case LN[1,1] = &amp;#039;*&amp;#039; or LN[1,1] = &amp;#039;#&amp;#039;  ;*  Ignore comments&lt;br /&gt;
      case index(LN, &amp;#039;:&amp;#039;, 1) # 0           ;*  Handle special tags :&lt;br /&gt;
        if LN[1,4] = &amp;quot;SVN:&amp;quot; then           ;*  Is this the &amp;quot;SVN:&amp;quot; line ?&lt;br /&gt;
          [[SvnLine]] = N.L                    ;*  Remember where&lt;br /&gt;
        end&lt;br /&gt;
      case LN # &amp;#039;&amp;#039;                         ;*  Finally handle normal lines:&lt;br /&gt;
        Item = LN ; gosub [[AddItem]]&lt;br /&gt;
    end case&lt;br /&gt;
  next N.L&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
[[AddItem]]:&lt;br /&gt;
  [[FileName]] = field(Item, &amp;#039;/&amp;#039;, 1) ; [[ItemID]] = field(Item, &amp;#039;/&amp;#039;, 2)&lt;br /&gt;
  open [[FileName]] to File then&lt;br /&gt;
    [[FileList]] := Item:&amp;#039; &amp;#039;  ;*  Keep list because some things don&amp;#039;t need to be in UV ?:&lt;br /&gt;
    read dummy from File, [[ItemID]] else&lt;br /&gt;
      [[FileErrs]]&amp;lt;-1&amp;gt; = [[ItemID]]:&amp;quot; is not in &amp;quot;:[[FileName]]&lt;br /&gt;
    end&lt;br /&gt;
  end else&lt;br /&gt;
    if [[FileName]] = &amp;#039;DICT&amp;#039; then  ;*  Special case: make it act like a BP ?&lt;br /&gt;
      [[FileList]] := Item:&amp;#039; &amp;#039;     ;*  Just like above ?&lt;br /&gt;
    end else&lt;br /&gt;
      [[FileErrs]]&amp;lt;-1&amp;gt; = [[FileName]]:&amp;quot; is not a valid BP file/directory.&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
  end&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
[[GetCommitComment]]:&lt;br /&gt;
  * Add spaces, to allow for the &amp;quot;new&amp;quot; comment to be longer than &amp;#039;[[CommitComment]]&amp;#039;. A MR.IN characteristic.&lt;br /&gt;
  commitLength = len([[CommitComment]])&lt;br /&gt;
  [[DisplayComment]] = [[CommitComment]]:spaces(100-commitLength)&lt;br /&gt;
  crt &amp;quot;Enter comment:&amp;quot;: ; call MR.IN( [[DisplayComment]], &amp;#039;&amp;#039;, OUT )&lt;br /&gt;
  if OUT = &amp;quot;ESC&amp;quot; or OUT = &amp;#039;HOME&amp;#039; then stop&lt;br /&gt;
  [[CommitComment]] = trim([[DisplayComment]])&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
* =======================================================================================&lt;br /&gt;
&lt;br /&gt;
*  Set all Option flags and set [[FileList]] and [[FileErrs]]. Note we don&amp;#039;t handle the errors&lt;br /&gt;
*  now because some options don&amp;#039;t require them anyway.&lt;br /&gt;
&lt;br /&gt;
[[ParseCommandLine]]:&lt;br /&gt;
  [[CmdLineOptions]] = &amp;quot;SINGLEPARAM&amp;quot;  ;*  for -M option&lt;br /&gt;
  call PARSE.CMDLINE( @SENTENCE, mat CMDLINE, [[CmdLineOptions]] )&lt;br /&gt;
  if CMD.HELP then gosub Help ; stop&lt;br /&gt;
  svnOp = CMD.ARG.S&amp;lt;1, 1&amp;gt;&lt;br /&gt;
  [[FileName]] = CMD.ARG.S&amp;lt;1, 2&amp;gt;&lt;br /&gt;
  locate &amp;#039;D&amp;#039; in CMD.FLAG.S&amp;lt;1&amp;gt; setting dum then [[DisplayCmd]] = @TRUE else [[DisplayCmd]] = @FALSE&lt;br /&gt;
  locate &amp;#039;L&amp;#039; in CMD.FLAG.S&amp;lt;1&amp;gt; setting [[SelectListLoc]] then&lt;br /&gt;
    [[SelectListName]] = CMD.PARAM.S&amp;lt;1, [[SelectListLoc]], 1&amp;gt;&lt;br /&gt;
  end else [[SelectListName]] = &amp;#039;&amp;#039;&lt;br /&gt;
  locate &amp;#039;N&amp;#039; in CMD.FLAG.S&amp;lt;1&amp;gt; setting dum then [[NoExecute]] = @TRUE else [[NoExecute]] = @FALSE&lt;br /&gt;
  locate &amp;#039;M&amp;#039; in CMD.FLAG.S&amp;lt;1&amp;gt; setting [[MessagePos]] then&lt;br /&gt;
    [[CommitComment]] = CMD.PARAM.S&amp;lt;1, [[MessagePos]], 1&amp;gt;   ;*  &amp;#039;SINGLEPARAM&amp;#039; is set so there&amp;#039;s only one line&lt;br /&gt;
  end else [[CommitComment]] = &amp;#039;&amp;#039;&lt;br /&gt;
  locate &amp;#039;R&amp;#039; in CMD.FLAG.S&amp;lt;1&amp;gt; setting [[ReleasePos]] then&lt;br /&gt;
    [[ReleaseNumber]] = CMD.PARAM.S&amp;lt;1, [[ReleasePos]], 1&amp;gt;&lt;br /&gt;
  end else [[ReleaseNumber]] = &amp;#039;&amp;#039;&lt;br /&gt;
  locate &amp;#039;V&amp;#039; in CMD.FLAG.S&amp;lt;1&amp;gt; setting dum then Verbose = @TRUE else Verbose = @FALSE&lt;br /&gt;
  locate &amp;#039;P&amp;#039; in CMD.FLAG.S&amp;lt;1&amp;gt; setting [[PropertyNameAndValueLoc]] then&lt;br /&gt;
    [[PropertyNameAndValue]] = CMD.PARAM.S&amp;lt;1, [[PropertyNameAndValueLoc]], 1&amp;gt;&lt;br /&gt;
  end else [[PropertyNameAndValue]] = &amp;#039;&amp;#039;&lt;br /&gt;
  [[FileList]]  = &amp;quot;&amp;quot;  ;*  Space separated; each item is a path from /u/dsisrc :&lt;br /&gt;
  [[FileErrs]]  = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  begin case      ;*  Lots of ways to get the [[FileList]]:&lt;br /&gt;
    case [[ReleaseNumber]]  # &amp;#039;&amp;#039; ; gosub [[ReadRelease]]&lt;br /&gt;
    case [[SelectListName]] # &amp;#039;&amp;#039; ;* Use the SELECT list if provided&lt;br /&gt;
      getlist [[SelectListName]] else Err = &amp;quot;Unable to read Select List &amp;quot;: [[SelectListName]] ; return&lt;br /&gt;
      loop while readnext [[ItemID]] do&lt;br /&gt;
        Item = [[FileName]]:&amp;#039;/&amp;#039;:[[ItemID]] ; gosub [[AddItem]]&lt;br /&gt;
      repeat&lt;br /&gt;
    case 1   ;* Get the individual files if no &amp;quot;-L&amp;quot; option was specified&lt;br /&gt;
      for N.A = 3 to CMD.NUM.ARGS   ;* We get the files as arguments 3 and more&lt;br /&gt;
        Item = [[FileName]]:&amp;#039;/&amp;#039;:CMD.ARG.S&amp;lt;1,N.A&amp;gt; ; gosub [[AddItem]]&lt;br /&gt;
      next N.A&lt;br /&gt;
  end case&lt;br /&gt;
&lt;br /&gt;
  if svnOp = &amp;#039;&amp;#039; then gosub Help&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
  crt &amp;#039;SVN &amp;lt;command&amp;gt; { &amp;lt;BP_Dir&amp;gt; &amp;lt;item&amp;gt; ... | -L &amp;lt;save-list&amp;gt; | -R &amp;lt;release#&amp;gt; } [-N][-M &amp;quot;message&amp;quot;][-V][-D][-P &amp;lt;[[PropName]]=PropVal&amp;gt;]&amp;#039;&lt;br /&gt;
  crt&lt;br /&gt;
  crt &amp;quot; where &amp;lt;command&amp;gt; is COMPILE, COMMIT, ADD, DELETE, DIFF, INFO, LOG, REVERT, STATUS, HELP, PROPSET. Options:&amp;quot;&lt;br /&gt;
  crt &amp;quot;  -N : No Execute; for testing just to see the &amp;lt;command&amp;gt;&amp;quot;&lt;br /&gt;
  crt &amp;quot;  -V : Verbose for STATUS; default for listed items; NOT default for &amp;#039;all&amp;#039; option&amp;quot;&lt;br /&gt;
  crt &amp;quot;  -D : Display the &amp;lt;command&amp;gt; before executing it.&amp;quot;&lt;br /&gt;
  crt &amp;quot;  -P : Add more arguments after &amp;lt;command&amp;gt;, useful for PROPSET (example)&amp;quot;&lt;br /&gt;
  crt&lt;br /&gt;
  crt &amp;quot; For &amp;#039;COMMIT&amp;#039; when &amp;#039;M is not used, you will be prompted for a comment if the release has no &amp;#039;**&amp;#039; comment.&amp;quot;&lt;br /&gt;
  crt&lt;br /&gt;
  crt &amp;quot;Examples:&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN COMMIT DSI.BP AR.FREEZE AR.UNFREEZE&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN COMMIT DSI.BP -L DSI.BP.FLIST&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN COMMIT -R 570                    : Commit EVERY program in Release 570 using the &amp;#039;**&amp;#039; line for the Comment&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN COMPILE -R 570                   : Compile EVERY program in Release 570: NOT REALLY SVN but it&amp;#039;s handy!&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN LISTS   -R 570                   : Save Select Lists for program files: NOT REALLY SVN but it&amp;#039;s handy!&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN STATUS DSI.BP                    : Show all uncommitted &amp;#039;M&amp;#039;odifications, &amp;#039;D&amp;#039;eletes, &amp;#039;A&amp;#039;dds, etc.&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN DIFF DSI.BP AR.FREEZE            : Show the difference between the local copy and what&amp;#039;s in SVN&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN INFO DSI.BP AR.FREEZE PMTS       : Show misc info about what&amp;#039;s in SVN&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN CLEANUP /u/dsisrc[[/DSI]].BP         : Execute cleanup on DSI.BP directory (if something is locked, etc)&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN LOG DSI.BP AR.FREEZE             : List of historical changes&amp;quot;&lt;br /&gt;
  crt&lt;br /&gt;
  crt &amp;quot;To add a new file, you need to execute ADD first before Committing (i.e. standard &amp;#039;svn&amp;#039; procedure):&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN ADD    DSI.BP NEWFILENAME&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN COMMIT DSI.BP NEWFILENAME&amp;quot;&lt;br /&gt;
  crt&lt;br /&gt;
  crt &amp;quot;To delete a file, you need to execute DELETE first, and then &amp;#039;commit the delete&amp;#039; (again, standard svn):&amp;quot;&lt;br /&gt;
  crt &amp;quot;(note: this can be used if you get &amp;#039;Already Exists&amp;#039; errors ? Just backup your files first !)&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN DELETE DSI.BP ANYFILENAME&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN COMMIT DSI.BP ANYFILENAME&amp;quot;&lt;br /&gt;
  crt&lt;br /&gt;
  crt &amp;quot;To set properties like svn:keywords: &amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN PROPSET DSI.BP ANYFILENAME -P svn:keywords=Id&amp;quot;   &lt;br /&gt;
  crt &amp;quot;  SVN PROPSET DSI.BP ANYFILENAME -P svn:keywords=Id Rev Date Author URL&amp;quot;&lt;br /&gt;
  crt&lt;br /&gt;
  crt &amp;quot;To FIX SVN if you get &amp;#039;Out of Date&amp;#039; errors (!?) :&amp;quot;&lt;br /&gt;
  crt &amp;quot;  SVN UPDATE -R 570                    : UPDATE EVERY program in Release 570 to the current SVN #&amp;quot;&lt;br /&gt;
  crt &amp;quot;                                         (CAN THIS OVERWRITE YOUR CHANGES !?)&amp;quot;&lt;br /&gt;
  crt&lt;br /&gt;
  crt &amp;quot;For more svn options try: svn -help and svn &amp;lt;command&amp;gt; help&amp;quot;&lt;br /&gt;
  crt &amp;quot;(see also Confluence page: http://intranet.docmagic.com/display/Development/Universe+SVN+Integration)&amp;quot;&lt;br /&gt;
return&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/PRE&amp;gt;&lt;/div&gt;</summary>
		<author><name>Conversion script</name></author>
	</entry>
</feed>