Hex Artifact Content
Not logged in

Artifact 4ade9049c69c82a66e2552c3e423f9bf5a6a23ef:

File tools/lib/cvs_csets.tcl part of check-in [72dac950c3] - Continued work on the import of branches. Main principle now is to handle the branches vertically. First the trunk, then the branch starting with the first unprocessed changeset, and so forth. Looks more promising than the previous approach. Currently handles just a bit over half of the test projects (11 of 21 in 6 repositories). by aku on 2007-09-26 05:06:18.

0000: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  # --------------
0010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
0050: 23 20 52 65 70 6f 73 69 74 6f 72 79 20 6d 61 6e  # Repository man
0060: 61 67 65 6d 65 6e 74 20 28 43 56 53 29 2c 20 43  agement (CVS), C
0070: 68 61 6e 67 65 73 65 74 20 67 72 6f 75 70 69 6e  hangeset groupin
0080: 67 20 61 6e 64 20 73 74 6f 72 61 67 65 2e 0a 0a  g and storage...
0090: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  # --------------
00a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
00b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
00c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
00d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
00e0: 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a 0a  # Requirements..
00f0: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0100: 54 63 6c 20 38 2e 34 0a 70 61 63 6b 61 67 65 20  Tcl 8.4.package 
0110: 72 65 71 75 69 72 65 20 76 63 3a 3a 63 76 73 3a  require vc::cvs:
0120: 3a 77 73 3a 3a 73 69 67 20 20 20 20 20 20 3b 20  :ws::sig      ; 
0130: 23 20 43 68 61 6e 67 65 73 65 74 20 66 69 6c 65  # Changeset file
0140: 2f 72 65 76 20 73 69 67 6e 61 74 75 72 65 73 0a  /rev signatures.
0150: 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
0160: 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63  ::vc::cvs::ws::c
0170: 73 65 74 73 3a 3a 43 75 72 72 65 6e 74 20 7b 7d  sets::Current {}
0180: 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
0190: 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63  ::vc::cvs::ws::c
01a0: 73 65 74 73 3a 3a 73 69 67 20 7b 0a 20 20 20 20  sets::sig {.    
01b0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
01c0: 20 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a   ::vc::cvs::ws::
01d0: 73 69 67 3a 3a 2a 0a 7d 0a 0a 23 20 2d 2d 2d 2d  sig::*.}..# ----
01e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
01f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 41 50 49 0a  ---------.# API.
0230: 0a 23 20 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a  .# vc::cvs::ws::
0240: 63 73 65 74 73 3a 3a 69 6e 69 74 20 20 20 2d 20  csets::init   - 
0250: 49 6e 69 74 69 61 6c 69 7a 65 20 61 63 63 75 6d  Initialize accum
0260: 75 6c 61 74 6f 72 0a 23 20 76 63 3a 3a 63 76 73  ulator.# vc::cvs
0270: 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 61 64 64  ::ws::csets::add
0280: 20 20 20 20 2d 20 41 64 64 20 74 69 6d 65 6c 69      - Add timeli
0290: 6e 65 20 65 6e 74 72 79 20 74 6f 20 61 63 63 75  ne entry to accu
02a0: 6d 75 6c 6f 72 2c 20 6d 61 79 20 67 65 6e 65 72  mulor, may gener
02b0: 61 74 65 20 6e 65 77 20 63 73 65 74 0a 23 20 76  ate new cset.# v
02c0: 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74  c::cvs::ws::cset
02d0: 73 3a 3a 64 6f 6e 65 20 20 20 2d 20 43 6f 6d 70  s::done   - Comp
02e0: 6c 65 74 65 20 63 73 65 74 20 67 65 6e 65 72 61  lete cset genera
02f0: 74 69 6f 6e 2e 0a 23 0a 23 20 76 63 3a 3a 63 76  tion..#.# vc::cv
0300: 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 67 65  s::ws::csets::ge
0310: 74 20 69 64 20 2d 20 47 65 74 20 64 61 74 61 20  t id - Get data 
0320: 6f 66 20 61 20 63 73 65 74 2e 0a 23 20 76 63 3a  of a cset..# vc:
0330: 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a  :cvs::ws::csets:
0340: 3a 6e 75 6d 20 20 20 20 2d 20 47 65 74 20 6e 75  :num    - Get nu
0350: 6d 62 65 72 20 6f 66 20 63 73 65 74 73 2e 0a 0a  mber of csets...
0360: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  # --------------
0370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
03b0: 23 20 41 50 49 20 49 6d 70 6c 65 6d 65 6e 74 61  # API Implementa
03c0: 74 69 6f 6e 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a  tion..proc ::vc:
03d0: 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a  :cvs::ws::csets:
03e0: 3a 69 6e 69 74 20 7b 7d 20 7b 0a 20 20 20 20 76  :init {} {.    v
03f0: 61 72 69 61 62 6c 65 20 6e 63 73 20 30 0a 20 20  ariable ncs 0.  
0400: 20 20 43 75 72 72 65 6e 74 3a 3a 43 6c 65 61 72    Current::Clear
0410: 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70  .    return.}..p
0420: 72 6f 63 20 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77  roc ::vc::cvs::w
0430: 73 3a 3a 63 73 65 74 73 3a 3a 61 64 64 20 7b 64  s::csets::add {d
0440: 61 74 65 20 66 69 6c 65 20 72 65 76 69 73 69 6f  ate file revisio
0450: 6e 20 6f 70 65 72 61 74 69 6f 6e 20 61 75 74 68  n operation auth
0460: 6f 72 20 63 6d 73 67 7d 20 7b 0a 20 20 20 20 69  or cmsg} {.    i
0470: 66 20 7b 21 5b 43 75 72 72 65 6e 74 3a 3a 45 6d  f {![Current::Em
0480: 70 74 79 5d 20 26 26 20 5b 43 75 72 72 65 6e 74  pty] && [Current
0490: 3a 3a 4e 65 77 20 24 66 69 6c 65 20 24 72 65 76  ::New $file $rev
04a0: 69 73 69 6f 6e 20 24 61 75 74 68 6f 72 20 24 63  ision $author $c
04b0: 6d 73 67 5d 7d 20 7b 0a 09 53 61 76 65 20 5b 43  msg]} {..Save [C
04c0: 75 72 72 65 6e 74 3a 3a 43 6f 6d 70 6c 65 74 65  urrent::Complete
04d0: 5d 0a 20 20 20 20 7d 0a 20 20 20 20 43 75 72 72  ].    }.    Curr
04e0: 65 6e 74 3a 3a 41 64 64 20 24 64 61 74 65 20 24  ent::Add $date $
04f0: 66 69 6c 65 20 24 72 65 76 69 73 69 6f 6e 20 24  file $revision $
0500: 6f 70 65 72 61 74 69 6f 6e 20 24 61 75 74 68 6f  operation $autho
0510: 72 20 24 63 6d 73 67 0a 20 20 20 20 72 65 74 75  r $cmsg.    retu
0520: 72 6e 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a  rn.}..proc ::vc:
0530: 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a  :cvs::ws::csets:
0540: 3a 64 6f 6e 65 20 7b 7d 20 7b 0a 20 20 20 20 69  :done {} {.    i
0550: 66 20 7b 21 5b 43 75 72 72 65 6e 74 3a 3a 45 6d  f {![Current::Em
0560: 70 74 79 5d 7d 20 7b 0a 09 53 61 76 65 20 5b 43  pty]} {..Save [C
0570: 75 72 72 65 6e 74 3a 3a 43 6f 6d 70 6c 65 74 65  urrent::Complete
0580: 5d 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ].    }.    retu
0590: 72 6e 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a  rn.}..proc ::vc:
05a0: 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a  :cvs::ws::csets:
05b0: 3a 67 65 74 20 7b 69 64 7d 20 7b 0a 20 20 20 20  :get {id} {.    
05c0: 76 61 72 69 61 62 6c 65 20 63 73 65 74 73 0a 20  variable csets. 
05d0: 20 20 20 72 65 74 75 72 6e 20 20 24 63 73 65 74     return  $cset
05e0: 73 28 24 69 64 29 0a 7d 0a 0a 0a 70 72 6f 63 20  s($id).}...proc 
05f0: 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63  ::vc::cvs::ws::c
0600: 73 65 74 73 3a 3a 44 55 4d 50 20 7b 69 64 7d 20  sets::DUMP {id} 
0610: 7b 0a 20 20 20 20 70 75 74 73 20 2f 24 7b 69 64  {.    puts /${id
0620: 7d 2f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  }/______________
0630: 5f 5f 5f 0a 20 20 20 20 61 72 72 61 79 20 73 65  ___.    array se
0640: 74 20 63 73 20 5b 67 65 74 20 24 69 64 5d 0a 20  t cs [get $id]. 
0650: 20 20 20 70 61 72 72 61 79 20 63 73 0a 20 20 20     parray cs.   
0660: 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20   return.}..proc 
0670: 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63  ::vc::cvs::ws::c
0680: 73 65 74 73 3a 3a 6e 75 6d 20 7b 7d 20 7b 0a 20  sets::num {} {. 
0690: 20 20 20 76 61 72 69 61 62 6c 65 20 63 73 65 74     variable cset
06a0: 73 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 61 72  s.    return [ar
06b0: 72 61 79 20 73 69 7a 65 20 63 73 65 74 73 5d 0a  ray size csets].
06c0: 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a 3a 63 76  }..proc ::vc::cv
06d0: 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 69 73  s::ws::csets::is
06e0: 54 72 75 6e 6b 20 7b 69 64 7d 20 7b 0a 20 20 20  Trunk {id} {.   
06f0: 20 76 61 72 69 61 62 6c 65 20 63 73 65 74 73 0a   variable csets.
0700: 20 20 20 20 61 72 72 61 79 20 73 65 74 20 63 73      array set cs
0710: 20 24 63 73 65 74 73 28 24 69 64 29 0a 20 20 20   $csets($id).   
0720: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24   return [expr {$
0730: 63 73 28 6c 61 73 74 64 29 20 3d 3d 20 32 7d 5d  cs(lastd) == 2}]
0740: 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a 3a 63  .}..proc ::vc::c
0750: 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 73  vs::ws::csets::s
0760: 65 74 50 61 72 65 6e 74 4f 66 20 7b 69 64 20 70  etParentOf {id p
0770: 61 72 65 6e 74 7d 20 7b 0a 20 20 20 20 76 61 72  arent} {.    var
0780: 69 61 62 6c 65 20 63 73 65 74 73 0a 20 20 20 20  iable csets.    
0790: 6c 61 70 70 65 6e 64 20 20 63 73 65 74 73 28 24  lappend  csets($
07a0: 69 64 29 20 70 61 72 65 6e 74 20 24 70 61 72 65  id) parent $pare
07b0: 6e 74 0a 0a 20 20 20 20 61 72 72 61 79 20 73 65  nt..    array se
07c0: 74 20 63 73 20 24 63 73 65 74 73 28 24 69 64 29  t cs $csets($id)
07d0: 0a 20 20 20 20 73 69 67 3a 3a 64 65 66 20 20 20  .    sig::def   
07e0: 20 20 20 20 20 20 20 20 20 24 69 64 20 24 70 61           $id $pa
07f0: 72 65 6e 74 20 24 63 73 28 61 64 64 65 64 29 20  rent $cs(added) 
0800: 24 63 73 28 63 68 61 6e 67 65 64 29 20 24 63 73  $cs(changed) $cs
0810: 28 72 65 6d 6f 76 65 64 29 0a 20 20 20 20 72 65  (removed).    re
0820: 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76  turn.}..proc ::v
0830: 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74  c::cvs::ws::cset
0840: 73 3a 3a 70 61 72 65 6e 74 4f 66 20 7b 69 64 7d  s::parentOf {id}
0850: 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20   {.    variable 
0860: 20 20 20 20 20 63 73 65 74 73 0a 20 20 20 20 61       csets.    a
0870: 72 72 61 79 20 73 65 74 20 63 73 20 24 63 73 65  rray set cs $cse
0880: 74 73 28 24 69 64 29 0a 20 20 20 20 72 65 74 75  ts($id).    retu
0890: 72 6e 20 20 20 24 63 73 28 70 61 72 65 6e 74 29  rn   $cs(parent)
08a0: 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a 3a 63  .}..proc ::vc::c
08b0: 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 73  vs::ws::csets::s
08c0: 61 6d 65 42 72 61 6e 63 68 20 7b 69 64 20 70 61  ameBranch {id pa
08d0: 72 65 6e 74 20 74 61 67 7d 20 7b 0a 20 20 20 20  rent tag} {.    
08e0: 76 61 72 69 61 62 6c 65 20 20 20 20 20 20 63 73  variable      cs
08f0: 65 74 73 0a 20 20 20 20 61 72 72 61 79 20 73 65  ets.    array se
0900: 74 20 63 73 20 24 63 73 65 74 73 28 24 69 64 29  t cs $csets($id)
0910: 0a 20 20 20 20 72 65 74 75 72 6e 20 5b 73 69 67  .    return [sig
0920: 3a 3a 6e 65 78 74 20 24 70 61 72 65 6e 74 20 24  ::next $parent $
0930: 63 73 28 61 64 64 65 64 29 20 24 63 73 28 63 68  cs(added) $cs(ch
0940: 61 6e 67 65 64 29 20 24 63 73 28 72 65 6d 6f 76  anged) $cs(remov
0950: 65 64 29 20 24 74 61 67 20 24 63 73 28 64 61 74  ed) $tag $cs(dat
0960: 65 29 5d 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d  e)].}..# -------
0970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09b0: 2d 2d 2d 2d 2d 2d 0a 23 20 49 6e 74 65 72 6e 61  ------.# Interna
09c0: 6c 20 68 65 6c 70 65 72 20 63 6f 6d 6d 61 6e 64  l helper command
09d0: 73 3a 20 43 68 61 6e 67 65 73 65 74 20 69 6e 73  s: Changeset ins
09e0: 70 65 63 74 69 6f 6e 20 61 6e 64 20 63 6f 6e 73  pection and cons
09f0: 74 72 75 63 74 69 6f 6e 2e 0a 0a 70 72 6f 63 20  truction...proc 
0a00: 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63  ::vc::cvs::ws::c
0a10: 73 65 74 73 3a 3a 53 61 76 65 20 7b 64 61 74 61  sets::Save {data
0a20: 7d 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c 65  } {.    variable
0a30: 20 63 73 65 74 73 0a 20 20 20 20 76 61 72 69 61   csets.    varia
0a40: 62 6c 65 20 6e 63 73 0a 0a 20 20 20 20 73 65 74  ble ncs..    set
0a50: 20 63 73 65 74 73 28 24 6e 63 73 29 20 24 64 61   csets($ncs) $da
0a60: 74 61 0a 20 20 20 20 69 6e 63 72 20 6e 63 73 0a  ta.    incr ncs.
0a70: 20 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72      return.}..pr
0a80: 6f 63 20 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73  oc ::vc::cvs::ws
0a90: 3a 3a 63 73 65 74 73 3a 3a 43 75 72 72 65 6e 74  ::csets::Current
0aa0: 3a 3a 43 6c 65 61 72 20 7b 7d 20 7b 0a 20 20 20  ::Clear {} {.   
0ab0: 20 76 61 72 69 61 62 6c 65 20 20 20 20 73 74 61   variable    sta
0ac0: 72 74 20 20 20 7b 7d 20 3b 20 23 20 64 61 74 65  rt   {} ; # date
0ad0: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 62   the changeset b
0ae0: 65 67 69 6e 73 0a 20 20 20 20 76 61 72 69 61 62  egins.    variab
0af0: 6c 65 20 20 20 20 63 6d 73 67 20 20 20 20 7b 7d  le    cmsg    {}
0b00: 20 3b 20 23 20 63 6f 6d 6d 69 74 20 6d 65 73 73   ; # commit mess
0b10: 61 67 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67  age of the chang
0b20: 65 73 65 74 0a 20 20 20 20 76 61 72 69 61 62 6c  eset.    variabl
0b30: 65 20 20 20 20 61 75 74 68 6f 72 20 20 7b 7d 20  e    author  {} 
0b40: 3b 20 23 20 75 73 65 72 20 63 72 65 61 74 69 6e  ; # user creatin
0b50: 67 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 0a  g the changeset.
0b60: 20 20 20 20 76 61 72 69 61 62 6c 65 20 20 20 20      variable    
0b70: 6c 61 73 74 64 20 20 20 7b 7d 20 3b 20 23 20 76  lastd   {} ; # v
0b80: 65 72 73 69 6f 6e 20 64 65 70 74 68 20 6f 66 20  ersion depth of 
0b90: 6c 61 73 74 20 61 64 64 65 64 20 66 69 6c 65 2e  last added file.
0ba0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 20 20  .    variable   
0bb0: 20 72 65 6d 6f 76 65 64 20 7b 7d 20 3b 20 23 20   removed {} ; # 
0bc0: 66 69 6c 65 20 2d 3e 20 72 65 76 69 73 69 6f 6e  file -> revision
0bd0: 20 6f 66 20 72 65 6d 6f 76 65 64 20 66 69 6c 65   of removed file
0be0: 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  s..    variable 
0bf0: 20 20 20 61 64 64 65 64 20 20 20 7b 7d 20 3b 20     added   {} ; 
0c00: 23 20 66 69 6c 65 20 2d 3e 20 72 65 76 69 73 69  # file -> revisi
0c10: 6f 6e 20 6f 66 20 61 64 64 65 64 20 66 69 6c 65  on of added file
0c20: 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  s..    variable 
0c30: 20 20 20 63 68 61 6e 67 65 64 20 7b 7d 20 3b 20     changed {} ; 
0c40: 23 20 66 69 6c 65 20 2d 3e 20 72 65 76 69 73 69  # file -> revisi
0c50: 6f 6e 20 6f 66 20 6d 6f 64 69 66 69 65 64 20 66  on of modified f
0c60: 69 6c 65 73 2e 0a 20 20 20 20 76 61 72 69 61 62  iles..    variab
0c70: 6c 65 20 20 20 20 66 69 6c 65 73 0a 20 20 20 20  le    files.    
0c80: 61 72 72 61 79 20 75 6e 73 65 74 20 66 69 6c 65  array unset file
0c90: 73 20 2a 0a 20 20 20 20 61 72 72 61 79 20 73 65  s *.    array se
0ca0: 74 20 20 20 66 69 6c 65 73 20 7b 7d 20 20 20 3b  t   files {}   ;
0cb0: 20 23 20 66 69 6c 65 20 2d 3e 20 72 65 76 69 73   # file -> revis
0cc0: 69 6f 6e 0a 20 20 20 20 72 65 74 75 72 6e 0a 7d  ion.    return.}
0cd0: 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a 3a 63 76 73  ..proc ::vc::cvs
0ce0: 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 43 75 72  ::ws::csets::Cur
0cf0: 72 65 6e 74 3a 3a 45 6d 70 74 79 20 7b 7d 20 7b  rent::Empty {} {
0d00: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 73 74  .    variable st
0d10: 61 72 74 0a 20 20 20 20 72 65 74 75 72 6e 20 5b  art.    return [
0d20: 65 78 70 72 20 7b 24 73 74 61 72 74 20 65 71 20  expr {$start eq 
0d30: 22 22 7d 5d 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76  ""}].}..proc ::v
0d40: 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74  c::cvs::ws::cset
0d50: 73 3a 3a 43 75 72 72 65 6e 74 3a 3a 4e 65 77 20  s::Current::New 
0d60: 7b 6e 66 69 6c 65 20 6e 72 65 76 69 73 69 6f 6e  {nfile nrevision
0d70: 20 6e 61 75 74 68 6f 72 20 6e 63 6d 73 67 7d 20   nauthor ncmsg} 
0d80: 7b 0a 20 20 20 20 75 70 76 61 72 20 31 20 72 65  {.    upvar 1 re
0d90: 61 73 6f 6e 20 72 65 61 73 6f 6e 0a 20 20 20 20  ason reason.    
0da0: 76 61 72 69 61 62 6c 65 20 63 6d 73 67 0a 20 20  variable cmsg.  
0db0: 20 20 76 61 72 69 61 62 6c 65 20 61 75 74 68 6f    variable autho
0dc0: 72 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c  r.    variable l
0dd0: 61 73 74 64 0a 20 20 20 20 76 61 72 69 61 62 6c  astd.    variabl
0de0: 65 20 66 69 6c 65 73 0a 0a 20 20 20 20 23 20 55  e files..    # U
0df0: 73 65 72 20 63 68 61 6e 67 65 0a 20 20 20 20 69  ser change.    i
0e00: 66 20 7b 24 6e 61 75 74 68 6f 72 20 6e 65 20 24  f {$nauthor ne $
0e10: 61 75 74 68 6f 72 7d 20 7b 0a 09 73 65 74 20 72  author} {..set r
0e20: 65 61 73 6f 6e 20 75 73 65 72 0a 09 72 65 74 75  eason user..retu
0e30: 72 6e 20 31 0a 20 20 20 20 7d 0a 0a 20 20 20 20  rn 1.    }..    
0e40: 23 20 46 69 6c 65 20 61 6c 72 65 61 64 79 20 69  # File already i
0e50: 6e 20 63 75 72 72 65 6e 74 20 63 73 65 74 0a 20  n current cset. 
0e60: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
0e70: 73 74 73 20 66 69 6c 65 73 28 24 6e 66 69 6c 65  sts files($nfile
0e80: 29 5d 7d 20 7b 0a 09 73 65 74 20 72 65 61 73 6f  )]} {..set reaso
0e90: 6e 20 66 69 6c 65 0a 09 72 65 74 75 72 6e 20 31  n file..return 1
0ea0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 43 75  .    }..    # Cu
0eb0: 72 72 65 6e 74 20 63 73 65 74 20 74 72 75 6e 6b  rrent cset trunk
0ec0: 2f 62 72 61 6e 63 68 20 64 69 66 66 65 72 65 6e  /branch differen
0ed0: 74 20 66 72 6f 6d 20 65 6e 74 72 79 2e 0a 20 20  t from entry..  
0ee0: 20 20 73 65 74 20 6e 64 65 70 74 68 20 5b 6c 6c    set ndepth [ll
0ef0: 65 6e 67 74 68 20 5b 73 70 6c 69 74 20 24 6e 72  ength [split $nr
0f00: 65 76 69 73 69 6f 6e 20 2e 5d 5d 0a 20 20 20 20  evision .]].    
0f10: 69 66 20 7b 28 24 6c 61 73 74 64 20 3d 3d 20 32  if {($lastd == 2
0f20: 29 20 21 3d 20 28 24 6e 64 65 70 74 68 20 3d 3d  ) != ($ndepth ==
0f30: 20 32 29 7d 20 7b 0a 09 73 65 74 20 72 65 61 73   2)} {..set reas
0f40: 6f 6e 20 64 65 70 74 68 2f 24 6c 61 73 74 64 2f  on depth/$lastd/
0f50: 24 6e 64 65 70 74 68 2f 28 24 6e 72 65 76 69 73  $ndepth/($nrevis
0f60: 69 6f 6e 29 2f 24 6e 66 69 6c 65 0a 09 72 65 74  ion)/$nfile..ret
0f70: 75 72 6e 20 31 0a 20 20 20 20 7d 0a 0a 20 20 20  urn 1.    }..   
0f80: 20 23 20 43 6f 6d 6d 69 74 20 6d 65 73 73 61 67   # Commit messag
0f90: 65 20 63 68 61 6e 67 65 64 0a 20 20 20 20 69 66  e changed.    if
0fa0: 20 7b 24 6e 63 6d 73 67 20 6e 65 20 24 63 6d 73   {$ncmsg ne $cms
0fb0: 67 7d 20 7b 0a 09 73 65 74 20 72 65 61 73 6f 6e  g} {..set reason
0fc0: 20 63 6d 73 67 2f 3c 3c 24 6e 63 6d 73 67 3e 3e   cmsg/<<$ncmsg>>
0fd0: 0a 09 72 65 74 75 72 6e 20 31 0a 20 20 20 20 7d  ..return 1.    }
0fe0: 0a 0a 20 20 20 20 23 20 54 68 65 20 6e 65 77 20  ..    # The new 
0ff0: 65 6e 74 72 79 20 73 74 69 6c 6c 20 62 65 6c 6f  entry still belo
1000: 6e 67 73 20 74 6f 20 74 68 65 20 63 75 72 72 65  ngs to the curre
1010: 6e 74 20 63 68 61 6e 67 65 73 65 74 0a 20 20 20  nt changeset.   
1020: 20 72 65 74 75 72 6e 20 30 0a 7d 0a 0a 70 72 6f   return 0.}..pro
1030: 63 20 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a  c ::vc::cvs::ws:
1040: 3a 63 73 65 74 73 3a 3a 43 75 72 72 65 6e 74 3a  :csets::Current:
1050: 3a 41 64 64 20 7b 6e 64 61 74 65 20 6e 66 69 6c  :Add {ndate nfil
1060: 65 20 6e 72 65 76 69 73 69 6f 6e 20 6e 6f 70 65  e nrevision nope
1070: 72 61 74 69 6f 6e 20 6e 61 75 74 68 6f 72 20 6e  ration nauthor n
1080: 63 6d 73 67 7d 20 7b 0a 20 20 20 20 76 61 72 69  cmsg} {.    vari
1090: 61 62 6c 65 20 73 74 61 72 74 0a 20 20 20 20 76  able start.    v
10a0: 61 72 69 61 62 6c 65 20 63 6d 73 67 0a 20 20 20  ariable cmsg.   
10b0: 20 76 61 72 69 61 62 6c 65 20 61 75 74 68 6f 72   variable author
10c0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 61  .    variable la
10d0: 73 74 64 0a 20 20 20 20 76 61 72 69 61 62 6c 65  std.    variable
10e0: 20 72 65 6d 6f 76 65 64 0a 20 20 20 20 76 61 72   removed.    var
10f0: 69 61 62 6c 65 20 61 64 64 65 64 0a 20 20 20 20  iable added.    
1100: 76 61 72 69 61 62 6c 65 20 63 68 61 6e 67 65 64  variable changed
1110: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 66 69  .    variable fi
1120: 6c 65 73 0a 0a 20 20 20 20 69 66 20 7b 24 73 74  les..    if {$st
1130: 61 72 74 20 65 71 20 22 22 7d 20 7b 73 65 74 20  art eq ""} {set 
1140: 73 74 61 72 74 20 24 6e 64 61 74 65 7d 0a 20 20  start $ndate}.  
1150: 20 20 73 65 74 20 63 6d 73 67 20 20 20 20 20 20    set cmsg      
1160: 20 20 20 20 24 6e 63 6d 73 67 0a 20 20 20 20 73      $ncmsg.    s
1170: 65 74 20 61 75 74 68 6f 72 20 20 20 20 20 20 20  et author       
1180: 20 24 6e 61 75 74 68 6f 72 0a 20 20 20 20 73 65   $nauthor.    se
1190: 74 20 6c 61 73 74 64 20 20 20 20 20 20 20 20 20  t lastd         
11a0: 5b 6c 6c 65 6e 67 74 68 20 5b 73 70 6c 69 74 20  [llength [split 
11b0: 24 6e 72 65 76 69 73 69 6f 6e 20 2e 5d 5d 0a 20  $nrevision .]]. 
11c0: 20 20 20 73 65 74 20 66 69 6c 65 73 28 24 6e 66     set files($nf
11d0: 69 6c 65 29 20 24 6e 72 65 76 69 73 69 6f 6e 0a  ile) $nrevision.
11e0: 0a 20 20 20 20 69 66 20 7b 24 6e 6f 70 65 72 61  .    if {$nopera
11f0: 74 69 6f 6e 20 65 71 20 22 52 22 7d 20 7b 0a 09  tion eq "R"} {..
1200: 6c 61 70 70 65 6e 64 20 72 65 6d 6f 76 65 64 20  lappend removed 
1210: 24 6e 66 69 6c 65 20 24 6e 72 65 76 69 73 69 6f  $nfile $nrevisio
1220: 6e 0a 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b  n.    } elseif {
1230: 24 6e 6f 70 65 72 61 74 69 6f 6e 20 65 71 20 22  $noperation eq "
1240: 41 22 7d 20 7b 0a 09 6c 61 70 70 65 6e 64 20 61  A"} {..lappend a
1250: 64 64 65 64 20 20 20 24 6e 66 69 6c 65 20 24 6e  dded   $nfile $n
1260: 72 65 76 69 73 69 6f 6e 0a 20 20 20 20 7d 20 65  revision.    } e
1270: 6c 73 65 20 7b 0a 09 6c 61 70 70 65 6e 64 20 63  lse {..lappend c
1280: 68 61 6e 67 65 64 20 24 6e 66 69 6c 65 20 24 6e  hanged $nfile $n
1290: 72 65 76 69 73 69 6f 6e 0a 20 20 20 20 7d 0a 20  revision.    }. 
12a0: 20 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f     return.}..pro
12b0: 63 20 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a  c ::vc::cvs::ws:
12c0: 3a 63 73 65 74 73 3a 3a 43 75 72 72 65 6e 74 3a  :csets::Current:
12d0: 3a 43 6f 6d 70 6c 65 74 65 20 7b 7d 20 7b 0a 20  :Complete {} {. 
12e0: 20 20 20 76 61 72 69 61 62 6c 65 20 73 74 61 72     variable star
12f0: 74 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 63  t.    variable c
1300: 6d 73 67 0a 20 20 20 20 76 61 72 69 61 62 6c 65  msg.    variable
1310: 20 61 75 74 68 6f 72 0a 20 20 20 20 76 61 72 69   author.    vari
1320: 61 62 6c 65 20 6c 61 73 74 64 0a 20 20 20 20 76  able lastd.    v
1330: 61 72 69 61 62 6c 65 20 72 65 6d 6f 76 65 64 0a  ariable removed.
1340: 20 20 20 20 76 61 72 69 61 62 6c 65 20 61 64 64      variable add
1350: 65 64 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  ed.    variable 
1360: 63 68 61 6e 67 65 64 0a 0a 20 20 20 20 73 65 74  changed..    set
1370: 20 72 65 73 20 5b 6c 69 73 74 20 5c 0a 09 09 64   res [list \...d
1380: 61 74 65 20 20 20 20 24 73 74 61 72 74 20 5c 0a  ate    $start \.
1390: 09 09 61 75 74 68 6f 72 20 20 24 61 75 74 68 6f  ..author  $autho
13a0: 72 20 5c 0a 09 09 63 6d 73 67 20 20 20 20 5b 73  r \...cmsg    [s
13b0: 74 72 69 6e 67 20 74 72 69 6d 20 24 63 6d 73 67  tring trim $cmsg
13c0: 5d 20 5c 0a 09 09 72 65 6d 6f 76 65 64 20 24 72  ] \...removed $r
13d0: 65 6d 6f 76 65 64 20 5c 0a 09 09 61 64 64 65 64  emoved \...added
13e0: 20 20 20 24 61 64 64 65 64 20 5c 0a 09 09 63 68     $added \...ch
13f0: 61 6e 67 65 64 20 24 63 68 61 6e 67 65 64 20 5c  anged $changed \
1400: 0a 09 09 6c 61 73 74 64 20 20 20 24 6c 61 73 74  ...lastd   $last
1410: 64 5d 0a 20 20 20 20 43 6c 65 61 72 0a 20 20 20  d].    Clear.   
1420: 20 72 65 74 75 72 6e 20 24 72 65 73 0a 7d 0a 0a   return $res.}..
1430: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  # --------------
1440: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
1480: 23 20 49 6e 74 65 72 6e 61 6c 73 0a 0a 6e 61 6d  # Internals..nam
1490: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63  espace eval ::vc
14a0: 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73  ::cvs::ws::csets
14b0: 20 7b 0a 0a 20 20 20 20 23 20 43 73 65 74 20 73   {..    # Cset s
14c0: 74 6f 72 61 67 65 0a 0a 20 20 20 20 23 20 63 73  torage..    # cs
14d0: 65 74 73 3a 20 69 64 20 2d 3e 20 64 69 63 74 0a  ets: id -> dict.
14e0: 20 20 20 20 23 20 64 69 63 74 3a 20 64 61 74 65      # dict: date
14f0: 0a 20 20 20 20 23 20 20 20 20 20 20 20 61 75 74  .    #       aut
1500: 68 6f 72 0a 20 20 20 20 23 20 20 20 20 20 20 20  hor.    #       
1510: 63 73 6d 67 0a 20 20 20 20 23 20 20 20 20 20 20  csmg.    #      
1520: 20 72 65 6d 6f 76 65 64 0a 20 20 20 20 23 20 20   removed.    #  
1530: 20 20 20 20 20 61 64 64 65 64 0a 20 20 20 20 23       added.    #
1540: 20 20 20 20 20 20 20 63 68 61 6e 67 65 64 0a 20         changed. 
1550: 20 20 20 23 20 20 20 20 20 20 20 6c 61 73 74 64     #       lastd
1560: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 20  ..    variable  
1570: 6e 63 73 20 20 20 30 20 20 3b 20 23 20 43 6f 75  ncs   0  ; # Cou
1580: 6e 74 65 72 20 66 6f 72 20 63 68 61 6e 67 65 73  nter for changes
1590: 65 74 73 0a 20 20 20 20 76 61 72 69 61 62 6c 65  ets.    variable
15a0: 20 20 63 73 65 74 73 0a 20 20 20 20 61 72 72 61    csets.    arra
15b0: 79 20 73 65 74 20 63 73 65 74 73 20 7b 7d 20 3b  y set csets {} ;
15c0: 20 23 20 43 68 61 6e 67 65 73 65 74 20 64 61 74   # Changeset dat
15d0: 61 0a 0a 20 20 20 20 23 20 44 61 74 61 20 6f 66  a..    # Data of
15e0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 68 61   the current cha
15f0: 6e 67 65 73 65 74 20 62 75 69 6c 74 20 66 72 6f  ngeset built fro
1600: 6d 20 74 69 6d 65 6c 69 6e 65 20 65 6e 74 72 69  m timeline entri
1610: 65 73 2e 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  es..    namespac
1620: 65 20 65 76 61 6c 20 43 75 72 72 65 6e 74 20 7b  e eval Current {
1630: 0a 09 76 61 72 69 61 62 6c 65 20 20 73 74 61 72  ..variable  star
1640: 74 20 20 20 7b 7d 20 3b 20 23 20 64 61 74 65 20  t   {} ; # date 
1650: 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 62 65  the changeset be
1660: 67 69 6e 73 0a 09 76 61 72 69 61 62 6c 65 20 20  gins..variable  
1670: 63 6d 73 67 20 20 20 20 7b 7d 20 3b 20 23 20 63  cmsg    {} ; # c
1680: 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 20 6f 66  ommit message of
1690: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 0a 09   the changeset..
16a0: 76 61 72 69 61 62 6c 65 20 20 61 75 74 68 6f 72  variable  author
16b0: 20 20 7b 7d 20 3b 20 23 20 75 73 65 72 20 63 72    {} ; # user cr
16c0: 65 61 74 69 6e 67 20 74 68 65 20 63 68 61 6e 67  eating the chang
16d0: 65 73 65 74 0a 09 76 61 72 69 61 62 6c 65 20 20  eset..variable  
16e0: 6c 61 73 74 64 20 20 20 7b 7d 20 3b 20 23 20 76  lastd   {} ; # v
16f0: 65 72 73 69 6f 6e 20 64 65 70 74 68 20 6f 66 20  ersion depth of 
1700: 6c 61 73 74 20 61 64 64 65 64 20 66 69 6c 65 2e  last added file.
1710: 0a 09 76 61 72 69 61 62 6c 65 20 20 72 65 6d 6f  ..variable  remo
1720: 76 65 64 20 7b 7d 20 3b 20 23 20 66 69 6c 65 20  ved {} ; # file 
1730: 2d 3e 20 72 65 76 69 73 69 6f 6e 20 6f 66 20 72  -> revision of r
1740: 65 6d 6f 76 65 64 20 66 69 6c 65 73 2e 0a 09 76  emoved files...v
1750: 61 72 69 61 62 6c 65 20 20 61 64 64 65 64 20 20  ariable  added  
1760: 20 7b 7d 20 3b 20 23 20 66 69 6c 65 20 2d 3e 20   {} ; # file -> 
1770: 72 65 76 69 73 69 6f 6e 20 6f 66 20 61 64 64 65  revision of adde
1780: 64 20 66 69 6c 65 73 2e 0a 09 76 61 72 69 61 62  d files...variab
1790: 6c 65 20 20 63 68 61 6e 67 65 64 20 7b 7d 20 3b  le  changed {} ;
17a0: 20 23 20 66 69 6c 65 20 2d 3e 20 72 65 76 69 73   # file -> revis
17b0: 69 6f 6e 20 6f 66 20 6d 6f 64 69 66 69 65 64 20  ion of modified 
17c0: 66 69 6c 65 73 2e 0a 09 76 61 72 69 61 62 6c 65  files...variable
17d0: 20 20 66 69 6c 65 73 0a 09 61 72 72 61 79 20 73    files..array s
17e0: 65 74 20 66 69 6c 65 73 20 7b 7d 20 20 20 3b 20  et files {}   ; 
17f0: 23 20 66 69 6c 65 20 2d 3e 20 72 65 76 69 73 69  # file -> revisi
1800: 6f 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6e 61  on.    }..    na
1810: 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 69  mespace export i
1820: 6e 69 74 20 61 64 64 20 64 6f 6e 65 20 67 65 74  nit add done get
1830: 20 6e 75 6d 20 69 73 54 72 75 6e 6b 20 73 65 74   num isTrunk set
1840: 50 61 72 65 6e 74 4f 66 20 70 61 72 65 6e 74 4f  ParentOf parentO
1850: 66 20 73 61 6d 65 42 72 61 6e 63 68 0a 7d 0a 0a  f sameBranch.}..
1860: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  # --------------
1870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
18b0: 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65  # Ready..package
18c0: 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 63 76 73   provide vc::cvs
18d0: 3a 3a 77 73 3a 3a 63 73 65 74 73 20 31 2e 30 0a  ::ws::csets 1.0.
18e0: 72 65 74 75 72 6e 0a                             return.