Hex Artifact Content
Not logged in

Artifact 69ed821c29ae347fabf02ee021857d2718c1b5cb:

File tools/cvs2fossil/lib/c2f_project.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 50 72 6f  ########..## Pro
0200: 6a 65 63 74 2c 20 70 61 72 74 20 6f 66 20 61 20  ject, part of a 
0210: 43 56 53 20 72 65 70 6f 73 69 74 6f 72 79 2e 20  CVS repository. 
0220: 4d 75 6c 74 69 70 6c 65 20 69 6e 73 74 61 6e 63  Multiple instanc
0230: 65 73 20 61 72 65 20 70 6f 73 73 69 62 6c 65 2e  es are possible.
0240: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
0250: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0260: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
0280: 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a  ## Requirements.
0290: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
02a0: 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20 20   Tcl 8.4        
02b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02c0: 20 20 20 20 20 20 20 20 20 3b 20 23 20 52 65 71           ; # Req
02d0: 75 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70  uired runtime..p
02e0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73  ackage require s
02f0: 6e 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20  nit             
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0310: 20 20 20 20 20 20 20 3b 20 23 20 4f 4f 20 73 79         ; # OO sy
0320: 73 74 65 6d 2e 0a 70 61 63 6b 61 67 65 20 72 65  stem..package re
0330: 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c  quire vc::fossil
0340: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66  ::import::cvs::f
0350: 69 6c 65 20 20 20 20 20 20 20 20 20 20 20 3b 20  ile           ; 
0360: 23 20 43 56 53 20 61 72 63 68 69 76 65 20 66 69  # CVS archive fi
0370: 6c 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75  le..package requ
0380: 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  ire vc::fossil::
0390: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61  import::cvs::sta
03a0: 74 65 20 20 20 20 20 20 20 20 20 20 3b 20 23 20  te          ; # 
03b0: 53 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70  State storage..p
03c0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76  ackage require v
03d0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
03e0: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a  t::cvs::project:
03f0: 3a 73 79 6d 20 20 20 3b 20 23 20 50 65 72 20 70  :sym   ; # Per p
0400: 72 6f 6a 65 63 74 20 73 79 6d 62 6f 6c 73 2e 0a  roject symbols..
0410: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0420: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0430: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74  rt::cvs::project
0440: 3a 3a 74 72 75 6e 6b 20 3b 20 23 20 50 65 72 20  ::trunk ; # Per 
0450: 70 72 6f 6a 65 63 74 20 74 72 75 6e 6b 2c 20 6d  project trunk, m
0460: 61 69 6e 20 6c 6f 64 0a 70 61 63 6b 61 67 65 20  ain lod.package 
0470: 72 65 71 75 69 72 65 20 73 74 72 75 63 74 3a 3a  require struct::
0480: 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 20  list            
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04a0: 3b 20 23 20 41 64 76 61 6e 63 65 64 20 6c 69 73  ; # Advanced lis
04b0: 74 20 6f 70 65 72 61 74 69 6f 6e 73 2e 2e 0a 0a  t operations....
04c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
04d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
04e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
04f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
0500: 20 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a   ..snit::type ::
0510: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0520: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74  rt::cvs::project
0530: 20 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23 23   {.    # # ## ##
0540: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
0550: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
0560: 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 49     ## Public API
0570: 0a 0a 20 20 20 20 63 6f 6e 73 74 72 75 63 74 6f  ..    constructo
0580: 72 20 7b 70 61 74 68 20 72 7d 20 7b 0a 09 73 65  r {path r} {..se
0590: 74 20 6d 79 62 61 73 65 20 20 20 20 20 20 20 24  t mybase       $
05a0: 70 61 74 68 0a 09 73 65 74 20 6d 79 72 65 70 6f  path..set myrepo
05b0: 73 69 74 6f 72 79 20 24 72 0a 09 73 65 74 20 6d  sitory $r..set m
05c0: 79 74 72 75 6e 6b 20 20 20 20 20 20 5b 74 72 75  ytrunk      [tru
05d0: 6e 6b 20 25 41 55 54 4f 25 5d 0a 09 72 65 74 75  nk %AUTO%]..retu
05e0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
05f0: 74 68 6f 64 20 62 61 73 65 20 20 7b 7d 20 7b 20  thod base  {} { 
0600: 72 65 74 75 72 6e 20 24 6d 79 62 61 73 65 20 20  return $mybase  
0610: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 74 72 75  }.    method tru
0620: 6e 6b 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24  nk {} { return $
0630: 6d 79 74 72 75 6e 6b 20 7d 0a 0a 20 20 20 20 6d  mytrunk }..    m
0640: 65 74 68 6f 64 20 70 72 69 6e 74 62 61 73 65 20  ethod printbase 
0650: 7b 7d 20 7b 0a 09 69 66 20 7b 24 6d 79 62 61 73  {} {..if {$mybas
0660: 65 20 65 71 20 22 22 7d 20 7b 72 65 74 75 72 6e  e eq ""} {return
0670: 20 3c 52 65 70 6f 73 69 74 6f 72 79 3e 7d 0a 09   <Repository>}..
0680: 72 65 74 75 72 6e 20 24 6d 79 62 61 73 65 0a 20  return $mybase. 
0690: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
06a0: 20 73 65 74 69 64 20 7b 69 64 7d 20 7b 20 73 65   setid {id} { se
06b0: 74 20 6d 79 69 64 20 24 69 64 20 3b 20 72 65 74  t myid $id ; ret
06c0: 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f  urn }..    metho
06d0: 64 20 61 64 64 66 69 6c 65 20 7b 72 63 73 20 75  d addfile {rcs u
06e0: 73 72 20 65 78 65 63 75 74 61 62 6c 65 7d 20 7b  sr executable} {
06f0: 0a 09 73 65 74 20 6d 79 66 69 6c 65 73 28 24 72  ..set myfiles($r
0700: 63 73 29 20 5b 6c 69 73 74 20 24 75 73 72 20 24  cs) [list $usr $
0710: 65 78 65 63 75 74 61 62 6c 65 5d 0a 09 72 65 74  executable]..ret
0720: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
0730: 65 74 68 6f 64 20 66 69 6c 65 6e 61 6d 65 73 20  ethod filenames 
0740: 7b 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 6c 73  {} {..return [ls
0750: 6f 72 74 20 2d 64 69 63 74 20 5b 61 72 72 61 79  ort -dict [array
0760: 20 6e 61 6d 65 73 20 6d 79 66 69 6c 65 73 5d 5d   names myfiles]]
0770: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
0780: 6f 64 20 66 69 6c 65 73 20 7b 7d 20 7b 0a 09 72  od files {} {..r
0790: 65 74 75 72 6e 20 5b 54 68 65 46 69 6c 65 73 5d  eturn [TheFiles]
07a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 64 65 6c 65  .    }..    dele
07b0: 67 61 74 65 20 6d 65 74 68 6f 64 20 64 65 66 61  gate method defa
07c0: 75 74 68 6f 72 20 20 20 20 20 20 20 74 6f 20 6d  uthor       to m
07d0: 79 72 65 70 6f 73 69 74 6f 72 79 0a 20 20 20 20  yrepository.    
07e0: 64 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20  delegate method 
07f0: 64 65 66 63 6d 65 73 73 61 67 65 20 20 20 20 20  defcmessage     
0800: 74 6f 20 6d 79 72 65 70 6f 73 69 74 6f 72 79 0a  to myrepository.
0810: 20 20 20 20 64 65 6c 65 67 61 74 65 20 6d 65 74      delegate met
0820: 68 6f 64 20 74 72 75 6e 6b 6f 6e 6c 79 20 20 20  hod trunkonly   
0830: 20 20 20 20 74 6f 20 6d 79 72 65 70 6f 73 69 74      to myreposit
0840: 6f 72 79 0a 20 20 20 20 64 65 6c 65 67 61 74 65  ory.    delegate
0850: 20 6d 65 74 68 6f 64 20 63 6f 6d 6d 69 74 6d 65   method commitme
0860: 73 73 61 67 65 6f 66 20 74 6f 20 6d 79 72 65 70  ssageof to myrep
0870: 6f 73 69 74 6f 72 79 0a 0a 20 20 20 20 6d 65 74  ository..    met
0880: 68 6f 64 20 64 65 66 6d 65 74 61 20 7b 62 69 64  hod defmeta {bid
0890: 20 61 69 64 20 63 69 64 7d 20 7b 0a 09 72 65 74   aid cid} {..ret
08a0: 75 72 6e 20 5b 24 6d 79 72 65 70 6f 73 69 74 6f  urn [$myreposito
08b0: 72 79 20 64 65 66 6d 65 74 61 20 24 6d 79 69 64  ry defmeta $myid
08c0: 20 24 62 69 64 20 24 61 69 64 20 24 63 69 64 5d   $bid $aid $cid]
08d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
08e0: 6f 64 20 67 65 74 73 79 6d 62 6f 6c 20 7b 6e 61  od getsymbol {na
08f0: 6d 65 7d 20 7b 0a 09 69 66 20 7b 21 5b 69 6e 66  me} {..if {![inf
0900: 6f 20 65 78 69 73 74 73 20 6d 79 73 79 6d 62 6f  o exists mysymbo
0910: 6c 73 28 24 6e 61 6d 65 29 5d 7d 20 7b 0a 09 20  ls($name)]} {.. 
0920: 20 20 20 73 65 74 20 6d 79 73 79 6d 62 6f 6c 73     set mysymbols
0930: 28 24 6e 61 6d 65 29 20 5c 0a 09 09 5b 73 79 6d  ($name) \...[sym
0940: 20 25 41 55 54 4f 25 20 24 6e 61 6d 65 20 5b 24   %AUTO% $name [$
0950: 6d 79 72 65 70 6f 73 69 74 6f 72 79 20 64 65 66  myrepository def
0960: 73 79 6d 62 6f 6c 20 24 6d 79 69 64 20 24 6e 61  symbol $myid $na
0970: 6d 65 5d 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  me]]..}..return 
0980: 24 6d 79 73 79 6d 62 6f 6c 73 28 24 6e 61 6d 65  $mysymbols($name
0990: 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 70  ).    }..    # p
09a0: 61 73 73 20 49 20 70 65 72 73 69 73 74 65 6e 63  ass I persistenc
09b0: 65 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 65 72  e.    method per
09c0: 73 69 73 74 20 7b 7d 20 7b 0a 09 73 74 61 74 65  sist {} {..state
09d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09   transaction {..
09e0: 20 20 20 20 23 20 50 72 6f 6a 65 63 74 20 64 61      # Project da
09f0: 74 61 20 66 69 72 73 74 2e 20 52 65 71 75 69 72  ta first. Requir
0a00: 65 64 20 73 6f 20 74 68 61 74 20 77 65 20 68 61  ed so that we ha
0a10: 76 65 20 69 74 73 20 69 64 0a 09 20 20 20 20 23  ve its id..    #
0a20: 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 66   ready for the f
0a30: 69 6c 65 73 2e 0a 0a 09 20 20 20 20 73 74 61 74  iles....    stat
0a40: 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52 54  e run {...INSERT
0a50: 20 49 4e 54 4f 20 70 72 6f 6a 65 63 74 20 28 70   INTO project (p
0a60: 69 64 2c 20 20 6e 61 6d 65 29 0a 09 09 56 41 4c  id,  name)...VAL
0a70: 55 45 53 20 20 20 20 20 20 20 20 20 20 20 20 20  UES             
0a80: 20 28 4e 55 4c 4c 2c 20 24 6d 79 62 61 73 65 29   (NULL, $mybase)
0a90: 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65  ;..    }..    se
0aa0: 74 20 6d 79 69 64 20 5b 73 74 61 74 65 20 69 64  t myid [state id
0ab0: 5d 0a 0a 09 20 20 20 20 23 20 54 68 65 6e 20 61  ]...    # Then a
0ac0: 6c 6c 20 66 69 6c 65 73 2c 20 77 69 74 68 20 70  ll files, with p
0ad0: 72 6f 70 65 72 20 62 61 63 6b 72 65 66 65 72 65  roper backrefere
0ae0: 6e 63 65 20 74 6f 20 74 68 65 69 72 0a 09 20 20  nce to their..  
0af0: 20 20 23 20 70 72 6f 6a 65 63 74 2e 0a 0a 09 20    # project.... 
0b00: 20 20 20 66 6f 72 65 61 63 68 20 7b 72 63 73 20     foreach {rcs 
0b10: 69 74 65 6d 7d 20 5b 61 72 72 61 79 20 67 65 74  item} [array get
0b20: 20 6d 79 66 69 6c 65 73 5d 20 7b 0a 09 09 73 74   myfiles] {...st
0b30: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67  ruct::list assig
0b40: 6e 20 24 69 74 65 6d 20 75 73 72 20 65 78 65 63  n $item usr exec
0b50: 75 74 61 62 6c 65 0a 09 09 73 74 61 74 65 20 72  utable...state r
0b60: 75 6e 20 7b 0a 09 09 20 20 20 20 49 4e 53 45 52  un {...    INSER
0b70: 54 20 49 4e 54 4f 20 66 69 6c 65 20 28 66 69 64  T INTO file (fid
0b80: 2c 20 20 70 69 64 2c 20 20 20 6e 61 6d 65 2c 20  ,  pid,   name, 
0b90: 76 69 73 69 62 6c 65 2c 20 65 78 65 63 29 0a 09  visible, exec)..
0ba0: 09 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 20  .    VALUES     
0bb0: 20 20 20 20 20 20 28 4e 55 4c 4c 2c 20 24 6d 79        (NULL, $my
0bc0: 69 64 2c 20 24 72 63 73 2c 20 24 75 73 72 2c 20  id, $rcs, $usr, 
0bd0: 20 20 20 24 65 78 65 63 75 74 61 62 6c 65 29 3b     $executable);
0be0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  ...}..    }..}..
0bf0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0c00: 20 20 23 20 70 61 73 73 20 49 49 20 70 65 72 73    # pass II pers
0c10: 69 73 74 65 6e 63 65 0a 20 20 20 20 6d 65 74 68  istence.    meth
0c20: 6f 64 20 70 65 72 73 69 73 74 72 65 76 20 7b 7d  od persistrev {}
0c30: 20 7b 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61   {..state transa
0c40: 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 23 20 54  ction {..    # T
0c50: 4f 44 4f 3a 20 70 65 72 20 70 72 6f 6a 65 63 74  ODO: per project
0c60: 20 70 65 72 73 69 73 74 65 6e 63 65 20 28 73 79   persistence (sy
0c70: 6d 62 6f 6c 73 2c 20 6d 65 74 61 20 64 61 74 61  mbols, meta data
0c80: 29 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 66  )..    foreach f
0c90: 20 5b 54 68 65 46 69 6c 65 73 5d 20 7b 0a 09 09   [TheFiles] {...
0ca0: 24 66 20 70 65 72 73 69 73 74 0a 09 20 20 20 20  $f persist..    
0cb0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  }..}..return.   
0cc0: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
0cd0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
0ce0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
0cf0: 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 20      ## State..  
0d00: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 61 73    variable mybas
0d10: 65 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b  e           {} ;
0d20: 20 23 20 50 72 6f 6a 65 63 74 20 64 69 72 65 63   # Project direc
0d30: 74 6f 72 79 2e 0a 20 20 20 20 76 61 72 69 61 62  tory..    variab
0d40: 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20 20 20  le myid         
0d50: 20 20 20 20 7b 7d 20 3b 20 23 20 50 72 6f 6a 65      {} ; # Proje
0d60: 63 74 20 69 64 20 69 6e 20 74 68 65 20 70 65 72  ct id in the per
0d70: 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a 20  sistent state.. 
0d80: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 72     variable mytr
0d90: 75 6e 6b 20 20 20 20 20 20 20 20 20 20 7b 7d 20  unk          {} 
0da0: 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f  ; # Reference to
0db0: 20 74 68 65 20 6d 61 69 6e 20 6c 69 6e 65 20 6f   the main line o
0dc0: 66 0a 09 09 09 09 20 20 20 23 20 64 65 76 65 6c  f.....   # devel
0dd0: 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 70  opment for the p
0de0: 72 6f 6a 65 63 74 2e 0a 20 20 20 20 76 61 72 69  roject..    vari
0df0: 61 62 6c 65 20 6d 79 66 69 6c 65 73 20 20 20 2d  able myfiles   -
0e00: 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70  array {} ; # Map
0e10: 73 20 74 68 65 20 72 63 73 20 61 72 63 68 69 76  s the rcs archiv
0e20: 65 20 70 61 74 68 73 20 74 6f 0a 09 09 09 09 20  e paths to..... 
0e30: 20 20 23 20 74 68 65 69 72 20 75 73 65 72 2d 76    # their user-v
0e40: 69 73 69 62 6c 65 20 66 69 6c 65 73 2e 0a 20 20  isible files..  
0e50: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 66 6f 62    variable myfob
0e60: 6a 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b  j           {} ;
0e70: 20 23 20 46 69 6c 65 20 6f 62 6a 65 63 74 73 20   # File objects 
0e80: 66 6f 72 20 74 68 65 20 72 63 73 20 61 72 63 68  for the rcs arch
0e90: 69 76 65 73 0a 20 20 20 20 76 61 72 69 61 62 6c  ives.    variabl
0ea0: 65 20 6d 79 72 65 70 6f 73 69 74 6f 72 79 20 20  e myrepository  
0eb0: 20 20 20 7b 7d 20 3b 20 23 20 52 65 70 6f 73 69     {} ; # Reposi
0ec0: 74 6f 72 79 20 74 68 65 20 70 72 6a 65 63 74 20  tory the prject 
0ed0: 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20  belongs to..    
0ee0: 76 61 72 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f  variable mysymbo
0ef0: 6c 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23  ls -array {} ; #
0f00: 20 4d 61 70 20 73 79 6d 62 6f 6c 20 6e 61 6d 65   Map symbol name
0f10: 73 20 74 6f 20 70 72 6f 6a 65 63 74 2d 6c 65 76  s to project-lev
0f20: 65 6c 0a 09 09 09 09 20 20 20 23 20 73 79 6d 62  el.....   # symb
0f30: 6f 6c 20 6f 62 6a 65 63 74 73 2e 0a 0a 20 20 20  ol objects...   
0f40: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
0f50: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0f60: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20  ########.    ## 
0f70: 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73  Internal methods
0f80: 0a 0a 20 20 20 20 70 72 6f 63 20 54 68 65 46 69  ..    proc TheFi
0f90: 6c 65 73 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20  les {} {..upvar 
0fa0: 31 20 6d 79 66 69 6c 65 73 20 6d 79 66 69 6c 65  1 myfiles myfile
0fb0: 73 20 6d 79 66 6f 62 6a 20 6d 79 66 6f 62 6a 20  s myfobj myfobj 
0fc0: 73 65 6c 66 20 73 65 6c 66 0a 09 69 66 20 7b 21  self self..if {!
0fd0: 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 66 6f 62 6a  [llength $myfobj
0fe0: 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79  ]} {..    set my
0ff0: 66 6f 62 6a 20 5b 45 6d 70 74 79 46 69 6c 65 73  fobj [EmptyFiles
1000: 20 6d 79 66 69 6c 65 73 5d 0a 09 7d 0a 09 72 65   myfiles]..}..re
1010: 74 75 72 6e 20 24 6d 79 66 6f 62 6a 0a 20 20 20  turn $myfobj.   
1020: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 45 6d 70   }..    proc Emp
1030: 74 79 46 69 6c 65 73 20 7b 66 76 7d 20 7b 0a 09  tyFiles {fv} {..
1040: 75 70 76 61 72 20 31 20 24 66 76 20 6d 79 66 69  upvar 1 $fv myfi
1050: 6c 65 73 20 73 65 6c 66 20 73 65 6c 66 0a 09 73  les self self..s
1060: 65 74 20 72 65 73 20 7b 7d 0a 09 66 6f 72 65 61  et res {}..forea
1070: 63 68 20 72 63 73 20 5b 6c 73 6f 72 74 20 2d 64  ch rcs [lsort -d
1080: 69 63 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73  ict [array names
1090: 20 6d 79 66 69 6c 65 73 5d 5d 20 7b 0a 09 20 20   myfiles]] {..  
10a0: 20 20 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61    struct::list a
10b0: 73 73 69 67 6e 20 24 6d 79 66 69 6c 65 73 28 24  ssign $myfiles($
10c0: 72 63 73 29 20 66 20 65 78 65 63 75 74 61 62 6c  rcs) f executabl
10d0: 65 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  e..    lappend r
10e0: 65 73 20 5b 66 69 6c 65 20 25 41 55 54 4f 25 20  es [file %AUTO% 
10f0: 24 72 63 73 20 24 66 20 24 65 78 65 63 75 74 61  $rcs $f $executa
1100: 62 6c 65 20 24 73 65 6c 66 5d 0a 09 7d 0a 09 72  ble $self]..}..r
1110: 65 74 75 72 6e 20 24 72 65 73 0a 20 20 20 20 7d  eturn $res.    }
1120: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
1130: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
1140: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
1150: 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69    ## Configurati
1160: 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d  on..    pragma -
1170: 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e  hastypeinfo    n
1180: 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69  o  ; # no type i
1190: 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20  ntrospection.   
11a0: 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f   pragma -hasinfo
11b0: 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20          no  ; # 
11c0: 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73  no object intros
11d0: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67  pection.    prag
11e0: 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68 6f  ma -hastypemetho
11f0: 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65 20  ds no  ; # type 
1200: 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74 2e  is not relevant.
1210: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
1220: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
1230: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a  #############.}.
1240: 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
1250: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
1260: 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20 20  port::cvs {.    
1270: 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74  namespace export
1280: 20 70 72 6f 6a 65 63 74 0a 20 20 20 20 6e 61 6d   project.    nam
1290: 65 73 70 61 63 65 20 65 76 61 6c 20 70 72 6f 6a  espace eval proj
12a0: 65 63 74 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65  ect {..namespace
12b0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
12c0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
12d0: 73 3a 3a 66 69 6c 65 0a 09 6e 61 6d 65 73 70 61  s::file..namespa
12e0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
12f0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
1300: 63 76 73 3a 3a 73 74 61 74 65 0a 09 23 20 49 6d  cvs::state..# Im
1310: 70 6f 72 74 20 6e 6f 74 20 72 65 71 75 69 72 65  port not require
1320: 64 2c 20 61 6c 72 65 61 64 79 20 61 20 63 68 69  d, already a chi
1330: 6c 64 20 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23  ld namespace...#
1340: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72   namespace impor
1350: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
1360: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f  import::cvs::pro
1370: 6a 65 63 74 3a 3a 73 79 6d 0a 20 20 20 20 7d 0a  ject::sym.    }.
1380: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  }..# # ## ### ##
1390: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
13a0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
13b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13c0: 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61  .## Ready..packa
13d0: 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66  ge provide vc::f
13e0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
13f0: 76 73 3a 3a 70 72 6f 6a 65 63 74 20 31 2e 30 0a  vs::project 1.0.
1400: 72 65 74 75 72 6e 0a                             return.