@@ -16,10 +16,11 @@
16 16 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
17 17 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Requirements
18 18 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19 19 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require Tcl 8.4 ; # Required runtime.
20 20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require snit ; # OO system.
21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require vc::tools::log ; # User feedback.
21 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::state ; # State storage.
22 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
23 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
24 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
##
25 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -33,10 +34,174 @@
33 34 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set mytype $cstype
34 35 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set mysrcid $srcid
35 36 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myrevisions $revisions
36 37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
37 38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ method id {} { return $myid }
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ method breakinternaldependencies {cv} {
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 2 $cv csets ; # simple-dispatch!
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # This method inspects the changesets for internal
46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # dependencies. Nothing is done if there are no
47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # such. Otherwise the changeset is split into a set of
48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # fragments without internal dependencies, transforming the
49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # internal dependencies into external ones. The new changesets
50 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # are added to the list of all changesets.
51 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
52 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Actually at most one split is performed, resulting in at
53 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # most one additional fragment. It is the caller's
54 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # responsibility to spli the resulting fragments further.
55 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # The code checks only sucessor dependencies, automatically
57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # covering the predecessor dependencies as well (A sucessor
58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # dependency a -> b is a predecessor dependency b -> a).
59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Array of dependencies (parent -> child). This is pulled from
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # the state, and limited to successors within the changeset.
62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set dependencies {}
63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set theset ('[join $myrevisions {','}]')
65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {rid child} [state run "
67 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT R.rid, R.child
68 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM revision R
69 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE R.rid IN $theset
70 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND R.child IS NOT NULL
71 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND R.child IN $theset
72 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNION
73 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT R.rid, R.dbchild
74 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM revision R
75 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE R.rid IN $theset
76 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND R.dbchild IS NOT NULL
77 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND R.dbchild IN $theset
78 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNION
79 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT R.rid, B.brid
80 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM revision R, revisionbranchchildren B
81 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE R.rid IN $theset
82 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND R.rid = B.rid
83 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND B.brid IN $theset
84 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "] {
85 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Consider moving this to the integrity module.
86 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$rid == $child} {
87 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble internal "Revision $rid depends on itself."
88 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set dependencies($rid) $child
90 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
91 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
92 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![array size dependencies]} {return 0} ; # Nothing to break.
93 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
94 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # We have internal dependencies to break. We now iterate over
95 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # all positions in the list (which is chronological, at least
96 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # as far as the timestamps are correct and unique) and
97 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # determine the best position for the break, by trying to
98 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # break as many dependencies as possible in one go.
99 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # First we create a map of positions to make it easier to
101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # determine whether a dependency cross a particular index.
102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set pos {}
104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set crossing {}
105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set n 0
106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach rev $myrevisions {
107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set pos($rev) $n
108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set crossing($n) 0
109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incr n
110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Secondly we count the crossings per position, by iterating
113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # over the recorded internal dependencies.
114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {rid child} [array get dependencies] {
116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set start $pos($rid)
117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set end $pos($child)
118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Note: If the timestamps are badly out of order it is
120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # possible to have a backward successor dependency,
121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # i.e. with start > end. We may have to swap the
122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # indices to ensure that the following loop runs
123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # correctly.
124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #
125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Note 2: start == end is not possible. It indicates a
126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # self-dependency due to the uniqueness of
127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # positions, and that is something we have ruled
128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # out already.
129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$start > $end} {
131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {$end < $start} { incr crossing($end) ; incr end }
132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {$start < $end} { incr crossing($start) ; incr start }
134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Now we can determine the best break location. First we look
138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # for the locations with the maximal number of crossings. If
139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # there are several we look for the shortest time interval
140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # among them. If we still have multiple possibilities after
141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # that we select the smallest index among these.
142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set max -1
144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set best {}
145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach key [array names crossing] {
147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set now $crossing($key)
148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$now > $max} {
149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set max $now
150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set best $key
151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue
152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } elseif {$now == $max} {
153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend best $key
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!
+
157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength $best] > 1} {
158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set min -1
159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set newbest {}
160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach at $best {
161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rat [lindex $myrevisions $at] ; incr at
162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rnext [lindex $myrevisions $at] ; incr at -1
163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set tat [lindex [state run {SELECT R.date FROM revision R WHERE R.rid = $rat }] 0]
164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set tnext [lindex [state run {SELECT R.date FROM revision R WHERE R.rid = $rnext}] 0]
165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set delta [expr {$tnext - $tat}]
166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {($min < 0) || ($delta < $min)} {
167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set min $delta
168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set newbest $at
169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } elseif {$delta == $min} {
170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend newbest $at
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!
+ set best $newbest
174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[llength $best] > 1} {
177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set best [lindex [lsort -integer -increasing $best] 0]
178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Now we can split off a fragment.
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set bnext $best ; incr bnext
183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set revbefore [lrange $myrevisions 0 $best]
184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set revafter [lrange $myrevisions $bnext end]
185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![llength $revbefore]} {
187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble internal "Tried to split off a zero-length fragment at the beginning"
188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![llength $revafter]} {
190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble internal "Tried to split off a zero-length fragment at the end"
191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend csets [set new [$type %AUTO% $myproject $mytype $mysrcid $revafter]]
194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set myrevisions $revbefore
195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 4 csets "Breaking <$myid> @$best, making <[$new id]>, cutting $crossing($best)"
197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts "\tKeeping <$revbefore>"
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #puts "\tSplit off <$revafter>"
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38 203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
39 204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
method persist {} {
40 205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set tid $mycstype($mytype)
41 206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set pid [$myproject id]
42 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set pos 0
@@ -92,13 +257,15 @@
92 257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
93 258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace eval ::vc::fossil::import::cvs::project {
94 259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace export rev
95 260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace eval rev {
96 261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::fossil::import::cvs::state
262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::tools::log
263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log register csets
97 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
98 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99 266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100 267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
101 268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Ready
102 269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103 270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package provide vc::fossil::import::cvs::project::rev 1.0
104 271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
105 272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!