| | @@ -18,10 +18,11 @@ |
| 18 | 18 | ## Requirements |
| 19 | 19 | |
| 20 | 20 | package require Tcl 8.4 ; # Required runtime. |
| 21 | 21 | package require snit ; # OO system. |
| 22 | 22 | package require struct::list ; # List assignment |
| 23 | +package require vc::tools::log ; # User feedback. |
| 23 | 24 | |
| 24 | 25 | # # ## ### ##### ######## ############# ##################### |
| 25 | 26 | ## |
| 26 | 27 | |
| 27 | 28 | snit::type ::vc::fossil::import::cvs::wsstate { |
| | @@ -34,21 +35,25 @@ |
| 34 | 35 | return |
| 35 | 36 | } |
| 36 | 37 | |
| 37 | 38 | method name {} { return $myname } |
| 38 | 39 | |
| 39 | | - method add {revisioninfo} { |
| 40 | | - # revisioninfo = list (rid path label ...) /triples |
| 40 | + method add {oprevisioninfo} { |
| 41 | + # oprevisioninfo = list (rid path label op ...) /quadruples |
| 41 | 42 | |
| 42 | 43 | # Overwrite all changed files (identified by path) with the |
| 43 | | - # new revisions. This keeps all unchanged files. |
| 44 | + # new revisions. This keeps all unchanged files. Files marked |
| 45 | + # as dead are removed. |
| 44 | 46 | |
| 45 | | - # BUG / TODO for FIX: Have to recognize dead files, to remove |
| 46 | | - # them. We need the per-file revision optype for this. |
| 47 | + foreach {rid path label rop} $oprevisioninfo { |
| 48 | + log write 5 wss {$myop($rop) $label} |
| 47 | 49 | |
| 48 | | - foreach {rid path label} $revisioninfo { |
| 49 | | - set mystate($path) [list $rid $label] |
| 50 | + if {$rop < 0} { |
| 51 | + unset mystate($path) |
| 52 | + } else { |
| 53 | + set mystate($path) [list $rid $label] |
| 54 | + } |
| 50 | 55 | } |
| 51 | 56 | return |
| 52 | 57 | } |
| 53 | 58 | |
| 54 | 59 | method get {} { |
| | @@ -65,10 +70,13 @@ |
| 65 | 70 | return |
| 66 | 71 | } |
| 67 | 72 | |
| 68 | 73 | method getid {} { return $myid } |
| 69 | 74 | |
| 75 | + method defstate {s} { array set mystate $s ; return } |
| 76 | + method getstate {} { return [array get mystate] } |
| 77 | + |
| 70 | 78 | # # ## ### ##### ######## ############# |
| 71 | 79 | ## State |
| 72 | 80 | |
| 73 | 81 | variable myname {} ; # Name of the LOD the workspace is |
| 74 | 82 | # for. |
| | @@ -75,10 +83,17 @@ |
| 75 | 83 | variable myid {} ; # Record id of the fossil manifest |
| 76 | 84 | # associated with the current state. |
| 77 | 85 | variable mystate -array {} ; # Map from paths to the recordid of |
| 78 | 86 | # the file revision behind it, and |
| 79 | 87 | # the associated label for logging. |
| 88 | + |
| 89 | + typevariable myop -array { |
| 90 | + -1 REM |
| 91 | + 0 --- |
| 92 | + 1 ADD |
| 93 | + 2 CHG |
| 94 | + } |
| 80 | 95 | |
| 81 | 96 | # # ## ### ##### ######## ############# |
| 82 | 97 | ## Configuration |
| 83 | 98 | |
| 84 | 99 | pragma -hastypeinfo no ; # no type introspection |
| | @@ -89,13 +104,15 @@ |
| 89 | 104 | } |
| 90 | 105 | |
| 91 | 106 | namespace eval ::vc::fossil::import::cvs { |
| 92 | 107 | namespace export wsstate |
| 93 | 108 | namespace eval wsstate { |
| 109 | + namespace import ::vc::tools::log |
| 110 | + log register wss |
| 94 | 111 | } |
| 95 | 112 | } |
| 96 | 113 | |
| 97 | 114 | # # ## ### ##### ######## ############# ##################### |
| 98 | 115 | ## Ready |
| 99 | 116 | |
| 100 | 117 | package provide vc::fossil::import::cvs::wsstate 1.0 |
| 101 | 118 | return |
| 102 | 119 | |