@@ -20,10 +20,11 @@
20 20 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require snit ; # OO system.
21 21 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require struct::set ; # Set operations.
22 22 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::file::rev ; # CVS per file revisions.
23 23 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::fossil::import::cvs::file::sym ; # CVS per file symbols.
24 24 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::trouble ; # Error reporting.
25 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ package require vc::tools::log ; # User feedback
25 26 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package require vc::tools::misc ; # Text formatting
26 27 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27 28 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
28 29 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
##
29 30 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -175,11 +176,11 @@
175 176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# message for the latter, i.e. "Initial revision\n", no
176 177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# period. (This fact also helps us when the time comes to
177 178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# determine whether this file might have had a default branch
178 179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# in the past.)
179 180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if {$revnr eq ""} {
181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$revnr eq "1.1"} {
181 182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myimported [expr {$commitmsg eq "Initial revision\n"}]
182 183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
183 184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
184 185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Here we also keep track of the order in which the revisions
185 186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# were added to the file.
@@ -193,12 +194,17 @@
193 194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# looking for a non-trunk default branch, marking its members
194 195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# and linking them into the trunk.
195 196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
196 197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DetermineRevisionOperations
197 198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DetermineLinesOfDevelopment
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ HandleNonTrunkDefaultBranch
200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RemoveIrrelevantDeletions
201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RemoveInitialBranchDeletions
198 202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # list of roots ... first only one, later can become more.
203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[$myproject trunkonly]} {
204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExcludeNonTrunkInformation
205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
200 206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
201 207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
202 208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
203 209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
204 210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## State
@@ -246,10 +252,14 @@
246 252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# reverse of definition. I.e. a smaller
247 253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# number means 'Defined earlier', means
248 254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# 'Created later'.
249 255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
250 256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
variable mytrunk {} ; # Direct reference to myproject -> trunk.
257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ variable myroots {} ; # List of roots in the forest of
258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # lod's. Object references to revisions and
259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # branches. The latter can appear when they
260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # are severed from their parent.
251 261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
252 262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
253 263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Internal methods
254 264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
255 265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
method RecordBranchCommits {branches} {
@@ -364,10 +374,11 @@
364 374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# list this child in the parent revision.
365 375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
366 376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if {[$branch haschild]} {
367 377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set childrevnr [$branch childrevnr]
368 378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set child $myrev($childrevnr)
379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $branch setchild $child
369 380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
370 381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
$child setparentbranch $branch
371 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
$child setparent $rev
372 383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
$rev addchildonbranch $child
373 384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -421,10 +432,14 @@
421 432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
foreach {revnr rev} [array get myrev] {
422 433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if {[$rev hasparent]} continue
423 434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if {$myroot ne ""} { trouble internal "Multiple root revisions found" }
424 435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
set myroot $rev
425 436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # In the future we also need a list, as branches can become
439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # severed from their parent, making them their own root.
440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set myroots [list $myroot]
426 441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
427 442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
428 443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
429 444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
proc DetermineRevisionOperations {} {
430 445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
upvar 1 myrevisions myrevisions
@@ -457,10 +472,259 @@
457 472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} else {
458 473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
upvar 1 self self
459 474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return [$self Rev2Branch $revnr]
460 475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
461 476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc HandleNonTrunkDefaultBranch {} {
479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 myprincipal myprincipal myroot myroot mybranches mybranches myimported myimported myroots myroots myrev myrev
480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set revlist [NonTrunkDefaultRevisions]
482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![llength $revlist]} return
483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AdjustNonTrunkDefaultBranch $revlist
485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CheckLODs
486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc NonTrunkDefaultRevisions {} {
490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # From cvs2svn the following explanation (with modifications
491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # for our algorithm):
492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Determine whether there are any non-trunk default branch
494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revisions.
495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # If a non-trunk default branch is determined to have existed,
497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # return a list of objects for all revisions that were once
498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # non-trunk default revisions, in dependency order (i.e. root
499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # first).
500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # There are two cases to handle:
502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # One case is simple. The RCS file lists a default branch
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # explicitly in its header, such as '1.1.1'. In this case, we
505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # know that every revision on the vendor branch is to be
506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # treated as head of trunk at that point in time.
507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # But there's also a degenerate case. The RCS file does not
509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # currently have a default branch, yet we can deduce that for
510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # some period in the past it probably *did* have one. For
511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # example, the file has vendor revisions 1.1.1.1 -> 1.1.1.96,
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # all of which are dated before 1.2, and then it has 1.1.1.97
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # -> 1.1.1.100 dated after 1.2. In this case, we should
514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # record 1.1.1.96 as the last vendor revision to have been the
515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # head of the default branch.
516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 myprincipal myprincipal myroot myroot mybranches mybranches myimported myimported
518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$myprincipal ne ""} {
520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # There is still a default branch; that means that all
521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revisions on that branch get marked.
522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 5 file "Found explicitly marked NTDB"
524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rnext [$myroot child]
526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$rnext ne ""} {
527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ trouble fatal "File with default branch $myprincipal also has revision [$rnext revnr]"
528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rev [$mybranches($myprincipal) child]
532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set res {}
533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {$rev ne ""} {
535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend res $rev
536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rev [$rev child]
537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $res
540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } elseif {$myimported} {
542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # No default branch, but the file appears to have been
543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # imported. So our educated guess is that all revisions
544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # on the '1.1.1' branch with timestamps prior to the
545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # timestamp of '1.2' were non-trunk default branch
546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revisions.
547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # This really only processes standard '1.1.1.*'-style
549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # vendor revisions. One could conceivably have a file
550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # whose default branch is 1.1.3 or whatever, or was that
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # at some point in time, with vendor revisions 1.1.3.1,
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 1.1.3.2, etc. But with the default branch gone now,
553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # we'd have no basis for assuming that the non-standard
554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # vendor branch had ever been the default branch anyway.
555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Note that we rely on comparisons between the timestamps
557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # of the revisions on the vendor branch and that of
558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revision 1.2, even though the timestamps might be
559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # incorrect due to clock skew. We could do a slightly
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # better job if we used the changeset timestamps, as it is
561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # possible that the dependencies that went into
562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # determining those timestamps are more accurate. But
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # that would require an extra pass or two.
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {![info exists mybranches(1.1.1)]} { return {} }
566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 5 file "Deduced existence of NTDB"
568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rev [$mybranches(1.1.1) child]
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set res {}
571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set stop [$myroot child]
572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$stop eq ""} {
574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Get everything on the branch
575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {$rev ne ""} {
576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend res $rev
577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rev [$rev child]
578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Collect everything on the branch which seems to have
581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # been committed before the first primary child of the
582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # root revision.
583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set stopdate [$stop date]
584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while {$rev ne ""} {
585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[$rev date] >= $stopdate} break
586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend res $rev
587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rev [$rev child]
588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return $res
592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } else {
594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return {}
595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc AdjustNonTrunkDefaultBranch {revlist} {
599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 myroot myroot myimported myimported myroots myroots myrev myrev mybranches mybranches
600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set stop [$myroot child] ;# rev '1.2'
601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 5 file "Adjusting NTDB containing [nsp [llength $revlist] revision]"
603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # From cvs2svn the following explanation (with modifications
605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # for our algorithm):
606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Adjust the non-trunk default branch revisions found in the
608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 'revlist'.
609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 'myimported' is a boolean flag indicating whether this file
611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # appears to have been imported, which also means that
612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revision 1.1 has a generated log message that need not be
613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # preserved. 'revlist' is a list of object references for the
614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revisions that have been determined to be non-trunk default
615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # branch revisions.
616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Note that the first revision on the default branch is
618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # handled strangely by CVS. If a file is imported (as opposed
619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # to being added), CVS creates a 1.1 revision, then creates a
620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # vendor branch 1.1.1 based on 1.1, then creates a 1.1.1.1
621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revision that is identical to the 1.1 revision (i.e., its
622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # deltatext is empty). The log message that the user typed
623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # when importing is stored with the 1.1.1.1 revision. The 1.1
624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revision always contains a standard, generated log message,
625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 'Initial revision\n'.
626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # When we detect a straightforward import like this, we want
628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # to handle it by deleting the 1.1 revision (which doesn't
629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # contain any useful information) and making 1.1.1.1 into an
630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # independent root in the file's dependency tree. In SVN,
631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 1.1.1.1 will be added directly to the vendor branch with its
632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # initial content. Then in a special 'post-commit', the
633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # 1.1.1.1 revision is copied back to trunk.
634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # If the user imports again to the same vendor branch, then CVS
636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # creates revisions 1.1.1.2, 1.1.1.3, etc. on the vendor branch,
637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # *without* counterparts in trunk (even though these revisions
638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # effectively play the role of trunk revisions). So after we add
639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # such revisions to the vendor branch, we also copy them back to
640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # trunk in post-commits.
641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # We mark the revisions found in 'revlist' as default branch
643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # revisions. Also, if the root revision has a primary child
644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # we set that revision to depend on the last non-trunk default
645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # branch revision and possibly adjust its type accordingly.
646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set first [lindex $revlist 0]
648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 6 file "<[$first revnr]> [expr {$myimported ? "imported" : "not imported"}], [$first operation], [expr {[$first hastext] ? "has text" : "no text"}]"
650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$myimported &&
652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [$first revnr] eq "1.1.1.1" &&
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ [$first operation] eq "change" &&
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ![$first hastext]} {
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set rev11 [$first parent] ; # Assert: Should be myroot.
657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 3 file "Removing irrelevant revision [$rev11 revnr]"
658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Cut out the old myroot revision.
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ldelete myroots $rev11 ; # Not a root any longer.
662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unset myrev([$rev11 revnr])
663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $first cutfromparent ; # Sever revision from parent revision.
665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$stop ne ""} {
666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $stop cutfromparent
667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend myroots $stop ; # New root, after vendor branch
668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Cut out the vendor branch symbol
671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set vendor [$first parentbranch]
673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$vendor eq ""} { trouble internal "First NTDB revision has no branch" }
674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {[$vendor parent] eq $rev11} {
675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unset mybranches([$vendor branchnr])
676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $rev11 removebranch $vendor
677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $rev11 removechildonbranch $first
678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $first cutfromparentbranch
679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ lappend myroots $first
680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Change the type of first (typically from Change to Add):
683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $first retype add
684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Move any tags and branches from the old to the new root.
686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $rev11 movesymbolsto $first
687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Mark all the special revisions as such
690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach rev $revlist {
691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ log write 3 file "Revision on default branch: [$rev revnr]"
692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $rev isondefaultbranch
693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if {$stop ne ""} {
696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # Revision 1.2 logically follows the imported revisions,
697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # not 1.1. Accordingly, connect it to the last NTDBR and
698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # possibly change its type.
699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ set last [lindex $revlist end]
701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $stop setdefaultbranchparent $last ; # Retypes the revision too.
702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ $last setdefaultbranchchild $stop
703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc CheckLODs {} {
708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ upvar 1 mybranches mybranches mytags mytags
709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {_ branch} [array get mybranches] { $branch checklod }
711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach {_ taglist} [array get mytags] {
713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ foreach tag $taglist { $tag checklod }
714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return
716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc RemoveIrrelevantDeletions {} {
719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc RemoveInitialBranchDeletions {} {
722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ proc ExcludeNonTrunkInformation {} {
725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
462 726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
463 727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## #############
464 728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Configuration
465 729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
466 730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pragma -hastypeinfo no ; # no type introspection
@@ -477,13 +741,14 @@
477 741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# Import not required, already a child namespace.
478 742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# namespace import ::vc::fossil::import::cvs::file::rev
479 743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# namespace import ::vc::fossil::import::cvs::file::sym
480 744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::tools::misc::*
481 745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
namespace import ::vc::tools::trouble
746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ namespace import ::vc::tools::log
482 747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
483 748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
484 749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
485 750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# # ## ### ##### ######## ############# #####################
486 751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
## Ready
487 752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
488 753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
package provide vc::fossil::import::cvs::file 1.0
489 754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return
490 755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!