@@ -0,0 +1,342 @@
1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace eval ::vc::cvs::ws::branch {}
4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Trivial storage of all branch data as a rectangular table. We can
6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # think up a better suited storage system later, when we know what
7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # type of queries are made to this module.
8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
9 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::def {f dv deflist} {
10 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $dv date
11 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable bra
12 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {tag rev} $deflist {
13 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ignore non-branch tags
14 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength [split $rev .]] < 4} continue
15 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if 0 {
17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if { ($rev ne "1.1.1.1") && ![string match *.0.2 $rev] } {
18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 1.1.1.1 is the base of vendor branches, usually. *.0.y
19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # is the base of regular branches where nothing is on the
20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # branch yet, only its root is marked. Everything else is
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # noteworthy for now.
22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts $f/$rev/$tag
23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set root [revroot $rev]
27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend bra [list $date($root) $tag $f $rev]
28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::revroot {rev} {
32 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [join [lrange [split $rev .] 0 end-2] .]
33 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ! Files in a branch can appear only after their root revision
37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # exists. This can be checked against the time of the cset which
38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # is our base. Branches which have no files yet can be eliminated
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # from consideration.
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ! All files noted by the base cset as added/modified have to be
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # in the branch root. Branches which do not have such a file can
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # be eliminated from consideration.
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ! The versions of the added/modified files in the base have
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # match the versions in the branch root. In the sense that they
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # have to be equal or sucessors. The later implies identity in the
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # upper parts (only the last 2 parts are relevant), and equal
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # length.
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # This gives us the branch, and, due to the time information a
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # signature for the root.
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #? Can search for the root based on this signature fail ?
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Yes. Because the signature may contain files which were not
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # actually yet in the root, despite being able to. And which were
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # not modified by the base, so the check 2 above still passes.
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # -> Search for the full signature first, then drop the youngest
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # files, search again until match. Check the result against the
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # base, that all needed files are present.
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # However - Can search for the root based on the cset data (needed
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # files). Gives us another set of candidate roots. Intersect!
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::find {csvalue} {
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set cs $csvalue
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #variable bra
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts ___________________________________________
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts [join [lsort -index 0 [lsort -index 1 $bra]] \n]
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Signatures bd [TimeRelevant $cs(date)]
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DropIncomplete bd [concat $cs(added) $cs(changed)]
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts ___________________________________________
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #parray bd
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[array size bd] < 1} {
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts "NO BRANCH"
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Deal how?
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # - Abort
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # - Ignore this changeset and try the next one
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # (Which has higher probability of not matching as it might
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # be the successor in the branch to this cset and not a base).
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts ""
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parray cs
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exit
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } elseif {[array size bd] > 1} {
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # While we might have found several tag they may all refer to
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # the same set of files. If that is so we consider them
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # identical and take one as representative of all.
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set su {}
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {t s} [array get bd] {
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend su [DictSort $s]
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength [lsort -unique $su]] > 1} {
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts "AMBIGOUS. The following branches match:"
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Deal how? S.a.
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts \t[join [array names bd] \n\t]
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts ""
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ parray cs
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exit
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Fall through ...
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set tg [lindex [array names bd] 0]
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rs [RootOf $bd($tg)]
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts "BRANCH = $tg"
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts "ROOTSG = $rs"
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [list $tg $rs]
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::has {ts needed} {
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #variable bra
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts ___________________________________________
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts [join [lsort -index 0 [lsort -index 1 $bra]] \n]
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Signatures bd [TimeRelevant $ts]
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DropIncomplete bd $needed
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts ___________________________________________
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #parray bd
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[array size bd] < 1} {
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts "NO BRANCH"
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Deal how?
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # - Abort
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # - Ignore this changeset and try the next one
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # (Which has higher probability of not matching as it might
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # be the successor in the branch to this cset and not a base).
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exit
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } elseif {[array size bd] > 1} {
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts "AMBIGOUS. Following branches match:"
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Deal how? S.a.
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ puts \t[join [array names bd] \n\t]
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ exit
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set tg [lindex [array names bd] 0]
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts "BRANCH = $tg"
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $tg
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
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!
+
156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::RootOf {dict} {
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set res {}
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {f r} $dict {
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend res $f [revroot $r]
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $res
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!
+ proc ::vc::cvs::ws::branch::DictSort {dict} {
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set a $dict
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set r {}
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach k [lsort [array names a]] {
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend r $k $a($k)
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $r
171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::DropIncomplete {bv needed} {
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $bv bdata
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Check the needed files against the branch signature. If files
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # are missing or not of a matching version drop the branch from
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # further consideration.
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {tag sig} [array get bdata] {
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set rev $sig
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {file rv} $needed {
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![info exists rev($file)] || ![successor $rv $rev($file)]} {
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # file in cset is not in the branch or is present, but
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # not proper version (different lengths, not matching
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # in upper 0..end-2 parts, not equal|successor).
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unset bdata($tag)
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unset rev
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::successor {ra rb} {
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # a successor-of b ?
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set la [split $ra .]
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lb [split $rb .]
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ([llength $la] != [llength $lb]) ||
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ([lrange $la 0 end-2] ne [lrange $lb 0 end-2]) ||
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ([package vcompare $ra $rb] < 0)
206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } {
207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0
208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::Signatures {bv deflist} {
214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $bv bdata
215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Sort branch data by symbolic name for the upcoming checks, and
216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # generate file revision signatures.
217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set bdata {}
219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach item $deflist {
220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # item = timestamp tag file revision
221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {__ tag file rev} $item break
222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend bdata($tag) $file $rev
223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts ___________________________________________
226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #parray bdata
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::TimeRelevant {date} {
232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable bra
233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Retrieve the branch data which definitely comes before (in time)
235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # the candidate cset. Only this set is relevant to further checks
236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # and filters.
237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set res {}
239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach item $bra {
240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # item = timestamp tag file revision
241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 0 1 2 3
242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[package vcompare [lindex $item 0] $date] > 0} continue
243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend res $item
244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts ___________________________________________
247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts [join [lsort -index 0 [lsort -index 1 $res]] \n]
248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $res
249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace eval ::vc::cvs::ws::branch {
253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vari # in upper 0..end-2 parts, not equal|successor).
254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unset bdata($tag)
255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break
256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unset rev
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::successor {ra rb} {
265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # a successor-of b ?
266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set la [split $ra .]
268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set lb [split $rb .]
269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {
270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ([llength $la] != [llength $lb]) ||
271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ([lrange $la 0 end-2] ne [lrange $lb 0 end-2]) ||
272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ([package vcompare $ra $rb] < 0)
273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } {
274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0
275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::rootSuccessor {ra rb} {
281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # a root-successor-of b ? (<=> b root version of a ?)
282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$rb eq [revroot $ra]} {
284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0
287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::Signatures {bv deflist} {
291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 $bv bdata
292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Sort branch data by symbolic name for the upcoming checks, and
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # generate file revision signatures.
294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set bdata {}
296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach item $deflist {
297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # item = timestamp tag file revision
298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {__ tag file rev} $item break
299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend bdata($tag) $file $rev
300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts ___________________________________________
303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #parray bdata
304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ::vc::cvs::ws::branch::TimeRelevant {date} {
309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable bra
310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Retrieve the branch data which definitely comes before (in time)
312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # the candidate cset. Only this set is relevant to further checks
313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # and filters.
314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set res {}
316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach item $bra {
317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # item = timestamp tag file revision
318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 0 1 2 3
319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[package vcompare [lindex $item 0] $date] > 0} continue
320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend res $item
321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts ___________________________________________
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts [join [lsort -index 0 [lsort -index 1 $res]] \n]
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $res
326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace eval ::vc::cvs::ws::branch {
330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable bra {}
331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace export def find successor rootSuccessor revroot has
333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package provide vc::cvs::ws::branch 1.0
336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Queries ...
342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # - Get set of files and revs for branch B