Hex Artifact Content
Not logged in

Artifact 4cf480aa539c7a199e26f4deac9588b3a9f4721f:

File tools/lib/cvs_csets.tcl part of check-in [ae54e928c2] - Further work on the CVS frontend. The main parts for doing the extraction and management of changesets are now in a separate package. by aku on 2007-09-17 07:05:01.

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 0a 6e 61 6d 65 73 70 61  Tcl 8.4..namespa
0110: 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 63 76  ce eval ::vc::cv
0120: 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 43 75  s::ws::csets::Cu
0130: 72 72 65 6e 74 20 7b 7d 0a 0a 23 20 2d 2d 2d 2d  rrent {}..# ----
0140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 41 50 49 0a  ---------.# API.
0190: 0a 23 20 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a  .# vc::cvs::ws::
01a0: 63 73 65 74 73 3a 3a 69 6e 69 74 20 20 20 2d 20  csets::init   - 
01b0: 49 6e 69 74 69 61 6c 69 7a 65 20 61 63 63 75 6d  Initialize accum
01c0: 75 6c 61 74 6f 72 0a 23 20 76 63 3a 3a 63 76 73  ulator.# vc::cvs
01d0: 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 61 64 64  ::ws::csets::add
01e0: 20 20 20 20 2d 20 41 64 64 20 74 69 6d 65 6c 69      - Add timeli
01f0: 6e 65 20 65 6e 74 72 79 20 74 6f 20 61 63 63 75  ne entry to accu
0200: 6d 75 6c 6f 72 2c 20 6d 61 79 20 67 65 6e 65 72  mulor, may gener
0210: 61 74 65 20 6e 65 77 20 63 73 65 74 0a 23 20 76  ate new cset.# v
0220: 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74  c::cvs::ws::cset
0230: 73 3a 3a 64 6f 6e 65 20 20 20 2d 20 43 6f 6d 70  s::done   - Comp
0240: 6c 65 74 65 20 63 73 65 74 20 67 65 6e 65 72 61  lete cset genera
0250: 74 69 6f 6e 2e 0a 23 0a 23 20 76 63 3a 3a 63 76  tion..#.# vc::cv
0260: 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 67 65  s::ws::csets::ge
0270: 74 20 69 64 20 2d 20 47 65 74 20 64 61 74 61 20  t id - Get data 
0280: 6f 66 20 61 20 63 73 65 74 2e 0a 23 20 76 63 3a  of a cset..# vc:
0290: 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a  :cvs::ws::csets:
02a0: 3a 6e 75 6d 20 20 20 20 2d 20 47 65 74 20 6e 75  :num    - Get nu
02b0: 6d 62 65 72 20 6f 66 20 63 73 65 74 73 2e 0a 0a  mber of csets...
02c0: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  # --------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
0310: 23 20 41 50 49 20 49 6d 70 6c 65 6d 65 6e 74 61  # API Implementa
0320: 74 69 6f 6e 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a  tion..proc ::vc:
0330: 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a  :cvs::ws::csets:
0340: 3a 69 6e 69 74 20 7b 7d 20 7b 0a 20 20 20 20 43  :init {} {.    C
0350: 75 72 72 65 6e 74 3a 3a 43 6c 65 61 72 0a 20 20  urrent::Clear.  
0360: 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63    return.}..proc
0370: 20 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a   ::vc::cvs::ws::
0380: 63 73 65 74 73 3a 3a 61 64 64 20 7b 64 61 74 65  csets::add {date
0390: 20 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 20 6f   file revision o
03a0: 70 65 72 61 74 69 6f 6e 20 61 75 74 68 6f 72 20  peration author 
03b0: 63 6d 73 67 7d 20 7b 0a 20 20 20 20 69 66 20 7b  cmsg} {.    if {
03c0: 21 5b 43 75 72 72 65 6e 74 3a 3a 45 6d 70 74 79  ![Current::Empty
03d0: 5d 20 26 26 20 5b 43 75 72 72 65 6e 74 3a 3a 4e  ] && [Current::N
03e0: 65 77 20 24 66 69 6c 65 20 24 72 65 76 69 73 69  ew $file $revisi
03f0: 6f 6e 20 24 61 75 74 68 6f 72 20 24 63 6d 73 67  on $author $cmsg
0400: 5d 7d 20 7b 0a 09 53 61 76 65 20 5b 43 75 72 72  ]} {..Save [Curr
0410: 65 6e 74 3a 3a 43 6f 6d 70 6c 65 74 65 5d 0a 20  ent::Complete]. 
0420: 20 20 20 7d 0a 20 20 20 20 43 75 72 72 65 6e 74     }.    Current
0430: 3a 3a 41 64 64 20 24 64 61 74 65 20 24 66 69 6c  ::Add $date $fil
0440: 65 20 24 72 65 76 69 73 69 6f 6e 20 24 6f 70 65  e $revision $ope
0450: 72 61 74 69 6f 6e 20 24 61 75 74 68 6f 72 20 24  ration $author $
0460: 63 6d 73 67 0a 20 20 20 20 72 65 74 75 72 6e 0a  cmsg.    return.
0470: 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a 3a 63 76  }..proc ::vc::cv
0480: 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 64 6f  s::ws::csets::do
0490: 6e 65 20 7b 7d 20 7b 0a 20 20 20 20 69 66 20 7b  ne {} {.    if {
04a0: 21 5b 43 75 72 72 65 6e 74 3a 3a 45 6d 70 74 79  ![Current::Empty
04b0: 5d 7d 20 7b 0a 09 53 61 76 65 20 5b 43 75 72 72  ]} {..Save [Curr
04c0: 65 6e 74 3a 3a 43 6f 6d 70 6c 65 74 65 5d 0a 20  ent::Complete]. 
04d0: 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 0a     }.    return.
04e0: 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a 3a 63 76  }..proc ::vc::cv
04f0: 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 67 65  s::ws::csets::ge
0500: 74 20 7b 69 64 7d 20 7b 0a 20 20 20 20 76 61 72  t {id} {.    var
0510: 69 61 62 6c 65 20 63 73 65 74 73 0a 20 20 20 20  iable csets.    
0520: 72 65 74 75 72 6e 20 20 24 63 73 65 74 73 28 24  return  $csets($
0530: 69 64 29 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63  id).}..proc ::vc
0540: 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73  ::cvs::ws::csets
0550: 3a 3a 6e 75 6d 20 7b 7d 20 7b 0a 20 20 20 20 76  ::num {} {.    v
0560: 61 72 69 61 62 6c 65 20 63 73 65 74 73 0a 20 20  ariable csets.  
0570: 20 20 72 65 74 75 72 6e 20 5b 61 72 72 61 79 20    return [array 
0580: 73 69 7a 65 20 63 73 65 74 73 5d 0a 7d 0a 0a 23  size csets].}..#
0590: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
05a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
05e0: 20 49 6e 74 65 72 6e 61 6c 20 68 65 6c 70 65 72   Internal helper
05f0: 20 63 6f 6d 6d 61 6e 64 73 3a 20 43 68 61 6e 67   commands: Chang
0600: 65 73 65 74 20 69 6e 73 70 65 63 74 69 6f 6e 20  eset inspection 
0610: 61 6e 64 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e  and construction
0620: 2e 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a 3a 63 76  ...proc ::vc::cv
0630: 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a 53 61  s::ws::csets::Sa
0640: 76 65 20 7b 64 61 74 61 7d 20 7b 0a 20 20 20 20  ve {data} {.    
0650: 76 61 72 69 61 62 6c 65 20 63 73 65 74 73 0a 20  variable csets. 
0660: 20 20 20 76 61 72 69 61 62 6c 65 20 6e 63 73 0a     variable ncs.
0670: 0a 20 20 20 20 73 65 74 20 63 73 65 74 73 28 24  .    set csets($
0680: 6e 63 73 29 20 24 64 61 74 61 0a 20 20 20 20 69  ncs) $data.    i
0690: 6e 63 72 20 6e 63 73 0a 20 20 20 20 72 65 74 75  ncr ncs.    retu
06a0: 72 6e 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a  rn.}..proc ::vc:
06b0: 3a 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a  :cvs::ws::csets:
06c0: 3a 43 75 72 72 65 6e 74 3a 3a 43 6c 65 61 72 20  :Current::Clear 
06d0: 7b 7d 20 7b 0a 20 20 20 20 76 61 72 69 61 62 6c  {} {.    variabl
06e0: 65 20 20 20 20 73 74 61 72 74 20 20 20 7b 7d 20  e    start   {} 
06f0: 3b 20 23 20 64 61 74 65 20 74 68 65 20 63 68 61  ; # date the cha
0700: 6e 67 65 73 65 74 20 62 65 67 69 6e 73 0a 20 20  ngeset begins.  
0710: 20 20 76 61 72 69 61 62 6c 65 20 20 20 20 63 6d    variable    cm
0720: 73 67 20 20 20 20 7b 7d 20 3b 20 23 20 63 6f 6d  sg    {} ; # com
0730: 6d 69 74 20 6d 65 73 73 61 67 65 20 6f 66 20 74  mit message of t
0740: 68 65 20 63 68 61 6e 67 65 73 65 74 0a 20 20 20  he changeset.   
0750: 20 76 61 72 69 61 62 6c 65 20 20 20 20 61 75 74   variable    aut
0760: 68 6f 72 20 20 7b 7d 20 3b 20 23 20 75 73 65 72  hor  {} ; # user
0770: 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 63 68   creating the ch
0780: 61 6e 67 65 73 65 74 0a 20 20 20 20 76 61 72 69  angeset.    vari
0790: 61 62 6c 65 20 20 20 20 6c 61 73 74 64 20 20 20  able    lastd   
07a0: 7b 7d 20 3b 20 23 20 76 65 72 73 69 6f 6e 20 64  {} ; # version d
07b0: 65 70 74 68 20 6f 66 20 6c 61 73 74 20 61 64 64  epth of last add
07c0: 65 64 20 66 69 6c 65 2e 0a 20 20 20 20 76 61 72  ed file..    var
07d0: 69 61 62 6c 65 20 20 20 20 72 65 6d 6f 76 65 64  iable    removed
07e0: 20 7b 7d 20 3b 20 23 20 66 69 6c 65 20 2d 3e 20   {} ; # file -> 
07f0: 72 65 76 69 73 69 6f 6e 20 6f 66 20 72 65 6d 6f  revision of remo
0800: 76 65 64 20 66 69 6c 65 73 2e 0a 20 20 20 20 76  ved files..    v
0810: 61 72 69 61 62 6c 65 20 20 20 20 61 64 64 65 64  ariable    added
0820: 20 20 20 7b 7d 20 3b 20 23 20 66 69 6c 65 20 2d     {} ; # file -
0830: 3e 20 72 65 76 69 73 69 6f 6e 20 6f 66 20 61 64  > revision of ad
0840: 64 65 64 20 66 69 6c 65 73 2e 0a 20 20 20 20 76  ded files..    v
0850: 61 72 69 61 62 6c 65 20 20 20 20 63 68 61 6e 67  ariable    chang
0860: 65 64 20 7b 7d 20 3b 20 23 20 66 69 6c 65 20 2d  ed {} ; # file -
0870: 3e 20 72 65 76 69 73 69 6f 6e 20 6f 66 20 6d 6f  > revision of mo
0880: 64 69 66 69 65 64 20 66 69 6c 65 73 2e 0a 20 20  dified files..  
0890: 20 20 76 61 72 69 61 62 6c 65 20 20 20 20 66 69    variable    fi
08a0: 6c 65 73 0a 20 20 20 20 61 72 72 61 79 20 75 6e  les.    array un
08b0: 73 65 74 20 66 69 6c 65 73 20 2a 0a 20 20 20 20  set files *.    
08c0: 61 72 72 61 79 20 73 65 74 20 20 20 66 69 6c 65  array set   file
08d0: 73 20 7b 7d 20 20 20 3b 20 23 20 66 69 6c 65 20  s {}   ; # file 
08e0: 2d 3e 20 72 65 76 69 73 69 6f 6e 0a 20 20 20 20  -> revision.    
08f0: 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 20 3a  return.}..proc :
0900: 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 63 73  :vc::cvs::ws::cs
0910: 65 74 73 3a 3a 43 75 72 72 65 6e 74 3a 3a 45 6d  ets::Current::Em
0920: 70 74 79 20 7b 7d 20 7b 0a 20 20 20 20 76 61 72  pty {} {.    var
0930: 69 61 62 6c 65 20 73 74 61 72 74 0a 20 20 20 20  iable start.    
0940: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 73  return [expr {$s
0950: 74 61 72 74 20 65 71 20 22 22 7d 5d 0a 7d 0a 0a  tart eq ""}].}..
0960: 70 72 6f 63 20 3a 3a 76 63 3a 3a 63 76 73 3a 3a  proc ::vc::cvs::
0970: 77 73 3a 3a 63 73 65 74 73 3a 3a 43 75 72 72 65  ws::csets::Curre
0980: 6e 74 3a 3a 4e 65 77 20 7b 6e 66 69 6c 65 20 6e  nt::New {nfile n
0990: 72 65 76 69 73 69 6f 6e 20 6e 61 75 74 68 6f 72  revision nauthor
09a0: 20 6e 63 6d 73 67 7d 20 7b 0a 20 20 20 20 75 70   ncmsg} {.    up
09b0: 76 61 72 20 31 20 72 65 61 73 6f 6e 20 72 65 61  var 1 reason rea
09c0: 73 6f 6e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  son.    variable
09d0: 20 63 6d 73 67 0a 20 20 20 20 76 61 72 69 61 62   cmsg.    variab
09e0: 6c 65 20 61 75 74 68 6f 72 0a 20 20 20 20 76 61  le author.    va
09f0: 72 69 61 62 6c 65 20 6c 61 73 74 64 0a 20 20 20  riable lastd.   
0a00: 20 76 61 72 69 61 62 6c 65 20 66 69 6c 65 73 0a   variable files.
0a10: 0a 20 20 20 20 23 20 55 73 65 72 20 63 68 61 6e  .    # User chan
0a20: 67 65 0a 20 20 20 20 69 66 20 7b 24 6e 61 75 74  ge.    if {$naut
0a30: 68 6f 72 20 6e 65 20 24 61 75 74 68 6f 72 7d 20  hor ne $author} 
0a40: 7b 0a 09 73 65 74 20 72 65 61 73 6f 6e 20 75 73  {..set reason us
0a50: 65 72 0a 09 72 65 74 75 72 6e 20 31 0a 20 20 20  er..return 1.   
0a60: 20 7d 0a 0a 20 20 20 20 23 20 46 69 6c 65 20 61   }..    # File a
0a70: 6c 72 65 61 64 79 20 69 6e 20 63 75 72 72 65 6e  lready in curren
0a80: 74 20 63 73 65 74 0a 20 20 20 20 69 66 20 7b 5b  t cset.    if {[
0a90: 69 6e 66 6f 20 65 78 69 73 74 73 20 66 69 6c 65  info exists file
0aa0: 73 28 24 6e 66 69 6c 65 29 5d 7d 20 7b 0a 09 73  s($nfile)]} {..s
0ab0: 65 74 20 72 65 61 73 6f 6e 20 66 69 6c 65 0a 09  et reason file..
0ac0: 72 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a 0a  return 1.    }..
0ad0: 20 20 20 20 23 20 43 75 72 72 65 6e 74 20 63 73      # Current cs
0ae0: 65 74 20 74 72 75 6e 6b 2f 62 72 61 6e 63 68 20  et trunk/branch 
0af0: 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 65  different from e
0b00: 6e 74 72 79 2e 0a 20 20 20 20 73 65 74 20 6e 64  ntry..    set nd
0b10: 65 70 74 68 20 5b 6c 6c 65 6e 67 74 68 20 5b 73  epth [llength [s
0b20: 70 6c 69 74 20 24 6e 72 65 76 69 73 69 6f 6e 20  plit $nrevision 
0b30: 2e 5d 5d 0a 20 20 20 20 69 66 20 7b 28 24 6c 61  .]].    if {($la
0b40: 73 74 64 20 3d 3d 20 32 29 20 21 3d 20 28 24 6e  std == 2) != ($n
0b50: 64 65 70 74 68 20 3d 3d 20 32 29 7d 20 7b 0a 09  depth == 2)} {..
0b60: 73 65 74 20 72 65 61 73 6f 6e 20 64 65 70 74 68  set reason depth
0b70: 2f 24 6c 61 73 74 64 2f 24 6e 64 65 70 74 68 2f  /$lastd/$ndepth/
0b80: 28 24 6e 72 65 76 69 73 69 6f 6e 29 2f 24 6e 66  ($nrevision)/$nf
0b90: 69 6c 65 0a 09 72 65 74 75 72 6e 20 31 0a 20 20  ile..return 1.  
0ba0: 20 20 7d 0a 0a 20 20 20 20 23 20 43 6f 6d 6d 69    }..    # Commi
0bb0: 74 20 6d 65 73 73 61 67 65 20 63 68 61 6e 67 65  t message change
0bc0: 64 0a 20 20 20 20 69 66 20 7b 24 6e 63 6d 73 67  d.    if {$ncmsg
0bd0: 20 6e 65 20 24 63 6d 73 67 7d 20 7b 0a 09 73 65   ne $cmsg} {..se
0be0: 74 20 72 65 61 73 6f 6e 20 63 6d 73 67 2f 3c 3c  t reason cmsg/<<
0bf0: 24 6e 63 6d 73 67 3e 3e 0a 09 72 65 74 75 72 6e  $ncmsg>>..return
0c00: 20 31 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20   1.    }..    # 
0c10: 54 68 65 20 6e 65 77 20 65 6e 74 72 79 20 73 74  The new entry st
0c20: 69 6c 6c 20 62 65 6c 6f 6e 67 73 20 74 6f 20 74  ill belongs to t
0c30: 68 65 20 63 75 72 72 65 6e 74 20 63 68 61 6e 67  he current chang
0c40: 65 73 65 74 0a 20 20 20 20 72 65 74 75 72 6e 20  eset.    return 
0c50: 30 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a 3a  0.}..proc ::vc::
0c60: 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a  cvs::ws::csets::
0c70: 43 75 72 72 65 6e 74 3a 3a 41 64 64 20 7b 6e 64  Current::Add {nd
0c80: 61 74 65 20 6e 66 69 6c 65 20 6e 72 65 76 69 73  ate nfile nrevis
0c90: 69 6f 6e 20 6e 6f 70 65 72 61 74 69 6f 6e 20 6e  ion noperation n
0ca0: 61 75 74 68 6f 72 20 6e 63 6d 73 67 7d 20 7b 0a  author ncmsg} {.
0cb0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 73 74 61      variable sta
0cc0: 72 74 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  rt.    variable 
0cd0: 63 6d 73 67 0a 20 20 20 20 76 61 72 69 61 62 6c  cmsg.    variabl
0ce0: 65 20 61 75 74 68 6f 72 0a 20 20 20 20 76 61 72  e author.    var
0cf0: 69 61 62 6c 65 20 6c 61 73 74 64 0a 20 20 20 20  iable lastd.    
0d00: 76 61 72 69 61 62 6c 65 20 72 65 6d 6f 76 65 64  variable removed
0d10: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 61 64  .    variable ad
0d20: 64 65 64 0a 20 20 20 20 76 61 72 69 61 62 6c 65  ded.    variable
0d30: 20 63 68 61 6e 67 65 64 0a 20 20 20 20 76 61 72   changed.    var
0d40: 69 61 62 6c 65 20 66 69 6c 65 73 0a 0a 20 20 20  iable files..   
0d50: 20 69 66 20 7b 24 73 74 61 72 74 20 65 71 20 22   if {$start eq "
0d60: 22 7d 20 7b 73 65 74 20 73 74 61 72 74 20 24 6e  "} {set start $n
0d70: 64 61 74 65 7d 0a 20 20 20 20 73 65 74 20 63 6d  date}.    set cm
0d80: 73 67 20 20 20 20 20 20 20 20 20 20 24 6e 63 6d  sg          $ncm
0d90: 73 67 0a 20 20 20 20 73 65 74 20 61 75 74 68 6f  sg.    set autho
0da0: 72 20 20 20 20 20 20 20 20 24 6e 61 75 74 68 6f  r        $nautho
0db0: 72 0a 20 20 20 20 73 65 74 20 6c 61 73 74 64 20  r.    set lastd 
0dc0: 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68          [llength
0dd0: 20 5b 73 70 6c 69 74 20 24 6e 72 65 76 69 73 69   [split $nrevisi
0de0: 6f 6e 20 2e 5d 5d 0a 20 20 20 20 73 65 74 20 66  on .]].    set f
0df0: 69 6c 65 73 28 24 6e 66 69 6c 65 29 20 24 6e 72  iles($nfile) $nr
0e00: 65 76 69 73 69 6f 6e 0a 0a 20 20 20 20 69 66 20  evision..    if 
0e10: 7b 24 6e 6f 70 65 72 61 74 69 6f 6e 20 65 71 20  {$noperation eq 
0e20: 22 52 22 7d 20 7b 0a 09 6c 61 70 70 65 6e 64 20  "R"} {..lappend 
0e30: 72 65 6d 6f 76 65 64 20 24 6e 66 69 6c 65 20 24  removed $nfile $
0e40: 6e 72 65 76 69 73 69 6f 6e 0a 20 20 20 20 7d 20  nrevision.    } 
0e50: 65 6c 73 65 69 66 20 7b 24 6e 6f 70 65 72 61 74  elseif {$noperat
0e60: 69 6f 6e 20 65 71 20 22 41 22 7d 20 7b 0a 09 6c  ion eq "A"} {..l
0e70: 61 70 70 65 6e 64 20 61 64 64 65 64 20 20 20 24  append added   $
0e80: 6e 66 69 6c 65 20 24 6e 72 65 76 69 73 69 6f 6e  nfile $nrevision
0e90: 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 6c  .    } else {..l
0ea0: 61 70 70 65 6e 64 20 63 68 61 6e 67 65 64 20 24  append changed $
0eb0: 6e 66 69 6c 65 20 24 6e 72 65 76 69 73 69 6f 6e  nfile $nrevision
0ec0: 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72  .    }.    retur
0ed0: 6e 0a 7d 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a 3a  n.}..proc ::vc::
0ee0: 63 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 3a 3a  cvs::ws::csets::
0ef0: 43 75 72 72 65 6e 74 3a 3a 43 6f 6d 70 6c 65 74  Current::Complet
0f00: 65 20 7b 7d 20 7b 0a 20 20 20 20 76 61 72 69 61  e {} {.    varia
0f10: 62 6c 65 20 73 74 61 72 74 0a 20 20 20 20 76 61  ble start.    va
0f20: 72 69 61 62 6c 65 20 63 6d 73 67 0a 20 20 20 20  riable cmsg.    
0f30: 76 61 72 69 61 62 6c 65 20 61 75 74 68 6f 72 0a  variable author.
0f40: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6c 61 73      variable las
0f50: 74 64 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  td.    variable 
0f60: 72 65 6d 6f 76 65 64 0a 20 20 20 20 76 61 72 69  removed.    vari
0f70: 61 62 6c 65 20 61 64 64 65 64 0a 20 20 20 20 76  able added.    v
0f80: 61 72 69 61 62 6c 65 20 63 68 61 6e 67 65 64 0a  ariable changed.
0f90: 0a 20 20 20 20 73 65 74 20 72 65 73 20 5b 6c 69  .    set res [li
0fa0: 73 74 20 5c 0a 09 09 64 61 74 65 20 20 20 20 24  st \...date    $
0fb0: 73 74 61 72 74 20 5c 0a 09 09 61 75 74 68 6f 72  start \...author
0fc0: 20 20 24 61 75 74 68 6f 72 20 5c 0a 09 09 63 6d    $author \...cm
0fd0: 73 67 20 20 20 20 24 63 6d 73 67 20 5c 0a 09 09  sg    $cmsg \...
0fe0: 72 65 6d 6f 76 65 64 20 24 72 65 6d 6f 76 65 64  removed $removed
0ff0: 20 5c 0a 09 09 61 64 64 65 64 20 20 20 24 61 64   \...added   $ad
1000: 64 65 64 20 5c 0a 09 09 63 68 61 6e 67 65 64 20  ded \...changed 
1010: 24 63 68 61 6e 67 65 64 20 5c 0a 09 09 6c 61 73  $changed \...las
1020: 74 64 20 20 20 24 6c 61 73 74 64 5d 0a 20 20 20  td   $lastd].   
1030: 20 43 6c 65 61 72 0a 20 20 20 20 72 65 74 75 72   Clear.    retur
1040: 6e 20 24 72 65 73 0a 7d 0a 0a 23 20 2d 2d 2d 2d  n $res.}..# ----
1050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 49 6e 74 65  ---------.# Inte
10a0: 72 6e 61 6c 73 0a 0a 6e 61 6d 65 73 70 61 63 65  rnals..namespace
10b0: 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 63 76 73 3a   eval ::vc::cvs:
10c0: 3a 77 73 3a 3a 63 73 65 74 73 20 7b 0a 0a 20 20  :ws::csets {..  
10d0: 20 20 23 20 43 73 65 74 20 73 74 6f 72 61 67 65    # Cset storage
10e0: 0a 0a 20 20 20 20 23 20 63 73 65 74 73 3a 20 69  ..    # csets: i
10f0: 64 20 2d 3e 20 64 69 63 74 0a 20 20 20 20 23 20  d -> dict.    # 
1100: 64 69 63 74 3a 20 64 61 74 65 0a 20 20 20 20 23  dict: date.    #
1110: 20 20 20 20 20 20 20 61 75 74 68 6f 72 0a 20 20         author.  
1120: 20 20 23 20 20 20 20 20 20 20 63 73 6d 67 0a 20    #       csmg. 
1130: 20 20 20 23 20 20 20 20 20 20 20 72 65 6d 6f 76     #       remov
1140: 65 64 0a 20 20 20 20 23 20 20 20 20 20 20 20 61  ed.    #       a
1150: 64 64 65 64 0a 20 20 20 20 23 20 20 20 20 20 20  dded.    #      
1160: 20 63 68 61 6e 67 65 64 0a 20 20 20 20 23 20 20   changed.    #  
1170: 20 20 20 20 20 6c 61 73 74 64 0a 0a 20 20 20 20       lastd..    
1180: 76 61 72 69 61 62 6c 65 20 20 6e 63 73 20 20 20  variable  ncs   
1190: 30 20 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66  0  ; # Counter f
11a0: 6f 72 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20  or changesets.  
11b0: 20 20 76 61 72 69 61 62 6c 65 20 20 63 73 65 74    variable  cset
11c0: 73 0a 20 20 20 20 61 72 72 61 79 20 73 65 74 20  s.    array set 
11d0: 63 73 65 74 73 20 7b 7d 20 3b 20 23 20 43 68 61  csets {} ; # Cha
11e0: 6e 67 65 73 65 74 20 64 61 74 61 0a 0a 20 20 20  ngeset data..   
11f0: 20 23 20 44 61 74 61 20 6f 66 20 74 68 65 20 63   # Data of the c
1200: 75 72 72 65 6e 74 20 63 68 61 6e 67 65 73 65 74  urrent changeset
1210: 20 62 75 69 6c 74 20 66 72 6f 6d 20 74 69 6d 65   built from time
1220: 6c 69 6e 65 20 65 6e 74 72 69 65 73 2e 0a 20 20  line entries..  
1230: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c    namespace eval
1240: 20 43 75 72 72 65 6e 74 20 7b 0a 09 76 61 72 69   Current {..vari
1250: 61 62 6c 65 20 20 73 74 61 72 74 20 20 20 7b 7d  able  start   {}
1260: 20 3b 20 23 20 64 61 74 65 20 74 68 65 20 63 68   ; # date the ch
1270: 61 6e 67 65 73 65 74 20 62 65 67 69 6e 73 0a 09  angeset begins..
1280: 76 61 72 69 61 62 6c 65 20 20 63 6d 73 67 20 20  variable  cmsg  
1290: 20 20 7b 7d 20 3b 20 23 20 63 6f 6d 6d 69 74 20    {} ; # commit 
12a0: 6d 65 73 73 61 67 65 20 6f 66 20 74 68 65 20 63  message of the c
12b0: 68 61 6e 67 65 73 65 74 0a 09 76 61 72 69 61 62  hangeset..variab
12c0: 6c 65 20 20 61 75 74 68 6f 72 20 20 7b 7d 20 3b  le  author  {} ;
12d0: 20 23 20 75 73 65 72 20 63 72 65 61 74 69 6e 67   # user creating
12e0: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 0a 09   the changeset..
12f0: 76 61 72 69 61 62 6c 65 20 20 6c 61 73 74 64 20  variable  lastd 
1300: 20 20 7b 7d 20 3b 20 23 20 76 65 72 73 69 6f 6e    {} ; # version
1310: 20 64 65 70 74 68 20 6f 66 20 6c 61 73 74 20 61   depth of last a
1320: 64 64 65 64 20 66 69 6c 65 2e 0a 09 76 61 72 69  dded file...vari
1330: 61 62 6c 65 20 20 72 65 6d 6f 76 65 64 20 7b 7d  able  removed {}
1340: 20 3b 20 23 20 66 69 6c 65 20 2d 3e 20 72 65 76   ; # file -> rev
1350: 69 73 69 6f 6e 20 6f 66 20 72 65 6d 6f 76 65 64  ision of removed
1360: 20 66 69 6c 65 73 2e 0a 09 76 61 72 69 61 62 6c   files...variabl
1370: 65 20 20 61 64 64 65 64 20 20 20 7b 7d 20 3b 20  e  added   {} ; 
1380: 23 20 66 69 6c 65 20 2d 3e 20 72 65 76 69 73 69  # file -> revisi
1390: 6f 6e 20 6f 66 20 61 64 64 65 64 20 66 69 6c 65  on of added file
13a0: 73 2e 0a 09 76 61 72 69 61 62 6c 65 20 20 63 68  s...variable  ch
13b0: 61 6e 67 65 64 20 7b 7d 20 3b 20 23 20 66 69 6c  anged {} ; # fil
13c0: 65 20 2d 3e 20 72 65 76 69 73 69 6f 6e 20 6f 66  e -> revision of
13d0: 20 6d 6f 64 69 66 69 65 64 20 66 69 6c 65 73 2e   modified files.
13e0: 0a 09 76 61 72 69 61 62 6c 65 20 20 66 69 6c 65  ..variable  file
13f0: 73 0a 09 61 72 72 61 79 20 73 65 74 20 66 69 6c  s..array set fil
1400: 65 73 20 7b 7d 20 20 20 3b 20 23 20 66 69 6c 65  es {}   ; # file
1410: 20 2d 3e 20 72 65 76 69 73 69 6f 6e 0a 20 20 20   -> revision.   
1420: 20 7d 0a 0a 20 20 20 20 6e 61 6d 65 73 70 61 63   }..    namespac
1430: 65 20 65 78 70 6f 72 74 20 69 6e 69 74 20 61 64  e export init ad
1440: 64 20 64 6f 6e 65 20 67 65 74 20 6e 75 6d 0a 7d  d done get num.}
1450: 0a 0a 23 20 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 2d  ----------------
1480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14a0: 2d 0a 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61  -.# Ready..packa
14b0: 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 63  ge provide vc::c
14c0: 76 73 3a 3a 77 73 3a 3a 63 73 65 74 73 20 31 2e  vs::ws::csets 1.
14d0: 30 0a 72 65 74 75 72 6e 0a                       0.return.