@@ -0,0 +1,370 @@
1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #!/bin/sh
2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # -*- tcl -*- \
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exec tclsh "$0" ${1+"$@"}
4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # -----------------------------------------------------------------------------
6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Make private packages accessible.
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend auto_path [file join [file dirname [info script]] lib]
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require rcsparser
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require fileutil
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # -----------------------------------------------------------------------------
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Repository management (CVS)
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace eval ::cvs {
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable base ; set base {} ; # Repository toplevel directory.
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable npaths ; array set npaths {} ; # path -> actual path mapping.
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable rpaths ; array set rpaths {} ; # path -> rcs file mapping.
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable cmsg ; array set cmsg {} ; # Cache of commit messages.
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::cvs::hextime {hex} {
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set t 0
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach d [string map {
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ a 10 b 11 c 12 d 13 e 14 f 15
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ A 10 B 11 C 12 D 13 E 14 F 15
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } [split $hex {}]] {
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set t [expr {($t << 4) + $d}];#horner
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $t
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::cvs::at {path} {
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable base $path
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::cvs::cmsg {path rev} {
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable cmsg
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set key [list $path $rev]
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![info exists cmsg($key)]} {
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rcs [cvs::rcsfile $path]
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts stderr "scan $path => $rcs"
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set p [::rcsparser::process $rcs]
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {r msg} $p(commit) {
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cmsg([list $path $r]) $msg
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![info exists cmsg($key)]} {
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -code error "Bogus revision $rev of file $path"
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $cmsg($key)
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::cvs::norm {path} {
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable npaths
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![info exists npaths($path)]} {
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set npaths($path) [NormFile $path]
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $npaths($path)
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::cvs::NormFile {path} {
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable base
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set f $base/$path,v
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[::file exists $f]} {return $path}
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set hd [::file dirname $path]
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set tl [::file tail $path]
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set f $base/$hd/Attic/$tl,v
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[::file exists $f]} {return $path}
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Bad. The dir can be truncated, i.e. it may not be an exact
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # subdirectory of base, but deeper inside, with parents between it
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # and base left out. Example (from the tcllib history file):
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # M3f1d1245|afaupell|<remote>|ipentry|1.2|ChangeLog
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # The correct path is 'tklib/modules/ipentry'.
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # This we have to resolve too.
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # normalize dance - old fileutil, modern fileutil (cvs head) doesn't do that.
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set bx [file normalize $base]
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach c [fileutil::findByPattern $bx -glob $hd] {
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cx [fileutil::stripPath $bx $c]
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set c $base/$cx
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set f $c/$tl,v
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[::file exists $f]} {return $cx/$tl}
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set f $c/Attic/$tl,v
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[::file exists $f]} {return $cx/$tl}
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts stderr <$f>
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -code error "Unable to locate actual file for $path"
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::cvs::rcsfile {path} {
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable rpaths
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![info exists rpaths($path)]} {
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rpaths($path) [RcsFile $path]
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $rpaths($path)
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::cvs::RcsFile {path} {
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable base
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set f $base/$path,v
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[::file exists $f]} {return $f}
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set hd [::file dirname $path]
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set tl [::file tail $path]
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set f $base/$hd/Attic/$tl,v
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[::file exists $f]} {return $f}
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # We do not have truncated directories here, assuming that only
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # norm paths are fed into this command.
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if 0 {
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Bad. The dir can be truncated, i.e. it may not be an exact
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # subdirectory of base, but deeper inside, with parents
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # between it and base left out. Example (from the tcllib
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # history file):
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # M3f1d1245|afaupell|<remote>|ipentry|1.2|ChangeLog The
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # correct path is 'tklib/modules/ipentry'. This we have to
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # resolve too.
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # normalize dance - old fileutil, modern fileutil (cvs head)
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # doesn't do that.
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set bx [file normalize $base]
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach c [fileutil::findByPattern $bx -glob $hd] {
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set c $base/[fileutil::stripPath $bx $c]
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set f $c/$tl,v
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[::file exists $f]} {return $f}
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set f $c/Attic/$tl,v
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[::file exists $f]} {return $f}
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts stderr <$f>
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -code error "Unable to locate rcs file for $path"
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::cvs::history {} {
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable base
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $base/CVSROOT/history
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # -----------------------------------------------------------------------------
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # -----------------------------------------------------------------------------
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cvs::at [lindex $argv 0]
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts [::cvs::norm ipentry/ChangeLog]
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #exit
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #changeset state
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ global cs csf
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set cs {
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ start {} end {} cm {}
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ usr {} dt {}
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set csf {}
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc rh {} {
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ global argv cs csf repo
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set f [open [cvs::history] r]
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {[gets $f line] >= 0} {
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Decode line
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {op usr _ dir rev file} [split [string trim $line] |] break
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set ts [cvs::hextime [string range $op 1 end]]
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set op [string index $op 0]
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Filter out irrelevant parts
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$op eq "O"} continue ; # checkout
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$op eq "F"} continue ; # release
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$op eq "T"} continue ; # rtag
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$op eq "W"} continue ; # delete on update
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$op eq "U"} continue ; # update
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$op eq "P"} continue ; # update by patch
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if {$op eq "G"} continue ; # merge on update - FUTURE - identifies mergepoints.
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$op eq "C"} continue ; # conflict on update - s.a.
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$op eq "E"} continue ; # export
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # left types
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # M: commit
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # A: addition
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # R: removal
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set df $dir/$file
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[newcs $op $usr $ts $rev df cause]} {
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # NOTE 1: ChangeSets containing CVSROOT => remove such files.
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # NOTE 2: Empty changesets, ignore.
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #commit
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ csstats
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$cause eq "cmsg"} {
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set msg
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set msg ""
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$cs(end) ne ""} {
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts =============================/$cause\ delta\ [expr {$ts - $cs(end)}]
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts =============================/$cause
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ csclear
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Note: newcs normalizes df, in case the log information is
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # bogus. So the df here may be different from before newcs
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ csadd $op $usr $ts $rev $df
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # apply modification to workspace
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc newcs {op usr ts rev dfv rv} {
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ global cs csf
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $rv reason $dfv df
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Logic to detect when a new change set begins. A new change sets
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # has started with the current entry when the entry
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 1. is for a different user than the last.
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 2. tries to add a file to the changeset which is already part of it.
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 3.is on the trunk, and the last on a branch, or vice versa.
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 4. the current entry has a different commit message than the last.
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set df [cvs::norm $df]
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # User changed
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$usr ne $cs(usr)} {
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set reason user
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # File is already in the changeset
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[info exists csf($df)]} {
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set reason file
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # last/current are different regarding trunk/branch
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set depth [llength [split $rev .]]
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {($cs(lastd) == 2) != ($depth == 2)} {
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set reason branch
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Commit message changed
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[cvs::cmsg $cs(lastf) $cs(lastr)] ne [cvs::cmsg $df $rev]} {
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set reason cmsg
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Same changeset
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc csclear {} {
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ global cs csf
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set cs {start {} usr {} end {} dt {}}
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array unset csf *
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc csadd {op usr ts rev df} {
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ global cs csf
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$cs(usr) eq ""} {set cs(usr) $usr}
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$cs(start) eq ""} {
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cs(start) $ts
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend cs(dt) [expr {$ts - $cs(end)}]
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cs(end) $ts
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set csf($df) [list $op $rev]
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cs(lastf) $df
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cs(lastr) $rev
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cs(lastd) [llength [split $rev .]]
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts [list $op [clock format $ts] $usr $rev $df]
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc csstats {} {
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ global cs csf
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$cs(start) eq ""} return
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts "files: [array size csf]"
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts "delta: $cs(dt)"
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts "range: [expr {$cs(end) - $cs(start)}] seconds"
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rh
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exit
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ =========================================
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ new fossil
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ new fossil workspace
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ open history
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach line {
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ignore unwanted lines
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ accumulate changesets data
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ new change-set => commit and continue
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ current branch and branch of new change different ?
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ => move fossil workspace to proper revision.
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ apply change to workspace
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ uncommitted
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if uncommitted => commit
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ delete workspace
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ copy fossil repo to destination
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ =========================================
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Not dealt with in outline: branches, tags, merging
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ =========================================
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ complexities
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - apply to workspace
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - remove simple, direct translation
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - add => requires extraction of indicated revision from ,v
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - modify => see above (without add following)
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - ,v file => Can be the either dir/file,v, or dir/Attic/file,v
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Both ? Priority ?
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - How to detect changes on branches ?
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - Have to keep knowledge of which branches went there.
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ => save change-sets information, + uuid in fossil
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ => need only the leaves of each branch, and of branch points.
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ => better keep all until complete.
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ => uuid can be gotten from 'manifest.uuid' in workspace.
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ - keep tag information ? (symbolics)
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ =========================================
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CVSROOT=ORIGIN
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cvs -d ORIGIN checkout -r REV FILE
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Extract specific revision of a specific file.
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ -q, -Q quietness