@@ -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 struct::set ; # Set operations.
21 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::misc ; # Text formatting
22 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::trouble ; # Error reporting.
23 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::log ; # User feedback.
24 25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::state ; # State storage.
25 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::integrity ; # State integrity checks.
@@ -36,11 +37,13 @@
36 37 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myid $theid
37 38 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} else {
38 39 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myid [incr mycounter]
39 40 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
40 41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
41 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- integrity assert {[info exists mycstype($cstype)]} {Bad changeset type '$cstype'.}
42 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ integrity assert {
43 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [info exists mycstype($cstype)]
44 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } {Bad changeset type '$cstype'.}
42 45 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
43 46 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myproject $project
44 47 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set mytype $cstype
45 48 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set mytypeobj ::vc::fossil::import::cvs::project::rev::${cstype}
46 49 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set mysrcid $srcid
@@ -53,10 +56,11 @@
53 56 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myidmap($myid) $self
54 57 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
foreach iid $items {
55 58 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set key [list $cstype $iid]
56 59 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myitemmap($key) $self
57 60 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lappend mytitems $key
61 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets {MAP+ item <$key> $self = [$self str]}
58 62 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
59 63 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
60 64 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61 65 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62 66 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
method str {} {
@@ -243,10 +247,11 @@
243 247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# thus never more than one reference in the list.
244 248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
245 249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
foreach iid $myitems {
246 250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set key [list $mytype $iid]
247 251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unset myitemmap($key)
252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets {MAP- item <$key> $self = [$self str]}
248 253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
249 254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250 255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Create changesets for the fragments, reusing the current one
251 256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# for the first fragment. We sort them in order to allow
252 257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# checking for gaps and nice messages.
@@ -283,10 +288,11 @@
283 288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
284 289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myitems [lrange $myitems 0 $firste]
285 290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
foreach iid $myitems {
286 291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set key [list $mytype $iid]
287 292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myitemmap($key) $self
293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets {MAP+ item <$key> $self = [$self str]}
288 294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
289 295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
290 296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1
291 297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
292 298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -313,24 +319,57 @@
313 319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
314 320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
315 321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
method timerange {} { return [$mytypeobj timerange $myitems] }
316 322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
317 323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
method drop {} {
324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets {Dropping $self = [$self str]}
325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
318 326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
state transaction {
319 327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
state run {
320 328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DELETE FROM changeset WHERE cid = $myid;
321 329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DELETE FROM csitem WHERE cid = $myid;
322 330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
323 331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
324 332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
foreach iid $myitems {
325 333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set key [list $mytype $iid]
326 334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unset myitemmap($key)
335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets {MAP- item <$key> $self = [$self str]}
327 336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
328 337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set pos [lsearch -exact $mychangesets $self]
329 338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set mychangesets [lreplace $mychangesets $pos $pos]
330 339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
331 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!
+ method selfreferential {} {
343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 9 csets {Checking [$self str] /[llength $myitems]}
344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![struct::set contains [$self successors] $self]} {
346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0
347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[log verbosity?] < 8} { return 1 }
349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Print the detailed successor structure of the self-
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # referential changeset, if the verbosity of the log is dialed
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # high enough.
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets [set hdr {Self-referential changeset [$self str] __________________}]
355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ array set nmap [$self nextmap]
356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach item [lsort -dict [array names nmap]] {
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach succitem $nmap($item) {
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set succcs $myitemmap($succitem)
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set hint [expr {($succcs eq $self)
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ? "LOOP"
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ : " "}]
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set i "<$item [$type itemstr $item]>"
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set s "<$succitem [$type itemstr $succitem]>"
364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set scs [$succcs str]
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets {$hint * $i --> $s --> cs $scs}
366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets [regsub -all {[^ ]} $hdr {_}]
369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1
370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
332 371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
333 372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod split {cset args} {
334 373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# As part of the creation of the new changesets specified in
335 374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# ARGS as sets of items, all subsets of CSET's item set, CSET
336 375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# will be dropped from all databases, in and out of memory,
@@ -337,26 +376,64 @@
337 376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# and then destroyed.
338 377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#
339 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Note: The item lists found in args are tagged items. They
340 379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# have to have the same type as the changeset, being subsets
341 380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# of its items. This is checked in Untag1.
381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Constraints: No fragment must be empty. All fragments have
383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # to be subsets of the cset. The union has to cover the
384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # original. All pairwise intersections have to be empty.
385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets {OLD: [lsort [$cset items]]}
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set cover {}
389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach fragmentitems $args {
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets {NEW: [lsort $fragmentitems]}
391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ integrity assert {
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ![struct::set empty $fragmentitems]
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } {changeset fragment is empty}
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ integrity assert {
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [struct::set subsetof $fragmentitems [$cset items]]
397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } {changeset fragment is not a subset}
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct::set add cover $fragmentitems
399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ integrity assert {
401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [struct::set equal $cover [$cset items]]
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } {The fragments do not cover the original changeset}
403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set i 1
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach fia $args {
405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach fib [lrange $args $i end] {
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ integrity assert {
407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [struct::set empty [struct::set intersect $fia $fib]]
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } {The fragments <$fia> and <$fib> overlap}
409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ incr i
411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # All checks pass, actually perform the split.
342 414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
343 415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct::list assign [$cset data] project cstype cssrc
344 416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
345 417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
$cset drop
346 418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
$cset destroy
347 419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
348 420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set newcsets {}
349 421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
foreach fragmentitems $args {
350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- integrity assert {
351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [llength $fragmentitems]
352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- } {Attempted to create an empty changeset, i.e. without items}
353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- lappend newcsets [$type %AUTO% $project $cstype $cssrc \
354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [Untag $fragmentitems $cstype]]
422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 8 csets {MAKE: [lsort $fragmentitems]}
423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set fragment [$type %AUTO% $project $cstype $cssrc \
425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [Untag $fragmentitems $cstype]]
426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend newcsets $fragment
427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $fragment persist
428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[$fragment selfreferential]} {
430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal "[$fragment str] depends on itself"
431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
355 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
356 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- foreach c $newcsets { $c persist }
434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble abort?
358 435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return $newcsets
359 436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
360 437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
361 438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod strlist {changesets} {
362 439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return [join [struct::list map $changesets [myproc ID]]]
@@ -371,10 +448,15 @@
371 448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc Untag1 {cstype theitem} {
372 449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct::list assign $theitem t i
373 450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
integrity assert {$cstype eq $t} {Item $i's type is '$t', expected '$cstype'}
374 451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return $i
375 452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typemethod itemstr {item} {
455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct::list assign $item itype iid
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return [$itype str $iid]
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
376 458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
377 459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
378 460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## State
379 461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
380 462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
variable myid {} ; # Id of the cset for the persistent
@@ -673,10 +755,21 @@
673 755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
snit::type ::vc::fossil::import::cvs::project::rev::rev {
674 756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod byrevision {} { return 1 }
675 757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod bysymbol {} { return 0 }
676 758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod istag {} { return 0 }
677 759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod isbranch {} { return 0 }
760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typemethod str {revision} {
762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct::list assign [state run {
763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT R.rev, F.name, P.name
764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM revision R, file F, project P
765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE R.rid = $revision
766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND F.fid = R.fid
767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND P.pid = F.pid
768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }] revnr fname pname
769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return "$pname/${revnr}::$fname"
770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
678 771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
679 772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# result = list (mintime, maxtime)
680 773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod timerange {items} {
681 774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set theset ('[join $items {','}]')
682 775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return [state run "
@@ -917,10 +1010,22 @@
917 1010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
snit::type ::vc::fossil::import::cvs::project::rev::sym::tag {
918 1011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod byrevision {} { return 0 }
919 1012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod bysymbol {} { return 1 }
920 1013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod istag {} { return 1 }
921 1014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod isbranch {} { return 0 }
1015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typemethod str {tag} {
1017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct::list assign [state run {
1018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT S.name, F.name, P.name
1019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM tag T, symbol S, file F, project P
1020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE T.tid = $tag
1021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND F.fid = T.fid
1022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND P.pid = F.pid
1023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND S.sid = T.sid
1024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }] sname fname pname
1025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return "$pname/T'${sname}'::$fname"
1026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
922 1027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
923 1028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# result = list (mintime, maxtime)
924 1029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod timerange {tags} {
925 1030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# The range is defined as the range of the revisions the tags
926 1031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# are attached to.
@@ -985,10 +1090,22 @@
985 1090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
snit::type ::vc::fossil::import::cvs::project::rev::sym::branch {
986 1091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod byrevision {} { return 0 }
987 1092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod bysymbol {} { return 1 }
988 1093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod istag {} { return 0 }
989 1094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod isbranch {} { return 1 }
1095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
1096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typemethod str {branch} {
1097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct::list assign [state run {
1098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SELECT S.name, F.name, P.name
1099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FROM branch B, symbol S, file F, project P
1100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE B.bid = $branch
1101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND F.fid = B.fid
1102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND P.pid = F.pid
1103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AND S.sid = B.sid
1104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }] sname fname pname
1105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return "$pname/B'${sname}'::$fname"
1106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
990 1107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
991 1108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# result = list (mintime, maxtime)
992 1109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typemethod timerange {branches} {
993 1110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# The range of a branch is defined as the range of the
994 1111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# revisions the branches are spawned by. NOTE however that the
995 1112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!