0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23 ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 ############.##
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 Copyright (c) 20
0060: 30 37 2d 32 30 30 38 20 41 6e 64 72 65 61 73 20 07-2008 Andreas
0070: 4b 75 70 72 69 65 73 2e 0a 23 0a 23 20 54 68 69 Kupries..#.# Thi
0080: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6c 69 s software is li
0090: 63 65 6e 73 65 64 20 61 73 20 64 65 73 63 72 69 censed as descri
00a0: 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20 bed in the file
00b0: 4c 49 43 45 4e 53 45 2c 20 77 68 69 63 68 0a 23 LICENSE, which.#
00c0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 you should have
00d0: 20 72 65 63 65 69 76 65 64 20 61 73 20 70 61 72 received as par
00e0: 74 20 6f 66 20 74 68 69 73 20 64 69 73 74 72 69 t of this distri
00f0: 62 75 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73 bution..#.# This
0100: 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 73 69 73 software consis
0110: 74 73 20 6f 66 20 76 6f 6c 75 6e 74 61 72 79 20 ts of voluntary
0120: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 6d 61 contributions ma
0130: 64 65 20 62 79 20 6d 61 6e 79 0a 23 20 69 6e 64 de by many.# ind
0140: 69 76 69 64 75 61 6c 73 2e 20 20 46 6f 72 20 65 ividuals. For e
0150: 78 61 63 74 20 63 6f 6e 74 72 69 62 75 74 69 6f xact contributio
0160: 6e 20 68 69 73 74 6f 72 79 2c 20 73 65 65 20 74 n history, see t
0170: 68 65 20 72 65 76 69 73 69 6f 6e 0a 23 20 68 69 he revision.# hi
0180: 73 74 6f 72 79 20 61 6e 64 20 6c 6f 67 73 2c 20 story and logs,
0190: 61 76 61 69 6c 61 62 6c 65 20 61 74 20 68 74 74 available at htt
01a0: 70 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 68 p://fossil-scm.h
01b0: 77 61 63 69 2e 63 6f 6d 2f 66 6f 73 73 69 6c 0a waci.com/fossil.
01c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
01d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
01e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 #############..#
0200: 23 20 52 65 76 69 73 69 6f 6e 73 20 70 65 72 20 # Revisions per
0210: 70 72 6f 6a 65 63 74 2c 20 61 6b 61 20 43 68 61 project, aka Cha
0220: 6e 67 65 73 65 74 73 2e 20 54 68 65 73 65 20 6f ngesets. These o
0230: 62 6a 65 63 74 73 20 61 72 65 20 66 69 72 73 74 bjects are first
0240: 20 75 73 65 64 0a 23 23 20 69 6e 20 70 61 73 73 used.## in pass
0250: 20 35 2c 20 77 68 69 63 68 20 63 72 65 61 74 65 5, which create
0260: 73 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73 65 s the initial se
0270: 74 20 63 6f 76 65 72 69 6e 67 20 74 68 65 20 72 t covering the r
0280: 65 70 6f 73 69 74 6f 72 79 2e 0a 0a 23 20 23 20 epository...# #
0290: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
02a0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
02b0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
02c0: 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 71 #########.## Req
02d0: 75 69 72 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 uirements..packa
02e0: 67 65 20 72 65 71 75 69 72 65 20 54 63 6c 20 38 ge require Tcl 8
02f0: 2e 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .4
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0310: 20 3b 20 23 20 52 65 71 75 69 72 65 64 20 72 75 ; # Required ru
0320: 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 67 65 20 72 ntime..package r
0330: 65 71 75 69 72 65 20 73 6e 69 74 20 20 20 20 20 equire snit
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; #
0360: 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b OO system..pack
0370: 61 67 65 20 72 65 71 75 69 72 65 20 73 74 72 75 age require stru
0380: 63 74 3a 3a 73 65 74 20 20 20 20 20 20 20 20 20 ct::set
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03a0: 20 20 3b 20 23 20 53 65 74 20 6f 70 65 72 61 74 ; # Set operat
03b0: 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 ions..package re
03c0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a quire vc::tools:
03d0: 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20 20 20 :misc
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 ; #
03f0: 54 65 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a Text formatting.
0400: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
0410: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 vc::tools::troub
0420: 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 le
0430: 20 20 20 20 20 20 3b 20 23 20 45 72 72 6f 72 20 ; # Error
0440: 72 65 70 6f 72 74 69 6e 67 2e 0a 70 61 63 6b 61 reporting..packa
0450: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74 ge require vc::t
0460: 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20 20 20 20 20 ools::log
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0480: 20 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 61 ; # User feedba
0490: 63 6b 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 ck..package requ
04a0: 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a ire vc::fossil::
04b0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 import::cvs::sta
04c0: 74 65 20 20 20 20 20 20 20 20 3b 20 23 20 53 74 te ; # St
04d0: 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 ate storage..pac
04e0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a kage require vc:
04f0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
0500: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 20 :cvs::integrity
0510: 20 20 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74 ; # State int
0520: 65 67 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 0a egrity checks...
0530: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
0540: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
0550: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
0560: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 #############.##
0570: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 ..snit::type ::v
0580: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
0590: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a t::cvs::project:
05a0: 3a 72 65 76 20 7b 0a 20 20 20 20 23 20 23 20 23 :rev {. # # #
05b0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
05c0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
05d0: 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63 ##. ## Public
05e0: 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72 API.. constr
05f0: 75 63 74 6f 72 20 7b 70 72 6f 6a 65 63 74 20 63 uctor {project c
0600: 73 74 79 70 65 20 73 72 63 69 64 20 69 74 65 6d stype srcid item
0610: 73 20 7b 74 68 65 69 64 20 7b 7d 7d 7d 20 7b 0a s {theid {}}} {.
0620: 09 69 66 20 7b 24 74 68 65 69 64 20 6e 65 20 22 .if {$theid ne "
0630: 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 "} {.. set my
0640: 69 64 20 24 74 68 65 69 64 0a 09 7d 20 65 6c 73 id $theid..} els
0650: 65 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 e {.. set myi
0660: 64 20 5b 69 6e 63 72 20 6d 79 63 6f 75 6e 74 65 d [incr mycounte
0670: 72 5d 0a 09 7d 0a 0a 09 69 6e 74 65 67 72 69 74 r]..}...integrit
0680: 79 20 61 73 73 65 72 74 20 7b 0a 09 20 20 20 20 y assert {..
0690: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 63 [info exists myc
06a0: 73 74 79 70 65 28 24 63 73 74 79 70 65 29 5d 0a stype($cstype)].
06b0: 09 7d 20 7b 42 61 64 20 63 68 61 6e 67 65 73 65 .} {Bad changese
06c0: 74 20 74 79 70 65 20 27 24 63 73 74 79 70 65 27 t type '$cstype'
06d0: 2e 7d 0a 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 .}...set myproje
06e0: 63 74 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73 ct $project..s
06f0: 65 74 20 6d 79 74 79 70 65 20 20 20 20 20 20 24 et mytype $
0700: 63 73 74 79 70 65 0a 09 73 65 74 20 6d 79 74 79 cstype..set myty
0710: 70 65 6f 62 6a 20 20 20 3a 3a 76 63 3a 3a 66 6f peobj ::vc::fo
0720: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
0730: 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 3a s::project::rev:
0740: 3a 24 7b 63 73 74 79 70 65 7d 0a 09 73 65 74 20 :${cstype}..set
0750: 6d 79 73 72 63 69 64 09 24 73 72 63 69 64 0a 09 mysrcid.$srcid..
0760: 73 65 74 20 6d 79 69 74 65 6d 73 20 20 20 20 20 set myitems
0770: 24 69 74 65 6d 73 0a 09 73 65 74 20 6d 79 70 6f $items..set mypo
0780: 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 43 s {} ; # C
0790: 6f 6d 6d 69 74 20 6c 6f 63 61 74 69 6f 6e 20 69 ommit location i
07a0: 73 20 6e 6f 74 20 6b 6e 6f 77 6e 20 79 65 74 2e s not known yet.
07b0: 0a 0a 09 23 20 4b 65 65 70 20 74 72 61 63 6b 20 ...# Keep track
07c0: 6f 66 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 of the generated
07d0: 20 63 68 61 6e 67 65 73 65 74 73 20 61 6e 64 20 changesets and
07e0: 6f 66 20 74 68 65 20 69 6e 76 65 72 73 65 0a 09 of the inverse..
07f0: 23 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 69 # mapping from i
0800: 74 65 6d 73 20 74 6f 20 74 68 65 6d 2e 0a 09 6c tems to them...l
0810: 61 70 70 65 6e 64 20 6d 79 63 68 61 6e 67 65 73 append mychanges
0820: 65 74 73 20 20 20 24 73 65 6c 66 0a 09 6c 61 70 ets $self..lap
0830: 70 65 6e 64 20 6d 79 74 63 68 61 6e 67 65 73 65 pend mytchangese
0840: 74 73 28 24 63 73 74 79 70 65 29 20 24 73 65 6c ts($cstype) $sel
0850: 66 0a 09 73 65 74 20 20 20 20 20 6d 79 69 64 6d f..set myidm
0860: 61 70 28 24 6d 79 69 64 29 20 24 73 65 6c 66 0a ap($myid) $self.
0870: 09 66 6f 72 65 61 63 68 20 69 69 64 20 24 69 74 .foreach iid $it
0880: 65 6d 73 20 7b 0a 09 20 20 20 20 73 65 74 20 6b ems {.. set k
0890: 65 79 20 5b 6c 69 73 74 20 24 63 73 74 79 70 65 ey [list $cstype
08a0: 20 24 69 69 64 5d 0a 09 20 20 20 20 73 65 74 20 $iid].. set
08b0: 6d 79 69 74 65 6d 6d 61 70 28 24 6b 65 79 29 20 myitemmap($key)
08c0: 24 73 65 6c 66 0a 09 20 20 20 20 6c 61 70 70 65 $self.. lappe
08d0: 6e 64 20 6d 79 74 69 74 65 6d 73 20 24 6b 65 79 nd mytitems $key
08e0: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
08f0: 38 20 63 73 65 74 73 20 7b 4d 41 50 2b 20 69 74 8 csets {MAP+ it
0900: 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 6c 66 20 em <$key> $self
0910: 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d 0a 09 = [$self str]}..
0920: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
0930: 0a 20 20 20 20 64 65 73 74 72 75 63 74 6f 72 20 . destructor
0940: 7b 0a 09 23 20 54 68 65 20 6d 61 69 6e 20 74 68 {..# The main th
0950: 69 6e 67 20 69 73 20 74 6f 20 6b 65 65 70 20 74 ing is to keep t
0960: 72 61 63 6b 20 6f 66 20 74 68 65 20 69 74 65 6d rack of the item
0970: 6d 61 70 20 61 6e 64 20 72 65 6d 6f 76 65 0a 09 map and remove..
0980: 23 20 74 68 65 20 6f 62 6a 65 63 74 20 66 72 6f # the object fro
0990: 6d 20 69 74 2e 20 54 68 65 20 6c 69 73 74 73 20 m it. The lists
09a0: 6f 66 20 63 68 61 6e 67 65 73 65 74 73 20 28 6d of changesets (m
09b0: 79 63 68 61 6e 67 65 73 65 74 73 2c 0a 09 23 20 ychangesets,..#
09c0: 6d 79 74 63 68 61 6e 67 65 73 65 74 73 29 20 61 mytchangesets) a
09d0: 72 65 20 6e 6f 74 20 6d 61 69 6e 74 61 69 6e 65 re not maintaine
09e0: 64 20 28 3d 20 72 65 64 75 63 65 64 29 2c 20 66 d (= reduced), f
09f0: 6f 72 20 74 68 65 0a 09 23 20 6d 6f 6d 65 6e 74 or the..# moment
0a00: 2e 20 57 65 20 6d 61 79 20 62 65 20 61 62 6c 65 . We may be able
0a10: 20 74 6f 20 67 65 74 20 72 69 64 20 6f 66 20 74 to get rid of t
0a20: 68 69 73 20 65 6e 74 69 72 65 6c 79 2c 20 61 74 his entirely, at
0a30: 20 6c 65 61 73 74 0a 09 23 20 66 6f 72 20 28 64 least..# for (d
0a40: 65 29 63 6f 6e 73 74 72 75 63 74 69 6f 6e 20 61 e)construction a
0a50: 6e 64 20 70 61 73 73 20 49 6e 69 74 43 53 65 74 nd pass InitCSet
0a60: 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 69 69 64 s....foreach iid
0a70: 20 24 6d 79 69 74 65 6d 73 20 7b 0a 09 20 20 20 $myitems {..
0a80: 20 73 65 74 20 6b 65 79 20 5b 6c 69 73 74 20 24 set key [list $
0a90: 6d 79 74 79 70 65 20 24 69 69 64 5d 0a 09 20 20 mytype $iid]..
0aa0: 20 20 75 6e 73 65 74 20 6d 79 69 74 65 6d 6d 61 unset myitemma
0ab0: 70 28 24 6b 65 79 29 0a 09 20 20 20 20 6c 6f 67 p($key).. log
0ac0: 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 7b write 8 csets {
0ad0: 4d 41 50 2d 20 69 74 65 6d 20 3c 24 6b 65 79 3e MAP- item <$key>
0ae0: 20 24 73 65 6c 66 20 3d 20 5b 24 73 65 6c 66 20 $self = [$self
0af0: 73 74 72 5d 7d 0a 09 7d 0a 09 72 65 74 75 72 6e str]}..}..return
0b00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
0b10: 6f 64 20 73 74 72 20 7b 7d 20 7b 0a 09 73 65 74 od str {} {..set
0b20: 20 73 74 72 20 20 20 20 22 3c 22 0a 09 73 65 74 str "<"..set
0b30: 20 64 65 74 61 69 6c 20 22 22 0a 09 69 66 20 7b detail ""..if {
0b40: 5b 24 6d 79 74 79 70 65 6f 62 6a 20 62 79 73 79 [$mytypeobj bysy
0b50: 6d 62 6f 6c 5d 7d 20 7b 0a 09 20 20 20 20 73 65 mbol]} {.. se
0b60: 74 20 64 65 74 61 69 6c 20 22 20 27 5b 73 74 61 t detail " '[sta
0b70: 74 65 20 6f 6e 65 20 7b 0a 09 09 53 45 4c 45 43 te one {...SELEC
0b80: 54 20 53 2e 6e 61 6d 65 0a 09 09 46 52 4f 4d 20 T S.name...FROM
0b90: 20 20 73 79 6d 62 6f 6c 20 53 0a 09 09 57 48 45 symbol S...WHE
0ba0: 52 45 20 20 53 2e 73 69 64 20 3d 20 24 6d 79 73 RE S.sid = $mys
0bb0: 72 63 69 64 0a 09 20 20 20 20 7d 5d 27 22 0a 09 rcid.. }]'"..
0bc0: 7d 0a 09 61 70 70 65 6e 64 20 73 74 72 20 22 24 }..append str "$
0bd0: 6d 79 74 79 70 65 20 24 7b 6d 79 69 64 7d 24 7b mytype ${myid}${
0be0: 64 65 74 61 69 6c 7d 3e 22 0a 09 72 65 74 75 72 detail}>"..retur
0bf0: 6e 20 24 73 74 72 0a 20 20 20 20 7d 0a 0a 20 20 n $str. }..
0c00: 20 20 6d 65 74 68 6f 64 20 6c 6f 64 20 7b 7d 20 method lod {}
0c10: 7b 0a 09 72 65 74 75 72 6e 20 5b 24 6d 79 74 79 {..return [$myty
0c20: 70 65 6f 62 6a 20 63 73 5f 6c 6f 64 20 24 6d 79 peobj cs_lod $my
0c30: 69 74 65 6d 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 items]. }..
0c40: 20 20 6d 65 74 68 6f 64 20 69 64 20 20 20 20 7b method id {
0c50: 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 64 } { return $myid
0c60: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 74 }. method it
0c70: 65 6d 73 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 ems {} { return
0c80: 24 6d 79 74 69 74 65 6d 73 20 7d 0a 20 20 20 20 $mytitems }.
0c90: 6d 65 74 68 6f 64 20 64 61 74 61 20 20 7b 7d 20 method data {}
0ca0: 7b 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 { return [list $
0cb0: 6d 79 70 72 6f 6a 65 63 74 20 24 6d 79 74 79 70 myproject $mytyp
0cc0: 65 20 24 6d 79 73 72 63 69 64 5d 20 7d 0a 0a 20 e $mysrcid] }..
0cd0: 20 20 20 64 65 6c 65 67 61 74 65 20 6d 65 74 68 delegate meth
0ce0: 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 74 6f od bysymbol to
0cf0: 20 6d 79 74 79 70 65 6f 62 6a 0a 20 20 20 20 64 mytypeobj. d
0d00: 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 62 elegate method b
0d10: 79 72 65 76 69 73 69 6f 6e 20 74 6f 20 6d 79 74 yrevision to myt
0d20: 79 70 65 6f 62 6a 0a 20 20 20 20 64 65 6c 65 67 ypeobj. deleg
0d30: 61 74 65 20 6d 65 74 68 6f 64 20 69 73 62 72 61 ate method isbra
0d40: 6e 63 68 20 20 20 74 6f 20 6d 79 74 79 70 65 6f nch to mytypeo
0d50: 62 6a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 20 bj. delegate
0d60: 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 20 20 method istag
0d70: 20 20 74 6f 20 6d 79 74 79 70 65 6f 62 6a 0a 0a to mytypeobj..
0d80: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 70 6f method setpo
0d90: 73 20 7b 70 7d 20 7b 20 73 65 74 20 6d 79 70 6f s {p} { set mypo
0da0: 73 20 24 70 20 3b 20 72 65 74 75 72 6e 20 7d 0a s $p ; return }.
0db0: 20 20 20 20 6d 65 74 68 6f 64 20 70 6f 73 20 20 method pos
0dc0: 20 20 7b 7d 20 20 7b 20 72 65 74 75 72 6e 20 24 {} { return $
0dd0: 6d 79 70 6f 73 20 7d 0a 0a 20 20 20 20 6d 65 74 mypos }.. met
0de0: 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 75 63 hod determinesuc
0df0: 63 65 73 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 20 cessors {} {..#
0e00: 50 61 73 73 20 36 20 6f 70 65 72 61 74 69 6f 6e Pass 6 operation
0e10: 2e 20 43 6f 6d 70 75 74 65 20 70 72 6f 6a 65 63 . Compute projec
0e20: 74 2d 6c 65 76 65 6c 20 64 65 70 65 6e 64 65 6e t-level dependen
0e30: 63 69 65 73 20 66 72 6f 6d 0a 09 23 20 74 68 65 cies from..# the
0e40: 20 66 69 6c 65 2d 6c 65 76 65 6c 20 64 61 74 61 file-level data
0e50: 20 61 6e 64 20 73 61 76 65 20 69 74 20 62 61 63 and save it bac
0e60: 6b 20 74 6f 20 74 68 65 20 73 74 61 74 65 2e 20 k to the state.
0e70: 54 68 69 73 20 6d 61 79 0a 09 23 20 62 65 20 63 This may..# be c
0e80: 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 68 65 alled during the
0e90: 20 63 79 63 6c 65 20 62 72 65 61 6b 65 72 20 70 cycle breaker p
0ea0: 61 73 73 65 73 20 61 73 20 77 65 6c 6c 2c 20 74 asses as well, t
0eb0: 6f 20 61 64 6a 75 73 74 0a 09 23 20 74 68 65 20 o adjust..# the
0ec0: 73 75 63 63 65 73 73 6f 72 20 69 6e 66 6f 72 6d successor inform
0ed0: 61 74 69 6f 6e 20 6f 66 20 63 68 61 6e 67 65 73 ation of changes
0ee0: 65 74 73 20 77 68 69 63 68 20 61 72 65 20 74 68 ets which are th
0ef0: 65 0a 09 23 20 70 72 65 64 65 63 65 73 73 6f 72 e..# predecessor
0f00: 73 20 6f 66 20 64 72 6f 70 70 65 64 20 63 68 61 s of dropped cha
0f10: 6e 67 65 73 65 74 73 2e 20 46 6f 72 20 74 68 65 ngesets. For the
0f20: 6d 20 77 65 20 68 61 76 65 20 74 6f 0a 09 23 20 m we have to..#
0f30: 72 65 6d 6f 76 65 20 74 68 65 69 72 20 65 78 69 remove their exi
0f40: 73 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f sting informatio
0f50: 6e 20 66 69 72 73 74 20 62 65 66 6f 72 65 20 69 n first before i
0f60: 6e 73 65 72 74 69 6e 67 20 74 68 65 0a 09 23 20 nserting the..#
0f70: 6e 65 77 20 64 61 74 61 2e 0a 09 73 74 61 74 65 new data...state
0f80: 20 72 75 6e 20 7b 0a 09 20 20 20 20 44 45 4c 45 run {.. DELE
0f90: 54 45 20 46 52 4f 4d 20 63 73 73 75 63 63 65 73 TE FROM cssucces
0fa0: 73 6f 72 20 57 48 45 52 45 20 63 69 64 20 3d 20 sor WHERE cid =
0fb0: 24 6d 79 69 64 3b 0a 09 7d 0a 09 73 65 74 20 6c $myid;..}..set l
0fc0: 6f 6f 70 20 30 0a 09 66 6f 72 65 61 63 68 20 6e oop 0..foreach n
0fd0: 69 64 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 63 id [$mytypeobj c
0fe0: 73 5f 73 75 63 63 65 73 73 6f 72 73 20 24 6d 79 s_successors $my
0ff0: 69 74 65 6d 73 5d 20 7b 0a 09 20 20 20 20 73 74 items] {.. st
1000: 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 ate run {...INSE
1010: 52 54 20 49 4e 54 4f 20 63 73 73 75 63 63 65 73 RT INTO cssucces
1020: 73 6f 72 20 28 63 69 64 2c 20 20 6e 69 64 29 0a sor (cid, nid).
1030: 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 ..VALUES
1040: 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64 ($myid
1050: 2c 24 6e 69 64 29 0a 09 20 20 20 20 7d 0a 09 20 ,$nid).. }..
1060: 20 20 20 69 66 20 7b 24 6e 69 64 20 3d 3d 20 24 if {$nid == $
1070: 6d 79 69 64 7d 20 7b 20 73 65 74 20 6c 6f 6f 70 myid} { set loop
1080: 20 31 20 7d 0a 09 7d 0a 09 23 20 52 65 70 6f 72 1 }..}..# Repor
1090: 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d 70 t after the comp
10a0: 6c 65 74 65 20 73 74 72 75 63 74 75 72 65 20 68 lete structure h
10b0: 61 73 20 62 65 65 6e 20 73 61 76 65 64 2e 0a 09 as been saved...
10c0: 69 66 20 7b 24 6c 6f 6f 70 7d 20 7b 20 24 73 65 if {$loop} { $se
10d0: 6c 66 20 72 65 70 6f 72 74 6c 6f 6f 70 20 7d 0a lf reportloop }.
10e0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
10f0: 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 # result = li
1100: 73 74 20 28 63 68 61 6e 67 65 73 65 74 29 0a 20 st (changeset).
1110: 20 20 20 6d 65 74 68 6f 64 20 73 75 63 63 65 73 method succes
1120: 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 20 55 73 65 sors {} {..# Use
1130: 20 74 68 65 20 64 61 74 61 20 73 61 76 65 64 20 the data saved
1140: 62 79 20 70 61 73 73 20 36 2e 0a 09 72 65 74 75 by pass 6...retu
1150: 72 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 rn [struct::list
1160: 20 6d 61 70 20 5b 73 74 61 74 65 20 72 75 6e 20 map [state run
1170: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53 2e {.. SELECT S.
1180: 6e 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 nid.. FROM
1190: 63 73 73 75 63 63 65 73 73 6f 72 20 53 0a 09 20 cssuccessor S..
11a0: 20 20 20 57 48 45 52 45 20 20 53 2e 63 69 64 20 WHERE S.cid
11b0: 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 5b 6d 79 74 = $myid..}] [myt
11c0: 79 70 65 6d 65 74 68 6f 64 20 6f 66 5d 5d 0a 20 ypemethod of]].
11d0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 69 74 65 6d }.. # item
11e0: 20 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 0a -> list (item).
11f0: 20 20 20 20 6d 65 74 68 6f 64 20 6e 65 78 74 6d method nextm
1200: 61 70 20 7b 7d 20 7b 0a 09 24 6d 79 74 79 70 65 ap {} {..$mytype
1210: 6f 62 6a 20 73 75 63 63 65 73 73 6f 72 73 20 74 obj successors t
1220: 6d 70 20 24 6d 79 69 74 65 6d 73 0a 09 72 65 74 mp $myitems..ret
1230: 75 72 6e 20 5b 61 72 72 61 79 20 67 65 74 20 74 urn [array get t
1240: 6d 70 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d mp]. }.. m
1250: 65 74 68 6f 64 20 62 72 65 61 6b 69 6e 74 65 72 ethod breakinter
1260: 6e 61 6c 64 65 70 65 6e 64 65 6e 63 69 65 73 20 naldependencies
1270: 7b 63 76 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 {cv} {..upvar 1
1280: 24 63 76 20 63 6f 75 6e 74 65 72 0a 09 6c 6f 67 $cv counter..log
1290: 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 write 14 csets
12a0: 7b 5b 24 73 65 6c 66 20 73 74 72 5d 20 42 49 44 {[$self str] BID
12b0: 7d 0a 09 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 65 }..vc::tools::me
12c0: 6d 3a 3a 6d 61 72 6b 0a 09 23 23 0a 09 23 23 20 m::mark..##..##
12d0: 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f NOTE: This metho
12e0: 64 2c 20 6d 61 79 62 65 20 69 6e 20 63 6f 6e 6a d, maybe in conj
12f0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 69 74 73 unction with its
1300: 20 63 61 6c 6c 65 72 0a 09 23 23 20 20 20 20 20 caller..##
1310: 20 20 73 65 65 6d 73 20 74 6f 20 62 65 20 61 20 seems to be a
1320: 6d 65 6d 6f 72 79 20 68 6f 67 2c 20 65 73 70 65 memory hog, espe
1330: 63 69 61 6c 6c 79 20 66 6f 72 20 6c 61 72 67 65 cially for large
1340: 0a 09 23 23 20 20 20 20 20 20 20 63 68 61 6e 67 ..## chang
1350: 65 73 65 74 73 2c 20 77 69 74 68 20 27 6c 61 72 esets, with 'lar
1360: 67 65 27 20 6d 65 61 6e 69 6e 67 20 74 6f 20 68 ge' meaning to h
1370: 61 76 65 20 61 20 27 6c 6f 6e 67 20 6c 69 73 74 ave a 'long list
1380: 0a 09 23 23 20 20 20 20 20 20 20 6f 66 20 69 74 ..## of it
1390: 65 6d 73 2c 20 73 65 76 65 72 61 6c 20 74 68 6f ems, several tho
13a0: 75 73 61 6e 64 27 2e 20 49 6e 76 65 73 74 69 67 usand'. Investig
13b0: 61 74 65 20 77 68 65 72 65 20 74 68 65 0a 09 23 ate where the..#
13c0: 23 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 20 69 # memory i
13d0: 73 20 73 70 65 6e 74 20 61 6e 64 20 74 68 65 6e s spent and then
13e0: 20 6c 6f 6f 6b 20 66 6f 72 20 77 61 79 73 20 6f look for ways o
13f0: 66 20 72 65 63 74 69 66 79 69 6e 67 0a 09 23 23 f rectifying..##
1400: 20 20 20 20 20 20 20 74 68 65 20 70 72 6f 62 6c the probl
1410: 65 6d 2e 0a 09 23 23 0a 0a 09 23 20 54 68 69 73 em...##...# This
1420: 20 6d 65 74 68 6f 64 20 69 6e 73 70 65 63 74 73 method inspects
1430: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 73 20 the changesets
1440: 66 6f 72 20 69 6e 74 65 72 6e 61 6c 0a 09 23 20 for internal..#
1450: 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 4e 6f dependencies. No
1460: 74 68 69 6e 67 20 69 73 20 64 6f 6e 65 20 69 66 thing is done if
1470: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 0a 09 23 there are no..#
1480: 20 73 75 63 68 2e 20 4f 74 68 65 72 77 69 73 65 such. Otherwise
1490: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 69 the changeset i
14a0: 73 20 73 70 6c 69 74 20 69 6e 74 6f 20 61 20 73 s split into a s
14b0: 65 74 20 6f 66 0a 09 23 20 66 72 61 67 6d 65 6e et of..# fragmen
14c0: 74 73 20 77 69 74 68 6f 75 74 20 69 6e 74 65 72 ts without inter
14d0: 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 nal dependencies
14e0: 2c 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74 , transforming t
14f0: 68 65 0a 09 23 20 69 6e 74 65 72 6e 61 6c 20 64 he..# internal d
1500: 65 70 65 6e 64 65 6e 63 69 65 73 20 69 6e 74 6f ependencies into
1510: 20 65 78 74 65 72 6e 61 6c 20 6f 6e 65 73 2e 20 external ones.
1520: 54 68 65 20 6e 65 77 20 63 68 61 6e 67 65 73 65 The new changese
1530: 74 73 0a 09 23 20 61 72 65 20 61 64 64 65 64 20 ts..# are added
1540: 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 to the list of a
1550: 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a ll changesets...
1560: 09 23 20 57 65 20 70 65 72 66 6f 72 6d 20 61 6c .# We perform al
1570: 6c 20 6e 65 63 65 73 73 61 72 79 20 73 70 6c 69 l necessary spli
1580: 74 73 20 69 6e 20 6f 6e 65 20 67 6f 2c 20 69 6e ts in one go, in
1590: 73 74 65 61 64 20 6f 66 20 6f 6e 6c 79 0a 09 23 stead of only..#
15a0: 20 6f 6e 65 2e 20 54 68 65 20 70 72 65 76 69 6f one. The previo
15b0: 75 73 20 61 6c 67 6f 72 69 74 68 6d 2c 20 61 64 us algorithm, ad
15c0: 61 70 74 65 64 20 66 72 6f 6d 20 63 76 73 32 73 apted from cvs2s
15d0: 76 6e 2c 20 63 6f 6d 70 75 74 65 64 0a 09 23 20 vn, computed..#
15e0: 61 20 6c 6f 74 20 6f 66 20 73 74 61 74 65 20 77 a lot of state w
15f0: 68 69 63 68 20 77 61 73 20 74 68 72 6f 77 6e 20 hich was thrown
1600: 61 77 61 79 20 61 6e 64 20 74 68 65 6e 20 63 6f away and then co
1610: 6d 70 75 74 65 64 20 61 67 61 69 6e 0a 09 23 20 mputed again..#
1620: 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 for each of the
1630: 66 72 61 67 6d 65 6e 74 73 2e 20 49 74 20 73 68 fragments. It sh
1640: 6f 75 6c 64 20 62 65 20 65 61 73 69 65 72 20 74 ould be easier t
1650: 6f 20 75 70 64 61 74 65 20 61 6e 64 0a 09 23 20 o update and..#
1660: 72 65 75 73 65 20 74 68 61 74 20 73 74 61 74 65 reuse that state
1670: 2e 0a 0a 09 23 20 54 68 65 20 63 6f 64 65 20 63 ....# The code c
1680: 68 65 63 6b 73 20 6f 6e 6c 79 20 73 75 63 63 65 hecks only succe
1690: 73 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 69 65 ssor dependencie
16a0: 73 2c 20 61 73 20 74 68 69 73 0a 09 23 20 61 75 s, as this..# au
16b0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 76 65 tomatically cove
16c0: 72 73 20 74 68 65 20 70 72 65 64 65 63 65 73 73 rs the predecess
16d0: 6f 72 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 or dependencies
16e0: 61 73 20 77 65 6c 6c 20 28 41 0a 09 23 20 73 75 as well (A..# su
16f0: 63 63 65 73 73 6f 72 20 64 65 70 65 6e 64 65 6e ccessor dependen
1700: 63 79 20 61 20 2d 3e 20 62 20 69 73 20 61 6c 73 cy a -> b is als
1710: 6f 20 61 20 70 72 65 64 65 63 65 73 73 6f 72 20 o a predecessor
1720: 64 65 70 65 6e 64 65 6e 63 79 0a 09 23 20 62 20 dependency..# b
1730: 2d 3e 20 61 29 2e 0a 0a 09 23 20 41 72 72 61 79 -> a)....# Array
1740: 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 of dependencies
1750: 20 28 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c (parent -> chil
1760: 64 29 2e 20 54 68 69 73 20 69 73 20 70 75 6c 6c d). This is pull
1770: 65 64 20 66 72 6f 6d 0a 09 23 20 74 68 65 20 73 ed from..# the s
1780: 74 61 74 65 2c 20 61 6e 64 20 6c 69 6d 69 74 65 tate, and limite
1790: 64 20 74 6f 20 73 75 63 63 65 73 73 6f 72 73 20 d to successors
17a0: 77 69 74 68 69 6e 20 74 68 65 20 63 68 61 6e 67 within the chang
17b0: 65 73 65 74 2e 0a 0a 09 61 72 72 61 79 20 73 65 eset....array se
17c0: 74 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 7b t dependencies {
17d0: 7d 0a 09 24 6d 79 74 79 70 65 6f 62 6a 20 69 6e }..$mytypeobj in
17e0: 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 ternalsuccessors
17f0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 6d dependencies $m
1800: 79 69 74 65 6d 73 0a 09 69 66 20 7b 21 5b 61 72 yitems..if {![ar
1810: 72 61 79 20 73 69 7a 65 20 64 65 70 65 6e 64 65 ray size depende
1820: 6e 63 69 65 73 5d 7d 20 7b 0a 09 20 20 20 20 72 ncies]} {.. r
1830: 65 74 75 72 6e 20 30 0a 09 7d 20 3b 20 23 20 4e eturn 0..} ; # N
1840: 6f 74 68 69 6e 67 20 74 6f 20 62 72 65 61 6b 2e othing to break.
1850: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20 63 ...log write 5 c
1860: 73 65 74 73 20 2e 2e 2e 5b 24 73 65 6c 66 20 73 sets ...[$self s
1870: 74 72 5d 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e tr].............
1880: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
1890: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
18a0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 0a 09 76 63 3a 3a ............vc::
18b0: 74 6f 6f 6c 73 3a 3a 6d 65 6d 3a 3a 6d 61 72 6b tools::mem::mark
18c0: 0a 0a 09 23 20 57 65 20 68 61 76 65 20 69 6e 74 ...# We have int
18d0: 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 ernal dependenci
18e0: 65 73 20 74 6f 20 62 72 65 61 6b 2e 20 57 65 20 es to break. We
18f0: 6e 6f 77 20 69 74 65 72 61 74 65 20 6f 76 65 72 now iterate over
1900: 0a 09 23 20 61 6c 6c 20 70 6f 73 69 74 69 6f 6e ..# all position
1910: 73 20 69 6e 20 74 68 65 20 6c 69 73 74 20 28 77 s in the list (w
1920: 68 69 63 68 20 69 73 20 63 68 72 6f 6e 6f 6c 6f hich is chronolo
1930: 67 69 63 61 6c 2c 20 61 74 20 6c 65 61 73 74 0a gical, at least.
1940: 09 23 20 61 73 20 66 61 72 20 61 73 20 74 68 65 .# as far as the
1950: 20 74 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20 timestamps are
1960: 63 6f 72 72 65 63 74 20 61 6e 64 20 75 6e 69 71 correct and uniq
1970: 75 65 29 20 61 6e 64 0a 09 23 20 64 65 74 65 72 ue) and..# deter
1980: 6d 69 6e 65 20 74 68 65 20 62 65 73 74 20 70 6f mine the best po
1990: 73 69 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 62 sition for the b
19a0: 72 65 61 6b 2c 20 62 79 20 74 72 79 69 6e 67 20 reak, by trying
19b0: 74 6f 0a 09 23 20 62 72 65 61 6b 20 61 73 20 6d to..# break as m
19c0: 61 6e 79 20 64 65 70 65 6e 64 65 6e 63 69 65 73 any dependencies
19d0: 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 as possible in
19e0: 6f 6e 65 20 67 6f 2e 20 57 68 65 6e 20 61 0a 09 one go. When a..
19f0: 23 20 62 72 65 61 6b 20 77 61 73 20 66 6f 75 6e # break was foun
1a00: 64 20 74 68 69 73 20 69 73 20 72 65 64 6f 6e 65 d this is redone
1a10: 20 66 6f 72 20 74 68 65 20 66 72 61 67 6d 65 6e for the fragmen
1a20: 74 73 20 63 6f 6d 69 6e 67 20 61 6e 64 0a 09 23 ts coming and..#
1a30: 20 61 66 74 65 72 2c 20 61 66 74 65 72 20 75 70 after, after up
1a40: 64 69 6e 67 20 74 68 65 20 63 72 6f 73 73 69 6e ding the crossin
1a50: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a g information...
1a60: 09 23 20 44 61 74 61 20 73 74 72 75 63 74 75 72 .# Data structur
1a70: 65 73 3a 0a 09 23 20 4d 61 70 3a 20 20 50 4f 53 es:..# Map: POS
1a80: 20 20 20 72 65 76 69 73 69 6f 6e 20 69 64 20 20 revision id
1a90: 20 20 20 20 2d 3e 20 70 6f 73 69 74 69 6f 6e 20 -> position
1aa0: 69 6e 20 6c 69 73 74 2e 0a 09 23 20 20 20 20 20 in list...#
1ab0: 20 20 43 52 4f 53 53 20 70 6f 73 69 74 69 6f 6e CROSS position
1ac0: 20 69 6e 20 6c 69 73 74 20 2d 3e 20 6e 75 6d 62 in list -> numb
1ad0: 65 72 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 69 er of dependenci
1ae0: 65 73 20 63 72 6f 73 73 69 6e 67 20 69 74 0a 09 es crossing it..
1af0: 23 20 20 20 20 20 20 20 44 45 50 43 20 20 64 65 # DEPC de
1b00: 70 65 6e 64 65 6e 63 79 20 20 20 20 20 20 20 2d pendency -
1b10: 3e 20 70 6f 73 69 74 69 6f 6e 73 20 69 74 20 63 > positions it c
1b20: 72 6f 73 73 65 73 0a 09 23 20 4c 69 73 74 3a 20 rosses..# List:
1b30: 52 41 4e 47 45 20 4f 66 20 74 68 65 20 70 6f 73 RANGE Of the pos
1b40: 69 74 69 6f 6e 73 20 69 74 73 65 6c 66 2e 0a 09 itions itself...
1b50: 23 20 41 20 64 65 70 65 6e 64 65 6e 63 79 20 69 # A dependency i
1b60: 73 20 61 20 73 69 6e 67 6c 65 2d 65 6c 65 6d 65 s a single-eleme
1b70: 6e 74 20 6d 61 70 20 70 61 72 65 6e 74 20 2d 3e nt map parent ->
1b80: 20 63 68 69 6c 64 0a 0a 09 49 6e 69 74 69 61 6c child...Initial
1b90: 69 7a 65 42 72 65 61 6b 53 74 61 74 65 20 24 6d izeBreakState $m
1ba0: 79 69 74 65 6d 73 0a 0a 09 73 65 74 20 66 72 61 yitems...set fra
1bb0: 67 6d 65 6e 74 73 20 7b 7d 0a 09 73 65 74 20 6e gments {}..set n
1bc0: 65 77 20 20 20 20 20 20 20 5b 6c 69 73 74 20 24 ew [list $
1bd0: 72 61 6e 67 65 5d 0a 09 61 72 72 61 79 20 73 65 range]..array se
1be0: 74 20 62 72 65 61 6b 73 20 7b 7d 0a 0a 09 23 20 t breaks {}...#
1bf0: 49 6e 73 74 65 61 64 20 6f 66 20 6f 6e 65 20 6c Instead of one l
1c00: 69 73 74 20 68 6f 6c 64 69 6e 67 20 62 6f 74 68 ist holding both
1c10: 20 70 72 6f 63 65 73 73 65 64 20 61 6e 64 20 70 processed and p
1c20: 65 6e 64 69 6e 67 0a 09 23 20 66 72 61 67 6d 65 ending..# fragme
1c30: 6e 74 73 20 77 65 20 75 73 65 20 74 77 6f 2c 20 nts we use two,
1c40: 6f 6e 65 20 66 6f 72 20 74 68 65 20 66 72 61 6d one for the fram
1c50: 65 6e 74 73 20 74 6f 20 70 72 6f 63 65 73 73 2c ents to process,
1c60: 20 6f 6e 65 0a 09 23 20 74 6f 20 68 6f 6c 64 20 one..# to hold
1c70: 74 68 65 20 6e 65 77 20 66 72 61 67 6d 65 6e 74 the new fragment
1c80: 73 2c 20 61 6e 64 20 74 68 65 20 6c 61 74 74 65 s, and the latte
1c90: 72 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 r is copied to t
1ca0: 68 65 0a 09 23 20 66 6f 72 6d 65 72 20 77 68 65 he..# former whe
1cb0: 6e 20 74 68 65 79 20 72 75 6e 20 6f 75 74 2e 20 n they run out.
1cc0: 54 68 69 73 20 6b 65 65 70 73 20 74 68 65 20 6c This keeps the l
1cd0: 69 73 74 20 6f 66 20 70 65 6e 64 69 6e 67 0a 09 ist of pending..
1ce0: 23 20 66 72 61 67 6d 65 6e 74 73 20 73 68 6f 72 # fragments shor
1cf0: 74 20 77 69 74 68 6f 75 74 20 73 61 63 72 69 66 t without sacrif
1d00: 69 63 69 6e 67 20 73 70 65 65 64 20 62 79 20 73 icing speed by s
1d10: 68 69 66 74 69 6e 67 20 73 74 75 66 66 0a 09 23 hifting stuff..#
1d20: 20 64 6f 77 6e 2e 20 57 65 20 65 73 70 65 63 69 down. We especi
1d30: 61 6c 6c 79 20 64 72 6f 70 20 74 68 65 20 6d 65 ally drop the me
1d40: 6d 6f 72 79 20 6f 66 20 66 72 61 67 6d 65 6e 74 mory of fragment
1d50: 73 20 62 72 6f 6b 65 6e 0a 09 23 20 64 75 72 69 s broken..# duri
1d60: 6e 67 20 70 72 6f 63 65 73 73 69 6e 67 20 61 66 ng processing af
1d70: 74 65 72 20 61 20 73 68 6f 72 74 20 74 69 6d 65 ter a short time
1d80: 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6c 65 74 , instead of let
1d90: 74 69 6e 67 20 69 74 0a 09 23 20 63 6f 6e 73 75 ting it..# consu
1da0: 6d 65 20 6d 65 6d 6f 72 79 2e 0a 0a 09 77 68 69 me memory....whi
1db0: 6c 65 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6e 65 le {[llength $ne
1dc0: 77 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 w]} {... set
1dd0: 70 65 6e 64 69 6e 67 20 24 6e 65 77 0a 09 20 20 pending $new..
1de0: 20 20 73 65 74 20 6e 65 77 20 20 20 20 20 7b 7d set new {}
1df0: 0a 09 20 20 20 20 73 65 74 20 61 74 20 20 20 20 .. set at
1e00: 20 20 30 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 0... while
1e10: 7b 24 61 74 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 {$at < [llength
1e20: 24 70 65 6e 64 69 6e 67 5d 7d 20 7b 0a 09 09 73 $pending]} {...s
1e30: 65 74 20 63 75 72 72 65 6e 74 20 5b 6c 69 6e 64 et current [lind
1e40: 65 78 20 24 70 65 6e 64 69 6e 67 20 24 61 74 5d ex $pending $at]
1e50: 0a 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 36 20 ....log write 6
1e60: 63 73 65 74 73 20 7b 2e 20 2e 20 2e 2e 20 2e 2e csets {. . .. ..
1e70: 2e 20 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e . ..... ........
1e80: 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 7d 0a .............}.
1e90: 09 09 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 ..log write 6 cs
1ea0: 65 74 73 20 7b 53 63 68 65 64 75 6c 65 64 20 20 ets {Scheduled
1eb0: 20 5b 6a 6f 69 6e 20 5b 50 52 73 20 5b 6c 72 61 [join [PRs [lra
1ec0: 6e 67 65 20 24 70 65 6e 64 69 6e 67 20 24 61 74 nge $pending $at
1ed0: 20 65 6e 64 5d 5d 20 7b 20 7d 5d 7d 0a 09 09 6c end]] { }]}...l
1ee0: 6f 67 20 77 72 69 74 65 20 36 20 63 73 65 74 73 og write 6 csets
1ef0: 20 7b 43 6f 6e 73 69 64 65 72 69 6e 67 20 5b 50 {Considering [P
1f00: 52 20 24 63 75 72 72 65 6e 74 5d 20 5c 5b 24 61 R $current] \[$a
1f10: 74 2f 5b 6c 6c 65 6e 67 74 68 20 24 70 65 6e 64 t/[llength $pend
1f20: 69 6e 67 5d 5c 5d 7d 0a 0a 09 09 73 65 74 20 62 ing]\]}....set b
1f30: 65 73 74 20 5b 46 69 6e 64 42 65 73 74 42 72 65 est [FindBestBre
1f40: 61 6b 20 24 63 75 72 72 65 6e 74 5d 0a 0a 09 09 ak $current]....
1f50: 69 66 20 7b 24 62 65 73 74 20 3c 20 30 7d 20 7b if {$best < 0} {
1f60: 0a 09 09 20 20 20 20 23 20 54 68 65 20 69 6e 73 ... # The ins
1f70: 70 65 63 74 65 64 20 72 61 6e 67 65 20 68 61 73 pected range has
1f80: 20 6e 6f 20 69 6e 74 65 72 6e 61 6c 0a 09 09 20 no internal...
1f90: 20 20 20 23 20 64 65 70 65 6e 64 65 6e 63 69 65 # dependencie
1fa0: 73 2e 20 54 68 69 73 20 69 73 20 61 20 63 6f 6d s. This is a com
1fb0: 70 6c 65 74 65 20 66 72 61 67 6d 65 6e 74 2e 0a plete fragment..
1fc0: 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 66 72 .. lappend fr
1fd0: 61 67 6d 65 6e 74 73 20 24 63 75 72 72 65 6e 74 agments $current
1fe0: 0a 0a 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 .... log writ
1ff0: 65 20 36 20 63 73 65 74 73 20 22 4e 6f 20 62 72 e 6 csets "No br
2000: 65 61 6b 73 2c 20 66 69 6e 61 6c 22 0a 09 09 7d eaks, final"...}
2010: 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 23 20 else {... #
2020: 53 70 6c 69 74 20 74 68 65 20 72 61 6e 67 65 20 Split the range
2030: 61 6e 64 20 73 63 68 65 64 75 6c 65 20 74 68 65 and schedule the
2040: 20 72 65 73 75 6c 74 69 6e 67 0a 09 09 20 20 20 resulting...
2050: 20 23 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 # fragments for
2060: 20 66 75 72 74 68 65 72 20 69 6e 73 70 65 63 74 further inspect
2070: 69 6f 6e 2e 20 52 65 6d 65 6d 62 65 72 20 74 68 ion. Remember th
2080: 65 0a 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 e... # number
2090: 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 of dependencies
20a0: 20 63 75 74 20 62 65 66 6f 72 65 20 77 65 20 72 cut before we r
20b0: 65 6d 6f 76 65 20 74 68 65 6d 0a 09 09 20 20 20 emove them...
20c0: 20 23 20 66 72 6f 6d 20 63 6f 6e 73 69 64 65 72 # from consider
20d0: 61 74 69 6f 6e 2c 20 66 6f 72 20 64 6f 63 75 6d ation, for docum
20e0: 65 6e 74 61 74 69 6f 6e 20 6c 61 74 65 72 2e 0a entation later..
20f0: 0a 09 09 20 20 20 20 73 65 74 20 62 72 65 61 6b ... set break
2100: 73 28 24 62 65 73 74 29 20 24 63 72 6f 73 73 28 s($best) $cross(
2110: 24 62 65 73 74 29 0a 0a 09 09 20 20 20 20 6c 6f $best).... lo
2120: 67 20 77 72 69 74 65 20 36 20 63 73 65 74 73 20 g write 6 csets
2130: 22 42 65 73 74 20 62 72 65 61 6b 20 40 20 24 62 "Best break @ $b
2140: 65 73 74 2c 20 63 75 74 74 69 6e 67 20 5b 6e 73 est, cutting [ns
2150: 70 20 24 63 72 6f 73 73 28 24 62 65 73 74 29 20 p $cross($best)
2160: 64 65 70 65 6e 64 65 6e 63 79 20 64 65 70 65 6e dependency depen
2170: 64 65 6e 63 69 65 73 5d 22 0a 0a 09 09 20 20 20 dencies]"....
2180: 20 23 20 4e 6f 74 65 3a 20 54 68 65 20 76 61 6c # Note: The val
2190: 75 65 20 6f 66 20 62 65 73 74 20 69 73 20 61 6e ue of best is an
21a0: 20 61 62 6f 6c 75 74 65 20 6c 6f 63 61 74 69 6f abolute locatio
21b0: 6e 0a 09 09 20 20 20 20 23 20 69 6e 20 6d 79 69 n... # in myi
21c0: 74 65 6d 73 2e 20 55 73 65 20 74 68 65 20 73 74 tems. Use the st
21d0: 61 72 74 20 6f 66 20 63 75 72 72 65 6e 74 20 74 art of current t
21e0: 6f 20 6d 61 6b 65 20 69 74 0a 09 09 20 20 20 20 o make it...
21f0: 23 20 61 6e 20 69 6e 64 65 78 20 61 62 73 6f 6c # an index absol
2200: 75 74 65 20 74 6f 20 63 75 72 72 65 6e 74 2e 0a ute to current..
2210: 0a 09 09 20 20 20 20 73 65 74 20 62 72 65 6c 20 ... set brel
2220: 5b 65 78 70 72 20 7b 24 62 65 73 74 20 2d 20 5b [expr {$best - [
2230: 6c 69 6e 64 65 78 20 24 63 75 72 72 65 6e 74 20 lindex $current
2240: 30 5d 7d 5d 0a 09 09 20 20 20 20 73 65 74 20 62 0]}]... set b
2250: 6e 65 78 74 20 24 62 72 65 6c 20 3b 20 69 6e 63 next $brel ; inc
2260: 72 20 62 6e 65 78 74 0a 09 09 20 20 20 20 73 65 r bnext... se
2270: 74 20 66 72 61 67 62 65 66 6f 72 65 20 5b 6c 72 t fragbefore [lr
2280: 61 6e 67 65 20 24 63 75 72 72 65 6e 74 20 30 20 ange $current 0
2290: 24 62 72 65 6c 5d 0a 09 09 20 20 20 20 73 65 74 $brel]... set
22a0: 20 66 72 61 67 61 66 74 65 72 20 20 5b 6c 72 61 fragafter [lra
22b0: 6e 67 65 20 24 63 75 72 72 65 6e 74 20 24 62 6e nge $current $bn
22c0: 65 78 74 20 65 6e 64 5d 0a 0a 09 09 20 20 20 20 ext end]....
22d0: 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 65 74 log write 6 cset
22e0: 73 20 22 4e 65 77 20 70 69 65 63 65 73 20 20 5b s "New pieces [
22f0: 50 52 20 24 66 72 61 67 62 65 66 6f 72 65 5d 20 PR $fragbefore]
2300: 5b 50 52 20 24 66 72 61 67 61 66 74 65 72 5d 22 [PR $fragafter]"
2310: 0a 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 .... integrit
2320: 79 20 61 73 73 65 72 74 20 7b 5b 6c 6c 65 6e 67 y assert {[lleng
2330: 74 68 20 24 66 72 61 67 62 65 66 6f 72 65 5d 7d th $fragbefore]}
2340: 20 7b 46 6f 75 6e 64 20 7a 65 72 6f 2d 6c 65 6e {Found zero-len
2350: 67 74 68 20 66 72 61 67 6d 65 6e 74 20 61 74 20 gth fragment at
2360: 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 7d 0a 09 the beginning}..
2370: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 . integrity a
2380: 73 73 65 72 74 20 7b 5b 6c 6c 65 6e 67 74 68 20 ssert {[llength
2390: 24 66 72 61 67 61 66 74 65 72 5d 7d 20 20 7b 46 $fragafter]} {F
23a0: 6f 75 6e 64 20 7a 65 72 6f 2d 6c 65 6e 67 74 68 ound zero-length
23b0: 20 66 72 61 67 6d 65 6e 74 20 61 74 20 74 68 65 fragment at the
23c0: 20 65 6e 64 7d 0a 0a 09 09 20 20 20 20 6c 61 70 end}.... lap
23d0: 70 65 6e 64 20 6e 65 77 20 24 66 72 61 67 62 65 pend new $fragbe
23e0: 66 6f 72 65 20 24 66 72 61 67 61 66 74 65 72 0a fore $fragafter.
23f0: 09 09 20 20 20 20 43 75 74 41 74 20 24 62 65 73 .. CutAt $bes
2400: 74 0a 09 09 7d 0a 0a 09 09 69 6e 63 72 20 61 74 t...}....incr at
2410: 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 6c 6f 67 .. }..}...log
2420: 20 77 72 69 74 65 20 36 20 63 73 65 74 73 20 22 write 6 csets "
2430: 2e 20 2e 20 2e 2e 20 2e 2e 2e 20 2e 2e 2e 2e 2e . . .. ... .....
2440: 20 2e 2e 2e 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e ........ ......
2450: 2e 2e 2e 2e 2e 2e 2e 22 0a 0a 09 23 20 28 2a 29 ......."...# (*)
2460: 20 57 65 20 63 6c 65 61 72 20 6f 75 74 20 74 68 We clear out th
2470: 65 20 61 73 73 6f 63 69 61 74 65 64 20 70 61 72 e associated par
2480: 74 20 6f 66 20 74 68 65 20 6d 79 69 74 65 6d 6d t of the myitemm
2490: 61 70 0a 09 23 20 69 6e 2d 6d 65 6d 6f 72 79 20 ap..# in-memory
24a0: 69 6e 64 65 78 20 69 6e 20 70 72 65 70 61 72 61 index in prepara
24b0: 74 69 6f 6e 20 66 6f 72 20 6e 65 77 20 64 61 74 tion for new dat
24c0: 61 2e 20 41 20 73 69 6d 70 6c 65 20 75 6e 73 65 a. A simple unse
24d0: 74 0a 09 23 20 69 73 20 65 6e 6f 75 67 68 2c 20 t..# is enough,
24e0: 77 65 20 68 61 76 65 20 6e 6f 20 73 79 6d 62 6f we have no symbo
24f0: 6c 20 63 68 61 6e 67 65 73 65 74 73 20 61 74 20 l changesets at
2500: 74 68 69 73 20 74 69 6d 65 2c 20 61 6e 64 0a 09 this time, and..
2510: 23 20 74 68 75 73 20 6e 65 76 65 72 20 6d 6f 72 # thus never mor
2520: 65 20 74 68 61 6e 20 6f 6e 65 20 72 65 66 65 72 e than one refer
2530: 65 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73 74 ence in the list
2540: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 69 69 64 20 ....foreach iid
2550: 24 6d 79 69 74 65 6d 73 20 7b 0a 09 20 20 20 20 $myitems {..
2560: 73 65 74 20 6b 65 79 20 5b 6c 69 73 74 20 24 6d set key [list $m
2570: 79 74 79 70 65 20 24 69 69 64 5d 0a 09 20 20 20 ytype $iid]..
2580: 20 75 6e 73 65 74 20 6d 79 69 74 65 6d 6d 61 70 unset myitemmap
2590: 28 24 6b 65 79 29 0a 09 20 20 20 20 6c 6f 67 20 ($key).. log
25a0: 77 72 69 74 65 20 38 20 63 73 65 74 73 20 7b 4d write 8 csets {M
25b0: 41 50 2d 20 69 74 65 6d 20 3c 24 6b 65 79 3e 20 AP- item <$key>
25c0: 24 73 65 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 $self = [$self s
25d0: 74 72 5d 7d 0a 09 7d 0a 0a 09 23 20 43 72 65 61 tr]}..}...# Crea
25e0: 74 65 20 63 68 61 6e 67 65 73 65 74 73 20 66 6f te changesets fo
25f0: 72 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 2c r the fragments,
2600: 20 72 65 75 73 69 6e 67 20 74 68 65 20 63 75 72 reusing the cur
2610: 72 65 6e 74 20 6f 6e 65 0a 09 23 20 66 6f 72 20 rent one..# for
2620: 74 68 65 20 66 69 72 73 74 20 66 72 61 67 6d 65 the first fragme
2630: 6e 74 2e 20 57 65 20 73 6f 72 74 20 74 68 65 6d nt. We sort them
2640: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 6c 6c in order to all
2650: 6f 77 0a 09 23 20 63 68 65 63 6b 69 6e 67 20 66 ow..# checking f
2660: 6f 72 20 67 61 70 73 20 61 6e 64 20 6e 69 63 65 or gaps and nice
2670: 20 6d 65 73 73 61 67 65 73 2e 0a 0a 09 73 65 74 messages....set
2680: 20 66 72 61 67 6d 65 6e 74 73 20 5b 6c 73 6f 72 fragments [lsor
2690: 74 20 2d 69 6e 64 65 78 20 30 20 2d 69 6e 74 65 t -index 0 -inte
26a0: 67 65 72 20 24 66 72 61 67 6d 65 6e 74 73 5d 0a ger $fragments].
26b0: 0a 09 23 70 75 74 73 20 5c 74 2e 5b 6a 6f 69 6e ..#puts \t.[join
26c0: 20 5b 50 52 73 20 24 66 72 61 67 6d 65 6e 74 73 [PRs $fragments
26d0: 5d 20 2e 5c 6e 5c 74 2e 5d 2e 0a 0a 09 42 6f 72 ] .\n\t.]....Bor
26e0: 64 65 72 20 5b 6c 69 6e 64 65 78 20 24 66 72 61 der [lindex $fra
26f0: 67 6d 65 6e 74 73 20 30 5d 20 66 69 72 73 74 73 gments 0] firsts
2700: 20 66 69 72 73 74 65 0a 0a 09 69 6e 74 65 67 72 firste...integr
2710: 69 74 79 20 61 73 73 65 72 74 20 7b 24 66 69 72 ity assert {$fir
2720: 73 74 73 20 3d 3d 20 30 7d 20 7b 42 61 64 20 66 sts == 0} {Bad f
2730: 72 61 67 6d 65 6e 74 20 73 74 61 72 74 20 40 20 ragment start @
2740: 24 66 69 72 73 74 73 2c 20 67 61 70 2c 20 6f 72 $firsts, gap, or
2750: 20 62 65 66 6f 72 65 20 62 65 67 69 6e 6e 69 6e before beginnin
2760: 67 20 6f 66 20 74 68 65 20 72 61 6e 67 65 7d 0a g of the range}.
2770: 0a 09 73 65 74 20 6c 61 73 74 65 20 24 66 69 72 ..set laste $fir
2780: 73 74 65 0a 09 66 6f 72 65 61 63 68 20 66 72 61 ste..foreach fra
2790: 67 6d 65 6e 74 20 5b 6c 72 61 6e 67 65 20 24 66 gment [lrange $f
27a0: 72 61 67 6d 65 6e 74 73 20 31 20 65 6e 64 5d 20 ragments 1 end]
27b0: 7b 0a 09 20 20 20 20 42 6f 72 64 65 72 20 24 66 {.. Border $f
27c0: 72 61 67 6d 65 6e 74 20 73 20 65 0a 09 20 20 20 ragment s e..
27d0: 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 integrity asser
27e0: 74 20 7b 24 6c 61 73 74 65 20 3d 3d 20 28 24 73 t {$laste == ($s
27f0: 20 2d 20 31 29 7d 20 7b 42 61 64 20 66 72 61 67 - 1)} {Bad frag
2800: 6d 65 6e 74 20 62 6f 72 64 65 72 20 3c 24 6c 61 ment border <$la
2810: 73 74 65 20 7c 20 24 73 3e 2c 20 67 61 70 20 6f ste | $s>, gap o
2820: 72 20 6f 76 65 72 6c 61 70 7d 0a 0a 09 20 20 20 r overlap}...
2830: 20 73 65 74 20 6e 65 77 20 5b 24 74 79 70 65 20 set new [$type
2840: 25 41 55 54 4f 25 20 24 6d 79 70 72 6f 6a 65 63 %AUTO% $myprojec
2850: 74 20 24 6d 79 74 79 70 65 20 24 6d 79 73 72 63 t $mytype $mysrc
2860: 69 64 20 5b 6c 72 61 6e 67 65 20 24 6d 79 69 74 id [lrange $myit
2870: 65 6d 73 20 24 73 20 24 65 5d 5d 0a 09 20 20 20 ems $s $e]]..
2880: 20 69 6e 63 72 20 63 6f 75 6e 74 65 72 0a 0a 20 incr counter..
2890: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 20 77 log w
28a0: 72 69 74 65 20 34 20 63 73 65 74 73 20 22 42 72 rite 4 csets "Br
28b0: 65 61 6b 69 6e 67 20 5b 24 73 65 6c 66 20 73 74 eaking [$self st
28c0: 72 20 5d 20 40 20 24 6c 61 73 74 65 2c 20 6e 65 r ] @ $laste, ne
28d0: 77 20 5b 24 6e 65 77 20 73 74 72 5d 2c 20 63 75 w [$new str], cu
28e0: 74 74 69 6e 67 20 24 62 72 65 61 6b 73 28 24 6c tting $breaks($l
28f0: 61 73 74 65 29 22 0a 0a 09 20 20 20 20 73 65 74 aste)"... set
2900: 20 6c 61 73 74 65 20 24 65 0a 09 7d 0a 0a 09 69 laste $e..}...i
2910: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
2920: 7b 0a 09 20 20 20 20 24 6c 61 73 74 65 20 3d 3d {.. $laste ==
2930: 20 28 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 69 74 ([llength $myit
2940: 65 6d 73 5d 2d 31 29 0a 09 7d 20 7b 42 61 64 20 ems]-1)..} {Bad
2950: 66 72 61 67 6d 65 6e 74 20 65 6e 64 20 40 20 24 fragment end @ $
2960: 6c 61 73 74 65 2c 20 67 61 70 2c 20 6f 72 20 62 laste, gap, or b
2970: 65 79 6f 6e 64 20 65 6e 64 20 6f 66 20 74 68 65 eyond end of the
2980: 20 72 61 6e 67 65 7d 0a 0a 09 23 20 50 75 74 20 range}...# Put
2990: 74 68 65 20 66 69 72 73 74 20 66 72 61 67 6d 65 the first fragme
29a0: 6e 74 20 69 6e 74 6f 20 74 68 65 20 63 75 72 72 nt into the curr
29b0: 65 6e 74 20 63 68 61 6e 67 65 73 65 74 2c 20 61 ent changeset, a
29c0: 6e 64 0a 09 23 20 75 70 64 61 74 65 20 74 68 65 nd..# update the
29d0: 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6e 64 65 78 in-memory index
29e0: 2e 20 57 65 20 63 61 6e 20 73 69 6d 70 6c 79 20 . We can simply
29f0: 28 72 65 29 61 64 64 20 74 68 65 20 69 74 65 6d (re)add the item
2a00: 73 0a 09 23 20 62 65 63 61 75 73 65 20 77 65 20 s..# because we
2a10: 63 6c 65 61 72 65 64 20 74 68 65 20 70 72 65 76 cleared the prev
2a20: 69 6f 75 73 6c 79 20 65 78 69 73 74 69 6e 67 20 iously existing
2a30: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 73 65 65 information, see
2a40: 0a 09 23 20 28 2a 29 20 61 62 6f 76 65 2e 20 50 ..# (*) above. P
2a50: 65 72 73 69 73 74 65 6e 63 65 20 64 6f 65 73 20 ersistence does
2a60: 6e 6f 74 20 6d 61 74 74 65 72 20 68 65 72 65 2c not matter here,
2a70: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 0a 09 23 20 none of the..#
2a80: 63 68 61 6e 67 65 73 65 74 73 20 68 61 73 20 62 changesets has b
2a90: 65 65 6e 20 73 61 76 65 64 20 74 6f 20 74 68 65 een saved to the
2aa0: 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 persistent stat
2ab0: 65 20 79 65 74 2e 0a 0a 09 73 65 74 20 6d 79 69 e yet....set myi
2ac0: 74 65 6d 73 20 20 5b 6c 72 61 6e 67 65 20 24 6d tems [lrange $m
2ad0: 79 69 74 65 6d 73 20 20 30 20 24 66 69 72 73 74 yitems 0 $first
2ae0: 65 5d 0a 09 73 65 74 20 6d 79 74 69 74 65 6d 73 e]..set mytitems
2af0: 20 5b 6c 72 61 6e 67 65 20 24 6d 79 74 69 74 65 [lrange $mytite
2b00: 6d 73 20 30 20 24 66 69 72 73 74 65 5d 0a 09 66 ms 0 $firste]..f
2b10: 6f 72 65 61 63 68 20 69 69 64 20 24 6d 79 69 74 oreach iid $myit
2b20: 65 6d 73 20 7b 0a 09 20 20 20 20 73 65 74 20 6b ems {.. set k
2b30: 65 79 20 5b 6c 69 73 74 20 24 6d 79 74 79 70 65 ey [list $mytype
2b40: 20 24 69 69 64 5d 0a 09 20 20 20 20 73 65 74 20 $iid].. set
2b50: 6d 79 69 74 65 6d 6d 61 70 28 24 6b 65 79 29 20 myitemmap($key)
2b60: 24 73 65 6c 66 0a 09 20 20 20 20 6c 6f 67 20 77 $self.. log w
2b70: 72 69 74 65 20 38 20 63 73 65 74 73 20 7b 4d 41 rite 8 csets {MA
2b80: 50 2b 20 69 74 65 6d 20 3c 24 6b 65 79 3e 20 24 P+ item <$key> $
2b90: 73 65 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 self = [$self st
2ba0: 72 5d 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 20 r]}..}...return
2bb0: 31 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 1. }.. met
2bc0: 68 6f 64 20 70 65 72 73 69 73 74 20 7b 7d 20 7b hod persist {} {
2bd0: 0a 09 73 65 74 20 74 69 64 20 24 6d 79 63 73 74 ..set tid $mycst
2be0: 79 70 65 28 24 6d 79 74 79 70 65 29 0a 09 73 65 ype($mytype)..se
2bf0: 74 20 70 69 64 20 5b 24 6d 79 70 72 6f 6a 65 63 t pid [$myprojec
2c00: 74 20 69 64 5d 0a 09 73 65 74 20 70 6f 73 20 30 t id]..set pos 0
2c10: 0a 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 ...state transac
2c20: 74 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74 61 74 tion {.. stat
2c30: 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52 54 e run {...INSERT
2c40: 20 49 4e 54 4f 20 63 68 61 6e 67 65 73 65 74 20 INTO changeset
2c50: 28 63 69 64 2c 20 20 20 70 69 64 2c 20 20 74 79 (cid, pid, ty
2c60: 70 65 2c 20 73 72 63 29 0a 09 09 56 41 4c 55 45 pe, src)...VALUE
2c70: 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 S
2c80: 20 28 24 6d 79 69 64 2c 20 24 70 69 64 2c 20 24 ($myid, $pid, $
2c90: 74 69 64 2c 20 24 6d 79 73 72 63 69 64 29 3b 0a tid, $mysrcid);.
2ca0: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 66 6f 72 . }... for
2cb0: 65 61 63 68 20 69 69 64 20 24 6d 79 69 74 65 6d each iid $myitem
2cc0: 73 20 7b 0a 09 09 73 74 61 74 65 20 72 75 6e 20 s {...state run
2cd0: 7b 0a 09 09 20 20 20 20 49 4e 53 45 52 54 20 49 {... INSERT I
2ce0: 4e 54 4f 20 63 73 69 74 65 6d 20 28 63 69 64 2c NTO csitem (cid,
2cf0: 20 20 20 70 6f 73 2c 20 20 69 69 64 29 0a 09 09 pos, iid)...
2d00: 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 20 20 VALUES
2d10: 20 20 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24 ($myid, $
2d20: 70 6f 73 2c 20 24 69 69 64 29 3b 0a 09 09 7d 0a pos, $iid);...}.
2d30: 09 09 69 6e 63 72 20 70 6f 73 0a 09 20 20 20 20 ..incr pos..
2d40: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 }..}..return.
2d50: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 74 }.. method t
2d60: 69 6d 65 72 61 6e 67 65 20 7b 7d 20 7b 20 72 65 imerange {} { re
2d70: 74 75 72 6e 20 5b 24 6d 79 74 79 70 65 6f 62 6a turn [$mytypeobj
2d80: 20 74 69 6d 65 72 61 6e 67 65 20 24 6d 79 69 74 timerange $myit
2d90: 65 6d 73 5d 20 7d 0a 0a 20 20 20 20 6d 65 74 68 ems] }.. meth
2da0: 6f 64 20 6c 69 6d 69 74 73 20 7b 7d 20 7b 0a 09 od limits {} {..
2db0: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 struct::list ass
2dc0: 69 67 6e 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 ign [$mytypeobj
2dd0: 6c 69 6d 69 74 73 20 24 6d 79 69 74 65 6d 73 5d limits $myitems]
2de0: 20 6d 61 78 70 20 6d 69 6e 73 0a 09 72 65 74 75 maxp mins..retu
2df0: 72 6e 20 5b 6c 69 73 74 20 5b 54 61 67 49 74 65 rn [list [TagIte
2e00: 6d 44 69 63 74 20 24 6d 61 78 70 20 24 6d 79 74 mDict $maxp $myt
2e10: 79 70 65 5d 20 5b 54 61 67 49 74 65 6d 44 69 63 ype] [TagItemDic
2e20: 74 20 24 6d 69 6e 73 20 24 6d 79 74 79 70 65 5d t $mins $mytype]
2e30: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 ]. }.. met
2e40: 68 6f 64 20 64 72 6f 70 20 7b 7d 20 7b 0a 09 6c hod drop {} {..l
2e50: 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 og write 8 csets
2e60: 20 7b 44 72 6f 70 70 69 6e 67 20 24 73 65 6c 66 {Dropping $self
2e70: 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d 0a = [$self str]}.
2e80: 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 ..state transact
2e90: 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74 61 74 65 ion {.. state
2ea0: 20 72 75 6e 20 7b 0a 09 09 44 45 4c 45 54 45 20 run {...DELETE
2eb0: 46 52 4f 4d 20 63 68 61 6e 67 65 73 65 74 20 20 FROM changeset
2ec0: 20 57 48 45 52 45 20 63 69 64 20 3d 20 24 6d 79 WHERE cid = $my
2ed0: 69 64 3b 0a 09 09 44 45 4c 45 54 45 20 46 52 4f id;...DELETE FRO
2ee0: 4d 20 63 73 69 74 65 6d 20 20 20 20 20 20 57 48 M csitem WH
2ef0: 45 52 45 20 63 69 64 20 3d 20 24 6d 79 69 64 3b ERE cid = $myid;
2f00: 0a 09 09 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 ...DELETE FROM c
2f10: 73 73 75 63 63 65 73 73 6f 72 20 57 48 45 52 45 ssuccessor WHERE
2f20: 20 63 69 64 20 3d 20 24 6d 79 69 64 3b 0a 09 20 cid = $myid;..
2f30: 20 20 20 7d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 }..}..foreach
2f40: 20 69 69 64 20 24 6d 79 69 74 65 6d 73 20 7b 0a iid $myitems {.
2f50: 09 20 20 20 20 73 65 74 20 6b 65 79 20 5b 6c 69 . set key [li
2f60: 73 74 20 24 6d 79 74 79 70 65 20 24 69 69 64 5d st $mytype $iid]
2f70: 0a 09 20 20 20 20 75 6e 73 65 74 20 6d 79 69 74 .. unset myit
2f80: 65 6d 6d 61 70 28 24 6b 65 79 29 0a 09 20 20 20 emmap($key)..
2f90: 20 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 log write 8 cse
2fa0: 74 73 20 7b 4d 41 50 2d 20 69 74 65 6d 20 3c 24 ts {MAP- item <$
2fb0: 6b 65 79 3e 20 24 73 65 6c 66 20 3d 20 5b 24 73 key> $self = [$s
2fc0: 65 6c 66 20 73 74 72 5d 7d 0a 09 7d 0a 09 73 65 elf str]}..}..se
2fd0: 74 20 70 6f 73 20 20 20 20 20 20 20 20 20 20 5b t pos [
2fe0: 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 24 lsearch -exact $
2ff0: 6d 79 63 68 61 6e 67 65 73 65 74 73 20 24 73 65 mychangesets $se
3000: 6c 66 5d 0a 09 73 65 74 20 6d 79 63 68 61 6e 67 lf]..set mychang
3010: 65 73 65 74 73 20 5b 6c 72 65 70 6c 61 63 65 20 esets [lreplace
3020: 24 6d 79 63 68 61 6e 67 65 73 65 74 73 20 24 70 $mychangesets $p
3030: 6f 73 20 24 70 6f 73 5d 0a 09 73 65 74 20 70 6f os $pos]..set po
3040: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s
3050: 20 20 20 20 20 5b 6c 73 65 61 72 63 68 20 2d 65 [lsearch -e
3060: 78 61 63 74 20 24 6d 79 74 63 68 61 6e 67 65 73 xact $mytchanges
3070: 65 74 73 28 24 6d 79 74 79 70 65 29 20 24 73 65 ets($mytype) $se
3080: 6c 66 5d 0a 09 73 65 74 20 6d 79 74 63 68 61 6e lf]..set mytchan
3090: 67 65 73 65 74 73 28 24 6d 79 74 79 70 65 29 20 gesets($mytype)
30a0: 5b 6c 72 65 70 6c 61 63 65 20 24 6d 79 74 63 68 [lreplace $mytch
30b0: 61 6e 67 65 73 65 74 73 28 24 6d 79 74 79 70 65 angesets($mytype
30c0: 29 20 24 70 6f 73 20 24 70 6f 73 5d 0a 0a 09 23 ) $pos $pos]...#
30d0: 20 52 65 74 75 72 6e 20 74 68 65 20 6c 69 73 74 Return the list
30e0: 20 6f 66 20 70 72 65 64 65 63 65 73 73 6f 72 73 of predecessors
30f0: 20 73 6f 20 74 68 61 74 20 74 68 65 79 20 63 61 so that they ca
3100: 6e 20 62 65 20 61 64 6a 75 73 74 65 64 2e 0a 09 n be adjusted...
3110: 72 65 74 75 72 6e 20 5b 73 74 72 75 63 74 3a 3a return [struct::
3120: 6c 69 73 74 20 6d 61 70 20 5b 73 74 61 74 65 20 list map [state
3130: 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 run {.. SELEC
3140: 54 20 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 T cid.. FROM
3150: 20 20 63 73 73 75 63 63 65 73 73 6f 72 0a 09 20 cssuccessor..
3160: 20 20 20 57 48 45 52 45 20 20 6e 69 64 20 3d 20 WHERE nid =
3170: 24 6d 79 69 64 0a 09 7d 5d 20 5b 6d 79 74 79 70 $myid..}] [mytyp
3180: 65 6d 65 74 68 6f 64 20 6f 66 5d 5d 0a 20 20 20 emethod of]].
3190: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 }.. method r
31a0: 65 70 6f 72 74 6c 6f 6f 70 20 7b 7b 6b 69 6c 6c eportloop {{kill
31b0: 20 31 7d 7d 20 7b 0a 09 23 20 57 65 20 70 72 69 1}} {..# We pri
31c0: 6e 74 20 74 68 65 20 69 74 65 6d 73 20 77 68 69 nt the items whi
31d0: 63 68 20 61 72 65 20 70 72 6f 64 75 63 69 6e 67 ch are producing
31e0: 20 74 68 65 20 6c 6f 6f 70 2c 20 61 6e 64 20 68 the loop, and h
31f0: 6f 77 2e 0a 0a 09 73 65 74 20 68 64 72 20 22 53 ow....set hdr "S
3200: 65 6c 66 2d 72 65 66 65 72 65 6e 74 69 61 6c 20 elf-referential
3210: 63 68 61 6e 67 65 73 65 74 20 5b 24 73 65 6c 66 changeset [$self
3220: 20 73 74 72 5d 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f str] __________
3230: 5f 5f 5f 5f 5f 5f 5f 5f 22 0a 09 73 65 74 20 66 ________"..set f
3240: 74 72 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20 tr [regsub -all
3250: 7b 5b 5e 20 09 5d 7d 20 24 68 64 72 20 7b 5f 7d {[^ .]} $hdr {_}
3260: 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 30 20 ]...log write 0
3270: 63 73 65 74 73 20 24 68 64 72 0a 09 66 6f 72 65 csets $hdr..fore
3280: 61 63 68 20 7b 69 74 65 6d 20 6e 65 78 74 69 74 ach {item nextit
3290: 65 6d 7d 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 em} [$mytypeobj
32a0: 6c 6f 6f 70 73 20 24 6d 79 69 74 65 6d 73 5d 20 loops $myitems]
32b0: 7b 0a 09 20 20 20 20 23 20 43 72 65 61 74 65 20 {.. # Create
32c0: 74 61 67 67 65 64 20 69 74 65 6d 73 20 66 72 6f tagged items fro
32d0: 6d 20 74 68 65 20 69 64 20 61 6e 64 20 6f 75 72 m the id and our
32e0: 20 74 79 70 65 2e 0a 09 20 20 20 20 73 65 74 20 type... set
32f0: 69 74 65 6d 20 20 20 20 20 5b 6c 69 73 74 20 24 item [list $
3300: 6d 79 74 79 70 65 20 20 24 69 74 65 6d 5d 0a 09 mytype $item]..
3310: 20 20 20 20 73 65 74 20 6e 65 78 74 69 74 65 6d set nextitem
3320: 20 5b 6c 69 73 74 20 24 6d 79 74 79 70 65 20 24 [list $mytype $
3330: 6e 65 78 74 69 74 65 6d 5d 0a 09 20 20 20 20 23 nextitem].. #
3340: 20 50 72 69 6e 74 61 62 6c 65 20 6c 61 62 65 6c Printable label
3350: 73 2e 0a 09 20 20 20 20 73 65 74 20 69 20 20 22 s... set i "
3360: 3c 5b 24 74 79 70 65 20 69 74 65 6d 73 74 72 20 <[$type itemstr
3370: 24 69 74 65 6d 5d 3e 22 0a 09 20 20 20 20 73 65 $item]>".. se
3380: 74 20 6e 20 20 22 3c 5b 24 74 79 70 65 20 69 74 t n "<[$type it
3390: 65 6d 73 74 72 20 24 6e 65 78 74 69 74 65 6d 5d emstr $nextitem]
33a0: 3e 22 0a 09 20 20 20 20 73 65 74 20 6e 63 73 20 >".. set ncs
33b0: 24 6d 79 69 74 65 6d 6d 61 70 28 24 6e 65 78 74 $myitemmap($next
33c0: 69 74 65 6d 29 0a 09 20 20 20 20 23 20 50 72 69 item).. # Pri
33d0: 6e 74 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 nt.. log writ
33e0: 65 20 30 20 63 73 65 74 73 20 7b 2a 20 24 69 20 e 0 csets {* $i
33f0: 2d 2d 3e 20 24 6e 20 2d 2d 3e 20 63 73 20 5b 24 --> $n --> cs [$
3400: 6e 63 73 20 73 74 72 5d 7d 0a 09 7d 0a 09 6c 6f ncs str]}..}..lo
3410: 67 20 77 72 69 74 65 20 30 20 63 73 65 74 73 20 g write 0 csets
3420: 24 66 74 72 0a 0a 09 69 66 20 7b 21 24 6b 69 6c $ftr...if {!$kil
3430: 6c 7d 20 72 65 74 75 72 6e 0a 09 74 72 6f 75 62 l} return..troub
3440: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 5b 24 73 le internal "[$s
3450: 65 6c 66 20 73 74 72 5d 20 64 65 70 65 6e 64 73 elf str] depends
3460: 20 6f 6e 20 69 74 73 65 6c 66 22 0a 09 72 65 74 on itself"..ret
3470: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
3480: 65 74 68 6f 64 20 70 75 73 68 74 6f 20 7b 72 65 ethod pushto {re
3490: 70 6f 73 69 74 6f 72 79 20 64 61 74 65 20 72 73 pository date rs
34a0: 74 61 74 65 7d 20 7b 0a 09 23 20 47 65 6e 65 72 tate} {..# Gener
34b0: 61 74 65 20 61 6e 64 20 69 6d 70 6f 72 74 20 74 ate and import t
34c0: 68 65 20 6d 61 6e 69 66 65 73 74 20 66 6f 72 20 he manifest for
34d0: 74 68 69 73 20 63 68 61 6e 67 65 73 65 74 2e 0a this changeset..
34e0: 09 23 0a 09 23 20 44 61 74 61 20 6e 65 65 64 65 .#..# Data neede
34f0: 64 3a 0a 09 23 20 2d 20 43 6f 6d 6d 69 74 20 6d d:..# - Commit m
3500: 65 73 73 61 67 65 20 20 20 20 20 20 20 20 20 20 essage
3510: 20 20 20 20 20 28 2d 2d 20 6d 79 73 72 63 69 64 (-- mysrcid
3520: 20 2d 3e 20 72 65 70 6f 73 69 74 6f 72 79 20 6d -> repository m
3530: 65 74 61 29 0a 09 23 20 2d 20 55 73 65 72 20 64 eta)..# - User d
3540: 6f 69 6e 67 20 74 68 65 20 63 6f 6d 6d 69 74 20 oing the commit
3550: 20 20 20 20 20 20 20 28 73 2e 61 2e 29 0a 09 23 (s.a.)..#
3560: 0a 09 23 20 2d 20 54 69 6d 65 73 74 61 6d 70 20 ..# - Timestamp
3570: 6f 66 20 77 68 65 6e 20 63 6f 6d 6d 69 74 74 65 of when committe
3580: 64 20 20 28 63 6f 6d 6d 61 6e 64 20 61 72 67 75 d (command argu
3590: 6d 65 6e 74 29 0a 09 23 0a 09 23 20 2d 20 54 68 ment)..#..# - Th
35a0: 65 20 70 61 72 65 6e 74 20 63 68 61 6e 67 65 73 e parent changes
35b0: 65 74 2c 20 69 66 20 61 6e 79 2e 20 49 66 20 74 et, if any. If t
35c0: 68 65 72 65 20 69 73 20 6e 6f 20 70 61 72 65 6e here is no paren
35d0: 74 20 66 6f 73 73 69 6c 0a 09 23 20 20 20 77 69 t fossil..# wi
35e0: 6c 6c 20 75 73 65 20 74 68 65 20 65 6d 70 74 79 ll use the empty
35f0: 20 62 61 73 65 20 72 65 76 69 73 69 6f 6e 20 61 base revision a
3600: 73 20 70 61 72 65 6e 74 2e 0a 09 23 0a 09 23 20 s parent...#..#
3610: 2d 20 4c 69 73 74 20 6f 66 20 74 68 65 20 66 69 - List of the fi
3620: 6c 65 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 le revisions in
3630: 74 68 65 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a the changeset...
3640: 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 .struct::list as
3650: 73 69 67 6e 20 5b 24 6d 79 70 72 6f 6a 65 63 74 sign [$myproject
3660: 20 67 65 74 6d 65 74 61 20 24 6d 79 73 72 63 69 getmeta $mysrci
3670: 64 5d 20 5f 5f 20 5f 5f 20 75 73 65 72 20 6d 65 d] __ __ user me
3680: 73 73 61 67 65 0a 0a 09 23 20 57 65 20 64 65 72 ssage...# We der
3690: 69 76 65 20 74 68 65 20 6c 6f 64 20 69 6e 66 6f ive the lod info
36a0: 72 6d 61 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 rmation directly
36b0: 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69 from the revisi
36c0: 6f 6e 73 20 6f 66 0a 09 23 20 74 68 65 20 63 68 ons of..# the ch
36d0: 61 6e 67 65 73 65 74 2c 20 61 73 20 74 68 65 20 angeset, as the
36e0: 62 72 61 6e 63 68 20 70 61 72 74 20 6f 66 20 74 branch part of t
36f0: 68 65 20 6d 65 74 61 20 64 61 74 61 20 28 73 2e he meta data (s.
3700: 61 2e 29 20 69 73 0a 09 23 20 6f 75 74 64 61 74 a.) is..# outdat
3710: 65 64 20 73 69 6e 63 65 20 70 61 73 73 20 46 69 ed since pass Fi
3720: 6c 74 65 72 53 79 6d 62 6f 6c 73 2e 0a 0a 09 73 lterSymbols....s
3730: 65 74 20 6c 6f 64 6e 61 6d 65 20 5b 24 73 65 6c et lodname [$sel
3740: 66 20 6c 6f 64 5d 0a 0a 09 6c 6f 67 20 77 72 69 f lod]...log wri
3750: 74 65 20 32 20 63 73 65 74 73 20 7b 49 6d 70 6f te 2 csets {Impo
3760: 72 74 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 5b rting revision [
3770: 24 73 65 6c 66 20 73 74 72 5d 20 6f 6e 20 24 6c $self str] on $l
3780: 6f 64 6e 61 6d 65 7d 0a 0a 09 23 20 50 65 72 66 odname}...# Perf
3790: 6f 72 6d 20 74 68 65 20 69 6d 70 6f 72 74 2e 20 orm the import.
37a0: 41 73 20 70 61 72 74 20 6f 66 20 74 68 61 74 20 As part of that
37b0: 77 65 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 we determine the
37c0: 20 70 61 72 65 6e 74 0a 09 23 20 77 65 20 6e 65 parent..# we ne
37d0: 65 64 2c 20 61 6e 64 20 63 6f 6e 76 65 72 74 20 ed, and convert
37e0: 74 68 65 20 6c 69 73 74 20 6f 66 20 69 74 65 6d the list of item
37f0: 73 20 69 6e 20 74 68 65 20 63 68 61 6e 67 65 73 s in the changes
3800: 65 74 20 69 6e 74 6f 0a 09 23 20 75 75 69 64 73 et into..# uuids
3810: 20 61 6e 64 20 70 72 69 6e 74 61 62 6c 65 20 64 and printable d
3820: 61 74 61 2e 0a 0a 09 73 74 72 75 63 74 3a 3a 6c ata....struct::l
3830: 69 73 74 20 61 73 73 69 67 6e 20 5b 47 65 74 69 ist assign [Geti
3840: 73 64 65 66 61 75 6c 74 20 24 6d 79 69 74 65 6d sdefault $myitem
3850: 73 5d 20 69 73 64 65 66 61 75 6c 74 20 6c 61 73 s] isdefault las
3860: 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b 0a tdefaultontrunk.
3870: 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 ..log write 8 cs
3880: 65 74 73 20 7b 4c 4f 44 20 20 20 20 27 24 6c 6f ets {LOD '$lo
3890: 64 6e 61 6d 65 27 7d 0a 09 6c 6f 67 20 77 72 69 dname'}..log wri
38a0: 74 65 20 38 20 63 73 65 74 73 20 7b 20 64 65 66 te 8 csets { def
38b0: 3f 20 20 24 69 73 64 65 66 61 75 6c 74 7d 0a 09 ? $isdefault}..
38c0: 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 74 log write 8 cset
38d0: 73 20 7b 20 6c 61 73 74 3f 20 24 6c 61 73 74 64 s { last? $lastd
38e0: 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b 7d 0a 0a efaultontrunk}..
38f0: 09 73 65 74 20 6c 77 73 20 20 5b 47 65 74 77 6f .set lws [Getwo
3900: 72 6b 73 70 61 63 65 20 20 20 20 24 72 73 74 61 rkspace $rsta
3910: 74 65 20 24 6c 6f 64 6e 61 6d 65 20 24 6d 79 70 te $lodname $myp
3920: 72 6f 6a 65 63 74 20 24 69 73 64 65 66 61 75 6c roject $isdefaul
3930: 74 5d 0a 09 24 6c 77 73 20 61 64 64 20 5b 47 65 t]..$lws add [Ge
3940: 74 72 65 76 69 73 69 6f 6e 69 6e 66 6f 20 24 6d trevisioninfo $m
3950: 79 69 74 65 6d 73 5d 0a 0a 09 73 65 74 20 75 75 yitems]...set uu
3960: 69 64 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 id [$repository
3970: 69 6d 70 6f 72 74 72 65 76 69 73 69 6f 6e 20 5b importrevision [
3980: 24 73 65 6c 66 20 73 74 72 5d 20 5c 0a 09 09 20 $self str] \...
3990: 20 20 20 20 20 24 75 73 65 72 20 24 6d 65 73 73 $user $mess
39a0: 61 67 65 20 24 64 61 74 65 20 5c 0a 09 09 20 20 age $date \...
39b0: 20 20 20 20 5b 24 6c 77 73 20 67 65 74 69 64 5d [$lws getid]
39c0: 20 5b 24 6c 77 73 20 67 65 74 5d 5d 0a 0a 09 23 [$lws get]]...#
39d0: 20 52 65 6d 65 6d 62 65 72 20 74 68 65 20 69 6d Remember the im
39e0: 70 6f 72 74 65 64 20 63 68 61 6e 67 65 73 65 74 ported changeset
39f0: 20 69 6e 20 74 68 65 20 73 74 61 74 65 2c 20 75 in the state, u
3a00: 6e 64 65 72 20 6f 75 72 0a 09 23 20 4c 4f 44 2e nder our..# LOD.
3a10: 20 41 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 And if it is th
3a20: 65 20 6c 61 73 74 20 74 72 75 6e 6b 20 63 68 61 e last trunk cha
3a30: 6e 67 65 73 65 74 20 6f 6e 20 74 68 65 20 76 65 ngeset on the ve
3a40: 6e 64 6f 72 0a 09 23 20 62 72 61 6e 63 68 20 74 ndor..# branch t
3a50: 68 65 6e 20 74 68 65 20 72 65 76 69 73 69 6f 6e hen the revision
3a60: 20 69 73 20 61 6c 73 6f 20 74 68 65 20 61 63 74 is also the act
3a70: 75 61 6c 20 72 6f 6f 74 20 6f 66 20 74 68 65 0a ual root of the.
3a80: 09 23 20 3a 74 72 75 6e 6b 3a 2c 20 73 6f 20 77 .# :trunk:, so w
3a90: 65 20 72 65 6d 65 6d 62 65 72 20 69 74 20 61 73 e remember it as
3aa0: 20 73 75 63 68 20 69 6e 20 74 68 65 20 73 74 61 such in the sta
3ab0: 74 65 2e 20 48 6f 77 65 76 65 72 20 69 66 0a 09 te. However if..
3ac0: 23 20 74 68 65 20 74 72 75 6e 6b 20 61 6c 72 65 # the trunk alre
3ad0: 61 64 79 20 65 78 69 73 74 73 20 74 68 65 6e 20 ady exists then
3ae0: 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 63 61 the changeset ca
3af0: 6e 6e 6f 74 20 62 65 20 6f 6e 20 69 74 0a 09 23 nnot be on it..#
3b00: 20 61 6e 79 20 6d 6f 72 65 2e 20 54 68 69 73 20 any more. This
3b10: 69 6e 64 69 63 61 74 65 73 20 77 65 69 72 64 6e indicates weirdn
3b20: 65 73 73 20 69 6e 20 74 68 65 20 73 65 74 75 70 ess in the setup
3b30: 20 6f 66 20 74 68 65 0a 09 23 20 76 65 6e 64 6f of the..# vendo
3b40: 72 20 62 72 61 6e 63 68 2c 20 62 75 74 20 6f 6e r branch, but on
3b50: 65 20 77 65 20 63 61 6e 20 77 6f 72 6b 20 61 72 e we can work ar
3b60: 6f 75 6e 64 2e 0a 0a 09 24 6c 77 73 20 64 65 66 ound....$lws def
3b70: 69 64 20 24 75 75 69 64 0a 09 69 66 20 7b 24 6c id $uuid..if {$l
3b80: 61 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e astdefaultontrun
3b90: 6b 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 k} {.. if {[$
3ba0: 72 73 74 61 74 65 20 68 61 73 20 3a 74 72 75 6e rstate has :trun
3bb0: 6b 3a 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 k:]} {...log wri
3bc0: 74 65 20 32 20 63 73 65 74 73 20 7b 4d 75 6c 74 te 2 csets {Mult
3bd0: 69 70 6c 65 20 63 68 61 6e 67 65 73 65 74 73 20 iple changesets
3be0: 64 65 63 6c 61 72 65 64 20 74 6f 20 62 65 20 74 declared to be t
3bf0: 68 65 20 6c 61 73 74 20 74 72 75 6e 6b 20 63 68 he last trunk ch
3c00: 61 6e 67 65 73 65 74 20 6f 6e 20 74 68 65 20 76 angeset on the v
3c10: 65 6e 64 6f 72 2d 62 72 61 6e 63 68 7d 0a 09 20 endor-branch}..
3c20: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 24 72 } else {...$r
3c30: 73 74 61 74 65 20 6e 65 77 20 3a 74 72 75 6e 6b state new :trunk
3c40: 3a 20 5b 24 6c 77 73 20 6e 61 6d 65 5d 0a 09 20 : [$lws name]..
3c50: 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 52 65 6d 65 }..}...# Reme
3c60: 6d 62 65 72 20 74 68 65 20 77 68 6f 6c 65 20 63 mber the whole c
3c70: 68 61 6e 67 65 73 65 74 20 2f 20 75 75 69 64 20 hangeset / uuid
3c80: 6d 61 70 70 69 6e 67 2c 20 66 6f 72 20 74 68 65 mapping, for the
3c90: 20 74 61 67 73 2e 0a 0a 09 73 74 61 74 65 20 72 tags....state r
3ca0: 75 6e 20 7b 0a 09 20 20 20 20 49 4e 53 45 52 54 un {.. INSERT
3cb0: 20 49 4e 54 4f 20 63 73 75 75 69 64 20 28 63 69 INTO csuuid (ci
3cc0: 64 2c 20 20 20 75 75 69 64 29 0a 09 20 20 20 20 d, uuid)..
3cd0: 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 VALUES
3ce0: 20 20 20 28 24 6d 79 69 64 2c 20 24 75 75 69 64 ($myid, $uuid
3cf0: 29 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 )..}..return.
3d00: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 47 65 74 }.. proc Get
3d10: 72 65 76 69 73 69 6f 6e 69 6e 66 6f 20 7b 72 65 revisioninfo {re
3d20: 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 73 65 74 20 visions} {..set
3d30: 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 theset ('[join $
3d40: 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d revisions {','}]
3d50: 27 29 0a 09 73 65 74 20 72 65 76 69 73 69 6f 6e ')..set revision
3d60: 73 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 s {}..foreach {f
3d70: 72 69 64 20 70 61 74 68 20 66 6e 61 6d 65 20 72 rid path fname r
3d80: 65 76 6e 72 20 72 6f 70 7d 20 5b 73 74 61 74 65 evnr rop} [state
3d90: 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 run [subst -noc
3da0: 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 ommands -nobacks
3db0: 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 lashes {.. SE
3dc0: 4c 45 43 54 20 55 2e 75 75 69 64 2c 20 46 2e 76 LECT U.uuid, F.v
3dd0: 69 73 69 62 6c 65 2c 20 46 2e 6e 61 6d 65 2c 20 isible, F.name,
3de0: 52 2e 72 65 76 2c 20 52 2e 6f 70 0a 09 20 20 20 R.rev, R.op..
3df0: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
3e00: 20 52 2c 20 72 65 76 75 75 69 64 20 55 2c 20 66 R, revuuid U, f
3e10: 69 6c 65 20 46 0a 09 20 20 20 20 57 48 45 52 45 ile F.. WHERE
3e20: 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 73 R.rid IN $thes
3e30: 65 74 20 20 2d 2d 20 41 6c 6c 20 73 70 65 63 69 et -- All speci
3e40: 66 69 65 64 20 72 65 76 69 73 69 6f 6e 73 0a 09 fied revisions..
3e50: 20 20 20 20 41 4e 44 20 20 20 20 55 2e 72 69 64 AND U.rid
3e60: 20 3d 20 52 2e 72 69 64 20 20 20 20 20 2d 2d 20 = R.rid --
3e70: 67 65 74 20 66 6f 73 73 69 6c 20 75 75 69 64 20 get fossil uuid
3e80: 6f 66 20 72 65 76 69 73 69 6f 6e 0a 09 20 20 20 of revision..
3e90: 20 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d 20 AND F.fid =
3ea0: 52 2e 66 69 64 20 20 20 20 20 2d 2d 20 67 65 74 R.fid -- get
3eb0: 20 66 69 6c 65 20 6f 66 20 72 65 76 69 73 69 6f file of revisio
3ec0: 6e 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 n..}]] {.. la
3ed0: 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e 73 20 ppend revisions
3ee0: 24 66 72 69 64 20 24 70 61 74 68 20 24 66 6e 61 $frid $path $fna
3ef0: 6d 65 2f 24 72 65 76 6e 72 20 24 72 6f 70 0a 09 me/$revnr $rop..
3f00: 7d 0a 09 72 65 74 75 72 6e 20 24 72 65 76 69 73 }..return $revis
3f10: 69 6f 6e 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ions. }..
3f20: 70 72 6f 63 20 47 65 74 77 6f 72 6b 73 70 61 63 proc Getworkspac
3f30: 65 20 7b 72 73 74 61 74 65 20 6c 6f 64 6e 61 6d e {rstate lodnam
3f40: 65 20 70 72 6f 6a 65 63 74 20 69 73 64 65 66 61 e project isdefa
3f50: 75 6c 74 7d 20 7b 0a 0a 09 23 20 54 68 65 20 73 ult} {...# The s
3f60: 74 61 74 65 20 6f 62 6a 65 63 74 20 68 6f 6c 64 tate object hold
3f70: 73 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65 20 s the workspace
3f80: 73 74 61 74 65 20 6f 66 20 65 61 63 68 20 6b 6e state of each kn
3f90: 6f 77 6e 0a 09 23 20 6c 69 6e 65 2d 6f 66 2d 64 own..# line-of-d
3fa0: 65 76 65 6c 6f 70 6d 65 6e 74 20 28 4c 4f 44 29 evelopment (LOD)
3fb0: 2c 20 75 70 20 74 6f 20 74 68 65 20 6c 61 73 74 , up to the last
3fc0: 20 63 6f 6d 6d 69 74 74 65 64 0a 09 23 20 63 68 committed..# ch
3fd0: 61 6e 67 65 73 65 74 20 62 65 6c 6f 6e 67 69 6e angeset belongin
3fe0: 67 20 74 6f 20 74 68 61 74 20 4c 4f 44 2e 0a 0a g to that LOD...
3ff0: 09 23 20 28 2a 29 20 53 74 61 6e 64 61 72 64 20 .# (*) Standard
4000: 68 61 6e 64 6c 69 6e 67 20 69 66 20 69 6e 2d 4c handling if in-L
4010: 4f 44 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49 OD changesets. I
4020: 66 20 74 68 65 20 4c 4f 44 20 6f 66 0a 09 23 20 f the LOD of..#
4030: 20 20 20 20 74 68 65 20 63 75 72 72 65 6e 74 20 the current
4040: 63 68 61 6e 67 65 73 65 74 20 65 78 69 73 74 73 changeset exists
4050: 20 69 6e 20 74 68 65 20 73 74 61 74 65 20 28 3d in the state (=
4060: 20 68 61 73 20 62 65 65 6e 0a 09 23 20 20 20 20 has been..#
4070: 20 63 6f 6d 6d 69 74 74 65 64 20 74 6f 29 20 74 committed to) t
4080: 68 65 6e 20 74 68 69 73 20 69 74 20 68 61 73 20 hen this it has
4090: 74 68 65 20 77 6f 72 6b 73 70 61 63 65 20 77 65 the workspace we
40a0: 20 61 72 65 0a 09 23 20 20 20 20 20 6c 6f 6f 6b are..# look
40b0: 69 6e 67 20 66 6f 72 2e 0a 0a 09 69 66 20 7b 5b ing for....if {[
40c0: 24 72 73 74 61 74 65 20 68 61 73 20 24 6c 6f 64 $rstate has $lod
40d0: 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 72 65 name]} {.. re
40e0: 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 67 65 turn [$rstate ge
40f0: 74 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a t $lodname]..}..
4100: 09 23 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73 .# If the LOD is
4110: 20 68 6f 77 65 76 65 72 20 6e 6f 74 20 79 65 74 however not yet
4120: 20 6b 6e 6f 77 6e 2c 20 74 68 65 6e 20 74 68 65 known, then the
4130: 20 63 75 72 72 65 6e 74 0a 09 23 20 63 68 61 6e current..# chan
4140: 67 65 73 65 74 20 63 61 6e 20 62 65 20 65 69 74 geset can be eit
4150: 68 65 72 20 6f 66 0a 09 23 20 28 61 29 20 72 6f her of..# (a) ro
4160: 6f 74 20 6f 66 20 61 20 76 65 6e 64 6f 72 20 62 ot of a vendor b
4170: 72 61 6e 63 68 2c 0a 09 23 20 28 62 29 20 72 6f ranch,..# (b) ro
4180: 6f 74 20 6f 66 20 74 68 65 20 74 72 75 6e 6b 20 ot of the trunk
4190: 4c 4f 44 2c 20 6f 72 0a 09 23 20 28 63 29 20 74 LOD, or..# (c) t
41a0: 68 65 20 66 69 72 73 74 20 63 68 61 6e 67 65 73 he first changes
41b0: 65 74 20 69 6e 20 61 20 6e 65 77 20 4c 4f 44 20 et in a new LOD
41c0: 77 68 69 63 68 20 77 61 73 20 73 70 61 77 6e 65 which was spawne
41d0: 64 20 66 72 6f 6d 0a 09 23 20 20 20 20 20 61 6e d from..# an
41e0: 20 65 78 69 73 74 69 6e 67 20 4c 4f 44 2e 0a 0a existing LOD...
41f0: 09 23 20 46 6f 72 20 62 6f 74 68 20 28 61 29 20 .# For both (a)
4200: 61 6e 64 20 28 62 29 20 77 65 20 68 61 76 65 20 and (b) we have
4210: 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 to create a new
4220: 77 6f 72 6b 73 70 61 63 65 20 66 6f 72 0a 09 23 workspace for..#
4230: 20 74 68 65 20 6c 6f 64 2c 20 61 6e 64 20 69 74 the lod, and it
4240: 20 64 6f 65 73 6e 27 74 20 69 6e 68 65 72 69 74 doesn't inherit
4250: 20 66 72 6f 6d 20 61 6e 79 74 68 69 6e 67 2e 0a from anything..
4260: 0a 09 23 20 4f 6e 65 20 65 78 63 65 70 74 69 6f ..# One exceptio
4270: 6e 20 66 6f 72 20 28 61 29 2e 20 49 66 20 77 65 n for (a). If we
4280: 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 already have a
4290: 3a 76 65 6e 64 6f 72 3a 20 62 72 61 6e 63 68 0a :vendor: branch.
42a0: 09 23 20 74 68 65 6e 20 6d 75 6c 74 69 70 6c 65 .# then multiple
42b0: 20 73 79 6d 62 6f 6c 73 20 77 65 72 65 20 75 73 symbols were us
42c0: 65 64 20 66 6f 72 20 74 68 65 20 76 65 6e 64 6f ed for the vendo
42d0: 72 20 62 72 61 6e 63 68 20 62 79 0a 09 23 20 64 r branch by..# d
42e0: 69 66 66 65 72 65 6e 74 20 66 69 6c 65 73 2e 20 ifferent files.
42f0: 49 6e 20 74 68 61 74 20 63 61 73 65 20 74 68 65 In that case the
4300: 20 27 6e 65 77 27 20 62 72 61 6e 63 68 20 69 73 'new' branch is
4310: 20 6d 61 64 65 20 61 6e 0a 09 23 20 61 6c 69 61 made an..# alia
4320: 73 20 6f 66 20 74 68 65 20 3a 76 65 6e 64 6f 72 s of the :vendor
4330: 3a 2c 20 65 66 66 65 63 74 69 76 65 6c 79 20 6d :, effectively m
4340: 65 72 67 69 6e 67 20 74 68 65 20 73 79 6d 62 6f erging the symbo
4350: 6c 73 0a 09 23 20 74 6f 67 65 74 68 65 72 2e 0a ls..# together..
4360: 0a 09 23 20 4e 6f 74 65 20 74 68 61 74 20 63 61 ..# Note that ca
4370: 73 65 20 28 62 29 20 6d 61 79 20 6e 65 76 65 72 se (b) may never
4380: 20 6f 63 63 75 72 2e 20 53 65 65 20 74 68 65 20 occur. See the
4390: 76 61 72 69 61 62 6c 65 0a 09 23 20 27 6c 61 73 variable..# 'las
43a0: 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b 27 tdefaultontrunk'
43b0: 20 69 6e 20 74 68 65 20 63 61 6c 6c 65 72 20 28 in the caller (
43c0: 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 29 2e 20 method pushto).
43d0: 54 68 69 73 0a 09 23 20 66 6c 61 67 20 63 61 6e This..# flag can
43e0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 the generation
43f0: 6f 66 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65 of the workspace
4400: 20 66 6f 72 20 74 68 65 20 3a 74 72 75 6e 6b 3a for the :trunk:
4410: 20 4c 4f 44 0a 09 23 20 61 73 20 77 65 6c 6c 2c LOD..# as well,
4420: 20 6d 61 6b 69 6e 67 20 69 74 20 69 6e 68 65 72 making it inher
4430: 69 74 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 it the state of
4440: 74 68 65 20 6c 61 73 74 0a 09 23 20 74 72 75 6e the last..# trun
4450: 6b 2d 63 68 61 6e 67 65 73 65 74 20 6f 6e 20 74 k-changeset on t
4460: 68 65 20 76 65 6e 64 6f 72 2d 62 72 61 6e 63 68 he vendor-branch
4470: 2e 0a 0a 09 69 66 20 7b 24 69 73 64 65 66 61 75 ....if {$isdefau
4480: 6c 74 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 lt} {.. if {!
4490: 5b 24 72 73 74 61 74 65 20 68 61 73 20 22 3a 76 [$rstate has ":v
44a0: 65 6e 64 6f 72 3a 22 5d 7d 20 7b 0a 09 09 23 20 endor:"]} {...#
44b0: 43 72 65 61 74 65 20 74 68 65 20 76 65 6e 64 6f Create the vendo
44c0: 72 20 62 72 61 6e 63 68 20 69 66 20 6e 6f 74 20 r branch if not
44d0: 70 72 65 73 65 6e 74 20 61 6c 72 65 61 64 79 2e present already.
44e0: 0a 09 09 24 72 73 74 61 74 65 20 6e 65 77 20 3a ...$rstate new :
44f0: 76 65 6e 64 6f 72 3a 0a 09 20 20 20 20 7d 0a 09 vendor:.. }..
4500: 20 20 20 20 23 20 4d 65 72 67 65 20 74 68 65 20 # Merge the
4510: 6e 65 77 20 73 79 6d 62 6f 6c 20 74 6f 20 74 68 new symbol to th
4520: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 0a e vendor branch.
4530: 09 20 20 20 20 24 72 73 74 61 74 65 20 64 75 70 . $rstate dup
4540: 20 24 6c 6f 64 6e 61 6d 65 20 3c 2d 2d 20 3a 76 $lodname <-- :v
4550: 65 6e 64 6f 72 3a 0a 09 20 20 20 20 72 65 74 75 endor:.. retu
4560: 72 6e 20 5b 24 72 73 74 61 74 65 20 67 65 74 20 rn [$rstate get
4570: 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 69 $lodname]..}...i
4580: 66 20 7b 24 6c 6f 64 6e 61 6d 65 20 65 71 20 22 f {$lodname eq "
4590: 3a 74 72 75 6e 6b 3a 22 7d 20 7b 0a 09 20 20 20 :trunk:"} {..
45a0: 20 72 65 74 75 72 6e 20 5b 24 72 73 74 61 74 65 return [$rstate
45b0: 20 6e 65 77 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 new $lodname]..
45c0: 7d 0a 0a 09 23 20 43 61 73 65 20 28 63 29 2e 20 }...# Case (c).
45d0: 57 65 20 66 69 6e 64 20 74 68 65 20 70 61 72 65 We find the pare
45e0: 6e 74 20 4c 4f 44 20 6f 66 20 6f 75 72 20 4c 4f nt LOD of our LO
45f0: 44 20 61 6e 64 20 6c 65 74 20 74 68 65 20 6e 65 D and let the ne
4600: 77 0a 09 23 20 77 6f 72 6b 73 70 61 63 65 20 69 w..# workspace i
4610: 6e 68 65 72 69 74 20 66 72 6f 6d 20 74 68 65 20 nherit from the
4620: 70 61 72 65 6e 74 27 73 20 77 6f 72 6b 73 70 61 parent's workspa
4630: 63 65 2e 0a 0a 09 73 65 74 20 70 6c 6f 64 6e 61 ce....set plodna
4640: 6d 65 20 5b 5b 5b 24 70 72 6f 6a 65 63 74 20 67 me [[[$project g
4650: 65 74 73 79 6d 62 6f 6c 20 24 6c 6f 64 6e 61 6d etsymbol $lodnam
4660: 65 5d 20 70 61 72 65 6e 74 5d 20 6e 61 6d 65 5d e] parent] name]
4670: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 ...log write 8 c
4680: 73 65 74 73 20 7b 70 4c 4f 44 20 20 20 27 24 70 sets {pLOD '$p
4690: 6c 6f 64 6e 61 6d 65 27 7d 0a 0a 09 69 66 20 7b lodname'}...if {
46a0: 5b 24 72 73 74 61 74 65 20 68 61 73 20 24 70 6c [$rstate has $pl
46b0: 6f 64 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 odname]} {..
46c0: 72 65 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 return [$rstate
46d0: 6e 65 77 20 24 6c 6f 64 6e 61 6d 65 20 24 70 6c new $lodname $pl
46e0: 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 66 6f 72 odname]..}...for
46f0: 65 61 63 68 20 6b 20 5b 6c 73 6f 72 74 20 5b 24 each k [lsort [$
4700: 72 73 74 61 74 65 20 6e 61 6d 65 73 5d 5d 20 7b rstate names]] {
4710: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
4720: 38 20 63 73 65 74 73 20 7b 20 20 20 20 24 6b 20 8 csets { $k
4730: 3d 20 5b 5b 24 72 73 74 61 74 65 20 67 65 74 20 = [[$rstate get
4740: 24 6b 5d 20 67 65 74 69 64 5d 7d 0a 09 7d 0a 0a $k] getid]}..}..
4750: 09 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 .trouble interna
4760: 6c 20 7b 55 6e 61 62 6c 65 20 74 6f 20 64 65 74 l {Unable to det
4770: 65 72 6d 69 6e 65 20 63 68 61 6e 67 65 73 65 74 ermine changeset
4780: 20 70 61 72 65 6e 74 7d 0a 09 72 65 74 75 72 6e parent}..return
4790: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 . }.. proc
47a0: 20 47 65 74 69 73 64 65 66 61 75 6c 74 20 7b 72 Getisdefault {r
47b0: 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 73 65 74 evisions} {..set
47c0: 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 theset ('[join
47d0: 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d $revisions {','}
47e0: 5d 27 29 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 ]')...struct::li
47f0: 73 74 20 61 73 73 69 67 6e 20 5b 73 74 61 74 65 st assign [state
4800: 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 run [subst -noc
4810: 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 ommands -nobacks
4820: 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 lashes {.. SE
4830: 4c 45 43 54 20 52 2e 69 73 64 65 66 61 75 6c 74 LECT R.isdefault
4840: 2c 20 52 2e 64 62 63 68 69 6c 64 0a 09 20 20 20 , R.dbchild..
4850: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
4860: 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 R.. WHERE R
4870: 2e 72 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 .rid IN $theset
4880: 20 2d 2d 20 41 6c 6c 20 73 70 65 63 69 66 69 65 -- All specifie
4890: 64 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 d revisions..
48a0: 20 4c 49 4d 49 54 20 31 0a 09 7d 5d 5d 20 64 65 LIMIT 1..}]] de
48b0: 66 20 6c 61 73 74 0a 0a 09 23 20 54 4f 44 4f 2f f last...# TODO/
48c0: 43 48 45 43 4b 3a 20 6c 6f 6f 6b 20 66 6f 72 20 CHECK: look for
48d0: 63 68 61 6e 67 65 73 65 74 73 20 77 68 65 72 65 changesets where
48e0: 20 69 73 64 65 66 61 75 6c 74 2f 64 62 63 68 69 isdefault/dbchi
48f0: 6c 64 20 69 73 0a 09 23 20 61 6d 62 69 67 6f 75 ld is..# ambigou
4900: 73 2e 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 s....return [lis
4910: 74 20 24 64 65 66 20 5b 65 78 70 72 20 7b 24 6c t $def [expr {$l
4920: 61 73 74 20 6e 65 20 22 22 7d 5d 5d 0a 20 20 20 ast ne ""}]].
4930: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 }.. typemeth
4940: 6f 64 20 73 70 6c 69 74 20 7b 63 73 65 74 20 61 od split {cset a
4950: 72 67 73 7d 20 7b 0a 09 23 20 41 73 20 70 61 72 rgs} {..# As par
4960: 74 20 6f 66 20 74 68 65 20 63 72 65 61 74 69 6f t of the creatio
4970: 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 63 68 61 n of the new cha
4980: 6e 67 65 73 65 74 73 20 73 70 65 63 69 66 69 65 ngesets specifie
4990: 64 20 69 6e 0a 09 23 20 41 52 47 53 20 61 73 20 d in..# ARGS as
49a0: 73 65 74 73 20 6f 66 20 69 74 65 6d 73 2c 20 61 sets of items, a
49b0: 6c 6c 20 73 75 62 73 65 74 73 20 6f 66 20 43 53 ll subsets of CS
49c0: 45 54 27 73 20 69 74 65 6d 20 73 65 74 2c 20 43 ET's item set, C
49d0: 53 45 54 0a 09 23 20 77 69 6c 6c 20 62 65 20 64 SET..# will be d
49e0: 72 6f 70 70 65 64 20 66 72 6f 6d 20 61 6c 6c 20 ropped from all
49f0: 64 61 74 61 62 61 73 65 73 2c 20 69 6e 20 61 6e databases, in an
4a00: 64 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2c d out of memory,
4a10: 0a 09 23 20 61 6e 64 20 74 68 65 6e 20 64 65 73 ..# and then des
4a20: 74 72 6f 79 65 64 2e 0a 09 23 0a 09 23 20 4e 6f troyed...#..# No
4a30: 74 65 3a 20 54 68 65 20 69 74 65 6d 20 6c 69 73 te: The item lis
4a40: 74 73 20 66 6f 75 6e 64 20 69 6e 20 61 72 67 73 ts found in args
4a50: 20 61 72 65 20 74 61 67 67 65 64 20 69 74 65 6d are tagged item
4a60: 73 2e 20 54 68 65 79 0a 09 23 20 68 61 76 65 20 s. They..# have
4a70: 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 to have the same
4a80: 20 74 79 70 65 20 61 73 20 74 68 65 20 63 68 61 type as the cha
4a90: 6e 67 65 73 65 74 2c 20 62 65 69 6e 67 20 73 75 ngeset, being su
4aa0: 62 73 65 74 73 0a 09 23 20 6f 66 20 69 74 73 20 bsets..# of its
4ab0: 69 74 65 6d 73 2e 20 54 68 69 73 20 69 73 20 63 items. This is c
4ac0: 68 65 63 6b 65 64 20 69 6e 20 55 6e 74 61 67 31 hecked in Untag1
4ad0: 2e 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 ....log write 8
4ae0: 63 73 65 74 73 20 7b 4f 4c 44 3a 20 5b 6c 73 6f csets {OLD: [lso
4af0: 72 74 20 5b 24 63 73 65 74 20 69 74 65 6d 73 5d rt [$cset items]
4b00: 5d 7d 0a 09 56 61 6c 69 64 61 74 65 46 72 61 67 ]}..ValidateFrag
4b10: 6d 65 6e 74 73 20 24 63 73 65 74 20 24 61 72 67 ments $cset $arg
4b20: 73 0a 0a 09 23 20 41 6c 6c 20 63 68 65 63 6b 73 s...# All checks
4b30: 20 70 61 73 73 2c 20 61 63 74 75 61 6c 6c 79 20 pass, actually
4b40: 70 65 72 66 6f 72 6d 20 74 68 65 20 73 70 6c 69 perform the spli
4b50: 74 2e 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 t....struct::lis
4b60: 74 20 61 73 73 69 67 6e 20 5b 24 63 73 65 74 20 t assign [$cset
4b70: 64 61 74 61 5d 20 70 72 6f 6a 65 63 74 20 63 73 data] project cs
4b80: 74 79 70 65 20 63 73 73 72 63 0a 0a 09 73 65 74 type cssrc...set
4b90: 20 70 72 65 64 65 63 65 73 73 6f 72 73 20 5b 24 predecessors [$
4ba0: 63 73 65 74 20 64 72 6f 70 5d 0a 09 24 63 73 65 cset drop]..$cse
4bb0: 74 20 64 65 73 74 72 6f 79 0a 0a 09 73 65 74 20 t destroy...set
4bc0: 6e 65 77 63 73 65 74 73 20 7b 7d 0a 09 66 6f 72 newcsets {}..for
4bd0: 65 61 63 68 20 66 72 61 67 6d 65 6e 74 69 74 65 each fragmentite
4be0: 6d 73 20 24 61 72 67 73 20 7b 0a 09 20 20 20 20 ms $args {..
4bf0: 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 74 log write 8 cset
4c00: 73 20 7b 4d 41 4b 45 3a 20 5b 6c 73 6f 72 74 20 s {MAKE: [lsort
4c10: 24 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 5d 7d $fragmentitems]}
4c20: 0a 0a 09 20 20 20 20 73 65 74 20 66 72 61 67 6d ... set fragm
4c30: 65 6e 74 20 5b 24 74 79 70 65 20 25 41 55 54 4f ent [$type %AUTO
4c40: 25 20 24 70 72 6f 6a 65 63 74 20 24 63 73 74 79 % $project $csty
4c50: 70 65 20 24 63 73 73 72 63 20 5c 0a 09 09 09 20 pe $cssrc \....
4c60: 20 20 20 20 20 5b 55 6e 74 61 67 20 24 66 72 61 [Untag $fra
4c70: 67 6d 65 6e 74 69 74 65 6d 73 20 24 63 73 74 79 gmentitems $csty
4c80: 70 65 5d 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e pe]].. lappen
4c90: 64 20 6e 65 77 63 73 65 74 73 20 24 66 72 61 67 d newcsets $frag
4ca0: 6d 65 6e 74 0a 0a 09 20 20 20 20 24 66 72 61 67 ment... $frag
4cb0: 6d 65 6e 74 20 70 65 72 73 69 73 74 0a 09 20 20 ment persist..
4cc0: 20 20 24 66 72 61 67 6d 65 6e 74 20 64 65 74 65 $fragment dete
4cd0: 72 6d 69 6e 65 73 75 63 63 65 73 73 6f 72 73 0a rminesuccessors.
4ce0: 09 7d 0a 0a 09 23 20 54 68 65 20 70 72 65 64 65 .}...# The prede
4cf0: 63 65 73 73 6f 72 73 20 68 61 76 65 20 74 6f 20 cessors have to
4d00: 72 65 63 6f 6d 70 75 74 65 20 74 68 65 69 72 20 recompute their
4d10: 73 75 63 63 65 73 73 6f 72 73 2c 20 69 2e 65 2e successors, i.e.
4d20: 0a 09 23 20 72 65 6d 6f 76 65 20 74 68 65 20 64 ..# remove the d
4d30: 72 6f 70 70 65 64 20 63 68 61 6e 67 65 73 65 74 ropped changeset
4d40: 20 61 6e 64 20 70 75 74 20 6f 6e 65 20 6f 66 20 and put one of
4d50: 74 68 65 20 66 72 61 67 6d 65 6e 74 73 0a 09 23 the fragments..#
4d60: 20 69 6e 74 6f 20 69 74 73 20 70 6c 61 63 65 2e into its place.
4d70: 0a 09 66 6f 72 65 61 63 68 20 70 20 24 70 72 65 ..foreach p $pre
4d80: 64 65 63 65 73 73 6f 72 73 20 7b 0a 09 20 20 20 decessors {..
4d90: 20 24 70 20 64 65 74 65 72 6d 69 6e 65 73 75 63 $p determinesuc
4da0: 63 65 73 73 6f 72 73 0a 09 7d 0a 0a 09 72 65 74 cessors..}...ret
4db0: 75 72 6e 20 24 6e 65 77 63 73 65 74 73 0a 20 20 urn $newcsets.
4dc0: 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 }.. typemet
4dd0: 68 6f 64 20 69 74 65 6d 73 74 72 20 7b 69 74 65 hod itemstr {ite
4de0: 6d 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 m} {..struct::li
4df0: 73 74 20 61 73 73 69 67 6e 20 24 69 74 65 6d 20 st assign $item
4e00: 69 74 79 70 65 20 69 69 64 0a 09 72 65 74 75 72 itype iid..retur
4e10: 6e 20 5b 24 69 74 79 70 65 20 73 74 72 20 24 69 n [$itype str $i
4e20: 69 64 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 id]. }.. t
4e30: 79 70 65 6d 65 74 68 6f 64 20 73 74 72 6c 69 73 ypemethod strlis
4e40: 74 20 7b 63 68 61 6e 67 65 73 65 74 73 7d 20 7b t {changesets} {
4e50: 0a 09 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b ..return [join [
4e60: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 struct::list map
4e70: 20 24 63 68 61 6e 67 65 73 65 74 73 20 5b 6d 79 $changesets [my
4e80: 70 72 6f 63 20 49 44 5d 5d 5d 0a 20 20 20 20 7d proc ID]]]. }
4e90: 0a 0a 20 20 20 20 70 72 6f 63 20 49 44 20 7b 63 .. proc ID {c
4ea0: 73 65 74 7d 20 7b 20 24 63 73 65 74 20 73 74 72 set} { $cset str
4eb0: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 55 6e 74 }.. proc Unt
4ec0: 61 67 20 7b 74 61 67 67 65 64 69 74 65 6d 73 20 ag {taggeditems
4ed0: 63 73 74 79 70 65 7d 20 7b 0a 09 72 65 74 75 72 cstype} {..retur
4ee0: 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 n [struct::list
4ef0: 6d 61 70 20 24 74 61 67 67 65 64 69 74 65 6d 73 map $taggeditems
4f00: 20 5b 6d 79 70 72 6f 63 20 55 6e 74 61 67 31 20 [myproc Untag1
4f10: 24 63 73 74 79 70 65 5d 5d 0a 20 20 20 20 7d 0a $cstype]]. }.
4f20: 0a 20 20 20 20 70 72 6f 63 20 55 6e 74 61 67 31 . proc Untag1
4f30: 20 7b 63 73 74 79 70 65 20 74 68 65 69 74 65 6d {cstype theitem
4f40: 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 } {..struct::lis
4f50: 74 20 61 73 73 69 67 6e 20 24 74 68 65 69 74 65 t assign $theite
4f60: 6d 20 74 20 69 0a 09 69 6e 74 65 67 72 69 74 79 m t i..integrity
4f70: 20 61 73 73 65 72 74 20 7b 24 63 73 74 79 70 65 assert {$cstype
4f80: 20 65 71 20 24 74 7d 20 7b 49 74 65 6d 20 24 69 eq $t} {Item $i
4f90: 27 73 20 74 79 70 65 20 69 73 20 27 24 74 27 2c 's type is '$t',
4fa0: 20 65 78 70 65 63 74 65 64 20 27 24 63 73 74 79 expected '$csty
4fb0: 70 65 27 7d 0a 09 72 65 74 75 72 6e 20 24 69 0a pe'}..return $i.
4fc0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 }.. proc
4fd0: 54 61 67 49 74 65 6d 44 69 63 74 20 7b 69 74 65 TagItemDict {ite
4fe0: 6d 64 69 63 74 20 63 73 74 79 70 65 7d 20 7b 0a mdict cstype} {.
4ff0: 09 73 65 74 20 72 65 73 20 7b 7d 0a 09 66 6f 72 .set res {}..for
5000: 65 61 63 68 20 7b 69 20 76 7d 20 24 69 74 65 6d each {i v} $item
5010: 64 69 63 74 20 7b 20 6c 61 70 70 65 6e 64 20 72 dict { lappend r
5020: 65 73 20 5b 6c 69 73 74 20 24 63 73 74 79 70 65 es [list $cstype
5030: 20 24 69 5d 20 24 76 20 7d 0a 09 72 65 74 75 72 $i] $v }..retur
5040: 6e 20 24 72 65 73 0a 20 20 20 20 7d 0a 0a 20 20 n $res. }..
5050: 20 20 70 72 6f 63 20 56 61 6c 69 64 61 74 65 46 proc ValidateF
5060: 72 61 67 6d 65 6e 74 73 20 7b 63 73 65 74 20 66 ragments {cset f
5070: 72 61 67 6d 65 6e 74 73 7d 20 7b 0a 09 23 20 43 ragments} {..# C
5080: 68 65 63 6b 20 74 68 65 20 76 61 72 69 6f 75 73 heck the various
5090: 20 69 6e 74 65 67 72 69 74 79 20 63 6f 6e 73 74 integrity const
50a0: 72 61 69 6e 74 73 20 66 6f 72 20 74 68 65 20 66 raints for the f
50b0: 72 61 67 6d 65 6e 74 73 0a 09 23 20 73 70 65 63 ragments..# spec
50c0: 69 66 79 69 6e 67 20 68 6f 77 20 74 6f 20 73 70 ifying how to sp
50d0: 6c 69 74 20 74 68 65 20 63 68 61 6e 67 65 73 65 lit the changese
50e0: 74 3a 0a 09 23 0a 09 23 20 2a 20 57 65 20 6d 75 t:..#..# * We mu
50f0: 73 74 20 68 61 76 65 20 74 77 6f 20 6f 72 20 6d st have two or m
5100: 6f 72 65 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 ore fragments, a
5110: 73 20 73 70 6c 69 74 74 69 6e 67 20 61 0a 09 23 s splitting a..#
5120: 20 20 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 changeset int
5130: 6f 20 6f 6e 65 20 6d 61 6b 65 73 20 6e 6f 20 73 o one makes no s
5140: 65 6e 73 65 2e 0a 09 23 20 2a 20 4e 6f 20 66 72 ense...# * No fr
5150: 61 67 6d 65 6e 74 20 6d 61 79 20 62 65 20 65 6d agment may be em
5160: 70 74 79 2e 0a 09 23 20 2a 20 41 6c 6c 20 66 72 pty...# * All fr
5170: 61 67 6d 65 6e 74 73 20 68 61 76 65 20 74 6f 20 agments have to
5180: 62 65 20 74 72 75 65 20 73 75 62 73 65 74 73 20 be true subsets
5190: 6f 66 20 74 68 65 20 69 74 65 6d 73 20 69 6e 20 of the items in
51a0: 74 68 65 0a 09 23 20 20 20 63 68 61 6e 67 65 73 the..# changes
51b0: 65 74 20 74 6f 20 73 70 6c 69 74 2e 20 54 68 65 et to split. The
51c0: 20 27 74 72 75 65 27 20 69 73 20 69 6d 70 6c 69 'true' is impli
51d0: 65 64 20 62 65 63 61 75 73 65 20 6e 6f 6e 65 20 ed because none
51e0: 61 72 65 0a 09 23 20 20 20 61 6c 6c 6f 77 65 64 are..# allowed
51f0: 20 74 6f 20 62 65 20 65 6d 70 74 79 2c 20 73 6f to be empty, so
5200: 20 65 61 63 68 20 68 61 73 20 74 6f 20 62 65 20 each has to be
5210: 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 smaller than the
5220: 0a 09 23 20 20 20 74 6f 74 61 6c 2e 0a 09 23 20 ..# total...#
5230: 2a 20 54 68 65 20 75 6e 69 6f 6e 20 6f 66 20 74 * The union of t
5240: 68 65 20 66 72 61 67 6d 65 6e 74 73 20 68 61 73 he fragments has
5250: 20 74 6f 20 62 65 20 74 68 65 20 69 74 65 6d 20 to be the item
5260: 73 65 74 20 6f 66 20 74 68 65 0a 09 23 20 20 20 set of the..#
5270: 63 68 61 6e 67 65 73 65 74 2e 0a 09 23 20 2a 20 changeset...# *
5280: 54 68 65 20 66 72 61 67 6d 65 6e 74 20 6d 75 73 The fragment mus
5290: 74 20 6e 6f 74 20 6f 76 65 72 6c 61 70 2c 20 69 t not overlap, i
52a0: 2e 65 2e 20 74 68 65 69 72 20 70 61 69 72 77 69 .e. their pairwi
52b0: 73 65 0a 09 23 20 20 20 69 6e 74 65 72 73 65 63 se..# intersec
52c0: 74 69 6f 6e 73 20 68 61 76 65 20 74 6f 20 62 65 tions have to be
52d0: 20 65 6d 70 74 79 2e 0a 0a 09 73 65 74 20 63 6f empty....set co
52e0: 76 65 72 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 ver {}..foreach
52f0: 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 20 24 66 fragmentitems $f
5300: 72 61 67 6d 65 6e 74 73 20 7b 0a 09 20 20 20 20 ragments {..
5310: 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 74 log write 8 cset
5320: 73 20 7b 4e 45 57 3a 20 5b 6c 73 6f 72 74 20 24 s {NEW: [lsort $
5330: 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 5d 7d 0a fragmentitems]}.
5340: 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 .. integrity
5350: 61 73 73 65 72 74 20 7b 0a 09 09 21 5b 73 74 72 assert {...![str
5360: 75 63 74 3a 3a 73 65 74 20 65 6d 70 74 79 20 24 uct::set empty $
5370: 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 5d 0a 09 fragmentitems]..
5380: 20 20 20 20 7d 20 7b 63 68 61 6e 67 65 73 65 74 } {changeset
5390: 20 66 72 61 67 6d 65 6e 74 20 69 73 20 65 6d 70 fragment is emp
53a0: 74 79 7d 0a 0a 09 20 20 20 20 69 6e 74 65 67 72 ty}... integr
53b0: 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 5b ity assert {...[
53c0: 73 74 72 75 63 74 3a 3a 73 65 74 20 73 75 62 73 struct::set subs
53d0: 65 74 6f 66 20 24 66 72 61 67 6d 65 6e 74 69 74 etof $fragmentit
53e0: 65 6d 73 20 5b 24 63 73 65 74 20 69 74 65 6d 73 ems [$cset items
53f0: 5d 5d 0a 09 20 20 20 20 7d 20 7b 63 68 61 6e 67 ]].. } {chang
5400: 65 73 65 74 20 66 72 61 67 6d 65 6e 74 20 69 73 eset fragment is
5410: 20 6e 6f 74 20 61 20 73 75 62 73 65 74 7d 0a 09 not a subset}..
5420: 20 20 20 20 73 74 72 75 63 74 3a 3a 73 65 74 20 struct::set
5430: 61 64 64 20 63 6f 76 65 72 20 24 66 72 61 67 6d add cover $fragm
5440: 65 6e 74 69 74 65 6d 73 0a 09 7d 0a 0a 09 69 6e entitems..}...in
5450: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
5460: 0a 09 20 20 20 20 5b 73 74 72 75 63 74 3a 3a 73 .. [struct::s
5470: 65 74 20 65 71 75 61 6c 20 24 63 6f 76 65 72 20 et equal $cover
5480: 5b 24 63 73 65 74 20 69 74 65 6d 73 5d 5d 0a 09 [$cset items]]..
5490: 20 7d 20 7b 54 68 65 20 66 72 61 67 6d 65 6e 74 } {The fragment
54a0: 73 20 64 6f 20 6e 6f 74 20 63 6f 76 65 72 20 74 s do not cover t
54b0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e he original chan
54c0: 67 65 73 65 74 7d 0a 0a 09 73 65 74 20 69 20 31 geset}...set i 1
54d0: 0a 09 66 6f 72 65 61 63 68 20 66 69 61 20 24 66 ..foreach fia $f
54e0: 72 61 67 6d 65 6e 74 73 20 7b 0a 09 20 20 20 20 ragments {..
54f0: 66 6f 72 65 61 63 68 20 66 69 62 20 5b 6c 72 61 foreach fib [lra
5500: 6e 67 65 20 24 66 72 61 67 6d 65 6e 74 73 20 24 nge $fragments $
5510: 69 20 65 6e 64 5d 20 7b 0a 09 09 69 6e 74 65 67 i end] {...integ
5520: 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 rity assert {...
5530: 20 20 20 20 5b 73 74 72 75 63 74 3a 3a 73 65 74 [struct::set
5540: 20 65 6d 70 74 79 20 5b 73 74 72 75 63 74 3a 3a empty [struct::
5550: 73 65 74 20 69 6e 74 65 72 73 65 63 74 20 24 66 set intersect $f
5560: 69 61 20 24 66 69 62 5d 5d 0a 09 09 7d 20 7b 54 ia $fib]]...} {T
5570: 68 65 20 66 72 61 67 6d 65 6e 74 73 20 3c 24 66 he fragments <$f
5580: 69 61 3e 20 61 6e 64 20 3c 24 66 69 62 3e 20 6f ia> and <$fib> o
5590: 76 65 72 6c 61 70 7d 0a 09 20 20 20 20 7d 0a 09 verlap}.. }..
55a0: 20 20 20 20 69 6e 63 72 20 69 0a 09 7d 0a 0a 09 incr i..}...
55b0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
55c0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
55d0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
55e0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
55f0: 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69 State.. vari
5600: 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20 able myid
5610: 20 7b 7d 20 3b 20 23 20 49 64 20 6f 66 20 74 68 {} ; # Id of th
5620: 65 20 63 73 65 74 20 66 6f 72 20 74 68 65 20 70 e cset for the p
5630: 65 72 73 69 73 74 65 6e 74 0a 09 09 09 20 20 20 ersistent....
5640: 20 20 20 23 20 73 74 61 74 65 2e 0a 20 20 20 20 # state..
5650: 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65 variable myproje
5660: 63 74 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 ct {} ; # Refe
5670: 72 65 6e 63 65 20 6f 66 20 74 68 65 20 70 72 6f rence of the pro
5680: 6a 65 63 74 20 6f 62 6a 65 63 74 20 74 68 65 0a ject object the.
5690: 09 09 09 20 20 20 20 20 20 23 20 63 68 61 6e 67 ... # chang
56a0: 65 73 65 74 20 62 65 6c 6f 6e 67 73 20 74 6f 2e eset belongs to.
56b0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
56c0: 74 79 70 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 type {} ; #
56d0: 20 57 68 61 74 20 74 68 65 20 63 68 61 6e 67 65 What the change
56e0: 73 65 74 20 69 73 20 62 61 73 65 64 20 6f 6e 0a set is based on.
56f0: 09 09 09 20 20 20 20 20 20 23 20 28 72 65 76 69 ... # (revi
5700: 73 69 6f 6e 73 2c 20 74 61 67 73 2c 20 6f 72 20 sions, tags, or
5710: 62 72 61 6e 63 68 65 73 29 2e 0a 09 09 09 20 20 branches).....
5720: 20 20 20 20 23 20 56 61 6c 75 65 73 3a 20 53 65 # Values: Se
5730: 65 20 6d 79 63 73 74 79 70 65 2e 20 4e 6f 74 65 e mycstype. Note
5740: 20 74 68 61 74 20 77 65 0a 09 09 09 20 20 20 20 that we....
5750: 20 20 23 20 68 61 76 65 20 74 6f 20 6b 65 65 70 # have to keep
5760: 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 the names of th
5770: 65 20 68 65 6c 70 65 72 0a 09 09 09 20 20 20 20 e helper....
5780: 20 20 23 20 73 69 6e 67 6c 65 74 6f 6e 73 20 69 # singletons i
5790: 6e 20 73 79 6e 63 20 77 69 74 68 20 74 68 65 20 n sync with the
57a0: 63 6f 6e 74 65 6e 74 73 0a 09 09 09 20 20 20 20 contents....
57b0: 20 20 23 20 6f 66 20 73 74 61 74 65 20 74 61 62 # of state tab
57c0: 6c 65 20 27 63 73 74 79 70 65 27 2c 20 61 6e 64 le 'cstype', and
57d0: 20 76 61 72 69 6f 75 73 0a 09 09 09 20 20 20 20 various....
57e0: 20 20 23 20 6f 74 68 65 72 20 70 6c 61 63 65 73 # other places
57f0: 20 75 73 69 6e 67 20 74 68 65 6d 20 68 61 72 64 using them hard
5800: 77 69 72 65 64 2e 0a 20 20 20 20 76 61 72 69 61 wired.. varia
5810: 62 6c 65 20 6d 79 74 79 70 65 6f 62 6a 20 20 20 ble mytypeobj
5820: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 {} ; # Reference
5830: 20 74 6f 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 to the containe
5840: 72 20 66 6f 72 20 74 68 65 0a 09 09 09 20 20 20 r for the....
5850: 20 20 20 23 20 74 79 70 65 20 64 65 70 65 6e 64 # type depend
5860: 65 6e 74 20 63 6f 64 65 2e 20 44 65 72 69 76 65 ent code. Derive
5870: 64 20 66 72 6f 6d 0a 09 09 09 20 20 20 20 20 20 d from....
5880: 23 20 6d 79 74 79 70 65 2e 0a 20 20 20 20 76 61 # mytype.. va
5890: 72 69 61 62 6c 65 20 6d 79 73 72 63 69 64 20 20 riable mysrcid
58a0: 20 20 20 7b 7d 20 3b 20 23 20 49 64 20 6f 66 20 {} ; # Id of
58b0: 74 68 65 20 6d 65 74 61 64 61 74 61 20 6f 72 20 the metadata or
58c0: 73 79 6d 62 6f 6c 20 74 68 65 20 63 73 65 74 0a symbol the cset.
58d0: 09 09 09 20 20 20 20 20 20 23 20 69 73 20 62 61 ... # is ba
58e0: 73 65 64 20 6f 6e 2e 0a 20 20 20 20 76 61 72 69 sed on.. vari
58f0: 61 62 6c 65 20 6d 79 69 74 65 6d 73 20 20 20 20 able myitems
5900: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 {} ; # List of
5910: 74 68 65 20 66 69 6c 65 20 6c 65 76 65 6c 20 72 the file level r
5920: 65 76 69 73 69 6f 6e 73 2c 0a 09 09 09 20 20 20 evisions,....
5930: 20 20 20 23 20 74 61 67 73 2c 20 6f 72 20 62 72 # tags, or br
5940: 61 6e 63 68 65 73 20 69 6e 20 74 68 65 20 63 73 anches in the cs
5950: 65 74 2c 20 61 73 0a 09 09 09 20 20 20 20 20 20 et, as....
5960: 23 20 69 64 73 2e 20 4e 6f 74 20 74 61 67 67 65 # ids. Not tagge
5970: 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 d.. variable
5980: 6d 79 74 69 74 65 6d 73 20 20 20 20 7b 7d 20 3b mytitems {} ;
5990: 20 23 20 41 73 20 6d 79 69 74 65 6d 73 2c 20 74 # As myitems, t
59a0: 68 65 20 74 61 67 67 65 64 20 66 6f 72 6d 2e 0a he tagged form..
59b0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 variable myp
59c0: 6f 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 os {} ; #
59d0: 43 6f 6d 6d 69 74 20 70 6f 73 69 74 69 6f 6e 20 Commit position
59e0: 6f 66 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 of the changeset
59f0: 2c 20 69 66 0a 09 09 09 20 20 20 20 20 20 23 20 , if.... #
5a00: 6b 6e 6f 77 6e 2e 0a 0a 20 20 20 20 23 20 23 20 known... # #
5a10: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
5a20: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
5a30: 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 ###. ## Inter
5a40: 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 nal methods..
5a50: 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 typevariable my
5a60: 63 6f 75 6e 74 65 72 20 20 20 20 20 20 20 20 30 counter 0
5a70: 20 3b 20 23 20 49 64 20 63 6f 75 6e 74 65 72 20 ; # Id counter
5a80: 66 6f 72 20 63 73 65 74 73 2e 20 4c 61 73 74 20 for csets. Last
5a90: 69 64 0a 09 09 09 09 20 20 20 20 20 20 23 20 75 id..... # u
5aa0: 73 65 64 2e 0a 20 20 20 20 74 79 70 65 76 61 72 sed.. typevar
5ab0: 69 61 62 6c 65 20 6d 79 63 73 74 79 70 65 20 2d iable mycstype -
5ac0: 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 array {} ; # Map
5ad0: 20 63 73 74 79 70 65 73 20 28 6e 61 6d 65 73 29 cstypes (names)
5ae0: 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 0a 09 to persistent..
5af0: 09 09 09 20 20 20 20 20 20 23 20 69 64 73 2e 20 ... # ids.
5b00: 4e 6f 74 65 20 74 68 61 74 20 77 65 20 68 61 76 Note that we hav
5b10: 65 20 74 6f 20 6b 65 65 70 0a 09 09 09 09 20 20 e to keep.....
5b20: 20 20 20 20 23 20 74 68 65 20 6e 61 6d 65 73 20 # the names
5b30: 69 6e 20 74 68 65 20 74 61 62 6c 65 20 27 63 73 in the table 'cs
5b40: 74 79 70 65 27 0a 09 09 09 09 20 20 20 20 20 20 type'.....
5b50: 23 20 69 6e 20 73 79 6e 63 20 77 69 74 68 20 74 # in sync with t
5b60: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 0a he names of the.
5b70: 09 09 09 09 20 20 20 20 20 20 23 20 68 65 6c 70 .... # help
5b80: 65 72 20 73 69 6e 67 6c 65 74 6f 6e 73 2e 0a 0a er singletons...
5b90: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 typemethod i
5ba0: 6e 6f 72 64 65 72 20 7b 70 72 6f 6a 65 63 74 69 norder {projecti
5bb0: 64 7d 20 7b 0a 09 23 20 52 65 74 75 72 6e 20 61 d} {..# Return a
5bc0: 6c 6c 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e ll revision chan
5bd0: 67 65 73 65 74 73 20 66 6f 72 20 74 68 65 20 73 gesets for the s
5be0: 70 65 63 69 66 69 65 64 20 70 72 6f 6a 65 63 74 pecified project
5bf0: 2c 20 69 6e 0a 09 23 20 74 68 65 20 6f 72 64 65 , in..# the orde
5c00: 72 20 67 69 76 65 6e 20 74 6f 20 74 68 65 6d 20 r given to them
5c10: 62 79 20 74 68 65 20 73 6f 72 74 20 70 61 73 73 by the sort pass
5c20: 65 73 2e 20 42 6f 74 68 20 74 68 65 0a 09 23 20 es. Both the..#
5c30: 66 69 6c 74 65 72 69 6e 67 20 62 79 20 70 72 6f filtering by pro
5c40: 6a 65 63 74 20 61 6e 64 20 73 6f 72 74 69 6e 67 ject and sorting
5c50: 20 6d 61 6b 65 20 75 73 65 20 6f 66 20 27 70 72 make use of 'pr
5c60: 6f 6a 65 63 74 3a 3a 72 65 76 0a 09 23 20 72 65 oject::rev..# re
5c70: 76 27 20 69 6d 70 6f 73 73 69 62 6c 65 2e 0a 0a v' impossible...
5c80: 09 73 65 74 20 72 65 73 20 7b 7d 0a 09 66 6f 72 .set res {}..for
5c90: 65 61 63 68 20 7b 63 69 64 20 63 64 61 74 65 7d each {cid cdate}
5ca0: 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 [state run {..
5cb0: 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 2c SELECT C.cid,
5cc0: 20 54 2e 64 61 74 65 0a 09 20 20 20 20 46 52 4f T.date.. FRO
5cd0: 4d 20 20 20 63 68 61 6e 67 65 73 65 74 20 43 2c M changeset C,
5ce0: 20 63 73 74 69 6d 65 73 74 61 6d 70 20 54 0a 09 cstimestamp T..
5cf0: 20 20 20 20 57 48 45 52 45 20 20 43 2e 74 79 70 WHERE C.typ
5d00: 65 20 3d 20 30 20 20 20 20 20 20 20 20 20 20 2d e = 0 -
5d10: 2d 20 6c 69 6d 69 74 20 74 6f 20 72 65 76 69 73 - limit to revis
5d20: 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 0a 09 ion changesets..
5d30: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 70 69 64 AND C.pid
5d40: 20 20 3d 20 24 70 72 6f 6a 65 63 74 69 64 20 2d = $projectid -
5d50: 2d 20 6c 69 6d 69 74 20 74 6f 20 63 68 61 6e 67 - limit to chang
5d60: 65 73 65 74 73 20 69 6e 20 70 72 6f 6a 65 63 74 esets in project
5d70: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 54 2e 63 .. AND T.c
5d80: 69 64 20 20 3d 20 43 2e 63 69 64 20 20 20 20 20 id = C.cid
5d90: 20 2d 2d 20 67 65 74 20 6f 72 64 65 72 69 6e 67 -- get ordering
5da0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 09 20 20 information..
5db0: 20 20 4f 52 44 45 52 20 42 59 20 54 2e 64 61 74 ORDER BY T.dat
5dc0: 65 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 e --
5dd0: 73 6f 72 74 20 69 6e 74 6f 20 63 6f 6d 6d 69 74 sort into commit
5de0: 20 6f 72 64 65 72 0a 09 7d 5d 20 7b 0a 09 20 20 order..}] {..
5df0: 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 6d lappend res $m
5e00: 79 69 64 6d 61 70 28 24 63 69 64 29 20 24 63 64 yidmap($cid) $cd
5e10: 61 74 65 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 ate..}..return $
5e20: 72 65 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 res. }.. t
5e30: 79 70 65 6d 65 74 68 6f 64 20 67 65 74 63 73 74 ypemethod getcst
5e40: 79 70 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 ypes {} {..forea
5e50: 63 68 20 7b 74 69 64 20 6e 61 6d 65 7d 20 5b 73 ch {tid name} [s
5e60: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 tate run {..
5e70: 53 45 4c 45 43 54 20 74 69 64 2c 20 6e 61 6d 65 SELECT tid, name
5e80: 20 46 52 4f 4d 20 63 73 74 79 70 65 3b 0a 09 7d FROM cstype;..}
5e90: 5d 20 7b 20 73 65 74 20 6d 79 63 73 74 79 70 65 ] { set mycstype
5ea0: 28 24 6e 61 6d 65 29 20 24 74 69 64 20 7d 0a 09 ($name) $tid }..
5eb0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
5ec0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 61 typemethod loa
5ed0: 64 20 7b 72 65 70 6f 73 69 74 6f 72 79 7d 20 7b d {repository} {
5ee0: 0a 09 73 65 74 20 6e 20 30 0a 09 6c 6f 67 20 77 ..set n 0..log w
5ef0: 72 69 74 65 20 32 20 63 73 65 74 73 20 7b 4c 6f rite 2 csets {Lo
5f00: 61 64 69 6e 67 20 74 68 65 20 63 68 61 6e 67 65 ading the change
5f10: 73 65 74 73 7d 0a 09 66 6f 72 65 61 63 68 20 7b sets}..foreach {
5f20: 69 64 20 70 69 64 20 63 73 74 79 70 65 20 73 72 id pid cstype sr
5f30: 63 69 64 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 cid} [state run
5f40: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e {.. SELECT C.
5f50: 63 69 64 2c 20 43 2e 70 69 64 2c 20 43 53 2e 6e cid, C.pid, CS.n
5f60: 61 6d 65 2c 20 43 2e 73 72 63 0a 09 20 20 20 20 ame, C.src..
5f70: 46 52 4f 4d 20 20 20 63 68 61 6e 67 65 73 65 74 FROM changeset
5f80: 20 43 2c 20 63 73 74 79 70 65 20 43 53 0a 09 20 C, cstype CS..
5f90: 20 20 20 57 48 45 52 45 20 20 43 2e 74 79 70 65 WHERE C.type
5fa0: 20 3d 20 43 53 2e 74 69 64 0a 09 20 20 20 20 4f = CS.tid.. O
5fb0: 52 44 45 52 20 42 59 20 43 2e 63 69 64 0a 09 7d RDER BY C.cid..}
5fc0: 5d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 70 72 6f ] {.. log pro
5fd0: 67 72 65 73 73 20 32 20 63 73 65 74 73 20 24 6e gress 2 csets $n
5fe0: 20 7b 7d 0a 09 20 20 20 20 73 65 74 20 72 20 5b {}.. set r [
5ff0: 24 74 79 70 65 20 25 41 55 54 4f 25 20 5b 24 72 $type %AUTO% [$r
6000: 65 70 6f 73 69 74 6f 72 79 20 70 72 6f 6a 65 63 epository projec
6010: 74 6f 66 20 24 70 69 64 5d 20 24 63 73 74 79 70 tof $pid] $cstyp
6020: 65 20 24 73 72 63 69 64 20 5b 73 74 61 74 65 20 e $srcid [state
6030: 72 75 6e 20 7b 0a 09 09 53 45 4c 45 43 54 20 43 run {...SELECT C
6040: 2e 69 69 64 0a 09 09 46 52 4f 4d 20 20 20 63 73 .iid...FROM cs
6050: 69 74 65 6d 20 43 0a 09 09 57 48 45 52 45 20 20 item C...WHERE
6060: 43 2e 63 69 64 20 3d 20 24 69 64 0a 09 09 4f 52 C.cid = $id...OR
6070: 44 45 52 20 42 59 20 43 2e 70 6f 73 0a 09 20 20 DER BY C.pos..
6080: 20 20 7d 5d 20 24 69 64 5d 0a 09 20 20 20 20 69 }] $id].. i
6090: 6e 63 72 20 6e 0a 09 7d 0a 09 72 65 74 75 72 6e ncr n..}..return
60a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 . }.. type
60b0: 6d 65 74 68 6f 64 20 6c 6f 61 64 63 6f 75 6e 74 method loadcount
60c0: 65 72 20 7b 7d 20 7b 0a 09 23 20 49 6e 69 74 69 er {} {..# Initi
60d0: 61 6c 69 7a 65 20 74 68 65 20 63 6f 75 6e 74 65 alize the counte
60e0: 72 20 66 72 6f 6d 20 74 68 65 20 73 74 61 74 65 r from the state
60f0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 32 20 63 73 ..log write 2 cs
6100: 65 74 73 20 7b 4c 6f 61 64 69 6e 67 20 63 68 61 ets {Loading cha
6110: 6e 67 65 73 65 74 20 63 6f 75 6e 74 65 72 7d 0a ngeset counter}.
6120: 09 73 65 74 20 6d 79 63 6f 75 6e 74 65 72 20 5b .set mycounter [
6130: 73 74 61 74 65 20 6f 6e 65 20 7b 20 53 45 4c 45 state one { SELE
6140: 43 54 20 4d 41 58 28 63 69 64 29 20 46 52 4f 4d CT MAX(cid) FROM
6150: 20 63 68 61 6e 67 65 73 65 74 20 7d 5d 0a 09 72 changeset }]..r
6160: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
6170: 20 74 79 70 65 6d 65 74 68 6f 64 20 6e 75 6d 20 typemethod num
6180: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 63 {} { return $myc
6190: 6f 75 6e 74 65 72 20 7d 0a 0a 20 20 20 20 70 72 ounter }.. pr
61a0: 6f 63 20 49 6e 69 74 69 61 6c 69 7a 65 42 72 65 oc InitializeBre
61b0: 61 6b 53 74 61 74 65 20 7b 72 65 76 69 73 69 6f akState {revisio
61c0: 6e 73 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 70 ns} {..upvar 1 p
61d0: 6f 73 20 70 6f 73 20 63 72 6f 73 73 20 63 72 6f os pos cross cro
61e0: 73 73 20 72 61 6e 67 65 20 72 61 6e 67 65 20 64 ss range range d
61f0: 65 70 63 20 64 65 70 63 20 64 65 6c 74 61 20 64 epc depc delta d
6200: 65 6c 74 61 20 5c 0a 09 20 20 20 20 64 65 70 65 elta \.. depe
6210: 6e 64 65 6e 63 69 65 73 20 64 65 70 65 6e 64 65 ndencies depende
6220: 6e 63 69 65 73 0a 0a 09 23 20 46 69 72 73 74 20 ncies...# First
6230: 77 65 20 63 72 65 61 74 65 20 61 20 6d 61 70 20 we create a map
6240: 6f 66 20 70 6f 73 69 74 69 6f 6e 73 20 74 6f 20 of positions to
6250: 6d 61 6b 65 20 69 74 20 65 61 73 69 65 72 20 74 make it easier t
6260: 6f 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 20 77 o..# determine w
6270: 68 65 74 68 65 72 20 61 20 64 65 70 65 6e 64 65 hether a depende
6280: 6e 63 79 20 63 72 6f 73 73 65 73 20 61 20 70 61 ncy crosses a pa
6290: 72 74 69 63 75 6c 61 72 20 69 6e 64 65 78 2e 0a rticular index..
62a0: 0a 09 61 72 72 61 79 20 73 65 74 20 70 6f 73 20 ..array set pos
62b0: 20 20 7b 7d 0a 09 61 72 72 61 79 20 73 65 74 20 {}..array set
62c0: 63 72 6f 73 73 20 7b 7d 0a 09 61 72 72 61 79 20 cross {}..array
62d0: 73 65 74 20 64 65 70 63 20 20 7b 7d 0a 09 73 65 set depc {}..se
62e0: 74 20 72 61 6e 67 65 20 20 20 20 20 20 20 7b 7d t range {}
62f0: 0a 09 73 65 74 20 6e 20 30 0a 09 66 6f 72 65 61 ..set n 0..forea
6300: 63 68 20 72 65 76 20 24 72 65 76 69 73 69 6f 6e ch rev $revision
6310: 73 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 s {.. lappend
6320: 20 72 61 6e 67 65 20 24 6e 0a 09 20 20 20 20 73 range $n.. s
6330: 65 74 20 70 6f 73 28 24 72 65 76 29 20 24 6e 0a et pos($rev) $n.
6340: 09 20 20 20 20 73 65 74 20 63 72 6f 73 73 28 24 . set cross($
6350: 6e 29 20 30 0a 09 20 20 20 20 69 6e 63 72 20 6e n) 0.. incr n
6360: 0a 09 7d 0a 0a 09 23 20 53 65 63 6f 6e 64 6c 79 ..}...# Secondly
6370: 20 77 65 20 63 6f 75 6e 74 20 74 68 65 20 63 72 we count the cr
6380: 6f 73 73 69 6e 67 73 20 70 65 72 20 70 6f 73 69 ossings per posi
6390: 74 69 6f 6e 2c 20 62 79 20 69 74 65 72 61 74 69 tion, by iterati
63a0: 6e 67 0a 09 23 20 6f 76 65 72 20 74 68 65 20 72 ng..# over the r
63b0: 65 63 6f 72 64 65 64 20 69 6e 74 65 72 6e 61 6c ecorded internal
63c0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 0a 0a dependencies...
63d0: 09 23 20 4e 6f 74 65 3a 20 49 66 20 74 68 65 20 .# Note: If the
63e0: 74 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20 62 timestamps are b
63f0: 61 64 6c 79 20 6f 75 74 20 6f 66 20 6f 72 64 65 adly out of orde
6400: 72 20 69 74 20 69 73 0a 09 23 20 20 20 20 20 20 r it is..#
6410: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76 possible to hav
6420: 65 20 61 20 62 61 63 6b 77 61 72 64 20 73 75 63 e a backward suc
6430: 63 65 73 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 cessor dependenc
6440: 79 2c 0a 09 23 20 20 20 20 20 20 20 69 2e 65 2e y,..# i.e.
6450: 20 77 69 74 68 20 73 74 61 72 74 20 3e 20 65 6e with start > en
6460: 64 2e 20 57 65 20 6d 61 79 20 68 61 76 65 20 74 d. We may have t
6470: 6f 20 73 77 61 70 20 74 68 65 20 69 6e 64 69 63 o swap the indic
6480: 65 73 0a 09 23 20 20 20 20 20 20 20 74 6f 20 65 es..# to e
6490: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 66 nsure that the f
64a0: 6f 6c 6c 6f 77 69 6e 67 20 6c 6f 6f 70 20 72 75 ollowing loop ru
64b0: 6e 73 20 63 6f 72 72 65 63 74 6c 79 2e 0a 09 23 ns correctly...#
64c0: 0a 09 23 20 4e 6f 74 65 20 32 3a 20 73 74 61 72 ..# Note 2: star
64d0: 74 20 3d 3d 20 65 6e 64 20 69 73 20 6e 6f 74 20 t == end is not
64e0: 70 6f 73 73 69 62 6c 65 2e 20 49 74 20 69 6e 64 possible. It ind
64f0: 69 63 61 74 65 73 20 61 0a 09 23 20 20 20 20 20 icates a..#
6500: 20 20 20 20 73 65 6c 66 2d 64 65 70 65 6e 64 65 self-depende
6510: 6e 63 79 20 64 75 65 20 74 6f 20 74 68 65 20 75 ncy due to the u
6520: 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70 6f 73 niqueness of pos
6530: 69 74 69 6f 6e 73 2c 0a 09 23 20 20 20 20 20 20 itions,..#
6540: 20 20 20 61 6e 64 20 74 68 61 74 20 69 73 20 73 and that is s
6550: 6f 6d 65 74 68 69 6e 67 20 77 65 20 68 61 76 65 omething we have
6560: 20 72 75 6c 65 64 20 6f 75 74 20 61 6c 72 65 61 ruled out alrea
6570: 64 79 2c 20 73 65 65 0a 09 23 20 20 20 20 20 20 dy, see..#
6580: 20 20 20 27 72 65 76 20 69 6e 74 65 72 6e 61 6c 'rev internal
6590: 73 75 63 63 65 73 73 6f 72 73 27 2e 0a 0a 09 66 successors'....f
65a0: 6f 72 65 61 63 68 20 7b 72 69 64 20 63 68 69 6c oreach {rid chil
65b0: 64 72 65 6e 7d 20 5b 61 72 72 61 79 20 67 65 74 dren} [array get
65c0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 20 7b dependencies] {
65d0: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 63 68 .. foreach ch
65e0: 69 6c 64 20 24 63 68 69 6c 64 72 65 6e 20 7b 0a ild $children {.
65f0: 09 09 73 65 74 20 64 6b 65 79 20 20 20 20 5b 6c ..set dkey [l
6600: 69 73 74 20 24 72 69 64 20 24 63 68 69 6c 64 5d ist $rid $child]
6610: 0a 09 09 73 65 74 20 73 74 61 72 74 20 20 20 24 ...set start $
6620: 70 6f 73 28 24 72 69 64 29 0a 09 09 73 65 74 20 pos($rid)...set
6630: 65 6e 64 20 20 20 20 20 24 70 6f 73 28 24 63 68 end $pos($ch
6640: 69 6c 64 29 0a 09 09 73 65 74 20 63 72 6f 73 73 ild)...set cross
6650: 65 73 20 7b 7d 0a 0a 09 09 69 66 20 7b 24 73 74 es {}....if {$st
6660: 61 72 74 20 3e 20 24 65 6e 64 7d 20 7b 0a 09 09 art > $end} {...
6670: 20 20 20 20 77 68 69 6c 65 20 7b 24 65 6e 64 20 while {$end
6680: 3c 20 24 73 74 61 72 74 7d 20 7b 0a 09 09 09 6c < $start} {....l
6690: 61 70 70 65 6e 64 20 63 72 6f 73 73 65 73 20 24 append crosses $
66a0: 65 6e 64 0a 09 09 09 69 6e 63 72 20 63 72 6f 73 end....incr cros
66b0: 73 28 24 65 6e 64 29 0a 09 09 09 69 6e 63 72 20 s($end)....incr
66c0: 65 6e 64 0a 09 09 20 20 20 20 7d 0a 09 09 7d 20 end... }...}
66d0: 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 77 68 69 else {... whi
66e0: 6c 65 20 7b 24 73 74 61 72 74 20 3c 20 24 65 6e le {$start < $en
66f0: 64 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 d} {....lappend
6700: 63 72 6f 73 73 65 73 20 24 73 74 61 72 74 0a 09 crosses $start..
6710: 09 09 69 6e 63 72 20 63 72 6f 73 73 28 24 73 74 ..incr cross($st
6720: 61 72 74 29 0a 09 09 09 69 6e 63 72 20 73 74 61 art)....incr sta
6730: 72 74 0a 09 09 20 20 20 20 7d 0a 09 09 7d 0a 09 rt... }...}..
6740: 09 73 65 74 20 64 65 70 63 28 24 64 6b 65 79 29 .set depc($dkey)
6750: 20 24 63 72 6f 73 73 65 73 0a 09 20 20 20 20 7d $crosses.. }
6760: 0a 09 7d 0a 0a 09 49 6e 69 74 69 61 6c 69 7a 65 ..}...Initialize
6770: 44 65 6c 74 61 73 20 24 72 65 76 69 73 69 6f 6e Deltas $revision
6780: 73 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a s..return. }.
6790: 0a 20 20 20 20 70 72 6f 63 20 49 6e 69 74 69 61 . proc Initia
67a0: 6c 69 7a 65 44 65 6c 74 61 73 20 7b 72 65 76 69 lizeDeltas {revi
67b0: 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 61 72 20 sions} {..upvar
67c0: 31 20 64 65 6c 74 61 20 64 65 6c 74 61 0a 0a 09 1 delta delta...
67d0: 23 20 50 75 6c 6c 20 74 68 65 20 74 69 6d 65 73 # Pull the times
67e0: 74 61 6d 70 73 20 66 6f 72 20 61 6c 6c 20 72 65 tamps for all re
67f0: 76 69 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 63 visions in the c
6800: 68 61 6e 67 65 73 65 74 73 20 61 6e 64 0a 09 23 hangesets and..#
6810: 20 63 6f 6d 70 75 74 65 20 74 68 65 69 72 20 64 compute their d
6820: 65 6c 74 61 73 20 66 6f 72 20 75 73 65 20 62 79 eltas for use by
6830: 20 74 68 65 20 62 72 65 61 6b 20 66 69 6e 64 65 the break finde
6840: 72 2e 0a 0a 09 61 72 72 61 79 20 73 65 74 20 64 r....array set d
6850: 65 6c 74 61 20 7b 7d 0a 09 61 72 72 61 79 20 73 elta {}..array s
6860: 65 74 20 73 74 61 6d 70 20 7b 7d 0a 0a 09 73 65 et stamp {}...se
6870: 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e t theset ('[join
6880: 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 $revisions {','
6890: 7d 5d 27 29 0a 09 66 6f 72 65 61 63 68 20 7b 72 }]')..foreach {r
68a0: 69 64 20 74 69 6d 65 7d 20 5b 73 74 61 74 65 20 id time} [state
68b0: 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f run [subst -noco
68c0: 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c mmands -nobacksl
68d0: 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c ashes {.. SEL
68e0: 45 43 54 20 52 2e 72 69 64 2c 20 52 2e 64 61 74 ECT R.rid, R.dat
68f0: 65 0a 09 20 20 20 20 46 52 4f 4d 20 72 65 76 69 e.. FROM revi
6900: 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 sion R.. WHER
6910: 45 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 73 E R.rid IN $thes
6920: 65 74 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 73 et..}]] {.. s
6930: 65 74 20 73 74 61 6d 70 28 24 72 69 64 29 20 24 et stamp($rid) $
6940: 74 69 6d 65 0a 09 7d 0a 0a 09 73 65 74 20 6e 20 time..}...set n
6950: 30 0a 09 66 6f 72 65 61 63 68 20 72 69 64 20 5b 0..foreach rid [
6960: 6c 72 61 6e 67 65 20 24 72 65 76 69 73 69 6f 6e lrange $revision
6970: 73 20 30 20 65 6e 64 2d 31 5d 20 72 6e 65 78 74 s 0 end-1] rnext
6980: 20 5b 6c 72 61 6e 67 65 20 24 72 65 76 69 73 69 [lrange $revisi
6990: 6f 6e 73 20 31 20 65 6e 64 5d 20 7b 0a 09 20 20 ons 1 end] {..
69a0: 20 20 73 65 74 20 64 65 6c 74 61 28 24 6e 29 20 set delta($n)
69b0: 5b 65 78 70 72 20 7b 24 73 74 61 6d 70 28 24 72 [expr {$stamp($r
69c0: 6e 65 78 74 29 20 2d 20 24 73 74 61 6d 70 28 24 next) - $stamp($
69d0: 72 69 64 29 7d 5d 0a 09 20 20 20 20 69 6e 63 72 rid)}].. incr
69e0: 20 6e 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 n..}..return.
69f0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 46 69 }.. proc Fi
6a00: 6e 64 42 65 73 74 42 72 65 61 6b 20 7b 72 61 6e ndBestBreak {ran
6a10: 67 65 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 63 ge} {..upvar 1 c
6a20: 72 6f 73 73 20 63 72 6f 73 73 20 64 65 6c 74 61 ross cross delta
6a30: 20 64 65 6c 74 61 0a 0a 09 23 20 44 65 74 65 72 delta...# Deter
6a40: 6d 69 6e 65 20 74 68 65 20 62 65 73 74 20 62 72 mine the best br
6a50: 65 61 6b 20 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 eak location in
6a60: 74 68 65 20 67 69 76 65 6e 20 72 61 6e 67 65 20 the given range
6a70: 6f 66 0a 09 23 20 70 6f 73 69 74 69 6f 6e 73 2e of..# positions.
6a80: 20 46 69 72 73 74 20 77 65 20 6c 6f 6f 6b 20 66 First we look f
6a90: 6f 72 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 73 or the locations
6aa0: 20 77 69 74 68 20 74 68 65 20 6d 61 78 69 6d 61 with the maxima
6ab0: 6c 0a 09 23 20 6e 75 6d 62 65 72 20 6f 66 20 63 l..# number of c
6ac0: 72 6f 73 73 69 6e 67 73 2e 20 49 66 20 74 68 65 rossings. If the
6ad0: 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 20 77 re are several w
6ae0: 65 20 6c 6f 6f 6b 20 66 6f 72 20 74 68 65 0a 09 e look for the..
6af0: 23 20 73 68 6f 72 74 65 73 74 20 74 69 6d 65 20 # shortest time
6b00: 69 6e 74 65 72 76 61 6c 20 61 6d 6f 6e 67 20 74 interval among t
6b10: 68 65 6d 2e 20 49 66 20 77 65 20 73 74 69 6c 6c hem. If we still
6b20: 20 68 61 76 65 20 6d 75 6c 74 69 70 6c 65 0a 09 have multiple..
6b30: 23 20 70 6f 73 73 69 62 69 6c 69 74 69 65 73 20 # possibilities
6b40: 61 66 74 65 72 20 74 68 61 74 20 77 65 20 73 65 after that we se
6b50: 6c 65 63 74 20 74 68 65 20 65 61 72 6c 69 65 73 lect the earlies
6b60: 74 20 6c 6f 63 61 74 69 6f 6e 0a 09 23 20 61 6d t location..# am
6b70: 6f 6e 67 20 74 68 65 73 65 2e 0a 0a 09 23 20 4e ong these....# N
6b80: 6f 74 65 3a 20 49 66 20 74 68 65 20 6d 61 78 69 ote: If the maxi
6b90: 6d 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 72 mal number of cr
6ba0: 6f 73 73 69 6e 67 73 20 69 73 20 30 20 74 68 65 ossings is 0 the
6bb0: 6e 20 74 68 65 20 72 61 6e 67 65 0a 09 23 20 20 n the range..#
6bc0: 20 20 20 20 20 68 61 73 20 6e 6f 20 69 6e 74 65 has no inte
6bd0: 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 rnal dependencie
6be0: 73 2c 20 61 6e 64 20 6e 6f 20 62 72 65 61 6b 20 s, and no break
6bf0: 6c 6f 63 61 74 69 6f 6e 20 61 74 0a 09 23 20 20 location at..#
6c00: 20 20 20 20 20 61 6c 6c 2e 20 54 68 69 73 20 70 all. This p
6c10: 6f 73 73 69 62 69 6c 69 74 79 20 69 73 20 73 69 ossibility is si
6c20: 67 6e 61 6c 65 64 20 76 69 61 20 72 65 73 75 6c gnaled via resul
6c30: 74 20 2d 31 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 t -1....# Note:
6c40: 41 20 72 61 6e 67 65 20 6f 66 20 6c 65 6e 67 74 A range of lengt
6c50: 68 20 31 20 6f 72 20 6c 65 73 73 20 63 61 6e 6e h 1 or less cann
6c60: 6f 74 20 68 61 76 65 20 69 6e 74 65 72 6e 61 6c ot have internal
6c70: 0a 09 23 20 20 20 20 20 20 20 64 65 70 65 6e 64 ..# depend
6c80: 65 6e 63 69 65 73 2c 20 61 73 20 74 68 61 74 20 encies, as that
6c90: 6e 65 65 64 73 20 61 74 20 6c 65 61 73 74 20 74 needs at least t
6ca0: 77 6f 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 0a wo revisions in.
6cb0: 09 23 20 20 20 20 20 20 20 74 68 65 20 72 61 6e .# the ran
6cc0: 67 65 2e 0a 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 ge....if {[lleng
6cd0: 74 68 20 24 72 61 6e 67 65 5d 20 3c 20 32 7d 20 th $range] < 2}
6ce0: 7b 20 72 65 74 75 72 6e 20 2d 31 20 7d 0a 0a 09 { return -1 }...
6cf0: 73 65 74 20 6d 61 78 20 2d 31 0a 09 73 65 74 20 set max -1..set
6d00: 62 65 73 74 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 best {}...foreac
6d10: 68 20 6c 6f 63 61 74 69 6f 6e 20 24 72 61 6e 67 h location $rang
6d20: 65 20 7b 0a 09 20 20 20 20 73 65 74 20 63 72 6f e {.. set cro
6d30: 73 73 69 6e 67 73 20 24 63 72 6f 73 73 28 24 6c ssings $cross($l
6d40: 6f 63 61 74 69 6f 6e 29 0a 09 20 20 20 20 69 66 ocation).. if
6d50: 20 7b 24 63 72 6f 73 73 69 6e 67 73 20 3e 20 24 {$crossings > $
6d60: 6d 61 78 7d 20 7b 0a 09 09 73 65 74 20 6d 61 78 max} {...set max
6d70: 20 20 24 63 72 6f 73 73 69 6e 67 73 0a 09 09 73 $crossings...s
6d80: 65 74 20 62 65 73 74 20 5b 6c 69 73 74 20 24 6c et best [list $l
6d90: 6f 63 61 74 69 6f 6e 5d 0a 09 09 63 6f 6e 74 69 ocation]...conti
6da0: 6e 75 65 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 nue.. } elsei
6db0: 66 20 7b 24 63 72 6f 73 73 69 6e 67 73 20 3d 3d f {$crossings ==
6dc0: 20 24 6d 61 78 7d 20 7b 0a 09 09 6c 61 70 70 65 $max} {...lappe
6dd0: 6e 64 20 62 65 73 74 20 24 6c 6f 63 61 74 69 6f nd best $locatio
6de0: 6e 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 69 66 n.. }..}...if
6df0: 20 7b 24 6d 61 78 20 3d 3d 20 30 7d 20 20 20 20 {$max == 0}
6e00: 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e { return
6e10: 20 2d 31 20 7d 0a 09 69 66 20 7b 5b 6c 6c 65 6e -1 }..if {[llen
6e20: 67 74 68 20 24 62 65 73 74 5d 20 3d 3d 20 31 7d gth $best] == 1}
6e30: 20 7b 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 { return [linde
6e40: 78 20 24 62 65 73 74 20 30 5d 20 7d 0a 0a 09 73 x $best 0] }...s
6e50: 65 74 20 6c 6f 63 61 74 69 6f 6e 73 20 24 62 65 et locations $be
6e60: 73 74 0a 09 73 65 74 20 62 65 73 74 20 7b 7d 0a st..set best {}.
6e70: 09 73 65 74 20 6d 69 6e 20 2d 31 0a 0a 09 66 6f .set min -1...fo
6e80: 72 65 61 63 68 20 6c 6f 63 61 74 69 6f 6e 20 24 reach location $
6e90: 6c 6f 63 61 74 69 6f 6e 73 20 7b 0a 09 20 20 20 locations {..
6ea0: 20 73 65 74 20 69 6e 74 65 72 76 61 6c 20 24 64 set interval $d
6eb0: 65 6c 74 61 28 24 6c 6f 63 61 74 69 6f 6e 29 0a elta($location).
6ec0: 09 20 20 20 20 69 66 20 7b 28 24 6d 69 6e 20 3c . if {($min <
6ed0: 20 30 29 20 7c 7c 20 28 24 69 6e 74 65 72 76 61 0) || ($interva
6ee0: 6c 20 3c 20 24 6d 69 6e 29 7d 20 7b 0a 09 09 73 l < $min)} {...s
6ef0: 65 74 20 6d 69 6e 20 20 24 69 6e 74 65 72 76 61 et min $interva
6f00: 6c 0a 09 09 73 65 74 20 62 65 73 74 20 5b 6c 69 l...set best [li
6f10: 73 74 20 24 6c 6f 63 61 74 69 6f 6e 5d 0a 09 20 st $location]..
6f20: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 69 6e } elseif {$in
6f30: 74 65 72 76 61 6c 20 3d 3d 20 24 6d 69 6e 7d 20 terval == $min}
6f40: 7b 0a 09 09 6c 61 70 70 65 6e 64 20 62 65 73 74 {...lappend best
6f50: 20 24 6c 6f 63 61 74 69 6f 6e 0a 09 20 20 20 20 $location..
6f60: 7d 0a 09 7d 0a 0a 09 69 66 20 7b 5b 6c 6c 65 6e }..}...if {[llen
6f70: 67 74 68 20 24 62 65 73 74 5d 20 3d 3d 20 31 7d gth $best] == 1}
6f80: 20 7b 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 { return [linde
6f90: 78 20 24 62 65 73 74 20 30 5d 20 7d 0a 0a 09 72 x $best 0] }...r
6fa0: 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 5b 6c eturn [lindex [l
6fb0: 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20 2d 69 sort -integer -i
6fc0: 6e 63 72 65 61 73 69 6e 67 20 24 62 65 73 74 5d ncreasing $best]
6fd0: 20 30 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 0]. }.. p
6fe0: 72 6f 63 20 43 75 74 41 74 20 7b 6c 6f 63 61 74 roc CutAt {locat
6ff0: 69 6f 6e 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 ion} {..upvar 1
7000: 63 72 6f 73 73 20 63 72 6f 73 73 20 64 65 70 63 cross cross depc
7010: 20 64 65 70 63 0a 0a 09 23 20 49 74 20 77 61 73 depc...# It was
7020: 20 64 65 63 69 64 65 64 20 74 6f 20 73 70 6c 69 decided to spli
7030: 74 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 t the changeset
7040: 61 74 20 74 68 65 20 67 69 76 65 6e 0a 09 23 20 at the given..#
7050: 6c 6f 63 61 74 69 6f 6e 2e 20 54 68 69 73 20 63 location. This c
7060: 75 74 73 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 uts a number of
7070: 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 48 65 dependencies. He
7080: 72 65 20 77 65 20 75 70 64 61 74 65 0a 09 23 20 re we update..#
7090: 74 68 65 20 63 72 6f 73 73 20 69 6e 66 6f 72 6d the cross inform
70a0: 61 74 69 6f 6e 20 73 6f 20 74 68 61 74 20 74 68 ation so that th
70b0: 65 20 62 72 65 61 6b 20 66 69 6e 64 65 72 20 68 e break finder h
70c0: 61 73 20 61 63 63 75 72 61 74 65 0a 09 23 20 64 as accurate..# d
70d0: 61 74 61 20 77 68 65 6e 20 77 65 20 6c 6f 6f 6b ata when we look
70e0: 20 61 74 20 74 68 65 20 67 65 6e 65 72 61 74 65 at the generate
70f0: 64 20 66 72 61 67 6d 65 6e 74 73 2e 0a 0a 09 73 d fragments....s
7100: 65 74 20 73 69 78 20 5b 6c 6f 67 20 76 69 73 69 et six [log visi
7110: 62 6c 65 3f 20 36 5d 0a 0a 09 66 6f 72 65 61 63 ble? 6]...foreac
7120: 68 20 7b 64 65 70 20 72 61 6e 67 65 7d 20 5b 61 h {dep range} [a
7130: 72 72 61 79 20 67 65 74 20 64 65 70 63 5d 20 7b rray get depc] {
7140: 0a 09 20 20 20 20 23 20 43 68 65 63 6b 20 61 6c .. # Check al
7150: 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 73 l dependencies s
7160: 74 69 6c 6c 20 6b 6e 6f 77 6e 2c 20 74 61 6b 65 till known, take
7170: 20 74 68 65 69 72 20 72 61 6e 67 65 20 61 6e 64 their range and
7180: 0a 09 20 20 20 20 23 20 73 65 65 20 69 66 20 74 .. # see if t
7190: 68 65 20 62 72 65 61 6b 20 6c 6f 63 61 74 69 6f he break locatio
71a0: 6e 20 66 61 6c 6c 73 20 77 69 74 68 69 6e 2e 0a n falls within..
71b0: 0a 09 20 20 20 20 42 6f 72 64 65 72 20 24 72 61 .. Border $ra
71c0: 6e 67 65 20 73 20 65 0a 09 20 20 20 20 69 66 20 nge s e.. if
71d0: 7b 24 6c 6f 63 61 74 69 6f 6e 20 3c 20 24 73 7d {$location < $s}
71e0: 20 63 6f 6e 74 69 6e 75 65 20 3b 20 23 20 62 72 continue ; # br
71f0: 65 61 6b 20 62 65 66 6f 72 65 20 72 61 6e 67 65 eak before range
7200: 2c 20 69 67 6e 6f 72 65 0a 09 20 20 20 20 69 66 , ignore.. if
7210: 20 7b 24 6c 6f 63 61 74 69 6f 6e 20 3e 20 24 65 {$location > $e
7220: 7d 20 63 6f 6e 74 69 6e 75 65 20 3b 20 23 20 62 } continue ; # b
7230: 72 65 61 6b 20 61 66 74 65 72 20 72 61 6e 67 65 reak after range
7240: 2c 20 69 67 6e 6f 72 65 2e 0a 0a 09 20 20 20 20 , ignore....
7250: 23 20 54 68 69 73 20 64 65 70 65 6e 64 65 6e 63 # This dependenc
7260: 79 20 63 72 6f 73 73 65 73 20 74 68 65 20 62 72 y crosses the br
7270: 65 61 6b 20 6c 6f 63 61 74 69 6f 6e 2e 20 57 65 eak location. We
7280: 20 72 65 6d 6f 76 65 20 69 74 0a 09 20 20 20 20 remove it..
7290: 23 20 66 72 6f 6d 20 74 68 65 20 63 72 6f 73 73 # from the cross
72a0: 69 6e 67 73 20 63 6f 75 6e 74 65 72 73 2c 20 61 ings counters, a
72b0: 6e 64 20 74 68 65 6e 20 61 6c 73 6f 20 66 72 6f nd then also fro
72c0: 6d 20 74 68 65 20 73 65 74 0a 09 20 20 20 20 23 m the set.. #
72d0: 20 6f 66 20 6b 6e 6f 77 6e 20 64 65 70 65 6e 64 of known depend
72e0: 65 6e 63 69 65 73 2c 20 61 73 20 77 65 20 61 72 encies, as we ar
72f0: 65 20 64 6f 6e 65 20 77 69 74 68 20 69 74 2e 0a e done with it..
7300: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 6c 6f .. foreach lo
7310: 63 20 24 64 65 70 63 28 24 64 65 70 29 20 7b 20 c $depc($dep) {
7320: 69 6e 63 72 20 63 72 6f 73 73 28 24 6c 6f 63 29 incr cross($loc)
7330: 20 2d 31 20 7d 0a 09 20 20 20 20 75 6e 73 65 74 -1 }.. unset
7340: 20 64 65 70 63 28 24 64 65 70 29 0a 0a 09 20 20 depc($dep)...
7350: 20 20 69 66 20 7b 21 24 73 69 78 7d 20 63 6f 6e if {!$six} con
7360: 74 69 6e 75 65 0a 0a 09 20 20 20 20 73 74 72 75 tinue... stru
7370: 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 ct::list assign
7380: 24 64 65 70 20 70 61 72 65 6e 74 20 63 68 69 6c $dep parent chil
7390: 64 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 d.. log write
73a0: 20 35 20 63 73 65 74 73 20 22 42 72 6f 6b 65 20 5 csets "Broke
73b0: 64 65 70 65 6e 64 65 6e 63 79 20 5b 50 44 20 24 dependency [PD $
73c0: 70 61 72 65 6e 74 5d 20 2d 2d 3e 20 5b 50 44 20 parent] --> [PD
73d0: 24 63 68 69 6c 64 5d 22 0a 09 7d 0a 0a 09 72 65 $child]"..}...re
73e0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
73f0: 23 20 50 72 69 6e 74 20 69 64 65 6e 74 69 66 79 # Print identify
7400: 69 6e 67 20 64 61 74 61 20 66 6f 72 20 61 20 72 ing data for a r
7410: 65 76 69 73 69 6f 6e 20 28 70 72 6f 6a 65 63 74 evision (project
7420: 2c 20 66 69 6c 65 2c 20 64 6f 74 74 65 64 20 72 , file, dotted r
7430: 65 76 0a 20 20 20 20 23 20 6e 75 6d 62 65 72 29 ev. # number)
7440: 2c 20 66 6f 72 20 68 69 67 68 20 76 65 72 62 6f , for high verbo
7450: 73 69 74 79 20 6c 6f 67 20 6f 75 74 70 75 74 2e sity log output.
7460: 0a 20 20 20 20 23 20 54 4f 44 4f 3a 20 52 65 70 . # TODO: Rep
7470: 6c 61 63 65 20 77 69 74 68 20 63 61 6c 6c 20 74 lace with call t
7480: 6f 20 69 74 65 6d 73 74 72 20 28 6c 69 73 74 20 o itemstr (list
7490: 72 65 76 20 24 69 64 29 0a 0a 20 20 20 20 70 72 rev $id).. pr
74a0: 6f 63 20 50 44 20 7b 69 64 7d 20 7b 0a 09 66 6f oc PD {id} {..fo
74b0: 72 65 61 63 68 20 7b 70 20 66 20 72 7d 20 5b 73 reach {p f r} [s
74c0: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c tate run {...SEL
74d0: 45 43 54 20 50 2e 6e 61 6d 65 20 2c 20 46 2e 6e ECT P.name , F.n
74e0: 61 6d 65 2c 20 52 2e 72 65 76 0a 09 09 46 52 4f ame, R.rev...FRO
74f0: 4d 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 66 69 M revision R, fi
7500: 6c 65 20 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a le F, project P.
7510: 09 09 57 48 45 52 45 20 52 2e 72 69 64 20 3d 20 ..WHERE R.rid =
7520: 24 69 64 20 20 20 20 2d 2d 20 46 69 6e 64 20 73 $id -- Find s
7530: 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 72 65 pecified file re
7540: 76 69 73 69 6f 6e 0a 09 09 41 4e 44 20 20 20 46 vision...AND F
7550: 2e 66 69 64 20 3d 20 52 2e 66 69 64 20 20 2d 2d .fid = R.fid --
7560: 20 47 65 74 20 66 69 6c 65 20 6f 66 20 74 68 65 Get file of the
7570: 20 72 65 76 69 73 69 6f 6e 0a 09 09 41 4e 44 20 revision...AND
7580: 20 20 50 2e 70 69 64 20 3d 20 46 2e 70 69 64 20 P.pid = F.pid
7590: 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65 63 74 20 -- Get project
75a0: 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a 09 7d 5d of the file...}]
75b0: 20 62 72 65 61 6b 0a 09 72 65 74 75 72 6e 20 22 break..return "
75c0: 27 24 70 20 3a 20 24 66 2f 24 72 27 22 0a 20 20 '$p : $f/$r'".
75d0: 20 20 7d 0a 0a 20 20 20 20 23 20 50 72 69 6e 74 }.. # Print
75e0: 69 6e 67 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 ing one or more
75f0: 72 61 6e 67 65 73 2c 20 66 6f 72 6d 61 74 74 65 ranges, formatte
7600: 64 2c 20 61 6e 64 20 6f 6e 6c 79 20 74 68 65 69 d, and only thei
7610: 72 20 62 6f 72 64 65 72 20 74 6f 0a 20 20 20 20 r border to.
7620: 23 20 6b 65 65 70 20 74 68 65 20 73 74 72 69 6e # keep the strin
7630: 67 73 20 73 68 6f 72 74 2e 0a 0a 20 20 20 20 70 gs short... p
7640: 72 6f 63 20 50 52 73 20 7b 72 61 6e 67 65 73 7d roc PRs {ranges}
7650: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 75 {..return [stru
7660: 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 24 72 61 ct::list map $ra
7670: 6e 67 65 73 20 5b 6d 79 70 72 6f 63 20 50 52 5d nges [myproc PR]
7680: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f ]. }.. pro
7690: 63 20 50 52 20 7b 72 61 6e 67 65 7d 20 7b 0a 09 c PR {range} {..
76a0: 42 6f 72 64 65 72 20 24 72 61 6e 67 65 20 73 20 Border $range s
76b0: 65 0a 09 72 65 74 75 72 6e 20 3c 24 7b 73 7d 2e e..return <${s}.
76c0: 2e 2e 24 7b 65 7d 3e 0a 20 20 20 20 7d 0a 0a 20 ..${e}>. }..
76d0: 20 20 20 70 72 6f 63 20 42 6f 72 64 65 72 20 7b proc Border {
76e0: 72 61 6e 67 65 20 73 76 20 65 76 7d 20 7b 0a 09 range sv ev} {..
76f0: 75 70 76 61 72 20 31 20 24 73 76 20 73 20 24 65 upvar 1 $sv s $e
7700: 76 20 65 0a 09 73 65 74 20 73 20 5b 6c 69 6e 64 v e..set s [lind
7710: 65 78 20 24 72 61 6e 67 65 20 30 5d 0a 09 73 65 ex $range 0]..se
7720: 74 20 65 20 5b 6c 69 6e 64 65 78 20 24 72 61 6e t e [lindex $ran
7730: 67 65 20 65 6e 64 5d 0a 09 72 65 74 75 72 6e 0a ge end]..return.
7740: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 }.. # # #
7750: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
7760: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
7770: 23 23 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69 ##.. typevari
7780: 61 62 6c 65 20 6d 79 63 68 61 6e 67 65 73 65 74 able mychangeset
7790: 73 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 s {} ; #
77a0: 20 4c 69 73 74 20 6f 66 20 61 6c 6c 20 6b 6e 6f List of all kno
77b0: 77 6e 0a 09 09 09 09 09 20 20 20 23 20 63 68 61 wn...... # cha
77c0: 6e 67 65 73 65 74 73 2e 0a 0a 20 20 20 20 23 20 ngesets... #
77d0: 4c 69 73 74 20 6f 66 20 61 6c 6c 20 6b 6e 6f 77 List of all know
77e0: 6e 20 63 68 61 6e 67 65 73 65 74 73 20 6f 66 20 n changesets of
77f0: 61 20 74 79 70 65 2e 0a 20 20 20 20 74 79 70 65 a type.. type
7800: 76 61 72 69 61 62 6c 65 20 6d 79 74 63 68 61 6e variable mytchan
7810: 67 65 73 65 74 73 20 2d 61 72 72 61 79 20 7b 0a gesets -array {.
7820: 09 73 79 6d 3a 3a 62 72 61 6e 63 68 20 7b 7d 0a .sym::branch {}.
7830: 09 73 79 6d 3a 3a 74 61 67 20 20 20 20 7b 7d 0a .sym::tag {}.
7840: 09 72 65 76 20 20 20 20 20 20 20 20 20 7b 7d 0a .rev {}.
7850: 20 20 20 20 7d 0a 09 09 09 09 09 0a 20 20 20 20 }.......
7860: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 69 typevariable myi
7870: 74 65 6d 6d 61 70 20 20 20 20 20 2d 61 72 72 61 temmap -arra
7880: 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 66 72 6f y {} ; # Map fro
7890: 6d 20 69 74 65 6d 73 20 28 74 61 67 67 65 64 29 m items (tagged)
78a0: 0a 09 09 09 09 09 20 20 20 23 20 74 6f 20 74 68 ...... # to th
78b0: 65 20 6c 69 73 74 20 6f 66 20 63 68 61 6e 67 65 e list of change
78c0: 73 65 74 73 0a 09 09 09 09 09 20 20 20 23 20 63 sets...... # c
78d0: 6f 6e 74 61 69 6e 69 6e 67 20 69 74 2e 20 45 61 ontaining it. Ea
78e0: 63 68 20 69 74 65 6d 0a 09 09 09 09 09 20 20 20 ch item......
78f0: 23 20 63 61 6e 20 62 65 20 75 73 65 64 20 62 79 # can be used by
7900: 20 6f 6e 6c 79 20 6f 6e 65 0a 09 09 09 09 09 20 only one......
7910: 20 20 23 20 63 68 61 6e 67 65 73 65 74 2e 0a 20 # changeset..
7920: 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 typevariable
7930: 6d 79 69 64 6d 61 70 20 20 20 2d 61 72 72 61 79 myidmap -array
7940: 20 7b 7d 20 3b 20 23 20 4d 61 70 20 66 72 6f 6d {} ; # Map from
7950: 20 63 68 61 6e 67 65 73 65 74 20 69 64 20 74 6f changeset id to
7960: 0a 09 09 09 09 20 20 20 20 20 20 20 23 20 63 68 ..... # ch
7970: 61 6e 67 65 73 65 74 2e 0a 0a 20 20 20 20 74 79 angeset... ty
7980: 70 65 6d 65 74 68 6f 64 20 61 6c 6c 20 20 20 20 pemethod all
7990: 7b 7d 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24 {} { return $
79a0: 6d 79 63 68 61 6e 67 65 73 65 74 73 20 7d 0a 20 mychangesets }.
79b0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 typemethod of
79c0: 20 20 20 20 20 7b 63 69 64 7d 20 7b 20 72 65 74 {cid} { ret
79d0: 75 72 6e 20 24 6d 79 69 64 6d 61 70 28 24 63 69 urn $myidmap($ci
79e0: 64 29 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 d) }. typemet
79f0: 68 6f 64 20 6f 66 69 74 65 6d 20 7b 69 69 64 7d hod ofitem {iid}
7a00: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 74 65 { return $myite
7a10: 6d 6d 61 70 28 24 69 69 64 29 20 7d 0a 0a 20 20 mmap($iid) }..
7a20: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 72 65 76 typemethod rev
7a30: 20 20 20 20 7b 7d 20 20 20 20 7b 20 72 65 74 75 {} { retu
7a40: 72 6e 20 24 6d 79 74 63 68 61 6e 67 65 73 65 74 rn $mytchangeset
7a50: 73 28 72 65 76 29 20 7d 0a 20 20 20 20 74 79 70 s(rev) }. typ
7a60: 65 6d 65 74 68 6f 64 20 73 79 6d 20 20 20 20 7b emethod sym {
7a70: 7d 20 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 63 } { return [c
7a80: 6f 6e 63 61 74 20 5c 0a 09 09 09 09 09 20 20 24 oncat \...... $
7a90: 7b 6d 79 74 63 68 61 6e 67 65 73 65 74 73 28 73 {mytchangesets(s
7aa0: 79 6d 3a 3a 62 72 61 6e 63 68 29 7d 20 5c 0a 09 ym::branch)} \..
7ab0: 09 09 09 09 20 20 24 7b 6d 79 74 63 68 61 6e 67 .... ${mytchang
7ac0: 65 73 65 74 73 28 73 79 6d 3a 3a 74 61 67 29 7d esets(sym::tag)}
7ad0: 5d 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 ] }.. # # ##
7ae0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
7af0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
7b00: 0a 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 . ## Configur
7b10: 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d ation.. pragm
7b20: 61 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 a -hastypeinfo
7b30: 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 no ; # no typ
7b40: 65 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a e introspection.
7b50: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 pragma -hasi
7b60: 6e 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b nfo no ;
7b70: 20 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 # no object int
7b80: 72 6f 73 70 65 63 74 69 6f 6e 0a 0a 20 20 20 20 rospection..
7b90: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
7ba0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
7bb0: 23 23 23 23 23 23 23 0a 7d 0a 0a 23 23 0a 23 23 #######.}..##.##
7bc0: 20 4e 4f 54 45 3a 20 54 68 65 20 73 75 63 63 65 NOTE: The succe
7bd0: 73 73 6f 72 20 61 6e 64 20 70 72 65 64 65 63 65 ssor and predece
7be0: 73 73 6f 72 20 6d 65 74 68 6f 64 73 20 64 65 66 ssor methods def
7bf0: 69 6e 65 64 20 62 79 20 74 68 65 20 63 6c 61 73 ined by the clas
7c00: 73 65 73 0a 23 23 20 20 20 20 20 20 20 62 65 6c ses.## bel
7c10: 6f 77 20 61 72 65 20 2d 2d 20 62 6f 74 74 6c 65 ow are -- bottle
7c20: 20 6e 65 63 6b 73 20 2d 2d 2e 20 4c 6f 6f 6b 20 necks --. Look
7c30: 66 6f 72 20 77 61 79 73 20 74 6f 20 6d 61 6b 65 for ways to make
7c40: 20 74 68 65 20 53 51 4c 0a 23 23 20 20 20 20 20 the SQL.##
7c50: 20 20 66 61 73 74 65 72 2e 0a 23 23 0a 0a 23 20 faster..##..#
7c60: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
7c70: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
7c80: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
7c90: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 48 ###########.## H
7ca0: 65 6c 70 65 72 20 73 69 6e 67 6c 65 74 6f 6e 2e elper singleton.
7cb0: 20 43 6f 6d 6d 61 6e 64 73 20 66 6f 72 20 72 65 Commands for re
7cc0: 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 vision changeset
7cd0: 73 2e 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a s...snit::type :
7ce0: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
7cf0: 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 ort::cvs::projec
7d00: 74 3a 3a 72 65 76 3a 3a 72 65 76 20 7b 0a 20 20 t::rev::rev {.
7d10: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 79 72 typemethod byr
7d20: 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 evision {} { ret
7d30: 75 72 6e 20 31 20 7d 0a 20 20 20 20 74 79 70 65 urn 1 }. type
7d40: 6d 65 74 68 6f 64 20 62 79 73 79 6d 62 6f 6c 20 method bysymbol
7d50: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 {} { return 0
7d60: 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 }. typemethod
7d70: 20 69 73 74 61 67 20 20 20 20 20 20 7b 7d 20 7b istag {} {
7d80: 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20 return 0 }.
7d90: 74 79 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61 typemethod isbra
7da0: 6e 63 68 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 nch {} { retur
7db0: 6e 20 30 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d n 0 }.. typem
7dc0: 65 74 68 6f 64 20 73 74 72 20 7b 72 65 76 69 73 ethod str {revis
7dd0: 69 6f 6e 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a ion} {..struct::
7de0: 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 73 74 61 list assign [sta
7df0: 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 te run {.. SE
7e00: 4c 45 43 54 20 52 2e 72 65 76 2c 20 46 2e 6e 61 LECT R.rev, F.na
7e10: 6d 65 2c 20 50 2e 6e 61 6d 65 0a 09 20 20 20 20 me, P.name..
7e20: 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 FROM revision
7e30: 52 2c 20 66 69 6c 65 20 46 2c 20 70 72 6f 6a 65 R, file F, proje
7e40: 63 74 20 50 0a 09 20 20 20 20 57 48 45 52 45 20 ct P.. WHERE
7e50: 20 52 2e 72 69 64 20 3d 20 24 72 65 76 69 73 69 R.rid = $revisi
7e60: 6f 6e 20 2d 2d 20 46 69 6e 64 20 73 70 65 63 69 on -- Find speci
7e70: 66 69 65 64 20 66 69 6c 65 20 72 65 76 69 73 69 fied file revisi
7e80: 6f 6e 0a 09 20 20 20 20 41 4e 44 20 20 20 20 46 on.. AND F
7e90: 2e 66 69 64 20 3d 20 52 2e 66 69 64 20 20 20 20 .fid = R.fid
7ea0: 20 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 20 -- Get file of
7eb0: 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 20 20 the revision..
7ec0: 20 20 41 4e 44 20 20 20 20 50 2e 70 69 64 20 3d AND P.pid =
7ed0: 20 46 2e 70 69 64 20 20 20 20 20 2d 2d 20 47 65 F.pid -- Ge
7ee0: 74 20 70 72 6f 6a 65 63 74 20 6f 66 20 74 68 65 t project of the
7ef0: 20 66 69 6c 65 2e 0a 09 7d 5d 20 72 65 76 6e 72 file...}] revnr
7f00: 20 66 6e 61 6d 65 20 70 6e 61 6d 65 0a 09 72 65 fname pname..re
7f10: 74 75 72 6e 20 22 24 70 6e 61 6d 65 2f 24 7b 72 turn "$pname/${r
7f20: 65 76 6e 72 7d 3a 3a 24 66 6e 61 6d 65 22 0a 20 evnr}::$fname".
7f30: 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 }.. # resu
7f40: 6c 74 20 3d 20 6c 69 73 74 20 28 6d 69 6e 74 69 lt = list (minti
7f50: 6d 65 2c 20 6d 61 78 74 69 6d 65 29 0a 20 20 20 me, maxtime).
7f60: 20 74 79 70 65 6d 65 74 68 6f 64 20 74 69 6d 65 typemethod time
7f70: 72 61 6e 67 65 20 7b 69 74 65 6d 73 7d 20 7b 0a range {items} {.
7f80: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
7f90: 6f 69 6e 20 24 69 74 65 6d 73 20 7b 27 2c 27 7d oin $items {','}
7fa0: 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 61 ]')..return [sta
7fb0: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e te run [subst -n
7fc0: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 ocommands -nobac
7fd0: 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 kslashes {..
7fe0: 53 45 4c 45 43 54 20 4d 49 4e 28 52 2e 64 61 74 SELECT MIN(R.dat
7ff0: 65 29 2c 20 4d 41 58 28 52 2e 64 61 74 65 29 0a e), MAX(R.date).
8000: 09 20 20 20 20 46 52 4f 4d 20 72 65 76 69 73 69 . FROM revisi
8010: 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 on R.. WHERE
8020: 52 2e 72 69 64 20 49 4e 20 24 74 68 65 73 65 74 R.rid IN $theset
8030: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
8040: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
8050: 65 72 65 73 74 0a 09 7d 5d 5d 0a 20 20 20 20 7d erest..}]]. }
8060: 0a 0a 20 20 20 20 23 20 76 61 72 28 64 76 29 20 .. # var(dv)
8070: 3d 20 64 69 63 74 20 28 72 65 76 69 73 69 6f 6e = dict (revision
8080: 20 2d 3e 20 6c 69 73 74 20 28 72 65 76 69 73 69 -> list (revisi
8090: 6f 6e 29 29 0a 20 20 20 20 74 79 70 65 6d 65 74 on)). typemet
80a0: 68 6f 64 20 69 6e 74 65 72 6e 61 6c 73 75 63 63 hod internalsucc
80b0: 65 73 73 6f 72 73 20 7b 64 76 20 72 65 76 69 73 essors {dv revis
80c0: 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 61 72 20 31 ions} {..upvar 1
80d0: 20 24 64 76 20 64 65 70 65 6e 64 65 6e 63 69 65 $dv dependencie
80e0: 73 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 s..set theset ('
80f0: 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 [join $revisions
8100: 20 7b 27 2c 27 7d 5d 27 29 0a 0a 09 6c 6f 67 20 {','}]')...log
8110: 77 72 69 74 65 20 31 34 20 63 73 65 74 20 69 6e write 14 cset in
8120: 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 ternalsuccessors
8130: 0a 0a 09 23 20 53 65 65 20 27 73 75 63 63 65 73 ...# See 'succes
8140: 73 6f 72 73 27 20 62 65 6c 6f 77 20 66 6f 72 20 sors' below for
8150: 74 68 65 20 6d 61 69 6e 20 65 78 70 6c 61 6e 61 the main explana
8160: 74 69 6f 6e 20 6f 66 0a 09 23 20 74 68 65 20 76 tion of..# the v
8170: 61 72 69 6f 75 73 20 63 61 73 65 73 2e 20 54 68 arious cases. Th
8180: 69 73 20 70 69 65 63 65 20 69 73 20 73 70 65 63 is piece is spec
8190: 69 61 6c 20 69 6e 20 74 68 61 74 20 69 74 0a 09 ial in that it..
81a0: 23 20 72 65 73 74 72 69 63 74 73 20 74 68 65 20 # restricts the
81b0: 73 75 63 63 65 73 73 6f 72 73 20 77 65 20 6c 6f successors we lo
81c0: 6f 6b 20 66 6f 72 20 74 6f 20 74 68 65 20 73 61 ok for to the sa
81d0: 6d 65 20 73 65 74 20 6f 66 0a 09 23 20 72 65 76 me set of..# rev
81e0: 69 73 69 6f 6e 73 20 77 65 20 73 74 61 72 74 20 isions we start
81f0: 66 72 6f 6d 2e 20 53 65 6e 73 69 62 6c 65 20 61 from. Sensible a
8200: 73 20 77 65 20 61 72 65 20 6c 6f 6f 6b 69 6e 67 s we are looking
8210: 20 66 6f 72 0a 09 23 20 63 68 61 6e 67 65 73 65 for..# changese
8220: 74 20 69 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e t internal depen
8230: 64 65 6e 63 69 65 73 2e 0a 0a 09 61 72 72 61 79 dencies....array
8240: 20 73 65 74 20 64 65 70 20 7b 7d 0a 0a 09 66 6f set dep {}...fo
8250: 72 65 61 63 68 20 7b 72 69 64 20 63 68 69 6c 64 reach {rid child
8260: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 } [state run [su
8270: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
8280: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
8290: 0a 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d . -- (1) Prim
82a0: 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 ary child.. S
82b0: 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 2e 63 ELECT R.rid, R.c
82c0: 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 hild.. FROM
82d0: 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 revision R..
82e0: 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 WHERE R.rid
82f0: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
8300: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 - Restrict to re
8310: 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 visions of inter
8320: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
8330: 52 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e R.child IS NOT N
8340: 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 ULL -- Has pr
8350: 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 imary child..
8360: 20 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 AND R.child
8370: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
8380: 2d 20 57 68 69 63 68 20 69 73 20 61 6c 73 6f 20 - Which is also
8390: 6f 66 20 69 6e 74 65 72 65 73 74 0a 20 20 20 20 of interest.
83a0: 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 32 29 UNION. -- (2)
83b0: 20 53 65 63 6f 6e 64 61 72 79 20 28 62 72 61 6e Secondary (bran
83c0: 63 68 29 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 ch) children..
83d0: 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 SELECT R.rid,
83e0: 42 2e 62 72 69 64 0a 09 20 20 20 20 46 52 4f 4d B.brid.. FROM
83f0: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 revision R, r
8400: 65 76 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 evisionbranchchi
8410: 6c 64 72 65 6e 20 42 0a 09 20 20 20 20 57 48 45 ldren B.. WHE
8420: 52 45 20 20 52 2e 72 69 64 20 20 20 49 4e 20 24 RE R.rid IN $
8430: 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 theset -- Re
8440: 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 strict to revisi
8450: 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a ons of interest.
8460: 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e 72 69 . AND R.ri
8470: 64 20 3d 20 42 2e 72 69 64 20 20 20 20 20 20 20 d = B.rid
8480: 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 73 75 62 -- Select sub
8490: 73 65 74 20 6f 66 20 62 72 61 6e 63 68 20 63 68 set of branch ch
84a0: 69 6c 64 72 65 6e 0a 09 20 20 20 20 41 4e 44 20 ildren.. AND
84b0: 20 20 20 42 2e 62 72 69 64 20 49 4e 20 24 74 68 B.brid IN $th
84c0: 65 73 65 74 20 20 20 20 20 20 2d 2d 20 57 68 69 eset -- Whi
84d0: 63 68 20 69 73 20 61 6c 73 6f 20 6f 66 20 69 6e ch is also of in
84e0: 74 65 72 65 73 74 0a 20 20 20 20 55 4e 49 4f 4e terest. UNION
84f0: 0a 20 20 20 20 2d 2d 20 28 34 29 20 43 68 69 6c . -- (4) Chil
8500: 64 20 6f 66 20 74 72 75 6e 6b 20 72 6f 6f 74 20 d of trunk root
8510: 73 75 63 63 65 73 73 6f 72 20 6f 66 20 6c 61 73 successor of las
8520: 74 20 4e 54 44 42 20 6f 6e 20 74 72 75 6e 6b 2e t NTDB on trunk.
8530: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
8540: 69 64 2c 20 52 41 2e 63 68 69 6c 64 0a 09 20 20 id, RA.child..
8550: 20 20 46 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20 FROM revision
8560: 52 2c 20 72 65 76 69 73 69 6f 6e 20 52 41 0a 09 R, revision RA..
8570: 20 20 20 20 57 48 45 52 45 20 52 2e 72 69 64 20 WHERE R.rid
8580: 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 IN $theset
8590: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
85a0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e revisions of in
85b0: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 terest.. AND
85c0: 20 20 52 2e 69 73 64 65 66 61 75 6c 74 20 20 20 R.isdefault
85d0: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 -- Res
85e0: 74 72 69 63 74 20 74 6f 20 4e 54 44 42 0a 09 20 trict to NTDB..
85f0: 20 20 20 41 4e 44 20 20 20 52 2e 64 62 63 68 69 AND R.dbchi
8600: 6c 64 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 ld IS NOT NULL
8610: 20 2d 2d 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 -- and last NTD
8620: 42 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 B belonging to t
8630: 72 75 6e 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 runk.. AND
8640: 52 41 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 RA.rid = R.dbchi
8650: 6c 64 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 ld -- Go di
8660: 72 65 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 rectly to trunk
8670: 72 6f 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 root.. AND
8680: 52 41 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 RA.child IS NOT
8690: 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 NULL -- Has p
86a0: 72 69 6d 61 72 79 20 63 68 69 6c 64 2e 0a 20 20 rimary child..
86b0: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
86c0: 52 41 2e 63 68 69 6c 64 20 49 4e 20 24 74 68 65 RA.child IN $the
86d0: 73 65 74 20 20 20 20 20 2d 2d 20 57 68 69 63 68 set -- Which
86e0: 20 69 73 20 61 6c 73 6f 20 6f 66 20 69 6e 74 65 is also of inte
86f0: 72 65 73 74 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 rest..}]] {..
8700: 20 23 20 43 6f 6e 73 69 64 65 72 20 6d 6f 76 69 # Consider movi
8710: 6e 67 20 74 68 69 73 20 74 6f 20 74 68 65 20 69 ng this to the i
8720: 6e 74 65 67 72 69 74 79 20 6d 6f 64 75 6c 65 2e ntegrity module.
8730: 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 .. integrity
8740: 61 73 73 65 72 74 20 7b 24 72 69 64 20 21 3d 20 assert {$rid !=
8750: 24 63 68 69 6c 64 7d 20 7b 52 65 76 69 73 69 6f $child} {Revisio
8760: 6e 20 24 72 69 64 20 64 65 70 65 6e 64 73 20 6f n $rid depends o
8770: 6e 20 69 74 73 65 6c 66 2e 7d 0a 09 20 20 20 20 n itself.}..
8780: 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e lappend dependen
8790: 63 69 65 73 28 24 72 69 64 29 20 24 63 68 69 6c cies($rid) $chil
87a0: 64 0a 09 20 20 20 20 73 65 74 20 64 65 70 28 24 d.. set dep($
87b0: 72 69 64 2c 24 63 68 69 6c 64 29 20 2e 0a 09 7d rid,$child) ...}
87c0: 0a 0a 09 23 20 54 68 65 20 73 71 6c 20 73 74 61 ...# The sql sta
87d0: 74 65 6d 65 6e 74 73 20 61 62 6f 76 65 20 6c 6f tements above lo
87e0: 6f 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 64 69 72 oks only for dir
87f0: 65 63 74 20 64 65 70 65 6e 64 65 6e 63 69 65 73 ect dependencies
8800: 0a 09 23 20 62 65 74 77 65 65 6e 20 72 65 76 69 ..# between revi
8810: 73 69 6f 6e 20 69 6e 20 74 68 65 20 63 68 61 6e sion in the chan
8820: 67 65 73 65 74 2e 20 48 6f 77 65 76 65 72 20 64 geset. However d
8830: 75 65 20 74 6f 20 74 68 65 0a 09 23 20 76 61 67 ue to the..# vag
8840: 61 72 69 65 73 20 6f 66 20 6d 65 74 61 20 64 61 aries of meta da
8850: 74 61 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c ta it is possibl
8860: 65 20 66 6f 72 20 74 77 6f 20 72 65 76 69 73 69 e for two revisi
8870: 6f 6e 73 20 6f 66 0a 09 23 20 74 68 65 20 73 61 ons of..# the sa
8880: 6d 65 20 66 69 6c 65 20 74 6f 20 65 6e 64 20 75 me file to end u
8890: 70 20 69 6e 20 74 68 65 20 73 61 6d 65 20 63 68 p in the same ch
88a0: 61 6e 67 65 73 65 74 2c 20 77 69 74 68 6f 75 74 angeset, without
88b0: 20 61 0a 09 23 20 64 69 72 65 63 74 20 64 65 70 a..# direct dep
88c0: 65 6e 64 65 6e 63 79 20 62 65 74 77 65 65 6e 20 endency between
88d0: 74 68 65 6d 2e 20 48 6f 77 65 76 65 72 20 77 65 them. However we
88e0: 20 6b 6e 6f 77 20 74 68 61 74 20 74 68 65 72 65 know that there
88f0: 0a 09 23 20 68 61 73 20 74 6f 20 62 65 20 61 20 ..# has to be a
8900: 61 6e 20 69 6e 64 69 72 65 63 74 20 64 65 70 65 an indirect depe
8910: 6e 64 65 6e 63 79 2c 20 62 65 20 69 74 20 74 68 ndency, be it th
8920: 72 6f 75 67 68 20 70 72 69 6d 61 72 79 0a 09 23 rough primary..#
8930: 20 63 68 69 6c 64 72 65 6e 2c 20 62 72 61 6e 63 children, branc
8940: 68 20 63 68 69 6c 64 72 65 6e 2c 20 6f 72 20 61 h children, or a
8950: 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 74 68 65 combination the
8960: 72 65 6f 66 2e 0a 0a 09 23 20 57 65 20 6e 6f 77 reof....# We now
8970: 20 66 69 6c 6c 20 69 6e 20 74 68 65 73 65 20 70 fill in these p
8980: 73 65 75 64 6f 2d 64 65 70 65 6e 64 65 6e 63 69 seudo-dependenci
8990: 65 73 2c 20 69 66 20 6e 6f 20 73 75 63 68 0a 09 es, if no such..
89a0: 23 20 64 65 70 65 6e 64 65 6e 63 79 20 65 78 69 # dependency exi
89b0: 73 74 73 20 61 6c 72 65 61 64 79 2e 20 54 68 65 sts already. The
89c0: 20 64 69 72 65 63 74 69 6f 6e 20 6f 66 20 74 68 direction of th
89d0: 65 20 64 65 70 65 6e 64 65 6e 63 79 0a 09 23 20 e dependency..#
89e0: 69 73 20 61 63 74 75 61 6c 6c 79 20 69 72 72 65 is actually irre
89f0: 6c 65 76 61 6e 74 20 66 6f 72 20 74 68 69 73 2e levant for this.
8a00: 0a 0a 09 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 ...# NOTE: This
8a10: 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f is different fro
8a20: 6d 20 63 76 73 32 73 76 6e 2e 20 4f 75 72 20 73 m cvs2svn. Our s
8a30: 70 69 72 69 74 75 61 6c 20 61 6e 63 65 73 74 6f piritual ancesto
8a40: 72 0a 09 23 20 64 6f 65 73 20 6e 6f 74 20 75 73 r..# does not us
8a50: 65 20 73 75 63 68 20 70 73 65 75 64 6f 2d 64 65 e such pseudo-de
8a60: 70 65 6e 64 65 6e 63 69 65 73 2c 20 68 6f 77 65 pendencies, howe
8a70: 76 65 72 20 69 74 20 75 73 65 73 20 61 0a 09 23 ver it uses a..#
8a80: 20 43 4f 4d 4d 49 54 5f 54 48 52 45 53 48 4f 4c COMMIT_THRESHOL
8a90: 44 2c 20 61 20 74 69 6d 65 20 69 6e 74 65 72 76 D, a time interv
8aa0: 61 6c 20 63 6f 6d 6d 69 74 73 20 73 68 6f 75 6c al commits shoul
8ab0: 64 20 66 61 6c 6c 2e 20 54 68 69 73 0a 09 23 20 d fall. This..#
8ac0: 77 69 6c 6c 20 67 72 65 61 74 6c 79 20 72 65 64 will greatly red
8ad0: 75 63 65 73 20 74 68 65 20 72 69 73 6b 20 6f 66 uces the risk of
8ae0: 20 67 65 74 74 69 6e 67 20 66 61 72 20 73 65 70 getting far sep
8af0: 61 72 61 74 65 64 0a 09 23 20 72 65 76 69 73 69 arated..# revisi
8b00: 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 ons of the same
8b10: 66 69 6c 65 20 69 6e 74 6f 20 6f 6e 65 20 63 68 file into one ch
8b20: 61 6e 67 65 73 65 74 2e 0a 0a 09 23 20 57 65 20 angeset....# We
8b30: 61 6c 6c 6f 77 20 72 65 76 69 73 69 6f 6e 73 20 allow revisions
8b40: 74 6f 20 62 65 20 66 61 72 20 61 70 61 72 74 20 to be far apart
8b50: 69 6e 20 74 69 6d 65 20 69 6e 20 74 68 65 20 73 in time in the s
8b60: 61 6d 65 0a 09 23 20 63 68 61 6e 67 65 73 65 74 ame..# changeset
8b70: 2c 20 62 75 74 20 69 6e 20 74 75 72 6e 20 6e 65 , but in turn ne
8b80: 65 64 20 74 68 65 20 70 73 65 75 64 6f 2d 64 65 ed the pseudo-de
8b90: 70 65 6e 64 65 6e 63 69 65 73 20 74 6f 0a 09 23 pendencies to..#
8ba0: 20 68 61 6e 64 6c 65 20 74 68 69 73 2e 0a 0a 09 handle this....
8bb0: 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 log write 14 cse
8bc0: 74 20 70 73 65 75 64 6f 2d 69 6e 74 65 72 6e 61 t pseudo-interna
8bd0: 6c 73 75 63 63 65 73 73 6f 72 73 0a 0a 09 61 72 lsuccessors...ar
8be0: 72 61 79 20 73 65 74 20 66 69 64 73 20 7b 7d 0a ray set fids {}.
8bf0: 09 66 6f 72 65 61 63 68 20 7b 72 69 64 20 66 69 .foreach {rid fi
8c00: 64 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 d} [state run [s
8c10: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
8c20: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
8c30: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e {.. SELECT R.
8c40: 72 69 64 2c 20 52 2e 66 69 64 0a 20 20 20 20 20 rid, R.fid.
8c50: 20 20 20 20 20 20 20 46 52 4f 4d 20 20 20 72 65 FROM re
8c60: 76 69 73 69 6f 6e 20 52 0a 20 20 20 20 20 20 20 vision R.
8c70: 20 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 WHERE R.ri
8c80: 64 20 49 4e 20 24 74 68 65 73 65 74 0a 09 7d 5d d IN $theset..}]
8c90: 5d 20 7b 20 6c 61 70 70 65 6e 64 20 66 69 64 73 ] { lappend fids
8ca0: 28 24 66 69 64 29 20 24 72 69 64 20 7d 0a 0a 09 ($fid) $rid }...
8cb0: 66 6f 72 65 61 63 68 20 7b 66 69 64 20 72 69 64 foreach {fid rid
8cc0: 73 7d 20 5b 61 72 72 61 79 20 67 65 74 20 66 69 s} [array get fi
8cd0: 64 73 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b ds] {.. if {[
8ce0: 6c 6c 65 6e 67 74 68 20 24 72 69 64 73 5d 20 3c llength $rids] <
8cf0: 20 32 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 2} continue..
8d00: 20 20 66 6f 72 65 61 63 68 20 61 20 24 72 69 64 foreach a $rid
8d10: 73 20 7b 0a 09 09 66 6f 72 65 61 63 68 20 62 20 s {...foreach b
8d20: 24 72 69 64 73 20 7b 0a 09 09 20 20 20 20 69 66 $rids {... if
8d30: 20 7b 24 61 20 3d 3d 20 24 62 7d 20 63 6f 6e 74 {$a == $b} cont
8d40: 69 6e 75 65 0a 09 09 20 20 20 20 69 66 20 7b 5b inue... if {[
8d50: 69 6e 66 6f 20 65 78 69 73 74 73 20 64 65 70 28 info exists dep(
8d60: 24 61 2c 24 62 29 5d 7d 20 63 6f 6e 74 69 6e 75 $a,$b)]} continu
8d70: 65 0a 09 09 20 20 20 20 69 66 20 7b 5b 69 6e 66 e... if {[inf
8d80: 6f 20 65 78 69 73 74 73 20 64 65 70 28 24 62 2c o exists dep($b,
8d90: 24 61 29 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 $a)]} continue..
8da0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 70 . lappend dep
8db0: 65 6e 64 65 6e 63 69 65 73 28 24 61 29 20 24 62 endencies($a) $b
8dc0: 0a 09 09 20 20 20 20 73 65 74 20 64 65 70 28 24 ... set dep($
8dd0: 61 2c 24 62 29 20 2e 0a 09 09 20 20 20 20 73 65 a,$b) .... se
8de0: 74 20 64 65 70 28 24 62 2c 24 61 29 20 2e 0a 09 t dep($b,$a) ...
8df0: 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 6c .}.. }..}...l
8e00: 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 og write 14 cset
8e10: 20 63 6f 6d 70 6c 65 74 65 0a 09 72 65 74 75 72 complete..retur
8e20: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 n. }.. # r
8e30: 65 73 75 6c 74 20 3d 20 34 2d 6c 69 73 74 20 28 esult = 4-list (
8e40: 69 74 65 6d 74 79 70 65 20 69 74 65 6d 69 64 20 itemtype itemid
8e50: 6e 65 78 74 69 74 65 6d 74 79 70 65 20 6e 65 78 nextitemtype nex
8e60: 74 69 74 65 6d 69 64 20 2e 2e 2e 29 0a 20 20 20 titemid ...).
8e70: 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 6f 70 typemethod loop
8e80: 73 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a s {revisions} {.
8e90: 09 23 20 4e 6f 74 65 3a 20 54 61 67 73 20 61 6e .# Note: Tags an
8ea0: 64 20 62 72 61 6e 63 68 65 73 20 63 61 6e 6e 6f d branches canno
8eb0: 74 20 63 61 75 73 65 20 74 68 65 20 6c 6f 6f 70 t cause the loop
8ec0: 2e 20 54 68 65 69 72 20 69 64 27 73 2c 0a 09 23 . Their id's,..#
8ed0: 20 62 65 69 6e 67 20 6f 66 20 61 20 66 75 6e 64 being of a fund
8ee0: 61 6d 65 6e 74 61 6c 6c 79 20 64 69 66 66 65 72 amentally differ
8ef0: 65 6e 74 20 74 79 70 65 20 74 68 61 6e 20 74 68 ent type than th
8f00: 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20 63 e revisions..# c
8f10: 6f 6d 69 6e 67 20 69 6e 20 63 61 6e 6e 6f 74 20 oming in cannot
8f20: 62 65 20 69 6e 20 74 68 65 20 73 65 74 2e 0a 0a be in the set...
8f30: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
8f40: 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b oin $revisions {
8f50: 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 ','}]')..return
8f60: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
8f70: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
8f80: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
8f90: 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d 61 -- (1) Prima
8fa0: 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 45 ry child.. SE
8fb0: 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 2e 63 68 LECT R.rid, R.ch
8fc0: 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 ild.. FROM
8fd0: 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 revision R..
8fe0: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 WHERE R.rid I
8ff0: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
9000: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
9010: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
9020: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 st.. AND R
9030: 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55 .child IS NOT NU
9040: 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69 LL -- Has pri
9050: 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 mary child..
9060: 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49 AND R.child I
9070: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
9080: 20 4c 6f 6f 70 0a 09 20 20 20 20 2d 2d 0a 09 20 Loop.. --..
9090: 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 2d 2d UNION.. --
90a0: 20 28 32 29 20 53 65 63 6f 6e 64 61 72 79 20 28 (2) Secondary (
90b0: 62 72 61 6e 63 68 29 20 63 68 69 6c 64 72 65 6e branch) children
90c0: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
90d0: 69 64 2c 20 42 2e 62 72 69 64 0a 09 20 20 20 20 id, B.brid..
90e0: 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 FROM revision
90f0: 52 2c 20 72 65 76 69 73 69 6f 6e 62 72 61 6e 63 R, revisionbranc
9100: 68 63 68 69 6c 64 72 65 6e 20 42 0a 09 20 20 20 hchildren B..
9110: 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 WHERE R.rid
9120: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
9130: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 - Restrict to re
9140: 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 visions of inter
9150: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
9160: 52 2e 72 69 64 20 3d 20 42 2e 72 69 64 20 20 20 R.rid = B.rid
9170: 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 -- Select
9180: 20 73 75 62 73 65 74 20 6f 66 20 62 72 61 6e 63 subset of branc
9190: 68 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 h children..
91a0: 41 4e 44 20 20 20 20 42 2e 72 69 64 20 20 20 49 AND B.rid I
91b0: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
91c0: 20 4c 6f 6f 70 0a 09 20 20 20 20 2d 2d 0a 09 20 Loop.. --..
91d0: 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 2d 2d UNION.. --
91e0: 20 28 34 29 20 43 68 69 6c 64 20 6f 66 20 74 72 (4) Child of tr
91f0: 75 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 73 unk root success
9200: 6f 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 20 or of last NTDB
9210: 6f 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53 on trunk... S
9220: 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 41 2e ELECT R.rid, RA.
9230: 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 child.. FROM
9240: 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 revision R, re
9250: 76 69 73 69 6f 6e 20 52 41 0a 09 20 20 20 20 57 vision RA.. W
9260: 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 20 49 HERE R.rid I
9270: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
9280: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
9290: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
92a0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 st.. AND R
92b0: 2e 69 73 64 65 66 61 75 6c 74 20 20 20 20 20 20 .isdefault
92c0: 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 -- Restri
92d0: 63 74 20 74 6f 20 4e 54 44 42 0a 09 20 20 20 20 ct to NTDB..
92e0: 41 4e 44 20 20 20 20 52 2e 64 62 63 68 69 6c 64 AND R.dbchild
92f0: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 2d IS NOT NULL -
9300: 2d 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 20 - and last NTDB
9310: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 75 belonging to tru
9320: 6e 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 nk.. AND R
9330: 41 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 6c A.rid = R.dbchil
9340: 64 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 72 d -- Go dir
9350: 65 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 72 ectly to trunk r
9360: 6f 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 oot.. AND
9370: 52 41 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 RA.child IS NOT
9380: 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 NULL -- Has p
9390: 72 69 6d 61 72 79 20 63 68 69 6c 64 2e 0a 09 20 rimary child...
93a0: 20 20 20 41 4e 44 20 20 20 20 52 41 2e 63 68 69 AND RA.chi
93b0: 6c 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 ld IN $theset
93c0: 20 20 2d 2d 20 4c 6f 6f 70 0a 09 7d 5d 5d 0a 20 -- Loop..}]].
93d0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 76 61 72 28 }.. # var(
93e0: 64 76 29 20 3d 20 64 69 63 74 20 28 69 74 65 6d dv) = dict (item
93f0: 20 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 29 -> list (item))
9400: 2c 20 69 74 65 6d 20 20 3d 20 6c 69 73 74 20 28 , item = list (
9410: 74 79 70 65 20 69 64 29 0a 20 20 20 20 74 79 70 type id). typ
9420: 65 6d 65 74 68 6f 64 20 73 75 63 63 65 73 73 6f emethod successo
9430: 72 73 20 7b 64 76 20 72 65 76 69 73 69 6f 6e 73 rs {dv revisions
9440: 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24 64 76 } {..upvar 1 $dv
9450: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 73 dependencies..s
9460: 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 et theset ('[joi
9470: 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c n $revisions {',
9480: 27 7d 5d 27 29 0a 0a 09 23 20 54 68 65 20 66 6f '}]')...# The fo
9490: 6c 6c 6f 77 69 6e 67 20 63 61 73 65 73 20 73 70 llowing cases sp
94a0: 65 63 69 66 79 20 77 68 65 6e 20 61 20 72 65 76 ecify when a rev
94b0: 69 73 69 6f 6e 20 53 20 69 73 20 61 20 73 75 63 ision S is a suc
94c0: 63 65 73 73 6f 72 0a 09 23 20 6f 66 20 61 20 72 cessor..# of a r
94d0: 65 76 69 73 69 6f 6e 20 52 2e 20 45 61 63 68 20 evision R. Each
94e0: 6f 66 20 74 68 65 20 63 61 73 65 73 20 74 72 61 of the cases tra
94f0: 6e 73 6c 61 74 65 73 20 69 6e 74 6f 20 6f 6e 65 nslates into one
9500: 20 6f 66 0a 09 23 20 74 68 65 20 62 72 61 6e 63 of..# the branc
9510: 68 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20 55 hes of the SQL U
9520: 4e 49 4f 4e 20 63 6f 6d 69 6e 67 20 62 65 6c 6f NION coming belo
9530: 77 2e 0a 09 23 0a 09 23 20 28 31 29 20 53 20 63 w...#..# (1) S c
9540: 61 6e 20 62 65 20 61 20 70 72 69 6d 61 72 79 20 an be a primary
9550: 63 68 69 6c 64 20 6f 66 20 52 2c 20 69 2e 65 2e child of R, i.e.
9560: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 4c 4f 44 in the same LOD
9570: 2e 20 52 0a 09 23 20 20 20 20 20 72 65 66 65 72 . R..# refer
9580: 65 6e 63 65 73 20 53 20 64 69 72 65 63 74 6c 79 ences S directly
9590: 2e 20 52 2e 63 68 69 6c 64 20 3d 20 53 28 2e 72 . R.child = S(.r
95a0: 69 64 29 2c 20 69 66 20 69 74 20 65 78 69 73 74 id), if it exist
95b0: 73 2e 0a 09 23 0a 09 23 20 28 32 29 20 53 20 63 s...#..# (2) S c
95c0: 61 6e 20 62 65 20 61 20 73 65 63 6f 6e 64 61 72 an be a secondar
95d0: 79 2c 20 69 2e 65 2e 20 62 72 61 6e 63 68 2c 20 y, i.e. branch,
95e0: 63 68 69 6c 64 20 6f 66 20 52 2e 20 48 65 72 65 child of R. Here
95f0: 20 74 68 65 0a 09 23 20 20 20 20 20 6c 69 6e 6b the..# link
9600: 20 69 73 20 6d 61 64 65 20 74 68 72 6f 75 67 68 is made through
9610: 20 74 68 65 20 68 65 6c 70 65 72 20 74 61 62 6c the helper tabl
9620: 65 0a 09 23 20 20 20 20 20 52 45 56 49 53 49 4f e..# REVISIO
9630: 4e 42 52 41 4e 43 48 43 48 49 4c 44 52 45 4e 2e NBRANCHCHILDREN.
9640: 20 52 2e 72 69 64 20 2d 3e 20 52 42 43 2e 72 69 R.rid -> RBC.ri
9650: 64 2c 20 52 42 43 2e 62 72 69 64 20 3d 0a 09 23 d, RBC.brid =..#
9660: 20 20 20 20 20 53 28 2e 72 69 64 29 0a 09 23 0a S(.rid)..#.
9670: 09 23 20 28 33 29 20 4f 72 69 67 69 6e 61 6c 6c .# (3) Originall
9680: 79 20 74 68 69 73 20 75 73 65 20 63 61 73 65 20 y this use case
9690: 64 65 66 69 6e 65 64 20 74 68 65 20 72 6f 6f 74 defined the root
96a0: 20 6f 66 20 61 20 64 65 74 61 63 68 65 64 0a 09 of a detached..
96b0: 23 20 20 20 20 20 4e 54 44 42 20 61 73 20 74 68 # NTDB as th
96c0: 65 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 74 e successor of t
96d0: 68 65 20 74 72 75 6e 6b 20 72 6f 6f 74 2e 20 54 he trunk root. T
96e0: 68 69 73 20 6c 65 61 64 73 20 74 6f 20 61 0a 09 his leads to a..
96f0: 23 20 20 20 20 20 62 61 64 20 74 61 6e 67 6c 65 # bad tangle
9700: 20 6c 61 74 65 72 20 6f 6e 2e 20 57 69 74 68 20 later on. With
9710: 61 20 64 65 74 61 63 68 65 64 20 4e 54 44 42 20 a detached NTDB
9720: 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 09 23 20 the original..#
9730: 20 20 20 20 74 72 75 6e 6b 20 72 6f 6f 74 20 72 trunk root r
9740: 65 76 69 73 69 6f 6e 20 77 61 73 20 72 65 6d 6f evision was remo
9750: 76 65 64 20 61 73 20 69 72 72 65 6c 65 76 61 6e ved as irrelevan
9760: 74 2c 20 61 6c 6c 6f 77 69 6e 67 0a 09 23 20 20 t, allowing..#
9770: 20 20 20 74 68 65 20 6e 6f 6d 69 6e 61 6c 20 72 the nominal r
9780: 6f 6f 74 20 74 6f 20 62 65 20 6c 61 74 65 72 20 oot to be later
9790: 69 6e 20 74 69 6d 65 20 74 68 61 6e 20 74 68 65 in time than the
97a0: 20 4e 54 44 42 0a 09 23 20 20 20 20 20 72 6f 6f NTDB..# roo
97b0: 74 2e 20 4e 6f 77 20 73 65 74 74 69 6e 67 20 74 t. Now setting t
97c0: 68 69 73 20 64 65 70 65 6e 64 65 6e 63 79 20 77 his dependency w
97d0: 69 6c 6c 20 62 65 20 62 61 63 6b 77 61 72 64 20 ill be backward
97e0: 69 6e 0a 09 23 20 20 20 20 20 74 69 6d 65 2e 20 in..# time.
97f0: 52 45 4d 4f 56 45 44 2e 0a 09 23 0a 09 23 20 28 REMOVED...#..# (
9800: 34 29 20 49 66 20 52 20 69 73 20 74 68 65 20 6c 4) If R is the l
9810: 61 73 74 20 6f 66 20 74 68 65 20 4e 54 44 42 20 ast of the NTDB
9820: 72 65 76 69 73 69 6f 6e 73 20 77 68 69 63 68 20 revisions which
9830: 62 65 6c 6f 6e 67 20 74 6f 0a 09 23 20 20 20 20 belong to..#
9840: 20 74 68 65 20 74 72 75 6e 6b 2c 20 74 68 65 6e the trunk, then
9850: 20 74 68 65 20 70 72 69 6d 61 72 79 20 63 68 69 the primary chi
9860: 6c 64 20 6f 66 20 74 68 65 20 74 72 75 6e 6b 20 ld of the trunk
9870: 72 6f 6f 74 20 28 74 68 65 0a 09 23 20 20 20 20 root (the..#
9880: 20 27 31 2e 32 27 20 72 65 76 69 73 69 6f 6e 29 '1.2' revision)
9890: 20 69 73 20 61 20 73 75 63 63 65 73 73 6f 72 2c is a successor,
98a0: 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 0a if it exists...
98b0: 09 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 .# Note that the
98c0: 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 branches spawne
98d0: 64 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 73 d from the revis
98e0: 69 6f 6e 73 2c 20 61 6e 64 20 74 68 65 0a 09 23 ions, and the..#
98f0: 20 74 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 tags associated
9900: 20 77 69 74 68 20 74 68 65 6d 20 61 72 65 20 73 with them are s
9910: 75 63 63 65 73 73 6f 72 73 20 61 73 20 77 65 6c uccessors as wel
9920: 6c 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 l....foreach {ri
9930: 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 20 d child} [state
9940: 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f run [subst -noco
9950: 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c mmands -nobacksl
9960: 61 73 68 65 73 20 7b 0a 20 20 20 20 2d 2d 20 28 ashes {. -- (
9970: 31 29 20 50 72 69 6d 61 72 79 20 63 68 69 6c 64 1) Primary child
9980: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
9990: 69 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 20 20 id, R.child..
99a0: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
99b0: 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 R.. WHERE R
99c0: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 .rid IN $these
99d0: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
99e0: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
99f0: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
9a00: 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49 AND R.child I
9a10: 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d S NOT NULL --
9a20: 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69 Has primary chi
9a30: 6c 64 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 ld. UNION.
9a40: 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 61 72 -- (2) Secondar
9a50: 79 20 28 62 72 61 6e 63 68 29 20 63 68 69 6c 64 y (branch) child
9a60: 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 ren.. SELECT
9a70: 52 2e 72 69 64 2c 20 42 2e 62 72 69 64 0a 09 20 R.rid, B.brid..
9a80: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
9a90: 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 62 72 on R, revisionbr
9aa0: 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 42 0a 09 anchchildren B..
9ab0: 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 WHERE R.rid
9ac0: 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 IN $theset
9ad0: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
9ae0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e revisions of in
9af0: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 terest.. AND
9b00: 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 64 R.rid = B.rid
9b10: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c -- Sel
9b20: 65 63 74 20 73 75 62 73 65 74 20 6f 66 20 62 72 ect subset of br
9b30: 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a 20 20 anch children.
9b40: 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 UNION. -- (
9b50: 34 29 20 43 68 69 6c 64 20 6f 66 20 74 72 75 6e 4) Child of trun
9b60: 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 73 6f 72 k root successor
9b70: 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 20 6f 6e of last NTDB on
9b80: 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53 45 4c trunk... SEL
9b90: 45 43 54 20 52 2e 72 69 64 2c 20 52 41 2e 63 68 ECT R.rid, RA.ch
9ba0: 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 72 65 ild.. FROM re
9bb0: 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 vision R, revisi
9bc0: 6f 6e 20 52 41 0a 09 20 20 20 20 57 48 45 52 45 on RA.. WHERE
9bd0: 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 R.rid IN $the
9be0: 73 65 74 20 20 20 20 20 20 2d 2d 20 52 65 73 74 set -- Rest
9bf0: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e rict to revision
9c00: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
9c10: 20 20 20 41 4e 44 20 20 20 52 2e 69 73 64 65 66 AND R.isdef
9c20: 61 75 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 ault
9c30: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
9c40: 4e 54 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 NTDB.. AND
9c50: 52 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 R.dbchild IS NOT
9c60: 20 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c NULL -- and l
9c70: 61 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 ast NTDB belongi
9c80: 6e 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 ng to trunk..
9c90: 20 41 4e 44 20 20 20 52 41 2e 72 69 64 20 3d 20 AND RA.rid =
9ca0: 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d R.dbchild -
9cb0: 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f - Go directly to
9cc0: 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 trunk root..
9cd0: 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20 AND RA.child
9ce0: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d IS NOT NULL -
9cf0: 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 - Has primary ch
9d00: 69 6c 64 2e 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 ild...}]] {..
9d10: 20 23 20 43 6f 6e 73 69 64 65 72 20 6d 6f 76 69 # Consider movi
9d20: 6e 67 20 74 68 69 73 20 74 6f 20 74 68 65 20 69 ng this to the i
9d30: 6e 74 65 67 72 69 74 79 20 6d 6f 64 75 6c 65 2e ntegrity module.
9d40: 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 .. integrity
9d50: 61 73 73 65 72 74 20 7b 24 72 69 64 20 21 3d 20 assert {$rid !=
9d60: 24 63 68 69 6c 64 7d 20 7b 52 65 76 69 73 69 6f $child} {Revisio
9d70: 6e 20 24 72 69 64 20 64 65 70 65 6e 64 73 20 6f n $rid depends o
9d80: 6e 20 69 74 73 65 6c 66 2e 7d 0a 09 20 20 20 20 n itself.}..
9d90: 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e lappend dependen
9da0: 63 69 65 73 28 5b 6c 69 73 74 20 72 65 76 20 24 cies([list rev $
9db0: 72 69 64 5d 29 20 5b 6c 69 73 74 20 72 65 76 20 rid]) [list rev
9dc0: 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 6f 72 65 $child]..}..fore
9dd0: 61 63 68 20 7b 72 69 64 20 63 68 69 6c 64 7d 20 ach {rid child}
9de0: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
9df0: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
9e00: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
9e10: 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 SELECT R.rid
9e20: 2c 20 54 2e 74 69 64 0a 09 20 20 20 20 46 52 4f , T.tid.. FRO
9e30: 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 M revision R,
9e40: 74 61 67 20 54 0a 09 20 20 20 20 57 48 45 52 45 tag T.. WHERE
9e50: 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 73 R.rid IN $thes
9e60: 65 74 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 et -- Rest
9e70: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e rict to revision
9e80: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
9e90: 20 20 20 41 4e 44 20 20 20 20 54 2e 72 65 76 20 AND T.rev
9ea0: 3d 20 52 2e 72 69 64 20 20 20 20 20 20 20 20 20 = R.rid
9eb0: 20 2d 2d 20 53 65 6c 65 63 74 20 74 61 67 73 20 -- Select tags
9ec0: 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d attached to them
9ed0: 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 ..}]] {.. lap
9ee0: 70 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 65 pend dependencie
9ef0: 73 28 5b 6c 69 73 74 20 72 65 76 20 24 72 69 64 s([list rev $rid
9f00: 5d 29 20 5b 6c 69 73 74 20 73 79 6d 3a 3a 74 61 ]) [list sym::ta
9f10: 67 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 6f g $child]..}..fo
9f20: 72 65 61 63 68 20 7b 72 69 64 20 63 68 69 6c 64 reach {rid child
9f30: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 } [state run [su
9f40: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
9f50: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
9f60: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
9f70: 69 64 2c 20 42 2e 62 69 64 0a 09 20 20 20 20 46 id, B.bid.. F
9f80: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R
9f90: 2c 20 62 72 61 6e 63 68 20 42 0a 09 20 20 20 20 , branch B..
9fa0: 57 48 45 52 45 20 20 52 2e 72 69 64 20 49 4e 20 WHERE R.rid IN
9fb0: 24 74 68 65 73 65 74 20 20 20 20 20 20 20 2d 2d $theset --
9fc0: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
9fd0: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
9fe0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 st.. AND B
9ff0: 2e 72 6f 6f 74 20 3d 20 52 2e 72 69 64 20 20 20 .root = R.rid
a000: 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 -- Select
a010: 62 72 61 6e 63 68 65 73 20 61 74 74 61 63 68 65 branches attache
a020: 64 20 74 6f 20 74 68 65 6d 0a 09 7d 5d 5d 20 7b d to them..}]] {
a030: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 .. lappend de
a040: 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 74 pendencies([list
a050: 20 72 65 76 20 24 72 69 64 5d 29 20 5b 6c 69 73 rev $rid]) [lis
a060: 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20 24 63 t sym::branch $c
a070: 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e hild]..}..return
a080: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 . }.. # re
a090: 73 75 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 sult = list (cha
a0a0: 6e 67 65 73 65 74 2d 69 64 29 0a 20 20 20 20 74 ngeset-id). t
a0b0: 79 70 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 ypemethod cs_suc
a0c0: 63 65 73 73 6f 72 73 20 7b 72 65 76 69 73 69 6f cessors {revisio
a0d0: 6e 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 23 20 ns} {. #
a0e0: 54 68 69 73 20 69 73 20 61 20 76 61 72 69 61 6e This is a varian
a0f0: 74 20 6f 66 20 27 73 75 63 63 65 73 73 6f 72 73 t of 'successors
a100: 27 20 77 68 69 63 68 20 6d 61 70 73 20 74 68 65 ' which maps the
a110: 20 6c 6f 77 2d 6c 65 76 65 6c 0a 20 20 20 20 20 low-level.
a120: 20 20 20 23 20 64 61 74 61 20 64 69 72 65 63 74 # data direct
a130: 6c 79 20 74 6f 20 74 68 65 20 61 73 73 6f 63 69 ly to the associ
a140: 61 74 65 64 20 63 68 61 6e 67 65 73 65 74 73 2e ated changesets.
a150: 20 49 2e 65 2e 20 69 6e 73 74 65 61 64 0a 20 20 I.e. instead.
a160: 20 20 20 20 20 20 23 20 6d 69 6c 6c 69 6f 6e 73 # millions
a170: 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 79 20 70 of dependency p
a180: 61 69 72 73 20 28 69 6e 20 65 78 74 72 65 6d 65 airs (in extreme
a190: 20 63 61 73 65 73 20 28 45 78 61 6d 70 6c 65 3a cases (Example:
a1a0: 20 54 63 6c 0a 20 20 20 20 20 20 20 20 23 20 43 Tcl. # C
a1b0: 56 53 29 29 20 77 65 20 72 65 74 75 72 6e 20 61 VS)) we return a
a1c0: 20 76 65 72 79 20 73 68 6f 72 74 20 61 6e 64 20 very short and
a1d0: 6d 75 63 68 20 6d 6f 72 65 20 6d 61 6e 61 67 65 much more manage
a1e0: 61 62 6c 65 20 6c 69 73 74 0a 20 20 20 20 20 20 able list.
a1f0: 20 20 23 20 6f 66 20 63 68 61 6e 67 65 73 65 74 # of changeset
a200: 73 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 s....set theset
a210: 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f ('[join $revisio
a220: 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 ns {','}]')..ret
a230: 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b urn [state run [
a240: 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 subst -nocommand
a250: 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 s -nobackslashes
a260: 20 7b 0a 20 20 20 20 2d 2d 20 28 31 29 20 50 72 {. -- (1) Pr
a270: 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 imary child..
a280: 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 SELECT C.cid..
a290: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
a2a0: 6f 6e 20 52 2c 20 63 73 69 74 65 6d 20 43 49 2c on R, csitem CI,
a2b0: 20 63 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 changeset C..
a2c0: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 WHERE R.rid
a2d0: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
a2e0: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 -- Restrict to r
a2f0: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 evisions of inte
a300: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
a310: 20 52 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 R.child IS NOT
a320: 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 NULL -- Has p
a330: 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 20 20 20 rimary child.
a340: 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 AND
a350: 43 49 2e 69 69 64 20 3d 20 52 2e 63 68 69 6c 64 CI.iid = R.child
a360: 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 -- Select
a370: 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a all changesets.
a380: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
a390: 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 C.cid = CI.ci
a3a0: 64 20 20 20 20 20 20 20 20 20 2d 2d 20 63 6f 6e d -- con
a3b0: 74 61 69 6e 69 6e 67 20 74 68 65 20 70 72 69 6d taining the prim
a3c0: 61 72 79 20 63 68 69 6c 64 0a 20 20 20 20 20 20 ary child.
a3d0: 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 AND C.t
a3e0: 79 70 65 20 3d 20 30 20 20 20 20 20 20 20 20 20 ype = 0
a3f0: 20 20 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 -- which are
a400: 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 revision change
a410: 73 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 sets. UNION.
a420: 20 20 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 -- (2) Second
a430: 61 72 79 20 28 62 72 61 6e 63 68 29 20 63 68 69 ary (branch) chi
a440: 6c 64 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 ldren.. SELEC
a450: 54 20 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f T C.cid.. FRO
a460: 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 M revision R,
a470: 72 65 76 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 revisionbranchch
a480: 69 6c 64 72 65 6e 20 42 2c 20 63 73 69 74 65 6d ildren B, csitem
a490: 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 CI, changeset C
a4a0: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 .. WHERE R.r
a4b0: 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 id IN $theset
a4c0: 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 -- Restrict
a4d0: 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 to revisions of
a4e0: 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e interest.. AN
a4f0: 44 20 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 D R.rid = B.r
a500: 69 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 id -- S
a510: 65 6c 65 63 74 20 73 75 62 73 65 74 20 6f 66 20 elect subset of
a520: 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a branch children.
a530: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
a540: 20 20 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 72 CI.iid = B.br
a550: 69 64 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c id -- Sel
a560: 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 ect all changese
a570: 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 ts. A
a580: 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 ND C.cid = CI
a590: 2e 63 69 64 09 20 20 2d 2d 20 63 6f 6e 74 61 69 .cid. -- contai
a5a0: 6e 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 0a ning the branch.
a5b0: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
a5c0: 20 20 20 43 2e 74 79 70 65 20 3d 20 30 09 09 20 C.type = 0..
a5d0: 20 2d 2d 20 77 68 69 63 68 20 61 72 65 20 72 65 -- which are re
a5e0: 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 vision changeset
a5f0: 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 s. UNION.
a600: 2d 2d 20 28 34 29 20 43 68 69 6c 64 20 6f 66 20 -- (4) Child of
a610: 74 72 75 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 trunk root succe
a620: 73 73 6f 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 ssor of last NTD
a630: 42 20 6f 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 B on trunk...
a640: 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 SELECT C.cid..
a650: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
a660: 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 20 52 on R, revision R
a670: 41 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 A, csitem CI, ch
a680: 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 angeset C.. W
a690: 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 4e HERE R.rid IN
a6a0: 20 24 74 68 65 73 65 74 20 20 20 20 20 20 2d 2d $theset --
a6b0: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
a6c0: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
a6d0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 st.. AND R
a6e0: 2e 69 73 64 65 66 61 75 6c 74 20 20 20 20 20 20 .isdefault
a6f0: 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 -- Restri
a700: 63 74 20 74 6f 20 4e 54 44 42 0a 09 20 20 20 20 ct to NTDB..
a710: 41 4e 44 20 20 20 20 52 2e 64 62 63 68 69 6c 64 AND R.dbchild
a720: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 2d IS NOT NULL -
a730: 2d 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 20 - and last NTDB
a740: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 75 belonging to tru
a750: 6e 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 nk.. AND R
a760: 41 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 6c A.rid = R.dbchil
a770: 64 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 72 d -- Go dir
a780: 65 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 72 ectly to trunk r
a790: 6f 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 oot.. AND
a7a0: 52 41 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 RA.child IS NOT
a7b0: 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 NULL -- Has p
a7c0: 72 69 6d 61 72 79 20 63 68 69 6c 64 2e 0a 20 20 rimary child..
a7d0: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
a7e0: 20 43 49 2e 69 69 64 20 3d 20 52 41 2e 63 68 69 CI.iid = RA.chi
a7f0: 6c 64 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 ld -- Sele
a800: 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 ct all changeset
a810: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e s. AN
a820: 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e D C.cid = CI.
a830: 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e 74 61 69 cid. -- contai
a840: 6e 69 6e 67 20 74 68 65 20 70 72 69 6d 61 72 79 ning the primary
a850: 20 63 68 69 6c 64 0a 20 20 20 20 20 20 20 20 20 child.
a860: 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 AND C.type
a870: 20 3d 20 30 09 09 20 20 20 2d 2d 20 77 68 69 63 = 0.. -- whic
a880: 68 20 61 72 65 20 72 65 76 69 73 69 6f 6e 20 63 h are revision c
a890: 68 61 6e 67 65 73 65 74 73 0a 20 20 20 20 55 4e hangesets. UN
a8a0: 49 4f 4e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 ION.. SELECT
a8b0: 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 C.cid.. FROM
a8c0: 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 74 61 revision R, ta
a8d0: 67 20 54 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 g T, csitem CI,
a8e0: 63 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 changeset C..
a8f0: 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 69 6e WHERE R.rid in
a900: 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 20 $theset
a910: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 -- Restrict to r
a920: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 evisions of inte
a930: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
a940: 20 54 2e 72 65 76 20 3d 20 52 2e 72 69 64 09 20 T.rev = R.rid.
a950: 20 20 2d 2d 20 53 65 6c 65 63 74 20 74 61 67 73 -- Select tags
a960: 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 attached to the
a970: 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e m. AN
a980: 44 20 20 20 20 43 49 2e 69 69 64 20 3d 20 54 2e D CI.iid = T.
a990: 74 69 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 tid --
a9a0: 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 Select all chang
a9b0: 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 20 esets.
a9c0: 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d AND C.cid =
a9d0: 20 43 49 2e 63 69 64 09 20 20 20 2d 2d 20 63 6f CI.cid. -- co
a9e0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 67 ntaining the tag
a9f0: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e s. AN
aa00: 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 31 09 D C.type = 1.
aa10: 09 20 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 . -- which are
aa20: 20 74 61 67 20 63 68 61 6e 67 65 73 65 74 73 0a tag changesets.
aa30: 20 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 UNION.. S
aa40: 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 ELECT C.cid..
aa50: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
aa60: 20 52 2c 20 62 72 61 6e 63 68 20 42 2c 20 63 73 R, branch B, cs
aa70: 69 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 item CI, changes
aa80: 65 74 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 et C.. WHERE
aa90: 20 52 2e 72 69 64 20 69 6e 20 24 74 68 65 73 65 R.rid in $these
aaa0: 74 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 t -- Rest
aab0: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e rict to revision
aac0: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
aad0: 20 20 20 41 4e 44 20 20 20 20 42 2e 72 6f 6f 74 AND B.root
aae0: 20 3d 20 52 2e 72 69 64 09 20 20 20 2d 2d 20 53 = R.rid. -- S
aaf0: 65 6c 65 63 74 20 62 72 61 6e 63 68 65 73 20 61 elect branches a
ab00: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d 0a ttached to them.
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
ab20: 20 20 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 69 CI.iid = B.bi
ab30: 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 d -- Se
ab40: 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 lect all changes
ab50: 65 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 ets.
ab60: 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 AND C.cid = C
ab70: 49 2e 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e 74 I.cid. -- cont
ab80: 61 69 6e 69 6e 67 20 74 68 65 20 62 72 61 6e 63 aining the branc
ab90: 68 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 hes.
aba0: 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 AND C.type =
abb0: 32 09 09 20 20 20 2d 2d 20 77 68 69 63 68 20 61 2.. -- which a
abc0: 72 65 20 62 72 61 6e 63 68 20 63 68 61 6e 67 65 re branch change
abd0: 73 65 74 73 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a sets..}]]. }.
abe0: 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 . # result =
abf0: 73 79 6d 62 6f 6c 20 6e 61 6d 65 0a 20 20 20 20 symbol name.
ac00: 74 79 70 65 6d 65 74 68 6f 64 20 63 73 5f 6c 6f typemethod cs_lo
ac10: 64 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a d {revisions} {.
ac20: 09 23 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 .# Determines th
ac30: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 79 e name of the sy
ac40: 6d 62 6f 6c 20 77 68 69 63 68 20 69 73 20 74 68 mbol which is th
ac50: 65 20 6c 69 6e 65 20 6f 66 0a 09 23 20 64 65 76 e line of..# dev
ac60: 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 elopment for the
ac70: 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 61 20 revisions in a
ac80: 63 68 61 6e 67 65 73 65 74 2e 0a 0a 09 73 65 74 changeset....set
ac90: 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 theset ('[join
aca0: 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d $revisions {','}
acb0: 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 61 ]')..return [sta
acc0: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e te run [subst -n
acd0: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 ocommands -nobac
ace0: 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 kslashes {..
acf0: 53 45 4c 45 43 54 0a 09 20 20 20 20 44 49 53 54 SELECT.. DIST
ad00: 49 4e 43 54 20 4c 2e 6e 61 6d 65 0a 09 20 20 20 INCT L.name..
ad10: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
ad20: 20 52 2c 20 73 79 6d 62 6f 6c 20 4c 0a 09 20 20 R, symbol L..
ad30: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 69 WHERE R.rid i
ad40: 6e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 n $theset
ad50: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
ad60: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
ad70: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
ad80: 20 20 4c 2e 73 69 64 20 3d 20 52 2e 6c 6f 64 20 L.sid = R.lod
ad90: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 47 65 74 -- Get
ada0: 20 6c 6f 64 20 73 79 6d 62 6f 6c 20 6f 66 20 72 lod symbol of r
adb0: 65 76 69 73 69 6f 6e 0a 09 7d 5d 5d 0a 20 20 20 evision..}]].
adc0: 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 }.}..# # ## ###
add0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
ade0: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 ############# ##
adf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
ae00: 23 23 23 0a 23 23 20 48 65 6c 70 65 72 20 73 69 ###.## Helper si
ae10: 6e 67 6c 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e 64 ngleton. Command
ae20: 73 20 66 6f 72 20 74 61 67 20 73 79 6d 62 6f 6c s for tag symbol
ae30: 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a 73 6e changesets...sn
ae40: 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 it::type ::vc::f
ae50: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
ae60: 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 vs::project::rev
ae70: 3a 3a 73 79 6d 3a 3a 74 61 67 20 7b 0a 20 20 20 ::sym::tag {.
ae80: 20 74 79 70 65 6d 65 74 68 6f 64 20 62 79 72 65 typemethod byre
ae90: 76 69 73 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75 vision {} { retu
aea0: 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 70 65 6d rn 0 }. typem
aeb0: 65 74 68 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 ethod bysymbol
aec0: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 7d {} { return 1 }
aed0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
aee0: 69 73 74 61 67 20 20 20 20 20 20 7b 7d 20 7b 20 istag {} {
aef0: 72 65 74 75 72 6e 20 31 20 7d 0a 20 20 20 20 74 return 1 }. t
af00: 79 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61 6e ypemethod isbran
af10: 63 68 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e ch {} { return
af20: 20 30 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 0 }.. typeme
af30: 74 68 6f 64 20 73 74 72 20 7b 74 61 67 7d 20 7b thod str {tag} {
af40: 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 ..struct::list a
af50: 73 73 69 67 6e 20 5b 73 74 61 74 65 20 72 75 6e ssign [state run
af60: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53 {.. SELECT S
af70: 2e 6e 61 6d 65 2c 20 46 2e 6e 61 6d 65 2c 20 50 .name, F.name, P
af80: 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 .name.. FROM
af90: 20 20 74 61 67 20 54 2c 20 73 79 6d 62 6f 6c 20 tag T, symbol
afa0: 53 2c 20 66 69 6c 65 20 46 2c 20 70 72 6f 6a 65 S, file F, proje
afb0: 63 74 20 50 0a 09 20 20 20 20 57 48 45 52 45 20 ct P.. WHERE
afc0: 20 54 2e 74 69 64 20 3d 20 24 74 61 67 20 20 20 T.tid = $tag
afd0: 2d 2d 20 46 69 6e 64 20 73 70 65 63 69 66 69 65 -- Find specifie
afe0: 64 20 74 61 67 0a 09 20 20 20 20 41 4e 44 20 20 d tag.. AND
aff0: 20 20 46 2e 66 69 64 20 3d 20 54 2e 66 69 64 20 F.fid = T.fid
b000: 20 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 20 -- Get file of
b010: 74 61 67 0a 09 20 20 20 20 41 4e 44 20 20 20 20 tag.. AND
b020: 50 2e 70 69 64 20 3d 20 46 2e 70 69 64 20 20 2d P.pid = F.pid -
b030: 2d 20 47 65 74 20 70 72 6f 6a 65 63 74 20 6f 66 - Get project of
b040: 20 66 69 6c 65 0a 09 20 20 20 20 41 4e 44 20 20 file.. AND
b050: 20 20 53 2e 73 69 64 20 3d 20 54 2e 73 69 64 20 S.sid = T.sid
b060: 20 2d 2d 20 47 65 74 20 73 79 6d 62 6f 6c 20 6f -- Get symbol o
b070: 66 20 74 61 67 0a 09 7d 5d 20 73 6e 61 6d 65 20 f tag..}] sname
b080: 66 6e 61 6d 65 20 70 6e 61 6d 65 0a 09 72 65 74 fname pname..ret
b090: 75 72 6e 20 22 24 70 6e 61 6d 65 2f 54 27 24 7b urn "$pname/T'${
b0a0: 73 6e 61 6d 65 7d 27 3a 3a 24 66 6e 61 6d 65 22 sname}'::$fname"
b0b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 . }.. # re
b0c0: 73 75 6c 74 20 3d 20 6c 69 73 74 20 28 6d 69 6e sult = list (min
b0d0: 74 69 6d 65 2c 20 6d 61 78 74 69 6d 65 29 0a 20 time, maxtime).
b0e0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 74 69 typemethod ti
b0f0: 6d 65 72 61 6e 67 65 20 7b 74 61 67 73 7d 20 7b merange {tags} {
b100: 0a 09 23 20 54 68 65 20 72 61 6e 67 65 20 69 73 ..# The range is
b110: 20 64 65 66 69 6e 65 64 20 61 73 20 74 68 65 20 defined as the
b120: 72 61 6e 67 65 20 6f 66 20 74 68 65 20 72 65 76 range of the rev
b130: 69 73 69 6f 6e 73 20 74 68 65 20 74 61 67 73 0a isions the tags.
b140: 09 23 20 61 72 65 20 61 74 74 61 63 68 65 64 20 .# are attached
b150: 74 6f 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 to....set theset
b160: 20 28 27 5b 6a 6f 69 6e 20 24 74 61 67 73 20 7b ('[join $tags {
b170: 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 ','}]')..return
b180: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
b190: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
b1a0: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
b1b0: 20 20 20 20 53 45 4c 45 43 54 20 4d 49 4e 28 52 SELECT MIN(R
b1c0: 2e 64 61 74 65 29 2c 20 4d 41 58 28 52 2e 64 61 .date), MAX(R.da
b1d0: 74 65 29 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 te).. FROM
b1e0: 74 61 67 20 54 2c 20 72 65 76 69 73 69 6f 6e 20 tag T, revision
b1f0: 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 54 2e R.. WHERE T.
b200: 74 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 tid IN $theset
b210: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 74 -- Restrict to t
b220: 61 67 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a ags of interest.
b230: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
b240: 20 20 20 52 2e 72 69 64 20 3d 20 54 2e 72 65 76 R.rid = T.rev
b250: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 74 -- Select t
b260: 61 67 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 ag parent revisi
b270: 6f 6e 73 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a ons..}]]. }..
b280: 20 20 20 20 23 20 76 61 72 28 64 76 29 20 3d 20 # var(dv) =
b290: 64 69 63 74 20 28 69 74 65 6d 20 2d 3e 20 6c 69 dict (item -> li
b2a0: 73 74 20 28 69 74 65 6d 29 29 2c 20 69 74 65 6d st (item)), item
b2b0: 20 20 3d 20 6c 69 73 74 20 28 74 79 70 65 20 69 = list (type i
b2c0: 64 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f d). typemetho
b2d0: 64 20 73 75 63 63 65 73 73 6f 72 73 20 7b 64 76 d successors {dv
b2e0: 20 74 61 67 73 7d 20 7b 0a 09 23 20 54 61 67 73 tags} {..# Tags
b2f0: 20 68 61 76 65 20 6e 6f 20 73 75 63 63 65 73 73 have no success
b300: 6f 72 73 2e 0a 09 72 65 74 75 72 6e 0a 20 20 20 ors...return.
b310: 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 }.. # result
b320: 20 3d 20 34 2d 6c 69 73 74 20 28 69 74 65 6d 74 = 4-list (itemt
b330: 79 70 65 20 69 74 65 6d 69 64 20 6e 65 78 74 69 ype itemid nexti
b340: 74 65 6d 74 79 70 65 20 6e 65 78 74 69 74 65 6d temtype nextitem
b350: 69 64 20 2e 2e 2e 29 0a 20 20 20 20 74 79 70 65 id ...). type
b360: 6d 65 74 68 6f 64 20 6c 6f 6f 70 73 20 7b 74 61 method loops {ta
b370: 67 73 7d 20 7b 0a 09 23 20 54 61 67 73 20 68 61 gs} {..# Tags ha
b380: 76 65 20 6e 6f 20 73 75 63 63 65 73 73 6f 72 73 ve no successors
b390: 2c 20 74 68 65 72 65 66 6f 72 65 20 63 61 6e 6e , therefore cann
b3a0: 6f 74 20 63 61 75 73 65 20 6c 6f 6f 70 73 0a 09 ot cause loops..
b3b0: 72 65 74 75 72 6e 20 7b 7d 0a 20 20 20 20 7d 0a return {}. }.
b3c0: 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 . # result =
b3d0: 6c 69 73 74 20 28 63 68 61 6e 67 65 73 65 74 2d list (changeset-
b3e0: 69 64 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 id). typemeth
b3f0: 6f 64 20 63 73 5f 73 75 63 63 65 73 73 6f 72 73 od cs_successors
b400: 20 7b 74 61 67 73 7d 20 7b 0a 09 23 20 54 61 67 {tags} {..# Tag
b410: 73 20 68 61 76 65 20 6e 6f 20 73 75 63 63 65 73 s have no succes
b420: 73 6f 72 73 2e 0a 09 72 65 74 75 72 6e 0a 20 20 sors...return.
b430: 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c }.. # resul
b440: 74 20 3d 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 0a t = symbol name.
b450: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 63 typemethod c
b460: 73 5f 6c 6f 64 20 7b 74 61 67 73 7d 20 7b 0a 09 s_lod {tags} {..
b470: 23 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65 # Determines the
b480: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 79 6d name of the sym
b490: 62 6f 6c 20 77 68 69 63 68 20 69 73 20 74 68 65 bol which is the
b4a0: 20 6c 69 6e 65 20 6f 66 0a 09 23 20 64 65 76 65 line of..# deve
b4b0: 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 lopment for the
b4c0: 74 61 67 73 20 69 6e 20 61 20 63 68 61 6e 67 65 tags in a change
b4d0: 73 65 74 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 set....set these
b4e0: 74 20 28 27 5b 6a 6f 69 6e 20 24 74 61 67 73 20 t ('[join $tags
b4f0: 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e {','}]')..return
b500: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
b510: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
b520: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
b530: 09 20 20 20 20 53 45 4c 45 43 54 0a 09 20 20 20 . SELECT..
b540: 20 44 49 53 54 49 4e 43 54 20 4c 2e 6e 61 6d 65 DISTINCT L.name
b550: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 74 61 67 .. FROM tag
b560: 20 54 2c 20 73 79 6d 62 6f 6c 20 4c 0a 09 20 20 T, symbol L..
b570: 20 20 57 48 45 52 45 20 20 54 2e 74 69 64 20 69 WHERE T.tid i
b580: 6e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 n $theset
b590: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
b5a0: 74 61 67 73 20 6f 66 20 69 6e 74 65 72 65 73 74 tags of interest
b5b0: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 4c 2e 73 .. AND L.s
b5c0: 69 64 20 3d 20 54 2e 6c 6f 64 20 20 20 20 20 20 id = T.lod
b5d0: 20 20 20 20 20 2d 2d 20 47 65 74 20 6c 6f 64 20 -- Get lod
b5e0: 73 79 6d 62 6f 6c 20 6f 66 20 74 61 67 0a 09 7d symbol of tag..}
b5f0: 5d 5d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 ]]. }.}..# #
b600: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
b610: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
b620: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
b630: 23 23 23 23 23 23 23 23 23 0a 23 23 20 48 65 6c #########.## Hel
b640: 70 65 72 20 73 69 6e 67 6c 65 74 6f 6e 2e 20 43 per singleton. C
b650: 6f 6d 6d 61 6e 64 73 20 66 6f 72 20 62 72 61 6e ommands for bran
b660: 63 68 20 73 79 6d 62 6f 6c 20 63 68 61 6e 67 65 ch symbol change
b670: 73 65 74 73 2e 0a 0a 73 6e 69 74 3a 3a 74 79 70 sets...snit::typ
b680: 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a e ::vc::fossil::
b690: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f import::cvs::pro
b6a0: 6a 65 63 74 3a 3a 72 65 76 3a 3a 73 79 6d 3a 3a ject::rev::sym::
b6b0: 62 72 61 6e 63 68 20 7b 0a 20 20 20 20 74 79 70 branch {. typ
b6c0: 65 6d 65 74 68 6f 64 20 62 79 72 65 76 69 73 69 emethod byrevisi
b6d0: 6f 6e 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 30 on {} { return 0
b6e0: 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }. typemetho
b6f0: 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 7b 7d 20 d bysymbol {}
b700: 7b 20 72 65 74 75 72 6e 20 31 20 7d 0a 20 20 20 { return 1 }.
b710: 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74 61 typemethod ista
b720: 67 20 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 g {} { retu
b730: 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 70 65 6d rn 0 }. typem
b740: 65 74 68 6f 64 20 69 73 62 72 61 6e 63 68 20 20 ethod isbranch
b750: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 7d {} { return 1 }
b760: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
b770: 20 73 74 72 20 7b 62 72 61 6e 63 68 7d 20 7b 0a str {branch} {.
b780: 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 .struct::list as
b790: 73 69 67 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 sign [state run
b7a0: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53 2e {.. SELECT S.
b7b0: 6e 61 6d 65 2c 20 46 2e 6e 61 6d 65 2c 20 50 2e name, F.name, P.
b7c0: 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 name.. FROM
b7d0: 20 62 72 61 6e 63 68 20 42 2c 20 73 79 6d 62 6f branch B, symbo
b7e0: 6c 20 53 2c 20 66 69 6c 65 20 46 2c 20 70 72 6f l S, file F, pro
b7f0: 6a 65 63 74 20 50 0a 09 20 20 20 20 57 48 45 52 ject P.. WHER
b800: 45 20 20 42 2e 62 69 64 20 3d 20 24 62 72 61 6e E B.bid = $bran
b810: 63 68 20 20 2d 2d 20 46 69 6e 64 20 73 70 65 63 ch -- Find spec
b820: 69 66 69 65 64 20 62 72 61 6e 63 68 0a 09 20 20 ified branch..
b830: 20 20 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d AND F.fid =
b840: 20 42 2e 66 69 64 20 20 20 20 2d 2d 20 47 65 74 B.fid -- Get
b850: 20 66 69 6c 65 20 6f 66 20 62 72 61 6e 63 68 0a file of branch.
b860: 09 20 20 20 20 41 4e 44 20 20 20 20 50 2e 70 69 . AND P.pi
b870: 64 20 3d 20 46 2e 70 69 64 20 20 20 20 2d 2d 20 d = F.pid --
b880: 47 65 74 20 70 72 6f 6a 65 63 74 20 6f 66 20 66 Get project of f
b890: 69 6c 65 0a 09 20 20 20 20 41 4e 44 20 20 20 20 ile.. AND
b8a0: 53 2e 73 69 64 20 3d 20 42 2e 73 69 64 20 20 20 S.sid = B.sid
b8b0: 20 2d 2d 20 47 65 74 20 73 79 6d 62 6f 6c 20 6f -- Get symbol o
b8c0: 66 20 62 72 61 6e 63 68 0a 09 7d 5d 20 73 6e 61 f branch..}] sna
b8d0: 6d 65 20 66 6e 61 6d 65 20 70 6e 61 6d 65 0a 09 me fname pname..
b8e0: 72 65 74 75 72 6e 20 22 24 70 6e 61 6d 65 2f 42 return "$pname/B
b8f0: 27 24 7b 73 6e 61 6d 65 7d 27 3a 3a 24 66 6e 61 '${sname}'::$fna
b900: 6d 65 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 me". }.. #
b910: 20 72 65 73 75 6c 74 20 3d 20 6c 69 73 74 20 28 result = list (
b920: 6d 69 6e 74 69 6d 65 2c 20 6d 61 78 74 69 6d 65 mintime, maxtime
b930: 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 ). typemethod
b940: 20 74 69 6d 65 72 61 6e 67 65 20 7b 62 72 61 6e timerange {bran
b950: 63 68 65 73 7d 20 7b 0a 09 23 20 54 68 65 20 72 ches} {..# The r
b960: 61 6e 67 65 20 6f 66 20 61 20 62 72 61 6e 63 68 ange of a branch
b970: 20 69 73 20 64 65 66 69 6e 65 64 20 61 73 20 74 is defined as t
b980: 68 65 20 72 61 6e 67 65 20 6f 66 20 74 68 65 0a he range of the.
b990: 09 23 20 72 65 76 69 73 69 6f 6e 73 20 74 68 65 .# revisions the
b9a0: 20 62 72 61 6e 63 68 65 73 20 61 72 65 20 73 70 branches are sp
b9b0: 61 77 6e 65 64 20 62 79 2e 20 4e 4f 54 45 20 68 awned by. NOTE h
b9c0: 6f 77 65 76 65 72 20 74 68 61 74 20 74 68 65 0a owever that the.
b9d0: 09 23 20 62 72 61 6e 63 68 65 73 20 61 73 73 6f .# branches asso
b9e0: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 64 65 ciated with a de
b9f0: 74 61 63 68 65 64 20 4e 54 44 42 20 77 69 6c 6c tached NTDB will
ba00: 20 68 61 76 65 20 6e 6f 20 72 6f 6f 74 0a 09 23 have no root..#
ba10: 20 73 70 61 77 6e 69 6e 67 20 74 68 65 6d 2c 20 spawning them,
ba20: 68 65 6e 63 65 20 74 68 65 79 20 68 61 76 65 20 hence they have
ba30: 6e 6f 20 72 65 61 6c 20 74 69 6d 65 72 61 6e 67 no real timerang
ba40: 65 20 61 6e 79 0a 09 23 20 6c 6f 6e 67 65 72 2e e any..# longer.
ba50: 20 42 79 20 75 73 69 6e 67 20 30 20 77 65 20 70 By using 0 we p
ba60: 75 74 20 74 68 65 6d 20 69 6e 20 66 72 6f 6e 74 ut them in front
ba70: 20 6f 66 20 65 76 65 72 79 74 68 69 6e 67 20 65 of everything e
ba80: 6c 73 65 2c 0a 09 23 20 61 73 20 74 68 65 79 20 lse,..# as they
ba90: 6c 6f 67 69 63 61 6c 6c 79 20 61 72 65 2e 0a 0a logically are...
baa0: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
bab0: 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 oin $branches {'
bac0: 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b ,'}]')..return [
bad0: 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 state run [subst
bae0: 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f -nocommands -no
baf0: 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 backslashes {..
bb00: 20 20 20 53 45 4c 45 43 54 20 49 46 4e 55 4c 4c SELECT IFNULL
bb10: 28 4d 49 4e 28 52 2e 64 61 74 65 29 2c 30 29 2c (MIN(R.date),0),
bb20: 20 49 46 4e 55 4c 4c 28 4d 41 58 28 52 2e 64 61 IFNULL(MAX(R.da
bb30: 74 65 29 2c 30 29 0a 09 20 20 20 20 46 52 4f 4d te),0).. FROM
bb40: 20 20 62 72 61 6e 63 68 20 42 2c 20 72 65 76 69 branch B, revi
bb50: 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 sion R.. WHER
bb60: 45 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 E B.bid IN $thes
bb70: 65 74 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 et -- Restrict
bb80: 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20 to branches of
bb90: 69 6e 74 65 72 65 73 74 0a 20 20 20 20 20 20 20 interest.
bba0: 20 20 20 20 20 41 4e 44 20 20 20 52 2e 72 69 64 AND R.rid
bbb0: 20 3d 20 42 2e 72 6f 6f 74 20 20 20 20 20 2d 2d = B.root --
bbc0: 20 53 65 6c 65 63 74 20 62 72 61 6e 63 68 20 70 Select branch p
bbd0: 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 73 0a arent revisions.
bbe0: 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 .}]]. }..
bbf0: 23 20 72 65 73 75 6c 74 20 3d 20 34 2d 6c 69 73 # result = 4-lis
bc00: 74 20 28 69 74 65 6d 74 79 70 65 20 69 74 65 6d t (itemtype item
bc10: 69 64 20 6e 65 78 74 69 74 65 6d 74 79 70 65 20 id nextitemtype
bc20: 6e 65 78 74 69 74 65 6d 69 64 20 2e 2e 2e 29 0a nextitemid ...).
bc30: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c typemethod l
bc40: 6f 6f 70 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 oops {branches}
bc50: 7b 0a 09 23 20 4e 6f 74 65 3a 20 52 65 76 69 73 {..# Note: Revis
bc60: 69 6f 6e 73 20 61 6e 64 20 74 61 67 73 20 63 61 ions and tags ca
bc70: 6e 6e 6f 74 20 63 61 75 73 65 20 74 68 65 20 6c nnot cause the l
bc80: 6f 6f 70 2e 20 42 65 69 6e 67 20 6f 66 20 61 0a oop. Being of a.
bc90: 09 23 20 66 75 6e 64 61 6d 65 6e 74 61 6c 6c 79 .# fundamentally
bca0: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 20 different type
bcb0: 74 68 65 79 20 63 61 6e 6e 6f 74 20 62 65 20 69 they cannot be i
bcc0: 6e 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 0a 09 n the incoming..
bcd0: 23 20 73 65 74 20 6f 66 20 69 64 73 2e 0a 0a 09 # set of ids....
bce0: 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f set theset ('[jo
bcf0: 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 2c in $branches {',
bd00: 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 '}]')..return [s
bd10: 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 tate run [subst
bd20: 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 -nocommands -nob
bd30: 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 ackslashes {..
bd40: 20 20 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 SELECT B.bid,
bd50: 42 58 2e 62 69 64 0a 09 20 20 20 20 46 52 4f 4d BX.bid.. FROM
bd60: 20 20 20 62 72 61 6e 63 68 20 42 2c 20 70 72 65 branch B, pre
bd70: 66 65 72 65 64 70 61 72 65 6e 74 20 50 2c 20 62 feredparent P, b
bd80: 72 61 6e 63 68 20 42 58 0a 09 20 20 20 20 57 48 ranch BX.. WH
bd90: 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 ERE B.bid IN $t
bda0: 68 65 73 65 74 20 20 20 2d 2d 20 52 65 73 74 72 heset -- Restr
bdb0: 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 ict to branches
bdc0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
bdd0: 20 41 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20 AND B.sid =
bde0: 50 2e 70 69 64 20 20 20 20 20 20 2d 2d 20 47 65 P.pid -- Ge
bdf0: 74 20 74 68 65 20 70 72 65 66 65 72 65 64 20 62 t the prefered b
be00: 72 61 6e 63 68 65 73 20 76 69 61 0a 09 20 20 20 ranches via..
be10: 20 41 4e 44 20 20 20 20 42 58 2e 73 69 64 20 3d AND BX.sid =
be20: 20 50 2e 73 69 64 20 20 20 20 20 2d 2d 20 74 68 P.sid -- th
be30: 65 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 73 e branch symbols
be40: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 58 2e .. AND BX.
be50: 62 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 bid IN $theset
be60: 2d 2d 20 4c 6f 6f 70 0a 09 7d 5d 5d 0a 20 20 20 -- Loop..}]].
be70: 20 7d 0a 0a 20 20 20 20 23 20 76 61 72 28 64 76 }.. # var(dv
be80: 29 20 3d 20 64 69 63 74 20 28 69 74 65 6d 20 2d ) = dict (item -
be90: 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 29 2c 20 > list (item)),
bea0: 69 74 65 6d 20 20 3d 20 6c 69 73 74 20 28 74 79 item = list (ty
beb0: 70 65 20 69 64 29 0a 20 20 20 20 74 79 70 65 6d pe id). typem
bec0: 65 74 68 6f 64 20 73 75 63 63 65 73 73 6f 72 73 ethod successors
bed0: 20 7b 64 76 20 62 72 61 6e 63 68 65 73 7d 20 7b {dv branches} {
bee0: 0a 09 75 70 76 61 72 20 31 20 24 64 76 20 64 65 ..upvar 1 $dv de
bef0: 70 65 6e 64 65 6e 63 69 65 73 0a 09 23 20 54 68 pendencies..# Th
bf00: 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e e first revision
bf10: 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 61 20 committed on a
bf20: 62 72 61 6e 63 68 2c 20 61 6e 64 20 61 6c 6c 20 branch, and all
bf30: 62 72 61 6e 63 68 65 73 0a 09 23 20 61 6e 64 20 branches..# and
bf40: 74 61 67 73 20 77 68 69 63 68 20 68 61 76 65 20 tags which have
bf50: 69 74 20 61 73 20 74 68 65 69 72 20 70 72 65 66 it as their pref
bf60: 65 72 65 64 20 70 61 72 65 6e 74 20 61 72 65 20 ered parent are
bf70: 74 68 65 0a 09 23 20 73 75 63 63 65 73 73 6f 72 the..# successor
bf80: 73 20 6f 66 20 61 20 62 72 61 6e 63 68 2e 0a 0a s of a branch...
bf90: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
bfa0: 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 oin $branches {'
bfb0: 2c 27 7d 5d 27 29 0a 09 66 6f 72 65 61 63 68 20 ,'}]')..foreach
bfc0: 7b 62 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 {bid child} [sta
bfd0: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e te run [subst -n
bfe0: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 ocommands -nobac
bff0: 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 kslashes {..
c000: 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 52 2e SELECT B.bid, R.
c010: 72 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 rid.. FROM
c020: 62 72 61 6e 63 68 20 42 2c 20 72 65 76 69 73 69 branch B, revisi
c030: 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 on R.. WHERE
c040: 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 B.bid IN $these
c050: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
c060: 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 t to branches of
c070: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
c080: 4e 44 20 20 20 20 42 2e 66 69 72 73 74 20 3d 20 ND B.first =
c090: 52 2e 72 69 64 20 20 20 20 20 20 2d 2d 20 47 65 R.rid -- Ge
c0a0: 74 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e t first revision
c0b0: 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 09 on the branch..
c0c0: 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 }]] {.. lappe
c0d0: 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 nd dependencies(
c0e0: 5b 6c 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 [list sym::branc
c0f0: 68 20 24 62 69 64 5d 29 20 5b 6c 69 73 74 20 72 h $bid]) [list r
c100: 65 76 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 ev $child]..}..f
c110: 6f 72 65 61 63 68 20 7b 62 69 64 20 63 68 69 6c oreach {bid chil
c120: 64 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 d} [state run [s
c130: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
c140: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
c150: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e {.. SELECT B.
c160: 62 69 64 2c 20 42 58 2e 62 69 64 0a 09 20 20 20 bid, BX.bid..
c170: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 FROM branch B
c180: 2c 20 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 , preferedparent
c190: 20 50 2c 20 62 72 61 6e 63 68 20 42 58 0a 09 20 P, branch BX..
c1a0: 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 WHERE B.bid
c1b0: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
c1c0: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 - Restrict to br
c1d0: 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 anches of intere
c1e0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 st.. AND B
c1f0: 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 20 .sid = P.pid
c200: 20 20 20 20 2d 2d 20 47 65 74 20 73 75 62 6f 72 -- Get subor
c210: 64 69 6e 61 74 65 20 62 72 61 6e 63 68 65 73 20 dinate branches
c220: 76 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 via the.. AND
c230: 20 20 20 20 42 58 2e 73 69 64 20 3d 20 50 2e 73 BX.sid = P.s
c240: 69 64 20 20 20 20 20 20 20 2d 2d 20 70 72 65 66 id -- pref
c250: 65 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20 ered parents of
c260: 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 09 7d their symbols..}
c270: 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e ]] {.. lappen
c280: 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 5b d dependencies([
c290: 6c 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 list sym::branch
c2a0: 20 24 62 69 64 5d 29 20 5b 6c 69 73 74 20 73 79 $bid]) [list sy
c2b0: 6d 3a 3a 62 72 61 6e 63 68 20 24 63 68 69 6c 64 m::branch $child
c2c0: 5d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 7b 62 ]..}..foreach {b
c2d0: 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 id child} [state
c2e0: 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 run [subst -noc
c2f0: 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 ommands -nobacks
c300: 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 lashes {.. SE
c310: 4c 45 43 54 20 42 2e 62 69 64 2c 20 54 2e 74 69 LECT B.bid, T.ti
c320: 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 d.. FROM br
c330: 61 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 64 anch B, prefered
c340: 70 61 72 65 6e 74 20 50 2c 20 74 61 67 20 54 0a parent P, tag T.
c350: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 . WHERE B.bi
c360: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 d IN $theset
c370: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
c380: 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 branches of inte
c390: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
c3a0: 20 42 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 B.sid = P.pid
c3b0: 20 20 20 20 20 20 2d 2d 20 47 65 74 20 73 75 62 -- Get sub
c3c0: 6f 72 64 69 6e 61 74 65 20 74 61 67 73 20 76 69 ordinate tags vi
c3d0: 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 20 a the.. AND
c3e0: 20 20 54 2e 73 69 64 20 3d 20 50 2e 73 69 64 20 T.sid = P.sid
c3f0: 20 20 20 20 20 20 20 2d 2d 20 70 72 65 66 65 72 -- prefer
c400: 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20 74 68 ed parents of th
c410: 65 69 72 20 73 79 6d 62 6f 6c 73 0a 09 7d 5d 5d eir symbols..}]]
c420: 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 {.. lappend
c430: 64 65 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 dependencies([li
c440: 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20 24 st sym::branch $
c450: 62 69 64 5d 29 20 5b 6c 69 73 74 20 73 79 6d 3a bid]) [list sym:
c460: 3a 74 61 67 20 24 63 68 69 6c 64 5d 0a 09 7d 0a :tag $child]..}.
c470: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
c480: 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 # result = li
c490: 73 74 20 28 63 68 61 6e 67 65 73 65 74 2d 69 64 st (changeset-id
c4a0: 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 ). typemethod
c4b0: 20 63 73 5f 73 75 63 63 65 73 73 6f 72 73 20 7b cs_successors {
c4c0: 62 72 61 6e 63 68 65 73 7d 20 7b 0a 20 20 20 20 branches} {.
c4d0: 20 20 20 20 23 20 54 68 69 73 20 69 73 20 61 20 # This is a
c4e0: 76 61 72 69 61 6e 74 20 6f 66 20 27 73 75 63 63 variant of 'succ
c4f0: 65 73 73 6f 72 73 27 20 77 68 69 63 68 20 6d 61 essors' which ma
c500: 70 73 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 6c ps the low-level
c510: 0a 20 20 20 20 20 20 20 20 23 20 64 61 74 61 20 . # data
c520: 64 69 72 65 63 74 6c 79 20 74 6f 20 74 68 65 20 directly to the
c530: 61 73 73 6f 63 69 61 74 65 64 20 63 68 61 6e 67 associated chang
c540: 65 73 65 74 73 2e 20 49 2e 65 2e 20 69 6e 73 74 esets. I.e. inst
c550: 65 61 64 0a 20 20 20 20 20 20 20 20 23 20 6d 69 ead. # mi
c560: 6c 6c 69 6f 6e 73 20 6f 66 20 64 65 70 65 6e 64 llions of depend
c570: 65 6e 63 79 20 70 61 69 72 73 20 28 69 6e 20 65 ency pairs (in e
c580: 78 74 72 65 6d 65 20 63 61 73 65 73 20 28 45 78 xtreme cases (Ex
c590: 61 6d 70 6c 65 3a 20 54 63 6c 0a 20 20 20 20 20 ample: Tcl.
c5a0: 20 20 20 23 20 43 56 53 29 29 20 77 65 20 72 65 # CVS)) we re
c5b0: 74 75 72 6e 20 61 20 76 65 72 79 20 73 68 6f 72 turn a very shor
c5c0: 74 20 61 6e 64 20 6d 75 63 68 20 6d 6f 72 65 20 t and much more
c5d0: 6d 61 6e 61 67 65 61 62 6c 65 20 6c 69 73 74 0a manageable list.
c5e0: 20 20 20 20 20 20 20 20 23 20 6f 66 20 63 68 61 # of cha
c5f0: 6e 67 65 73 65 74 73 2e 0a 0a 09 73 65 74 20 74 ngesets....set t
c600: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 heset ('[join $b
c610: 72 61 6e 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 ranches {','}]')
c620: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return
c630: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
c640: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
c650: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
c660: 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 SELECT C.cid
c670: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 .. FROM bra
c680: 6e 63 68 20 42 2c 20 72 65 76 69 73 69 6f 6e 20 nch B, revision
c690: 52 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 R, csitem CI, ch
c6a0: 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 angeset C.. W
c6b0: 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 HERE B.bid IN $
c6c0: 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 theset -- Re
c6d0: 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68 strict to branch
c6e0: 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 es of interest..
c6f0: 20 20 20 20 41 4e 44 20 20 20 20 42 2e 66 69 72 AND B.fir
c700: 73 74 20 3d 20 52 2e 72 69 64 09 2d 2d 20 47 65 st = R.rid.-- Ge
c710: 74 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e t first revision
c720: 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 20 on the branch.
c730: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
c740: 20 20 43 49 2e 69 69 64 20 3d 20 52 2e 72 69 64 CI.iid = R.rid
c750: 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 -- Select
c760: 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a all changesets.
c770: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
c780: 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 C.cid = CI.ci
c790: 64 09 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 d.-- containing
c7a0: 74 68 69 73 20 72 65 76 69 73 69 6f 6e 0a 20 20 this revision.
c7b0: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
c7c0: 20 43 2e 74 79 70 65 20 3d 20 30 09 09 2d 2d 20 C.type = 0..--
c7d0: 77 68 69 63 68 20 61 72 65 20 72 65 76 69 73 69 which are revisi
c7e0: 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 on changesets.
c7f0: 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 45 4c UNION.. SEL
c800: 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 46 ECT C.cid.. F
c810: 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 ROM branch B,
c820: 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 50 preferedparent P
c830: 2c 20 62 72 61 6e 63 68 20 42 58 2c 20 63 73 69 , branch BX, csi
c840: 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 tem CI, changese
c850: 74 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 t C.. WHERE
c860: 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 74 B.bid IN $theset
c870: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
c880: 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20 to branches of
c890: 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e interest.. AN
c8a0: 44 20 20 20 20 42 2e 73 69 64 20 3d 20 50 2e 70 D B.sid = P.p
c8b0: 69 64 09 2d 2d 20 47 65 74 20 73 75 62 6f 72 64 id.-- Get subord
c8c0: 69 6e 61 74 65 20 62 72 61 6e 63 68 65 73 20 76 inate branches v
c8d0: 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 ia the.. AND
c8e0: 20 20 20 42 58 2e 73 69 64 20 3d 20 50 2e 73 69 BX.sid = P.si
c8f0: 64 09 2d 2d 20 70 72 65 66 65 72 65 64 20 70 61 d.-- prefered pa
c900: 72 65 6e 74 73 20 6f 66 20 74 68 65 69 72 20 73 rents of their s
c910: 79 6d 62 6f 6c 73 0a 20 20 20 20 20 20 20 20 20 ymbols.
c920: 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 AND CI.iid
c930: 20 3d 20 42 58 2e 62 69 64 20 20 20 20 20 20 2d = BX.bid -
c940: 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 - Select all cha
c950: 6e 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 ngesets.
c960: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 AND C.cid
c970: 20 3d 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e = CI.cid.-- con
c980: 74 61 69 6e 69 6e 67 20 74 68 65 20 73 75 62 6f taining the subo
c990: 72 64 69 6e 61 74 65 20 62 72 61 6e 63 68 65 73 rdinate branches
c9a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
c9b0: 20 20 20 20 43 2e 74 79 70 65 20 3d 20 32 09 09 C.type = 2..
c9c0: 2d 2d 20 77 68 69 63 68 20 61 72 65 20 62 72 61 -- which are bra
c9d0: 6e 63 68 20 63 68 61 6e 67 65 73 65 74 73 0a 20 nch changesets.
c9e0: 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 45 UNION.. SE
c9f0: 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 LECT C.cid..
ca00: 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c FROM branch B,
ca10: 20 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 preferedparent
ca20: 50 2c 20 74 61 67 20 54 2c 20 63 73 69 74 65 6d P, tag T, csitem
ca30: 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 CI, changeset C
ca40: 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 .. WHERE B.b
ca50: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 id IN $theset
ca60: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
ca70: 20 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 branches of int
ca80: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
ca90: 20 20 42 2e 73 69 64 20 3d 20 50 2e 70 69 64 09 B.sid = P.pid.
caa0: 2d 2d 20 47 65 74 20 73 75 62 6f 72 64 69 6e 61 -- Get subordina
cab0: 74 65 20 74 61 67 73 20 76 69 61 20 74 68 65 0a te tags via the.
cac0: 09 20 20 20 20 41 4e 44 20 20 20 20 54 2e 73 69 . AND T.si
cad0: 64 20 3d 20 50 2e 73 69 64 09 2d 2d 20 70 72 65 d = P.sid.-- pre
cae0: 66 65 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 fered parents of
caf0: 20 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 20 their symbols.
cb00: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
cb10: 20 20 43 49 2e 69 69 64 20 3d 20 54 2e 74 69 64 CI.iid = T.tid
cb20: 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 -- Select
cb30: 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a all changesets.
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
cb50: 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 C.cid = CI.ci
cb60: 64 09 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 d.-- containing
cb70: 74 68 65 20 73 75 62 6f 72 64 69 6e 61 74 65 20 the subordinate
cb80: 74 61 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 tags.
cb90: 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d AND C.type =
cba0: 20 31 09 09 2d 2d 20 77 68 69 63 68 20 61 72 65 1..-- which are
cbb0: 20 74 61 67 20 63 68 61 6e 67 65 73 65 74 73 0a tag changesets.
cbc0: 09 7d 5d 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 .}]]..return.
cbd0: 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 }.. # result
cbe0: 20 3d 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 0a 20 = symbol name.
cbf0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 63 73 typemethod cs
cc00: 5f 6c 6f 64 20 7b 62 72 61 6e 63 68 65 73 7d 20 _lod {branches}
cc10: 7b 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 73 20 {..# Determines
cc20: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 the name of the
cc30: 73 79 6d 62 6f 6c 20 77 68 69 63 68 20 69 73 20 symbol which is
cc40: 74 68 65 20 6c 69 6e 65 20 6f 66 0a 09 23 20 64 the line of..# d
cc50: 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 evelopment for t
cc60: 68 65 20 62 72 61 6e 63 68 65 73 20 69 6e 20 61 he branches in a
cc70: 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a 09 73 65 changeset....se
cc80: 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e t theset ('[join
cc90: 20 24 62 72 61 6e 63 68 65 73 20 7b 27 2c 27 7d $branches {','}
cca0: 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 61 ]')..return [sta
ccb0: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e te run [subst -n
ccc0: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 ocommands -nobac
ccd0: 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 kslashes {..
cce0: 53 45 4c 45 43 54 0a 09 20 20 20 20 44 49 53 54 SELECT.. DIST
ccf0: 49 4e 43 54 20 4c 2e 6e 61 6d 65 0a 09 20 20 20 INCT L.name..
cd00: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 FROM branch B
cd10: 2c 20 73 79 6d 62 6f 6c 20 4c 0a 09 20 20 20 20 , symbol L..
cd20: 57 48 45 52 45 20 20 42 2e 62 69 64 20 69 6e 20 WHERE B.bid in
cd30: 24 74 68 65 73 65 74 20 20 20 20 20 20 20 20 2d $theset -
cd40: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 - Restrict to br
cd50: 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 anches of intere
cd60: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 4c st.. AND L
cd70: 2e 73 69 64 20 3d 20 42 2e 6c 6f 64 20 20 20 20 .sid = B.lod
cd80: 20 20 20 20 20 20 20 2d 2d 20 47 65 74 20 6c 6f -- Get lo
cd90: 64 20 73 79 6d 62 6f 6c 20 6f 66 20 62 72 61 6e d symbol of bran
cda0: 63 68 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 ch..}]]. }..
cdb0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 69 typemethod li
cdc0: 6d 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 mits {branches}
cdd0: 7b 0a 09 23 20 4e 6f 74 65 73 2e 20 54 68 69 73 {..# Notes. This
cde0: 20 6d 65 74 68 6f 64 20 65 78 69 73 74 73 20 6f method exists o
cdf0: 6e 6c 79 20 66 6f 72 20 62 72 61 6e 63 68 65 73 nly for branches
ce00: 2e 20 49 74 20 69 73 20 6e 65 65 64 65 64 20 74 . It is needed t
ce10: 6f 0a 09 23 20 67 65 74 20 64 65 74 61 69 6c 65 o..# get detaile
ce20: 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 d information ab
ce30: 6f 75 74 20 61 20 62 61 63 6b 77 61 72 64 20 62 out a backward b
ce40: 72 61 6e 63 68 2e 20 49 74 20 64 6f 65 73 0a 09 ranch. It does..
ce50: 23 20 6e 6f 74 20 61 70 70 6c 79 20 74 6f 20 74 # not apply to t
ce60: 61 67 73 2c 20 6e 6f 72 20 72 65 76 69 73 69 6f ags, nor revisio
ce70: 6e 73 2e 20 54 68 65 20 71 75 65 72 69 65 73 20 ns. The queries
ce80: 63 61 6e 20 61 6c 73 6f 0a 09 23 20 72 65 73 74 can also..# rest
ce90: 72 69 63 74 20 74 68 65 6d 73 65 6c 76 65 73 20 rict themselves
cea0: 74 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 to the revision
ceb0: 73 75 63 65 73 73 6f 72 73 2f 70 72 65 64 65 63 sucessors/predec
cec0: 65 73 73 6f 72 73 0a 09 23 20 6f 66 20 62 72 61 essors..# of bra
ced0: 6e 63 68 65 73 2c 20 61 73 20 6f 6e 6c 79 20 74 nches, as only t
cee0: 68 65 79 20 68 61 76 65 20 6f 72 64 65 72 69 6e hey have orderin
cef0: 67 20 64 61 74 61 20 61 6e 64 20 74 68 75 73 20 g data and thus
cf00: 63 61 6e 0a 09 23 20 63 61 75 73 65 20 74 68 65 can..# cause the
cf10: 20 62 61 63 6b 77 61 72 64 6e 65 73 73 2e 0a 0a backwardness...
cf20: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
cf30: 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 oin $branches {'
cf40: 2c 27 7d 5d 27 29 0a 0a 09 73 65 74 20 6d 61 78 ,'}]')...set max
cf50: 70 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 p [state run [su
cf60: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
cf70: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
cf80: 0a 09 20 20 20 20 2d 2d 20 6d 61 78 69 6d 61 6c .. -- maximal
cf90: 20 70 72 65 64 65 63 65 73 73 6f 72 20 70 6f 73 predecessor pos
cfa0: 69 74 69 6f 6e 20 70 65 72 20 62 72 61 6e 63 68 ition per branch
cfb0: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e 62 .. SELECT B.b
cfc0: 69 64 2c 20 4d 41 58 20 28 43 4f 2e 70 6f 73 29 id, MAX (CO.pos)
cfd0: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 .. FROM bra
cfe0: 6e 63 68 20 42 2c 20 72 65 76 69 73 69 6f 6e 20 nch B, revision
cff0: 52 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 R, csitem CI, ch
d000: 61 6e 67 65 73 65 74 20 43 2c 20 63 73 6f 72 64 angeset C, csord
d010: 65 72 20 43 4f 0a 09 20 20 20 20 57 48 45 52 45 er CO.. WHERE
d020: 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 B.bid IN $thes
d030: 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 et -- Restri
d040: 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f ct to branches o
d050: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
d060: 41 4e 44 20 20 20 20 42 2e 72 6f 6f 74 20 3d 20 AND B.root =
d070: 52 2e 72 69 64 20 20 20 20 20 20 20 2d 2d 20 47 R.rid -- G
d080: 65 74 20 62 72 61 6e 63 68 20 72 6f 6f 74 20 72 et branch root r
d090: 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 20 41 4e evisions.. AN
d0a0: 44 20 20 20 20 43 49 2e 69 69 64 20 3d 20 52 2e D CI.iid = R.
d0b0: 72 69 64 20 20 20 20 20 20 20 2d 2d 20 47 65 74 rid -- Get
d0c0: 20 63 68 61 6e 67 65 73 65 74 73 20 63 6f 6e 74 changesets cont
d0d0: 61 69 6e 69 6e 67 20 74 68 65 0a 09 20 20 20 20 aining the..
d0e0: 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 AND C.cid = C
d0f0: 49 2e 63 69 64 20 20 20 20 20 20 20 2d 2d 20 72 I.cid -- r
d100: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 2c 20 77 oot revisions, w
d110: 68 69 63 68 20 61 72 65 0a 09 20 20 20 20 41 4e hich are.. AN
d120: 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 30 20 D C.type = 0
d130: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 72 65 76 -- rev
d140: 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 ision changesets
d150: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 4f 2e .. AND CO.
d160: 63 69 64 20 3d 20 43 2e 63 69 64 20 20 20 20 20 cid = C.cid
d170: 20 20 2d 2d 20 47 65 74 20 74 68 65 69 72 20 74 -- Get their t
d180: 6f 70 6f 6c 6f 67 69 63 61 6c 20 6f 72 64 65 72 opological order
d190: 69 6e 67 0a 09 20 20 20 20 47 52 4f 55 50 20 42 ing.. GROUP B
d1a0: 59 20 42 2e 62 69 64 0a 09 7d 5d 5d 0a 0a 09 73 Y B.bid..}]]...s
d1b0: 65 74 20 6d 69 6e 73 20 5b 73 74 61 74 65 20 72 et mins [state r
d1c0: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
d1d0: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
d1e0: 73 68 65 73 20 7b 0a 09 20 20 20 20 2d 2d 20 6d shes {.. -- m
d1f0: 69 6e 69 6d 61 6c 20 73 75 63 63 65 73 73 6f 72 inimal successor
d200: 20 70 6f 73 69 74 69 6f 6e 20 70 65 72 20 62 72 position per br
d210: 61 6e 63 68 0a 09 20 20 20 20 53 45 4c 45 43 54 anch.. SELECT
d220: 20 42 2e 62 69 64 2c 20 4d 49 4e 20 28 43 4f 2e B.bid, MIN (CO.
d230: 70 6f 73 29 0a 09 20 20 20 20 46 52 4f 4d 20 20 pos).. FROM
d240: 20 62 72 61 6e 63 68 20 42 2c 20 72 65 76 69 73 branch B, revis
d250: 69 6f 6e 20 52 2c 20 63 73 69 74 65 6d 20 43 49 ion R, csitem CI
d260: 2c 20 63 68 61 6e 67 65 73 65 74 20 43 2c 20 63 , changeset C, c
d270: 73 6f 72 64 65 72 20 43 4f 0a 09 20 20 20 20 57 sorder CO.. W
d280: 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 HERE B.bid IN $
d290: 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 theset -- Re
d2a0: 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68 strict to branch
d2b0: 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 es of interest..
d2c0: 20 20 20 20 41 4e 44 20 20 20 20 42 2e 66 69 72 AND B.fir
d2d0: 73 74 20 3d 20 52 2e 72 69 64 20 20 20 20 20 20 st = R.rid
d2e0: 2d 2d 20 47 65 74 20 74 68 65 20 66 69 72 73 74 -- Get the first
d2f0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 revisions on th
d300: 65 20 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20 e branches..
d310: 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d 20 AND CI.iid =
d320: 52 2e 72 69 64 20 20 20 20 20 20 20 2d 2d 20 47 R.rid -- G
d330: 65 74 20 63 68 61 6e 67 65 73 65 74 73 20 63 6f et changesets co
d340: 6e 74 61 69 6e 69 6e 67 20 74 68 65 0a 09 20 20 ntaining the..
d350: 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d AND C.cid =
d360: 20 43 49 2e 63 69 64 09 2d 2d 20 66 69 72 73 74 CI.cid.-- first
d370: 20 72 65 76 69 73 69 6f 6e 73 2c 20 77 68 69 63 revisions, whic
d380: 68 20 61 72 65 0a 09 20 20 20 20 41 4e 44 20 20 h are.. AND
d390: 20 20 43 2e 74 79 70 65 20 3d 20 30 09 09 2d 2d C.type = 0..--
d3a0: 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 revision change
d3b0: 73 65 74 73 0a 09 20 20 20 20 41 4e 44 20 20 20 sets.. AND
d3c0: 20 43 4f 2e 63 69 64 20 3d 20 43 2e 63 69 64 09 CO.cid = C.cid.
d3d0: 2d 2d 20 47 65 74 20 74 68 65 69 72 20 74 6f 70 -- Get their top
d3e0: 6f 6c 6f 67 69 63 61 6c 20 6f 72 64 65 72 69 6e ological orderin
d3f0: 67 0a 09 20 20 20 20 47 52 4f 55 50 20 42 59 20 g.. GROUP BY
d400: 42 2e 62 69 64 0a 09 7d 5d 5d 0a 0a 20 20 20 20 B.bid..}]]..
d410: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 return [list
d420: 20 24 6d 61 78 70 20 24 6d 69 6e 73 5d 0a 20 20 $maxp $mins].
d430: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 }.. # # ##
d440: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
d450: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
d460: 0a 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 . ## Configur
d470: 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d ation.. pragm
d480: 61 20 2d 68 61 73 69 6e 73 74 61 6e 63 65 73 20 a -hasinstances
d490: 20 20 6e 6f 20 3b 20 23 20 73 69 6e 67 6c 65 74 no ; # singlet
d4a0: 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 on. pragma -h
d4b0: 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f astypeinfo no
d4c0: 20 3b 20 23 20 6e 6f 20 69 6e 74 72 6f 73 70 65 ; # no introspe
d4d0: 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 ction. pragma
d4e0: 20 2d 68 61 73 74 79 70 65 64 65 73 74 72 6f 79 -hastypedestroy
d4f0: 20 6e 6f 20 3b 20 23 20 69 6d 6d 6f 72 74 61 6c no ; # immortal
d500: 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 .}..# # ## ### #
d510: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
d520: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 ########### ####
d530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
d540: 23 0a 23 23 0a 0a 6e 61 6d 65 73 70 61 63 65 20 #.##..namespace
d550: 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 eval ::vc::fossi
d560: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
d570: 70 72 6f 6a 65 63 74 20 7b 0a 20 20 20 20 6e 61 project {. na
d580: 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 72 mespace export r
d590: 65 76 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 ev. namespace
d5a0: 20 65 76 61 6c 20 72 65 76 20 7b 0a 09 6e 61 6d eval rev {..nam
d5b0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import ::
d5c0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
d5d0: 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 rt::cvs::state..
d5e0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
d5f0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
d600: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 mport::cvs::inte
d610: 67 72 69 74 79 0a 09 6e 61 6d 65 73 70 61 63 65 grity..namespace
d620: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f import ::vc::to
d630: 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 ols::misc::*..na
d640: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
d650: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 :vc::tools::trou
d660: 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 ble..namespace i
d670: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c mport ::vc::tool
d680: 73 3a 3a 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 s::log..log regi
d690: 73 74 65 72 20 63 73 65 74 73 0a 0a 09 23 20 53 ster csets...# S
d6a0: 65 74 20 75 70 20 74 68 65 20 68 65 6c 70 65 72 et up the helper
d6b0: 20 73 69 6e 67 6c 65 74 6f 6e 73 0a 09 6e 61 6d singletons..nam
d6c0: 65 73 70 61 63 65 20 65 76 61 6c 20 72 65 76 20 espace eval rev
d6d0: 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 {.. namespace
d6e0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
d6f0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
d700: 73 3a 3a 73 74 61 74 65 0a 09 20 20 20 20 6e 61 s::state.. na
d710: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
d720: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
d730: 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 ort::cvs::integr
d740: 69 74 79 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 ity.. namespa
d750: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
d760: 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a 09 6e tools::log..}..n
d770: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 73 79 amespace eval sy
d780: 6d 3a 3a 74 61 67 20 7b 0a 09 20 20 20 20 6e 61 m::tag {.. na
d790: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
d7a0: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
d7b0: 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a ort::cvs::state.
d7c0: 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 . namespace i
d7d0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 mport ::vc::foss
d7e0: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
d7f0: 3a 69 6e 74 65 67 72 69 74 79 0a 09 20 20 20 20 :integrity..
d800: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
d810: 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f ::vc::tools::lo
d820: 67 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 g..}..namespace
d830: 65 76 61 6c 20 73 79 6d 3a 3a 62 72 61 6e 63 68 eval sym::branch
d840: 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 {.. namespac
d850: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
d860: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
d870: 76 73 3a 3a 73 74 61 74 65 0a 09 20 20 20 20 6e vs::state.. n
d880: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
d890: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
d8a0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 port::cvs::integ
d8b0: 72 69 74 79 0a 09 20 20 20 20 6e 61 6d 65 73 70 rity.. namesp
d8c0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
d8d0: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a 20 :tools::log..}.
d8e0: 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 }.}..# # ## #
d8f0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
d900: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 # #############
d910: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
d920: 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a #####.## Ready..
d930: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 package provide
d940: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
d950: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 rt::cvs::project
d960: 3a 3a 72 65 76 20 31 2e 30 0a 72 65 74 75 72 6e ::rev 1.0.return
d970: 0a .