Hex Artifact Content
Not logged in

Artifact 49171e7a4082c0e49ad98d8781dc90516cea4877:

File tools/cvs2fossil/lib/c2f_frev.tcl part of check-in [cfe4b269ac] - Added detection of irrelevant trunk revisions for files added to a branch but not the trunk. Repository extended to keep inverted indices for the meta data and commit messages for retrieval of commit messages per meta data, required for the previous. fixed problem with file objects, we kept only the rcs path, and need the user visible path too. by aku on 2007-10-17 04:37:05.

0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69  07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66  es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65  tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69  d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e  n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20  SE, which.# you 
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ived as part of 
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f  this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74  n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72   voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79  ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75   many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20  als.  For exact 
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73  contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65  tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79  vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c   and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66  able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e  ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23  com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 52 65 76  ########..## Rev
0200: 69 73 69 6f 6e 73 20 70 65 72 20 66 69 6c 65 2e  isions per file.
0210: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
0220: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0230: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
0250: 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a  ## Requirements.
0260: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
0270: 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20 20   Tcl 8.4        
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0290: 20 20 20 20 20 3b 20 23 20 52 65 71 75 69 72 65       ; # Require
02a0: 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61 63 6b 61  d runtime..packa
02b0: 67 65 20 72 65 71 75 69 72 65 20 73 6e 69 74 20  ge require snit 
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
02e0: 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61   # OO system..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63  ckage require vc
0300: 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20  ::tools::misc   
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0320: 20 20 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61    ; # Text forma
0330: 74 74 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23  tting..# # ## ##
0340: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
0350: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0370: 23 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 3a 3a  ####.## ..snit::
0380: 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69  type ::vc::fossi
0390: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
03a0: 66 69 6c 65 3a 3a 72 65 76 20 7b 0a 20 20 20 20  file::rev {.    
03b0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
03c0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
03d0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 50  #######.    ## P
03e0: 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 63  ublic API..    c
03f0: 6f 6e 73 74 72 75 63 74 6f 72 20 7b 72 65 76 6e  onstructor {revn
0400: 72 20 64 61 74 65 20 73 74 61 74 65 20 74 68 65  r date state the
0410: 66 69 6c 65 7d 20 7b 0a 09 73 65 74 20 6d 79 72  file} {..set myr
0420: 65 76 6e 72 20 20 20 20 24 72 65 76 6e 72 0a 09  evnr    $revnr..
0430: 73 65 74 20 6d 79 64 61 74 65 20 20 20 20 20 24  set mydate     $
0440: 64 61 74 65 0a 09 73 65 74 20 6d 79 6f 72 69 67  date..set myorig
0450: 64 61 74 65 20 24 64 61 74 65 0a 09 73 65 74 20  date $date..set 
0460: 6d 79 73 74 61 74 65 20 20 20 20 24 73 74 61 74  mystate    $stat
0470: 65 0a 09 73 65 74 20 6d 79 66 69 6c 65 20 20 20  e..set myfile   
0480: 20 20 24 74 68 65 66 69 6c 65 0a 09 72 65 74 75    $thefile..retu
0490: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  rn.    }..    # 
04a0: 42 61 73 69 63 20 70 69 65 63 65 73 20 5f 5f 5f  Basic pieces ___
04b0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
04c0: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f  _____..    metho
04d0: 64 20 68 61 73 6d 65 74 61 20 7b 7d 20 7b 20 72  d hasmeta {} { r
04e0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79  eturn [expr {$my
04f0: 6d 65 74 61 69 64 20 6e 65 20 22 22 7d 5d 20 7d  metaid ne ""}] }
0500: 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61 73 74  .    method hast
0510: 65 78 74 20 7b 7d 20 7b 0a 09 73 74 72 75 63 74  ext {} {..struct
0520: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 6d  ::list assign $m
0530: 79 74 65 78 74 20 73 20 65 0a 09 72 65 74 75 72  ytext s e..retur
0540: 6e 20 5b 65 78 70 72 20 7b 24 73 20 3c 3d 20 24  n [expr {$s <= $
0550: 65 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  e}].    }..    m
0560: 65 74 68 6f 64 20 73 65 74 6d 65 74 61 20 7b 6d  ethod setmeta {m
0570: 65 74 61 7d 20 7b 20 73 65 74 20 6d 79 6d 65 74  eta} { set mymet
0580: 61 69 64 20 24 6d 65 74 61 20 3b 20 72 65 74 75  aid $meta ; retu
0590: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  rn }.    method 
05a0: 73 65 74 74 65 78 74 20 7b 74 65 78 74 7d 20 7b  settext {text} {
05b0: 20 73 65 74 20 6d 79 74 65 78 74 20 20 20 24 74   set mytext   $t
05c0: 65 78 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20  ext ; return }. 
05d0: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 6c 6f 64     method setlod
05e0: 20 20 7b 6c 6f 64 7d 20 20 7b 20 73 65 74 20 6d    {lod}  { set m
05f0: 79 6c 6f 64 20 20 20 20 24 6c 6f 64 20 20 3b 20  ylod    $lod  ; 
0600: 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65  return }..    me
0610: 74 68 6f 64 20 72 65 76 6e 72 20 7b 7d 20 7b 20  thod revnr {} { 
0620: 72 65 74 75 72 6e 20 24 6d 79 72 65 76 6e 72 20  return $myrevnr 
0630: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 74 61  }.    method sta
0640: 74 65 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24  te {} { return $
0650: 6d 79 73 74 61 74 65 20 7d 0a 20 20 20 20 6d 65  mystate }.    me
0660: 74 68 6f 64 20 6c 6f 64 20 20 20 7b 7d 20 7b 20  thod lod   {} { 
0670: 72 65 74 75 72 6e 20 24 6d 79 6c 6f 64 20 20 20  return $mylod   
0680: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 61 74  }.    method dat
0690: 65 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24  e  {} { return $
06a0: 6d 79 64 61 74 65 20 20 7d 0a 0a 20 20 20 20 6d  mydate  }..    m
06b0: 65 74 68 6f 64 20 69 73 6e 65 65 64 65 64 20 7b  ethod isneeded {
06c0: 7d 20 7b 0a 09 69 66 20 7b 24 6d 79 6f 70 65 72  } {..if {$myoper
06d0: 61 74 69 6f 6e 20 6e 65 20 22 6e 6f 74 68 69 6e  ation ne "nothin
06e0: 67 22 7d 20 20 20 20 20 20 20 20 20 7b 72 65 74  g"}         {ret
06f0: 75 72 6e 20 31 7d 0a 09 69 66 20 7b 24 6d 79 72  urn 1}..if {$myr
0700: 65 76 6e 72 20 6e 65 20 22 31 2e 31 22 7d 20 20  evnr ne "1.1"}  
0710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0720: 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 20 7b 21  return 1}..if {!
0730: 5b 24 6d 79 6c 6f 64 20 69 73 74 72 75 6e 6b 5d  [$mylod istrunk]
0740: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0750: 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a 09 69 66    {return 1}..if
0760: 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 62   {![llength $myb
0770: 72 61 6e 63 68 65 73 5d 7d 20 20 20 20 20 20 20  ranches]}       
0780: 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a       {return 1}.
0790: 09 73 65 74 20 66 69 72 73 74 62 72 61 6e 63 68  .set firstbranch
07a0: 20 5b 6c 69 6e 64 65 78 20 24 6d 79 62 72 61 6e   [lindex $mybran
07b0: 63 68 65 73 20 30 5d 0a 09 69 66 20 7b 21 5b 24  ches 0]..if {![$
07c0: 66 69 72 73 74 62 72 61 6e 63 68 20 68 61 73 63  firstbranch hasc
07d0: 68 69 6c 64 5d 7d 20 20 20 20 20 20 20 20 20 20  hild]}          
07e0: 7b 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 20 7b  {return 1}..if {
07f0: 24 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72  $myisondefaultbr
0800: 61 6e 63 68 7d 20 20 20 20 20 20 20 20 20 20 20  anch}           
0810: 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a 0a 09     {return 1}...
0820: 23 20 46 49 58 3a 20 54 68 69 73 20 6d 65 73 73  # FIX: This mess
0830: 61 67 65 20 77 69 6c 6c 20 6e 6f 74 20 6d 61 74  age will not mat
0840: 63 68 20 69 66 20 74 68 65 20 52 43 53 20 66 69  ch if the RCS fi
0850: 6c 65 20 77 61 73 20 72 65 6e 61 6d 65 64 0a 09  le was renamed..
0860: 23 20 6d 61 6e 75 61 6c 6c 79 20 61 66 74 65 72  # manually after
0870: 20 69 74 20 77 61 73 20 63 72 65 61 74 65 64 2e   it was created.
0880: 0a 0a 09 73 65 74 20 67 65 6e 20 22 66 69 6c 65  ...set gen "file
0890: 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b 24 6d 79   [file tail [$my
08a0: 66 69 6c 65 20 75 73 72 70 61 74 68 5d 5d 20 77  file usrpath]] w
08b0: 61 73 20 69 6e 69 74 69 61 6c 6c 79 20 61 64 64  as initially add
08c0: 65 64 20 6f 6e 20 62 72 61 6e 63 68 20 5b 24 66  ed on branch [$f
08d0: 69 72 73 74 62 72 61 6e 63 68 20 6e 61 6d 65 5d  irstbranch name]
08e0: 2e 22 0a 09 73 65 74 20 6c 6f 67 20 5b 24 6d 79  ."..set log [$my
08f0: 66 69 6c 65 20 63 6f 6d 6d 69 74 6d 65 73 73 61  file commitmessa
0900: 67 65 6f 66 20 24 6d 79 6d 65 74 61 69 64 5d 0a  geof $mymetaid].
0910: 0a 09 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b  ..return [expr {
0920: 24 6c 6f 67 20 6e 65 20 24 67 65 6e 7d 5d 0a 20  $log ne $gen}]. 
0930: 20 20 20 7d 0a 0a 20 20 20 20 23 20 42 61 73 69     }..    # Basi
0940: 63 20 70 61 72 65 6e 74 2f 63 68 69 6c 64 20 6c  c parent/child l
0950: 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f  inkage _________
0960: 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61  _..    method ha
0970: 73 70 61 72 65 6e 74 20 7b 7d 20 7b 20 72 65 74  sparent {} { ret
0980: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 70 61  urn [expr {$mypa
0990: 72 65 6e 74 20 6e 65 20 22 22 7d 5d 20 7d 0a 20  rent ne ""}] }. 
09a0: 20 20 20 6d 65 74 68 6f 64 20 68 61 73 63 68 69     method haschi
09b0: 6c 64 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  ld  {} { return 
09c0: 5b 65 78 70 72 20 7b 24 6d 79 63 68 69 6c 64 20  [expr {$mychild 
09d0: 20 6e 65 20 22 22 7d 5d 20 7d 0a 0a 20 20 20 20   ne ""}] }..    
09e0: 6d 65 74 68 6f 64 20 73 65 74 70 61 72 65 6e 74  method setparent
09f0: 20 7b 70 61 72 65 6e 74 7d 20 7b 0a 09 69 66 20   {parent} {..if 
0a00: 7b 24 6d 79 70 61 72 65 6e 74 20 6e 65 20 22 22  {$myparent ne ""
0a10: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65  } { trouble inte
0a20: 72 6e 61 6c 20 22 50 61 72 65 6e 74 20 61 6c 72  rnal "Parent alr
0a30: 65 61 64 79 20 64 65 66 69 6e 65 64 22 20 7d 0a  eady defined" }.
0a40: 09 73 65 74 20 6d 79 70 61 72 65 6e 74 20 24 70  .set myparent $p
0a50: 61 72 65 6e 74 0a 09 72 65 74 75 72 6e 0a 20 20  arent..return.  
0a60: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
0a70: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 7b 7d  cutfromparent {}
0a80: 20 7b 20 73 65 74 20 6d 79 70 61 72 65 6e 74 20   { set myparent 
0a90: 22 22 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20 20  "" ; return }.  
0aa0: 20 20 6d 65 74 68 6f 64 20 63 75 74 66 72 6f 6d    method cutfrom
0ab0: 63 68 69 6c 64 20 20 7b 7d 20 7b 20 73 65 74 20  child  {} { set 
0ac0: 6d 79 63 68 69 6c 64 20 20 22 22 20 3b 20 72 65  mychild  "" ; re
0ad0: 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68  turn }..    meth
0ae0: 6f 64 20 73 65 74 63 68 69 6c 64 20 7b 63 68 69  od setchild {chi
0af0: 6c 64 7d 20 7b 0a 09 69 66 20 7b 24 6d 79 63 68  ld} {..if {$mych
0b00: 69 6c 64 20 6e 65 20 22 22 7d 20 7b 20 74 72 6f  ild ne ""} { tro
0b10: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 43  uble internal "C
0b20: 68 69 6c 64 20 61 6c 72 65 61 64 79 20 64 65 66  hild already def
0b30: 69 6e 65 64 22 20 7d 0a 09 73 65 74 20 6d 79 63  ined" }..set myc
0b40: 68 69 6c 64 20 24 63 68 69 6c 64 0a 09 72 65 74  hild $child..ret
0b50: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
0b60: 65 74 68 6f 64 20 70 61 72 65 6e 74 20 7b 7d 20  ethod parent {} 
0b70: 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 61 72 65  { return $mypare
0b80: 6e 74 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  nt }.    method 
0b90: 63 68 69 6c 64 20 20 7b 7d 20 7b 20 72 65 74 75  child  {} { retu
0ba0: 72 6e 20 24 6d 79 63 68 69 6c 64 20 20 7d 0a 0a  rn $mychild  }..
0bb0: 20 20 20 20 23 20 42 72 61 6e 63 68 20 6c 69 6e      # Branch lin
0bc0: 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  kage ___________
0bd0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20  ___________..   
0be0: 20 6d 65 74 68 6f 64 20 73 65 74 70 61 72 65 6e   method setparen
0bf0: 74 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 7d  tbranch {branch}
0c00: 20 7b 0a 09 69 66 20 7b 24 6d 79 70 61 72 65 6e   {..if {$myparen
0c10: 74 62 72 61 6e 63 68 20 6e 65 20 22 22 7d 20 7b  tbranch ne ""} {
0c20: 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61   trouble interna
0c30: 6c 20 22 42 72 61 6e 63 68 20 70 61 72 65 6e 74  l "Branch parent
0c40: 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e 65 64   already defined
0c50: 22 20 7d 0a 09 73 65 74 20 6d 79 70 61 72 65 6e  " }..set myparen
0c60: 74 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a  tbranch $branch.
0c70: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
0c80: 20 20 20 6d 65 74 68 6f 64 20 70 61 72 65 6e 74     method parent
0c90: 62 72 61 6e 63 68 20 7b 7d 20 7b 20 72 65 74 75  branch {} { retu
0ca0: 72 6e 20 24 6d 79 70 61 72 65 6e 74 62 72 61 6e  rn $myparentbran
0cb0: 63 68 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  ch }.    method 
0cc0: 62 72 61 6e 63 68 65 73 20 20 20 20 20 7b 7d 20  branches     {} 
0cd0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e  { return $mybran
0ce0: 63 68 65 73 20 7d 0a 0a 20 20 20 20 6d 65 74 68  ches }..    meth
0cf0: 6f 64 20 61 64 64 62 72 61 6e 63 68 20 7b 62 72  od addbranch {br
0d00: 61 6e 63 68 7d 20 7b 0a 09 6c 61 70 70 65 6e 64  anch} {..lappend
0d10: 20 6d 79 62 72 61 6e 63 68 65 73 20 24 62 72 61   mybranches $bra
0d20: 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  nch..return.    
0d30: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 61 64  }..    method ad
0d40: 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 7b  dchildonbranch {
0d50: 63 68 69 6c 64 7d 20 7b 0a 09 6c 61 70 70 65 6e  child} {..lappen
0d60: 64 20 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 72  d mybranchchildr
0d70: 65 6e 20 24 63 68 69 6c 64 0a 09 72 65 74 75 72  en $child..retur
0d80: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
0d90: 68 6f 64 20 63 75 74 66 72 6f 6d 70 61 72 65 6e  hod cutfromparen
0da0: 74 62 72 61 6e 63 68 20 7b 7d 20 7b 20 73 65 74  tbranch {} { set
0db0: 20 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20   myparentbranch 
0dc0: 22 22 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20  "" ; return }.. 
0dd0: 20 20 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65     method remove
0de0: 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 7d 20  branch {branch} 
0df0: 7b 0a 09 6c 64 65 6c 65 74 65 20 6d 79 62 72 61  {..ldelete mybra
0e00: 6e 63 68 65 73 20 24 62 72 61 6e 63 68 0a 09 72  nches $branch..r
0e10: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
0e20: 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 63 68   method removech
0e30: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 7b 72 65 76  ildonbranch {rev
0e40: 7d 20 7b 0a 09 6c 64 65 6c 65 74 65 20 6d 79 62  } {..ldelete myb
0e50: 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 24 72  ranchchildren $r
0e60: 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ev..return.    }
0e70: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 6f 72  ..    method sor
0e80: 74 62 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a 09  tbranches {} {..
0e90: 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d  if {![llength $m
0ea0: 79 62 72 61 6e 63 68 65 73 5d 7d 20 72 65 74 75  ybranches]} retu
0eb0: 72 6e 0a 0a 09 23 20 53 6f 72 74 20 74 68 65 20  rn...# Sort the 
0ec0: 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64  branches spawned
0ed0: 20 62 79 20 74 68 69 73 20 72 65 76 69 73 69 6f   by this revisio
0ee0: 6e 20 69 6e 20 63 72 65 61 74 69 6f 6e 0a 09 23  n in creation..#
0ef0: 20 6f 72 64 65 72 2e 20 54 6f 20 68 65 6c 70 20   order. To help 
0f00: 69 6e 20 74 68 69 73 20 6f 75 72 20 66 69 6c 65  in this our file
0f10: 20 67 61 76 65 20 61 6c 6c 20 62 72 61 6e 63 68   gave all branch
0f20: 65 73 20 61 20 70 6f 73 69 74 69 6f 6e 0a 09 23  es a position..#
0f30: 20 69 64 2c 20 69 6e 20 6f 72 64 65 72 20 6f 66   id, in order of
0f40: 20 74 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f   their definitio
0f50: 6e 20 62 79 20 74 68 65 20 52 43 53 20 61 72 63  n by the RCS arc
0f60: 68 69 76 65 2e 0a 09 23 0a 09 23 20 54 68 65 20  hive...#..# The 
0f70: 63 72 65 61 74 69 6f 6e 20 6f 72 64 65 72 20 69  creation order i
0f80: 73 20 28 61 70 70 61 72 65 6e 74 6c 79 29 20 74  s (apparently) t
0f90: 68 65 20 72 65 76 65 72 73 65 20 6f 66 20 74 68  he reverse of th
0fa0: 65 0a 09 23 20 64 65 66 69 6e 69 74 69 6f 6e 20  e..# definition 
0fb0: 6f 72 64 65 72 2e 20 28 49 66 20 61 20 62 72 61  order. (If a bra
0fc0: 6e 63 68 20 69 73 20 63 72 65 61 74 65 64 20 74  nch is created t
0fd0: 68 65 6e 20 64 65 6c 65 74 65 64 2c 20 61 0a 09  hen deleted, a..
0fe0: 23 20 6c 61 74 65 72 20 62 72 61 6e 63 68 20 63  # later branch c
0ff0: 61 6e 20 62 65 20 61 73 73 69 67 6e 65 64 20 74  an be assigned t
1000: 68 65 20 72 65 63 79 63 6c 65 64 20 62 72 61 6e  he recycled bran
1010: 63 68 20 6e 75 6d 62 65 72 3b 0a 09 23 20 74 68  ch number;..# th
1020: 65 72 65 66 6f 72 65 20 62 72 61 6e 63 68 20 6e  erefore branch n
1030: 75 6d 62 65 72 73 20 61 72 65 20 6e 6f 74 20 61  umbers are not a
1040: 6e 20 69 6e 64 69 63 61 74 69 6f 6e 20 6f 66 20  n indication of 
1050: 63 72 65 61 74 69 6f 6e 0a 09 23 20 6f 72 64 65  creation..# orde
1060: 72 2e 29 0a 0a 09 73 65 74 20 74 6d 70 20 7b 7d  r.)...set tmp {}
1070: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68  ..foreach branch
1080: 20 24 6d 79 62 72 61 6e 63 68 65 73 20 7b 0a 09   $mybranches {..
1090: 20 20 20 20 6c 61 70 70 65 6e 64 20 74 6d 70 20      lappend tmp 
10a0: 5b 6c 69 73 74 20 24 62 72 61 6e 63 68 20 5b 24  [list $branch [$
10b0: 62 72 61 6e 63 68 20 70 6f 73 69 74 69 6f 6e 5d  branch position]
10c0: 5d 0a 09 7d 0a 0a 09 73 65 74 20 6d 79 62 72 61  ]..}...set mybra
10d0: 6e 63 68 65 73 20 7b 7d 0a 09 66 6f 72 65 61 63  nches {}..foreac
10e0: 68 20 69 74 65 6d 20 5b 6c 73 6f 72 74 20 2d 69  h item [lsort -i
10f0: 6e 64 65 78 20 31 20 2d 64 65 63 72 65 61 73 69  ndex 1 -decreasi
1100: 6e 67 20 24 74 6d 70 5d 20 7b 0a 09 20 20 20 20  ng $tmp] {..    
1110: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73  struct::list ass
1120: 69 67 6e 20 24 69 74 65 6d 20 62 72 61 6e 63 68  ign $item branch
1130: 20 70 6f 73 69 74 69 6f 6e 0a 09 20 20 20 20 6c   position..    l
1140: 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 68 65  append mybranche
1150: 73 20 24 62 72 61 6e 63 68 0a 09 7d 0a 09 72 65  s $branch..}..re
1160: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
1170: 6d 65 74 68 6f 64 20 6d 6f 76 65 62 72 61 6e 63  method movebranc
1180: 68 65 73 74 6f 20 7b 72 65 76 7d 20 7b 0a 09 73  hesto {rev} {..s
1190: 65 74 20 72 65 76 6c 6f 64 20 5b 24 72 65 76 20  et revlod [$rev 
11a0: 6c 6f 64 5d 0a 09 66 6f 72 65 61 63 68 20 62 72  lod]..foreach br
11b0: 61 6e 63 68 20 24 6d 79 62 72 61 6e 63 68 65 73  anch $mybranches
11c0: 20 7b 0a 09 20 20 20 20 24 72 65 76 20 61 64 64   {..    $rev add
11d0: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09  branch $branch..
11e0: 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 70      $branch setp
11f0: 61 72 65 6e 74 20 24 72 65 76 0a 09 20 20 20 20  arent $rev..    
1200: 24 62 72 61 6e 63 68 20 73 65 74 6c 6f 64 20 24  $branch setlod $
1210: 72 65 76 6c 6f 64 0a 09 7d 0a 09 66 6f 72 65 61  revlod..}..forea
1220: 63 68 20 62 72 61 6e 63 68 72 65 76 20 24 6d 79  ch branchrev $my
1230: 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b  branchchildren {
1240: 0a 09 20 20 20 20 24 72 65 76 20 61 64 64 63 68  ..    $rev addch
1250: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 62 72 61  ildonbranch $bra
1260: 6e 63 68 72 65 76 0a 09 20 20 20 20 24 62 72 61  nchrev..    $bra
1270: 6e 63 68 72 65 76 20 63 75 74 66 72 6f 6d 70 61  nchrev cutfrompa
1280: 72 65 6e 74 0a 09 20 20 20 20 24 62 72 61 6e 63  rent..    $branc
1290: 68 72 65 76 20 73 65 74 70 61 72 65 6e 74 20 24  hrev setparent $
12a0: 72 65 76 0a 09 7d 0a 09 73 65 74 20 6d 79 62 72  rev..}..set mybr
12b0: 61 6e 63 68 65 73 20 20 20 20 20 20 20 7b 7d 0a  anches       {}.
12c0: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 63 68 69  .set mybranchchi
12d0: 6c 64 72 65 6e 20 7b 7d 0a 09 72 65 74 75 72 6e  ldren {}..return
12e0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
12f0: 6f 64 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e  od removeallbran
1300: 63 68 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61  ches {} {..forea
1310: 63 68 20 62 72 61 6e 63 68 20 24 6d 79 62 72 61  ch branch $mybra
1320: 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 24 62 72  nches {..    $br
1330: 61 6e 63 68 20 64 65 73 74 72 6f 79 0a 09 7d 0a  anch destroy..}.
1340: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 20  .set mybranches 
1350: 20 20 20 20 20 20 7b 7d 0a 09 73 65 74 20 6d 79        {}..set my
1360: 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b  branchchildren {
1370: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
1380: 0a 20 20 20 20 23 20 54 61 67 20 6c 69 6e 6b 61  .    # Tag linka
1390: 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ge _____________
13a0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20  ____________..  
13b0: 20 20 6d 65 74 68 6f 64 20 61 64 64 74 61 67 20    method addtag 
13c0: 7b 74 61 67 7d 20 7b 0a 09 6c 61 70 70 65 6e 64  {tag} {..lappend
13d0: 20 6d 79 74 61 67 73 20 24 74 61 67 0a 09 72 65   mytags $tag..re
13e0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
13f0: 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 61 6c 6c  method removeall
1400: 74 61 67 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61  tags {} {..forea
1410: 63 68 20 74 61 67 20 24 6d 79 74 61 67 73 20 7b  ch tag $mytags {
1420: 20 24 74 61 67 20 64 65 73 74 72 6f 79 20 7d 0a   $tag destroy }.
1430: 09 73 65 74 20 6d 79 74 61 67 73 20 7b 7d 0a 09  .set mytags {}..
1440: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
1450: 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65 74 61 67    method movetag
1460: 73 74 6f 20 7b 72 65 76 7d 20 7b 0a 09 73 65 74  sto {rev} {..set
1470: 20 72 65 76 6c 6f 64 20 5b 24 72 65 76 20 6c 6f   revlod [$rev lo
1480: 64 5d 0a 09 66 6f 72 65 61 63 68 20 74 61 67 20  d]..foreach tag 
1490: 24 6d 79 74 61 67 73 20 7b 0a 09 20 20 20 20 24  $mytags {..    $
14a0: 72 65 76 20 61 64 64 74 61 67 20 24 74 61 67 0a  rev addtag $tag.
14b0: 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61 67  .    $tag settag
14c0: 72 65 76 20 24 72 65 76 0a 09 20 20 20 20 24 74  rev $rev..    $t
14d0: 61 67 20 73 65 74 6c 6f 64 20 24 72 65 76 6c 6f  ag setlod $revlo
14e0: 64 0a 09 7d 0a 09 73 65 74 20 6d 79 74 61 67 73  d..}..set mytags
14f0: 20 7b 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20   {}..return.    
1500: 7d 0a 0a 20 20 20 20 23 20 67 65 6e 65 72 61 6c  }..    # general
1510: 20 73 79 6d 62 6f 6c 20 6f 70 65 72 61 74 69 6f   symbol operatio
1520: 6e 73 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a  ns ___________..
1530: 20 20 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65 73      method moves
1540: 79 6d 62 6f 6c 73 74 6f 20 7b 72 65 76 7d 20 7b  ymbolsto {rev} {
1550: 0a 09 23 20 4d 6f 76 65 20 74 68 65 20 74 61 67  ..# Move the tag
1560: 73 20 61 6e 64 20 62 72 61 6e 63 68 65 73 20 61  s and branches a
1570: 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
1580: 72 65 76 69 73 69 6f 6e 20 74 6f 20 74 68 65 0a  revision to the.
1590: 09 23 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61  .# destination a
15a0: 6e 64 20 66 69 78 20 61 6c 6c 20 70 6f 69 6e 74  nd fix all point
15b0: 65 72 73 2e 0a 0a 09 24 73 65 6c 66 20 6d 6f 76  ers....$self mov
15c0: 65 74 61 67 73 74 6f 20 20 20 20 20 24 72 65 76  etagsto     $rev
15d0: 0a 09 24 73 65 6c 66 20 6d 6f 76 65 62 72 61 6e  ..$self movebran
15e0: 63 68 65 73 74 6f 20 24 72 65 76 0a 09 72 65 74  chesto $rev..ret
15f0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
1600: 20 44 65 72 69 76 65 64 20 73 74 75 66 66 20 5f   Derived stuff _
1610: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1620: 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68  ______..    meth
1630: 6f 64 20 64 65 74 65 72 6d 69 6e 65 6f 70 65 72  od determineoper
1640: 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 4c 6f  ation {} {..# Lo
1650: 6f 6b 20 61 74 20 74 68 65 20 73 74 61 74 65 20  ok at the state 
1660: 6f 66 20 62 6f 74 68 20 74 68 69 73 20 72 65 76  of both this rev
1670: 69 73 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61  ision and its pa
1680: 72 65 6e 74 20 74 6f 0a 09 23 20 64 65 74 65 72  rent to..# deter
1690: 6d 69 6e 65 20 74 68 65 20 74 79 70 65 20 6f 70  mine the type op
16a0: 66 20 6f 70 65 72 61 74 69 6f 6e 20 77 68 69 63  f operation whic
16b0: 68 20 77 61 73 20 70 65 72 66 6f 72 6d 65 64 20  h was performed 
16c0: 28 61 64 64 2c 0a 09 23 20 6d 6f 64 69 66 79 2c  (add,..# modify,
16d0: 20 64 65 6c 65 74 65 2c 20 6e 6f 6e 65 29 2e 0a   delete, none)..
16e0: 09 23 0a 09 23 20 54 68 65 20 69 6d 70 6f 72 74  .#..# The import
16f0: 61 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ant information 
1700: 69 73 20 64 65 61 64 20 76 73 20 6e 6f 74 2d 64  is dead vs not-d
1710: 65 61 64 20 66 6f 72 20 62 6f 74 68 2c 0a 09 23  ead for both,..#
1720: 20 67 69 76 69 6e 67 20 72 69 73 65 20 74 6f 20   giving rise to 
1730: 66 6f 75 72 20 70 6f 73 73 69 62 6c 65 20 74 79  four possible ty
1740: 70 65 73 2e 0a 0a 09 73 65 74 20 73 64 65 61 64  pes....set sdead
1750: 20 5b 65 78 70 72 20 7b 24 6d 79 73 74 61 74 65   [expr {$mystate
1760: 20 65 71 20 22 64 65 61 64 22 7d 5d 0a 09 73 65   eq "dead"}]..se
1770: 74 20 70 64 65 61 64 20 5b 65 78 70 72 20 7b 24  t pdead [expr {$
1780: 6d 79 70 61 72 65 6e 74 20 65 71 20 22 22 20 7c  myparent eq "" |
1790: 7c 20 5b 24 6d 79 70 61 72 65 6e 74 20 73 74 61  | [$myparent sta
17a0: 74 65 5d 20 65 71 20 22 64 65 61 64 22 7d 5d 0a  te] eq "dead"}].
17b0: 0a 09 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f  ..set myoperatio
17c0: 6e 20 24 6d 79 6f 70 73 74 61 74 65 28 5b 6c 69  n $myopstate([li
17d0: 73 74 20 24 70 64 65 61 64 20 24 73 64 65 61 64  st $pdead $sdead
17e0: 5d 29 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ])..return.    }
17f0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6f 70 65  ..    method ope
1800: 72 61 74 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75  ration {} { retu
1810: 72 6e 20 24 6d 79 6f 70 65 72 61 74 69 6f 6e 20  rn $myoperation 
1820: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65 74  }.    method ret
1830: 79 70 65 20 7b 78 7d 20 7b 20 73 65 74 20 6d 79  ype {x} { set my
1840: 6f 70 65 72 61 74 69 6f 6e 20 24 78 20 3b 20 72  operation $x ; r
1850: 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74  eturn }..    met
1860: 68 6f 64 20 69 73 6f 6e 64 65 66 61 75 6c 74 62  hod isondefaultb
1870: 72 61 6e 63 68 20 7b 7d 20 7b 20 73 65 74 20 6d  ranch {} { set m
1880: 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e  yisondefaultbran
1890: 63 68 20 31 20 3b 20 72 65 74 75 72 6e 20 7d 0a  ch 1 ; return }.
18a0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 64  .    method setd
18b0: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c  efaultbranchchil
18c0: 64 20 20 7b 72 65 76 7d 20 7b 20 73 65 74 20 6d  d  {rev} { set m
18d0: 79 64 62 63 68 69 6c 64 20 24 72 65 76 20 3b 20  ydbchild $rev ; 
18e0: 72 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74  return }.    met
18f0: 68 6f 64 20 73 65 74 64 65 66 61 75 6c 74 62 72  hod setdefaultbr
1900: 61 6e 63 68 70 61 72 65 6e 74 20 7b 72 65 76 7d  anchparent {rev}
1910: 20 7b 0a 09 73 65 74 20 6d 79 64 62 70 61 72 65   {..set mydbpare
1920: 6e 74 20 24 72 65 76 0a 0a 09 23 20 52 65 74 79  nt $rev...# Rety
1930: 70 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20  pe the revision 
1940: 28 6d 61 79 20 63 68 61 6e 67 65 20 66 72 6f 6d  (may change from
1950: 20 27 61 64 64 27 20 74 6f 20 27 63 68 61 6e 67   'add' to 'chang
1960: 65 27 29 2e 0a 0a 09 73 65 74 20 73 64 65 61 64  e')....set sdead
1970: 20 5b 65 78 70 72 20 7b 24 6d 79 6f 70 65 72 61   [expr {$myopera
1980: 74 69 6f 6e 20 20 20 20 20 6e 65 20 22 63 68 61  tion     ne "cha
1990: 6e 67 65 22 7d 5d 0a 09 73 65 74 20 70 64 65 61  nge"}]..set pdea
19a0: 64 20 5b 65 78 70 72 20 7b 5b 24 72 65 76 20 6f  d [expr {[$rev o
19b0: 70 65 72 61 74 69 6f 6e 5d 20 6e 65 20 22 63 68  peration] ne "ch
19c0: 61 6e 67 65 22 7d 5d 0a 09 73 65 74 20 6d 79 6f  ange"}]..set myo
19d0: 70 65 72 61 74 69 6f 6e 20 24 6d 79 6f 70 73 74  peration $myopst
19e0: 61 74 65 28 5b 6c 69 73 74 20 24 70 64 65 61 64  ate([list $pdead
19f0: 20 24 73 64 65 61 64 5d 29 0a 09 72 65 74 75 72   $sdead])..retur
1a00: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23  n.    }..    # #
1a10: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
1a20: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
1a30: 23 23 23 23 0a 20 20 20 20 23 23 20 54 79 70 65  ####.    ## Type
1a40: 20 41 50 49 0a 0a 20 20 20 20 74 79 70 65 6d 65   API..    typeme
1a50: 74 68 6f 64 20 69 73 74 72 75 6e 6b 72 65 76 6e  thod istrunkrevn
1a60: 72 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 72 65 74  r {revnr} {..ret
1a70: 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e  urn [expr {[llen
1a80: 67 74 68 20 5b 73 70 6c 69 74 20 24 72 65 76 6e  gth [split $revn
1a90: 72 20 2e 5d 5d 20 3d 3d 20 32 7d 5d 0a 20 20 20  r .]] == 2}].   
1aa0: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68   }..    typemeth
1ab0: 6f 64 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72  od isbranchrevnr
1ac0: 20 7b 72 65 76 6e 72 20 5f 20 62 76 7d 20 7b 0a   {revnr _ bv} {.
1ad0: 09 69 66 20 7b 5b 72 65 67 65 78 70 20 24 6d 79  .if {[regexp $my
1ae0: 62 72 61 6e 63 68 70 61 74 74 65 72 6e 20 24 72  branchpattern $r
1af0: 65 76 6e 72 20 2d 3e 20 68 65 61 64 20 74 61 69  evnr -> head tai
1b00: 6c 5d 7d 20 7b 0a 09 20 20 20 20 75 70 76 61 72  l]} {..    upvar
1b10: 20 31 20 24 62 76 20 62 72 61 6e 63 68 6e 72 0a   1 $bv branchnr.
1b20: 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 68 6e  .    set branchn
1b30: 72 20 24 7b 68 65 61 64 7d 24 74 61 69 6c 0a 09  r ${head}$tail..
1b40: 20 20 20 20 72 65 74 75 72 6e 20 31 0a 09 7d 0a      return 1..}.
1b50: 09 72 65 74 75 72 6e 20 30 0a 20 20 20 20 7d 0a  .return 0.    }.
1b60: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
1b70: 32 62 72 61 6e 63 68 6e 72 20 7b 72 65 76 6e 72  2branchnr {revnr
1b80: 7d 20 7b 0a 09 23 20 49 6e 70 75 74 20 69 73 20  } {..# Input is 
1b90: 61 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  a branch revisio
1ba0: 6e 20 6e 75 6d 62 65 72 2c 20 69 2e 65 2e 20 61  n number, i.e. a
1bb0: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72   revision number
1bc0: 0a 09 23 20 77 69 74 68 20 61 6e 20 65 76 65 6e  ..# with an even
1bd0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6d 70 6f   number of compo
1be0: 6e 65 6e 74 73 3b 20 66 6f 72 20 65 78 61 6d 70  nents; for examp
1bf0: 6c 65 20 27 32 2e 39 2e 32 2e 31 27 0a 09 23 20  le '2.9.2.1'..# 
1c00: 28 6e 65 76 65 72 20 27 32 2e 39 2e 32 27 20 6e  (never '2.9.2' n
1c10: 6f 72 20 27 32 2e 39 2e 30 2e 32 27 29 2e 20 20  or '2.9.0.2').  
1c20: 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  The return value
1c30: 20 69 73 20 74 68 65 0a 09 23 20 62 72 61 6e 63   is the..# branc
1c40: 68 20 6e 75 6d 62 65 72 20 28 66 6f 72 20 65 78  h number (for ex
1c50: 61 6d 70 6c 65 2c 20 27 32 2e 39 2e 32 27 29 2e  ample, '2.9.2').
1c60: 20 20 46 6f 72 20 74 72 75 6e 6b 20 72 65 76 69    For trunk revi
1c70: 73 69 6f 6e 73 2c 0a 09 23 20 6c 69 6b 65 20 27  sions,..# like '
1c80: 33 2e 34 27 2c 20 77 65 20 72 65 74 75 72 6e 20  3.4', we return 
1c90: 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67  the empty string
1ca0: 2e 0a 0a 09 69 66 20 7b 5b 24 74 79 70 65 20 69  ....if {[$type i
1cb0: 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76  strunkrevnr $rev
1cc0: 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75  nr]} {..    retu
1cd0: 72 6e 20 22 22 0a 09 7d 0a 09 72 65 74 75 72 6e  rn ""..}..return
1ce0: 20 5b 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 5b   [join [lrange [
1cf0: 73 70 6c 69 74 20 24 72 65 76 6e 72 20 2e 5d 20  split $revnr .] 
1d00: 30 20 65 6e 64 2d 31 5d 20 2e 5d 0a 20 20 20 20  0 end-1] .].    
1d10: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f  }..    typemetho
1d20: 64 20 32 62 72 61 6e 63 68 70 61 72 65 6e 74 72  d 2branchparentr
1d30: 65 76 6e 72 20 7b 62 72 61 6e 63 68 6e 72 7d 20  evnr {branchnr} 
1d40: 7b 0a 09 23 20 43 68 6f 70 20 74 68 65 20 6c 61  {..# Chop the la
1d50: 73 74 20 73 65 67 6d 65 6e 74 20 6f 66 66 0a 09  st segment off..
1d60: 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b 6c 72  return [join [lr
1d70: 61 6e 67 65 20 5b 73 70 6c 69 74 20 24 62 72 61  ange [split $bra
1d80: 6e 63 68 6e 72 20 2e 5d 20 30 20 65 6e 64 2d 31  nchnr .] 0 end-1
1d90: 5d 20 2e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ] .].    }..    
1da0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
1db0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
1dc0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53  #######.    ## S
1dd0: 74 61 74 65 0a 0a 20 20 20 20 74 79 70 65 76 61  tate..    typeva
1de0: 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 70  riable mybranchp
1df0: 61 74 74 65 72 6e 20 7b 5e 28 28 3f 3a 5c 64 2b  attern {^((?:\d+
1e00: 5c 2e 5c 64 2b 5c 2e 29 2b 29 28 3f 3a 30 5c 2e  \.\d+\.)+)(?:0\.
1e10: 29 3f 28 5c 64 2b 29 24 7d 0a 20 20 20 20 23 20  )?(\d+)$}.    # 
1e20: 46 69 72 73 74 20 61 20 6e 6f 6e 7a 65 72 6f 20  First a nonzero 
1e30: 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 64  even number of d
1e40: 69 67 69 74 20 67 72 6f 75 70 73 20 77 69 74 68  igit groups with
1e50: 20 74 72 61 69 6c 69 6e 67 20 64 6f 74 0a 20 20   trailing dot.  
1e60: 20 20 23 20 43 56 53 20 74 68 65 6e 20 73 74 69    # CVS then sti
1e70: 63 6b 73 20 61 6e 20 65 78 74 72 61 20 30 20 69  cks an extra 0 i
1e80: 6e 20 68 65 72 65 3b 20 52 43 53 20 64 6f 65 73  n here; RCS does
1e90: 20 6e 6f 74 2e 0a 20 20 20 20 23 20 41 6e 64 20   not..    # And 
1ea0: 74 68 65 20 6c 61 73 74 20 64 69 67 69 74 20 67  the last digit g
1eb0: 72 6f 75 70 2e 0a 0a 20 20 20 20 76 61 72 69 61  roup...    varia
1ec0: 62 6c 65 20 6d 79 72 65 76 6e 72 20 20 20 20 20  ble myrevnr     
1ed0: 7b 7d 20 3b 20 23 20 52 65 76 69 73 69 6f 6e 20  {} ; # Revision 
1ee0: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72 65  number of the re
1ef0: 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69  vision..    vari
1f00: 61 62 6c 65 20 6d 79 64 61 74 65 20 20 20 20 20  able mydate     
1f10: 20 7b 7d 20 3b 20 23 20 54 69 6d 65 73 74 61 6d   {} ; # Timestam
1f20: 70 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f  p of the revisio
1f30: 6e 2c 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65  n, seconds since
1f40: 20 65 70 6f 63 68 0a 20 20 20 20 76 61 72 69 61   epoch.    varia
1f50: 62 6c 65 20 6d 79 6f 72 69 67 64 61 74 65 20 20  ble myorigdate  
1f60: 7b 7d 20 3b 20 23 20 4f 72 69 67 69 6e 61 6c 20  {} ; # Original 
1f70: 75 6e 6d 6f 64 69 66 69 65 64 20 74 69 6d 65 73  unmodified times
1f80: 74 61 6d 70 2e 0a 20 20 20 20 76 61 72 69 61 62  tamp..    variab
1f90: 6c 65 20 6d 79 73 74 61 74 65 20 20 20 20 20 7b  le mystate     {
1fa0: 7d 20 3b 20 23 20 53 74 61 74 65 20 6f 66 20 74  } ; # State of t
1fb0: 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20  he revision..   
1fc0: 20 76 61 72 69 61 62 6c 65 20 6d 79 66 69 6c 65   variable myfile
1fd0: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66        {} ; # Ref
1fe0: 20 74 6f 20 74 68 65 20 66 69 6c 65 20 6f 62 6a   to the file obj
1ff0: 65 63 74 20 74 68 65 20 72 65 76 69 73 69 6f 6e  ect the revision
2000: 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20   belongs to..   
2010: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 65 78 74   variable mytext
2020: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 61 6e        {} ; # Ran
2030: 67 65 20 6f 66 20 74 68 65 20 28 64 65 6c 74 61  ge of the (delta
2040: 29 20 74 65 78 74 20 66 6f 72 20 74 68 69 73 20  ) text for this 
2050: 72 65 76 69 73 69 6f 6e 20 69 6e 20 74 68 65 20  revision in the 
2060: 66 69 6c 65 2e 0a 20 20 20 20 76 61 72 69 61 62  file..    variab
2070: 6c 65 20 6d 79 6d 65 74 61 69 64 20 20 20 20 7b  le mymetaid    {
2080: 7d 20 3b 20 23 20 49 64 20 6f 66 20 74 68 65 20  } ; # Id of the 
2090: 6d 65 74 61 20 64 61 74 61 20 67 72 6f 75 70 20  meta data group 
20a0: 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 09 09  the revision....
20b0: 20 20 20 20 20 20 23 20 62 65 6c 6f 6e 67 73 20        # belongs 
20c0: 74 6f 2e 20 54 68 69 73 20 69 73 20 6c 61 74 65  to. This is late
20d0: 72 20 75 73 65 64 20 74 6f 20 70 75 74 0a 09 09  r used to put...
20e0: 09 20 20 20 20 20 20 23 20 74 68 65 20 66 69 6c  .      # the fil
20f0: 65 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 74 6f  e revisions into
2100: 20 70 72 65 6c 69 6d 69 6e 61 72 79 0a 09 09 09   preliminary....
2110: 20 20 20 20 20 20 23 20 63 68 61 6e 67 65 73 65        # changese
2120: 74 73 20 28 61 6b 61 20 70 72 6f 6a 65 63 74 20  ts (aka project 
2130: 72 65 76 69 73 69 6f 6e 73 29 2e 0a 09 09 09 20  revisions)..... 
2140: 20 20 20 20 20 23 20 54 68 69 73 20 69 64 20 65       # This id e
2150: 6e 63 6f 64 65 73 20 34 20 70 69 65 63 65 73 20  ncodes 4 pieces 
2160: 6f 66 20 64 61 74 61 2c 0a 09 09 09 20 20 20 20  of data,....    
2170: 20 20 23 20 6e 61 6d 65 6c 79 3a 20 74 68 65 20    # namely: the 
2180: 70 72 6f 6a 65 63 74 20 61 6e 64 20 62 72 61 6e  project and bran
2190: 63 68 20 74 68 65 0a 09 09 09 20 20 20 20 20 20  ch the....      
21a0: 23 20 72 65 76 69 73 69 6f 6e 20 77 61 73 20 63  # revision was c
21b0: 6f 6d 6d 69 74 74 65 64 20 74 6f 2c 20 74 68 65  ommitted to, the
21c0: 20 61 75 74 68 6f 72 0a 09 09 09 20 20 20 20 20   author....     
21d0: 20 23 20 77 68 6f 20 64 69 64 20 74 68 65 20 63   # who did the c
21e0: 6f 6d 6d 69 74 2c 20 61 6e 64 20 74 68 65 20 6d  ommit, and the m
21f0: 65 73 73 61 67 65 0a 09 09 09 20 20 20 20 20 20  essage....      
2200: 23 20 75 73 65 64 2e 0a 20 20 20 20 76 61 72 69  # used..    vari
2210: 61 62 6c 65 20 6d 79 6c 6f 64 20 20 20 20 20 20  able mylod      
2220: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63   {} ; # Referenc
2230: 65 20 74 6f 20 74 68 65 20 6c 69 6e 65 2d 6f 66  e to the line-of
2240: 2d 64 65 76 65 6c 6f 70 6d 65 6e 74 0a 09 09 09  -development....
2250: 20 20 20 20 20 20 23 20 6f 62 6a 65 63 74 20 74        # object t
2260: 68 65 20 72 65 76 69 73 69 6f 6e 20 62 65 6c 6f  he revision belo
2270: 6e 67 73 20 74 6f 2e 20 41 6e 0a 09 09 09 20 20  ngs to. An....  
2280: 20 20 20 20 23 20 61 6c 74 65 72 6e 61 74 69 76      # alternativ
2290: 65 20 69 64 69 6f 6d 20 77 6f 75 6c 64 20 62 65  e idiom would be
22a0: 20 74 6f 20 63 61 6c 6c 20 69 74 0a 09 09 09 20   to call it.... 
22b0: 20 20 20 20 20 23 20 74 68 65 20 62 72 61 6e 63       # the branc
22c0: 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 69  h the revision i
22d0: 73 20 6f 6e 2e 20 54 68 69 73 0a 09 09 09 20 20  s on. This....  
22e0: 20 20 20 20 23 20 72 65 66 65 72 65 6e 63 65 20      # reference 
22f0: 69 73 20 74 6f 20 61 20 70 72 6f 6a 65 63 74 2d  is to a project-
2300: 6c 65 76 65 6c 20 6f 62 6a 65 63 74 0a 09 09 09  level object....
2310: 20 20 20 20 20 20 23 20 28 73 79 6d 62 6f 6c 20        # (symbol 
2320: 6f 72 20 74 72 75 6e 6b 29 2e 0a 0a 20 20 20 20  or trunk)...    
2330: 23 20 42 61 73 69 63 20 70 61 72 65 6e 74 2f 63  # Basic parent/c
2340: 68 69 6c 64 20 6c 69 6e 6b 61 67 65 20 28 6c 69  hild linkage (li
2350: 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65  nes of developme
2360: 6e 74 29 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  nt)..    variabl
2370: 65 20 6d 79 70 61 72 65 6e 74 20 7b 7d 20 3b 20  e myparent {} ; 
2380: 23 20 52 65 66 20 74 6f 20 70 61 72 65 6e 74 20  # Ref to parent 
2390: 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e  revision object.
23a0: 20 4c 69 6e 6b 20 72 65 71 75 69 72 65 64 20 62   Link required b
23b0: 65 63 61 75 73 65 20 6f 66 0a 20 20 20 20 23 20  ecause of.    # 
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d0: 20 20 20 3b 20 23 20 27 63 76 73 61 64 6d 69 6e     ; # 'cvsadmin
23e0: 20 2d 6f 27 2c 20 77 68 69 63 68 20 63 61 6e 20   -o', which can 
23f0: 63 72 65 61 74 65 20 61 72 62 69 74 72 61 72 79  create arbitrary
2400: 20 67 61 70 73 20 69 6e 20 74 68 65 0a 20 20 20   gaps in the.   
2410: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
2420: 20 20 20 20 20 20 3b 20 23 20 6e 75 6d 62 65 72        ; # number
2430: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 54 68  ing sequence. Th
2440: 69 73 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d  is is in the sam
2450: 65 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f  e line of develo
2460: 70 6d 65 6e 74 0a 20 20 20 20 23 20 20 20 20 20  pment.    #     
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
2480: 20 23 20 4e 6f 74 65 3a 20 46 6f 72 20 74 68 65   # Note: For the
2490: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20   first revision 
24a0: 6f 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65 20  on a branch the 
24b0: 72 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 20  revision.    #  
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d0: 20 20 3b 20 23 20 69 74 20 77 61 73 20 73 70 61    ; # it was spa
24e0: 77 6e 65 64 20 66 72 6f 6d 20 69 73 20 74 68 65  wned from is the
24f0: 20 70 61 72 65 6e 74 2e 20 4f 6e 6c 79 20 74 68   parent. Only th
2500: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 0a  e root revision.
2510: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
2520: 20 20 20 20 20 20 20 20 20 3b 20 23 20 6f 66 20           ; # of 
2530: 6d 79 66 69 6c 65 27 73 20 72 65 76 69 73 69 6f  myfile's revisio
2540: 6e 20 74 72 65 65 20 68 61 73 20 6e 6f 74 68 69  n tree has nothi
2550: 6e 67 20 73 65 74 20 68 65 72 65 2e 0a 20 20 20  ng set here..   
2560: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
2570: 20 20 20 20 20 20 3b 20 23 0a 0a 20 20 20 20 76        ; #..    v
2580: 61 72 69 61 62 6c 65 20 6d 79 63 68 69 6c 64 20  ariable mychild 
2590: 20 7b 7d 20 3b 20 23 20 52 65 66 20 74 6f 20 74   {} ; # Ref to t
25a0: 68 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64  he primary child
25b0: 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74   revision object
25c0: 2c 20 69 2e 65 2e 20 74 68 65 20 6e 65 78 74 0a  , i.e. the next.
25d0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
25e0: 20 20 20 20 20 20 20 20 20 3b 20 23 20 72 65 76           ; # rev
25f0: 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 73 61 6d  ision in the sam
2600: 65 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f  e line of develo
2610: 70 6d 65 6e 74 2e 0a 0a 20 20 20 20 23 20 42 72  pment...    # Br
2620: 61 6e 63 68 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f  anch linkage ___
2630: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
2640: 5f 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  _..    variable 
2650: 6d 79 62 72 61 6e 63 68 65 73 20 20 20 20 20 7b  mybranches     {
2660: 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 74 68  } ; # List of th
2670: 65 20 62 72 61 6e 63 68 65 73 20 28 6f 62 6a 73  e branches (objs
2680: 29 20 73 70 61 77 6e 65 64 20 62 79 20 74 68 69  ) spawned by thi
2690: 73 20 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20  s revision..    
26a0: 76 61 72 69 61 62 6c 65 20 6d 79 70 61 72 65 6e  variable myparen
26b0: 74 62 72 61 6e 63 68 20 7b 7d 20 3b 20 23 20 46  tbranch {} ; # F
26c0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 72 65 76  or the first rev
26d0: 69 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63  ision on a branc
26e0: 68 20 74 68 65 20 72 65 6c 65 76 61 6e 74 0a 20  h the relevant. 
26f0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20     #            
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
2710: 23 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 2e  # branch object.
2720: 20 54 68 69 73 20 61 6c 73 6f 20 61 6c 6c 6f 77   This also allow
2730: 73 20 75 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  s us to determin
2740: 65 20 69 66 0a 20 20 20 20 23 20 20 20 20 20 20  e if.    #      
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2760: 20 20 20 20 3b 20 23 20 6d 79 70 61 72 65 6e 74      ; # myparent
2770: 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20   is in the same 
2780: 4c 4f 44 2c 20 6f 72 20 74 68 65 20 72 65 76 69  LOD, or the revi
2790: 73 69 6f 6e 20 74 68 65 0a 20 20 20 20 23 20 20  sion the.    #  
27a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b0: 20 20 20 20 20 20 20 20 3b 20 23 20 62 72 61 6e          ; # bran
27c0: 63 68 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 2e  ch spawned from.
27d0: 0a 0a 20 20 20 20 23 20 4c 69 73 74 20 6f 66 20  ..    # List of 
27e0: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a  the revision obj
27f0: 65 63 74 73 20 6f 66 20 74 68 65 20 66 69 72 73  ects of the firs
2800: 74 20 63 6f 6d 6d 69 74 73 20 6f 6e 20 61 6e 79  t commits on any
2810: 0a 20 20 20 20 23 20 62 72 61 6e 63 68 65 73 20  .    # branches 
2820: 73 70 61 77 6e 65 64 20 62 79 20 74 68 69 73 20  spawned by this 
2830: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 77 68 69 63  revision on whic
2840: 68 20 63 6f 6d 6d 69 74 73 20 6f 63 63 75 72 72  h commits occurr
2850: 65 64 2e 0a 20 20 20 20 23 20 54 68 69 73 20 64  ed..    # This d
2860: 65 70 65 6e 64 65 6e 63 79 20 69 73 20 6b 65 70  ependency is kep
2870: 74 20 65 78 70 6c 69 63 69 74 6c 79 20 62 65 63  t explicitly bec
2880: 61 75 73 65 20 6f 74 68 65 72 77 69 73 65 20 61  ause otherwise a
2890: 0a 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2d  .    # revision-
28a0: 6f 6e 6c 79 20 74 6f 70 6f 6c 6f 67 69 63 61 6c  only topological
28b0: 20 73 6f 72 74 20 77 6f 75 6c 64 20 6d 69 73 73   sort would miss
28c0: 20 74 68 65 20 64 65 70 65 6e 64 65 6e 63 79 20   the dependency 
28d0: 74 68 61 74 0a 20 20 20 20 23 20 65 78 69 73 74  that.    # exist
28e0: 73 20 76 69 61 20 2d 3e 20 6d 79 62 72 61 6e 63  s via -> mybranc
28f0: 68 65 73 2e 0a 0a 20 20 20 20 76 61 72 69 61 62  hes...    variab
2900: 6c 65 20 6d 79 62 72 61 6e 63 68 63 68 69 6c 64  le mybranchchild
2910: 72 65 6e 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20  ren {} ; # List 
2920: 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73  of the revisions
2930: 20 28 6f 62 6a 73 29 20 77 68 69 63 68 20 61 72   (objs) which ar
2940: 65 20 74 68 65 20 66 69 72 73 74 0a 20 20 20 20  e the first.    
2950: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
2970: 20 63 6f 6d 6d 69 74 73 20 6f 6e 20 61 6e 79 20   commits on any 
2980: 6f 66 20 74 68 65 20 62 72 61 6e 63 68 65 73 20  of the branches 
2990: 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 74 68 69  spawned from thi
29a0: 73 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  s.    #         
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c0: 20 20 20 3b 20 23 20 72 65 76 69 73 69 6f 6e 2e     ; # revision.
29d0: 20 54 68 65 20 64 65 70 65 6e 64 65 6e 63 79 20   The dependency 
29e0: 69 73 20 6b 65 70 74 20 65 78 70 6c 69 63 69 74  is kept explicit
29f0: 6c 79 20 74 6f 0a 20 20 20 20 23 20 20 20 20 20  ly to.    #     
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a10: 20 20 20 20 20 20 20 3b 20 23 20 65 6e 73 75 72         ; # ensur
2a20: 65 20 74 68 61 74 20 61 20 72 65 76 69 73 69 6f  e that a revisio
2a30: 6e 2d 6f 6e 6c 79 20 74 6f 70 6f 6c 6f 67 69 63  n-only topologic
2a40: 61 6c 20 73 6f 72 74 20 77 69 6c 6c 0a 20 20 20  al sort will.   
2a50: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
2a70: 23 20 6e 6f 74 20 6d 69 73 73 20 69 74 2c 20 61  # not miss it, a
2a80: 73 20 69 74 20 6f 74 68 65 72 77 69 73 65 20 65  s it otherwise e
2a90: 78 69 73 74 73 20 6f 6e 6c 79 20 76 69 61 0a 20  xists only via. 
2aa0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20     #            
2ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac0: 3b 20 23 20 6d 79 62 72 61 6e 63 68 65 73 2e 0a  ; # mybranches..
2ad0: 0a 20 20 20 20 23 20 54 61 67 20 6c 69 6e 6b 61  .    # Tag linka
2ae0: 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ge _____________
2af0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20  ___________..   
2b00: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 61 67 73   variable mytags
2b10: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20   {} ; # List of 
2b20: 74 61 67 73 20 28 6f 62 6a 73 29 20 61 73 73 6f  tags (objs) asso
2b30: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
2b40: 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 20 20 20 20   revision...    
2b50: 23 20 4d 6f 72 65 20 64 65 72 69 76 65 64 20 64  # More derived d
2b60: 61 74 61 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  ata..    variabl
2b70: 65 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20 20 20  e myoperation   
2b80: 20 20 20 20 20 7b 7d 20 3b 20 23 20 4f 6e 65 20       {} ; # One 
2b90: 6f 66 20 27 61 64 64 27 2c 20 27 63 68 61 6e 67  of 'add', 'chang
2ba0: 65 27 2c 20 27 64 65 6c 65 74 65 27 2c 20 6f 72  e', 'delete', or
2bb0: 0a 09 09 09 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2bc0: 20 23 20 27 6e 6f 74 68 69 6e 67 27 2e 20 44 65   # 'nothing'. De
2bd0: 72 69 76 65 64 20 66 72 6f 6d 20 6f 75 72 20 61  rived from our a
2be0: 6e 64 0a 09 09 09 20 20 20 20 20 20 20 20 20 20  nd....          
2bf0: 20 20 20 23 20 69 74 73 20 70 61 72 65 6e 74 27     # its parent'
2c00: 73 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72  s state..    var
2c10: 69 61 62 6c 65 20 6d 79 69 73 6f 6e 64 65 66 61  iable myisondefa
2c20: 75 6c 74 62 72 61 6e 63 68 20 30 20 3b 20 23 20  ultbranch 0 ; # 
2c30: 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2c 20 73 65  Boolean flag, se
2c40: 74 20 69 66 20 74 68 65 0a 09 09 09 09 20 20 20  t if the.....   
2c50: 20 20 23 20 72 65 76 69 73 69 6f 6e 20 69 73 20    # revision is 
2c60: 6f 6e 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b  on the non-trunk
2c70: 0a 09 09 09 09 20 20 20 20 20 23 20 64 65 66 61  .....     # defa
2c80: 75 6c 74 20 62 72 61 6e 63 68 2c 20 61 6b 61 20  ult branch, aka 
2c90: 76 65 6e 64 6f 72 0a 09 09 09 09 20 20 20 20 20  vendor.....     
2ca0: 23 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61  # branch..    va
2cb0: 72 69 61 62 6c 65 20 6d 79 64 62 70 61 72 65 6e  riable mydbparen
2cc0: 74 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23  t         {} ; #
2cd0: 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68   Reference to th
2ce0: 65 20 6c 61 73 74 20 72 65 76 69 73 69 6f 6e 0a  e last revision.
2cf0: 09 09 09 09 20 20 20 20 20 23 20 6f 6e 20 74 68  ....     # on th
2d00: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20  e vendor branch 
2d10: 69 66 20 74 68 69 73 20 69 73 0a 09 09 09 09 20  if this is..... 
2d20: 20 20 20 20 23 20 74 68 65 20 70 72 69 6d 61 72      # the primar
2d30: 79 20 63 68 69 6c 64 20 6f 66 20 74 68 65 0a 09  y child of the..
2d40: 09 09 09 20 20 20 20 20 23 20 72 65 67 75 6c 61  ...     # regula
2d50: 72 20 72 6f 6f 74 2e 0a 20 20 20 20 76 61 72 69  r root..    vari
2d60: 61 62 6c 65 20 6d 79 64 62 63 68 69 6c 64 20 20  able mydbchild  
2d70: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52          {} ; # R
2d80: 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20  eference to the 
2d90: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 09  primary child...
2da0: 09 09 20 20 20 20 20 23 20 6f 66 20 74 68 65 20  ..     # of the 
2db0: 72 65 67 75 6c 61 72 20 72 6f 6f 74 20 69 66 20  regular root if 
2dc0: 74 68 69 73 20 69 73 0a 09 09 09 09 20 20 20 20  this is.....    
2dd0: 20 23 20 74 68 65 20 6c 61 73 74 20 72 65 76 69   # the last revi
2de0: 73 69 6f 6e 20 6f 6e 20 74 68 65 20 76 65 6e 64  sion on the vend
2df0: 6f 72 0a 09 09 09 09 20 20 20 20 20 23 20 62 72  or.....     # br
2e00: 61 6e 63 68 2e 0a 0a 20 20 20 20 23 20 64 65 61  anch...    # dea
2e10: 64 28 73 65 6c 66 29 20 78 20 64 65 61 64 28 70  d(self) x dead(p
2e20: 61 72 65 6e 74 29 20 2d 3e 20 6f 70 65 72 61 74  arent) -> operat
2e30: 69 6f 6e 0a 20 20 20 20 74 79 70 65 76 61 72 69  ion.    typevari
2e40: 61 62 6c 65 20 6d 79 6f 70 73 74 61 74 65 20 2d  able myopstate -
2e50: 61 72 72 61 79 20 7b 0a 09 7b 30 20 30 7d 20 63  array {..{0 0} c
2e60: 68 61 6e 67 65 0a 09 7b 30 20 31 7d 20 64 65 6c  hange..{0 1} del
2e70: 65 74 65 0a 09 7b 31 20 30 7d 20 61 64 64 0a 09  ete..{1 0} add..
2e80: 7b 31 20 31 7d 20 6e 6f 74 68 69 6e 67 0a 20 20  {1 1} nothing.  
2e90: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20    }..    # # ## 
2ea0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
2eb0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
2ec0: 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c  .    ## Internal
2ed0: 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 23 20   methods..    # 
2ee0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
2ef0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
2f00: 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e  #####.    ## Con
2f10: 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20  figuration..    
2f20: 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69  pragma -hastypei
2f30: 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e  nfo    no  ; # n
2f40: 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65 63  o type introspec
2f50: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20  tion.    pragma 
2f60: 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20 20  -hasinfo        
2f70: 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 63  no  ; # no objec
2f80: 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a  t introspection.
2f90: 20 20 20 20 70 72 61 67 6d 61 20 2d 73 69 6d 70      pragma -simp
2fa0: 6c 65 64 69 73 70 61 74 63 68 20 79 65 73 20 3b  ledispatch yes ;
2fb0: 20 23 20 73 69 6d 70 6c 65 20 66 61 73 74 20 64   # simple fast d
2fc0: 69 73 70 61 74 63 68 0a 0a 20 20 20 20 23 20 23  ispatch..    # #
2fd0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
2fe0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
2ff0: 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63  ####.}..namespac
3000: 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73  e eval ::vc::fos
3010: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
3020: 3a 3a 66 69 6c 65 20 7b 0a 20 20 20 20 6e 61 6d  ::file {.    nam
3030: 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 72 65  espace export re
3040: 76 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  v.    namespace 
3050: 65 76 61 6c 20 72 65 76 20 7b 0a 09 6e 61 6d 65  eval rev {..name
3060: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
3070: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a  c::tools::misc::
3080: 2a 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23  *.    }.}..# # #
3090: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
30a0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
30b0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
30c0: 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 61 64  ########.## Read
30d0: 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69  y..package provi
30e0: 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69  de vc::fossil::i
30f0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65  mport::cvs::file
3100: 3a 3a 72 65 76 20 31 2e 30 0a 72 65 74 75 72 6e  ::rev 1.0.return
3110: 0a                                               .