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