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 66 6f 72 65 61 63 68 20 69 69 64 20 24 ...foreach iid $
07c0: 69 74 65 6d 73 20 7b 20 6c 61 70 70 65 6e 64 20 items { lappend
07d0: 6d 79 74 69 74 65 6d 73 20 5b 6c 69 73 74 20 24 mytitems [list $
07e0: 63 73 74 79 70 65 20 24 69 69 64 5d 20 7d 0a 0a cstype $iid] }..
07f0: 09 23 20 4b 65 65 70 20 74 72 61 63 6b 20 6f 66 .# Keep track of
0800: 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 20 63 the generated c
0810: 68 61 6e 67 65 73 65 74 73 20 61 6e 64 20 6f 66 hangesets and of
0820: 20 74 68 65 20 69 6e 76 65 72 73 65 0a 09 23 20 the inverse..#
0830: 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 69 74 65 mapping from ite
0840: 6d 73 20 74 6f 20 74 68 65 6d 2e 0a 09 6c 61 70 ms to them...lap
0850: 70 65 6e 64 20 6d 79 63 68 61 6e 67 65 73 65 74 pend mychangeset
0860: 73 20 20 20 24 73 65 6c 66 0a 09 6c 61 70 70 65 s $self..lappe
0870: 6e 64 20 6d 79 74 63 68 61 6e 67 65 73 65 74 73 nd mytchangesets
0880: 28 24 63 73 74 79 70 65 29 20 24 73 65 6c 66 0a ($cstype) $self.
0890: 09 73 65 74 20 20 20 20 20 6d 79 69 64 6d 61 70 .set myidmap
08a0: 28 24 6d 79 69 64 29 20 24 73 65 6c 66 0a 0a 09 ($myid) $self...
08b0: 4d 61 70 49 74 65 6d 73 20 24 63 73 74 79 70 65 MapItems $cstype
08c0: 20 24 69 74 65 6d 73 0a 09 72 65 74 75 72 6e 0a $items..return.
08d0: 20 20 20 20 7d 0a 0a 20 20 20 20 64 65 73 74 72 }.. destr
08e0: 75 63 74 6f 72 20 7b 0a 09 23 20 57 65 20 6d 61 uctor {..# We ma
08f0: 79 20 62 65 20 61 62 6c 65 20 74 6f 20 67 65 74 y be able to get
0900: 20 72 69 64 20 6f 66 20 74 68 69 73 20 65 6e 74 rid of this ent
0910: 69 72 65 6c 79 2c 20 61 74 20 6c 65 61 73 74 20 irely, at least
0920: 66 6f 72 0a 09 23 20 28 64 65 29 63 6f 6e 73 74 for..# (de)const
0930: 72 75 63 74 69 6f 6e 20 61 6e 64 20 70 61 73 73 ruction and pass
0940: 20 49 6e 69 74 43 53 65 74 73 2e 0a 0a 09 55 6e InitCSets....Un
0950: 6d 61 70 49 74 65 6d 73 20 24 6d 79 74 79 70 65 mapItems $mytype
0960: 20 24 6d 79 69 74 65 6d 73 0a 09 75 6e 73 65 74 $myitems..unset
0970: 20 6d 79 69 64 6d 61 70 28 24 6d 79 69 64 29 0a myidmap($myid).
0980: 0a 09 73 65 74 20 70 6f 73 20 20 20 20 20 20 20 ..set pos
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 73 [ls
09a0: 65 61 72 63 68 20 2d 65 78 61 63 74 20 24 6d 79 earch -exact $my
09b0: 63 68 61 6e 67 65 73 65 74 73 20 24 73 65 6c 66 changesets $self
09c0: 5d 0a 09 73 65 74 20 6d 79 63 68 61 6e 67 65 73 ]..set mychanges
09d0: 65 74 73 20 20 20 20 20 20 20 20 20 20 20 5b 6c ets [l
09e0: 72 65 70 6c 61 63 65 20 20 20 20 20 20 20 24 6d replace $m
09f0: 79 63 68 61 6e 67 65 73 65 74 73 20 24 70 6f 73 ychangesets $pos
0a00: 20 24 70 6f 73 5d 0a 09 73 65 74 20 70 6f 73 20 $pos]..set pos
0a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0a20: 20 20 20 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 [lsearch -exa
0a30: 63 74 20 24 6d 79 74 63 68 61 6e 67 65 73 65 74 ct $mytchangeset
0a40: 73 28 24 6d 79 74 79 70 65 29 20 24 73 65 6c 66 s($mytype) $self
0a50: 5d 0a 09 73 65 74 20 6d 79 74 63 68 61 6e 67 65 ]..set mytchange
0a60: 73 65 74 73 28 24 6d 79 74 79 70 65 29 20 5b 6c sets($mytype) [l
0a70: 72 65 70 6c 61 63 65 20 20 20 20 20 20 20 24 6d replace $m
0a80: 79 74 63 68 61 6e 67 65 73 65 74 73 28 24 6d 79 ytchangesets($my
0a90: 74 79 70 65 29 20 24 70 6f 73 20 24 70 6f 73 5d type) $pos $pos]
0aa0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
0ab0: 20 20 20 20 6d 65 74 68 6f 64 20 73 74 72 20 7b method str {
0ac0: 7d 20 7b 0a 09 73 65 74 20 73 74 72 20 20 20 20 } {..set str
0ad0: 22 3c 22 0a 09 73 65 74 20 64 65 74 61 69 6c 20 "<"..set detail
0ae0: 22 22 0a 09 69 66 20 7b 5b 24 6d 79 74 79 70 65 ""..if {[$mytype
0af0: 6f 62 6a 20 62 79 73 79 6d 62 6f 6c 5d 7d 20 7b obj bysymbol]} {
0b00: 0a 09 20 20 20 20 73 65 74 20 64 65 74 61 69 6c .. set detail
0b10: 20 22 20 27 5b 73 74 61 74 65 20 6f 6e 65 20 7b " '[state one {
0b20: 0a 09 09 53 45 4c 45 43 54 20 53 2e 6e 61 6d 65 ...SELECT S.name
0b30: 0a 09 09 46 52 4f 4d 20 20 20 73 79 6d 62 6f 6c ...FROM symbol
0b40: 20 53 0a 09 09 57 48 45 52 45 20 20 53 2e 73 69 S...WHERE S.si
0b50: 64 20 3d 20 24 6d 79 73 72 63 69 64 0a 09 20 20 d = $mysrcid..
0b60: 20 20 7d 5d 27 22 0a 09 7d 0a 09 61 70 70 65 6e }]'"..}..appen
0b70: 64 20 73 74 72 20 22 24 6d 79 74 79 70 65 20 24 d str "$mytype $
0b80: 7b 6d 79 69 64 7d 24 7b 64 65 74 61 69 6c 7d 3e {myid}${detail}>
0b90: 22 0a 09 72 65 74 75 72 6e 20 24 73 74 72 0a 20 "..return $str.
0ba0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
0bb0: 20 6c 6f 64 20 7b 7d 20 7b 0a 09 72 65 74 75 72 lod {} {..retur
0bc0: 6e 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 63 73 n [$mytypeobj cs
0bd0: 5f 6c 6f 64 20 24 6d 79 73 72 63 69 64 20 24 6d _lod $mysrcid $m
0be0: 79 69 74 65 6d 73 5d 0a 20 20 20 20 7d 0a 0a 20 yitems]. }..
0bf0: 20 20 20 6d 65 74 68 6f 64 20 69 64 20 20 20 20 method id
0c00: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 {} { return $myi
0c10: 64 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 d }. method i
0c20: 74 65 6d 73 20 7b 7d 20 7b 20 72 65 74 75 72 6e tems {} { return
0c30: 20 24 6d 79 74 69 74 65 6d 73 20 7d 0a 20 20 20 $mytitems }.
0c40: 20 6d 65 74 68 6f 64 20 64 61 74 61 20 20 7b 7d method data {}
0c50: 20 7b 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 { return [list
0c60: 24 6d 79 70 72 6f 6a 65 63 74 20 24 6d 79 74 79 $myproject $myty
0c70: 70 65 20 24 6d 79 73 72 63 69 64 5d 20 7d 0a 0a pe $mysrcid] }..
0c80: 20 20 20 20 64 65 6c 65 67 61 74 65 20 6d 65 74 delegate met
0c90: 68 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 74 hod bysymbol t
0ca0: 6f 20 6d 79 74 79 70 65 6f 62 6a 0a 20 20 20 20 o mytypeobj.
0cb0: 64 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 delegate method
0cc0: 62 79 72 65 76 69 73 69 6f 6e 20 74 6f 20 6d 79 byrevision to my
0cd0: 74 79 70 65 6f 62 6a 0a 20 20 20 20 64 65 6c 65 typeobj. dele
0ce0: 67 61 74 65 20 6d 65 74 68 6f 64 20 69 73 62 72 gate method isbr
0cf0: 61 6e 63 68 20 20 20 74 6f 20 6d 79 74 79 70 65 anch to mytype
0d00: 6f 62 6a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 obj. delegate
0d10: 20 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 20 method istag
0d20: 20 20 20 74 6f 20 6d 79 74 79 70 65 6f 62 6a 0a to mytypeobj.
0d30: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 70 . method setp
0d40: 6f 73 20 7b 70 7d 20 7b 20 73 65 74 20 6d 79 70 os {p} { set myp
0d50: 6f 73 20 24 70 20 3b 20 72 65 74 75 72 6e 20 7d os $p ; return }
0d60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 6f 73 20 . method pos
0d70: 20 20 20 7b 7d 20 20 7b 20 72 65 74 75 72 6e 20 {} { return
0d80: 24 6d 79 70 6f 73 20 7d 0a 0a 20 20 20 20 6d 65 $mypos }.. me
0d90: 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 75 thod determinesu
0da0: 63 63 65 73 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 ccessors {} {..#
0db0: 20 50 61 73 73 20 36 20 6f 70 65 72 61 74 69 6f Pass 6 operatio
0dc0: 6e 2e 20 43 6f 6d 70 75 74 65 20 70 72 6f 6a 65 n. Compute proje
0dd0: 63 74 2d 6c 65 76 65 6c 20 64 65 70 65 6e 64 65 ct-level depende
0de0: 6e 63 69 65 73 20 66 72 6f 6d 0a 09 23 20 74 68 ncies from..# th
0df0: 65 20 66 69 6c 65 2d 6c 65 76 65 6c 20 64 61 74 e file-level dat
0e00: 61 20 61 6e 64 20 73 61 76 65 20 69 74 20 62 61 a and save it ba
0e10: 63 6b 20 74 6f 20 74 68 65 20 73 74 61 74 65 2e ck to the state.
0e20: 20 54 68 69 73 20 6d 61 79 0a 09 23 20 62 65 20 This may..# be
0e30: 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 68 called during th
0e40: 65 20 63 79 63 6c 65 20 62 72 65 61 6b 65 72 20 e cycle breaker
0e50: 70 61 73 73 65 73 20 61 73 20 77 65 6c 6c 2c 20 passes as well,
0e60: 74 6f 20 61 64 6a 75 73 74 0a 09 23 20 74 68 65 to adjust..# the
0e70: 20 73 75 63 63 65 73 73 6f 72 20 69 6e 66 6f 72 successor infor
0e80: 6d 61 74 69 6f 6e 20 6f 66 20 63 68 61 6e 67 65 mation of change
0e90: 73 65 74 73 20 77 68 69 63 68 20 61 72 65 20 74 sets which are t
0ea0: 68 65 0a 09 23 20 70 72 65 64 65 63 65 73 73 6f he..# predecesso
0eb0: 72 73 20 6f 66 20 64 72 6f 70 70 65 64 20 63 68 rs of dropped ch
0ec0: 61 6e 67 65 73 65 74 73 2e 20 46 6f 72 20 74 68 angesets. For th
0ed0: 65 6d 20 77 65 20 68 61 76 65 20 74 6f 0a 09 23 em we have to..#
0ee0: 20 72 65 6d 6f 76 65 20 74 68 65 69 72 20 65 78 remove their ex
0ef0: 69 73 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 isting informati
0f00: 6f 6e 20 66 69 72 73 74 20 62 65 66 6f 72 65 20 on first before
0f10: 69 6e 73 65 72 74 69 6e 67 20 74 68 65 0a 09 23 inserting the..#
0f20: 20 6e 65 77 20 64 61 74 61 2e 0a 09 73 74 61 74 new data...stat
0f30: 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 44 45 4c e run {.. DEL
0f40: 45 54 45 20 46 52 4f 4d 20 63 73 73 75 63 63 65 ETE FROM cssucce
0f50: 73 73 6f 72 20 57 48 45 52 45 20 63 69 64 20 3d ssor WHERE cid =
0f60: 20 24 6d 79 69 64 3b 0a 09 7d 0a 09 73 65 74 20 $myid;..}..set
0f70: 6c 6f 6f 70 20 30 0a 09 23 20 54 4f 44 4f 3a 20 loop 0..# TODO:
0f80: 43 68 65 63 6b 20 6f 74 68 65 72 20 75 73 65 73 Check other uses
0f90: 20 6f 66 20 63 73 5f 73 75 63 65 73 73 6f 72 73 of cs_sucessors
0fa0: 2e 0a 09 23 20 54 4f 44 4f 3a 20 43 6f 6e 73 69 ...# TODO: Consi
0fb0: 64 65 72 20 6d 65 72 67 69 6e 67 20 63 73 5f 73 der merging cs_s
0fc0: 75 63 65 73 73 6f 72 27 73 20 53 45 4c 45 43 54 ucessor's SELECT
0fd0: 20 77 69 74 68 20 74 68 65 20 49 4e 53 45 52 54 with the INSERT
0fe0: 20 68 65 72 65 2e 0a 09 66 6f 72 65 61 63 68 20 here...foreach
0ff0: 6e 69 64 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 nid [$mytypeobj
1000: 63 73 5f 73 75 63 63 65 73 73 6f 72 73 20 24 6d cs_successors $m
1010: 79 69 74 65 6d 73 5d 20 7b 0a 09 20 20 20 20 73 yitems] {.. s
1020: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 tate run {...INS
1030: 45 52 54 20 49 4e 54 4f 20 63 73 73 75 63 63 65 ERT INTO cssucce
1040: 73 73 6f 72 20 28 63 69 64 2c 20 20 6e 69 64 29 ssor (cid, nid)
1050: 0a 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 ...VALUES
1060: 20 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 ($myi
1070: 64 2c 24 6e 69 64 29 0a 09 20 20 20 20 7d 0a 09 d,$nid).. }..
1080: 20 20 20 20 69 66 20 7b 24 6e 69 64 20 3d 3d 20 if {$nid ==
1090: 24 6d 79 69 64 7d 20 7b 20 73 65 74 20 6c 6f 6f $myid} { set loo
10a0: 70 20 31 20 7d 0a 09 7d 0a 09 23 20 52 65 70 6f p 1 }..}..# Repo
10b0: 72 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d rt after the com
10c0: 70 6c 65 74 65 20 73 74 72 75 63 74 75 72 65 20 plete structure
10d0: 68 61 73 20 62 65 65 6e 20 73 61 76 65 64 2e 0a has been saved..
10e0: 09 69 66 20 7b 24 6c 6f 6f 70 7d 20 7b 20 24 73 .if {$loop} { $s
10f0: 65 6c 66 20 72 65 70 6f 72 74 6c 6f 6f 70 20 7d elf reportloop }
1100: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
1110: 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c # result = l
1120: 69 73 74 20 28 63 68 61 6e 67 65 73 65 74 29 0a ist (changeset).
1130: 20 20 20 20 6d 65 74 68 6f 64 20 73 75 63 63 65 method succe
1140: 73 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 20 55 73 ssors {} {..# Us
1150: 65 20 74 68 65 20 64 61 74 61 20 73 61 76 65 64 e the data saved
1160: 20 62 79 20 70 61 73 73 20 36 2e 0a 09 72 65 74 by pass 6...ret
1170: 75 72 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 urn [struct::lis
1180: 74 20 6d 61 70 20 5b 73 74 61 74 65 20 72 75 6e t map [state run
1190: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53 {.. SELECT S
11a0: 2e 6e 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 .nid.. FROM
11b0: 20 63 73 73 75 63 63 65 73 73 6f 72 20 53 0a 09 cssuccessor S..
11c0: 20 20 20 20 57 48 45 52 45 20 20 53 2e 63 69 64 WHERE S.cid
11d0: 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 5b 6d 79 = $myid..}] [my
11e0: 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 5d 5d 0a typemethod of]].
11f0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 69 74 65 }.. # ite
1200: 6d 20 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 m -> list (item)
1210: 0a 20 20 20 20 6d 65 74 68 6f 64 20 6e 65 78 74 . method next
1220: 6d 61 70 20 7b 7d 20 7b 0a 09 24 6d 79 74 79 70 map {} {..$mytyp
1230: 65 6f 62 6a 20 73 75 63 63 65 73 73 6f 72 73 20 eobj successors
1240: 74 6d 70 20 24 6d 79 69 74 65 6d 73 0a 09 72 65 tmp $myitems..re
1250: 74 75 72 6e 20 5b 61 72 72 61 79 20 67 65 74 20 turn [array get
1260: 74 6d 70 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 tmp]. }..
1270: 6d 65 74 68 6f 64 20 62 72 65 61 6b 69 6e 74 65 method breakinte
1280: 72 6e 61 6c 64 65 70 65 6e 64 65 6e 63 69 65 73 rnaldependencies
1290: 20 7b 63 76 7d 20 7b 0a 09 75 70 76 61 72 20 31 {cv} {..upvar 1
12a0: 20 24 63 76 20 63 6f 75 6e 74 65 72 0a 09 6c 6f $cv counter..lo
12b0: 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73 g write 14 csets
12c0: 20 7b 5b 24 73 65 6c 66 20 73 74 72 5d 20 42 49 {[$self str] BI
12d0: 44 7d 0a 09 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d D}..vc::tools::m
12e0: 65 6d 3a 3a 6d 61 72 6b 0a 0a 09 23 20 54 68 69 em::mark...# Thi
12f0: 73 20 6d 65 74 68 6f 64 20 69 6e 73 70 65 63 74 s method inspect
1300: 73 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 2c s the changeset,
1310: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 69 6e 74 looking for int
1320: 65 72 6e 61 6c 0a 09 23 20 64 65 70 65 6e 64 65 ernal..# depende
1330: 6e 63 69 65 73 2e 20 4e 6f 74 68 69 6e 67 20 69 ncies. Nothing i
1340: 73 20 64 6f 6e 65 20 69 66 20 74 68 65 72 65 20 s done if there
1350: 61 72 65 20 6e 6f 20 73 75 63 68 2e 0a 0a 09 23 are no such....#
1360: 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20 63 Otherwise the c
1370: 68 61 6e 67 65 73 65 74 20 69 73 20 73 70 6c 69 hangeset is spli
1380: 74 20 69 6e 74 6f 20 61 20 73 65 74 20 6f 66 20 t into a set of
1390: 66 72 61 67 6d 65 6e 74 73 0a 09 23 20 77 68 69 fragments..# whi
13a0: 63 68 20 68 61 76 65 20 6e 6f 20 69 6e 74 65 72 ch have no inter
13b0: 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 nal dependencies
13c0: 2c 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74 , transforming t
13d0: 68 65 0a 09 23 20 69 6e 74 65 72 6e 61 6c 20 64 he..# internal d
13e0: 65 70 65 6e 64 65 6e 63 69 65 73 20 69 6e 74 6f ependencies into
13f0: 20 65 78 74 65 72 6e 61 6c 20 6f 6e 65 73 2e 20 external ones.
1400: 54 68 65 20 6e 65 77 20 63 68 61 6e 67 65 73 65 The new changese
1410: 74 73 0a 09 23 20 67 65 6e 65 72 61 74 65 64 20 ts..# generated
1420: 66 72 6f 6d 20 74 68 65 20 66 72 61 67 6d 65 6e from the fragmen
1430: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 72 t information ar
1440: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a 09 e added to the..
1450: 23 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 # list of all ch
1460: 61 6e 67 65 73 65 74 73 20 28 62 79 20 74 68 65 angesets (by the
1470: 20 63 61 6c 6c 65 72 29 2e 0a 0a 09 23 20 54 68 caller)....# Th
1480: 65 20 63 6f 64 65 20 63 68 65 63 6b 73 20 6f 6e e code checks on
1490: 6c 79 20 73 75 63 63 65 73 73 6f 72 20 64 65 70 ly successor dep
14a0: 65 6e 64 65 6e 63 69 65 73 2c 20 61 73 20 74 68 endencies, as th
14b0: 69 73 20 61 75 74 6f 2d 0a 09 23 20 6d 61 74 69 is auto-..# mati
14c0: 63 61 6c 6c 79 20 63 6f 76 65 72 73 20 74 68 65 cally covers the
14d0: 20 70 72 65 64 65 63 65 73 73 6f 72 20 64 65 70 predecessor dep
14e0: 65 6e 64 65 6e 63 69 65 73 20 61 73 20 77 65 6c endencies as wel
14f0: 6c 20 28 41 6e 79 0a 09 23 20 73 75 63 63 65 73 l (Any..# succes
1500: 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 79 20 61 sor dependency a
1510: 20 2d 3e 20 62 20 69 73 20 61 6c 73 6f 20 61 20 -> b is also a
1520: 70 72 65 64 65 63 65 73 73 6f 72 20 64 65 70 65 predecessor depe
1530: 6e 64 65 6e 63 79 0a 09 23 20 62 20 2d 3e 20 61 ndency..# b -> a
1540: 29 2e 0a 0a 09 61 72 72 61 79 20 73 65 74 20 62 )....array set b
1550: 72 65 61 6b 73 20 7b 7d 0a 0a 09 73 65 74 20 66 reaks {}...set f
1560: 72 61 67 6d 65 6e 74 73 20 5b 42 72 65 61 6b 44 ragments [BreakD
1570: 69 72 65 63 74 44 65 70 65 6e 64 65 6e 63 69 65 irectDependencie
1580: 73 20 24 6d 79 69 74 65 6d 73 20 62 72 65 61 6b s $myitems break
1590: 73 5d 0a 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 s]...if {![lleng
15a0: 74 68 20 24 66 72 61 67 6d 65 6e 74 73 5d 7d 20 th $fragments]}
15b0: 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 0a 09 { return {} }...
15c0: 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 43 72 return [$self Cr
15d0: 65 61 74 65 46 72 6f 6d 46 72 61 67 6d 65 6e 74 eateFromFragment
15e0: 73 20 24 66 72 61 67 6d 65 6e 74 73 20 63 6f 75 s $fragments cou
15f0: 6e 74 65 72 20 62 72 65 61 6b 73 5d 0a 20 20 20 nter breaks].
1600: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 }.. method p
1610: 65 72 73 69 73 74 20 7b 7d 20 7b 0a 09 73 65 74 ersist {} {..set
1620: 20 74 69 64 20 24 6d 79 63 73 74 79 70 65 28 24 tid $mycstype($
1630: 6d 79 74 79 70 65 29 0a 09 73 65 74 20 70 69 64 mytype)..set pid
1640: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 69 64 5d [$myproject id]
1650: 0a 09 73 65 74 20 70 6f 73 20 30 0a 0a 09 73 74 ..set pos 0...st
1660: 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 ate transaction
1670: 7b 0a 09 20 20 20 20 73 74 61 74 65 20 72 75 6e {.. state run
1680: 20 7b 0a 09 09 49 4e 53 45 52 54 20 49 4e 54 4f {...INSERT INTO
1690: 20 63 68 61 6e 67 65 73 65 74 20 28 63 69 64 2c changeset (cid,
16a0: 20 20 20 70 69 64 2c 20 20 74 79 70 65 2c 20 73 pid, type, s
16b0: 72 63 29 0a 09 09 56 41 4c 55 45 53 20 20 20 20 rc)...VALUES
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 ($my
16d0: 69 64 2c 20 24 70 69 64 2c 20 24 74 69 64 2c 20 id, $pid, $tid,
16e0: 24 6d 79 73 72 63 69 64 29 3b 0a 09 20 20 20 20 $mysrcid);..
16f0: 7d 0a 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 }... foreach
1700: 69 69 64 20 24 6d 79 69 74 65 6d 73 20 7b 0a 09 iid $myitems {..
1710: 09 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 20 .state run {...
1720: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 INSERT INTO c
1730: 73 69 74 65 6d 20 28 63 69 64 2c 20 20 20 70 6f sitem (cid, po
1740: 73 2c 20 20 69 69 64 29 0a 09 09 20 20 20 20 56 s, iid)... V
1750: 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20 ALUES
1760: 20 20 28 24 6d 79 69 64 2c 20 24 70 6f 73 2c 20 ($myid, $pos,
1770: 24 69 69 64 29 3b 0a 09 09 7d 0a 09 09 69 6e 63 $iid);...}...inc
1780: 72 20 70 6f 73 0a 09 20 20 20 20 7d 0a 09 7d 0a r pos.. }..}.
1790: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
17a0: 20 20 20 6d 65 74 68 6f 64 20 74 69 6d 65 72 61 method timera
17b0: 6e 67 65 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 nge {} { return
17c0: 5b 24 6d 79 74 79 70 65 6f 62 6a 20 74 69 6d 65 [$mytypeobj time
17d0: 72 61 6e 67 65 20 24 6d 79 69 74 65 6d 73 5d 20 range $myitems]
17e0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6c 69 }.. method li
17f0: 6d 69 74 73 20 7b 7d 20 7b 0a 09 73 74 72 75 63 mits {} {..struc
1800: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b t::list assign [
1810: 24 6d 79 74 79 70 65 6f 62 6a 20 6c 69 6d 69 74 $mytypeobj limit
1820: 73 20 24 6d 79 69 74 65 6d 73 5d 20 6d 61 78 70 s $myitems] maxp
1830: 20 6d 69 6e 73 0a 09 72 65 74 75 72 6e 20 5b 6c mins..return [l
1840: 69 73 74 20 5b 54 61 67 49 74 65 6d 44 69 63 74 ist [TagItemDict
1850: 20 24 6d 61 78 70 20 24 6d 79 74 79 70 65 5d 20 $maxp $mytype]
1860: 5b 54 61 67 49 74 65 6d 44 69 63 74 20 24 6d 69 [TagItemDict $mi
1870: 6e 73 20 24 6d 79 74 79 70 65 5d 5d 0a 20 20 20 ns $mytype]].
1880: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 }.. method d
1890: 72 6f 70 20 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72 rop {} {..log wr
18a0: 69 74 65 20 38 20 63 73 65 74 73 20 7b 44 72 6f ite 8 csets {Dro
18b0: 70 70 69 6e 67 20 24 73 65 6c 66 20 3d 20 5b 24 pping $self = [$
18c0: 73 65 6c 66 20 73 74 72 5d 7d 0a 0a 09 73 74 61 self str]}...sta
18d0: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b te transaction {
18e0: 0a 09 20 20 20 20 73 74 61 74 65 20 72 75 6e 20 .. state run
18f0: 7b 0a 09 09 44 45 4c 45 54 45 20 46 52 4f 4d 20 {...DELETE FROM
1900: 63 68 61 6e 67 65 73 65 74 20 20 20 57 48 45 52 changeset WHER
1910: 45 20 63 69 64 20 3d 20 24 6d 79 69 64 3b 0a 09 E cid = $myid;..
1920: 09 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 73 69 .DELETE FROM csi
1930: 74 65 6d 20 20 20 20 20 20 57 48 45 52 45 20 63 tem WHERE c
1940: 69 64 20 3d 20 24 6d 79 69 64 3b 0a 09 09 44 45 id = $myid;...DE
1950: 4c 45 54 45 20 46 52 4f 4d 20 63 73 73 75 63 63 LETE FROM cssucc
1960: 65 73 73 6f 72 20 57 48 45 52 45 20 63 69 64 20 essor WHERE cid
1970: 3d 20 24 6d 79 69 64 3b 0a 09 20 20 20 20 7d 0a = $myid;.. }.
1980: 09 7d 0a 0a 09 23 20 52 65 74 75 72 6e 20 74 68 .}...# Return th
1990: 65 20 6c 69 73 74 20 6f 66 20 70 72 65 64 65 63 e list of predec
19a0: 65 73 73 6f 72 73 20 73 6f 20 74 68 61 74 20 74 essors so that t
19b0: 68 65 79 20 63 61 6e 20 62 65 20 61 64 6a 75 73 hey can be adjus
19c0: 74 65 64 2e 0a 09 72 65 74 75 72 6e 20 5b 73 74 ted...return [st
19d0: 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 5b ruct::list map [
19e0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 state run {..
19f0: 20 53 45 4c 45 43 54 20 63 69 64 0a 09 20 20 20 SELECT cid..
1a00: 20 46 52 4f 4d 20 20 20 63 73 73 75 63 63 65 73 FROM cssucces
1a10: 73 6f 72 0a 09 20 20 20 20 57 48 45 52 45 20 20 sor.. WHERE
1a20: 6e 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 nid = $myid..}]
1a30: 5b 6d 79 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 [mytypemethod of
1a40: 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 ]]. }.. me
1a50: 74 68 6f 64 20 72 65 70 6f 72 74 6c 6f 6f 70 20 thod reportloop
1a60: 7b 7b 6b 69 6c 6c 20 31 7d 7d 20 7b 0a 09 23 20 {{kill 1}} {..#
1a70: 57 65 20 70 72 69 6e 74 20 74 68 65 20 69 74 65 We print the ite
1a80: 6d 73 20 77 68 69 63 68 20 61 72 65 20 70 72 6f ms which are pro
1a90: 64 75 63 69 6e 67 20 74 68 65 20 6c 6f 6f 70 2c ducing the loop,
1aa0: 20 61 6e 64 20 68 6f 77 2e 0a 0a 09 73 65 74 20 and how....set
1ab0: 68 64 72 20 22 53 65 6c 66 2d 72 65 66 65 72 65 hdr "Self-refere
1ac0: 6e 74 69 61 6c 20 63 68 61 6e 67 65 73 65 74 20 ntial changeset
1ad0: 5b 24 73 65 6c 66 20 73 74 72 5d 20 5f 5f 5f 5f [$self str] ____
1ae0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 22 0a ______________".
1af0: 09 73 65 74 20 66 74 72 20 5b 72 65 67 73 75 62 .set ftr [regsub
1b00: 20 2d 61 6c 6c 20 7b 5b 5e 20 09 5d 7d 20 24 68 -all {[^ .]} $h
1b10: 64 72 20 7b 5f 7d 5d 0a 0a 09 6c 6f 67 20 77 72 dr {_}]...log wr
1b20: 69 74 65 20 30 20 63 73 65 74 73 20 24 68 64 72 ite 0 csets $hdr
1b30: 0a 09 66 6f 72 65 61 63 68 20 7b 69 74 65 6d 20 ..foreach {item
1b40: 6e 65 78 74 69 74 65 6d 7d 20 5b 24 6d 79 74 79 nextitem} [$myty
1b50: 70 65 6f 62 6a 20 6c 6f 6f 70 73 20 24 6d 79 69 peobj loops $myi
1b60: 74 65 6d 73 5d 20 7b 0a 09 20 20 20 20 23 20 43 tems] {.. # C
1b70: 72 65 61 74 65 20 74 61 67 67 65 64 20 69 74 65 reate tagged ite
1b80: 6d 73 20 66 72 6f 6d 20 74 68 65 20 69 64 20 61 ms from the id a
1b90: 6e 64 20 6f 75 72 20 74 79 70 65 2e 0a 09 20 20 nd our type...
1ba0: 20 20 73 65 74 20 69 74 65 6d 20 20 20 20 20 5b set item [
1bb0: 6c 69 73 74 20 24 6d 79 74 79 70 65 20 20 24 69 list $mytype $i
1bc0: 74 65 6d 5d 0a 09 20 20 20 20 73 65 74 20 6e 65 tem].. set ne
1bd0: 78 74 69 74 65 6d 20 5b 6c 69 73 74 20 24 6d 79 xtitem [list $my
1be0: 74 79 70 65 20 24 6e 65 78 74 69 74 65 6d 5d 0a type $nextitem].
1bf0: 09 20 20 20 20 23 20 50 72 69 6e 74 61 62 6c 65 . # Printable
1c00: 20 6c 61 62 65 6c 73 2e 0a 09 20 20 20 20 73 65 labels... se
1c10: 74 20 69 20 20 22 3c 5b 24 74 79 70 65 20 69 74 t i "<[$type it
1c20: 65 6d 73 74 72 20 24 69 74 65 6d 5d 3e 22 0a 09 emstr $item]>"..
1c30: 20 20 20 20 73 65 74 20 6e 20 20 22 3c 5b 24 74 set n "<[$t
1c40: 79 70 65 20 69 74 65 6d 73 74 72 20 24 6e 65 78 ype itemstr $nex
1c50: 74 69 74 65 6d 5d 3e 22 0a 09 20 20 20 20 73 65 titem]>".. se
1c60: 74 20 6e 63 73 20 24 6d 79 69 74 65 6d 6d 61 70 t ncs $myitemmap
1c70: 28 24 6e 65 78 74 69 74 65 6d 29 0a 09 20 20 20 ($nextitem)..
1c80: 20 23 20 50 72 69 6e 74 0a 09 20 20 20 20 6c 6f # Print.. lo
1c90: 67 20 77 72 69 74 65 20 30 20 63 73 65 74 73 20 g write 0 csets
1ca0: 7b 2a 20 24 69 20 2d 2d 3e 20 24 6e 20 2d 2d 3e {* $i --> $n -->
1cb0: 20 63 73 20 5b 24 6e 63 73 20 73 74 72 5d 7d 0a cs [$ncs str]}.
1cc0: 09 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 30 20 .}..log write 0
1cd0: 63 73 65 74 73 20 24 66 74 72 0a 0a 09 69 66 20 csets $ftr...if
1ce0: 7b 21 24 6b 69 6c 6c 7d 20 72 65 74 75 72 6e 0a {!$kill} return.
1cf0: 09 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 .trouble interna
1d00: 6c 20 22 5b 24 73 65 6c 66 20 73 74 72 5d 20 64 l "[$self str] d
1d10: 65 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66 epends on itself
1d20: 22 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a "..return. }.
1d30: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 75 73 68 . method push
1d40: 74 6f 20 7b 72 65 70 6f 73 69 74 6f 72 79 20 64 to {repository d
1d50: 61 74 65 20 72 73 74 61 74 65 7d 20 7b 0a 09 23 ate rstate} {..#
1d60: 20 47 65 6e 65 72 61 74 65 20 61 6e 64 20 69 6d Generate and im
1d70: 70 6f 72 74 20 74 68 65 20 6d 61 6e 69 66 65 73 port the manifes
1d80: 74 20 66 6f 72 20 74 68 69 73 20 63 68 61 6e 67 t for this chang
1d90: 65 73 65 74 2e 0a 09 23 0a 09 23 20 44 61 74 61 eset...#..# Data
1da0: 20 6e 65 65 64 65 64 3a 0a 09 23 20 2d 20 43 6f needed:..# - Co
1db0: 6d 6d 69 74 20 6d 65 73 73 61 67 65 20 20 20 20 mmit message
1dc0: 20 20 20 20 20 20 20 20 20 20 20 28 2d 2d 20 6d (-- m
1dd0: 79 73 72 63 69 64 20 2d 3e 20 72 65 70 6f 73 69 ysrcid -> reposi
1de0: 74 6f 72 79 20 6d 65 74 61 29 0a 09 23 20 2d 20 tory meta)..# -
1df0: 55 73 65 72 20 64 6f 69 6e 67 20 74 68 65 20 63 User doing the c
1e00: 6f 6d 6d 69 74 20 20 20 20 20 20 20 20 28 73 2e ommit (s.
1e10: 61 2e 29 0a 09 23 0a 09 23 20 2d 20 54 69 6d 65 a.)..#..# - Time
1e20: 73 74 61 6d 70 20 6f 66 20 77 68 65 6e 20 63 6f stamp of when co
1e30: 6d 6d 69 74 74 65 64 20 20 28 63 6f 6d 6d 61 6e mmitted (comman
1e40: 64 20 61 72 67 75 6d 65 6e 74 29 0a 09 23 0a 09 d argument)..#..
1e50: 23 20 2d 20 54 68 65 20 70 61 72 65 6e 74 20 63 # - The parent c
1e60: 68 61 6e 67 65 73 65 74 2c 20 69 66 20 61 6e 79 hangeset, if any
1e70: 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f . If there is no
1e80: 20 70 61 72 65 6e 74 20 66 6f 73 73 69 6c 0a 09 parent fossil..
1e90: 23 20 20 20 77 69 6c 6c 20 75 73 65 20 74 68 65 # will use the
1ea0: 20 65 6d 70 74 79 20 62 61 73 65 20 72 65 76 69 empty base revi
1eb0: 73 69 6f 6e 20 61 73 20 70 61 72 65 6e 74 2e 0a sion as parent..
1ec0: 09 23 0a 09 23 20 2d 20 4c 69 73 74 20 6f 66 20 .#..# - List of
1ed0: 74 68 65 20 66 69 6c 65 20 72 65 76 69 73 69 6f the file revisio
1ee0: 6e 73 20 69 6e 20 74 68 65 20 63 68 61 6e 67 65 ns in the change
1ef0: 73 65 74 2e 0a 0a 09 23 20 57 65 20 64 65 72 69 set....# We deri
1f00: 76 65 20 74 68 65 20 6c 6f 64 20 69 6e 66 6f 72 ve the lod infor
1f10: 6d 61 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 mation directly
1f20: 66 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69 6f from the revisio
1f30: 6e 73 20 6f 66 0a 09 23 20 74 68 65 20 63 68 61 ns of..# the cha
1f40: 6e 67 65 73 65 74 2c 20 61 73 20 74 68 65 20 62 ngeset, as the b
1f50: 72 61 6e 63 68 20 70 61 72 74 20 6f 66 20 74 68 ranch part of th
1f60: 65 20 6d 65 74 61 20 64 61 74 61 20 28 73 2e 61 e meta data (s.a
1f70: 2e 29 20 69 73 0a 09 23 20 6f 75 74 64 61 74 65 .) is..# outdate
1f80: 64 20 73 69 6e 63 65 20 70 61 73 73 20 46 69 6c d since pass Fil
1f90: 74 65 72 53 79 6d 62 6f 6c 73 2e 20 53 65 65 20 terSymbols. See
1fa0: 74 68 65 20 6d 65 74 68 6f 64 20 27 72 75 6e 27 the method 'run'
1fb0: 20 69 6e 0a 09 23 20 66 69 6c 65 20 22 63 32 66 in..# file "c2f
1fc0: 5f 70 66 69 6c 74 65 72 73 79 6d 2e 74 63 6c 22 _pfiltersym.tcl"
1fd0: 20 66 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 65 6e for more commen
1fe0: 74 61 72 79 20 6f 6e 20 74 68 69 73 2e 0a 0a 09 tary on this....
1ff0: 73 65 74 20 6c 6f 64 6e 61 6d 65 20 5b 24 73 65 set lodname [$se
2000: 6c 66 20 6c 6f 64 5d 0a 0a 09 6c 6f 67 20 77 72 lf lod]...log wr
2010: 69 74 65 20 32 20 63 73 65 74 73 20 7b 49 6d 70 ite 2 csets {Imp
2020: 6f 72 74 69 6e 67 20 63 68 61 6e 67 65 73 65 74 orting changeset
2030: 20 5b 24 73 65 6c 66 20 73 74 72 5d 20 6f 6e 20 [$self str] on
2040: 24 6c 6f 64 6e 61 6d 65 7d 0a 0a 09 69 66 20 7b $lodname}...if {
2050: 5b 24 6d 79 74 79 70 65 6f 62 6a 20 69 73 74 61 [$mytypeobj ista
2060: 67 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e g]} {.. # Han
2070: 64 6c 65 20 74 61 67 73 2e 20 54 68 65 79 20 61 dle tags. They a
2080: 70 70 65 61 72 20 69 6d 6d 65 64 69 61 74 65 6c ppear immediatel
2090: 79 20 61 66 74 65 72 20 74 68 65 20 72 65 76 69 y after the revi
20a0: 73 69 6f 6e 0a 09 20 20 20 20 23 20 74 68 65 79 sion.. # they
20b0: 20 61 72 65 20 61 74 74 61 63 68 65 64 20 74 6f are attached to
20c0: 20 28 2a 29 2e 20 57 65 20 63 61 6e 20 61 73 73 (*). We can ass
20d0: 75 6d 65 20 74 68 61 74 20 74 68 65 0a 09 20 20 ume that the..
20e0: 20 20 23 20 77 6f 72 6b 73 70 61 63 65 20 66 6f # workspace fo
20f0: 72 20 74 68 65 20 72 65 6c 65 76 61 6e 74 20 6c r the relevant l
2100: 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 ine of developme
2110: 6e 74 0a 09 20 20 20 20 23 20 65 78 69 73 74 73 nt.. # exists
2120: 2e 20 57 65 20 72 65 74 72 69 65 76 65 20 69 74 . We retrieve it
2130: 2c 20 74 68 65 6e 20 74 68 65 20 75 75 69 64 20 , then the uuid
2140: 6f 66 20 74 68 65 20 6c 61 73 74 0a 09 20 20 20 of the last..
2150: 20 23 20 72 65 76 69 73 69 6f 6e 20 65 6e 74 65 # revision ente
2160: 72 65 64 20 69 6e 74 6f 20 69 74 2c 20 74 68 65 red into it, the
2170: 6e 20 74 61 67 20 74 68 69 73 20 72 65 76 69 73 n tag this revis
2180: 69 6f 6e 2e 0a 0a 09 20 20 20 20 23 20 28 2a 29 ion.... # (*)
2190: 20 49 6d 6d 65 64 69 61 74 65 6c 79 20 69 6e 20 Immediately in
21a0: 74 65 72 6d 73 20 6f 66 20 74 68 65 20 72 65 6c terms of the rel
21b0: 65 76 61 6e 74 20 6c 69 6e 65 20 6f 66 0a 09 20 evant line of..
21c0: 20 20 20 23 20 20 20 20 20 64 65 76 65 6c 6f 70 # develop
21d0: 6d 65 6e 74 2e 20 52 65 76 69 73 69 6f 6e 73 20 ment. Revisions
21e0: 6f 6e 20 6f 74 68 65 72 20 6c 69 6e 65 73 20 6d on other lines m
21f0: 61 79 20 63 6f 6d 65 20 69 6e 0a 09 20 20 20 20 ay come in..
2200: 23 20 20 20 20 20 62 65 74 77 65 65 6e 2c 20 62 # between, b
2210: 75 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 6d ut they do not m
2220: 61 74 74 65 72 20 74 6f 20 74 68 61 74 2e 0a 0a atter to that...
2230: 09 20 20 20 20 73 65 74 20 6c 77 73 20 20 5b 47 . set lws [G
2240: 65 74 77 6f 72 6b 73 70 61 63 65 20 24 72 73 74 etworkspace $rst
2250: 61 74 65 20 24 6c 6f 64 6e 61 6d 65 20 24 6d 79 ate $lodname $my
2260: 70 72 6f 6a 65 63 74 20 30 5d 0a 09 20 20 20 20 project 0]..
2270: 73 65 74 20 75 75 69 64 20 5b 6c 69 6e 64 65 78 set uuid [lindex
2280: 20 5b 24 6c 77 73 20 67 65 74 69 64 5d 20 31 5d [$lws getid] 1]
2290: 0a 0a 09 20 20 20 20 24 72 65 70 6f 73 69 74 6f ... $reposito
22a0: 72 79 20 74 61 67 20 24 75 75 69 64 20 5b 73 74 ry tag $uuid [st
22b0: 61 74 65 20 6f 6e 65 20 7b 0a 09 09 53 45 4c 45 ate one {...SELE
22c0: 43 54 20 53 2e 6e 61 6d 65 0a 09 09 46 52 4f 4d CT S.name...FROM
22d0: 20 20 20 73 79 6d 62 6f 6c 20 53 0a 09 09 57 48 symbol S...WH
22e0: 45 52 45 20 20 53 2e 73 69 64 20 3d 20 24 6d 79 ERE S.sid = $my
22f0: 73 72 63 69 64 0a 09 20 20 20 20 7d 5d 0a 0a 09 srcid.. }]...
2300: 7d 20 65 6c 73 65 69 66 20 7b 5b 24 6d 79 74 79 } elseif {[$myty
2310: 70 65 6f 62 6a 20 69 73 62 72 61 6e 63 68 5d 7d peobj isbranch]}
2320: 20 7b 0a 0a 09 20 20 20 20 23 20 48 61 6e 64 6c {... # Handl
2330: 65 20 62 72 61 6e 63 68 65 73 2e 20 54 68 65 79 e branches. They
2340: 20 61 70 70 65 61 72 20 69 6d 6d 65 64 69 61 74 appear immediat
2350: 65 6c 79 20 61 66 74 65 72 20 74 68 65 0a 09 20 ely after the..
2360: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 74 68 # revision th
2370: 65 79 20 61 72 65 20 73 70 61 77 6e 65 64 20 66 ey are spawned f
2380: 72 6f 6d 20 28 2a 29 2e 20 57 65 20 63 61 6e 20 rom (*). We can
2390: 61 73 73 75 6d 65 20 74 68 61 74 0a 09 20 20 20 assume that..
23a0: 20 23 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65 # the workspace
23b0: 20 66 6f 72 20 74 68 65 20 72 65 6c 65 76 61 6e for the relevan
23c0: 74 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f t line of develo
23d0: 70 6d 65 6e 74 0a 09 20 20 20 20 23 20 65 78 69 pment.. # exi
23e0: 73 74 73 2e 0a 0a 09 20 20 20 20 23 20 57 65 20 sts.... # We
23f0: 72 65 74 72 69 65 76 65 20 69 74 2c 20 74 68 65 retrieve it, the
2400: 6e 20 74 68 65 20 75 75 69 64 20 6f 66 20 74 68 n the uuid of th
2410: 65 20 6c 61 73 74 20 72 65 76 69 73 69 6f 6e 0a e last revision.
2420: 09 20 20 20 20 23 20 65 6e 74 65 72 65 64 20 69 . # entered i
2430: 6e 74 6f 20 69 74 2e 20 54 68 61 74 20 72 65 76 nto it. That rev
2440: 69 73 69 6f 6e 20 69 73 20 74 61 67 67 65 64 20 ision is tagged
2450: 61 73 20 74 68 65 20 72 6f 6f 74 20 6f 66 0a 09 as the root of..
2460: 20 20 20 20 23 20 74 68 65 20 62 72 61 6e 63 68 # the branch
2470: 20 28 2a 2a 29 2e 20 41 20 6e 65 77 20 77 6f 72 (**). A new wor
2480: 6b 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 62 kspace for the b
2490: 72 61 6e 63 68 20 69 73 0a 09 20 20 20 20 23 20 ranch is.. #
24a0: 63 72 65 61 74 65 64 20 61 73 20 77 65 6c 6c 2c created as well,
24b0: 20 66 6f 72 20 74 68 65 20 66 75 74 75 72 65 20 for the future
24c0: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 74 68 65 revisions of the
24d0: 20 6e 65 77 0a 09 20 20 20 20 23 20 6c 69 6e 65 new.. # line
24e0: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e of development.
24f0: 0a 0a 09 20 20 20 20 23 20 41 6e 20 65 78 63 65 ... # An exce
2500: 70 74 69 6f 6e 20 69 73 20 6d 61 64 65 20 6f 66 ption is made of
2510: 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 the non-trunk d
2520: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 0a 09 efault branch,..
2530: 20 20 20 20 23 20 61 6b 61 20 76 65 6e 64 6f 72 # aka vendor
2540: 20 62 72 61 6e 63 68 2e 20 54 68 69 73 20 6c 6f branch. This lo
2550: 64 20 68 61 73 20 74 6f 20 68 61 76 65 20 61 20 d has to have a
2560: 77 6f 72 6b 73 70 61 63 65 20 6e 6f 74 0a 09 20 workspace not..
2570: 20 20 20 23 20 69 6e 68 65 72 69 74 65 64 20 66 # inherited f
2580: 72 6f 6d 20 61 6e 79 74 68 69 6e 67 20 65 6c 73 rom anything els
2590: 65 2e 20 49 74 20 68 61 73 20 6e 6f 20 72 6f 6f e. It has no roo
25a0: 74 20 65 69 74 68 65 72 2c 20 73 6f 0a 09 20 20 t either, so..
25b0: 20 20 23 20 74 61 67 67 69 6e 67 20 69 73 20 6f # tagging is o
25c0: 75 74 20 61 73 20 77 65 6c 6c 2e 0a 0a 09 20 20 ut as well....
25d0: 20 20 23 20 28 2a 29 20 49 6d 6d 65 64 69 61 74 # (*) Immediat
25e0: 65 6c 79 20 69 6e 20 74 65 72 6d 73 20 6f 66 20 ely in terms of
25f0: 74 68 65 20 72 65 6c 65 76 61 6e 74 20 6c 69 6e the relevant lin
2600: 65 20 6f 66 0a 09 20 20 20 20 23 20 20 20 20 20 e of.. #
2610: 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 20 52 65 76 development. Rev
2620: 69 73 69 6f 6e 73 20 6f 6e 20 6f 74 68 65 72 20 isions on other
2630: 6c 69 6e 65 73 20 6d 61 79 20 63 6f 6d 65 20 69 lines may come i
2640: 6e 0a 09 20 20 20 20 23 20 20 20 20 20 62 65 74 n.. # bet
2650: 77 65 65 6e 2c 20 62 75 74 20 74 68 65 79 20 64 ween, but they d
2660: 6f 20 6e 6f 74 20 6d 61 74 74 65 72 20 74 6f 20 o not matter to
2670: 74 68 61 74 2e 0a 0a 09 20 20 20 20 23 20 28 2a that.... # (*
2680: 2a 29 20 54 61 67 67 69 6e 67 20 74 68 65 20 70 *) Tagging the p
2690: 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 20 6f arent revision o
26a0: 66 20 74 68 65 20 62 72 61 6e 63 68 20 61 73 20 f the branch as
26b0: 69 74 73 0a 09 20 20 20 20 23 20 20 20 20 20 20 its.. #
26c0: 72 6f 6f 74 20 69 73 20 64 6f 6e 65 20 74 6f 20 root is done to
26d0: 6c 65 74 20 75 73 20 6b 6e 6f 77 20 61 62 6f 75 let us know abou
26e0: 74 20 74 68 65 20 65 78 69 73 74 65 6e 63 65 20 t the existence
26f0: 6f 66 0a 09 20 20 20 20 23 20 20 20 20 20 20 74 of.. # t
2700: 68 65 20 62 72 61 6e 63 68 20 65 76 65 6e 20 69 he branch even i
2710: 66 20 69 74 20 68 61 73 20 6e 6f 20 72 65 76 69 f it has no revi
2720: 73 69 6f 6e 73 20 63 6f 6d 6d 69 74 74 65 64 20 sions committed
2730: 74 6f 0a 09 20 20 20 20 23 20 20 20 20 20 20 69 to.. # i
2740: 74 2c 20 61 6e 64 20 74 68 75 73 20 6e 6f 20 72 t, and thus no r
2750: 65 67 75 6c 61 72 20 62 72 61 6e 63 68 20 74 61 egular branch ta
2760: 67 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 2e g anywhere else.
2770: 0a 09 20 20 20 20 23 20 20 20 20 20 20 54 68 65 .. # The
2780: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 67 name of the tag
2790: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 66 6f 72 is the name for
27a0: 20 74 68 65 20 6c 6f 64 2c 20 77 69 74 68 0a 09 the lod, with..
27b0: 20 20 20 20 23 20 20 20 20 20 20 74 68 65 20 73 # the s
27c0: 75 66 66 69 78 20 27 2d 72 6f 6f 74 27 20 61 70 uffix '-root' ap
27d0: 70 65 6e 64 65 64 20 74 6f 20 69 74 2e 0a 0a 09 pended to it....
27e0: 20 20 20 20 23 20 4c 4f 44 20 69 73 20 73 65 6c # LOD is sel
27f0: 66 20 73 79 6d 62 6f 6c 20 6f 66 20 62 72 61 6e f symbol of bran
2800: 63 68 2c 20 6e 6f 74 20 70 61 72 65 6e 74 0a 09 ch, not parent..
2810: 20 20 20 20 73 65 74 20 6c 6f 64 6e 61 6d 65 20 set lodname
2820: 5b 73 74 61 74 65 20 6f 6e 65 20 7b 0a 09 09 53 [state one {...S
2830: 45 4c 45 43 54 20 53 2e 6e 61 6d 65 0a 09 09 46 ELECT S.name...F
2840: 52 4f 4d 20 20 20 73 79 6d 62 6f 6c 20 53 0a 09 ROM symbol S..
2850: 09 57 48 45 52 45 20 20 53 2e 73 69 64 20 3d 20 .WHERE S.sid =
2860: 24 6d 79 73 72 63 69 64 0a 09 20 20 20 20 7d 5d $mysrcid.. }]
2870: 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b 24 72 73 ... if {![$rs
2880: 74 61 74 65 20 68 61 73 20 3a 74 72 75 6e 6b 3a tate has :trunk:
2890: 5d 7d 20 7b 0a 09 09 23 20 4e 6f 20 74 72 75 6e ]} {...# No trun
28a0: 6b 20 69 6d 70 6c 69 65 73 20 64 65 66 61 75 6c k implies defaul
28b0: 74 20 62 72 61 6e 63 68 2e 20 4a 75 73 74 20 63 t branch. Just c
28c0: 72 65 61 74 65 20 74 68 65 0a 09 09 23 20 70 72 reate the...# pr
28d0: 6f 70 65 72 20 77 6f 72 6b 73 70 61 63 65 2e 0a oper workspace..
28e0: 09 09 47 65 74 77 6f 72 6b 73 70 61 63 65 20 24 ..Getworkspace $
28f0: 72 73 74 61 74 65 20 24 6c 6f 64 6e 61 6d 65 20 rstate $lodname
2900: 24 6d 79 70 72 6f 6a 65 63 74 20 31 0a 09 20 20 $myproject 1..
2910: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 4e } else {...# N
2920: 6f 6e 2d 64 65 66 61 75 6c 74 20 62 72 61 6e 63 on-default branc
2930: 68 2e 20 4e 65 65 64 20 77 6f 72 6b 73 70 61 63 h. Need workspac
2940: 65 2c 20 61 6e 64 20 74 61 67 20 70 61 72 65 6e e, and tag paren
2950: 74 0a 09 09 23 20 72 65 76 69 73 69 6f 6e 2e 0a t...# revision..
2960: 0a 09 09 73 65 74 20 6c 77 73 20 5b 47 65 74 77 ...set lws [Getw
2970: 6f 72 6b 73 70 61 63 65 20 24 72 73 74 61 74 65 orkspace $rstate
2980: 20 24 6c 6f 64 6e 61 6d 65 20 24 6d 79 70 72 6f $lodname $mypro
2990: 6a 65 63 74 20 30 5d 0a 09 09 73 65 74 20 75 75 ject 0]...set uu
29a0: 69 64 20 5b 6c 69 6e 64 65 78 20 5b 24 6c 77 73 id [lindex [$lws
29b0: 20 67 65 74 69 64 5d 20 31 5d 0a 0a 09 09 24 72 getid] 1]....$r
29c0: 65 70 6f 73 69 74 6f 72 79 20 74 61 67 20 24 75 epository tag $u
29d0: 75 69 64 20 24 7b 6c 6f 64 6e 61 6d 65 7d 2d 72 uid ${lodname}-r
29e0: 6f 6f 74 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c oot.. }..} el
29f0: 73 65 20 7b 0a 09 20 20 20 20 23 20 52 65 76 69 se {.. # Revi
2a00: 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 2e 0a sion changeset..
2a10: 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a 6c 69 .. struct::li
2a20: 73 74 20 61 73 73 69 67 6e 20 5b 24 6d 79 70 72 st assign [$mypr
2a30: 6f 6a 65 63 74 20 67 65 74 6d 65 74 61 20 24 6d oject getmeta $m
2a40: 79 73 72 63 69 64 5d 20 5f 5f 20 5f 5f 20 75 73 ysrcid] __ __ us
2a50: 65 72 20 6d 65 73 73 61 67 65 0a 0a 09 20 20 20 er message...
2a60: 20 23 20 50 65 72 66 6f 72 6d 20 74 68 65 20 69 # Perform the i
2a70: 6d 70 6f 72 74 2e 20 41 73 20 70 61 72 74 20 6f mport. As part o
2a80: 66 20 74 68 61 74 20 77 65 20 64 65 74 65 72 6d f that we determ
2a90: 69 6e 65 20 74 68 65 0a 09 20 20 20 20 23 20 70 ine the.. # p
2aa0: 61 72 65 6e 74 20 77 65 20 6e 65 65 64 2c 20 61 arent we need, a
2ab0: 6e 64 20 63 6f 6e 76 65 72 74 20 74 68 65 20 6c nd convert the l
2ac0: 69 73 74 20 6f 66 20 69 74 65 6d 73 20 69 6e 20 ist of items in
2ad0: 74 68 65 0a 09 20 20 20 20 23 20 63 68 61 6e 67 the.. # chang
2ae0: 65 73 65 74 20 69 6e 74 6f 20 75 75 69 64 73 20 eset into uuids
2af0: 61 6e 64 20 70 72 69 6e 74 61 62 6c 65 20 64 61 and printable da
2b00: 74 61 2e 0a 0a 09 20 20 20 20 73 74 72 75 63 74 ta.... struct
2b10: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 47 ::list assign [G
2b20: 65 74 69 73 64 65 66 61 75 6c 74 20 24 6d 79 69 etisdefault $myi
2b30: 74 65 6d 73 5d 20 5c 0a 09 09 69 73 64 65 66 61 tems] \...isdefa
2b40: 75 6c 74 20 6c 61 73 74 64 65 66 61 75 6c 74 6f ult lastdefaulto
2b50: 6e 74 72 75 6e 6b 0a 0a 09 20 20 20 20 6c 6f 67 ntrunk... log
2b60: 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 7b write 8 csets {
2b70: 4c 4f 44 20 20 20 20 27 24 6c 6f 64 6e 61 6d 65 LOD '$lodname
2b80: 27 7d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 '}.. log writ
2b90: 65 20 38 20 63 73 65 74 73 20 7b 20 64 65 66 3f e 8 csets { def?
2ba0: 20 20 24 69 73 64 65 66 61 75 6c 74 7d 0a 09 20 $isdefault}..
2bb0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 63 log write 8 c
2bc0: 73 65 74 73 20 7b 20 6c 61 73 74 3f 20 24 6c 61 sets { last? $la
2bd0: 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b stdefaultontrunk
2be0: 7d 0a 0a 09 20 20 20 20 73 65 74 20 6c 77 73 20 }... set lws
2bf0: 20 5b 47 65 74 77 6f 72 6b 73 70 61 63 65 20 20 [Getworkspace
2c00: 20 20 24 72 73 74 61 74 65 20 24 6c 6f 64 6e 61 $rstate $lodna
2c10: 6d 65 20 24 6d 79 70 72 6f 6a 65 63 74 20 24 69 me $myproject $i
2c20: 73 64 65 66 61 75 6c 74 5d 0a 09 20 20 20 20 24 sdefault].. $
2c30: 6c 77 73 20 61 64 64 20 5b 47 65 74 72 65 76 69 lws add [Getrevi
2c40: 73 69 6f 6e 69 6e 66 6f 20 24 6d 79 69 74 65 6d sioninfo $myitem
2c50: 73 5d 0a 0a 09 20 20 20 20 73 74 72 75 63 74 3a s]... struct:
2c60: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5c 0a 09 :list assign \..
2c70: 09 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 69 6d .[$repository im
2c80: 70 6f 72 74 72 65 76 69 73 69 6f 6e 20 5b 24 73 portrevision [$s
2c90: 65 6c 66 20 73 74 72 5d 20 5c 0a 09 09 20 20 20 elf str] \...
2ca0: 20 20 24 75 73 65 72 20 24 6d 65 73 73 61 67 65 $user $message
2cb0: 20 24 64 61 74 65 20 5c 0a 09 09 20 20 20 20 20 $date \...
2cc0: 5b 6c 69 6e 64 65 78 20 5b 24 6c 77 73 20 67 65 [lindex [$lws ge
2cd0: 74 69 64 5d 20 30 5d 20 5b 24 6c 77 73 20 67 65 tid] 0] [$lws ge
2ce0: 74 5d 5d 20 5c 0a 09 09 72 69 64 20 75 75 69 64 t]] \...rid uuid
2cf0: 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 6c 77 73 ... if {[$lws
2d00: 20 74 69 63 6b 73 5d 20 3d 3d 20 31 7d 20 7b 0a ticks] == 1} {.
2d10: 09 09 23 20 46 69 72 73 74 20 63 6f 6d 6d 69 74 ..# First commit
2d20: 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 6f 66 on this line of
2d30: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 20 53 65 development. Se
2d40: 74 20 6f 75 72 0a 09 09 23 20 6f 77 6e 20 6e 61 t our...# own na
2d50: 6d 65 20 61 73 20 61 20 70 72 6f 70 61 67 61 74 me as a propagat
2d60: 69 6e 67 20 74 61 67 2e 20 41 6e 64 20 69 66 20 ing tag. And if
2d70: 74 68 65 20 4c 4f 44 20 68 61 73 20 61 0a 09 09 the LOD has a...
2d80: 23 20 70 61 72 65 6e 74 20 77 65 20 68 61 76 65 # parent we have
2d90: 20 74 6f 20 70 72 65 76 65 6e 74 20 74 68 65 20 to prevent the
2da0: 70 72 6f 70 61 67 61 74 69 6f 6e 20 6f 66 20 74 propagation of t
2db0: 68 61 74 0a 09 09 23 20 74 61 67 20 69 6e 74 6f hat...# tag into
2dc0: 20 74 68 69 73 20 6e 65 77 20 6c 69 6e 65 2e 0a this new line..
2dd0: 0a 09 09 73 65 74 20 70 6c 77 73 20 5b 24 6c 77 ...set plws [$lw
2de0: 73 20 70 61 72 65 6e 74 5d 0a 09 09 69 66 20 7b s parent]...if {
2df0: 24 70 6c 77 73 20 6e 65 20 22 22 7d 20 7b 0a 09 $plws ne ""} {..
2e00: 09 20 20 20 20 24 72 65 70 6f 73 69 74 6f 72 79 . $repository
2e10: 20 62 72 61 6e 63 68 63 61 6e 63 65 6c 20 24 75 branchcancel $u
2e20: 75 69 64 20 5b 24 70 6c 77 73 20 6e 61 6d 65 5d uid [$plws name]
2e30: 0a 09 09 7d 0a 09 09 24 72 65 70 6f 73 69 74 6f ...}...$reposito
2e40: 72 79 20 62 72 61 6e 63 68 6d 61 72 6b 20 24 75 ry branchmark $u
2e50: 75 69 64 20 5b 24 6c 77 73 20 6e 61 6d 65 5d 0a uid [$lws name].
2e60: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 52 . }... # R
2e70: 65 6d 65 6d 62 65 72 20 74 68 65 20 69 6d 70 6f emember the impo
2e80: 72 74 65 64 20 63 68 61 6e 67 65 73 65 74 20 69 rted changeset i
2e90: 6e 20 74 68 65 20 73 74 61 74 65 2c 20 75 6e 64 n the state, und
2ea0: 65 72 20 6f 75 72 0a 09 20 20 20 20 23 20 4c 4f er our.. # LO
2eb0: 44 2e 20 41 6e 64 20 69 66 20 69 74 20 69 73 20 D. And if it is
2ec0: 74 68 65 20 6c 61 73 74 20 74 72 75 6e 6b 20 63 the last trunk c
2ed0: 68 61 6e 67 65 73 65 74 20 6f 6e 20 74 68 65 20 hangeset on the
2ee0: 76 65 6e 64 6f 72 0a 09 20 20 20 20 23 20 62 72 vendor.. # br
2ef0: 61 6e 63 68 20 74 68 65 6e 20 74 68 65 20 72 65 anch then the re
2f00: 76 69 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 74 vision is also t
2f10: 68 65 20 61 63 74 75 61 6c 20 72 6f 6f 74 20 6f he actual root o
2f20: 66 20 74 68 65 0a 09 20 20 20 20 23 20 3a 74 72 f the.. # :tr
2f30: 75 6e 6b 3a 2c 20 73 6f 20 77 65 20 72 65 6d 65 unk:, so we reme
2f40: 6d 62 65 72 20 69 74 20 61 73 20 73 75 63 68 20 mber it as such
2f50: 69 6e 20 74 68 65 20 73 74 61 74 65 2e 20 48 6f in the state. Ho
2f60: 77 65 76 65 72 0a 09 20 20 20 20 23 20 69 66 20 wever.. # if
2f70: 74 68 65 20 74 72 75 6e 6b 20 61 6c 72 65 61 64 the trunk alread
2f80: 79 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 y exists then th
2f90: 65 20 63 68 61 6e 67 65 73 65 74 20 63 61 6e 6e e changeset cann
2fa0: 6f 74 20 62 65 0a 09 20 20 20 20 23 20 6f 6e 20 ot be.. # on
2fb0: 69 74 20 61 6e 79 20 6d 6f 72 65 2e 20 54 68 69 it any more. Thi
2fc0: 73 20 69 6e 64 69 63 61 74 65 73 20 77 65 69 72 s indicates weir
2fd0: 64 6e 65 73 73 20 69 6e 20 74 68 65 20 73 65 74 dness in the set
2fe0: 75 70 20 6f 66 0a 09 20 20 20 20 23 20 74 68 65 up of.. # the
2ff0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20 vendor branch,
3000: 62 75 74 20 6f 6e 65 20 77 65 20 63 61 6e 20 77 but one we can w
3010: 6f 72 6b 20 61 72 6f 75 6e 64 2e 0a 0a 09 20 20 ork around....
3020: 20 20 24 6c 77 73 20 64 65 66 69 64 20 5b 6c 69 $lws defid [li
3030: 73 74 20 24 72 69 64 20 24 75 75 69 64 5d 0a 09 st $rid $uuid]..
3040: 20 20 20 20 69 66 20 7b 24 6c 61 73 74 64 65 66 if {$lastdef
3050: 61 75 6c 74 6f 6e 74 72 75 6e 6b 7d 20 7b 0a 09 aultontrunk} {..
3060: 09 6c 6f 67 20 77 72 69 74 65 20 32 20 63 73 65 .log write 2 cse
3070: 74 73 20 7b 54 68 69 73 20 63 73 65 74 20 69 73 ts {This cset is
3080: 20 74 68 65 20 6c 61 73 74 20 6f 6e 20 74 68 65 the last on the
3090: 20 4e 54 44 42 2c 20 73 65 74 20 74 68 65 20 74 NTDB, set the t
30a0: 72 75 6e 6b 20 77 6f 72 6b 73 70 61 63 65 20 75 runk workspace u
30b0: 70 7d 0a 0a 09 09 69 66 20 7b 5b 24 72 73 74 61 p}....if {[$rsta
30c0: 74 65 20 68 61 73 20 3a 74 72 75 6e 6b 3a 5d 7d te has :trunk:]}
30d0: 20 7b 0a 09 09 20 20 20 20 6c 6f 67 20 77 72 69 {... log wri
30e0: 74 65 20 32 20 63 73 65 74 73 20 7b 4d 75 6c 74 te 2 csets {Mult
30f0: 69 70 6c 65 20 63 68 61 6e 67 65 73 65 74 73 20 iple changesets
3100: 64 65 63 6c 61 72 65 64 20 74 6f 20 62 65 20 74 declared to be t
3110: 68 65 20 6c 61 73 74 20 74 72 75 6e 6b 20 63 68 he last trunk ch
3120: 61 6e 67 65 73 65 74 20 6f 6e 20 74 68 65 20 76 angeset on the v
3130: 65 6e 64 6f 72 2d 62 72 61 6e 63 68 7d 0a 09 09 endor-branch}...
3140: 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 24 } else {... $
3150: 72 73 74 61 74 65 20 6e 65 77 20 3a 74 72 75 6e rstate new :trun
3160: 6b 3a 20 5b 24 6c 77 73 20 6e 61 6d 65 5d 0a 09 k: [$lws name]..
3170: 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 6c .}.. }..}...l
3180: 6f 67 20 77 72 69 74 65 20 32 20 63 73 65 74 73 og write 2 csets
3190: 20 7b 20 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 { }..log write
31a0: 32 20 63 73 65 74 73 20 7b 20 7d 0a 09 72 65 74 2 csets { }..ret
31b0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 urn. }.. p
31c0: 72 6f 63 20 47 65 74 72 65 76 69 73 69 6f 6e 69 roc Getrevisioni
31d0: 6e 66 6f 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 nfo {revisions}
31e0: 7b 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 {..set theset ('
31f0: 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 [join $revisions
3200: 20 7b 27 2c 27 7d 5d 27 29 0a 09 73 65 74 20 72 {','}]')..set r
3210: 65 76 69 73 69 6f 6e 73 20 7b 7d 0a 09 73 74 61 evisions {}..sta
3220: 74 65 20 66 6f 72 65 61 63 68 72 6f 77 20 5b 73 te foreachrow [s
3230: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
3240: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
3250: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 55 2e {.. SELECT U.
3260: 75 75 69 64 20 20 20 20 41 53 20 66 72 69 64 2c uuid AS frid,
3270: 0a 09 20 20 20 20 20 20 20 20 20 20 20 46 2e 76 .. F.v
3280: 69 73 69 62 6c 65 20 41 53 20 70 61 74 68 2c 0a isible AS path,.
3290: 09 20 20 20 20 20 20 20 20 20 20 20 46 2e 6e 61 . F.na
32a0: 6d 65 20 20 20 20 41 53 20 66 6e 61 6d 65 2c 0a me AS fname,.
32b0: 09 20 20 20 20 20 20 20 20 20 20 20 52 2e 72 65 . R.re
32c0: 76 20 20 20 20 20 41 53 20 72 65 76 6e 72 2c 0a v AS revnr,.
32d0: 09 20 20 20 20 20 20 20 20 20 20 20 52 2e 6f 70 . R.op
32e0: 20 20 20 20 20 20 41 53 20 72 6f 70 0a 09 20 20 AS rop..
32f0: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
3300: 6e 20 52 2c 20 72 65 76 75 75 69 64 20 55 2c 20 n R, revuuid U,
3310: 66 69 6c 65 20 46 0a 09 20 20 20 20 57 48 45 52 file F.. WHER
3320: 45 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 E R.rid IN $the
3330: 73 65 74 20 20 2d 2d 20 41 6c 6c 20 73 70 65 63 set -- All spec
3340: 69 66 69 65 64 20 72 65 76 69 73 69 6f 6e 73 0a ified revisions.
3350: 09 20 20 20 20 41 4e 44 20 20 20 20 55 2e 72 69 . AND U.ri
3360: 64 20 3d 20 52 2e 72 69 64 20 20 20 20 20 2d 2d d = R.rid --
3370: 20 67 65 74 20 66 6f 73 73 69 6c 20 75 75 69 64 get fossil uuid
3380: 20 6f 66 20 72 65 76 69 73 69 6f 6e 0a 09 20 20 of revision..
3390: 20 20 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d AND F.fid =
33a0: 20 52 2e 66 69 64 20 20 20 20 20 2d 2d 20 67 65 R.fid -- ge
33b0: 74 20 66 69 6c 65 20 6f 66 20 72 65 76 69 73 69 t file of revisi
33c0: 6f 6e 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 6c 61 on..}] {.. la
33d0: 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e 73 20 ppend revisions
33e0: 24 66 72 69 64 20 24 70 61 74 68 20 24 66 6e 61 $frid $path $fna
33f0: 6d 65 2f 24 72 65 76 6e 72 20 24 72 6f 70 0a 09 me/$revnr $rop..
3400: 7d 0a 09 72 65 74 75 72 6e 20 24 72 65 76 69 73 }..return $revis
3410: 69 6f 6e 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ions. }..
3420: 70 72 6f 63 20 47 65 74 77 6f 72 6b 73 70 61 63 proc Getworkspac
3430: 65 20 7b 72 73 74 61 74 65 20 6c 6f 64 6e 61 6d e {rstate lodnam
3440: 65 20 70 72 6f 6a 65 63 74 20 69 73 64 65 66 61 e project isdefa
3450: 75 6c 74 7d 20 7b 0a 0a 09 23 20 54 68 65 20 73 ult} {...# The s
3460: 74 61 74 65 20 6f 62 6a 65 63 74 20 68 6f 6c 64 tate object hold
3470: 73 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65 20 s the workspace
3480: 73 74 61 74 65 20 6f 66 20 65 61 63 68 20 6b 6e state of each kn
3490: 6f 77 6e 0a 09 23 20 6c 69 6e 65 2d 6f 66 2d 64 own..# line-of-d
34a0: 65 76 65 6c 6f 70 6d 65 6e 74 20 28 4c 4f 44 29 evelopment (LOD)
34b0: 2c 20 75 70 20 74 6f 20 74 68 65 20 6c 61 73 74 , up to the last
34c0: 20 63 6f 6d 6d 69 74 74 65 64 0a 09 23 20 63 68 committed..# ch
34d0: 61 6e 67 65 73 65 74 20 62 65 6c 6f 6e 67 69 6e angeset belongin
34e0: 67 20 74 6f 20 74 68 61 74 20 4c 4f 44 2e 0a 0a g to that LOD...
34f0: 09 23 20 28 2a 29 20 53 74 61 6e 64 61 72 64 20 .# (*) Standard
3500: 68 61 6e 64 6c 69 6e 67 20 69 66 20 69 6e 2d 4c handling if in-L
3510: 4f 44 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49 OD changesets. I
3520: 66 20 74 68 65 20 4c 4f 44 20 6f 66 0a 09 23 20 f the LOD of..#
3530: 20 20 20 20 74 68 65 20 63 75 72 72 65 6e 74 20 the current
3540: 63 68 61 6e 67 65 73 65 74 20 65 78 69 73 74 73 changeset exists
3550: 20 69 6e 20 74 68 65 20 73 74 61 74 65 20 28 3d in the state (=
3560: 20 68 61 73 20 62 65 65 6e 0a 09 23 20 20 20 20 has been..#
3570: 20 63 6f 6d 6d 69 74 74 65 64 20 74 6f 29 20 74 committed to) t
3580: 68 65 6e 20 74 68 69 73 20 69 74 20 68 61 73 20 hen this it has
3590: 74 68 65 20 77 6f 72 6b 73 70 61 63 65 20 77 65 the workspace we
35a0: 20 61 72 65 0a 09 23 20 20 20 20 20 6c 6f 6f 6b are..# look
35b0: 69 6e 67 20 66 6f 72 2e 0a 0a 09 69 66 20 7b 5b ing for....if {[
35c0: 24 72 73 74 61 74 65 20 68 61 73 20 24 6c 6f 64 $rstate has $lod
35d0: 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 72 65 name]} {.. re
35e0: 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 67 65 turn [$rstate ge
35f0: 74 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a t $lodname]..}..
3600: 09 23 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73 .# If the LOD is
3610: 20 68 6f 77 65 76 65 72 20 6e 6f 74 20 79 65 74 however not yet
3620: 20 6b 6e 6f 77 6e 2c 20 74 68 65 6e 20 74 68 65 known, then the
3630: 20 63 75 72 72 65 6e 74 0a 09 23 20 63 68 61 6e current..# chan
3640: 67 65 73 65 74 20 63 61 6e 20 62 65 20 65 69 74 geset can be eit
3650: 68 65 72 20 6f 66 0a 09 23 20 28 61 29 20 72 6f her of..# (a) ro
3660: 6f 74 20 6f 66 20 61 20 76 65 6e 64 6f 72 20 62 ot of a vendor b
3670: 72 61 6e 63 68 2c 0a 09 23 20 28 62 29 20 72 6f ranch,..# (b) ro
3680: 6f 74 20 6f 66 20 74 68 65 20 74 72 75 6e 6b 20 ot of the trunk
3690: 4c 4f 44 2c 20 6f 72 0a 09 23 20 28 63 29 20 74 LOD, or..# (c) t
36a0: 68 65 20 66 69 72 73 74 20 63 68 61 6e 67 65 73 he first changes
36b0: 65 74 20 69 6e 20 61 20 6e 65 77 20 4c 4f 44 20 et in a new LOD
36c0: 77 68 69 63 68 20 77 61 73 20 73 70 61 77 6e 65 which was spawne
36d0: 64 20 66 72 6f 6d 0a 09 23 20 20 20 20 20 61 6e d from..# an
36e0: 20 65 78 69 73 74 69 6e 67 20 4c 4f 44 2e 0a 0a existing LOD...
36f0: 09 23 20 46 6f 72 20 62 6f 74 68 20 28 61 29 20 .# For both (a)
3700: 61 6e 64 20 28 62 29 20 77 65 20 68 61 76 65 20 and (b) we have
3710: 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 to create a new
3720: 77 6f 72 6b 73 70 61 63 65 20 66 6f 72 0a 09 23 workspace for..#
3730: 20 74 68 65 20 6c 6f 64 2c 20 61 6e 64 20 69 74 the lod, and it
3740: 20 64 6f 65 73 6e 27 74 20 69 6e 68 65 72 69 74 doesn't inherit
3750: 20 66 72 6f 6d 20 61 6e 79 74 68 69 6e 67 2e 0a from anything..
3760: 0a 09 23 20 4f 6e 65 20 65 78 63 65 70 74 69 6f ..# One exceptio
3770: 6e 20 66 6f 72 20 28 61 29 2e 20 49 66 20 77 65 n for (a). If we
3780: 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 already have a
3790: 3a 76 65 6e 64 6f 72 3a 20 62 72 61 6e 63 68 0a :vendor: branch.
37a0: 09 23 20 74 68 65 6e 20 6d 75 6c 74 69 70 6c 65 .# then multiple
37b0: 20 73 79 6d 62 6f 6c 73 20 77 65 72 65 20 75 73 symbols were us
37c0: 65 64 20 66 6f 72 20 74 68 65 20 76 65 6e 64 6f ed for the vendo
37d0: 72 20 62 72 61 6e 63 68 20 62 79 0a 09 23 20 64 r branch by..# d
37e0: 69 66 66 65 72 65 6e 74 20 66 69 6c 65 73 2e 20 ifferent files.
37f0: 49 6e 20 74 68 61 74 20 63 61 73 65 20 74 68 65 In that case the
3800: 20 27 6e 65 77 27 20 62 72 61 6e 63 68 20 69 73 'new' branch is
3810: 20 6d 61 64 65 20 61 6e 0a 09 23 20 61 6c 69 61 made an..# alia
3820: 73 20 6f 66 20 74 68 65 20 3a 76 65 6e 64 6f 72 s of the :vendor
3830: 3a 2c 20 65 66 66 65 63 74 69 76 65 6c 79 20 6d :, effectively m
3840: 65 72 67 69 6e 67 20 74 68 65 20 73 79 6d 62 6f erging the symbo
3850: 6c 73 0a 09 23 20 74 6f 67 65 74 68 65 72 2e 0a ls..# together..
3860: 0a 09 23 20 4e 6f 74 65 20 74 68 61 74 20 63 61 ..# Note that ca
3870: 73 65 20 28 62 29 20 6d 61 79 20 6e 65 76 65 72 se (b) may never
3880: 20 6f 63 63 75 72 2e 20 53 65 65 20 74 68 65 20 occur. See the
3890: 76 61 72 69 61 62 6c 65 0a 09 23 20 27 6c 61 73 variable..# 'las
38a0: 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b 27 tdefaultontrunk'
38b0: 20 69 6e 20 74 68 65 20 63 61 6c 6c 65 72 20 28 in the caller (
38c0: 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 29 2e 20 method pushto).
38d0: 54 68 69 73 0a 09 23 20 66 6c 61 67 20 63 61 6e This..# flag can
38e0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 the generation
38f0: 6f 66 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65 of the workspace
3900: 20 66 6f 72 20 74 68 65 20 3a 74 72 75 6e 6b 3a for the :trunk:
3910: 20 4c 4f 44 0a 09 23 20 61 73 20 77 65 6c 6c 2c LOD..# as well,
3920: 20 6d 61 6b 69 6e 67 20 69 74 20 69 6e 68 65 72 making it inher
3930: 69 74 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 it the state of
3940: 74 68 65 20 6c 61 73 74 0a 09 23 20 74 72 75 6e the last..# trun
3950: 6b 2d 63 68 61 6e 67 65 73 65 74 20 6f 6e 20 74 k-changeset on t
3960: 68 65 20 76 65 6e 64 6f 72 2d 62 72 61 6e 63 68 he vendor-branch
3970: 2e 0a 0a 09 69 66 20 7b 24 69 73 64 65 66 61 75 ....if {$isdefau
3980: 6c 74 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 lt} {.. if {!
3990: 5b 24 72 73 74 61 74 65 20 68 61 73 20 22 3a 76 [$rstate has ":v
39a0: 65 6e 64 6f 72 3a 22 5d 7d 20 7b 0a 09 09 23 20 endor:"]} {...#
39b0: 43 72 65 61 74 65 20 74 68 65 20 76 65 6e 64 6f Create the vendo
39c0: 72 20 62 72 61 6e 63 68 20 69 66 20 6e 6f 74 20 r branch if not
39d0: 70 72 65 73 65 6e 74 20 61 6c 72 65 61 64 79 2e present already.
39e0: 20 57 65 0a 09 09 23 20 75 73 65 20 74 68 65 20 We...# use the
39f0: 61 63 74 75 61 6c 20 6e 61 6d 65 20 66 6f 72 20 actual name for
3a00: 74 68 65 20 6c 6f 64 2c 20 61 6e 64 20 61 64 64 the lod, and add
3a10: 69 74 69 6f 6e 61 6c 20 6d 61 6b 65 0a 09 09 23 itional make...#
3a20: 20 69 74 20 61 63 63 65 73 73 69 62 6c 65 20 75 it accessible u
3a30: 6e 64 65 72 20 61 6e 20 69 6e 74 65 72 6e 61 6c nder an internal
3a40: 20 6e 61 6d 65 20 28 3a 76 65 6e 64 6f 72 3a 29 name (:vendor:)
3a50: 20 73 6f 0a 09 09 23 20 74 68 61 74 20 77 65 20 so...# that we
3a60: 63 61 6e 20 6d 65 72 67 65 20 74 6f 20 69 74 20 can merge to it
3a70: 6c 61 74 65 72 2c 20 73 68 6f 75 6c 64 20 69 74 later, should it
3a80: 20 62 65 63 6f 6d 65 0a 09 09 23 20 6e 65 63 65 become...# nece
3a90: 73 73 61 72 79 2e 20 53 65 65 20 74 68 65 20 6f ssary. See the o
3aa0: 74 68 65 72 20 62 72 61 6e 63 68 20 62 65 6c 6f ther branch belo
3ab0: 77 2e 0a 09 09 24 72 73 74 61 74 65 20 6e 65 77 w....$rstate new
3ac0: 20 24 6c 6f 64 6e 61 6d 65 0a 09 09 24 72 73 74 $lodname...$rst
3ad0: 61 74 65 20 64 75 70 20 3a 76 65 6e 64 6f 72 3a ate dup :vendor:
3ae0: 20 3c 2d 2d 20 24 6c 6f 64 6e 61 6d 65 0a 09 20 <-- $lodname..
3af0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 } else {...#
3b00: 4d 65 72 67 65 20 74 68 65 20 6e 65 77 20 73 79 Merge the new sy
3b10: 6d 62 6f 6c 20 74 6f 20 74 68 65 20 76 65 6e 64 mbol to the vend
3b20: 6f 72 20 62 72 61 6e 63 68 0a 09 09 24 72 73 74 or branch...$rst
3b30: 61 74 65 20 64 75 70 20 24 6c 6f 64 6e 61 6d 65 ate dup $lodname
3b40: 20 3c 2d 2d 20 3a 76 65 6e 64 6f 72 3a 0a 09 20 <-- :vendor:..
3b50: 20 20 20 7d 0a 09 20 20 20 20 72 65 74 75 72 6e }.. return
3b60: 20 5b 24 72 73 74 61 74 65 20 67 65 74 20 24 6c [$rstate get $l
3b70: 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 69 66 20 odname]..}...if
3b80: 7b 24 6c 6f 64 6e 61 6d 65 20 65 71 20 22 3a 74 {$lodname eq ":t
3b90: 72 75 6e 6b 3a 22 7d 20 7b 0a 09 20 20 20 20 72 runk:"} {.. r
3ba0: 65 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 6e eturn [$rstate n
3bb0: 65 77 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a ew $lodname]..}.
3bc0: 0a 09 23 20 43 61 73 65 20 28 63 29 2e 20 57 65 ..# Case (c). We
3bd0: 20 66 69 6e 64 20 74 68 65 20 70 61 72 65 6e 74 find the parent
3be0: 20 4c 4f 44 20 6f 66 20 6f 75 72 20 4c 4f 44 20 LOD of our LOD
3bf0: 61 6e 64 20 6c 65 74 20 74 68 65 20 6e 65 77 0a and let the new.
3c00: 09 23 20 77 6f 72 6b 73 70 61 63 65 20 69 6e 68 .# workspace inh
3c10: 65 72 69 74 20 66 72 6f 6d 20 74 68 65 20 70 61 erit from the pa
3c20: 72 65 6e 74 27 73 20 77 6f 72 6b 73 70 61 63 65 rent's workspace
3c30: 2e 0a 0a 09 73 65 74 20 70 6c 6f 64 6e 61 6d 65 ....set plodname
3c40: 20 5b 5b 5b 24 70 72 6f 6a 65 63 74 20 67 65 74 [[[$project get
3c50: 73 79 6d 62 6f 6c 20 24 6c 6f 64 6e 61 6d 65 5d symbol $lodname]
3c60: 20 70 61 72 65 6e 74 5d 20 6e 61 6d 65 5d 0a 0a parent] name]..
3c70: 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 .log write 8 cse
3c80: 74 73 20 7b 70 4c 4f 44 20 20 20 27 24 70 6c 6f ts {pLOD '$plo
3c90: 64 6e 61 6d 65 27 7d 0a 0a 09 69 66 20 7b 5b 24 dname'}...if {[$
3ca0: 72 73 74 61 74 65 20 68 61 73 20 24 70 6c 6f 64 rstate has $plod
3cb0: 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 72 65 name]} {.. re
3cc0: 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 6e 65 turn [$rstate ne
3cd0: 77 20 24 6c 6f 64 6e 61 6d 65 20 24 70 6c 6f 64 w $lodname $plod
3ce0: 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 66 6f 72 65 61 name]..}...forea
3cf0: 63 68 20 6b 20 5b 6c 73 6f 72 74 20 5b 24 72 73 ch k [lsort [$rs
3d00: 74 61 74 65 20 6e 61 6d 65 73 5d 5d 20 7b 0a 09 tate names]] {..
3d10: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 log write 8
3d20: 63 73 65 74 73 20 7b 20 20 20 20 24 6b 20 3d 20 csets { $k =
3d30: 5b 5b 24 72 73 74 61 74 65 20 67 65 74 20 24 6b [[$rstate get $k
3d40: 5d 20 67 65 74 69 64 5d 7d 0a 09 7d 0a 0a 09 74 ] getid]}..}...t
3d50: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 rouble internal
3d60: 7b 55 6e 61 62 6c 65 20 74 6f 20 64 65 74 65 72 {Unable to deter
3d70: 6d 69 6e 65 20 63 68 61 6e 67 65 73 65 74 20 70 mine changeset p
3d80: 61 72 65 6e 74 7d 0a 09 72 65 74 75 72 6e 0a 20 arent}..return.
3d90: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 47 }.. proc G
3da0: 65 74 69 73 64 65 66 61 75 6c 74 20 7b 72 65 76 etisdefault {rev
3db0: 69 73 69 6f 6e 73 7d 20 7b 0a 09 73 65 74 20 74 isions} {..set t
3dc0: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 heset ('[join $r
3dd0: 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 evisions {','}]'
3de0: 29 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 )...struct::list
3df0: 20 61 73 73 69 67 6e 20 5b 73 74 61 74 65 20 72 assign [state r
3e00: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
3e10: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
3e20: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
3e30: 43 54 20 52 2e 69 73 64 65 66 61 75 6c 74 2c 20 CT R.isdefault,
3e40: 52 2e 64 62 63 68 69 6c 64 0a 09 20 20 20 20 46 R.dbchild.. F
3e50: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R
3e60: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 .. WHERE R.r
3e70: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 2d id IN $theset -
3e80: 2d 20 41 6c 6c 20 73 70 65 63 69 66 69 65 64 20 - All specified
3e90: 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 20 4c revisions.. L
3ea0: 49 4d 49 54 20 31 0a 09 7d 5d 5d 20 64 65 66 20 IMIT 1..}]] def
3eb0: 6c 61 73 74 0a 0a 09 23 20 54 4f 44 4f 2f 43 48 last...# TODO/CH
3ec0: 45 43 4b 3a 20 6c 6f 6f 6b 20 66 6f 72 20 63 68 ECK: look for ch
3ed0: 61 6e 67 65 73 65 74 73 20 77 68 65 72 65 20 69 angesets where i
3ee0: 73 64 65 66 61 75 6c 74 2f 64 62 63 68 69 6c 64 sdefault/dbchild
3ef0: 20 69 73 0a 09 23 20 61 6d 62 69 67 6f 75 73 2e is..# ambigous.
3f00: 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 ...return [list
3f10: 24 64 65 66 20 5b 65 78 70 72 20 7b 24 6c 61 73 $def [expr {$las
3f20: 74 20 6e 65 20 22 22 7d 5d 5d 0a 20 20 20 20 7d t ne ""}]]. }
3f30: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
3f40: 20 73 70 6c 69 74 20 7b 63 73 65 74 20 61 72 67 split {cset arg
3f50: 73 7d 20 7b 0a 09 23 20 41 73 20 70 61 72 74 20 s} {..# As part
3f60: 6f 66 20 74 68 65 20 63 72 65 61 74 69 6f 6e 20 of the creation
3f70: 6f 66 20 74 68 65 20 6e 65 77 20 63 68 61 6e 67 of the new chang
3f80: 65 73 65 74 73 20 73 70 65 63 69 66 69 65 64 20 esets specified
3f90: 69 6e 0a 09 23 20 41 52 47 53 20 61 73 20 73 65 in..# ARGS as se
3fa0: 74 73 20 6f 66 20 69 74 65 6d 73 2c 20 61 6c 6c ts of items, all
3fb0: 20 73 75 62 73 65 74 73 20 6f 66 20 43 53 45 54 subsets of CSET
3fc0: 27 73 20 69 74 65 6d 20 73 65 74 2c 20 43 53 45 's item set, CSE
3fd0: 54 0a 09 23 20 77 69 6c 6c 20 62 65 20 64 72 6f T..# will be dro
3fe0: 70 70 65 64 20 66 72 6f 6d 20 61 6c 6c 20 64 61 pped from all da
3ff0: 74 61 62 61 73 65 73 2c 20 69 6e 20 61 6e 64 20 tabases, in and
4000: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2c 0a 09 out of memory,..
4010: 23 20 61 6e 64 20 74 68 65 6e 20 64 65 73 74 72 # and then destr
4020: 6f 79 65 64 2e 0a 09 23 0a 09 23 20 4e 6f 74 65 oyed...#..# Note
4030: 3a 20 54 68 65 20 69 74 65 6d 20 6c 69 73 74 73 : The item lists
4040: 20 66 6f 75 6e 64 20 69 6e 20 61 72 67 73 20 61 found in args a
4050: 72 65 20 74 61 67 67 65 64 20 69 74 65 6d 73 2e re tagged items.
4060: 20 54 68 65 79 0a 09 23 20 68 61 76 65 20 74 6f They..# have to
4070: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 74 have the same t
4080: 79 70 65 20 61 73 20 74 68 65 20 63 68 61 6e 67 ype as the chang
4090: 65 73 65 74 2c 20 62 65 69 6e 67 20 73 75 62 73 eset, being subs
40a0: 65 74 73 0a 09 23 20 6f 66 20 69 74 73 20 69 74 ets..# of its it
40b0: 65 6d 73 2e 20 54 68 69 73 20 69 73 20 63 68 65 ems. This is che
40c0: 63 6b 65 64 20 69 6e 20 55 6e 74 61 67 31 2e 0a cked in Untag1..
40d0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 ..log write 8 cs
40e0: 65 74 73 20 7b 4f 4c 44 3a 20 5b 6c 73 6f 72 74 ets {OLD: [lsort
40f0: 20 5b 24 63 73 65 74 20 69 74 65 6d 73 5d 5d 7d [$cset items]]}
4100: 0a 09 56 61 6c 69 64 61 74 65 46 72 61 67 6d 65 ..ValidateFragme
4110: 6e 74 73 20 24 63 73 65 74 20 24 61 72 67 73 0a nts $cset $args.
4120: 0a 09 23 20 41 6c 6c 20 63 68 65 63 6b 73 20 70 ..# All checks p
4130: 61 73 73 2c 20 61 63 74 75 61 6c 6c 79 20 70 65 ass, actually pe
4140: 72 66 6f 72 6d 20 74 68 65 20 73 70 6c 69 74 2e rform the split.
4150: 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 ...struct::list
4160: 61 73 73 69 67 6e 20 5b 24 63 73 65 74 20 64 61 assign [$cset da
4170: 74 61 5d 20 70 72 6f 6a 65 63 74 20 63 73 74 79 ta] project csty
4180: 70 65 20 63 73 73 72 63 0a 0a 09 73 65 74 20 70 pe cssrc...set p
4190: 72 65 64 65 63 65 73 73 6f 72 73 20 5b 24 63 73 redecessors [$cs
41a0: 65 74 20 64 72 6f 70 5d 0a 09 24 63 73 65 74 20 et drop]..$cset
41b0: 64 65 73 74 72 6f 79 0a 0a 09 73 65 74 20 6e 65 destroy...set ne
41c0: 77 63 73 65 74 73 20 7b 7d 0a 09 66 6f 72 65 61 wcsets {}..forea
41d0: 63 68 20 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 ch fragmentitems
41e0: 20 24 61 72 67 73 20 7b 0a 09 20 20 20 20 6c 6f $args {.. lo
41f0: 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 g write 8 csets
4200: 7b 4d 41 4b 45 3a 20 5b 6c 73 6f 72 74 20 24 66 {MAKE: [lsort $f
4210: 72 61 67 6d 65 6e 74 69 74 65 6d 73 5d 7d 0a 0a ragmentitems]}..
4220: 09 20 20 20 20 73 65 74 20 66 72 61 67 6d 65 6e . set fragmen
4230: 74 20 5b 24 74 79 70 65 20 25 41 55 54 4f 25 20 t [$type %AUTO%
4240: 24 70 72 6f 6a 65 63 74 20 24 63 73 74 79 70 65 $project $cstype
4250: 20 24 63 73 73 72 63 20 5c 0a 09 09 09 20 20 20 $cssrc \....
4260: 20 20 20 5b 55 6e 74 61 67 20 24 66 72 61 67 6d [Untag $fragm
4270: 65 6e 74 69 74 65 6d 73 20 24 63 73 74 79 70 65 entitems $cstype
4280: 5d 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 ]].. lappend
4290: 6e 65 77 63 73 65 74 73 20 24 66 72 61 67 6d 65 newcsets $fragme
42a0: 6e 74 0a 0a 09 20 20 20 20 24 66 72 61 67 6d 65 nt... $fragme
42b0: 6e 74 20 70 65 72 73 69 73 74 0a 09 20 20 20 20 nt persist..
42c0: 24 66 72 61 67 6d 65 6e 74 20 64 65 74 65 72 6d $fragment determ
42d0: 69 6e 65 73 75 63 63 65 73 73 6f 72 73 0a 09 7d inesuccessors..}
42e0: 0a 0a 09 23 20 54 68 65 20 70 72 65 64 65 63 65 ...# The predece
42f0: 73 73 6f 72 73 20 68 61 76 65 20 74 6f 20 72 65 ssors have to re
4300: 63 6f 6d 70 75 74 65 20 74 68 65 69 72 20 73 75 compute their su
4310: 63 63 65 73 73 6f 72 73 2c 20 69 2e 65 2e 0a 09 ccessors, i.e...
4320: 23 20 72 65 6d 6f 76 65 20 74 68 65 20 64 72 6f # remove the dro
4330: 70 70 65 64 20 63 68 61 6e 67 65 73 65 74 20 61 pped changeset a
4340: 6e 64 20 70 75 74 20 6f 6e 65 20 6f 66 20 74 68 nd put one of th
4350: 65 20 66 72 61 67 6d 65 6e 74 73 0a 09 23 20 69 e fragments..# i
4360: 6e 74 6f 20 69 74 73 20 70 6c 61 63 65 2e 0a 09 nto its place...
4370: 66 6f 72 65 61 63 68 20 70 20 24 70 72 65 64 65 foreach p $prede
4380: 63 65 73 73 6f 72 73 20 7b 0a 09 20 20 20 20 24 cessors {.. $
4390: 70 20 64 65 74 65 72 6d 69 6e 65 73 75 63 63 65 p determinesucce
43a0: 73 73 6f 72 73 0a 09 7d 0a 0a 09 72 65 74 75 72 ssors..}...retur
43b0: 6e 20 24 6e 65 77 63 73 65 74 73 0a 20 20 20 20 n $newcsets.
43c0: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }.. typemetho
43d0: 64 20 69 74 65 6d 73 74 72 20 7b 69 74 65 6d 7d d itemstr {item}
43e0: 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 {..struct::list
43f0: 20 61 73 73 69 67 6e 20 24 69 74 65 6d 20 69 74 assign $item it
4400: 79 70 65 20 69 69 64 0a 09 72 65 74 75 72 6e 20 ype iid..return
4410: 5b 24 69 74 79 70 65 20 73 74 72 20 24 69 69 64 [$itype str $iid
4420: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 ]. }.. typ
4430: 65 6d 65 74 68 6f 64 20 73 74 72 6c 69 73 74 20 emethod strlist
4440: 7b 63 68 61 6e 67 65 73 65 74 73 7d 20 7b 0a 09 {changesets} {..
4450: 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b 73 74 return [join [st
4460: 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 24 ruct::list map $
4470: 63 68 61 6e 67 65 73 65 74 73 20 5b 6d 79 70 72 changesets [mypr
4480: 6f 63 20 49 44 5d 5d 5d 0a 20 20 20 20 7d 0a 0a oc ID]]]. }..
4490: 20 20 20 20 70 72 6f 63 20 49 44 20 7b 63 73 65 proc ID {cse
44a0: 74 7d 20 7b 20 24 63 73 65 74 20 73 74 72 20 7d t} { $cset str }
44b0: 0a 0a 20 20 20 20 70 72 6f 63 20 55 6e 74 61 67 .. proc Untag
44c0: 20 7b 74 61 67 67 65 64 69 74 65 6d 73 20 63 73 {taggeditems cs
44d0: 74 79 70 65 7d 20 7b 0a 09 72 65 74 75 72 6e 20 type} {..return
44e0: 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 [struct::list ma
44f0: 70 20 24 74 61 67 67 65 64 69 74 65 6d 73 20 5b p $taggeditems [
4500: 6d 79 70 72 6f 63 20 55 6e 74 61 67 31 20 24 63 myproc Untag1 $c
4510: 73 74 79 70 65 5d 5d 0a 20 20 20 20 7d 0a 0a 20 stype]]. }..
4520: 20 20 20 70 72 6f 63 20 55 6e 74 61 67 31 20 7b proc Untag1 {
4530: 63 73 74 79 70 65 20 74 68 65 69 74 65 6d 7d 20 cstype theitem}
4540: 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 {..struct::list
4550: 61 73 73 69 67 6e 20 24 74 68 65 69 74 65 6d 20 assign $theitem
4560: 74 20 69 0a 09 69 6e 74 65 67 72 69 74 79 20 61 t i..integrity a
4570: 73 73 65 72 74 20 7b 24 63 73 74 79 70 65 20 65 ssert {$cstype e
4580: 71 20 24 74 7d 20 7b 49 74 65 6d 20 24 69 27 73 q $t} {Item $i's
4590: 20 74 79 70 65 20 69 73 20 27 24 74 27 2c 20 65 type is '$t', e
45a0: 78 70 65 63 74 65 64 20 27 24 63 73 74 79 70 65 xpected '$cstype
45b0: 27 7d 0a 09 72 65 74 75 72 6e 20 24 69 0a 20 20 '}..return $i.
45c0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 54 61 }.. proc Ta
45d0: 67 49 74 65 6d 44 69 63 74 20 7b 69 74 65 6d 64 gItemDict {itemd
45e0: 69 63 74 20 63 73 74 79 70 65 7d 20 7b 0a 09 73 ict cstype} {..s
45f0: 65 74 20 72 65 73 20 7b 7d 0a 09 66 6f 72 65 61 et res {}..forea
4600: 63 68 20 7b 69 20 76 7d 20 24 69 74 65 6d 64 69 ch {i v} $itemdi
4610: 63 74 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 ct { lappend res
4620: 20 5b 6c 69 73 74 20 24 63 73 74 79 70 65 20 24 [list $cstype $
4630: 69 5d 20 24 76 20 7d 0a 09 72 65 74 75 72 6e 20 i] $v }..return
4640: 24 72 65 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 $res. }..
4650: 70 72 6f 63 20 56 61 6c 69 64 61 74 65 46 72 61 proc ValidateFra
4660: 67 6d 65 6e 74 73 20 7b 63 73 65 74 20 66 72 61 gments {cset fra
4670: 67 6d 65 6e 74 73 7d 20 7b 0a 09 23 20 43 68 65 gments} {..# Che
4680: 63 6b 20 74 68 65 20 76 61 72 69 6f 75 73 20 69 ck the various i
4690: 6e 74 65 67 72 69 74 79 20 63 6f 6e 73 74 72 61 ntegrity constra
46a0: 69 6e 74 73 20 66 6f 72 20 74 68 65 20 66 72 61 ints for the fra
46b0: 67 6d 65 6e 74 73 0a 09 23 20 73 70 65 63 69 66 gments..# specif
46c0: 79 69 6e 67 20 68 6f 77 20 74 6f 20 73 70 6c 69 ying how to spli
46d0: 74 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 3a t the changeset:
46e0: 0a 09 23 0a 09 23 20 2a 20 57 65 20 6d 75 73 74 ..#..# * We must
46f0: 20 68 61 76 65 20 74 77 6f 20 6f 72 20 6d 6f 72 have two or mor
4700: 65 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 73 20 e fragments, as
4710: 73 70 6c 69 74 74 69 6e 67 20 61 0a 09 23 20 20 splitting a..#
4720: 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 6f 20 changeset into
4730: 6f 6e 65 20 6d 61 6b 65 73 20 6e 6f 20 73 65 6e one makes no sen
4740: 73 65 2e 0a 09 23 20 2a 20 4e 6f 20 66 72 61 67 se...# * No frag
4750: 6d 65 6e 74 20 6d 61 79 20 62 65 20 65 6d 70 74 ment may be empt
4760: 79 2e 0a 09 23 20 2a 20 41 6c 6c 20 66 72 61 67 y...# * All frag
4770: 6d 65 6e 74 73 20 68 61 76 65 20 74 6f 20 62 65 ments have to be
4780: 20 74 72 75 65 20 73 75 62 73 65 74 73 20 6f 66 true subsets of
4790: 20 74 68 65 20 69 74 65 6d 73 20 69 6e 20 74 68 the items in th
47a0: 65 0a 09 23 20 20 20 63 68 61 6e 67 65 73 65 74 e..# changeset
47b0: 20 74 6f 20 73 70 6c 69 74 2e 20 54 68 65 20 27 to split. The '
47c0: 74 72 75 65 27 20 69 73 20 69 6d 70 6c 69 65 64 true' is implied
47d0: 20 62 65 63 61 75 73 65 20 6e 6f 6e 65 20 61 72 because none ar
47e0: 65 0a 09 23 20 20 20 61 6c 6c 6f 77 65 64 20 74 e..# allowed t
47f0: 6f 20 62 65 20 65 6d 70 74 79 2c 20 73 6f 20 65 o be empty, so e
4800: 61 63 68 20 68 61 73 20 74 6f 20 62 65 20 73 6d ach has to be sm
4810: 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 0a 09 aller than the..
4820: 23 20 20 20 74 6f 74 61 6c 2e 0a 09 23 20 2a 20 # total...# *
4830: 54 68 65 20 75 6e 69 6f 6e 20 6f 66 20 74 68 65 The union of the
4840: 20 66 72 61 67 6d 65 6e 74 73 20 68 61 73 20 74 fragments has t
4850: 6f 20 62 65 20 74 68 65 20 69 74 65 6d 20 73 65 o be the item se
4860: 74 20 6f 66 20 74 68 65 0a 09 23 20 20 20 63 68 t of the..# ch
4870: 61 6e 67 65 73 65 74 2e 0a 09 23 20 2a 20 54 68 angeset...# * Th
4880: 65 20 66 72 61 67 6d 65 6e 74 20 6d 75 73 74 20 e fragment must
4890: 6e 6f 74 20 6f 76 65 72 6c 61 70 2c 20 69 2e 65 not overlap, i.e
48a0: 2e 20 74 68 65 69 72 20 70 61 69 72 77 69 73 65 . their pairwise
48b0: 0a 09 23 20 20 20 69 6e 74 65 72 73 65 63 74 69 ..# intersecti
48c0: 6f 6e 73 20 68 61 76 65 20 74 6f 20 62 65 20 65 ons have to be e
48d0: 6d 70 74 79 2e 0a 0a 09 73 65 74 20 63 6f 76 65 mpty....set cove
48e0: 72 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 66 72 r {}..foreach fr
48f0: 61 67 6d 65 6e 74 69 74 65 6d 73 20 24 66 72 61 agmentitems $fra
4900: 67 6d 65 6e 74 73 20 7b 0a 09 20 20 20 20 6c 6f gments {.. lo
4910: 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 g write 8 csets
4920: 7b 4e 45 57 3a 20 5b 6c 73 6f 72 74 20 24 66 72 {NEW: [lsort $fr
4930: 61 67 6d 65 6e 74 69 74 65 6d 73 5d 7d 0a 0a 09 agmentitems]}...
4940: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 integrity as
4950: 73 65 72 74 20 7b 0a 09 09 21 5b 73 74 72 75 63 sert {...![struc
4960: 74 3a 3a 73 65 74 20 65 6d 70 74 79 20 24 66 72 t::set empty $fr
4970: 61 67 6d 65 6e 74 69 74 65 6d 73 5d 0a 09 20 20 agmentitems]..
4980: 20 20 7d 20 7b 63 68 61 6e 67 65 73 65 74 20 66 } {changeset f
4990: 72 61 67 6d 65 6e 74 20 69 73 20 65 6d 70 74 79 ragment is empty
49a0: 7d 0a 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 }... integrit
49b0: 79 20 61 73 73 65 72 74 20 7b 0a 09 09 5b 73 74 y assert {...[st
49c0: 72 75 63 74 3a 3a 73 65 74 20 73 75 62 73 65 74 ruct::set subset
49d0: 6f 66 20 24 66 72 61 67 6d 65 6e 74 69 74 65 6d of $fragmentitem
49e0: 73 20 5b 24 63 73 65 74 20 69 74 65 6d 73 5d 5d s [$cset items]]
49f0: 0a 09 20 20 20 20 7d 20 7b 63 68 61 6e 67 65 73 .. } {changes
4a00: 65 74 20 66 72 61 67 6d 65 6e 74 20 69 73 20 6e et fragment is n
4a10: 6f 74 20 61 20 73 75 62 73 65 74 7d 0a 09 20 20 ot a subset}..
4a20: 20 20 73 74 72 75 63 74 3a 3a 73 65 74 20 61 64 struct::set ad
4a30: 64 20 63 6f 76 65 72 20 24 66 72 61 67 6d 65 6e d cover $fragmen
4a40: 74 69 74 65 6d 73 0a 09 7d 0a 0a 09 69 6e 74 65 titems..}...inte
4a50: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 grity assert {..
4a60: 20 20 20 20 5b 73 74 72 75 63 74 3a 3a 73 65 74 [struct::set
4a70: 20 65 71 75 61 6c 20 24 63 6f 76 65 72 20 5b 24 equal $cover [$
4a80: 63 73 65 74 20 69 74 65 6d 73 5d 5d 0a 09 20 7d cset items]].. }
4a90: 20 7b 54 68 65 20 66 72 61 67 6d 65 6e 74 73 20 {The fragments
4aa0: 64 6f 20 6e 6f 74 20 63 6f 76 65 72 20 74 68 65 do not cover the
4ab0: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 original change
4ac0: 73 65 74 7d 0a 0a 09 73 65 74 20 69 20 31 0a 09 set}...set i 1..
4ad0: 66 6f 72 65 61 63 68 20 66 69 61 20 24 66 72 61 foreach fia $fra
4ae0: 67 6d 65 6e 74 73 20 7b 0a 09 20 20 20 20 66 6f gments {.. fo
4af0: 72 65 61 63 68 20 66 69 62 20 5b 6c 72 61 6e 67 reach fib [lrang
4b00: 65 20 24 66 72 61 67 6d 65 6e 74 73 20 24 69 20 e $fragments $i
4b10: 65 6e 64 5d 20 7b 0a 09 09 69 6e 74 65 67 72 69 end] {...integri
4b20: 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 20 20 ty assert {...
4b30: 20 20 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 65 [struct::set e
4b40: 6d 70 74 79 20 5b 73 74 72 75 63 74 3a 3a 73 65 mpty [struct::se
4b50: 74 20 69 6e 74 65 72 73 65 63 74 20 24 66 69 61 t intersect $fia
4b60: 20 24 66 69 62 5d 5d 0a 09 09 7d 20 7b 54 68 65 $fib]]...} {The
4b70: 20 66 72 61 67 6d 65 6e 74 73 20 3c 24 66 69 61 fragments <$fia
4b80: 3e 20 61 6e 64 20 3c 24 66 69 62 3e 20 6f 76 65 > and <$fib> ove
4b90: 72 6c 61 70 7d 0a 09 20 20 20 20 7d 0a 09 20 20 rlap}.. }..
4ba0: 20 20 69 6e 63 72 20 69 0a 09 7d 0a 0a 09 72 65 incr i..}...re
4bb0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
4bc0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
4bd0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
4be0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 #######. ## S
4bf0: 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69 61 62 tate.. variab
4c00: 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20 20 7b le myid {
4c10: 7d 20 3b 20 23 20 49 64 20 6f 66 20 74 68 65 20 } ; # Id of the
4c20: 63 73 65 74 20 66 6f 72 20 74 68 65 20 70 65 72 cset for the per
4c30: 73 69 73 74 65 6e 74 0a 09 09 09 20 20 20 20 20 sistent....
4c40: 20 23 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61 # state.. va
4c50: 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65 63 74 riable myproject
4c60: 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 {} ; # Refere
4c70: 6e 63 65 20 6f 66 20 74 68 65 20 70 72 6f 6a 65 nce of the proje
4c80: 63 74 20 6f 62 6a 65 63 74 20 74 68 65 0a 09 09 ct object the...
4c90: 09 20 20 20 20 20 20 23 20 63 68 61 6e 67 65 73 . # changes
4ca0: 65 74 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 et belongs to..
4cb0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 79 variable myty
4cc0: 70 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 57 pe {} ; # W
4cd0: 68 61 74 20 74 68 65 20 63 68 61 6e 67 65 73 65 hat the changese
4ce0: 74 20 69 73 20 62 61 73 65 64 20 6f 6e 0a 09 09 t is based on...
4cf0: 09 20 20 20 20 20 20 23 20 28 72 65 76 69 73 69 . # (revisi
4d00: 6f 6e 73 2c 20 74 61 67 73 2c 20 6f 72 20 62 72 ons, tags, or br
4d10: 61 6e 63 68 65 73 29 2e 0a 09 09 09 20 20 20 20 anches).....
4d20: 20 20 23 20 56 61 6c 75 65 73 3a 20 53 65 65 20 # Values: See
4d30: 6d 79 63 73 74 79 70 65 2e 20 4e 6f 74 65 20 74 mycstype. Note t
4d40: 68 61 74 20 77 65 0a 09 09 09 20 20 20 20 20 20 hat we....
4d50: 23 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 74 # have to keep t
4d60: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 he names of the
4d70: 68 65 6c 70 65 72 0a 09 09 09 20 20 20 20 20 20 helper....
4d80: 23 20 73 69 6e 67 6c 65 74 6f 6e 73 20 69 6e 20 # singletons in
4d90: 73 79 6e 63 20 77 69 74 68 20 74 68 65 20 63 6f sync with the co
4da0: 6e 74 65 6e 74 73 0a 09 09 09 20 20 20 20 20 20 ntents....
4db0: 23 20 6f 66 20 73 74 61 74 65 20 74 61 62 6c 65 # of state table
4dc0: 20 27 63 73 74 79 70 65 27 2c 20 61 6e 64 20 76 'cstype', and v
4dd0: 61 72 69 6f 75 73 0a 09 09 09 20 20 20 20 20 20 arious....
4de0: 23 20 6f 74 68 65 72 20 70 6c 61 63 65 73 20 75 # other places u
4df0: 73 69 6e 67 20 74 68 65 6d 20 68 61 72 64 77 69 sing them hardwi
4e00: 72 65 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c red.. variabl
4e10: 65 20 6d 79 74 79 70 65 6f 62 6a 20 20 20 7b 7d e mytypeobj {}
4e20: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 ; # Reference t
4e30: 6f 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 o the container
4e40: 66 6f 72 20 74 68 65 0a 09 09 09 20 20 20 20 20 for the....
4e50: 20 23 20 74 79 70 65 20 64 65 70 65 6e 64 65 6e # type dependen
4e60: 74 20 63 6f 64 65 2e 20 44 65 72 69 76 65 64 20 t code. Derived
4e70: 66 72 6f 6d 0a 09 09 09 20 20 20 20 20 20 23 20 from.... #
4e80: 6d 79 74 79 70 65 2e 0a 20 20 20 20 76 61 72 69 mytype.. vari
4e90: 61 62 6c 65 20 6d 79 73 72 63 69 64 20 20 20 20 able mysrcid
4ea0: 20 7b 7d 20 3b 20 23 20 49 64 20 6f 66 20 74 68 {} ; # Id of th
4eb0: 65 20 6d 65 74 61 64 61 74 61 20 6f 72 20 73 79 e metadata or sy
4ec0: 6d 62 6f 6c 20 74 68 65 20 63 73 65 74 0a 09 09 mbol the cset...
4ed0: 09 20 20 20 20 20 20 23 20 69 73 20 62 61 73 65 . # is base
4ee0: 64 20 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 d on.. variab
4ef0: 6c 65 20 6d 79 69 74 65 6d 73 20 20 20 20 20 7b le myitems {
4f00: 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 74 68 } ; # List of th
4f10: 65 20 66 69 6c 65 20 6c 65 76 65 6c 20 72 65 76 e file level rev
4f20: 69 73 69 6f 6e 73 2c 0a 09 09 09 20 20 20 20 20 isions,....
4f30: 20 23 20 74 61 67 73 2c 20 6f 72 20 62 72 61 6e # tags, or bran
4f40: 63 68 65 73 20 69 6e 20 74 68 65 20 63 73 65 74 ches in the cset
4f50: 2c 20 61 73 0a 09 09 09 20 20 20 20 20 20 23 20 , as.... #
4f60: 69 64 73 2e 20 4e 6f 74 20 74 61 67 67 65 64 2e ids. Not tagged.
4f70: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4f80: 74 69 74 65 6d 73 20 20 20 20 7b 7d 20 3b 20 23 titems {} ; #
4f90: 20 41 73 20 6d 79 69 74 65 6d 73 2c 20 74 68 65 As myitems, the
4fa0: 20 74 61 67 67 65 64 20 66 6f 72 6d 2e 0a 20 20 tagged form..
4fb0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 6f 73 variable mypos
4fc0: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 43 6f {} ; # Co
4fd0: 6d 6d 69 74 20 70 6f 73 69 74 69 6f 6e 20 6f 66 mmit position of
4fe0: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 2c 20 the changeset,
4ff0: 69 66 0a 09 09 09 20 20 20 20 20 20 23 20 6b 6e if.... # kn
5000: 6f 77 6e 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 own... # # ##
5010: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
5020: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
5030: 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 #. ## Interna
5040: 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 74 l methods.. t
5050: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 63 6f ypevariable myco
5060: 75 6e 74 65 72 20 20 20 20 20 20 20 20 30 20 3b unter 0 ;
5070: 20 23 20 49 64 20 63 6f 75 6e 74 65 72 20 66 6f # Id counter fo
5080: 72 20 63 73 65 74 73 2e 20 4c 61 73 74 20 69 64 r csets. Last id
5090: 0a 09 09 09 09 20 20 20 20 20 20 23 20 75 73 65 ..... # use
50a0: 64 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 d.. typevaria
50b0: 62 6c 65 20 6d 79 63 73 74 79 70 65 20 2d 61 72 ble mycstype -ar
50c0: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 63 ray {} ; # Map c
50d0: 73 74 79 70 65 73 20 28 6e 61 6d 65 73 29 20 74 stypes (names) t
50e0: 6f 20 70 65 72 73 69 73 74 65 6e 74 0a 09 09 09 o persistent....
50f0: 09 20 20 20 20 20 20 23 20 69 64 73 2e 20 4e 6f . # ids. No
5100: 74 65 20 74 68 61 74 20 77 65 20 68 61 76 65 20 te that we have
5110: 74 6f 20 6b 65 65 70 0a 09 09 09 09 20 20 20 20 to keep.....
5120: 20 20 23 20 74 68 65 20 6e 61 6d 65 73 20 69 6e # the names in
5130: 20 74 68 65 20 74 61 62 6c 65 20 27 63 73 74 79 the table 'csty
5140: 70 65 27 0a 09 09 09 09 20 20 20 20 20 20 23 20 pe'..... #
5150: 69 6e 20 73 79 6e 63 20 77 69 74 68 20 74 68 65 in sync with the
5160: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 0a 09 09 names of the...
5170: 09 09 20 20 20 20 20 20 23 20 68 65 6c 70 65 72 .. # helper
5180: 20 73 69 6e 67 6c 65 74 6f 6e 73 2e 0a 0a 20 20 singletons...
5190: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 6e 6f typemethod ino
51a0: 72 64 65 72 20 7b 70 72 6f 6a 65 63 74 69 64 7d rder {projectid}
51b0: 20 7b 0a 09 23 20 52 65 74 75 72 6e 20 61 6c 6c {..# Return all
51c0: 20 63 68 61 6e 67 65 73 65 74 73 20 28 6f 62 6a changesets (obj
51d0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 29 20 ect references)
51e0: 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65 for the specifie
51f0: 64 0a 09 23 20 70 72 6f 6a 65 63 74 2c 20 69 6e d..# project, in
5200: 20 74 68 65 20 6f 72 64 65 72 20 67 69 76 65 6e the order given
5210: 20 74 6f 20 74 68 65 6d 20 62 79 20 74 68 65 20 to them by the
5220: 73 6f 72 74 20 70 61 73 73 65 73 2e 20 42 6f 74 sort passes. Bot
5230: 68 0a 09 23 20 74 68 65 20 66 69 6c 74 65 72 69 h..# the filteri
5240: 6e 67 20 62 79 20 70 72 6f 6a 65 63 74 20 61 6e ng by project an
5250: 64 20 74 68 65 20 73 6f 72 74 69 6e 67 20 62 79 d the sorting by
5260: 20 74 69 6d 65 20 6d 61 6b 65 20 74 68 65 0a 09 time make the..
5270: 23 20 75 73 65 20 6f 66 20 27 70 72 6f 6a 65 63 # use of 'projec
5280: 74 3a 3a 72 65 76 20 72 65 76 27 20 69 6d 70 6f t::rev rev' impo
5290: 73 73 69 62 6c 65 2e 0a 0a 09 73 65 74 20 72 65 ssible....set re
52a0: 73 20 7b 7d 0a 09 73 74 61 74 65 20 66 6f 72 65 s {}..state fore
52b0: 61 63 68 72 6f 77 20 7b 0a 09 20 20 20 20 53 45 achrow {.. SE
52c0: 4c 45 43 54 20 43 2e 63 69 64 20 20 41 53 20 78 LECT C.cid AS x
52d0: 63 69 64 2c 0a 09 20 20 20 20 20 20 20 20 20 20 cid,..
52e0: 20 54 2e 64 61 74 65 20 41 53 20 63 64 61 74 65 T.date AS cdate
52f0: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 63 68 61 .. FROM cha
5300: 6e 67 65 73 65 74 20 43 2c 20 63 73 74 69 6d 65 ngeset C, cstime
5310: 73 74 61 6d 70 20 54 0a 09 20 20 20 20 57 48 45 stamp T.. WHE
5320: 52 45 20 20 43 2e 70 69 64 20 20 3d 20 24 70 72 RE C.pid = $pr
5330: 6f 6a 65 63 74 69 64 20 2d 2d 20 6c 69 6d 69 74 ojectid -- limit
5340: 20 74 6f 20 63 68 61 6e 67 65 73 65 74 73 20 69 to changesets i
5350: 6e 20 70 72 6f 6a 65 63 74 0a 09 20 20 20 20 41 n project.. A
5360: 4e 44 20 20 20 20 54 2e 63 69 64 20 20 3d 20 43 ND T.cid = C
5370: 2e 63 69 64 20 20 20 20 20 20 2d 2d 20 67 65 74 .cid -- get
5380: 20 6f 72 64 65 72 69 6e 67 20 69 6e 66 6f 72 6d ordering inform
5390: 61 74 69 6f 6e 0a 09 20 20 20 20 4f 52 44 45 52 ation.. ORDER
53a0: 20 42 59 20 54 2e 64 61 74 65 20 20 20 20 20 20 BY T.date
53b0: 20 20 20 20 20 20 2d 2d 20 73 6f 72 74 20 69 6e -- sort in
53c0: 74 6f 20 63 6f 6d 6d 69 74 20 6f 72 64 65 72 0a to commit order.
53d0: 09 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e .} {.. lappen
53e0: 64 20 72 65 73 20 24 6d 79 69 64 6d 61 70 28 24 d res $myidmap($
53f0: 78 63 69 64 29 20 24 63 64 61 74 65 0a 09 7d 0a xcid) $cdate..}.
5400: 09 72 65 74 75 72 6e 20 24 72 65 73 0a 20 20 20 .return $res.
5410: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 }.. typemeth
5420: 6f 64 20 67 65 74 63 73 74 79 70 65 73 20 7b 7d od getcstypes {}
5430: 20 7b 0a 09 73 74 61 74 65 20 66 6f 72 65 61 63 {..state foreac
5440: 68 72 6f 77 20 7b 0a 09 20 20 20 20 53 45 4c 45 hrow {.. SELE
5450: 43 54 20 74 69 64 2c 20 6e 61 6d 65 20 46 52 4f CT tid, name FRO
5460: 4d 20 63 73 74 79 70 65 3b 0a 09 7d 20 7b 20 73 M cstype;..} { s
5470: 65 74 20 6d 79 63 73 74 79 70 65 28 24 6e 61 6d et mycstype($nam
5480: 65 29 20 24 74 69 64 20 7d 0a 09 72 65 74 75 72 e) $tid }..retur
5490: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 n. }.. typ
54a0: 65 6d 65 74 68 6f 64 20 6c 6f 61 64 20 7b 72 65 emethod load {re
54b0: 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 73 65 74 pository} {..set
54c0: 20 6e 20 30 0a 09 6c 6f 67 20 77 72 69 74 65 20 n 0..log write
54d0: 32 20 63 73 65 74 73 20 7b 4c 6f 61 64 69 6e 67 2 csets {Loading
54e0: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 73 7d the changesets}
54f0: 0a 09 73 74 61 74 65 20 66 6f 72 65 61 63 68 72 ..state foreachr
5500: 6f 77 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 ow {.. SELECT
5510: 20 43 2e 63 69 64 20 20 20 41 53 20 69 64 2c 0a C.cid AS id,.
5520: 09 20 20 20 20 20 20 20 20 20 20 20 43 2e 70 69 . C.pi
5530: 64 20 20 20 41 53 20 78 70 69 64 2c 0a 20 20 20 d AS xpid,.
5540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5550: 43 53 2e 6e 61 6d 65 20 41 53 20 63 73 74 79 70 CS.name AS cstyp
5560: 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 43 e,.. C
5570: 2e 73 72 63 20 20 20 41 53 20 73 72 63 69 64 0a .src AS srcid.
5580: 09 20 20 20 20 46 52 4f 4d 20 20 20 63 68 61 6e . FROM chan
5590: 67 65 73 65 74 20 43 2c 20 63 73 74 79 70 65 20 geset C, cstype
55a0: 43 53 0a 09 20 20 20 20 57 48 45 52 45 20 20 43 CS.. WHERE C
55b0: 2e 74 79 70 65 20 3d 20 43 53 2e 74 69 64 0a 09 .type = CS.tid..
55c0: 20 20 20 20 4f 52 44 45 52 20 42 59 20 43 2e 63 ORDER BY C.c
55d0: 69 64 0a 09 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 id..} {.. log
55e0: 20 70 72 6f 67 72 65 73 73 20 32 20 63 73 65 74 progress 2 cset
55f0: 73 20 24 6e 20 7b 7d 0a 09 20 20 20 20 73 65 74 s $n {}.. set
5600: 20 72 20 5b 24 74 79 70 65 20 25 41 55 54 4f 25 r [$type %AUTO%
5610: 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 70 72 [$repository pr
5620: 6f 6a 65 63 74 6f 66 20 24 78 70 69 64 5d 20 24 ojectof $xpid] $
5630: 63 73 74 79 70 65 20 24 73 72 63 69 64 20 5b 73 cstype $srcid [s
5640: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c tate run {...SEL
5650: 45 43 54 20 43 2e 69 69 64 0a 09 09 46 52 4f 4d ECT C.iid...FROM
5660: 20 20 20 63 73 69 74 65 6d 20 43 0a 09 09 57 48 csitem C...WH
5670: 45 52 45 20 20 43 2e 63 69 64 20 3d 20 24 69 64 ERE C.cid = $id
5680: 0a 09 09 4f 52 44 45 52 20 42 59 20 43 2e 70 6f ...ORDER BY C.po
5690: 73 0a 09 20 20 20 20 7d 5d 20 24 69 64 5d 0a 09 s.. }] $id]..
56a0: 20 20 20 20 69 6e 63 72 20 6e 0a 09 7d 0a 09 72 incr n..}..r
56b0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
56c0: 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 61 64 typemethod load
56d0: 63 6f 75 6e 74 65 72 20 7b 7d 20 7b 0a 09 23 20 counter {} {..#
56e0: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 63 Initialize the c
56f0: 6f 75 6e 74 65 72 20 66 72 6f 6d 20 74 68 65 20 ounter from the
5700: 73 74 61 74 65 0a 09 6c 6f 67 20 77 72 69 74 65 state..log write
5710: 20 32 20 63 73 65 74 73 20 7b 4c 6f 61 64 69 6e 2 csets {Loadin
5720: 67 20 63 68 61 6e 67 65 73 65 74 20 63 6f 75 6e g changeset coun
5730: 74 65 72 7d 0a 09 73 65 74 20 6d 79 63 6f 75 6e ter}..set mycoun
5740: 74 65 72 20 5b 73 74 61 74 65 20 6f 6e 65 20 7b ter [state one {
5750: 20 53 45 4c 45 43 54 20 4d 41 58 28 63 69 64 29 SELECT MAX(cid)
5760: 20 46 52 4f 4d 20 63 68 61 6e 67 65 73 65 74 20 FROM changeset
5770: 7d 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d }]..return. }
5780: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
5790: 20 6e 75 6d 20 7b 7d 20 7b 20 72 65 74 75 72 6e num {} { return
57a0: 20 24 6d 79 63 6f 75 6e 74 65 72 20 7d 0a 0a 20 $mycounter }..
57b0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
57c0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
57d0: 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 20 20 ##########..
57e0: 6d 65 74 68 6f 64 20 43 72 65 61 74 65 46 72 6f method CreateFro
57f0: 6d 46 72 61 67 6d 65 6e 74 73 20 7b 66 72 61 67 mFragments {frag
5800: 6d 65 6e 74 73 20 63 76 20 62 76 7d 20 7b 0a 09 ments cv bv} {..
5810: 75 70 76 61 72 20 31 20 24 63 76 20 63 6f 75 6e upvar 1 $cv coun
5820: 74 65 72 20 24 62 76 20 62 72 65 61 6b 73 0a 09 ter $bv breaks..
5830: 55 6e 6d 61 70 49 74 65 6d 73 20 24 6d 79 74 79 UnmapItems $myty
5840: 70 65 20 24 6d 79 69 74 65 6d 73 0a 0a 09 23 20 pe $myitems...#
5850: 43 72 65 61 74 65 20 63 68 61 6e 67 65 73 65 74 Create changeset
5860: 73 20 66 6f 72 20 74 68 65 20 66 72 61 67 6d 65 s for the fragme
5870: 6e 74 73 2c 20 72 65 75 73 69 6e 67 20 74 68 65 nts, reusing the
5880: 20 63 75 72 72 65 6e 74 20 6f 6e 65 0a 09 23 20 current one..#
5890: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 66 72 for the first fr
58a0: 61 67 6d 65 6e 74 2e 20 57 65 20 73 6f 72 74 20 agment. We sort
58b0: 74 68 65 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f them in order to
58c0: 20 61 6c 6c 6f 77 0a 09 23 20 63 68 65 63 6b 69 allow..# checki
58d0: 6e 67 20 66 6f 72 20 67 61 70 73 20 61 6e 64 20 ng for gaps and
58e0: 6e 69 63 65 20 6d 65 73 73 61 67 65 73 2e 0a 0a nice messages...
58f0: 09 73 65 74 20 6e 65 77 63 73 65 74 73 20 20 7b .set newcsets {
5900: 7d 0a 09 73 65 74 20 66 72 61 67 6d 65 6e 74 73 }..set fragments
5910: 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 [lsort -index 0
5920: 20 2d 69 6e 74 65 67 65 72 20 24 66 72 61 67 6d -integer $fragm
5930: 65 6e 74 73 5d 0a 0a 09 23 70 75 74 73 20 5c 74 ents]...#puts \t
5940: 2e 5b 6a 6f 69 6e 20 5b 50 52 73 20 24 66 72 61 .[join [PRs $fra
5950: 67 6d 65 6e 74 73 5d 20 2e 5c 6e 5c 74 2e 5d 2e gments] .\n\t.].
5960: 0a 0a 09 42 6f 72 64 65 72 20 5b 6c 69 6e 64 65 ...Border [linde
5970: 78 20 24 66 72 61 67 6d 65 6e 74 73 20 30 5d 20 x $fragments 0]
5980: 66 69 72 73 74 73 20 66 69 72 73 74 65 0a 0a 09 firsts firste...
5990: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 integrity assert
59a0: 20 7b 0a 09 20 20 20 20 24 66 69 72 73 74 73 20 {.. $firsts
59b0: 3d 3d 20 30 0a 09 7d 20 7b 42 61 64 20 66 72 61 == 0..} {Bad fra
59c0: 67 6d 65 6e 74 20 73 74 61 72 74 20 40 20 24 66 gment start @ $f
59d0: 69 72 73 74 73 2c 20 67 61 70 2c 20 6f 72 20 62 irsts, gap, or b
59e0: 65 66 6f 72 65 20 62 65 67 69 6e 6e 69 6e 67 20 efore beginning
59f0: 6f 66 20 74 68 65 20 72 61 6e 67 65 7d 0a 0a 09 of the range}...
5a00: 73 65 74 20 6c 61 73 74 65 20 24 66 69 72 73 74 set laste $first
5a10: 65 0a 09 66 6f 72 65 61 63 68 20 66 72 61 67 6d e..foreach fragm
5a20: 65 6e 74 20 5b 6c 72 61 6e 67 65 20 24 66 72 61 ent [lrange $fra
5a30: 67 6d 65 6e 74 73 20 31 20 65 6e 64 5d 20 7b 0a gments 1 end] {.
5a40: 09 20 20 20 20 42 6f 72 64 65 72 20 24 66 72 61 . Border $fra
5a50: 67 6d 65 6e 74 20 73 20 65 0a 09 20 20 20 20 69 gment s e.. i
5a60: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
5a70: 7b 0a 09 09 24 6c 61 73 74 65 20 3d 3d 20 28 24 {...$laste == ($
5a80: 73 20 2d 20 31 29 0a 09 20 20 20 20 7d 20 7b 42 s - 1).. } {B
5a90: 61 64 20 66 72 61 67 6d 65 6e 74 20 62 6f 72 64 ad fragment bord
5aa0: 65 72 20 3c 24 6c 61 73 74 65 20 7c 20 24 73 3e er <$laste | $s>
5ab0: 2c 20 67 61 70 20 6f 72 20 6f 76 65 72 6c 61 70 , gap or overlap
5ac0: 7d 0a 0a 09 20 20 20 20 73 65 74 20 6e 65 77 20 }... set new
5ad0: 5b 24 74 79 70 65 20 25 41 55 54 4f 25 20 24 6d [$type %AUTO% $m
5ae0: 79 70 72 6f 6a 65 63 74 20 24 6d 79 74 79 70 65 yproject $mytype
5af0: 20 24 6d 79 73 72 63 69 64 20 5b 6c 72 61 6e 67 $mysrcid [lrang
5b00: 65 20 24 6d 79 69 74 65 6d 73 20 24 73 20 24 65 e $myitems $s $e
5b10: 5d 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 ]].. lappend
5b20: 6e 65 77 63 73 65 74 73 20 24 6e 65 77 0a 09 20 newcsets $new..
5b30: 20 20 20 69 6e 63 72 20 63 6f 75 6e 74 65 72 0a incr counter.
5b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67 . log
5b50: 20 77 72 69 74 65 20 34 20 63 73 65 74 73 20 7b write 4 csets {
5b60: 42 72 65 61 6b 69 6e 67 20 5b 24 73 65 6c 66 20 Breaking [$self
5b70: 73 74 72 20 5d 20 40 20 24 6c 61 73 74 65 2c 20 str ] @ $laste,
5b80: 6e 65 77 20 5b 24 6e 65 77 20 73 74 72 5d 2c 20 new [$new str],
5b90: 63 75 74 74 69 6e 67 20 24 62 72 65 61 6b 73 28 cutting $breaks(
5ba0: 24 6c 61 73 74 65 29 7d 0a 0a 09 20 20 20 20 73 $laste)}... s
5bb0: 65 74 20 6c 61 73 74 65 20 24 65 0a 09 7d 0a 0a et laste $e..}..
5bc0: 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 .integrity asser
5bd0: 74 20 7b 0a 09 20 20 20 20 24 6c 61 73 74 65 20 t {.. $laste
5be0: 3d 3d 20 28 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 == ([llength $my
5bf0: 69 74 65 6d 73 5d 2d 31 29 0a 09 7d 20 7b 42 61 items]-1)..} {Ba
5c00: 64 20 66 72 61 67 6d 65 6e 74 20 65 6e 64 20 40 d fragment end @
5c10: 20 24 6c 61 73 74 65 2c 20 67 61 70 2c 20 6f 72 $laste, gap, or
5c20: 20 62 65 79 6f 6e 64 20 65 6e 64 20 6f 66 20 74 beyond end of t
5c30: 68 65 20 72 61 6e 67 65 7d 0a 0a 09 23 20 50 75 he range}...# Pu
5c40: 74 20 74 68 65 20 66 69 72 73 74 20 66 72 61 67 t the first frag
5c50: 6d 65 6e 74 20 69 6e 74 6f 20 74 68 65 20 63 75 ment into the cu
5c60: 72 72 65 6e 74 20 63 68 61 6e 67 65 73 65 74 2c rrent changeset,
5c70: 20 61 6e 64 0a 09 23 20 75 70 64 61 74 65 20 74 and..# update t
5c80: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6e 64 he in-memory ind
5c90: 65 78 2e 20 57 65 20 63 61 6e 20 73 69 6d 70 6c ex. We can simpl
5ca0: 79 20 28 72 65 29 61 64 64 20 74 68 65 20 69 74 y (re)add the it
5cb0: 65 6d 73 0a 09 23 20 62 65 63 61 75 73 65 20 77 ems..# because w
5cc0: 65 20 63 6c 65 61 72 65 64 20 74 68 65 20 70 72 e cleared the pr
5cd0: 65 76 69 6f 75 73 6c 79 20 65 78 69 73 74 69 6e eviously existin
5ce0: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 73 g information, s
5cf0: 65 65 0a 09 23 20 27 55 6e 6d 61 70 49 74 65 6d ee..# 'UnmapItem
5d00: 73 27 20 61 62 6f 76 65 2e 20 50 65 72 73 69 73 s' above. Persis
5d10: 74 65 6e 63 65 20 64 6f 65 73 20 6e 6f 74 20 6d tence does not m
5d20: 61 74 74 65 72 20 68 65 72 65 2c 20 6e 6f 6e 65 atter here, none
5d30: 0a 09 23 20 6f 66 20 74 68 65 20 63 68 61 6e 67 ..# of the chang
5d40: 65 73 65 74 73 20 68 61 73 20 62 65 65 6e 20 73 esets has been s
5d50: 61 76 65 64 20 74 6f 20 74 68 65 20 70 65 72 73 aved to the pers
5d60: 69 73 74 65 6e 74 20 73 74 61 74 65 0a 09 23 20 istent state..#
5d70: 79 65 74 2e 0a 0a 09 73 65 74 20 6d 79 69 74 65 yet....set myite
5d80: 6d 73 20 20 5b 6c 72 61 6e 67 65 20 24 6d 79 69 ms [lrange $myi
5d90: 74 65 6d 73 20 20 30 20 24 66 69 72 73 74 65 5d tems 0 $firste]
5da0: 0a 09 73 65 74 20 6d 79 74 69 74 65 6d 73 20 5b ..set mytitems [
5db0: 6c 72 61 6e 67 65 20 24 6d 79 74 69 74 65 6d 73 lrange $mytitems
5dc0: 20 30 20 24 66 69 72 73 74 65 5d 0a 09 4d 61 70 0 $firste]..Map
5dd0: 49 74 65 6d 73 20 24 6d 79 74 79 70 65 20 24 6d Items $mytype $m
5de0: 79 69 74 65 6d 73 0a 09 72 65 74 75 72 6e 20 24 yitems..return $
5df0: 6e 65 77 63 73 65 74 73 0a 20 20 20 20 7d 0a 0a newcsets. }..
5e00: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
5e10: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
5e20: 23 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 20 ###########..
5e30: 20 70 72 6f 63 20 42 72 65 61 6b 44 69 72 65 63 proc BreakDirec
5e40: 74 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 74 tDependencies {t
5e50: 68 65 69 74 65 6d 73 20 62 76 7d 20 7b 0a 09 75 heitems bv} {..u
5e60: 70 76 61 72 20 31 20 6d 79 74 79 70 65 6f 62 6a pvar 1 mytypeobj
5e70: 20 6d 79 74 79 70 65 6f 62 6a 20 73 65 6c 66 20 mytypeobj self
5e80: 73 65 6c 66 20 24 62 76 20 62 72 65 61 6b 73 0a self $bv breaks.
5e90: 0a 09 23 20 41 72 72 61 79 20 6f 66 20 64 65 70 ..# Array of dep
5ea0: 65 6e 64 65 6e 63 69 65 73 20 28 70 61 72 65 6e endencies (paren
5eb0: 74 20 2d 3e 20 63 68 69 6c 64 29 2e 20 54 68 69 t -> child). Thi
5ec0: 73 20 69 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d s is pulled from
5ed0: 0a 09 23 20 74 68 65 20 73 74 61 74 65 2c 20 61 ..# the state, a
5ee0: 6e 64 20 6c 69 6d 69 74 65 64 20 74 6f 20 73 75 nd limited to su
5ef0: 63 63 65 73 73 6f 72 73 20 77 69 74 68 69 6e 20 ccessors within
5f00: 74 68 65 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a the changeset...
5f10: 09 61 72 72 61 79 20 73 65 74 20 64 65 70 65 6e .array set depen
5f20: 64 65 6e 63 69 65 73 20 7b 7d 0a 0a 09 24 6d 79 dencies {}...$my
5f30: 74 79 70 65 6f 62 6a 20 69 6e 74 65 72 6e 61 6c typeobj internal
5f40: 73 75 63 63 65 73 73 6f 72 73 20 64 65 70 65 6e successors depen
5f50: 64 65 6e 63 69 65 73 20 24 74 68 65 69 74 65 6d dencies $theitem
5f60: 73 0a 09 69 66 20 7b 21 5b 61 72 72 61 79 20 73 s..if {![array s
5f70: 69 7a 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 ize dependencies
5f80: 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e ]} {.. return
5f90: 20 7b 7d 0a 09 7d 20 3b 20 23 20 4e 6f 74 68 69 {}..} ; # Nothi
5fa0: 6e 67 20 74 6f 20 62 72 65 61 6b 2e 0a 0a 09 6c ng to break....l
5fb0: 6f 67 20 77 72 69 74 65 20 35 20 63 73 65 74 73 og write 5 csets
5fc0: 20 2e 2e 2e 5b 24 73 65 6c 66 20 73 74 72 5d 2e ...[$self str].
5fd0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
5fe0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
5ff0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
6000: 2e 2e 2e 2e 2e 2e 0a 09 76 63 3a 3a 74 6f 6f 6c ........vc::tool
6010: 73 3a 3a 6d 65 6d 3a 3a 6d 61 72 6b 0a 0a 09 72 s::mem::mark...r
6020: 65 74 75 72 6e 20 5b 42 72 65 61 6b 65 72 43 6f eturn [BreakerCo
6030: 72 65 20 24 74 68 65 69 74 65 6d 73 20 64 65 70 re $theitems dep
6040: 65 6e 64 65 6e 63 69 65 73 20 62 72 65 61 6b 73 endencies breaks
6050: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f ]. }.. pro
6060: 63 20 42 72 65 61 6b 65 72 43 6f 72 65 20 7b 74 c BreakerCore {t
6070: 68 65 69 74 65 6d 73 20 64 76 20 62 76 7d 20 7b heitems dv bv} {
6080: 0a 09 23 20 42 72 65 61 6b 20 61 20 73 65 74 20 ..# Break a set
6090: 6f 66 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 74 of revisions int
60a0: 6f 20 66 72 61 67 6d 65 6e 74 73 20 77 68 69 63 o fragments whic
60b0: 68 20 68 61 76 65 20 6e 6f 0a 09 23 20 69 6e 74 h have no..# int
60c0: 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 ernal dependenci
60d0: 65 73 2e 0a 0a 09 23 20 57 65 20 70 65 72 66 6f es....# We perfo
60e0: 72 6d 20 61 6c 6c 20 6e 65 63 65 73 73 61 72 79 rm all necessary
60f0: 20 73 70 6c 69 74 73 20 69 6e 20 6f 6e 65 20 67 splits in one g
6100: 6f 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e o, instead of on
6110: 6c 79 0a 09 23 20 6f 6e 65 2e 20 54 68 65 20 70 ly..# one. The p
6120: 72 65 76 69 6f 75 73 20 61 6c 67 6f 72 69 74 68 revious algorith
6130: 6d 2c 20 61 64 61 70 74 65 64 20 66 72 6f 6d 20 m, adapted from
6140: 63 76 73 32 73 76 6e 2c 20 63 6f 6d 70 75 74 65 cvs2svn, compute
6150: 64 0a 09 23 20 61 20 6c 6f 74 20 6f 66 20 73 74 d..# a lot of st
6160: 61 74 65 20 77 68 69 63 68 20 77 61 73 20 74 68 ate which was th
6170: 72 6f 77 6e 20 61 77 61 79 20 61 6e 64 20 74 68 rown away and th
6180: 65 6e 20 63 6f 6d 70 75 74 65 64 20 61 67 61 69 en computed agai
6190: 6e 0a 09 23 20 66 6f 72 20 65 61 63 68 20 6f 66 n..# for each of
61a0: 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 2e 20 the fragments.
61b0: 49 74 20 73 68 6f 75 6c 64 20 62 65 20 65 61 73 It should be eas
61c0: 69 65 72 20 74 6f 20 75 70 64 61 74 65 20 61 6e ier to update an
61d0: 64 0a 09 23 20 72 65 75 73 65 20 74 68 61 74 20 d..# reuse that
61e0: 73 74 61 74 65 2e 0a 0a 09 75 70 76 61 72 20 31 state....upvar 1
61f0: 20 24 64 76 20 64 65 70 65 6e 64 65 6e 63 69 65 $dv dependencie
6200: 73 20 24 62 76 20 62 72 65 61 6b 73 0a 0a 09 23 s $bv breaks...#
6210: 20 57 65 20 68 61 76 65 20 69 6e 74 65 72 6e 61 We have interna
6220: 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74 l dependencies t
6230: 6f 20 62 72 65 61 6b 2e 20 57 65 20 6e 6f 77 20 o break. We now
6240: 69 74 65 72 61 74 65 20 6f 76 65 72 0a 09 23 20 iterate over..#
6250: 61 6c 6c 20 70 6f 73 69 74 69 6f 6e 73 20 69 6e all positions in
6260: 20 74 68 65 20 6c 69 73 74 20 28 77 68 69 63 68 the list (which
6270: 20 69 73 20 63 68 72 6f 6e 6f 6c 6f 67 69 63 61 is chronologica
6280: 6c 2c 20 61 74 20 6c 65 61 73 74 0a 09 23 20 61 l, at least..# a
6290: 73 20 66 61 72 20 61 73 20 74 68 65 20 74 69 6d s far as the tim
62a0: 65 73 74 61 6d 70 73 20 61 72 65 20 63 6f 72 72 estamps are corr
62b0: 65 63 74 20 61 6e 64 20 75 6e 69 71 75 65 29 20 ect and unique)
62c0: 61 6e 64 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 and..# determine
62d0: 20 74 68 65 20 62 65 73 74 20 70 6f 73 69 74 69 the best positi
62e0: 6f 6e 20 66 6f 72 20 74 68 65 20 62 72 65 61 6b on for the break
62f0: 2c 20 62 79 20 74 72 79 69 6e 67 20 74 6f 0a 09 , by trying to..
6300: 23 20 62 72 65 61 6b 20 61 73 20 6d 61 6e 79 20 # break as many
6310: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 61 73 20 dependencies as
6320: 70 6f 73 73 69 62 6c 65 20 69 6e 20 6f 6e 65 20 possible in one
6330: 67 6f 2e 20 57 68 65 6e 20 61 0a 09 23 20 62 72 go. When a..# br
6340: 65 61 6b 20 77 61 73 20 66 6f 75 6e 64 20 74 68 eak was found th
6350: 69 73 20 69 73 20 72 65 64 6f 6e 65 20 66 6f 72 is is redone for
6360: 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 20 63 the fragments c
6370: 6f 6d 69 6e 67 20 61 6e 64 0a 09 23 20 61 66 74 oming and..# aft
6380: 65 72 2c 20 61 66 74 65 72 20 75 70 64 69 6e 67 er, after upding
6390: 20 74 68 65 20 63 72 6f 73 73 69 6e 67 20 69 6e the crossing in
63a0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 09 23 20 44 formation....# D
63b0: 61 74 61 20 73 74 72 75 63 74 75 72 65 73 3a 0a ata structures:.
63c0: 09 23 20 4d 61 70 3a 20 20 50 4f 53 20 20 20 72 .# Map: POS r
63d0: 65 76 69 73 69 6f 6e 20 69 64 20 20 20 20 20 20 evision id
63e0: 2d 3e 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6c -> position in l
63f0: 69 73 74 2e 0a 09 23 20 20 20 20 20 20 20 43 52 ist...# CR
6400: 4f 53 53 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 OSS position in
6410: 6c 69 73 74 20 2d 3e 20 6e 75 6d 62 65 72 20 6f list -> number o
6420: 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 63 f dependencies c
6430: 72 6f 73 73 69 6e 67 20 69 74 0a 09 23 20 20 20 rossing it..#
6440: 20 20 20 20 44 45 50 43 20 20 64 65 70 65 6e 64 DEPC depend
6450: 65 6e 63 79 20 20 20 20 20 20 20 2d 3e 20 70 6f ency -> po
6460: 73 69 74 69 6f 6e 73 20 69 74 20 63 72 6f 73 73 sitions it cross
6470: 65 73 0a 09 23 20 4c 69 73 74 3a 20 52 41 4e 47 es..# List: RANG
6480: 45 20 4f 66 20 74 68 65 20 70 6f 73 69 74 69 6f E Of the positio
6490: 6e 73 20 69 74 73 65 6c 66 2e 0a 09 23 20 4d 61 ns itself...# Ma
64a0: 70 3a 20 20 44 45 4c 54 41 20 70 6f 73 69 74 69 p: DELTA positi
64b0: 6f 6e 20 69 6e 20 6c 69 73 74 20 2d 3e 20 74 69 on in list -> ti
64c0: 6d 65 20 64 65 6c 74 61 20 62 65 74 77 65 65 6e me delta between
64d0: 20 69 74 73 20 72 65 76 69 73 69 6f 6e 0a 09 23 its revision..#
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6500: 20 61 6e 64 20 74 68 65 20 6e 65 78 74 2c 20 69 and the next, i
6510: 66 20 61 6e 79 2e 0a 09 23 20 41 20 64 65 70 65 f any...# A depe
6520: 6e 64 65 6e 63 79 20 69 73 20 61 20 73 69 6e 67 ndency is a sing
6530: 6c 65 2d 65 6c 65 6d 65 6e 74 20 6d 61 70 20 70 le-element map p
6540: 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 0a arent -> child..
6550: 09 23 20 49 6e 69 74 69 61 6c 69 7a 65 42 72 65 .# InitializeBre
6560: 61 6b 53 74 61 74 65 20 69 6e 69 74 69 61 6c 69 akState initiali
6570: 7a 65 73 20 74 68 65 69 72 20 63 6f 6e 74 65 6e zes their conten
6580: 74 73 20 61 66 74 65 72 0a 09 23 20 75 70 76 61 ts after..# upva
6590: 72 27 69 6e 67 20 74 68 65 6d 20 66 72 6f 6d 20 r'ing them from
65a0: 74 68 69 73 20 73 63 6f 70 65 2e 20 49 74 20 75 this scope. It u
65b0: 73 65 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 ses the informat
65c0: 69 6f 6e 20 69 6e 0a 09 23 20 44 45 50 45 4e 44 ion in..# DEPEND
65d0: 45 4e 43 49 45 53 20 74 6f 20 64 6f 20 73 6f 2e ENCIES to do so.
65e0: 0a 0a 09 49 6e 69 74 69 61 6c 69 7a 65 42 72 65 ...InitializeBre
65f0: 61 6b 53 74 61 74 65 20 24 74 68 65 69 74 65 6d akState $theitem
6600: 73 0a 0a 09 73 65 74 20 66 72 61 67 6d 65 6e 74 s...set fragment
6610: 73 20 7b 7d 0a 09 73 65 74 20 6e 65 77 20 20 20 s {}..set new
6620: 20 20 20 20 5b 6c 69 73 74 20 24 72 61 6e 67 65 [list $range
6630: 5d 0a 0a 09 23 20 49 6e 73 74 65 61 64 20 6f 66 ]...# Instead of
6640: 20 6f 6e 65 20 6c 69 73 74 20 68 6f 6c 64 69 6e one list holdin
6650: 67 20 62 6f 74 68 20 70 72 6f 63 65 73 73 65 64 g both processed
6660: 20 61 6e 64 20 70 65 6e 64 69 6e 67 0a 09 23 20 and pending..#
6670: 66 72 61 67 6d 65 6e 74 73 20 77 65 20 75 73 65 fragments we use
6680: 20 74 77 6f 2c 20 6f 6e 65 20 66 6f 72 20 74 68 two, one for th
6690: 65 20 66 72 61 6d 65 6e 74 73 20 74 6f 20 70 72 e framents to pr
66a0: 6f 63 65 73 73 2c 20 6f 6e 65 0a 09 23 20 74 6f ocess, one..# to
66b0: 20 68 6f 6c 64 20 74 68 65 20 6e 65 77 20 66 72 hold the new fr
66c0: 61 67 6d 65 6e 74 73 2c 20 61 6e 64 20 74 68 65 agments, and the
66d0: 20 6c 61 74 74 65 72 20 69 73 20 63 6f 70 69 65 latter is copie
66e0: 64 20 74 6f 20 74 68 65 0a 09 23 20 66 6f 72 6d d to the..# form
66f0: 65 72 20 77 68 65 6e 20 74 68 65 79 20 72 75 6e er when they run
6700: 20 6f 75 74 2e 20 54 68 69 73 20 6b 65 65 70 73 out. This keeps
6710: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 70 65 6e the list of pen
6720: 64 69 6e 67 0a 09 23 20 66 72 61 67 6d 65 6e 74 ding..# fragment
6730: 73 20 73 68 6f 72 74 20 77 69 74 68 6f 75 74 20 s short without
6740: 73 61 63 72 69 66 69 63 69 6e 67 20 73 70 65 65 sacrificing spee
6750: 64 20 62 79 20 73 68 69 66 74 69 6e 67 20 73 74 d by shifting st
6760: 75 66 66 0a 09 23 20 64 6f 77 6e 2e 20 57 65 20 uff..# down. We
6770: 65 73 70 65 63 69 61 6c 6c 79 20 64 72 6f 70 20 especially drop
6780: 74 68 65 20 6d 65 6d 6f 72 79 20 6f 66 20 66 72 the memory of fr
6790: 61 67 6d 65 6e 74 73 20 62 72 6f 6b 65 6e 0a 09 agments broken..
67a0: 23 20 64 75 72 69 6e 67 20 70 72 6f 63 65 73 73 # during process
67b0: 69 6e 67 20 61 66 74 65 72 20 61 20 73 68 6f 72 ing after a shor
67c0: 74 20 74 69 6d 65 2c 20 69 6e 73 74 65 61 64 20 t time, instead
67d0: 6f 66 20 6c 65 74 74 69 6e 67 20 69 74 0a 09 23 of letting it..#
67e0: 20 63 6f 6e 73 75 6d 65 20 6d 65 6d 6f 72 79 2e consume memory.
67f0: 0a 0a 09 77 68 69 6c 65 20 7b 5b 6c 6c 65 6e 67 ...while {[lleng
6800: 74 68 20 24 6e 65 77 5d 7d 20 7b 0a 0a 09 20 20 th $new]} {...
6810: 20 20 73 65 74 20 70 65 6e 64 69 6e 67 20 24 6e set pending $n
6820: 65 77 0a 09 20 20 20 20 73 65 74 20 6e 65 77 20 ew.. set new
6830: 20 20 20 20 7b 7d 0a 09 20 20 20 20 73 65 74 20 {}.. set
6840: 61 74 20 20 20 20 20 20 30 0a 0a 09 20 20 20 20 at 0...
6850: 77 68 69 6c 65 20 7b 24 61 74 20 3c 20 5b 6c 6c while {$at < [ll
6860: 65 6e 67 74 68 20 24 70 65 6e 64 69 6e 67 5d 7d ength $pending]}
6870: 20 7b 0a 09 09 73 65 74 20 63 75 72 72 65 6e 74 {...set current
6880: 20 5b 6c 69 6e 64 65 78 20 24 70 65 6e 64 69 6e [lindex $pendin
6890: 67 20 24 61 74 5d 0a 0a 09 09 6c 6f 67 20 77 72 g $at]....log wr
68a0: 69 74 65 20 36 20 63 73 65 74 73 20 7b 2e 20 2e ite 6 csets {. .
68b0: 20 2e 2e 20 2e 2e 2e 20 2e 2e 2e 2e 2e 20 2e 2e .. ... ..... ..
68c0: 2e 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 2e ...... .........
68d0: 2e 2e 2e 2e 7d 0a 09 09 6c 6f 67 20 77 72 69 74 ....}...log writ
68e0: 65 20 36 20 63 73 65 74 73 20 7b 53 63 68 65 64 e 6 csets {Sched
68f0: 75 6c 65 64 20 20 20 5b 6a 6f 69 6e 20 5b 50 52 uled [join [PR
6900: 73 20 5b 6c 72 61 6e 67 65 20 24 70 65 6e 64 69 s [lrange $pendi
6910: 6e 67 20 24 61 74 20 65 6e 64 5d 5d 20 7b 20 7d ng $at end]] { }
6920: 5d 7d 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 36 ]}...log write 6
6930: 20 63 73 65 74 73 20 7b 43 6f 6e 73 69 64 65 72 csets {Consider
6940: 69 6e 67 20 5b 50 52 20 24 63 75 72 72 65 6e 74 ing [PR $current
6950: 5d 20 5c 5b 24 61 74 2f 5b 6c 6c 65 6e 67 74 68 ] \[$at/[llength
6960: 20 24 70 65 6e 64 69 6e 67 5d 5c 5d 7d 0a 0a 09 $pending]\]}...
6970: 09 73 65 74 20 62 65 73 74 20 5b 46 69 6e 64 42 .set best [FindB
6980: 65 73 74 42 72 65 61 6b 20 24 63 75 72 72 65 6e estBreak $curren
6990: 74 5d 0a 0a 09 09 69 66 20 7b 24 62 65 73 74 20 t]....if {$best
69a0: 3c 20 30 7d 20 7b 0a 09 09 20 20 20 20 23 20 54 < 0} {... # T
69b0: 68 65 20 69 6e 73 70 65 63 74 65 64 20 72 61 6e he inspected ran
69c0: 67 65 20 68 61 73 20 6e 6f 20 69 6e 74 65 72 6e ge has no intern
69d0: 61 6c 0a 09 09 20 20 20 20 23 20 64 65 70 65 6e al... # depen
69e0: 64 65 6e 63 69 65 73 2e 20 54 68 69 73 20 69 73 dencies. This is
69f0: 20 61 20 63 6f 6d 70 6c 65 74 65 20 66 72 61 67 a complete frag
6a00: 6d 65 6e 74 2e 0a 09 09 20 20 20 20 6c 61 70 70 ment.... lapp
6a10: 65 6e 64 20 66 72 61 67 6d 65 6e 74 73 20 24 63 end fragments $c
6a20: 75 72 72 65 6e 74 0a 0a 09 09 20 20 20 20 6c 6f urrent.... lo
6a30: 67 20 77 72 69 74 65 20 36 20 63 73 65 74 73 20 g write 6 csets
6a40: 22 4e 6f 20 62 72 65 61 6b 73 2c 20 66 69 6e 61 "No breaks, fina
6a50: 6c 22 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 l"...} else {...
6a60: 20 20 20 20 23 20 53 70 6c 69 74 20 74 68 65 20 # Split the
6a70: 72 61 6e 67 65 20 61 6e 64 20 73 63 68 65 64 75 range and schedu
6a80: 6c 65 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 le the resulting
6a90: 0a 09 09 20 20 20 20 23 20 66 72 61 67 6d 65 6e ... # fragmen
6aa0: 74 73 20 66 6f 72 20 66 75 72 74 68 65 72 20 69 ts for further i
6ab0: 6e 73 70 65 63 74 69 6f 6e 2e 20 52 65 6d 65 6d nspection. Remem
6ac0: 62 65 72 20 74 68 65 0a 09 09 20 20 20 20 23 20 ber the... #
6ad0: 6e 75 6d 62 65 72 20 6f 66 20 64 65 70 65 6e 64 number of depend
6ae0: 65 6e 63 69 65 73 20 63 75 74 20 62 65 66 6f 72 encies cut befor
6af0: 65 20 77 65 20 72 65 6d 6f 76 65 20 74 68 65 6d e we remove them
6b00: 0a 09 09 20 20 20 20 23 20 66 72 6f 6d 20 63 6f ... # from co
6b10: 6e 73 69 64 65 72 61 74 69 6f 6e 2c 20 66 6f 72 nsideration, for
6b20: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6c documentation l
6b30: 61 74 65 72 2e 0a 0a 09 09 20 20 20 20 73 65 74 ater..... set
6b40: 20 62 72 65 61 6b 73 28 24 62 65 73 74 29 20 24 breaks($best) $
6b50: 63 72 6f 73 73 28 24 62 65 73 74 29 0a 0a 09 09 cross($best)....
6b60: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 36 20 log write 6
6b70: 63 73 65 74 73 20 22 42 65 73 74 20 62 72 65 61 csets "Best brea
6b80: 6b 20 40 20 24 62 65 73 74 2c 20 63 75 74 74 69 k @ $best, cutti
6b90: 6e 67 20 5b 6e 73 70 20 24 63 72 6f 73 73 28 24 ng [nsp $cross($
6ba0: 62 65 73 74 29 20 64 65 70 65 6e 64 65 6e 63 79 best) dependency
6bb0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 22 0a dependencies]".
6bc0: 0a 09 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 54 ... # Note: T
6bd0: 68 65 20 76 61 6c 75 65 20 6f 66 20 62 65 73 74 he value of best
6be0: 20 69 73 20 61 6e 20 61 62 6f 6c 75 74 65 20 6c is an abolute l
6bf0: 6f 63 61 74 69 6f 6e 0a 09 09 20 20 20 20 23 20 ocation... #
6c00: 69 6e 20 6d 79 69 74 65 6d 73 2e 20 55 73 65 20 in myitems. Use
6c10: 74 68 65 20 73 74 61 72 74 20 6f 66 20 63 75 72 the start of cur
6c20: 72 65 6e 74 20 74 6f 20 6d 61 6b 65 20 69 74 0a rent to make it.
6c30: 09 09 20 20 20 20 23 20 61 6e 20 69 6e 64 65 78 .. # an index
6c40: 20 61 62 73 6f 6c 75 74 65 20 74 6f 20 63 75 72 absolute to cur
6c50: 72 65 6e 74 2e 0a 0a 09 09 20 20 20 20 73 65 74 rent..... set
6c60: 20 62 72 65 6c 20 5b 65 78 70 72 20 7b 24 62 65 brel [expr {$be
6c70: 73 74 20 2d 20 5b 6c 69 6e 64 65 78 20 24 63 75 st - [lindex $cu
6c80: 72 72 65 6e 74 20 30 5d 7d 5d 0a 09 09 20 20 20 rrent 0]}]...
6c90: 20 73 65 74 20 62 6e 65 78 74 20 24 62 72 65 6c set bnext $brel
6ca0: 20 3b 20 69 6e 63 72 20 62 6e 65 78 74 0a 09 09 ; incr bnext...
6cb0: 20 20 20 20 73 65 74 20 66 72 61 67 62 65 66 6f set fragbefo
6cc0: 72 65 20 5b 6c 72 61 6e 67 65 20 24 63 75 72 72 re [lrange $curr
6cd0: 65 6e 74 20 30 20 24 62 72 65 6c 5d 0a 09 09 20 ent 0 $brel]...
6ce0: 20 20 20 73 65 74 20 66 72 61 67 61 66 74 65 72 set fragafter
6cf0: 20 20 5b 6c 72 61 6e 67 65 20 24 63 75 72 72 65 [lrange $curre
6d00: 6e 74 20 24 62 6e 65 78 74 20 65 6e 64 5d 0a 0a nt $bnext end]..
6d10: 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
6d20: 36 20 63 73 65 74 73 20 22 4e 65 77 20 70 69 65 6 csets "New pie
6d30: 63 65 73 20 20 5b 50 52 20 24 66 72 61 67 62 65 ces [PR $fragbe
6d40: 66 6f 72 65 5d 20 5b 50 52 20 24 66 72 61 67 61 fore] [PR $fraga
6d50: 66 74 65 72 5d 22 0a 0a 09 09 20 20 20 20 69 6e fter]".... in
6d60: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
6d70: 5b 6c 6c 65 6e 67 74 68 20 24 66 72 61 67 62 65 [llength $fragbe
6d80: 66 6f 72 65 5d 7d 20 7b 46 6f 75 6e 64 20 7a 65 fore]} {Found ze
6d90: 72 6f 2d 6c 65 6e 67 74 68 20 66 72 61 67 6d 65 ro-length fragme
6da0: 6e 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e nt at the beginn
6db0: 69 6e 67 7d 0a 09 09 20 20 20 20 69 6e 74 65 67 ing}... integ
6dc0: 72 69 74 79 20 61 73 73 65 72 74 20 7b 5b 6c 6c rity assert {[ll
6dd0: 65 6e 67 74 68 20 24 66 72 61 67 61 66 74 65 72 ength $fragafter
6de0: 5d 7d 20 20 7b 46 6f 75 6e 64 20 7a 65 72 6f 2d ]} {Found zero-
6df0: 6c 65 6e 67 74 68 20 66 72 61 67 6d 65 6e 74 20 length fragment
6e00: 61 74 20 74 68 65 20 65 6e 64 7d 0a 0a 09 09 20 at the end}....
6e10: 20 20 20 6c 61 70 70 65 6e 64 20 6e 65 77 20 24 lappend new $
6e20: 66 72 61 67 62 65 66 6f 72 65 20 24 66 72 61 67 fragbefore $frag
6e30: 61 66 74 65 72 0a 09 09 20 20 20 20 43 75 74 41 after... CutA
6e40: 74 20 24 62 65 73 74 0a 09 09 7d 0a 0a 09 09 69 t $best...}....i
6e50: 6e 63 72 20 61 74 0a 09 20 20 20 20 7d 0a 09 7d ncr at.. }..}
6e60: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 36 20 63 ...log write 6 c
6e70: 73 65 74 73 20 22 2e 20 2e 20 2e 2e 20 2e 2e 2e sets ". . .. ...
6e80: 20 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 20 ..... ........
6e90: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 22 0a 0a ............."..
6ea0: 09 72 65 74 75 72 6e 20 24 66 72 61 67 6d 65 6e .return $fragmen
6eb0: 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 ts. }.. pr
6ec0: 6f 63 20 49 6e 69 74 69 61 6c 69 7a 65 42 72 65 oc InitializeBre
6ed0: 61 6b 53 74 61 74 65 20 7b 72 65 76 69 73 69 6f akState {revisio
6ee0: 6e 73 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 70 ns} {..upvar 1 p
6ef0: 6f 73 20 70 6f 73 20 63 72 6f 73 73 20 63 72 6f os pos cross cro
6f00: 73 73 20 72 61 6e 67 65 20 72 61 6e 67 65 20 64 ss range range d
6f10: 65 70 63 20 64 65 70 63 20 64 65 6c 74 61 20 64 epc depc delta d
6f20: 65 6c 74 61 20 5c 0a 09 20 20 20 20 64 65 70 65 elta \.. depe
6f30: 6e 64 65 6e 63 69 65 73 20 64 65 70 65 6e 64 65 ndencies depende
6f40: 6e 63 69 65 73 0a 0a 09 23 20 46 69 72 73 74 20 ncies...# First
6f50: 77 65 20 63 72 65 61 74 65 20 61 20 6d 61 70 20 we create a map
6f60: 6f 66 20 70 6f 73 69 74 69 6f 6e 73 20 74 6f 20 of positions to
6f70: 6d 61 6b 65 20 69 74 20 65 61 73 69 65 72 20 74 make it easier t
6f80: 6f 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 20 77 o..# determine w
6f90: 68 65 74 68 65 72 20 61 20 64 65 70 65 6e 64 65 hether a depende
6fa0: 6e 63 79 20 63 72 6f 73 73 65 73 20 61 20 70 61 ncy crosses a pa
6fb0: 72 74 69 63 75 6c 61 72 20 69 6e 64 65 78 2e 0a rticular index..
6fc0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 ..log write 14 c
6fd0: 73 65 74 73 20 7b 49 42 53 3a 20 23 72 65 76 20 sets {IBS: #rev
6fe0: 5b 6c 6c 65 6e 67 74 68 20 24 72 65 76 69 73 69 [llength $revisi
6ff0: 6f 6e 73 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 ons]}..log write
7000: 20 31 34 20 63 73 65 74 73 20 7b 49 42 53 3a 20 14 csets {IBS:
7010: 70 6f 73 20 6d 61 70 2c 20 63 72 6f 73 73 20 63 pos map, cross c
7020: 6f 75 6e 74 65 72 7d 0a 0a 09 61 72 72 61 79 20 ounter}...array
7030: 73 65 74 20 70 6f 73 20 20 20 7b 7d 0a 09 61 72 set pos {}..ar
7040: 72 61 79 20 73 65 74 20 63 72 6f 73 73 20 7b 7d ray set cross {}
7050: 0a 09 61 72 72 61 79 20 73 65 74 20 64 65 70 63 ..array set depc
7060: 20 20 7b 7d 0a 09 73 65 74 20 72 61 6e 67 65 20 {}..set range
7070: 20 20 20 20 20 20 7b 7d 0a 09 73 65 74 20 6e 20 {}..set n
7080: 30 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 0..foreach rev $
7090: 72 65 76 69 73 69 6f 6e 73 20 7b 0a 09 20 20 20 revisions {..
70a0: 20 6c 61 70 70 65 6e 64 20 72 61 6e 67 65 20 24 lappend range $
70b0: 6e 0a 09 20 20 20 20 73 65 74 20 70 6f 73 28 24 n.. set pos($
70c0: 72 65 76 29 20 24 6e 0a 09 20 20 20 20 73 65 74 rev) $n.. set
70d0: 20 63 72 6f 73 73 28 24 6e 29 20 30 0a 09 20 20 cross($n) 0..
70e0: 20 20 69 6e 63 72 20 6e 0a 09 7d 0a 0a 09 6c 6f incr n..}...lo
70f0: 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73 g write 14 csets
7100: 20 7b 49 42 53 3a 20 70 6f 73 2f 5b 61 72 72 61 {IBS: pos/[arra
7110: 79 20 73 69 7a 65 20 70 6f 73 5d 2c 20 63 72 6f y size pos], cro
7120: 73 73 2f 5b 61 72 72 61 79 20 73 69 7a 65 20 63 ss/[array size c
7130: 72 6f 73 73 5d 7d 0a 0a 09 23 20 53 65 63 6f 6e ross]}...# Secon
7140: 64 6c 79 20 77 65 20 63 6f 75 6e 74 20 74 68 65 dly we count the
7150: 20 63 72 6f 73 73 69 6e 67 73 20 70 65 72 20 70 crossings per p
7160: 6f 73 69 74 69 6f 6e 2c 20 62 79 20 69 74 65 72 osition, by iter
7170: 61 74 69 6e 67 0a 09 23 20 6f 76 65 72 20 74 68 ating..# over th
7180: 65 20 72 65 63 6f 72 64 65 64 20 69 6e 74 65 72 e recorded inter
7190: 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 nal dependencies
71a0: 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 49 66 20 74 ....# Note: If t
71b0: 68 65 20 74 69 6d 65 73 74 61 6d 70 73 20 61 72 he timestamps ar
71c0: 65 20 62 61 64 6c 79 20 6f 75 74 20 6f 66 20 6f e badly out of o
71d0: 72 64 65 72 20 69 74 20 69 73 0a 09 23 20 20 20 rder it is..#
71e0: 20 20 20 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 possible to
71f0: 68 61 76 65 20 61 20 62 61 63 6b 77 61 72 64 20 have a backward
7200: 73 75 63 63 65 73 73 6f 72 20 64 65 70 65 6e 64 successor depend
7210: 65 6e 63 79 2c 0a 09 23 20 20 20 20 20 20 20 69 ency,..# i
7220: 2e 65 2e 20 77 69 74 68 20 73 74 61 72 74 20 3e .e. with start >
7230: 20 65 6e 64 2e 20 57 65 20 6d 61 79 20 68 61 76 end. We may hav
7240: 65 20 74 6f 20 73 77 61 70 20 74 68 65 20 69 6e e to swap the in
7250: 64 69 63 65 73 0a 09 23 20 20 20 20 20 20 20 74 dices..# t
7260: 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 o ensure that th
7270: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6c 6f 6f 70 e following loop
7280: 20 72 75 6e 73 20 63 6f 72 72 65 63 74 6c 79 2e runs correctly.
7290: 0a 09 23 0a 09 23 20 4e 6f 74 65 20 32 3a 20 73 ..#..# Note 2: s
72a0: 74 61 72 74 20 3d 3d 20 65 6e 64 20 69 73 20 6e tart == end is n
72b0: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 49 74 20 ot possible. It
72c0: 69 6e 64 69 63 61 74 65 73 20 61 0a 09 23 20 20 indicates a..#
72d0: 20 20 20 20 20 20 20 73 65 6c 66 2d 64 65 70 65 self-depe
72e0: 6e 64 65 6e 63 79 20 64 75 65 20 74 6f 20 74 68 ndency due to th
72f0: 65 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 e uniqueness of
7300: 70 6f 73 69 74 69 6f 6e 73 2c 0a 09 23 20 20 20 positions,..#
7310: 20 20 20 20 20 20 61 6e 64 20 74 68 61 74 20 69 and that i
7320: 73 20 73 6f 6d 65 74 68 69 6e 67 20 77 65 20 68 s something we h
7330: 61 76 65 20 72 75 6c 65 64 20 6f 75 74 20 61 6c ave ruled out al
7340: 72 65 61 64 79 2c 20 73 65 65 0a 09 23 20 20 20 ready, see..#
7350: 20 20 20 20 20 20 27 72 65 76 20 69 6e 74 65 72 'rev inter
7360: 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 27 2e 0a nalsuccessors'..
7370: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 ..log write 14 c
7380: 73 65 74 73 20 7b 49 42 53 3a 20 63 72 6f 73 73 sets {IBS: cross
7390: 20 63 6f 75 6e 74 65 72 20 66 69 6c 6c 69 6e 67 counter filling
73a0: 2c 20 70 6f 73 2f 63 72 6f 73 73 20 6d 61 70 7d , pos/cross map}
73b0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 64 20 ...foreach {rid
73c0: 63 68 69 6c 64 72 65 6e 7d 20 5b 61 72 72 61 79 children} [array
73d0: 20 67 65 74 20 64 65 70 65 6e 64 65 6e 63 69 65 get dependencie
73e0: 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 s] {.. foreac
73f0: 68 20 63 68 69 6c 64 20 24 63 68 69 6c 64 72 65 h child $childre
7400: 6e 20 7b 0a 09 09 73 65 74 20 64 6b 65 79 20 20 n {...set dkey
7410: 20 20 5b 6c 69 73 74 20 24 72 69 64 20 24 63 68 [list $rid $ch
7420: 69 6c 64 5d 0a 09 09 73 65 74 20 73 74 61 72 74 ild]...set start
7430: 20 20 20 24 70 6f 73 28 24 72 69 64 29 0a 09 09 $pos($rid)...
7440: 73 65 74 20 65 6e 64 20 20 20 20 20 24 70 6f 73 set end $pos
7450: 28 24 63 68 69 6c 64 29 0a 0a 09 09 69 66 20 7b ($child)....if {
7460: 24 73 74 61 72 74 20 3e 20 24 65 6e 64 7d 20 7b $start > $end} {
7470: 0a 09 09 20 20 20 20 73 65 74 20 63 72 6f 73 73 ... set cross
7480: 65 73 20 5b 6c 69 73 74 20 24 65 6e 64 20 5b 65 es [list $end [e
7490: 78 70 72 20 7b 24 73 74 61 72 74 2d 31 7d 5d 5d xpr {$start-1}]]
74a0: 0a 09 09 20 20 20 20 77 68 69 6c 65 20 7b 24 65 ... while {$e
74b0: 6e 64 20 3c 20 24 73 74 61 72 74 7d 20 7b 0a 09 nd < $start} {..
74c0: 09 09 69 6e 63 72 20 63 72 6f 73 73 28 24 65 6e ..incr cross($en
74d0: 64 29 0a 09 09 09 69 6e 63 72 20 65 6e 64 0a 09 d)....incr end..
74e0: 09 20 20 20 20 7d 0a 09 09 7d 20 65 6c 73 65 20 . }...} else
74f0: 7b 0a 09 09 20 20 20 20 73 65 74 20 63 72 6f 73 {... set cros
7500: 73 65 73 20 5b 6c 69 73 74 20 24 73 74 61 72 74 ses [list $start
7510: 20 5b 65 78 70 72 20 7b 24 65 6e 64 2d 31 7d 5d [expr {$end-1}]
7520: 5d 0a 09 09 20 20 20 20 77 68 69 6c 65 20 7b 24 ]... while {$
7530: 73 74 61 72 74 20 3c 20 24 65 6e 64 7d 20 7b 0a start < $end} {.
7540: 09 09 09 69 6e 63 72 20 63 72 6f 73 73 28 24 73 ...incr cross($s
7550: 74 61 72 74 29 0a 09 09 09 69 6e 63 72 20 73 74 tart)....incr st
7560: 61 72 74 0a 09 09 20 20 20 20 7d 0a 09 09 7d 0a art... }...}.
7570: 09 09 73 65 74 20 64 65 70 63 28 24 64 6b 65 79 ..set depc($dkey
7580: 29 20 24 63 72 6f 73 73 65 73 0a 09 20 20 20 20 ) $crosses..
7590: 7d 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 }..}...log write
75a0: 20 31 34 20 63 73 65 74 73 20 7b 49 42 53 3a 20 14 csets {IBS:
75b0: 70 6f 73 2f 5b 61 72 72 61 79 20 73 69 7a 65 20 pos/[array size
75c0: 70 6f 73 5d 2c 20 63 72 6f 73 73 2f 5b 61 72 72 pos], cross/[arr
75d0: 61 79 20 73 69 7a 65 20 63 72 6f 73 73 5d 2c 20 ay size cross],
75e0: 64 65 70 63 2f 5b 61 72 72 61 79 20 73 69 7a 65 depc/[array size
75f0: 20 64 65 70 63 5d 20 28 66 6f 72 20 5b 6c 6c 65 depc] (for [lle
7600: 6e 67 74 68 20 24 72 65 76 69 73 69 6f 6e 73 5d ngth $revisions]
7610: 29 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 )}..log write 14
7620: 20 63 73 65 74 73 20 7b 49 42 53 3a 20 74 69 6d csets {IBS: tim
7630: 65 73 74 61 6d 70 73 2c 20 64 65 6c 74 61 73 7d estamps, deltas}
7640: 0a 0a 09 49 6e 69 74 69 61 6c 69 7a 65 44 65 6c ...InitializeDel
7650: 74 61 73 20 24 72 65 76 69 73 69 6f 6e 73 0a 0a tas $revisions..
7660: 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 .log write 14 cs
7670: 65 74 73 20 7b 49 42 53 3a 20 64 65 6c 74 61 20 ets {IBS: delta
7680: 5b 61 72 72 61 79 20 73 69 7a 65 20 64 65 6c 74 [array size delt
7690: 61 5d 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 a]}..return.
76a0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 49 6e 69 74 }.. proc Init
76b0: 69 61 6c 69 7a 65 44 65 6c 74 61 73 20 7b 72 65 ializeDeltas {re
76c0: 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 61 visions} {..upva
76d0: 72 20 31 20 64 65 6c 74 61 20 64 65 6c 74 61 0a r 1 delta delta.
76e0: 0a 09 23 20 50 75 6c 6c 20 74 68 65 20 74 69 6d ..# Pull the tim
76f0: 65 73 74 61 6d 70 73 20 66 6f 72 20 61 6c 6c 20 estamps for all
7700: 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 74 68 65 revisions in the
7710: 20 63 68 61 6e 67 65 73 65 74 73 20 61 6e 64 0a changesets and.
7720: 09 23 20 63 6f 6d 70 75 74 65 20 74 68 65 69 72 .# compute their
7730: 20 64 65 6c 74 61 73 20 66 6f 72 20 75 73 65 20 deltas for use
7740: 62 79 20 74 68 65 20 62 72 65 61 6b 20 66 69 6e by the break fin
7750: 64 65 72 2e 0a 0a 09 61 72 72 61 79 20 73 65 74 der....array set
7760: 20 64 65 6c 74 61 20 7b 7d 0a 09 61 72 72 61 79 delta {}..array
7770: 20 73 65 74 20 73 74 61 6d 70 20 7b 7d 0a 0a 09 set stamp {}...
7780: 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f set theset ('[jo
7790: 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 in $revisions {'
77a0: 2c 27 7d 5d 27 29 0a 09 73 74 61 74 65 20 66 6f ,'}]')..state fo
77b0: 72 65 61 63 68 72 6f 77 20 5b 73 75 62 73 74 20 reachrow [subst
77c0: 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 -nocommands -nob
77d0: 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 ackslashes {..
77e0: 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 20 41 SELECT R.rid A
77f0: 53 20 78 72 69 64 2c 20 52 2e 64 61 74 65 20 41 S xrid, R.date A
7800: 53 20 74 69 6d 65 0a 09 20 20 20 20 46 52 4f 4d S time.. FROM
7810: 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 revision R..
7820: 20 57 48 45 52 45 20 52 2e 72 69 64 20 49 4e 20 WHERE R.rid IN
7830: 24 74 68 65 73 65 74 0a 09 7d 5d 20 7b 0a 09 20 $theset..}] {..
7840: 20 20 20 73 65 74 20 73 74 61 6d 70 28 24 78 72 set stamp($xr
7850: 69 64 29 20 24 74 69 6d 65 0a 09 7d 0a 0a 09 6c id) $time..}...l
7860: 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 og write 14 cset
7870: 73 20 7b 49 42 53 3a 20 73 74 61 6d 70 20 5b 61 s {IBS: stamp [a
7880: 72 72 61 79 20 73 69 7a 65 20 73 74 61 6d 70 5d rray size stamp]
7890: 7d 0a 0a 09 73 65 74 20 6e 20 30 0a 09 66 6f 72 }...set n 0..for
78a0: 65 61 63 68 20 72 69 64 20 5b 6c 72 61 6e 67 65 each rid [lrange
78b0: 20 24 72 65 76 69 73 69 6f 6e 73 20 30 20 65 6e $revisions 0 en
78c0: 64 2d 31 5d 20 72 6e 65 78 74 20 5b 6c 72 61 6e d-1] rnext [lran
78d0: 67 65 20 24 72 65 76 69 73 69 6f 6e 73 20 31 20 ge $revisions 1
78e0: 65 6e 64 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 end] {.. set
78f0: 64 65 6c 74 61 28 24 6e 29 20 5b 65 78 70 72 20 delta($n) [expr
7900: 7b 24 73 74 61 6d 70 28 24 72 6e 65 78 74 29 20 {$stamp($rnext)
7910: 2d 20 24 73 74 61 6d 70 28 24 72 69 64 29 7d 5d - $stamp($rid)}]
7920: 0a 09 20 20 20 20 69 6e 63 72 20 6e 0a 09 7d 0a .. incr n..}.
7930: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
7940: 20 20 20 70 72 6f 63 20 46 69 6e 64 42 65 73 74 proc FindBest
7950: 42 72 65 61 6b 20 7b 72 61 6e 67 65 7d 20 7b 0a Break {range} {.
7960: 09 75 70 76 61 72 20 31 20 63 72 6f 73 73 20 63 .upvar 1 cross c
7970: 72 6f 73 73 20 64 65 6c 74 61 20 64 65 6c 74 61 ross delta delta
7980: 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 74 ...# Determine t
7990: 68 65 20 62 65 73 74 20 62 72 65 61 6b 20 6c 6f he best break lo
79a0: 63 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 67 69 cation in the gi
79b0: 76 65 6e 20 72 61 6e 67 65 20 6f 66 0a 09 23 20 ven range of..#
79c0: 70 6f 73 69 74 69 6f 6e 73 2e 20 46 69 72 73 74 positions. First
79d0: 20 77 65 20 6c 6f 6f 6b 20 66 6f 72 20 74 68 65 we look for the
79e0: 20 6c 6f 63 61 74 69 6f 6e 73 20 77 69 74 68 20 locations with
79f0: 74 68 65 20 6d 61 78 69 6d 61 6c 0a 09 23 20 6e the maximal..# n
7a00: 75 6d 62 65 72 20 6f 66 20 63 72 6f 73 73 69 6e umber of crossin
7a10: 67 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 gs. If there are
7a20: 20 73 65 76 65 72 61 6c 20 77 65 20 6c 6f 6f 6b several we look
7a30: 20 66 6f 72 20 74 68 65 0a 09 23 20 73 68 6f 72 for the..# shor
7a40: 74 65 73 74 20 74 69 6d 65 20 69 6e 74 65 72 76 test time interv
7a50: 61 6c 20 61 6d 6f 6e 67 20 74 68 65 6d 2e 20 49 al among them. I
7a60: 66 20 77 65 20 73 74 69 6c 6c 20 68 61 76 65 20 f we still have
7a70: 6d 75 6c 74 69 70 6c 65 0a 09 23 20 70 6f 73 73 multiple..# poss
7a80: 69 62 69 6c 69 74 69 65 73 20 61 66 74 65 72 20 ibilities after
7a90: 74 68 61 74 20 77 65 20 73 65 6c 65 63 74 20 74 that we select t
7aa0: 68 65 20 65 61 72 6c 69 65 73 74 20 6c 6f 63 61 he earliest loca
7ab0: 74 69 6f 6e 0a 09 23 20 61 6d 6f 6e 67 20 74 68 tion..# among th
7ac0: 65 73 65 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 49 ese....# Note: I
7ad0: 66 20 74 68 65 20 6d 61 78 69 6d 61 6c 20 6e 75 f the maximal nu
7ae0: 6d 62 65 72 20 6f 66 20 63 72 6f 73 73 69 6e 67 mber of crossing
7af0: 73 20 69 73 20 30 20 74 68 65 6e 20 74 68 65 20 s is 0 then the
7b00: 72 61 6e 67 65 0a 09 23 20 20 20 20 20 20 20 68 range..# h
7b10: 61 73 20 6e 6f 20 69 6e 74 65 72 6e 61 6c 20 64 as no internal d
7b20: 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 61 6e 64 ependencies, and
7b30: 20 6e 6f 20 62 72 65 61 6b 20 6c 6f 63 61 74 69 no break locati
7b40: 6f 6e 20 61 74 0a 09 23 20 20 20 20 20 20 20 61 on at..# a
7b50: 6c 6c 2e 20 54 68 69 73 20 70 6f 73 73 69 62 69 ll. This possibi
7b60: 6c 69 74 79 20 69 73 20 73 69 67 6e 61 6c 65 64 lity is signaled
7b70: 20 76 69 61 20 72 65 73 75 6c 74 20 2d 31 2e 0a via result -1..
7b80: 0a 09 23 20 4e 6f 74 65 3a 20 41 20 72 61 6e 67 ..# Note: A rang
7b90: 65 20 6f 66 20 6c 65 6e 67 74 68 20 31 20 6f 72 e of length 1 or
7ba0: 20 6c 65 73 73 20 63 61 6e 6e 6f 74 20 68 61 76 less cannot hav
7bb0: 65 20 69 6e 74 65 72 6e 61 6c 0a 09 23 20 20 20 e internal..#
7bc0: 20 20 20 20 64 65 70 65 6e 64 65 6e 63 69 65 73 dependencies
7bd0: 2c 20 61 73 20 74 68 61 74 20 6e 65 65 64 73 20 , as that needs
7be0: 61 74 20 6c 65 61 73 74 20 74 77 6f 20 72 65 76 at least two rev
7bf0: 69 73 69 6f 6e 73 20 69 6e 0a 09 23 20 20 20 20 isions in..#
7c00: 20 20 20 74 68 65 20 72 61 6e 67 65 2e 0a 0a 09 the range....
7c10: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 72 61 if {[llength $ra
7c20: 6e 67 65 5d 20 3c 20 32 7d 20 7b 20 72 65 74 75 nge] < 2} { retu
7c30: 72 6e 20 2d 31 20 7d 0a 0a 09 73 65 74 20 6d 61 rn -1 }...set ma
7c40: 78 20 2d 31 0a 09 73 65 74 20 62 65 73 74 20 7b x -1..set best {
7c50: 7d 0a 0a 09 66 6f 72 65 61 63 68 20 6c 6f 63 61 }...foreach loca
7c60: 74 69 6f 6e 20 24 72 61 6e 67 65 20 7b 0a 09 20 tion $range {..
7c70: 20 20 20 73 65 74 20 63 72 6f 73 73 69 6e 67 73 set crossings
7c80: 20 24 63 72 6f 73 73 28 24 6c 6f 63 61 74 69 6f $cross($locatio
7c90: 6e 29 0a 09 20 20 20 20 69 66 20 7b 24 63 72 6f n).. if {$cro
7ca0: 73 73 69 6e 67 73 20 3e 20 24 6d 61 78 7d 20 7b ssings > $max} {
7cb0: 0a 09 09 73 65 74 20 6d 61 78 20 20 24 63 72 6f ...set max $cro
7cc0: 73 73 69 6e 67 73 0a 09 09 73 65 74 20 62 65 73 ssings...set bes
7cd0: 74 20 5b 6c 69 73 74 20 24 6c 6f 63 61 74 69 6f t [list $locatio
7ce0: 6e 5d 0a 09 09 63 6f 6e 74 69 6e 75 65 0a 09 20 n]...continue..
7cf0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 72 } elseif {$cr
7d00: 6f 73 73 69 6e 67 73 20 3d 3d 20 24 6d 61 78 7d ossings == $max}
7d10: 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 62 65 73 {...lappend bes
7d20: 74 20 24 6c 6f 63 61 74 69 6f 6e 0a 09 20 20 20 t $location..
7d30: 20 7d 0a 09 7d 0a 0a 09 69 66 20 7b 24 6d 61 78 }..}...if {$max
7d40: 20 3d 3d 20 30 7d 20 20 20 20 20 20 20 20 20 20 == 0}
7d50: 20 20 7b 20 72 65 74 75 72 6e 20 2d 31 20 7d 0a { return -1 }.
7d60: 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 62 .if {[llength $b
7d70: 65 73 74 5d 20 3d 3d 20 31 7d 20 7b 20 72 65 74 est] == 1} { ret
7d80: 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 62 65 73 urn [lindex $bes
7d90: 74 20 30 5d 20 7d 0a 0a 09 73 65 74 20 6c 6f 63 t 0] }...set loc
7da0: 61 74 69 6f 6e 73 20 24 62 65 73 74 0a 09 73 65 ations $best..se
7db0: 74 20 62 65 73 74 20 7b 7d 0a 09 73 65 74 20 6d t best {}..set m
7dc0: 69 6e 20 2d 31 0a 0a 09 66 6f 72 65 61 63 68 20 in -1...foreach
7dd0: 6c 6f 63 61 74 69 6f 6e 20 24 6c 6f 63 61 74 69 location $locati
7de0: 6f 6e 73 20 7b 0a 09 20 20 20 20 73 65 74 20 69 ons {.. set i
7df0: 6e 74 65 72 76 61 6c 20 24 64 65 6c 74 61 28 24 nterval $delta($
7e00: 6c 6f 63 61 74 69 6f 6e 29 0a 09 20 20 20 20 69 location).. i
7e10: 66 20 7b 28 24 6d 69 6e 20 3c 20 30 29 20 7c 7c f {($min < 0) ||
7e20: 20 28 24 69 6e 74 65 72 76 61 6c 20 3c 20 24 6d ($interval < $m
7e30: 69 6e 29 7d 20 7b 0a 09 09 73 65 74 20 6d 69 6e in)} {...set min
7e40: 20 20 24 69 6e 74 65 72 76 61 6c 0a 09 09 73 65 $interval...se
7e50: 74 20 62 65 73 74 20 5b 6c 69 73 74 20 24 6c 6f t best [list $lo
7e60: 63 61 74 69 6f 6e 5d 0a 09 20 20 20 20 7d 20 65 cation].. } e
7e70: 6c 73 65 69 66 20 7b 24 69 6e 74 65 72 76 61 6c lseif {$interval
7e80: 20 3d 3d 20 24 6d 69 6e 7d 20 7b 0a 09 09 6c 61 == $min} {...la
7e90: 70 70 65 6e 64 20 62 65 73 74 20 24 6c 6f 63 61 ppend best $loca
7ea0: 74 69 6f 6e 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a tion.. }..}..
7eb0: 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 62 .if {[llength $b
7ec0: 65 73 74 5d 20 3d 3d 20 31 7d 20 7b 20 72 65 74 est] == 1} { ret
7ed0: 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 62 65 73 urn [lindex $bes
7ee0: 74 20 30 5d 20 7d 0a 0a 09 72 65 74 75 72 6e 20 t 0] }...return
7ef0: 5b 6c 69 6e 64 65 78 20 5b 6c 73 6f 72 74 20 2d [lindex [lsort -
7f00: 69 6e 74 65 67 65 72 20 2d 69 6e 63 72 65 61 73 integer -increas
7f10: 69 6e 67 20 24 62 65 73 74 5d 20 30 5d 0a 20 20 ing $best] 0].
7f20: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 43 75 }.. proc Cu
7f30: 74 41 74 20 7b 6c 6f 63 61 74 69 6f 6e 7d 20 7b tAt {location} {
7f40: 0a 09 75 70 76 61 72 20 31 20 63 72 6f 73 73 20 ..upvar 1 cross
7f50: 63 72 6f 73 73 20 64 65 70 63 20 64 65 70 63 0a cross depc depc.
7f60: 0a 09 23 20 49 74 20 77 61 73 20 64 65 63 69 64 ..# It was decid
7f70: 65 64 20 74 6f 20 73 70 6c 69 74 20 74 68 65 20 ed to split the
7f80: 63 68 61 6e 67 65 73 65 74 20 61 74 20 74 68 65 changeset at the
7f90: 20 67 69 76 65 6e 0a 09 23 20 6c 6f 63 61 74 69 given..# locati
7fa0: 6f 6e 2e 20 54 68 69 73 20 63 75 74 73 20 61 20 on. This cuts a
7fb0: 6e 75 6d 62 65 72 20 6f 66 20 64 65 70 65 6e 64 number of depend
7fc0: 65 6e 63 69 65 73 2e 20 48 65 72 65 20 77 65 20 encies. Here we
7fd0: 75 70 64 61 74 65 0a 09 23 20 74 68 65 20 63 72 update..# the cr
7fe0: 6f 73 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 oss information
7ff0: 73 6f 20 74 68 61 74 20 74 68 65 20 62 72 65 61 so that the brea
8000: 6b 20 66 69 6e 64 65 72 20 68 61 73 20 61 63 63 k finder has acc
8010: 75 72 61 74 65 0a 09 23 20 64 61 74 61 20 77 68 urate..# data wh
8020: 65 6e 20 77 65 20 6c 6f 6f 6b 20 61 74 20 74 68 en we look at th
8030: 65 20 67 65 6e 65 72 61 74 65 64 20 66 72 61 67 e generated frag
8040: 6d 65 6e 74 73 2e 0a 0a 09 73 65 74 20 73 69 78 ments....set six
8050: 20 5b 6c 6f 67 20 76 69 73 69 62 6c 65 3f 20 36 [log visible? 6
8060: 5d 0a 0a 09 23 20 4e 6f 74 65 3a 20 54 68 65 20 ]...# Note: The
8070: 6c 6f 6f 70 20 62 65 6c 6f 77 20 63 6f 75 6c 64 loop below could
8080: 20 62 65 20 6d 61 64 65 20 66 61 73 74 65 72 20 be made faster
8090: 62 79 20 6b 65 65 70 69 6e 67 20 61 20 6d 61 70 by keeping a map
80a0: 0a 09 23 20 66 72 6f 6d 20 70 6f 73 69 74 69 6f ..# from positio
80b0: 6e 73 20 74 6f 20 74 68 65 20 64 65 70 65 6e 64 ns to the depend
80c0: 65 6e 63 69 65 73 20 63 72 6f 73 73 69 6e 67 2e encies crossing.
80d0: 20 41 6e 20 65 78 74 65 6e 73 69 6f 6e 20 6f 66 An extension of
80e0: 0a 09 23 20 43 52 4f 53 53 2c 20 69 2e 65 2e 20 ..# CROSS, i.e.
80f0: 6c 69 73 74 20 6f 66 20 64 65 70 65 6e 64 65 6e list of dependen
8100: 63 69 65 73 2c 20 63 6f 75 6e 74 65 72 20 69 73 cies, counter is
8110: 20 69 6d 70 6c 69 65 64 2e 20 54 61 6b 65 73 0a implied. Takes.
8120: 09 23 20 61 20 6c 6f 74 20 6d 6f 72 65 20 6d 65 .# a lot more me
8130: 6d 6f 72 79 20 68 6f 77 65 76 65 72 2c 20 61 6e mory however, an
8140: 64 20 74 61 6b 65 73 20 74 69 6d 65 20 74 6f 20 d takes time to
8150: 75 70 64 61 74 65 20 68 65 72 65 0a 09 23 20 28 update here..# (
8160: 54 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 69 The inner loop i
8170: 73 20 6e 6f 74 20 69 6e 63 72 20 2d 31 2c 20 62 s not incr -1, b
8180: 75 74 20 6c 64 65 6c 65 74 65 29 2e 0a 0a 09 66 ut ldelete)....f
8190: 6f 72 65 61 63 68 20 64 65 70 20 5b 61 72 72 61 oreach dep [arra
81a0: 79 20 6e 61 6d 65 73 20 64 65 70 63 5d 20 7b 0a y names depc] {.
81b0: 09 20 20 20 20 73 65 74 20 72 61 6e 67 65 20 24 . set range $
81c0: 64 65 70 63 28 24 64 65 70 29 0a 09 20 20 20 20 depc($dep)..
81d0: 23 20 43 68 65 63 6b 20 61 6c 6c 20 64 65 70 65 # Check all depe
81e0: 6e 64 65 6e 63 69 65 73 20 73 74 69 6c 6c 20 6b ndencies still k
81f0: 6e 6f 77 6e 2c 20 74 61 6b 65 20 74 68 65 69 72 nown, take their
8200: 20 72 61 6e 67 65 20 61 6e 64 0a 09 20 20 20 20 range and..
8210: 23 20 73 65 65 20 69 66 20 74 68 65 20 62 72 65 # see if the bre
8220: 61 6b 20 6c 6f 63 61 74 69 6f 6e 20 66 61 6c 6c ak location fall
8230: 73 20 77 69 74 68 69 6e 2e 0a 0a 09 20 20 20 20 s within....
8240: 42 6f 72 64 65 72 20 24 72 61 6e 67 65 20 73 20 Border $range s
8250: 65 0a 09 20 20 20 20 69 66 20 7b 24 6c 6f 63 61 e.. if {$loca
8260: 74 69 6f 6e 20 3c 20 24 73 7d 20 63 6f 6e 74 69 tion < $s} conti
8270: 6e 75 65 20 3b 20 23 20 62 72 65 61 6b 20 62 65 nue ; # break be
8280: 66 6f 72 65 20 72 61 6e 67 65 2c 20 69 67 6e 6f fore range, igno
8290: 72 65 0a 09 20 20 20 20 69 66 20 7b 24 6c 6f 63 re.. if {$loc
82a0: 61 74 69 6f 6e 20 3e 20 24 65 7d 20 63 6f 6e 74 ation > $e} cont
82b0: 69 6e 75 65 20 3b 20 23 20 62 72 65 61 6b 20 61 inue ; # break a
82c0: 66 74 65 72 20 72 61 6e 67 65 2c 20 69 67 6e 6f fter range, igno
82d0: 72 65 2e 0a 0a 09 20 20 20 20 23 20 54 68 69 73 re.... # This
82e0: 20 64 65 70 65 6e 64 65 6e 63 79 20 63 72 6f 73 dependency cros
82f0: 73 65 73 20 74 68 65 20 62 72 65 61 6b 20 6c 6f ses the break lo
8300: 63 61 74 69 6f 6e 2e 20 57 65 20 72 65 6d 6f 76 cation. We remov
8310: 65 20 69 74 0a 09 20 20 20 20 23 20 66 72 6f 6d e it.. # from
8320: 20 74 68 65 20 63 72 6f 73 73 69 6e 67 73 20 63 the crossings c
8330: 6f 75 6e 74 65 72 73 2c 20 61 6e 64 20 74 68 65 ounters, and the
8340: 6e 20 61 6c 73 6f 20 66 72 6f 6d 20 74 68 65 20 n also from the
8350: 73 65 74 0a 09 20 20 20 20 23 20 6f 66 20 6b 6e set.. # of kn
8360: 6f 77 6e 20 64 65 70 65 6e 64 65 6e 63 69 65 73 own dependencies
8370: 2c 20 61 73 20 77 65 20 61 72 65 20 64 6f 6e 65 , as we are done
8380: 20 77 69 74 68 20 69 74 2e 0a 0a 09 20 20 20 20 with it....
8390: 42 6f 72 64 65 72 20 24 64 65 70 63 28 24 64 65 Border $depc($de
83a0: 70 29 20 64 73 20 64 65 0a 09 20 20 20 20 66 6f p) ds de.. fo
83b0: 72 20 7b 73 65 74 20 6c 6f 63 20 24 64 73 7d 20 r {set loc $ds}
83c0: 7b 24 6c 6f 63 20 3c 3d 20 24 64 65 7d 20 7b 69 {$loc <= $de} {i
83d0: 6e 63 72 20 6c 6f 63 7d 20 7b 0a 09 09 69 6e 63 ncr loc} {...inc
83e0: 72 20 63 72 6f 73 73 28 24 6c 6f 63 29 20 2d 31 r cross($loc) -1
83f0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 6e 73 .. }.. uns
8400: 65 74 20 64 65 70 63 28 24 64 65 70 29 0a 0a 09 et depc($dep)...
8410: 20 20 20 20 69 66 20 7b 21 24 73 69 78 7d 20 63 if {!$six} c
8420: 6f 6e 74 69 6e 75 65 0a 0a 09 20 20 20 20 73 74 ontinue... st
8430: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 ruct::list assig
8440: 6e 20 24 64 65 70 20 70 61 72 65 6e 74 20 63 68 n $dep parent ch
8450: 69 6c 64 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 ild.. log wri
8460: 74 65 20 35 20 63 73 65 74 73 20 22 42 72 6f 6b te 5 csets "Brok
8470: 65 20 64 65 70 65 6e 64 65 6e 63 79 20 5b 50 44 e dependency [PD
8480: 20 24 70 61 72 65 6e 74 5d 20 2d 2d 3e 20 5b 50 $parent] --> [P
8490: 44 20 24 63 68 69 6c 64 5d 22 0a 09 7d 0a 0a 09 D $child]"..}...
84a0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
84b0: 20 20 23 20 50 72 69 6e 74 20 69 64 65 6e 74 69 # Print identi
84c0: 66 79 69 6e 67 20 64 61 74 61 20 66 6f 72 20 61 fying data for a
84d0: 20 72 65 76 69 73 69 6f 6e 20 28 70 72 6f 6a 65 revision (proje
84e0: 63 74 2c 20 66 69 6c 65 2c 20 64 6f 74 74 65 64 ct, file, dotted
84f0: 20 72 65 76 0a 20 20 20 20 23 20 6e 75 6d 62 65 rev. # numbe
8500: 72 29 2c 20 66 6f 72 20 68 69 67 68 20 76 65 72 r), for high ver
8510: 62 6f 73 69 74 79 20 6c 6f 67 20 6f 75 74 70 75 bosity log outpu
8520: 74 2e 0a 20 20 20 20 23 20 54 4f 44 4f 3a 20 52 t.. # TODO: R
8530: 65 70 6c 61 63 65 20 77 69 74 68 20 63 61 6c 6c eplace with call
8540: 20 74 6f 20 69 74 65 6d 73 74 72 20 28 6c 69 73 to itemstr (lis
8550: 74 20 72 65 76 20 24 69 64 29 0a 0a 20 20 20 20 t rev $id)..
8560: 70 72 6f 63 20 50 44 20 7b 69 64 7d 20 7b 0a 09 proc PD {id} {..
8570: 66 6f 72 65 61 63 68 20 7b 70 20 66 20 72 7d 20 foreach {p f r}
8580: 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 53 [state run {...S
8590: 45 4c 45 43 54 20 50 2e 6e 61 6d 65 20 2c 20 46 ELECT P.name , F
85a0: 2e 6e 61 6d 65 2c 20 52 2e 72 65 76 0a 09 09 46 .name, R.rev...F
85b0: 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 ROM revision R,
85c0: 66 69 6c 65 20 46 2c 20 70 72 6f 6a 65 63 74 20 file F, project
85d0: 50 0a 09 09 57 48 45 52 45 20 52 2e 72 69 64 20 P...WHERE R.rid
85e0: 3d 20 24 69 64 20 20 20 20 2d 2d 20 46 69 6e 64 = $id -- Find
85f0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 specified file
8600: 72 65 76 69 73 69 6f 6e 0a 09 09 41 4e 44 20 20 revision...AND
8610: 20 46 2e 66 69 64 20 3d 20 52 2e 66 69 64 20 20 F.fid = R.fid
8620: 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 20 74 -- Get file of t
8630: 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 09 41 4e he revision...AN
8640: 44 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70 69 D P.pid = F.pi
8650: 64 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65 63 d -- Get projec
8660: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a 09 t of the file...
8670: 7d 5d 20 62 72 65 61 6b 0a 09 72 65 74 75 72 6e }] break..return
8680: 20 22 27 24 70 20 3a 20 24 66 2f 24 72 27 22 0a "'$p : $f/$r'".
8690: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 50 72 69 }.. # Pri
86a0: 6e 74 69 6e 67 20 6f 6e 65 20 6f 72 20 6d 6f 72 nting one or mor
86b0: 65 20 72 61 6e 67 65 73 2c 20 66 6f 72 6d 61 74 e ranges, format
86c0: 74 65 64 2c 20 61 6e 64 20 6f 6e 6c 79 20 74 68 ted, and only th
86d0: 65 69 72 20 62 6f 72 64 65 72 20 74 6f 0a 20 20 eir border to.
86e0: 20 20 23 20 6b 65 65 70 20 74 68 65 20 73 74 72 # keep the str
86f0: 69 6e 67 73 20 73 68 6f 72 74 2e 0a 0a 20 20 20 ings short...
8700: 20 70 72 6f 63 20 50 52 73 20 7b 72 61 6e 67 65 proc PRs {range
8710: 73 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 73 74 s} {..return [st
8720: 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 24 ruct::list map $
8730: 72 61 6e 67 65 73 20 5b 6d 79 70 72 6f 63 20 50 ranges [myproc P
8740: 52 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 R]]. }.. p
8750: 72 6f 63 20 50 52 20 7b 72 61 6e 67 65 7d 20 7b roc PR {range} {
8760: 0a 09 42 6f 72 64 65 72 20 24 72 61 6e 67 65 20 ..Border $range
8770: 73 20 65 0a 09 72 65 74 75 72 6e 20 3c 24 7b 73 s e..return <${s
8780: 7d 2e 2e 2e 24 7b 65 7d 3e 0a 20 20 20 20 7d 0a }...${e}>. }.
8790: 0a 20 20 20 20 70 72 6f 63 20 42 6f 72 64 65 72 . proc Border
87a0: 20 7b 72 61 6e 67 65 20 73 76 20 65 76 7d 20 7b {range sv ev} {
87b0: 0a 09 75 70 76 61 72 20 31 20 24 73 76 20 73 20 ..upvar 1 $sv s
87c0: 24 65 76 20 65 0a 09 73 65 74 20 73 20 5b 6c 69 $ev e..set s [li
87d0: 6e 64 65 78 20 24 72 61 6e 67 65 20 30 5d 0a 09 ndex $range 0]..
87e0: 73 65 74 20 65 20 5b 6c 69 6e 64 65 78 20 24 72 set e [lindex $r
87f0: 61 6e 67 65 20 65 6e 64 5d 0a 09 72 65 74 75 72 ange end]..retur
8800: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 n. }.. # #
8810: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
8820: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
8830: 23 23 23 23 0a 0a 20 20 20 20 70 72 6f 63 20 55 ####.. proc U
8840: 6e 6d 61 70 49 74 65 6d 73 20 7b 74 68 65 74 79 nmapItems {thety
8850: 70 65 20 74 68 65 69 74 65 6d 73 7d 20 7b 0a 09 pe theitems} {..
8860: 23 20 28 2a 29 20 57 65 20 63 6c 65 61 72 20 6f # (*) We clear o
8870: 75 74 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 ut the associate
8880: 64 20 70 61 72 74 20 6f 66 20 74 68 65 20 6d 79 d part of the my
8890: 69 74 65 6d 6d 61 70 0a 09 23 20 69 6e 2d 6d 65 itemmap..# in-me
88a0: 6d 6f 72 79 20 69 6e 64 65 78 20 69 6e 20 70 72 mory index in pr
88b0: 65 70 61 72 61 74 69 6f 6e 20 66 6f 72 20 6e 65 eparation for ne
88c0: 77 20 64 61 74 61 2c 20 6f 72 20 61 73 20 70 61 w data, or as pa
88d0: 72 74 20 6f 66 0a 09 23 20 6f 62 6a 65 63 74 20 rt of..# object
88e0: 64 65 73 74 72 75 63 74 69 6f 6e 2e 20 41 20 73 destruction. A s
88f0: 69 6d 70 6c 65 20 75 6e 73 65 74 20 69 73 20 65 imple unset is e
8900: 6e 6f 75 67 68 2c 20 77 65 20 68 61 76 65 20 6e nough, we have n
8910: 6f 0a 09 23 20 73 79 6d 62 6f 6c 20 63 68 61 6e o..# symbol chan
8920: 67 65 73 65 74 73 20 61 74 20 74 68 69 73 20 74 gesets at this t
8930: 69 6d 65 2c 20 61 6e 64 20 74 68 75 73 20 6e 65 ime, and thus ne
8940: 76 65 72 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e ver more than on
8950: 65 0a 09 23 20 72 65 66 65 72 65 6e 63 65 20 69 e..# reference i
8960: 6e 20 74 68 65 20 6c 69 73 74 2e 0a 0a 09 75 70 n the list....up
8970: 76 61 72 20 31 20 6d 79 69 74 65 6d 6d 61 70 20 var 1 myitemmap
8980: 6d 79 69 74 65 6d 6d 61 70 20 73 65 6c 66 20 73 myitemmap self s
8990: 65 6c 66 0a 09 66 6f 72 65 61 63 68 20 69 69 64 elf..foreach iid
89a0: 20 24 74 68 65 69 74 65 6d 73 20 7b 0a 09 20 20 $theitems {..
89b0: 20 20 73 65 74 20 6b 65 79 20 5b 6c 69 73 74 20 set key [list
89c0: 24 74 68 65 74 79 70 65 20 24 69 69 64 5d 0a 09 $thetype $iid]..
89d0: 20 20 20 20 75 6e 73 65 74 20 6d 79 69 74 65 6d unset myitem
89e0: 6d 61 70 28 24 6b 65 79 29 0a 09 20 20 20 20 6c map($key).. l
89f0: 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 og write 8 csets
8a00: 20 7b 4d 41 50 2d 20 69 74 65 6d 20 3c 24 6b 65 {MAP- item <$ke
8a10: 79 3e 20 24 73 65 6c 66 20 3d 20 5b 24 73 65 6c y> $self = [$sel
8a20: 66 20 73 74 72 5d 7d 0a 09 7d 0a 09 72 65 74 75 f str]}..}..retu
8a30: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 rn. }.. pr
8a40: 6f 63 20 4d 61 70 49 74 65 6d 73 20 7b 74 68 65 oc MapItems {the
8a50: 74 79 70 65 20 74 68 65 69 74 65 6d 73 7d 20 7b type theitems} {
8a60: 0a 09 75 70 76 61 72 20 31 20 6d 79 69 74 65 6d ..upvar 1 myitem
8a70: 6d 61 70 20 6d 79 69 74 65 6d 6d 61 70 20 73 65 map myitemmap se
8a80: 6c 66 20 73 65 6c 66 0a 0a 09 66 6f 72 65 61 63 lf self...foreac
8a90: 68 20 69 69 64 20 24 74 68 65 69 74 65 6d 73 20 h iid $theitems
8aa0: 7b 0a 09 20 20 20 20 73 65 74 20 6b 65 79 20 5b {.. set key [
8ab0: 6c 69 73 74 20 24 74 68 65 74 79 70 65 20 24 69 list $thetype $i
8ac0: 69 64 5d 0a 09 20 20 20 20 73 65 74 20 6d 79 69 id].. set myi
8ad0: 74 65 6d 6d 61 70 28 24 6b 65 79 29 20 24 73 65 temmap($key) $se
8ae0: 6c 66 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 lf.. log writ
8af0: 65 20 38 20 63 73 65 74 73 20 7b 4d 41 50 2b 20 e 8 csets {MAP+
8b00: 69 74 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 6c item <$key> $sel
8b10: 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d f = [$self str]}
8b20: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
8b30: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
8b40: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
8b50: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a #############..
8b60: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 typevariable
8b70: 20 6d 79 63 68 61 6e 67 65 73 65 74 73 20 20 20 mychangesets
8b80: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 {} ; # Lis
8b90: 74 20 6f 66 20 61 6c 6c 20 6b 6e 6f 77 6e 0a 09 t of all known..
8ba0: 09 09 09 09 20 20 20 23 20 63 68 61 6e 67 65 73 .... # changes
8bb0: 65 74 73 2e 0a 0a 20 20 20 20 23 20 4c 69 73 74 ets... # List
8bc0: 20 6f 66 20 61 6c 6c 20 6b 6e 6f 77 6e 20 63 68 of all known ch
8bd0: 61 6e 67 65 73 65 74 73 20 6f 66 20 61 20 74 79 angesets of a ty
8be0: 70 65 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 pe.. typevari
8bf0: 61 62 6c 65 20 6d 79 74 63 68 61 6e 67 65 73 65 able mytchangese
8c00: 74 73 20 2d 61 72 72 61 79 20 7b 0a 09 73 79 6d ts -array {..sym
8c10: 3a 3a 62 72 61 6e 63 68 20 7b 7d 0a 09 73 79 6d ::branch {}..sym
8c20: 3a 3a 74 61 67 20 20 20 20 7b 7d 0a 09 72 65 76 ::tag {}..rev
8c30: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 20 20 {}.
8c40: 7d 0a 09 09 09 09 09 0a 20 20 20 20 74 79 70 65 }....... type
8c50: 76 61 72 69 61 62 6c 65 20 6d 79 69 74 65 6d 6d variable myitemm
8c60: 61 70 20 20 20 20 20 2d 61 72 72 61 79 20 7b 7d ap -array {}
8c70: 20 3b 20 23 20 4d 61 70 20 66 72 6f 6d 20 69 74 ; # Map from it
8c80: 65 6d 73 20 28 74 61 67 67 65 64 29 0a 09 09 09 ems (tagged)....
8c90: 09 09 20 20 20 23 20 74 6f 20 74 68 65 20 6c 69 .. # to the li
8ca0: 73 74 20 6f 66 20 63 68 61 6e 67 65 73 65 74 73 st of changesets
8cb0: 0a 09 09 09 09 09 20 20 20 23 20 63 6f 6e 74 61 ...... # conta
8cc0: 69 6e 69 6e 67 20 69 74 2e 20 45 61 63 68 20 69 ining it. Each i
8cd0: 74 65 6d 0a 09 09 09 09 09 20 20 20 23 20 63 61 tem...... # ca
8ce0: 6e 20 62 65 20 75 73 65 64 20 62 79 20 6f 6e 6c n be used by onl
8cf0: 79 20 6f 6e 65 0a 09 09 09 09 09 20 20 20 23 20 y one...... #
8d00: 63 68 61 6e 67 65 73 65 74 2e 0a 20 20 20 20 74 changeset.. t
8d10: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 69 64 ypevariable myid
8d20: 6d 61 70 20 20 20 2d 61 72 72 61 79 20 7b 7d 20 map -array {}
8d30: 3b 20 23 20 4d 61 70 20 66 72 6f 6d 20 63 68 61 ; # Map from cha
8d40: 6e 67 65 73 65 74 20 69 64 20 74 6f 0a 09 09 09 ngeset id to....
8d50: 09 20 20 20 20 20 20 20 23 20 63 68 61 6e 67 65 . # change
8d60: 73 65 74 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 set... typeme
8d70: 74 68 6f 64 20 61 6c 6c 20 20 20 20 7b 7d 20 20 thod all {}
8d80: 20 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 63 68 { return $mych
8d90: 61 6e 67 65 73 65 74 73 20 7d 0a 20 20 20 20 74 angesets }. t
8da0: 79 70 65 6d 65 74 68 6f 64 20 6f 66 20 20 20 20 ypemethod of
8db0: 20 7b 63 69 64 7d 20 7b 20 72 65 74 75 72 6e 20 {cid} { return
8dc0: 24 6d 79 69 64 6d 61 70 28 24 63 69 64 29 20 7d $myidmap($cid) }
8dd0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
8de0: 6f 66 69 74 65 6d 20 7b 69 69 64 7d 20 7b 20 72 ofitem {iid} { r
8df0: 65 74 75 72 6e 20 24 6d 79 69 74 65 6d 6d 61 70 eturn $myitemmap
8e00: 28 24 69 69 64 29 20 7d 0a 0a 20 20 20 20 74 79 ($iid) }.. ty
8e10: 70 65 6d 65 74 68 6f 64 20 72 65 76 20 20 20 20 pemethod rev
8e20: 7b 7d 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24 {} { return $
8e30: 6d 79 74 63 68 61 6e 67 65 73 65 74 73 28 72 65 mytchangesets(re
8e40: 76 29 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 v) }. typemet
8e50: 68 6f 64 20 73 79 6d 20 20 20 20 7b 7d 20 20 20 hod sym {}
8e60: 20 7b 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63 61 { return [conca
8e70: 74 20 5c 0a 09 09 09 09 09 20 20 24 7b 6d 79 74 t \...... ${myt
8e80: 63 68 61 6e 67 65 73 65 74 73 28 73 79 6d 3a 3a changesets(sym::
8e90: 62 72 61 6e 63 68 29 7d 20 5c 0a 09 09 09 09 09 branch)} \......
8ea0: 20 20 24 7b 6d 79 74 63 68 61 6e 67 65 73 65 74 ${mytchangeset
8eb0: 73 28 73 79 6d 3a 3a 74 61 67 29 7d 5d 20 7d 0a s(sym::tag)}] }.
8ec0: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
8ed0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
8ee0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 ############.
8ef0: 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f ## Configuratio
8f00: 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 n.. pragma -h
8f10: 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f astypeinfo no
8f20: 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 6e ; # no type in
8f30: 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 trospection.
8f40: 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20 pragma -hasinfo
8f50: 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e no ; # n
8f60: 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70 o object introsp
8f70: 65 63 74 69 6f 6e 0a 0a 20 20 20 20 23 20 23 20 ection.. # #
8f80: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
8f90: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
8fa0: 23 23 23 0a 7d 0a 0a 23 23 0a 23 23 20 4e 4f 54 ###.}..##.## NOT
8fb0: 45 3a 20 54 68 65 20 73 75 63 63 65 73 73 6f 72 E: The successor
8fc0: 20 61 6e 64 20 70 72 65 64 65 63 65 73 73 6f 72 and predecessor
8fd0: 20 6d 65 74 68 6f 64 73 20 64 65 66 69 6e 65 64 methods defined
8fe0: 20 62 79 20 74 68 65 20 63 6c 61 73 73 65 73 0a by the classes.
8ff0: 23 23 20 20 20 20 20 20 20 62 65 6c 6f 77 20 61 ## below a
9000: 72 65 20 2d 2d 20 62 6f 74 74 6c 65 20 6e 65 63 re -- bottle nec
9010: 6b 73 20 2d 2d 2e 20 4c 6f 6f 6b 20 66 6f 72 20 ks --. Look for
9020: 77 61 79 73 20 74 6f 20 6d 61 6b 65 20 74 68 65 ways to make the
9030: 20 53 51 4c 0a 23 23 20 20 20 20 20 20 20 66 61 SQL.## fa
9040: 73 74 65 72 2e 0a 23 23 0a 0a 23 20 23 20 23 23 ster..##..# # ##
9050: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
9060: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
9070: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 # ##############
9080: 23 23 23 23 23 23 23 0a 23 23 20 48 65 6c 70 65 #######.## Helpe
9090: 72 20 73 69 6e 67 6c 65 74 6f 6e 2e 20 43 6f 6d r singleton. Com
90a0: 6d 61 6e 64 73 20 66 6f 72 20 72 65 76 69 73 69 mands for revisi
90b0: 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a on changesets...
90c0: 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a snit::type ::vc:
90d0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
90e0: 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 :cvs::project::r
90f0: 65 76 3a 3a 72 65 76 20 7b 0a 20 20 20 20 74 79 ev::rev {. ty
9100: 70 65 6d 65 74 68 6f 64 20 62 79 72 65 76 69 73 pemethod byrevis
9110: 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 ion {} { return
9120: 31 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 1 }. typemeth
9130: 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 7b 7d od bysymbol {}
9140: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20 { return 0 }.
9150: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74 typemethod ist
9160: 61 67 20 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 ag {} { ret
9170: 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 70 65 urn 0 }. type
9180: 6d 65 74 68 6f 64 20 69 73 62 72 61 6e 63 68 20 method isbranch
9190: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 {} { return 0
91a0: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }.. typemetho
91b0: 64 20 73 74 72 20 7b 72 65 76 69 73 69 6f 6e 7d d str {revision}
91c0: 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 {..struct::list
91d0: 20 61 73 73 69 67 6e 20 5b 73 74 61 74 65 20 72 assign [state r
91e0: 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 un {.. SELECT
91f0: 20 52 2e 72 65 76 2c 20 46 2e 6e 61 6d 65 2c 20 R.rev, F.name,
9200: 50 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d P.name.. FROM
9210: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 66 revision R, f
9220: 69 6c 65 20 46 2c 20 70 72 6f 6a 65 63 74 20 50 ile F, project P
9230: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 .. WHERE R.r
9240: 69 64 20 3d 20 24 72 65 76 69 73 69 6f 6e 20 2d id = $revision -
9250: 2d 20 46 69 6e 64 20 73 70 65 63 69 66 69 65 64 - Find specified
9260: 20 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 0a 09 file revision..
9270: 20 20 20 20 41 4e 44 20 20 20 20 46 2e 66 69 64 AND F.fid
9280: 20 3d 20 52 2e 66 69 64 20 20 20 20 20 2d 2d 20 = R.fid --
9290: 47 65 74 20 66 69 6c 65 20 6f 66 20 74 68 65 20 Get file of the
92a0: 72 65 76 69 73 69 6f 6e 0a 09 20 20 20 20 41 4e revision.. AN
92b0: 44 20 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70 D P.pid = F.p
92c0: 69 64 20 20 20 20 20 2d 2d 20 47 65 74 20 70 72 id -- Get pr
92d0: 6f 6a 65 63 74 20 6f 66 20 74 68 65 20 66 69 6c oject of the fil
92e0: 65 2e 0a 09 7d 5d 20 72 65 76 6e 72 20 66 6e 61 e...}] revnr fna
92f0: 6d 65 20 70 6e 61 6d 65 0a 09 72 65 74 75 72 6e me pname..return
9300: 20 22 24 70 6e 61 6d 65 2f 24 7b 72 65 76 6e 72 "$pname/${revnr
9310: 7d 3a 3a 24 66 6e 61 6d 65 22 0a 20 20 20 20 7d }::$fname". }
9320: 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d .. # result =
9330: 20 6c 69 73 74 20 28 6d 69 6e 74 69 6d 65 2c 20 list (mintime,
9340: 6d 61 78 74 69 6d 65 29 0a 20 20 20 20 74 79 70 maxtime). typ
9350: 65 6d 65 74 68 6f 64 20 74 69 6d 65 72 61 6e 67 emethod timerang
9360: 65 20 7b 69 74 65 6d 73 7d 20 7b 0a 09 73 65 74 e {items} {..set
9370: 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 theset ('[join
9380: 24 69 74 65 6d 73 20 7b 27 2c 27 7d 5d 27 29 0a $items {','}]').
9390: 09 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 .return [state r
93a0: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
93b0: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
93c0: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
93d0: 43 54 20 4d 49 4e 28 52 2e 64 61 74 65 29 2c 20 CT MIN(R.date),
93e0: 4d 41 58 28 52 2e 64 61 74 65 29 0a 09 20 20 20 MAX(R.date)..
93f0: 20 46 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20 52 FROM revision R
9400: 0a 09 20 20 20 20 57 48 45 52 45 20 52 2e 72 69 .. WHERE R.ri
9410: 64 20 49 4e 20 24 74 68 65 73 65 74 20 2d 2d 20 d IN $theset --
9420: 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 Restrict to revi
9430: 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 sions of interes
9440: 74 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 t..}]]. }..
9450: 20 20 23 20 76 61 72 28 64 76 29 20 3d 20 64 69 # var(dv) = di
9460: 63 74 20 28 72 65 76 69 73 69 6f 6e 20 2d 3e 20 ct (revision ->
9470: 6c 69 73 74 20 28 72 65 76 69 73 69 6f 6e 29 29 list (revision))
9480: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
9490: 69 6e 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f internalsuccesso
94a0: 72 73 20 7b 64 76 20 72 65 76 69 73 69 6f 6e 73 rs {dv revisions
94b0: 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24 64 76 } {..upvar 1 $dv
94c0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 73 dependencies..s
94d0: 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 et theset ('[joi
94e0: 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c n $revisions {',
94f0: 27 7d 5d 27 29 0a 0a 09 6c 6f 67 20 77 72 69 74 '}]')...log writ
9500: 65 20 31 34 20 63 73 65 74 73 20 69 6e 74 65 72 e 14 csets inter
9510: 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 0a 0a 09 nalsuccessors...
9520: 23 20 53 65 65 20 27 73 75 63 63 65 73 73 6f 72 # See 'successor
9530: 73 27 20 62 65 6c 6f 77 20 66 6f 72 20 74 68 65 s' below for the
9540: 20 6d 61 69 6e 20 65 78 70 6c 61 6e 61 74 69 6f main explanatio
9550: 6e 20 6f 66 0a 09 23 20 74 68 65 20 76 61 72 69 n of..# the vari
9560: 6f 75 73 20 63 61 73 65 73 2e 20 54 68 69 73 20 ous cases. This
9570: 70 69 65 63 65 20 69 73 20 73 70 65 63 69 61 6c piece is special
9580: 20 69 6e 20 74 68 61 74 20 69 74 0a 09 23 20 72 in that it..# r
9590: 65 73 74 72 69 63 74 73 20 74 68 65 20 73 75 63 estricts the suc
95a0: 63 65 73 73 6f 72 73 20 77 65 20 6c 6f 6f 6b 20 cessors we look
95b0: 66 6f 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 for to the same
95c0: 73 65 74 20 6f 66 0a 09 23 20 72 65 76 69 73 69 set of..# revisi
95d0: 6f 6e 73 20 77 65 20 73 74 61 72 74 20 66 72 6f ons we start fro
95e0: 6d 2e 20 53 65 6e 73 69 62 6c 65 20 61 73 20 77 m. Sensible as w
95f0: 65 20 61 72 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f e are looking fo
9600: 72 0a 09 23 20 63 68 61 6e 67 65 73 65 74 20 69 r..# changeset i
9610: 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e nternal dependen
9620: 63 69 65 73 2e 0a 0a 09 61 72 72 61 79 20 73 65 cies....array se
9630: 74 20 64 65 70 20 7b 7d 0a 0a 09 73 74 61 74 65 t dep {}...state
9640: 20 66 6f 72 65 61 63 68 72 6f 77 20 5b 73 75 62 foreachrow [sub
9650: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
9660: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
9670: 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d 61 -- (1) Prima
9680: 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 45 ry child.. SE
9690: 4c 45 43 54 20 52 2e 72 69 64 20 41 53 20 78 72 LECT R.rid AS xr
96a0: 69 64 2c 20 52 2e 63 68 69 6c 64 20 41 53 20 78 id, R.child AS x
96b0: 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 child.. FROM
96c0: 20 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 revision R..
96d0: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 WHERE R.rid
96e0: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
96f0: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 -- Restrict to r
9700: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 evisions of inte
9710: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
9720: 20 52 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 R.child IS NOT
9730: 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 NULL -- Has p
9740: 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 rimary child..
9750: 20 20 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 AND R.child
9760: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
9770: 2d 2d 20 57 68 69 63 68 20 69 73 20 61 6c 73 6f -- Which is also
9780: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 20 20 20 of interest.
9790: 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 32 UNION. -- (2
97a0: 29 20 53 65 63 6f 6e 64 61 72 79 20 28 62 72 61 ) Secondary (bra
97b0: 6e 63 68 29 20 63 68 69 6c 64 72 65 6e 0a 09 20 nch) children..
97c0: 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 20 SELECT R.rid
97d0: 41 53 20 78 72 69 64 2c 20 42 2e 62 72 69 64 20 AS xrid, B.brid
97e0: 41 53 20 78 63 68 69 6c 64 0a 09 20 20 20 20 46 AS xchild.. F
97f0: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R
9800: 2c 20 72 65 76 69 73 69 6f 6e 62 72 61 6e 63 68 , revisionbranch
9810: 63 68 69 6c 64 72 65 6e 20 42 0a 09 20 20 20 20 children B..
9820: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 WHERE R.rid I
9830: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
9840: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
9850: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
9860: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 st.. AND R
9870: 2e 72 69 64 20 3d 20 42 2e 72 69 64 20 20 20 20 .rid = B.rid
9880: 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 -- Select
9890: 73 75 62 73 65 74 20 6f 66 20 62 72 61 6e 63 68 subset of branch
98a0: 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 41 children.. A
98b0: 4e 44 20 20 20 20 42 2e 62 72 69 64 20 49 4e 20 ND B.brid IN
98c0: 24 74 68 65 73 65 74 20 20 20 20 20 20 2d 2d 20 $theset --
98d0: 57 68 69 63 68 20 69 73 20 61 6c 73 6f 20 6f 66 Which is also of
98e0: 20 69 6e 74 65 72 65 73 74 0a 20 20 20 20 55 4e interest. UN
98f0: 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 34 29 20 43 ION. -- (4) C
9900: 68 69 6c 64 20 6f 66 20 74 72 75 6e 6b 20 72 6f hild of trunk ro
9910: 6f 74 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 ot successor of
9920: 6c 61 73 74 20 4e 54 44 42 20 6f 6e 20 74 72 75 last NTDB on tru
9930: 6e 6b 2e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 nk... SELECT
9940: 52 2e 72 69 64 20 41 53 20 78 72 69 64 2c 20 52 R.rid AS xrid, R
9950: 41 2e 63 68 69 6c 64 20 41 53 20 78 63 68 69 6c A.child AS xchil
9960: 64 0a 09 20 20 20 20 46 52 4f 4d 20 72 65 76 69 d.. FROM revi
9970: 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e sion R, revision
9980: 20 52 41 0a 09 20 20 20 20 57 48 45 52 45 20 52 RA.. WHERE R
9990: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 .rid IN $these
99a0: 74 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 t -- Restri
99b0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 ct to revisions
99c0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
99d0: 20 41 4e 44 20 20 20 52 2e 69 73 64 65 66 61 75 AND R.isdefau
99e0: 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d lt -
99f0: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 4e 54 - Restrict to NT
9a00: 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 52 2e DB.. AND R.
9a10: 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e dbchild IS NOT N
9a20: 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c 61 73 ULL -- and las
9a30: 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 6e 67 t NTDB belonging
9a40: 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 20 41 to trunk.. A
9a50: 4e 44 20 20 20 52 41 2e 72 69 64 20 3d 20 52 2e ND RA.rid = R.
9a60: 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d 2d 20 dbchild --
9a70: 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74 Go directly to t
9a80: 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 20 41 runk root.. A
9a90: 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20 49 53 ND RA.child IS
9aa0: 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d 20 NOT NULL --
9ab0: 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69 6c Has primary chil
9ac0: 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 d.. A
9ad0: 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20 49 4e ND RA.child IN
9ae0: 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 $theset --
9af0: 57 68 69 63 68 20 69 73 20 61 6c 73 6f 20 6f 66 Which is also of
9b00: 20 69 6e 74 65 72 65 73 74 0a 09 7d 5d 20 7b 0a interest..}] {.
9b10: 09 20 20 20 20 23 20 43 6f 6e 73 69 64 65 72 20 . # Consider
9b20: 6d 6f 76 69 6e 67 20 74 68 69 73 20 74 6f 20 74 moving this to t
9b30: 68 65 20 69 6e 74 65 67 72 69 74 79 20 6d 6f 64 he integrity mod
9b40: 75 6c 65 2e 0a 09 20 20 20 20 69 6e 74 65 67 72 ule... integr
9b50: 69 74 79 20 61 73 73 65 72 74 20 7b 24 78 72 69 ity assert {$xri
9b60: 64 20 21 3d 20 24 78 63 68 69 6c 64 7d 20 7b 52 d != $xchild} {R
9b70: 65 76 69 73 69 6f 6e 20 24 78 72 69 64 20 64 65 evision $xrid de
9b80: 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66 2e pends on itself.
9b90: 7d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 }.. lappend d
9ba0: 65 70 65 6e 64 65 6e 63 69 65 73 28 24 78 72 69 ependencies($xri
9bb0: 64 29 20 24 78 63 68 69 6c 64 0a 09 20 20 20 20 d) $xchild..
9bc0: 73 65 74 20 64 65 70 28 24 78 72 69 64 2c 24 78 set dep($xrid,$x
9bd0: 63 68 69 6c 64 29 20 2e 0a 09 7d 0a 0a 09 23 20 child) ...}...#
9be0: 54 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e The sql statemen
9bf0: 74 73 20 61 62 6f 76 65 20 6c 6f 6f 6b 73 20 6f ts above looks o
9c00: 6e 6c 79 20 66 6f 72 20 64 69 72 65 63 74 20 64 nly for direct d
9c10: 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 23 20 62 ependencies..# b
9c20: 65 74 77 65 65 6e 20 72 65 76 69 73 69 6f 6e 20 etween revision
9c30: 69 6e 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 in the changeset
9c40: 2e 20 48 6f 77 65 76 65 72 20 64 75 65 20 74 6f . However due to
9c50: 20 74 68 65 0a 09 23 20 76 61 67 61 72 69 65 73 the..# vagaries
9c60: 20 6f 66 20 6d 65 74 61 20 64 61 74 61 20 69 74 of meta data it
9c70: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 is possible for
9c80: 20 74 77 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f two revisions o
9c90: 66 0a 09 23 20 74 68 65 20 73 61 6d 65 20 66 69 f..# the same fi
9ca0: 6c 65 20 74 6f 20 65 6e 64 20 75 70 20 69 6e 20 le to end up in
9cb0: 74 68 65 20 73 61 6d 65 20 63 68 61 6e 67 65 73 the same changes
9cc0: 65 74 2c 20 77 69 74 68 6f 75 74 20 61 0a 09 23 et, without a..#
9cd0: 20 64 69 72 65 63 74 20 64 65 70 65 6e 64 65 6e direct dependen
9ce0: 63 79 20 62 65 74 77 65 65 6e 20 74 68 65 6d 2e cy between them.
9cf0: 20 48 6f 77 65 76 65 72 20 77 65 20 6b 6e 6f 77 However we know
9d00: 20 74 68 61 74 20 74 68 65 72 65 0a 09 23 20 68 that there..# h
9d10: 61 73 20 74 6f 20 62 65 20 61 20 61 6e 20 69 6e as to be a an in
9d20: 64 69 72 65 63 74 20 64 65 70 65 6e 64 65 6e 63 direct dependenc
9d30: 79 2c 20 62 65 20 69 74 20 74 68 72 6f 75 67 68 y, be it through
9d40: 20 70 72 69 6d 61 72 79 0a 09 23 20 63 68 69 6c primary..# chil
9d50: 64 72 65 6e 2c 20 62 72 61 6e 63 68 20 63 68 69 dren, branch chi
9d60: 6c 64 72 65 6e 2c 20 6f 72 20 61 20 63 6f 6d 62 ldren, or a comb
9d70: 69 6e 61 74 69 6f 6e 20 74 68 65 72 65 6f 66 2e ination thereof.
9d80: 0a 0a 09 23 20 57 65 20 6e 6f 77 20 66 69 6c 6c ...# We now fill
9d90: 20 69 6e 20 74 68 65 73 65 20 70 73 65 75 64 6f in these pseudo
9da0: 2d 64 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 69 -dependencies, i
9db0: 66 20 6e 6f 20 73 75 63 68 0a 09 23 20 64 65 70 f no such..# dep
9dc0: 65 6e 64 65 6e 63 79 20 65 78 69 73 74 73 20 61 endency exists a
9dd0: 6c 72 65 61 64 79 2e 20 54 68 65 20 64 69 72 65 lready. The dire
9de0: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 65 70 ction of the dep
9df0: 65 6e 64 65 6e 63 79 0a 09 23 20 69 73 20 61 63 endency..# is ac
9e00: 74 75 61 6c 6c 79 20 69 72 72 65 6c 65 76 61 6e tually irrelevan
9e10: 74 20 66 6f 72 20 74 68 69 73 2e 0a 0a 09 23 20 t for this....#
9e20: 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 64 69 NOTE: This is di
9e30: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 63 76 73 fferent from cvs
9e40: 32 73 76 6e 2e 20 4f 75 72 20 73 70 69 72 69 74 2svn. Our spirit
9e50: 75 61 6c 20 61 6e 63 65 73 74 6f 72 0a 09 23 20 ual ancestor..#
9e60: 64 6f 65 73 20 6e 6f 74 20 75 73 65 20 73 75 63 does not use suc
9e70: 68 20 70 73 65 75 64 6f 2d 64 65 70 65 6e 64 65 h pseudo-depende
9e80: 6e 63 69 65 73 2c 20 68 6f 77 65 76 65 72 20 69 ncies, however i
9e90: 74 20 75 73 65 73 20 61 0a 09 23 20 43 4f 4d 4d t uses a..# COMM
9ea0: 49 54 5f 54 48 52 45 53 48 4f 4c 44 2c 20 61 20 IT_THRESHOLD, a
9eb0: 74 69 6d 65 20 69 6e 74 65 72 76 61 6c 20 63 6f time interval co
9ec0: 6d 6d 69 74 73 20 73 68 6f 75 6c 64 20 66 61 6c mmits should fal
9ed0: 6c 2e 20 54 68 69 73 0a 09 23 20 77 69 6c 6c 20 l. This..# will
9ee0: 67 72 65 61 74 6c 79 20 72 65 64 75 63 65 73 20 greatly reduces
9ef0: 74 68 65 20 72 69 73 6b 20 6f 66 20 67 65 74 74 the risk of gett
9f00: 69 6e 67 20 66 61 72 20 73 65 70 61 72 61 74 65 ing far separate
9f10: 64 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 6f d..# revisions o
9f20: 66 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 20 f the same file
9f30: 69 6e 74 6f 20 6f 6e 65 20 63 68 61 6e 67 65 73 into one changes
9f40: 65 74 2e 0a 0a 09 23 20 57 65 20 61 6c 6c 6f 77 et....# We allow
9f50: 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 20 62 65 revisions to be
9f60: 20 66 61 72 20 61 70 61 72 74 20 69 6e 20 74 69 far apart in ti
9f70: 6d 65 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 09 me in the same..
9f80: 23 20 63 68 61 6e 67 65 73 65 74 2c 20 62 75 74 # changeset, but
9f90: 20 69 6e 20 74 75 72 6e 20 6e 65 65 64 20 74 68 in turn need th
9fa0: 65 20 70 73 65 75 64 6f 2d 64 65 70 65 6e 64 65 e pseudo-depende
9fb0: 6e 63 69 65 73 20 74 6f 0a 09 23 20 68 61 6e 64 ncies to..# hand
9fc0: 6c 65 20 74 68 69 73 2e 0a 0a 09 6c 6f 67 20 77 le this....log w
9fd0: 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 69 rite 14 csets {i
9fe0: 6e 74 65 72 6e 61 6c 20 20 5b 61 72 72 61 79 20 nternal [array
9ff0: 73 69 7a 65 20 64 65 70 5d 7d 0a 09 6c 6f 67 20 size dep]}..log
a000: 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b write 14 csets {
a010: 63 6f 6c 6c 65 63 74 65 64 20 5b 61 72 72 61 79 collected [array
a020: 20 73 69 7a 65 20 64 65 70 65 6e 64 65 6e 63 69 size dependenci
a030: 65 73 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 es]}..log write
a040: 31 34 20 63 73 65 74 73 20 70 73 65 75 64 6f 2d 14 csets pseudo-
a050: 69 6e 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f internalsuccesso
a060: 72 73 0a 0a 09 61 72 72 61 79 20 73 65 74 20 66 rs...array set f
a070: 69 64 73 20 7b 7d 0a 09 73 74 61 74 65 20 66 6f ids {}..state fo
a080: 72 65 61 63 68 72 6f 77 20 5b 73 75 62 73 74 20 reachrow [subst
a090: 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 -nocommands -nob
a0a0: 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 ackslashes {..
a0b0: 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 20 41 SELECT R.rid A
a0c0: 53 20 78 72 69 64 2c 20 52 2e 66 69 64 20 41 53 S xrid, R.fid AS
a0d0: 20 78 66 69 64 0a 20 20 20 20 20 20 20 20 20 20 xfid.
a0e0: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
a0f0: 6e 20 52 0a 20 20 20 20 20 20 20 20 20 20 20 20 n R.
a100: 57 48 45 52 45 20 20 52 2e 72 69 64 20 49 4e 20 WHERE R.rid IN
a110: 24 74 68 65 73 65 74 0a 09 7d 5d 20 7b 20 6c 61 $theset..}] { la
a120: 70 70 65 6e 64 20 66 69 64 73 28 24 78 66 69 64 ppend fids($xfid
a130: 29 20 24 78 72 69 64 20 7d 0a 0a 09 73 65 74 20 ) $xrid }...set
a140: 67 72 6f 75 70 73 20 7b 7d 0a 09 66 6f 72 65 61 groups {}..forea
a150: 63 68 20 7b 66 69 64 20 72 69 64 73 7d 20 5b 61 ch {fid rids} [a
a160: 72 72 61 79 20 67 65 74 20 66 69 64 73 5d 20 7b rray get fids] {
a170: 0a 09 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 .. if {[lleng
a180: 74 68 20 24 72 69 64 73 5d 20 3c 20 32 7d 20 63 th $rids] < 2} c
a190: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 66 6f 72 ontinue.. for
a1a0: 65 61 63 68 20 61 20 24 72 69 64 73 20 7b 0a 09 each a $rids {..
a1b0: 09 66 6f 72 65 61 63 68 20 62 20 24 72 69 64 73 .foreach b $rids
a1c0: 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 61 20 {... if {$a
a1d0: 3d 3d 20 24 62 7d 20 63 6f 6e 74 69 6e 75 65 0a == $b} continue.
a1e0: 09 09 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 .. if {[info
a1f0: 65 78 69 73 74 73 20 64 65 70 28 24 61 2c 24 62 exists dep($a,$b
a200: 29 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 )]} continue...
a210: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi
a220: 73 74 73 20 64 65 70 28 24 62 2c 24 61 29 5d 7d sts dep($b,$a)]}
a230: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 continue...
a240: 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e lappend dependen
a250: 63 69 65 73 28 24 61 29 20 24 62 0a 09 09 20 20 cies($a) $b...
a260: 20 20 73 65 74 20 64 65 70 28 24 61 2c 24 62 29 set dep($a,$b)
a270: 20 2e 0a 09 09 20 20 20 20 73 65 74 20 64 65 70 .... set dep
a280: 28 24 62 2c 24 61 29 20 2e 0a 09 09 7d 0a 09 20 ($b,$a) ....}..
a290: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 6e 20 }.. set n
a2a0: 5b 6c 6c 65 6e 67 74 68 20 24 72 69 64 73 5d 0a [llength $rids].
a2b0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 67 72 6f . lappend gro
a2c0: 75 70 73 20 5b 6c 69 73 74 20 24 6e 20 5b 65 78 ups [list $n [ex
a2d0: 70 72 20 7b 28 24 6e 2a 24 6e 2d 24 6e 29 2f 32 pr {($n*$n-$n)/2
a2e0: 7d 5d 5d 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 }]]..}...log wri
a2f0: 74 65 20 31 34 20 63 73 65 74 73 20 7b 70 73 65 te 14 csets {pse
a300: 75 64 6f 20 20 20 20 5b 61 72 72 61 79 20 73 69 udo [array si
a310: 7a 65 20 66 69 64 73 5d 20 28 5b 6c 73 6f 72 74 ze fids] ([lsort
a320: 20 2d 69 6e 64 65 78 20 30 20 2d 64 65 63 72 65 -index 0 -decre
a330: 61 73 69 6e 67 20 2d 69 6e 74 65 67 65 72 20 24 asing -integer $
a340: 67 72 6f 75 70 73 5d 29 7d 0a 09 6c 6f 67 20 77 groups])}..log w
a350: 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 69 rite 14 csets {i
a360: 6e 74 65 72 6e 61 6c 20 20 5b 61 72 72 61 79 20 nternal [array
a370: 73 69 7a 65 20 64 65 70 5d 7d 0a 09 6c 6f 67 20 size dep]}..log
a380: 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b write 14 csets {
a390: 63 6f 6c 6c 65 63 74 65 64 20 5b 61 72 72 61 79 collected [array
a3a0: 20 73 69 7a 65 20 64 65 70 65 6e 64 65 6e 63 69 size dependenci
a3b0: 65 73 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 es]}..log write
a3c0: 31 34 20 63 73 65 74 73 20 63 6f 6d 70 6c 65 74 14 csets complet
a3d0: 65 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a e..return. }.
a3e0: 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 . # result =
a3f0: 34 2d 6c 69 73 74 20 28 69 74 65 6d 74 79 70 65 4-list (itemtype
a400: 20 69 74 65 6d 69 64 20 6e 65 78 74 69 74 65 6d itemid nextitem
a410: 74 79 70 65 20 6e 65 78 74 69 74 65 6d 69 64 20 type nextitemid
a420: 2e 2e 2e 29 0a 20 20 20 20 74 79 70 65 6d 65 74 ...). typemet
a430: 68 6f 64 20 6c 6f 6f 70 73 20 7b 72 65 76 69 73 hod loops {revis
a440: 69 6f 6e 73 7d 20 7b 0a 09 23 20 4e 6f 74 65 3a ions} {..# Note:
a450: 20 54 61 67 73 20 61 6e 64 20 62 72 61 6e 63 68 Tags and branch
a460: 65 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 es cannot cause
a470: 74 68 65 20 6c 6f 6f 70 2e 20 54 68 65 69 72 20 the loop. Their
a480: 69 64 27 73 2c 0a 09 23 20 62 65 69 6e 67 20 6f id's,..# being o
a490: 66 20 61 20 66 75 6e 64 61 6d 65 6e 74 61 6c 6c f a fundamentall
a4a0: 79 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 y different type
a4b0: 20 74 68 61 6e 20 74 68 65 20 72 65 76 69 73 69 than the revisi
a4c0: 6f 6e 73 0a 09 23 20 63 6f 6d 69 6e 67 20 69 6e ons..# coming in
a4d0: 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 74 68 cannot be in th
a4e0: 65 20 73 65 74 2e 0a 0a 09 73 65 74 20 74 68 65 e set....set the
a4f0: 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 set ('[join $rev
a500: 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a isions {','}]').
a510: 09 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 .return [state r
a520: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
a530: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
a540: 73 68 65 73 20 7b 0a 09 20 20 20 20 2d 2d 20 28 shes {.. -- (
a550: 31 29 20 50 72 69 6d 61 72 79 20 63 68 69 6c 64 1) Primary child
a560: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
a570: 69 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 20 20 id, R.child..
a580: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
a590: 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 R.. WHERE R
a5a0: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 .rid IN $these
a5b0: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
a5c0: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
a5d0: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
a5e0: 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49 AND R.child I
a5f0: 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d S NOT NULL --
a600: 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69 Has primary chi
a610: 6c 64 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 ld.. AND R
a620: 2e 63 68 69 6c 64 20 49 4e 20 24 74 68 65 73 65 .child IN $these
a630: 74 20 20 20 20 20 2d 2d 20 4c 6f 6f 70 0a 09 20 t -- Loop..
a640: 20 20 20 2d 2d 0a 09 20 20 20 20 55 4e 49 4f 4e --.. UNION
a650: 0a 09 20 20 20 20 2d 2d 20 28 32 29 20 53 65 63 .. -- (2) Sec
a660: 6f 6e 64 61 72 79 20 28 62 72 61 6e 63 68 29 20 ondary (branch)
a670: 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 53 45 children.. SE
a680: 4c 45 43 54 20 52 2e 72 69 64 2c 20 42 2e 62 72 LECT R.rid, B.br
a690: 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 id.. FROM r
a6a0: 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 evision R, revis
a6b0: 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c 64 72 65 ionbranchchildre
a6c0: 6e 20 42 0a 09 20 20 20 20 57 48 45 52 45 20 20 n B.. WHERE
a6d0: 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 R.rid IN $thes
a6e0: 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 et -- Restri
a6f0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 ct to revisions
a700: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
a710: 20 41 4e 44 20 20 20 20 52 2e 72 69 64 20 3d 20 AND R.rid =
a720: 42 2e 72 69 64 20 20 20 20 20 20 20 20 20 20 2d B.rid -
a730: 2d 20 53 65 6c 65 63 74 20 73 75 62 73 65 74 20 - Select subset
a740: 6f 66 20 62 72 61 6e 63 68 20 63 68 69 6c 64 72 of branch childr
a750: 65 6e 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 en.. AND B
a760: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 .rid IN $these
a770: 74 20 20 20 20 20 2d 2d 20 4c 6f 6f 70 0a 09 20 t -- Loop..
a780: 20 20 20 2d 2d 0a 09 20 20 20 20 55 4e 49 4f 4e --.. UNION
a790: 0a 09 20 20 20 20 2d 2d 20 28 34 29 20 43 68 69 .. -- (4) Chi
a7a0: 6c 64 20 6f 66 20 74 72 75 6e 6b 20 72 6f 6f 74 ld of trunk root
a7b0: 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 6c 61 successor of la
a7c0: 73 74 20 4e 54 44 42 20 6f 6e 20 74 72 75 6e 6b st NTDB on trunk
a7d0: 2e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e ... SELECT R.
a7e0: 72 69 64 2c 20 52 41 2e 63 68 69 6c 64 0a 09 20 rid, RA.child..
a7f0: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
a800: 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 20 52 on R, revision R
a810: 41 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e A.. WHERE R.
a820: 72 69 64 20 20 20 20 49 4e 20 24 74 68 65 73 65 rid IN $these
a830: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
a840: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
a850: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
a860: 41 4e 44 20 20 20 20 52 2e 69 73 64 65 66 61 75 AND R.isdefau
a870: 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d lt -
a880: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 4e 54 - Restrict to NT
a890: 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 DB.. AND R
a8a0: 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 .dbchild IS NOT
a8b0: 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c 61 NULL -- and la
a8c0: 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 6e st NTDB belongin
a8d0: 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 20 g to trunk..
a8e0: 41 4e 44 20 20 20 20 52 41 2e 72 69 64 20 3d 20 AND RA.rid =
a8f0: 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d R.dbchild -
a900: 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f - Go directly to
a910: 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 trunk root..
a920: 20 41 4e 44 20 20 20 20 52 41 2e 63 68 69 6c 64 AND RA.child
a930: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 IS NOT NULL
a940: 2d 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 -- Has primary c
a950: 68 69 6c 64 2e 0a 09 20 20 20 20 41 4e 44 20 20 hild... AND
a960: 20 20 52 41 2e 63 68 69 6c 64 20 49 4e 20 24 74 RA.child IN $t
a970: 68 65 73 65 74 20 20 20 20 20 2d 2d 20 4c 6f 6f heset -- Loo
a980: 70 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 p..}]]. }..
a990: 20 20 23 20 76 61 72 28 64 76 29 20 3d 20 64 69 # var(dv) = di
a9a0: 63 74 20 28 69 74 65 6d 20 2d 3e 20 6c 69 73 74 ct (item -> list
a9b0: 20 28 69 74 65 6d 29 29 2c 20 69 74 65 6d 20 20 (item)), item
a9c0: 3d 20 6c 69 73 74 20 28 74 79 70 65 20 69 64 29 = list (type id)
a9d0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
a9e0: 73 75 63 63 65 73 73 6f 72 73 20 7b 64 76 20 72 successors {dv r
a9f0: 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 evisions} {..upv
aa00: 61 72 20 31 20 24 64 76 20 64 65 70 65 6e 64 65 ar 1 $dv depende
aa10: 6e 63 69 65 73 0a 09 73 65 74 20 74 68 65 73 65 ncies..set these
aa20: 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 t ('[join $revis
aa30: 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 0a 09 ions {','}]')...
aa40: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 # The following
aa50: 63 61 73 65 73 20 73 70 65 63 69 66 79 20 77 68 cases specify wh
aa60: 65 6e 20 61 20 72 65 76 69 73 69 6f 6e 20 53 20 en a revision S
aa70: 69 73 20 61 20 73 75 63 63 65 73 73 6f 72 0a 09 is a successor..
aa80: 23 20 6f 66 20 61 20 72 65 76 69 73 69 6f 6e 20 # of a revision
aa90: 52 2e 20 45 61 63 68 20 6f 66 20 74 68 65 20 63 R. Each of the c
aaa0: 61 73 65 73 20 74 72 61 6e 73 6c 61 74 65 73 20 ases translates
aab0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 0a 09 23 20 74 into one of..# t
aac0: 68 65 20 62 72 61 6e 63 68 65 73 20 6f 66 20 74 he branches of t
aad0: 68 65 20 53 51 4c 20 55 4e 49 4f 4e 20 63 6f 6d he SQL UNION com
aae0: 69 6e 67 20 62 65 6c 6f 77 2e 0a 09 23 0a 09 23 ing below...#..#
aaf0: 20 28 31 29 20 53 20 63 61 6e 20 62 65 20 61 20 (1) S can be a
ab00: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 primary child of
ab10: 20 52 2c 20 69 2e 65 2e 20 69 6e 20 74 68 65 20 R, i.e. in the
ab20: 73 61 6d 65 20 4c 4f 44 2e 20 52 0a 09 23 20 20 same LOD. R..#
ab30: 20 20 20 72 65 66 65 72 65 6e 63 65 73 20 53 20 references S
ab40: 64 69 72 65 63 74 6c 79 2e 20 52 2e 63 68 69 6c directly. R.chil
ab50: 64 20 3d 20 53 28 2e 72 69 64 29 2c 20 69 66 20 d = S(.rid), if
ab60: 69 74 20 65 78 69 73 74 73 2e 0a 09 23 0a 09 23 it exists...#..#
ab70: 20 28 32 29 20 53 20 63 61 6e 20 62 65 20 61 20 (2) S can be a
ab80: 73 65 63 6f 6e 64 61 72 79 2c 20 69 2e 65 2e 20 secondary, i.e.
ab90: 62 72 61 6e 63 68 2c 20 63 68 69 6c 64 20 6f 66 branch, child of
aba0: 20 52 2e 20 48 65 72 65 20 74 68 65 0a 09 23 20 R. Here the..#
abb0: 20 20 20 20 6c 69 6e 6b 20 69 73 20 6d 61 64 65 link is made
abc0: 20 74 68 72 6f 75 67 68 20 74 68 65 20 68 65 6c through the hel
abd0: 70 65 72 20 74 61 62 6c 65 0a 09 23 20 20 20 20 per table..#
abe0: 20 52 45 56 49 53 49 4f 4e 42 52 41 4e 43 48 43 REVISIONBRANCHC
abf0: 48 49 4c 44 52 45 4e 2e 20 52 2e 72 69 64 20 2d HILDREN. R.rid -
ac00: 3e 20 52 42 43 2e 72 69 64 2c 20 52 42 43 2e 62 > RBC.rid, RBC.b
ac10: 72 69 64 20 3d 0a 09 23 20 20 20 20 20 53 28 2e rid =..# S(.
ac20: 72 69 64 29 0a 09 23 0a 09 23 20 28 33 29 20 4f rid)..#..# (3) O
ac30: 72 69 67 69 6e 61 6c 6c 79 20 74 68 69 73 20 75 riginally this u
ac40: 73 65 20 63 61 73 65 20 64 65 66 69 6e 65 64 20 se case defined
ac50: 74 68 65 20 72 6f 6f 74 20 6f 66 20 61 20 64 65 the root of a de
ac60: 74 61 63 68 65 64 0a 09 23 20 20 20 20 20 4e 54 tached..# NT
ac70: 44 42 20 61 73 20 74 68 65 20 73 75 63 63 65 73 DB as the succes
ac80: 73 6f 72 20 6f 66 20 74 68 65 20 74 72 75 6e 6b sor of the trunk
ac90: 20 72 6f 6f 74 2e 20 54 68 69 73 20 6c 65 61 64 root. This lead
aca0: 73 20 74 6f 20 61 0a 09 23 20 20 20 20 20 62 61 s to a..# ba
acb0: 64 20 74 61 6e 67 6c 65 20 6c 61 74 65 72 20 6f d tangle later o
acc0: 6e 2e 20 57 69 74 68 20 61 20 64 65 74 61 63 68 n. With a detach
acd0: 65 64 20 4e 54 44 42 20 74 68 65 20 6f 72 69 67 ed NTDB the orig
ace0: 69 6e 61 6c 0a 09 23 20 20 20 20 20 74 72 75 6e inal..# trun
acf0: 6b 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 k root revision
ad00: 77 61 73 20 72 65 6d 6f 76 65 64 20 61 73 20 69 was removed as i
ad10: 72 72 65 6c 65 76 61 6e 74 2c 20 61 6c 6c 6f 77 rrelevant, allow
ad20: 69 6e 67 0a 09 23 20 20 20 20 20 74 68 65 20 6e ing..# the n
ad30: 6f 6d 69 6e 61 6c 20 72 6f 6f 74 20 74 6f 20 62 ominal root to b
ad40: 65 20 6c 61 74 65 72 20 69 6e 20 74 69 6d 65 20 e later in time
ad50: 74 68 61 6e 20 74 68 65 20 4e 54 44 42 0a 09 23 than the NTDB..#
ad60: 20 20 20 20 20 72 6f 6f 74 2e 20 4e 6f 77 20 73 root. Now s
ad70: 65 74 74 69 6e 67 20 74 68 69 73 20 64 65 70 65 etting this depe
ad80: 6e 64 65 6e 63 79 20 77 69 6c 6c 20 62 65 20 62 ndency will be b
ad90: 61 63 6b 77 61 72 64 20 69 6e 0a 09 23 20 20 20 ackward in..#
ada0: 20 20 74 69 6d 65 2e 20 52 45 4d 4f 56 45 44 2e time. REMOVED.
adb0: 0a 09 23 0a 09 23 20 28 34 29 20 49 66 20 52 20 ..#..# (4) If R
adc0: 69 73 20 74 68 65 20 6c 61 73 74 20 6f 66 20 74 is the last of t
add0: 68 65 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e he NTDB revision
ade0: 73 20 77 68 69 63 68 20 62 65 6c 6f 6e 67 20 74 s which belong t
adf0: 6f 0a 09 23 20 20 20 20 20 74 68 65 20 74 72 75 o..# the tru
ae00: 6e 6b 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 nk, then the pri
ae10: 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 20 74 68 mary child of th
ae20: 65 20 74 72 75 6e 6b 20 72 6f 6f 74 20 28 74 68 e trunk root (th
ae30: 65 0a 09 23 20 20 20 20 20 27 31 2e 32 27 20 72 e..# '1.2' r
ae40: 65 76 69 73 69 6f 6e 29 20 69 73 20 61 20 73 75 evision) is a su
ae50: 63 63 65 73 73 6f 72 2c 20 69 66 20 69 74 20 65 ccessor, if it e
ae60: 78 69 73 74 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 xists....# Note
ae70: 74 68 61 74 20 74 68 65 20 62 72 61 6e 63 68 65 that the branche
ae80: 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 74 s spawned from t
ae90: 68 65 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e he revisions, an
aea0: 64 20 74 68 65 0a 09 23 20 74 61 67 73 20 61 73 d the..# tags as
aeb0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 sociated with th
aec0: 65 6d 20 61 72 65 20 73 75 63 63 65 73 73 6f 72 em are successor
aed0: 73 20 61 73 20 77 65 6c 6c 2e 0a 0a 09 73 74 61 s as well....sta
aee0: 74 65 20 66 6f 72 65 61 63 68 72 6f 77 20 5b 73 te foreachrow [s
aef0: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
af00: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
af10: 7b 0a 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 {. -- (1) Pri
af20: 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 mary child..
af30: 53 45 4c 45 43 54 20 52 2e 72 69 64 20 41 53 20 SELECT R.rid AS
af40: 78 72 69 64 2c 20 52 2e 63 68 69 6c 64 20 41 53 xrid, R.child AS
af50: 20 78 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f xchild.. FRO
af60: 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 M revision R..
af70: 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 WHERE R.rid
af80: 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 IN $theset
af90: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
afa0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e revisions of in
afb0: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 terest.. AND
afc0: 20 20 20 52 2e 63 68 69 6c 64 20 49 53 20 4e 4f R.child IS NO
afd0: 54 20 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 T NULL -- Has
afe0: 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 20 primary child.
aff0: 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 UNION. --
b000: 28 32 29 20 53 65 63 6f 6e 64 61 72 79 20 28 62 (2) Secondary (b
b010: 72 61 6e 63 68 29 20 63 68 69 6c 64 72 65 6e 0a ranch) children.
b020: 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 . SELECT R.ri
b030: 64 20 41 53 20 78 72 69 64 2c 20 42 2e 62 72 69 d AS xrid, B.bri
b040: 64 20 41 53 20 78 63 68 69 6c 64 0a 09 20 20 20 d AS xchild..
b050: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
b060: 20 52 2c 20 72 65 76 69 73 69 6f 6e 62 72 61 6e R, revisionbran
b070: 63 68 63 68 69 6c 64 72 65 6e 20 42 0a 09 20 20 chchildren B..
b080: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 WHERE R.rid
b090: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
b0a0: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 -- Restrict to r
b0b0: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 evisions of inte
b0c0: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
b0d0: 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 64 20 20 R.rid = B.rid
b0e0: 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 -- Selec
b0f0: 74 20 73 75 62 73 65 74 20 6f 66 20 62 72 61 6e t subset of bran
b100: 63 68 20 63 68 69 6c 64 72 65 6e 0a 20 20 20 20 ch children.
b110: 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 34 29 UNION. -- (4)
b120: 20 43 68 69 6c 64 20 6f 66 20 74 72 75 6e 6b 20 Child of trunk
b130: 72 6f 6f 74 20 73 75 63 63 65 73 73 6f 72 20 6f root successor o
b140: 66 20 6c 61 73 74 20 4e 54 44 42 20 6f 6e 20 74 f last NTDB on t
b150: 72 75 6e 6b 2e 0a 09 20 20 20 20 53 45 4c 45 43 runk... SELEC
b160: 54 20 52 2e 72 69 64 20 41 53 20 78 72 69 64 2c T R.rid AS xrid,
b170: 20 52 41 2e 63 68 69 6c 64 20 41 53 20 78 63 68 RA.child AS xch
b180: 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 72 65 ild.. FROM re
b190: 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 vision R, revisi
b1a0: 6f 6e 20 52 41 0a 09 20 20 20 20 57 48 45 52 45 on RA.. WHERE
b1b0: 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 R.rid IN $the
b1c0: 73 65 74 20 20 20 20 20 20 2d 2d 20 52 65 73 74 set -- Rest
b1d0: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e rict to revision
b1e0: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
b1f0: 20 20 20 41 4e 44 20 20 20 52 2e 69 73 64 65 66 AND R.isdef
b200: 61 75 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 ault
b210: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
b220: 4e 54 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 NTDB.. AND
b230: 52 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 R.dbchild IS NOT
b240: 20 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c NULL -- and l
b250: 61 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 ast NTDB belongi
b260: 6e 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 ng to trunk..
b270: 20 41 4e 44 20 20 20 52 41 2e 72 69 64 20 3d 20 AND RA.rid =
b280: 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d R.dbchild -
b290: 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f - Go directly to
b2a0: 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 trunk root..
b2b0: 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20 AND RA.child
b2c0: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d IS NOT NULL -
b2d0: 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 - Has primary ch
b2e0: 69 6c 64 2e 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 ild...}] {..
b2f0: 23 20 43 6f 6e 73 69 64 65 72 20 6d 6f 76 69 6e # Consider movin
b300: 67 20 74 68 69 73 20 74 6f 20 74 68 65 20 69 6e g this to the in
b310: 74 65 67 72 69 74 79 20 6d 6f 64 75 6c 65 2e 0a tegrity module..
b320: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 . integrity a
b330: 73 73 65 72 74 20 7b 24 78 72 69 64 20 21 3d 20 ssert {$xrid !=
b340: 24 78 63 68 69 6c 64 7d 20 7b 52 65 76 69 73 69 $xchild} {Revisi
b350: 6f 6e 20 24 78 72 69 64 20 64 65 70 65 6e 64 73 on $xrid depends
b360: 20 6f 6e 20 69 74 73 65 6c 66 2e 7d 0a 09 20 20 on itself.}..
b370: 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 lappend depend
b380: 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 72 65 76 encies([list rev
b390: 20 24 78 72 69 64 5d 29 20 5b 6c 69 73 74 20 72 $xrid]) [list r
b3a0: 65 76 20 24 78 63 68 69 6c 64 5d 0a 09 7d 0a 09 ev $xchild]..}..
b3b0: 73 74 61 74 65 20 66 6f 72 65 61 63 68 72 6f 77 state foreachrow
b3c0: 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 [subst -nocomma
b3d0: 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 nds -nobackslash
b3e0: 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 es {.. SELECT
b3f0: 20 52 2e 72 69 64 20 41 53 20 78 72 69 64 2c 20 R.rid AS xrid,
b400: 54 2e 74 69 64 20 41 53 20 78 63 68 69 6c 64 0a T.tid AS xchild.
b410: 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 . FROM revi
b420: 73 69 6f 6e 20 52 2c 20 74 61 67 20 54 0a 09 20 sion R, tag T..
b430: 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 WHERE R.rid
b440: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 IN $theset
b450: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
b460: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
b470: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
b480: 20 20 54 2e 72 65 76 20 3d 20 52 2e 72 69 64 20 T.rev = R.rid
b490: 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 -- Sele
b4a0: 63 74 20 74 61 67 73 20 61 74 74 61 63 68 65 64 ct tags attached
b4b0: 20 74 6f 20 74 68 65 6d 0a 09 7d 5d 20 7b 0a 09 to them..}] {..
b4c0: 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65 lappend depe
b4d0: 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 72 ndencies([list r
b4e0: 65 76 20 24 78 72 69 64 5d 29 20 5b 6c 69 73 74 ev $xrid]) [list
b4f0: 20 73 79 6d 3a 3a 74 61 67 20 24 78 63 68 69 6c sym::tag $xchil
b500: 64 5d 0a 09 7d 0a 09 73 74 61 74 65 20 66 6f 72 d]..}..state for
b510: 65 61 63 68 72 6f 77 20 5b 73 75 62 73 74 20 2d eachrow [subst -
b520: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 nocommands -noba
b530: 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 ckslashes {..
b540: 20 53 45 4c 45 43 54 20 52 2e 72 69 64 20 41 53 SELECT R.rid AS
b550: 20 78 72 69 64 2c 20 42 2e 62 69 64 20 41 53 20 xrid, B.bid AS
b560: 78 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d xchild.. FROM
b570: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 62 revision R, b
b580: 72 61 6e 63 68 20 42 0a 09 20 20 20 20 57 48 45 ranch B.. WHE
b590: 52 45 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68 RE R.rid IN $th
b5a0: 65 73 65 74 20 20 20 20 20 20 20 2d 2d 20 52 65 eset -- Re
b5b0: 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 strict to revisi
b5c0: 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a ons of interest.
b5d0: 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e 72 6f . AND B.ro
b5e0: 6f 74 20 3d 20 52 2e 72 69 64 20 20 20 20 20 20 ot = R.rid
b5f0: 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 62 72 61 -- Select bra
b600: 6e 63 68 65 73 20 61 74 74 61 63 68 65 64 20 74 nches attached t
b610: 6f 20 74 68 65 6d 0a 09 7d 5d 20 7b 0a 09 20 20 o them..}] {..
b620: 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 lappend depend
b630: 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 72 65 76 encies([list rev
b640: 20 24 78 72 69 64 5d 29 20 5b 6c 69 73 74 20 73 $xrid]) [list s
b650: 79 6d 3a 3a 62 72 61 6e 63 68 20 24 78 63 68 69 ym::branch $xchi
b660: 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 ld]..}..return.
b670: 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 }.. # resu
b680: 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e 67 lt = list (chang
b690: 65 73 65 74 2d 69 64 29 0a 20 20 20 20 74 79 70 eset-id). typ
b6a0: 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 63 65 emethod cs_succe
b6b0: 73 73 6f 72 73 20 7b 72 65 76 69 73 69 6f 6e 73 ssors {revisions
b6c0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 23 20 54 68 } {. # Th
b6d0: 69 73 20 69 73 20 61 20 76 61 72 69 61 6e 74 20 is is a variant
b6e0: 6f 66 20 27 73 75 63 63 65 73 73 6f 72 73 27 20 of 'successors'
b6f0: 77 68 69 63 68 20 6d 61 70 73 20 74 68 65 20 6c which maps the l
b700: 6f 77 2d 6c 65 76 65 6c 0a 20 20 20 20 20 20 20 ow-level.
b710: 20 23 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 # data directly
b720: 20 74 6f 20 74 68 65 20 61 73 73 6f 63 69 61 74 to the associat
b730: 65 64 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49 ed changesets. I
b740: 2e 65 2e 20 69 6e 73 74 65 61 64 0a 20 20 20 20 .e. instead.
b750: 20 20 20 20 23 20 6d 69 6c 6c 69 6f 6e 73 20 6f # millions o
b760: 66 20 64 65 70 65 6e 64 65 6e 63 79 20 70 61 69 f dependency pai
b770: 72 73 20 28 69 6e 20 65 78 74 72 65 6d 65 20 63 rs (in extreme c
b780: 61 73 65 73 20 28 45 78 61 6d 70 6c 65 3a 20 54 ases (Example: T
b790: 63 6c 0a 20 20 20 20 20 20 20 20 23 20 43 56 53 cl. # CVS
b7a0: 29 29 20 77 65 20 72 65 74 75 72 6e 20 61 20 76 )) we return a v
b7b0: 65 72 79 20 73 68 6f 72 74 20 61 6e 64 20 6d 75 ery short and mu
b7c0: 63 68 20 6d 6f 72 65 20 6d 61 6e 61 67 65 61 62 ch more manageab
b7d0: 6c 65 20 6c 69 73 74 0a 20 20 20 20 20 20 20 20 le list.
b7e0: 23 20 6f 66 20 63 68 61 6e 67 65 73 65 74 73 2e # of changesets.
b7f0: 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 ...set theset ('
b800: 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 [join $revisions
b810: 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 {','}]')..retur
b820: 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 n [state run [su
b830: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
b840: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
b850: 0a 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d . -- (1) Prim
b860: 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 ary child.. S
b870: 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 ELECT C.cid..
b880: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
b890: 20 52 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 R, csitem CI, c
b8a0: 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 hangeset C..
b8b0: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 WHERE R.rid I
b8c0: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
b8d0: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
b8e0: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
b8f0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 st.. AND R
b900: 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55 .child IS NOT NU
b910: 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69 LL -- Has pri
b920: 6d 61 72 79 20 63 68 69 6c 64 0a 20 20 20 20 20 mary child.
b930: 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 49 AND CI
b940: 2e 69 69 64 20 3d 20 52 2e 63 68 69 6c 64 20 20 .iid = R.child
b950: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 61 -- Select a
b960: 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 ll changesets.
b970: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
b980: 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 20 C.cid = CI.cid
b990: 20 20 20 20 20 20 20 20 2d 2d 20 63 6f 6e 74 61 -- conta
b9a0: 69 6e 69 6e 67 20 74 68 65 20 70 72 69 6d 61 72 ining the primar
b9b0: 79 20 63 68 69 6c 64 0a 20 20 20 20 20 20 20 20 y child.
b9c0: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 AND C.typ
b9d0: 65 20 3d 20 30 20 20 20 20 20 20 20 20 20 20 20 e = 0
b9e0: 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 20 72 -- which are r
b9f0: 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 evision changese
ba00: 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 ts. UNION.
ba10: 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 61 72 -- (2) Secondar
ba20: 79 20 28 62 72 61 6e 63 68 29 20 63 68 69 6c 64 y (branch) child
ba30: 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 ren.. SELECT
ba40: 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 C.cid.. FROM
ba50: 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 revision R, re
ba60: 76 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c visionbranchchil
ba70: 64 72 65 6e 20 42 2c 20 63 73 69 74 65 6d 20 43 dren B, csitem C
ba80: 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 0a 09 I, changeset C..
ba90: 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 WHERE R.rid
baa0: 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 IN $theset
bab0: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
bac0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e revisions of in
bad0: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 terest.. AND
bae0: 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 64 R.rid = B.rid
baf0: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c -- Sel
bb00: 65 63 74 20 73 75 62 73 65 74 20 6f 66 20 62 72 ect subset of br
bb10: 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a 20 20 anch children.
bb20: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
bb30: 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 72 69 64 CI.iid = B.brid
bb40: 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 -- Selec
bb50: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 t all changesets
bb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
bb70: 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 C.cid = CI.c
bb80: 69 64 09 20 20 2d 2d 20 63 6f 6e 74 61 69 6e 69 id. -- containi
bb90: 6e 67 20 74 68 65 20 62 72 61 6e 63 68 0a 20 20 ng the branch.
bba0: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
bbb0: 20 43 2e 74 79 70 65 20 3d 20 30 09 09 20 20 2d C.type = 0.. -
bbc0: 2d 20 77 68 69 63 68 20 61 72 65 20 72 65 76 69 - which are revi
bbd0: 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 0a sion changesets.
bbe0: 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d UNION. --
bbf0: 20 28 34 29 20 43 68 69 6c 64 20 6f 66 20 74 72 (4) Child of tr
bc00: 75 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 73 unk root success
bc10: 6f 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 20 or of last NTDB
bc20: 6f 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53 on trunk... S
bc30: 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 ELECT C.cid..
bc40: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
bc50: 20 52 2c 20 72 65 76 69 73 69 6f 6e 20 52 41 2c R, revision RA,
bc60: 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e csitem CI, chan
bc70: 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 45 geset C.. WHE
bc80: 52 45 20 20 52 2e 72 69 64 20 20 20 49 4e 20 24 RE R.rid IN $
bc90: 74 68 65 73 65 74 20 20 20 20 20 20 2d 2d 20 52 theset -- R
bca0: 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 estrict to revis
bcb0: 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 ions of interest
bcc0: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e 69 .. AND R.i
bcd0: 73 64 65 66 61 75 6c 74 20 20 20 20 20 20 20 20 sdefault
bce0: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
bcf0: 20 74 6f 20 4e 54 44 42 0a 09 20 20 20 20 41 4e to NTDB.. AN
bd00: 44 20 20 20 20 52 2e 64 62 63 68 69 6c 64 20 49 D R.dbchild I
bd10: 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 2d 2d 20 S NOT NULL --
bd20: 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 20 62 65 and last NTDB be
bd30: 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 75 6e 6b longing to trunk
bd40: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 41 2e .. AND RA.
bd50: 72 69 64 20 3d 20 52 2e 64 62 63 68 69 6c 64 20 rid = R.dbchild
bd60: 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 72 65 63 -- Go direc
bd70: 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 72 6f 6f tly to trunk roo
bd80: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 41 t.. AND RA
bd90: 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55 .child IS NOT NU
bda0: 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69 LL -- Has pri
bdb0: 6d 61 72 79 20 63 68 69 6c 64 2e 0a 20 20 20 20 mary child..
bdc0: 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 AND C
bdd0: 49 2e 69 69 64 20 3d 20 52 41 2e 63 68 69 6c 64 I.iid = RA.child
bde0: 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 -- Select
bdf0: 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a all changesets.
be00: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
be10: 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 C.cid = CI.ci
be20: 64 09 20 20 20 2d 2d 20 63 6f 6e 74 61 69 6e 69 d. -- containi
be30: 6e 67 20 74 68 65 20 70 72 69 6d 61 72 79 20 63 ng the primary c
be40: 68 69 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 hild.
be50: 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d AND C.type =
be60: 20 30 09 09 20 20 20 2d 2d 20 77 68 69 63 68 20 0.. -- which
be70: 61 72 65 20 72 65 76 69 73 69 6f 6e 20 63 68 61 are revision cha
be80: 6e 67 65 73 65 74 73 0a 20 20 20 20 55 4e 49 4f ngesets. UNIO
be90: 4e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e N.. SELECT C.
bea0: 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 cid.. FROM
beb0: 72 65 76 69 73 69 6f 6e 20 52 2c 20 74 61 67 20 revision R, tag
bec0: 54 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 T, csitem CI, ch
bed0: 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 angeset C.. W
bee0: 48 45 52 45 20 20 52 2e 72 69 64 20 69 6e 20 24 HERE R.rid in $
bef0: 74 68 65 73 65 74 20 20 20 20 20 20 20 20 2d 2d theset --
bf00: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
bf10: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
bf20: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 54 st.. AND T
bf30: 2e 72 65 76 20 3d 20 52 2e 72 69 64 09 20 20 20 .rev = R.rid.
bf40: 2d 2d 20 53 65 6c 65 63 74 20 74 61 67 73 20 61 -- Select tags a
bf50: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d 0a ttached to them.
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
bf70: 20 20 20 43 49 2e 69 69 64 20 3d 20 54 2e 74 69 CI.iid = T.ti
bf80: 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 d -- Se
bf90: 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 lect all changes
bfa0: 65 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 ets.
bfb0: 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 AND C.cid = C
bfc0: 49 2e 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e 74 I.cid. -- cont
bfd0: 61 69 6e 69 6e 67 20 74 68 65 20 74 61 67 73 0a aining the tags.
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
bff0: 20 20 20 43 2e 74 79 70 65 20 3d 20 31 09 09 20 C.type = 1..
c000: 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 20 74 -- which are t
c010: 61 67 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 ag changesets.
c020: 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 45 4c UNION.. SEL
c030: 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 46 ECT C.cid.. F
c040: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R
c050: 2c 20 62 72 61 6e 63 68 20 42 2c 20 63 73 69 74 , branch B, csit
c060: 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 em CI, changeset
c070: 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 C.. WHERE R
c080: 2e 72 69 64 20 69 6e 20 24 74 68 65 73 65 74 20 .rid in $theset
c090: 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 -- Restri
c0a0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 ct to revisions
c0b0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
c0c0: 20 41 4e 44 20 20 20 20 42 2e 72 6f 6f 74 20 3d AND B.root =
c0d0: 20 52 2e 72 69 64 09 20 20 20 2d 2d 20 53 65 6c R.rid. -- Sel
c0e0: 65 63 74 20 62 72 61 6e 63 68 65 73 20 61 74 74 ect branches att
c0f0: 61 63 68 65 64 20 74 6f 20 74 68 65 6d 0a 20 20 ached to them.
c100: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
c110: 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 69 64 20 CI.iid = B.bid
c120: 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 -- Sele
c130: 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 ct all changeset
c140: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e s. AN
c150: 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e D C.cid = CI.
c160: 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e 74 61 69 cid. -- contai
c170: 6e 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 65 ning the branche
c180: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e s. AN
c190: 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 32 09 D C.type = 2.
c1a0: 09 20 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 . -- which are
c1b0: 20 62 72 61 6e 63 68 20 63 68 61 6e 67 65 73 65 branch changese
c1c0: 74 73 0a 09 7d 5d 5d 0a 0a 09 23 20 52 65 67 61 ts..}]]...# Rega
c1d0: 72 64 69 6e 67 20 72 65 76 20 2d 3e 20 62 72 61 rding rev -> bra
c1e0: 6e 63 68 7c 74 61 67 2c 20 77 65 20 63 6f 75 6c nch|tag, we coul
c1f0: 64 20 63 6f 6e 73 69 64 65 72 20 6c 6f 6f 6b 69 d consider looki
c200: 6e 67 20 61 74 0a 09 23 20 74 68 65 20 73 79 6d ng at..# the sym
c210: 62 6f 6c 20 6f 66 20 74 68 65 20 62 72 61 6e 63 bol of the branc
c220: 68 7c 74 61 67 2c 20 69 74 73 20 6c 6f 64 2d 73 h|tag, its lod-s
c230: 79 6d 62 6f 6c 2c 20 61 6e 64 20 74 68 65 0a 09 ymbol, and the..
c240: 23 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 # revisions on t
c250: 68 61 74 20 6c 6f 64 2c 20 62 75 74 20 64 6f 6e hat lod, but don
c260: 27 74 2e 20 42 65 63 61 75 73 65 20 69 74 20 69 't. Because it i
c270: 73 20 6e 6f 74 20 65 78 61 63 74 0a 09 23 20 65 s not exact..# e
c280: 6e 6f 75 67 68 2c 20 74 68 65 20 62 72 61 6e 63 nough, the branc
c290: 68 7c 74 61 67 20 77 6f 75 6c 64 20 64 65 70 65 h|tag would depe
c2a0: 6e 64 20 6f 6e 20 72 65 76 69 73 69 6f 6e 73 20 nd on revisions
c2b0: 63 6f 6d 69 6e 67 0a 09 23 20 61 66 74 65 72 20 coming..# after
c2c0: 69 74 73 20 63 72 65 61 74 69 6f 6e 20 6f 6e 20 its creation on
c2d0: 74 68 65 20 70 61 72 65 6e 74 61 6c 20 6c 6f 64 the parental lod
c2e0: 2e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 .. }.. # r
c2f0: 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f 6c 20 6e esult = symbol n
c300: 61 6d 65 0a 20 20 20 20 74 79 70 65 6d 65 74 68 ame. typemeth
c310: 6f 64 20 63 73 5f 6c 6f 64 20 7b 6d 65 74 61 69 od cs_lod {metai
c320: 64 20 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 d revisions} {..
c330: 23 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65 # Determines the
c340: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 79 6d name of the sym
c350: 62 6f 6c 20 77 68 69 63 68 20 69 73 20 74 68 65 bol which is the
c360: 20 6c 69 6e 65 20 6f 66 0a 09 23 20 64 65 76 65 line of..# deve
c370: 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 lopment for the
c380: 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 61 20 63 revisions in a c
c390: 68 61 6e 67 65 73 65 74 2e 20 54 68 65 0a 09 23 hangeset. The..#
c3a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 information in
c3b0: 74 68 65 20 6d 65 74 61 20 64 61 74 61 20 72 65 the meta data re
c3c0: 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 ferenced by the
c3d0: 73 6f 75 72 63 65 20 6d 65 74 61 69 64 0a 09 23 source metaid..#
c3e0: 20 69 73 20 6f 75 74 20 6f 66 20 64 61 74 65 20 is out of date
c3f0: 62 79 20 74 68 65 20 74 69 6d 65 20 77 65 20 63 by the time we c
c400: 6f 6d 65 20 68 65 72 65 20 28 73 69 6e 63 65 20 ome here (since
c410: 70 61 73 73 0a 09 23 20 46 69 6c 74 65 72 53 79 pass..# FilterSy
c420: 6d 62 6f 6c 73 29 2c 20 73 6f 20 69 74 20 63 61 mbols), so it ca
c430: 6e 6e 6f 74 20 62 65 20 75 73 65 64 2e 20 53 65 nnot be used. Se
c440: 65 20 74 68 65 20 6d 65 74 68 6f 64 20 27 72 75 e the method 'ru
c450: 6e 27 0a 09 23 20 69 6e 20 66 69 6c 65 20 22 63 n'..# in file "c
c460: 32 66 5f 70 66 69 6c 74 65 72 73 79 6d 2e 74 63 2f_pfiltersym.tc
c470: 6c 22 20 66 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d l" for more comm
c480: 65 6e 74 61 72 79 20 6f 6e 20 74 68 69 73 2e 0a entary on this..
c490: 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b ..set theset ('[
c4a0: 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 join $revisions
c4b0: 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e {','}]')..return
c4c0: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
c4d0: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
c4e0: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
c4f0: 09 20 20 20 20 53 45 4c 45 43 54 0a 09 20 20 20 . SELECT..
c500: 20 44 49 53 54 49 4e 43 54 20 4c 2e 6e 61 6d 65 DISTINCT L.name
c510: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 .. FROM rev
c520: 69 73 69 6f 6e 20 52 2c 20 73 79 6d 62 6f 6c 20 ision R, symbol
c530: 4c 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e L.. WHERE R.
c540: 72 69 64 20 69 6e 20 24 74 68 65 73 65 74 20 20 rid in $theset
c550: 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 -- Restric
c560: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
c570: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
c580: 41 4e 44 20 20 20 20 4c 2e 73 69 64 20 3d 20 52 AND L.sid = R
c590: 2e 6c 6f 64 20 20 20 20 20 20 20 20 20 20 20 2d .lod -
c5a0: 2d 20 47 65 74 20 6c 6f 64 20 73 79 6d 62 6f 6c - Get lod symbol
c5b0: 20 6f 66 20 72 65 76 69 73 69 6f 6e 0a 09 7d 5d of revision..}]
c5c0: 5d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 ]. }.}..# # #
c5d0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
c5e0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
c5f0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
c600: 23 23 23 23 23 23 23 23 0a 23 23 20 48 65 6c 70 ########.## Help
c610: 65 72 20 73 69 6e 67 6c 65 74 6f 6e 2e 20 43 6f er singleton. Co
c620: 6d 6d 61 6e 64 73 20 66 6f 72 20 74 61 67 20 73 mmands for tag s
c630: 79 6d 62 6f 6c 20 63 68 61 6e 67 65 73 65 74 73 ymbol changesets
c640: 2e 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a ...snit::type ::
c650: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
c660: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 rt::cvs::project
c670: 3a 3a 72 65 76 3a 3a 73 79 6d 3a 3a 74 61 67 20 ::rev::sym::tag
c680: 7b 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 {. typemethod
c690: 20 62 79 72 65 76 69 73 69 6f 6e 20 7b 7d 20 7b byrevision {} {
c6a0: 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20 return 0 }.
c6b0: 74 79 70 65 6d 65 74 68 6f 64 20 62 79 73 79 6d typemethod bysym
c6c0: 62 6f 6c 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 bol {} { retur
c6d0: 6e 20 31 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 n 1 }. typeme
c6e0: 74 68 6f 64 20 69 73 74 61 67 20 20 20 20 20 20 thod istag
c6f0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 7d 0a {} { return 1 }.
c700: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 typemethod i
c710: 73 62 72 61 6e 63 68 20 20 20 7b 7d 20 7b 20 72 sbranch {} { r
c720: 65 74 75 72 6e 20 30 20 7d 0a 0a 20 20 20 20 74 eturn 0 }.. t
c730: 79 70 65 6d 65 74 68 6f 64 20 73 74 72 20 7b 74 ypemethod str {t
c740: 61 67 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c ag} {..struct::l
c750: 69 73 74 20 61 73 73 69 67 6e 20 5b 73 74 61 74 ist assign [stat
c760: 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c e run {.. SEL
c770: 45 43 54 20 53 2e 6e 61 6d 65 2c 20 46 2e 6e 61 ECT S.name, F.na
c780: 6d 65 2c 20 50 2e 6e 61 6d 65 0a 09 20 20 20 20 me, P.name..
c790: 46 52 4f 4d 20 20 20 74 61 67 20 54 2c 20 73 79 FROM tag T, sy
c7a0: 6d 62 6f 6c 20 53 2c 20 66 69 6c 65 20 46 2c 20 mbol S, file F,
c7b0: 70 72 6f 6a 65 63 74 20 50 0a 09 20 20 20 20 57 project P.. W
c7c0: 48 45 52 45 20 20 54 2e 74 69 64 20 3d 20 24 74 HERE T.tid = $t
c7d0: 61 67 20 20 20 2d 2d 20 46 69 6e 64 20 73 70 65 ag -- Find spe
c7e0: 63 69 66 69 65 64 20 74 61 67 0a 09 20 20 20 20 cified tag..
c7f0: 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d 20 54 AND F.fid = T
c800: 2e 66 69 64 20 20 2d 2d 20 47 65 74 20 66 69 6c .fid -- Get fil
c810: 65 20 6f 66 20 74 61 67 0a 09 20 20 20 20 41 4e e of tag.. AN
c820: 44 20 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70 D P.pid = F.p
c830: 69 64 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65 id -- Get proje
c840: 63 74 20 6f 66 20 66 69 6c 65 0a 09 20 20 20 20 ct of file..
c850: 41 4e 44 20 20 20 20 53 2e 73 69 64 20 3d 20 54 AND S.sid = T
c860: 2e 73 69 64 20 20 2d 2d 20 47 65 74 20 73 79 6d .sid -- Get sym
c870: 62 6f 6c 20 6f 66 20 74 61 67 0a 09 7d 5d 20 73 bol of tag..}] s
c880: 6e 61 6d 65 20 66 6e 61 6d 65 20 70 6e 61 6d 65 name fname pname
c890: 0a 09 72 65 74 75 72 6e 20 22 24 70 6e 61 6d 65 ..return "$pname
c8a0: 2f 54 27 24 7b 73 6e 61 6d 65 7d 27 3a 3a 24 66 /T'${sname}'::$f
c8b0: 6e 61 6d 65 22 0a 20 20 20 20 7d 0a 0a 20 20 20 name". }..
c8c0: 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 73 74 # result = list
c8d0: 20 28 6d 69 6e 74 69 6d 65 2c 20 6d 61 78 74 69 (mintime, maxti
c8e0: 6d 65 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 me). typemeth
c8f0: 6f 64 20 74 69 6d 65 72 61 6e 67 65 20 7b 74 61 od timerange {ta
c900: 67 73 7d 20 7b 0a 09 23 20 54 68 65 20 72 61 6e gs} {..# The ran
c910: 67 65 20 69 73 20 64 65 66 69 6e 65 64 20 61 73 ge is defined as
c920: 20 74 68 65 20 72 61 6e 67 65 20 6f 66 20 74 68 the range of th
c930: 65 20 72 65 76 69 73 69 6f 6e 73 20 74 68 65 20 e revisions the
c940: 74 61 67 73 0a 09 23 20 61 72 65 20 61 74 74 61 tags..# are atta
c950: 63 68 65 64 20 74 6f 2e 0a 0a 09 73 65 74 20 74 ched to....set t
c960: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 74 heset ('[join $t
c970: 61 67 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 ags {','}]')..re
c980: 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 turn [state run
c990: 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e [subst -nocomman
c9a0: 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 ds -nobackslashe
c9b0: 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 s {.. SELECT
c9c0: 4d 49 4e 28 52 2e 64 61 74 65 29 2c 20 4d 41 58 MIN(R.date), MAX
c9d0: 28 52 2e 64 61 74 65 29 0a 09 20 20 20 20 46 52 (R.date).. FR
c9e0: 4f 4d 20 20 20 74 61 67 20 54 2c 20 72 65 76 69 OM tag T, revi
c9f0: 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 sion R.. WHER
ca00: 45 20 20 54 2e 74 69 64 20 49 4e 20 24 74 68 65 E T.tid IN $the
ca10: 73 65 74 20 20 2d 2d 20 52 65 73 74 72 69 63 74 set -- Restrict
ca20: 20 74 6f 20 74 61 67 73 20 6f 66 20 69 6e 74 65 to tags of inte
ca30: 72 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 rest.
ca40: 20 41 4e 44 20 20 20 20 52 2e 72 69 64 20 3d 20 AND R.rid =
ca50: 54 2e 72 65 76 20 20 20 20 20 2d 2d 20 53 65 6c T.rev -- Sel
ca60: 65 63 74 20 74 61 67 20 70 61 72 65 6e 74 20 72 ect tag parent r
ca70: 65 76 69 73 69 6f 6e 73 0a 09 7d 5d 5d 0a 20 20 evisions..}]].
ca80: 20 20 7d 0a 0a 20 20 20 20 23 20 76 61 72 28 64 }.. # var(d
ca90: 76 29 20 3d 20 64 69 63 74 20 28 69 74 65 6d 20 v) = dict (item
caa0: 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 29 2c -> list (item)),
cab0: 20 69 74 65 6d 20 20 3d 20 6c 69 73 74 20 28 74 item = list (t
cac0: 79 70 65 20 69 64 29 0a 20 20 20 20 74 79 70 65 ype id). type
cad0: 6d 65 74 68 6f 64 20 73 75 63 63 65 73 73 6f 72 method successor
cae0: 73 20 7b 64 76 20 74 61 67 73 7d 20 7b 0a 09 23 s {dv tags} {..#
caf0: 20 54 61 67 73 20 68 61 76 65 20 6e 6f 20 73 75 Tags have no su
cb00: 63 63 65 73 73 6f 72 73 2e 0a 09 72 65 74 75 72 ccessors...retur
cb10: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 n. }.. # r
cb20: 65 73 75 6c 74 20 3d 20 34 2d 6c 69 73 74 20 28 esult = 4-list (
cb30: 69 74 65 6d 74 79 70 65 20 69 74 65 6d 69 64 20 itemtype itemid
cb40: 6e 65 78 74 69 74 65 6d 74 79 70 65 20 6e 65 78 nextitemtype nex
cb50: 74 69 74 65 6d 69 64 20 2e 2e 2e 29 0a 20 20 20 titemid ...).
cb60: 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 6f 70 typemethod loop
cb70: 73 20 7b 74 61 67 73 7d 20 7b 0a 09 23 20 54 61 s {tags} {..# Ta
cb80: 67 73 20 68 61 76 65 20 6e 6f 20 73 75 63 63 65 gs have no succe
cb90: 73 73 6f 72 73 2c 20 74 68 65 72 65 66 6f 72 65 ssors, therefore
cba0: 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 6c 6f cannot cause lo
cbb0: 6f 70 73 0a 09 72 65 74 75 72 6e 20 7b 7d 0a 20 ops..return {}.
cbc0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 }.. # resu
cbd0: 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e 67 lt = list (chang
cbe0: 65 73 65 74 2d 69 64 29 0a 20 20 20 20 74 79 70 eset-id). typ
cbf0: 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 63 65 emethod cs_succe
cc00: 73 73 6f 72 73 20 7b 74 61 67 73 7d 20 7b 0a 09 ssors {tags} {..
cc10: 23 20 54 61 67 73 20 68 61 76 65 20 6e 6f 20 73 # Tags have no s
cc20: 75 63 63 65 73 73 6f 72 73 2e 0a 09 72 65 74 75 uccessors...retu
cc30: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
cc40: 72 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f 6c 20 result = symbol
cc50: 6e 61 6d 65 0a 20 20 20 20 74 79 70 65 6d 65 74 name. typemet
cc60: 68 6f 64 20 63 73 5f 6c 6f 64 20 7b 73 69 64 20 hod cs_lod {sid
cc70: 74 61 67 73 7d 20 7b 0a 09 23 20 44 65 74 65 72 tags} {..# Deter
cc80: 6d 69 6e 65 73 20 74 68 65 20 6e 61 6d 65 20 6f mines the name o
cc90: 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 77 68 69 f the symbol whi
cca0: 63 68 20 69 73 20 74 68 65 20 6c 69 6e 65 20 6f ch is the line o
ccb0: 66 0a 09 23 20 64 65 76 65 6c 6f 70 6d 65 6e 74 f..# development
ccc0: 20 66 6f 72 20 74 68 65 20 74 61 67 73 20 69 6e for the tags in
ccd0: 20 61 20 63 68 61 6e 67 65 73 65 74 2e 20 43 6f a changeset. Co
cce0: 6d 65 73 20 64 69 72 65 63 74 6c 79 20 66 72 6f mes directly fro
ccf0: 6d 0a 09 23 20 74 68 65 20 73 79 6d 62 6f 6c 20 m..# the symbol
cd00: 77 68 69 63 68 20 69 73 20 74 68 65 20 63 68 61 which is the cha
cd10: 6e 67 65 73 65 74 27 73 20 73 6f 75 72 63 65 20 ngeset's source
cd20: 61 6e 64 20 69 74 73 20 70 72 65 66 65 72 65 64 and its prefered
cd30: 0a 09 23 20 70 61 72 65 6e 74 2e 0a 0a 20 20 20 ..# parent...
cd40: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 74 61 return [sta
cd50: 74 65 20 72 75 6e 20 7b 0a 20 09 20 20 20 20 53 te run {. . S
cd60: 45 4c 45 43 54 20 50 2e 6e 61 6d 65 0a 09 20 20 ELECT P.name..
cd70: 20 20 46 52 4f 4d 20 70 72 65 66 65 72 65 64 70 FROM preferedp
cd80: 61 72 65 6e 74 20 53 50 2c 20 73 79 6d 62 6f 6c arent SP, symbol
cd90: 20 50 0a 09 20 20 20 20 57 48 45 52 45 20 53 50 P.. WHERE SP
cda0: 2e 73 69 64 20 3d 20 24 73 69 64 0a 09 20 20 20 .sid = $sid..
cdb0: 20 41 4e 44 20 20 20 50 2e 73 69 64 20 3d 20 53 AND P.sid = S
cdc0: 50 2e 70 69 64 0a 09 7d 5d 0a 20 20 20 20 7d 0a P.pid..}]. }.
cdd0: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 }..# # ## ### ##
cde0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
cdf0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 ########## #####
ce00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
ce10: 0a 23 23 20 48 65 6c 70 65 72 20 73 69 6e 67 6c .## Helper singl
ce20: 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e 64 73 20 66 eton. Commands f
ce30: 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c or branch symbol
ce40: 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a 73 6e changesets...sn
ce50: 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 it::type ::vc::f
ce60: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
ce70: 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 vs::project::rev
ce80: 3a 3a 73 79 6d 3a 3a 62 72 61 6e 63 68 20 7b 0a ::sym::branch {.
ce90: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 typemethod b
cea0: 79 72 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 20 72 yrevision {} { r
ceb0: 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 eturn 0 }. ty
cec0: 70 65 6d 65 74 68 6f 64 20 62 79 73 79 6d 62 6f pemethod bysymbo
ced0: 6c 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 l {} { return
cee0: 31 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 1 }. typemeth
cef0: 6f 64 20 69 73 74 61 67 20 20 20 20 20 20 7b 7d od istag {}
cf00: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20 { return 0 }.
cf10: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 62 typemethod isb
cf20: 72 61 6e 63 68 20 20 20 7b 7d 20 7b 20 72 65 74 ranch {} { ret
cf30: 75 72 6e 20 31 20 7d 0a 0a 20 20 20 20 74 79 70 urn 1 }.. typ
cf40: 65 6d 65 74 68 6f 64 20 73 74 72 20 7b 62 72 61 emethod str {bra
cf50: 6e 63 68 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a nch} {..struct::
cf60: 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 73 74 61 list assign [sta
cf70: 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 te run {.. SE
cf80: 4c 45 43 54 20 53 2e 6e 61 6d 65 2c 20 46 2e 6e LECT S.name, F.n
cf90: 61 6d 65 2c 20 50 2e 6e 61 6d 65 0a 09 20 20 20 ame, P.name..
cfa0: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 FROM branch B
cfb0: 2c 20 73 79 6d 62 6f 6c 20 53 2c 20 66 69 6c 65 , symbol S, file
cfc0: 20 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 20 F, project P..
cfd0: 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 WHERE B.bid
cfe0: 3d 20 24 62 72 61 6e 63 68 20 20 2d 2d 20 46 69 = $branch -- Fi
cff0: 6e 64 20 73 70 65 63 69 66 69 65 64 20 62 72 61 nd specified bra
d000: 6e 63 68 0a 09 20 20 20 20 41 4e 44 20 20 20 20 nch.. AND
d010: 46 2e 66 69 64 20 3d 20 42 2e 66 69 64 20 20 20 F.fid = B.fid
d020: 20 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 20 -- Get file of
d030: 62 72 61 6e 63 68 0a 09 20 20 20 20 41 4e 44 20 branch.. AND
d040: 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70 69 64 P.pid = F.pid
d050: 20 20 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65 -- Get proje
d060: 63 74 20 6f 66 20 66 69 6c 65 0a 09 20 20 20 20 ct of file..
d070: 41 4e 44 20 20 20 20 53 2e 73 69 64 20 3d 20 42 AND S.sid = B
d080: 2e 73 69 64 20 20 20 20 2d 2d 20 47 65 74 20 73 .sid -- Get s
d090: 79 6d 62 6f 6c 20 6f 66 20 62 72 61 6e 63 68 0a ymbol of branch.
d0a0: 09 7d 5d 20 73 6e 61 6d 65 20 66 6e 61 6d 65 20 .}] sname fname
d0b0: 70 6e 61 6d 65 0a 09 72 65 74 75 72 6e 20 22 24 pname..return "$
d0c0: 70 6e 61 6d 65 2f 42 27 24 7b 73 6e 61 6d 65 7d pname/B'${sname}
d0d0: 27 3a 3a 24 66 6e 61 6d 65 22 0a 20 20 20 20 7d '::$fname". }
d0e0: 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d .. # result =
d0f0: 20 6c 69 73 74 20 28 6d 69 6e 74 69 6d 65 2c 20 list (mintime,
d100: 6d 61 78 74 69 6d 65 29 0a 20 20 20 20 74 79 70 maxtime). typ
d110: 65 6d 65 74 68 6f 64 20 74 69 6d 65 72 61 6e 67 emethod timerang
d120: 65 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b 0a 09 e {branches} {..
d130: 23 20 54 68 65 20 72 61 6e 67 65 20 6f 66 20 61 # The range of a
d140: 20 62 72 61 6e 63 68 20 69 73 20 64 65 66 69 6e branch is defin
d150: 65 64 20 61 73 20 74 68 65 20 72 61 6e 67 65 20 ed as the range
d160: 6f 66 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 of the..# revisi
d170: 6f 6e 73 20 74 68 65 20 62 72 61 6e 63 68 65 73 ons the branches
d180: 20 61 72 65 20 73 70 61 77 6e 65 64 20 62 79 2e are spawned by.
d190: 20 4e 4f 54 45 20 68 6f 77 65 76 65 72 20 74 68 NOTE however th
d1a0: 61 74 20 74 68 65 0a 09 23 20 62 72 61 6e 63 68 at the..# branch
d1b0: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 es associated wi
d1c0: 74 68 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 th a detached NT
d1d0: 44 42 20 77 69 6c 6c 20 68 61 76 65 20 6e 6f 20 DB will have no
d1e0: 72 6f 6f 74 0a 09 23 20 73 70 61 77 6e 69 6e 67 root..# spawning
d1f0: 20 74 68 65 6d 2c 20 68 65 6e 63 65 20 74 68 65 them, hence the
d200: 79 20 68 61 76 65 20 6e 6f 20 72 65 61 6c 20 74 y have no real t
d210: 69 6d 65 72 61 6e 67 65 20 61 6e 79 0a 09 23 20 imerange any..#
d220: 6c 6f 6e 67 65 72 2e 20 42 79 20 75 73 69 6e 67 longer. By using
d230: 20 30 20 77 65 20 70 75 74 20 74 68 65 6d 20 69 0 we put them i
d240: 6e 20 66 72 6f 6e 74 20 6f 66 20 65 76 65 72 79 n front of every
d250: 74 68 69 6e 67 20 65 6c 73 65 2c 0a 09 23 20 61 thing else,..# a
d260: 73 20 74 68 65 79 20 6c 6f 67 69 63 61 6c 6c 79 s they logically
d270: 20 61 72 65 2e 0a 0a 09 73 65 74 20 74 68 65 73 are....set thes
d280: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e et ('[join $bran
d290: 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 ches {','}]')..r
d2a0: 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e eturn [state run
d2b0: 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 [subst -nocomma
d2c0: 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 nds -nobackslash
d2d0: 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 es {.. SELECT
d2e0: 20 49 46 4e 55 4c 4c 28 4d 49 4e 28 52 2e 64 61 IFNULL(MIN(R.da
d2f0: 74 65 29 2c 30 29 2c 20 49 46 4e 55 4c 4c 28 4d te),0), IFNULL(M
d300: 41 58 28 52 2e 64 61 74 65 29 2c 30 29 0a 09 20 AX(R.date),0)..
d310: 20 20 20 46 52 4f 4d 20 20 62 72 61 6e 63 68 20 FROM branch
d320: 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 B, revision R..
d330: 20 20 20 57 48 45 52 45 20 42 2e 62 69 64 20 49 WHERE B.bid I
d340: 4e 20 24 74 68 65 73 65 74 20 20 20 2d 2d 20 52 N $theset -- R
d350: 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 estrict to branc
d360: 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a hes of interest.
d370: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
d380: 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 6f 6f 74 R.rid = B.root
d390: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 62 -- Select b
d3a0: 72 61 6e 63 68 20 70 61 72 65 6e 74 20 72 65 76 ranch parent rev
d3b0: 69 73 69 6f 6e 73 0a 09 7d 5d 5d 0a 20 20 20 20 isions..}]].
d3c0: 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 }.. # result
d3d0: 3d 20 34 2d 6c 69 73 74 20 28 69 74 65 6d 74 79 = 4-list (itemty
d3e0: 70 65 20 69 74 65 6d 69 64 20 6e 65 78 74 69 74 pe itemid nextit
d3f0: 65 6d 74 79 70 65 20 6e 65 78 74 69 74 65 6d 69 emtype nextitemi
d400: 64 20 2e 2e 2e 29 0a 20 20 20 20 74 79 70 65 6d d ...). typem
d410: 65 74 68 6f 64 20 6c 6f 6f 70 73 20 7b 62 72 61 ethod loops {bra
d420: 6e 63 68 65 73 7d 20 7b 0a 09 23 20 4e 6f 74 65 nches} {..# Note
d430: 3a 20 52 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 : Revisions and
d440: 74 61 67 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 tags cannot caus
d450: 65 20 74 68 65 20 6c 6f 6f 70 2e 20 42 65 69 6e e the loop. Bein
d460: 67 20 6f 66 20 61 0a 09 23 20 66 75 6e 64 61 6d g of a..# fundam
d470: 65 6e 74 61 6c 6c 79 20 64 69 66 66 65 72 65 6e entally differen
d480: 74 20 74 79 70 65 20 74 68 65 79 20 63 61 6e 6e t type they cann
d490: 6f 74 20 62 65 20 69 6e 20 74 68 65 20 69 6e 63 ot be in the inc
d4a0: 6f 6d 69 6e 67 0a 09 23 20 73 65 74 20 6f 66 20 oming..# set of
d4b0: 69 64 73 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 ids....set these
d4c0: 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e 63 t ('[join $branc
d4d0: 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 hes {','}]')..re
d4e0: 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 turn [state run
d4f0: 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e [subst -nocomman
d500: 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 ds -nobackslashe
d510: 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 s {.. SELECT
d520: 42 2e 62 69 64 2c 20 42 58 2e 62 69 64 0a 09 20 B.bid, BX.bid..
d530: 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 FROM branch
d540: 20 42 2c 20 70 72 65 66 65 72 65 64 70 61 72 65 B, preferedpare
d550: 6e 74 20 50 2c 20 62 72 61 6e 63 68 20 42 58 0a nt P, branch BX.
d560: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 . WHERE B.bi
d570: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 2d d IN $theset -
d580: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 - Restrict to br
d590: 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 anches of intere
d5a0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 st.. AND B
d5b0: 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 20 .sid = P.pid
d5c0: 20 20 2d 2d 20 47 65 74 20 74 68 65 20 70 72 65 -- Get the pre
d5d0: 66 65 72 65 64 20 62 72 61 6e 63 68 65 73 20 76 fered branches v
d5e0: 69 61 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 ia.. AND B
d5f0: 58 2e 73 69 64 20 3d 20 50 2e 73 69 64 20 20 20 X.sid = P.sid
d600: 20 20 2d 2d 20 74 68 65 20 62 72 61 6e 63 68 20 -- the branch
d610: 73 79 6d 62 6f 6c 73 0a 09 20 20 20 20 41 4e 44 symbols.. AND
d620: 20 20 20 20 42 58 2e 62 69 64 20 49 4e 20 24 74 BX.bid IN $t
d630: 68 65 73 65 74 20 20 2d 2d 20 4c 6f 6f 70 0a 09 heset -- Loop..
d640: 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 }]]. }.. #
d650: 20 76 61 72 28 64 76 29 20 3d 20 64 69 63 74 20 var(dv) = dict
d660: 28 69 74 65 6d 20 2d 3e 20 6c 69 73 74 20 28 69 (item -> list (i
d670: 74 65 6d 29 29 2c 20 69 74 65 6d 20 20 3d 20 6c tem)), item = l
d680: 69 73 74 20 28 74 79 70 65 20 69 64 29 0a 20 20 ist (type id).
d690: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 75 63 typemethod suc
d6a0: 63 65 73 73 6f 72 73 20 7b 64 76 20 62 72 61 6e cessors {dv bran
d6b0: 63 68 65 73 7d 20 7b 0a 09 75 70 76 61 72 20 31 ches} {..upvar 1
d6c0: 20 24 64 76 20 64 65 70 65 6e 64 65 6e 63 69 65 $dv dependencie
d6d0: 73 0a 09 23 20 54 68 65 20 66 69 72 73 74 20 72 s..# The first r
d6e0: 65 76 69 73 69 6f 6e 20 63 6f 6d 6d 69 74 74 65 evision committe
d6f0: 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20 61 d on a branch, a
d700: 6e 64 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 0a nd all branches.
d710: 09 23 20 61 6e 64 20 74 61 67 73 20 77 68 69 63 .# and tags whic
d720: 68 20 68 61 76 65 20 69 74 20 61 73 20 74 68 65 h have it as the
d730: 69 72 20 70 72 65 66 65 72 65 64 20 70 61 72 65 ir prefered pare
d740: 6e 74 20 61 72 65 20 74 68 65 0a 09 23 20 73 75 nt are the..# su
d750: 63 63 65 73 73 6f 72 73 20 6f 66 20 61 20 62 72 ccessors of a br
d760: 61 6e 63 68 2e 0a 0a 09 73 65 74 20 74 68 65 73 anch....set thes
d770: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e et ('[join $bran
d780: 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 73 ches {','}]')..s
d790: 74 61 74 65 20 66 6f 72 65 61 63 68 72 6f 77 20 tate foreachrow
d7a0: 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e [subst -nocomman
d7b0: 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 ds -nobackslashe
d7c0: 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 s {.. SELECT
d7d0: 42 2e 62 69 64 20 41 53 20 78 62 69 64 2c 20 52 B.bid AS xbid, R
d7e0: 2e 72 69 64 20 41 53 20 78 63 68 69 6c 64 0a 09 .rid AS xchild..
d7f0: 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 FROM branc
d800: 68 20 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 0a h B, revision R.
d810: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 . WHERE B.bi
d820: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 d IN $theset
d830: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
d840: 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 branches of inte
d850: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
d860: 20 42 2e 66 69 72 73 74 20 3d 20 52 2e 72 69 64 B.first = R.rid
d870: 20 20 20 20 20 20 2d 2d 20 47 65 74 20 66 69 72 -- Get fir
d880: 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 st revision on t
d890: 68 65 20 62 72 61 6e 63 68 0a 09 7d 5d 20 7b 0a he branch..}] {.
d8a0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 70 . lappend dep
d8b0: 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 endencies([list
d8c0: 73 79 6d 3a 3a 62 72 61 6e 63 68 20 24 78 62 69 sym::branch $xbi
d8d0: 64 5d 29 20 5b 6c 69 73 74 20 72 65 76 20 24 78 d]) [list rev $x
d8e0: 63 68 69 6c 64 5d 0a 09 7d 0a 09 73 74 61 74 65 child]..}..state
d8f0: 20 66 6f 72 65 61 63 68 72 6f 77 20 5b 73 75 62 foreachrow [sub
d900: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
d910: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
d920: 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e 62 69 . SELECT B.bi
d930: 64 20 41 53 20 78 62 69 64 2c 20 42 58 2e 62 69 d AS xbid, BX.bi
d940: 64 20 41 53 20 78 63 68 69 6c 64 0a 09 20 20 20 d AS xchild..
d950: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 FROM branch B
d960: 2c 20 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 , preferedparent
d970: 20 50 2c 20 62 72 61 6e 63 68 20 42 58 0a 09 20 P, branch BX..
d980: 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 WHERE B.bid
d990: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
d9a0: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 - Restrict to br
d9b0: 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 anches of intere
d9c0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 st.. AND B
d9d0: 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 20 .sid = P.pid
d9e0: 20 20 20 20 2d 2d 20 47 65 74 20 73 75 62 6f 72 -- Get subor
d9f0: 64 69 6e 61 74 65 20 62 72 61 6e 63 68 65 73 20 dinate branches
da00: 76 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 via the.. AND
da10: 20 20 20 20 42 58 2e 73 69 64 20 3d 20 50 2e 73 BX.sid = P.s
da20: 69 64 20 20 20 20 20 20 20 2d 2d 20 70 72 65 66 id -- pref
da30: 65 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20 ered parents of
da40: 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 09 7d their symbols..}
da50: 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 ] {.. lappend
da60: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c dependencies([l
da70: 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20 ist sym::branch
da80: 24 78 62 69 64 5d 29 20 5b 6c 69 73 74 20 73 79 $xbid]) [list sy
da90: 6d 3a 3a 62 72 61 6e 63 68 20 24 78 63 68 69 6c m::branch $xchil
daa0: 64 5d 0a 09 7d 0a 09 73 74 61 74 65 20 66 6f 72 d]..}..state for
dab0: 65 61 63 68 72 6f 77 20 5b 73 75 62 73 74 20 2d eachrow [subst -
dac0: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 nocommands -noba
dad0: 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 ckslashes {..
dae0: 20 53 45 4c 45 43 54 20 42 2e 62 69 64 20 41 53 SELECT B.bid AS
daf0: 20 78 62 69 64 2c 20 54 2e 74 69 64 20 41 53 20 xbid, T.tid AS
db00: 78 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d xchild.. FROM
db10: 20 20 20 62 72 61 6e 63 68 20 42 2c 20 70 72 65 branch B, pre
db20: 66 65 72 65 64 70 61 72 65 6e 74 20 50 2c 20 74 feredparent P, t
db30: 61 67 20 54 0a 09 20 20 20 20 57 48 45 52 45 20 ag T.. WHERE
db40: 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 B.bid IN $these
db50: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
db60: 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 t to branches of
db70: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
db80: 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20 50 2e ND B.sid = P.
db90: 70 69 64 20 20 20 20 20 20 20 20 2d 2d 20 47 65 pid -- Ge
dba0: 74 20 73 75 62 6f 72 64 69 6e 61 74 65 20 74 61 t subordinate ta
dbb0: 67 73 20 76 69 61 20 74 68 65 0a 09 20 20 20 20 gs via the..
dbc0: 41 4e 44 20 20 20 20 54 2e 73 69 64 20 3d 20 50 AND T.sid = P
dbd0: 2e 73 69 64 20 20 20 20 20 20 20 20 2d 2d 20 70 .sid -- p
dbe0: 72 65 66 65 72 65 64 20 70 61 72 65 6e 74 73 20 refered parents
dbf0: 6f 66 20 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 of their symbols
dc00: 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 ..}] {.. lapp
dc10: 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73 end dependencies
dc20: 28 5b 6c 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e ([list sym::bran
dc30: 63 68 20 24 78 62 69 64 5d 29 20 5b 6c 69 73 74 ch $xbid]) [list
dc40: 20 73 79 6d 3a 3a 74 61 67 20 24 78 63 68 69 6c sym::tag $xchil
dc50: 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 d]..}..return.
dc60: 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c }.. # resul
dc70: 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e 67 65 t = list (change
dc80: 73 65 74 2d 69 64 29 0a 20 20 20 20 74 79 70 65 set-id). type
dc90: 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 63 65 73 method cs_succes
dca0: 73 6f 72 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 sors {branches}
dcb0: 7b 0a 20 20 20 20 20 20 20 20 23 20 54 68 69 73 {. # This
dcc0: 20 69 73 20 61 20 76 61 72 69 61 6e 74 20 6f 66 is a variant of
dcd0: 20 27 73 75 63 63 65 73 73 6f 72 73 27 20 77 68 'successors' wh
dce0: 69 63 68 20 6d 61 70 73 20 74 68 65 20 6c 6f 77 ich maps the low
dcf0: 2d 6c 65 76 65 6c 0a 20 20 20 20 20 20 20 20 23 -level. #
dd00: 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 20 74 data directly t
dd10: 6f 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 o the associated
dd20: 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49 2e 65 changesets. I.e
dd30: 2e 20 69 6e 73 74 65 61 64 0a 20 20 20 20 20 20 . instead.
dd40: 20 20 23 20 6d 69 6c 6c 69 6f 6e 73 20 6f 66 20 # millions of
dd50: 64 65 70 65 6e 64 65 6e 63 79 20 70 61 69 72 73 dependency pairs
dd60: 20 28 69 6e 20 65 78 74 72 65 6d 65 20 63 61 73 (in extreme cas
dd70: 65 73 20 28 45 78 61 6d 70 6c 65 3a 20 54 63 6c es (Example: Tcl
dd80: 0a 20 20 20 20 20 20 20 20 23 20 43 56 53 29 29 . # CVS))
dd90: 20 77 65 20 72 65 74 75 72 6e 20 61 20 76 65 72 we return a ver
dda0: 79 20 73 68 6f 72 74 20 61 6e 64 20 6d 75 63 68 y short and much
ddb0: 20 6d 6f 72 65 20 6d 61 6e 61 67 65 61 62 6c 65 more manageable
ddc0: 20 6c 69 73 74 0a 20 20 20 20 20 20 20 20 23 20 list. #
ddd0: 6f 66 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a of changesets...
dde0: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
ddf0: 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 oin $branches {'
de00: 2c 27 7d 5d 27 29 0a 20 20 20 20 20 20 20 20 72 ,'}]'). r
de10: 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e eturn [state run
de20: 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 [subst -nocomma
de30: 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 nds -nobackslash
de40: 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 es {.. SELECT
de50: 20 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d C.cid.. FROM
de60: 20 20 20 62 72 61 6e 63 68 20 42 2c 20 72 65 76 branch B, rev
de70: 69 73 69 6f 6e 20 52 2c 20 63 73 69 74 65 6d 20 ision R, csitem
de80: 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 0a CI, changeset C.
de90: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 . WHERE B.bi
dea0: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 d IN $theset
deb0: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
dec0: 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 branches of inte
ded0: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
dee0: 20 42 2e 66 69 72 73 74 20 3d 20 52 2e 72 69 64 B.first = R.rid
def0: 09 2d 2d 20 47 65 74 20 66 69 72 73 74 20 72 65 .-- Get first re
df00: 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 62 72 vision on the br
df10: 61 6e 63 68 0a 20 20 20 20 20 20 20 20 20 20 20 anch.
df20: 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d AND CI.iid =
df30: 20 52 2e 72 69 64 20 20 20 20 20 20 20 2d 2d 20 R.rid --
df40: 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 Select all chang
df50: 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 20 esets.
df60: 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d AND C.cid =
df70: 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e 74 61 CI.cid.-- conta
df80: 69 6e 69 6e 67 20 74 68 69 73 20 72 65 76 69 73 ining this revis
df90: 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 ion.
dfa0: 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 AND C.type =
dfb0: 30 09 09 2d 2d 20 77 68 69 63 68 20 61 72 65 20 0..-- which are
dfc0: 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 revision changes
dfd0: 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 09 20 ets. UNION..
dfe0: 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a SELECT C.cid.
dff0: 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e . FROM bran
e000: 63 68 20 42 2c 20 70 72 65 66 65 72 65 64 70 61 ch B, preferedpa
e010: 72 65 6e 74 20 50 2c 20 62 72 61 6e 63 68 20 42 rent P, branch B
e020: 58 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 X, csitem CI, ch
e030: 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 angeset C.. W
e040: 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 HERE B.bid IN $
e050: 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 theset -- Re
e060: 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68 strict to branch
e070: 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 es of interest..
e080: 20 20 20 20 41 4e 44 20 20 20 20 42 2e 73 69 64 AND B.sid
e090: 20 3d 20 50 2e 70 69 64 09 2d 2d 20 47 65 74 20 = P.pid.-- Get
e0a0: 73 75 62 6f 72 64 69 6e 61 74 65 20 62 72 61 6e subordinate bran
e0b0: 63 68 65 73 20 76 69 61 20 74 68 65 0a 09 20 20 ches via the..
e0c0: 20 20 41 4e 44 20 20 20 20 42 58 2e 73 69 64 20 AND BX.sid
e0d0: 3d 20 50 2e 73 69 64 09 2d 2d 20 70 72 65 66 65 = P.sid.-- prefe
e0e0: 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20 74 red parents of t
e0f0: 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 20 20 20 heir symbols.
e100: 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 AND
e110: 43 49 2e 69 69 64 20 3d 20 42 58 2e 62 69 64 20 CI.iid = BX.bid
e120: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 61 -- Select a
e130: 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 ll changesets.
e140: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
e150: 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 09 C.cid = CI.cid.
e160: 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 -- containing th
e170: 65 20 73 75 62 6f 72 64 69 6e 61 74 65 20 62 72 e subordinate br
e180: 61 6e 63 68 65 73 0a 20 20 20 20 20 20 20 20 20 anches.
e190: 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 AND C.type
e1a0: 20 3d 20 32 09 09 2d 2d 20 77 68 69 63 68 20 61 = 2..-- which a
e1b0: 72 65 20 62 72 61 6e 63 68 20 63 68 61 6e 67 65 re branch change
e1c0: 73 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 09 sets. UNION..
e1d0: 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 SELECT C.cid
e1e0: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 .. FROM bra
e1f0: 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 64 70 nch B, preferedp
e200: 61 72 65 6e 74 20 50 2c 20 74 61 67 20 54 2c 20 arent P, tag T,
e210: 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 csitem CI, chang
e220: 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 45 52 eset C.. WHER
e230: 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 E B.bid IN $the
e240: 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 set -- Restr
e250: 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 ict to branches
e260: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
e270: 20 41 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20 AND B.sid =
e280: 50 2e 70 69 64 09 2d 2d 20 47 65 74 20 73 75 62 P.pid.-- Get sub
e290: 6f 72 64 69 6e 61 74 65 20 74 61 67 73 20 76 69 ordinate tags vi
e2a0: 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 20 a the.. AND
e2b0: 20 20 54 2e 73 69 64 20 3d 20 50 2e 73 69 64 09 T.sid = P.sid.
e2c0: 2d 2d 20 70 72 65 66 65 72 65 64 20 70 61 72 65 -- prefered pare
e2d0: 6e 74 73 20 6f 66 20 74 68 65 69 72 20 73 79 6d nts of their sym
e2e0: 62 6f 6c 73 0a 20 20 20 20 20 20 20 20 20 20 20 bols.
e2f0: 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d AND CI.iid =
e300: 20 54 2e 74 69 64 20 20 20 20 20 20 20 2d 2d 20 T.tid --
e310: 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 Select all chang
e320: 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 20 esets.
e330: 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d AND C.cid =
e340: 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e 74 61 CI.cid.-- conta
e350: 69 6e 69 6e 67 20 74 68 65 20 73 75 62 6f 72 64 ining the subord
e360: 69 6e 61 74 65 20 74 61 67 73 0a 20 20 20 20 20 inate tags.
e370: 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e AND C.
e380: 74 79 70 65 20 3d 20 31 09 09 2d 2d 20 77 68 69 type = 1..-- whi
e390: 63 68 20 61 72 65 20 74 61 67 20 63 68 61 6e 67 ch are tag chang
e3a0: 65 73 65 74 73 0a 09 7d 5d 5d 0a 09 72 65 74 75 esets..}]]..retu
e3b0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
e3c0: 72 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f 6c 20 result = symbol
e3d0: 6e 61 6d 65 0a 20 20 20 20 74 79 70 65 6d 65 74 name. typemet
e3e0: 68 6f 64 20 63 73 5f 6c 6f 64 20 7b 73 69 64 20 hod cs_lod {sid
e3f0: 62 72 61 6e 63 68 65 73 7d 20 7b 0a 09 23 20 44 branches} {..# D
e400: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6e 61 etermines the na
e410: 6d 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c me of the symbol
e420: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 69 which is the li
e430: 6e 65 20 6f 66 0a 09 23 20 64 65 76 65 6c 6f 70 ne of..# develop
e440: 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 62 72 61 ment for the bra
e450: 6e 63 68 65 73 20 69 6e 20 61 20 63 68 61 6e 67 nches in a chang
e460: 65 73 65 74 2e 20 43 6f 6d 65 73 20 64 69 72 65 eset. Comes dire
e470: 63 74 6c 79 0a 09 23 20 66 72 6f 6d 20 74 68 65 ctly..# from the
e480: 20 73 79 6d 62 6f 6c 20 77 68 69 63 68 20 69 73 symbol which is
e490: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 27 73 the changeset's
e4a0: 20 73 6f 75 72 63 65 20 61 6e 64 20 69 74 73 0a source and its.
e4b0: 09 23 20 70 72 65 66 65 72 65 64 20 70 61 72 65 .# prefered pare
e4c0: 6e 74 2e 0a 0a 20 20 20 20 20 20 20 20 72 65 74 nt... ret
e4d0: 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 7b urn [state run {
e4e0: 0a 20 09 20 20 20 20 53 45 4c 45 43 54 20 50 2e . . SELECT P.
e4f0: 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 70 name.. FROM p
e500: 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 53 50 referedparent SP
e510: 2c 20 73 79 6d 62 6f 6c 20 50 0a 09 20 20 20 20 , symbol P..
e520: 57 48 45 52 45 20 53 50 2e 73 69 64 20 3d 20 24 WHERE SP.sid = $
e530: 73 69 64 0a 09 20 20 20 20 41 4e 44 20 20 20 50 sid.. AND P
e540: 2e 73 69 64 20 3d 20 53 50 2e 70 69 64 0a 09 7d .sid = SP.pid..}
e550: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 ]. }.. typ
e560: 65 6d 65 74 68 6f 64 20 6c 69 6d 69 74 73 20 7b emethod limits {
e570: 62 72 61 6e 63 68 65 73 7d 20 7b 0a 09 23 20 4e branches} {..# N
e580: 6f 74 65 73 2e 20 54 68 69 73 20 6d 65 74 68 6f otes. This metho
e590: 64 20 65 78 69 73 74 73 20 6f 6e 6c 79 20 66 6f d exists only fo
e5a0: 72 20 62 72 61 6e 63 68 65 73 2e 20 49 74 20 69 r branches. It i
e5b0: 73 20 6e 65 65 64 65 64 20 74 6f 0a 09 23 20 67 s needed to..# g
e5c0: 65 74 20 64 65 74 61 69 6c 65 64 20 69 6e 66 6f et detailed info
e5d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 20 rmation about a
e5e0: 62 61 63 6b 77 61 72 64 20 62 72 61 6e 63 68 2e backward branch.
e5f0: 20 49 74 20 64 6f 65 73 0a 09 23 20 6e 6f 74 20 It does..# not
e600: 61 70 70 6c 79 20 74 6f 20 74 61 67 73 2c 20 6e apply to tags, n
e610: 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e 20 54 68 or revisions. Th
e620: 65 20 71 75 65 72 69 65 73 20 63 61 6e 20 61 6c e queries can al
e630: 73 6f 0a 09 23 20 72 65 73 74 72 69 63 74 20 74 so..# restrict t
e640: 68 65 6d 73 65 6c 76 65 73 20 74 6f 20 74 68 65 hemselves to the
e650: 20 72 65 76 69 73 69 6f 6e 20 73 75 63 65 73 73 revision sucess
e660: 6f 72 73 2f 70 72 65 64 65 63 65 73 73 6f 72 73 ors/predecessors
e670: 0a 09 23 20 6f 66 20 62 72 61 6e 63 68 65 73 2c ..# of branches,
e680: 20 61 73 20 6f 6e 6c 79 20 74 68 65 79 20 68 61 as only they ha
e690: 76 65 20 6f 72 64 65 72 69 6e 67 20 64 61 74 61 ve ordering data
e6a0: 20 61 6e 64 20 74 68 75 73 20 63 61 6e 0a 09 23 and thus can..#
e6b0: 20 63 61 75 73 65 20 74 68 65 20 62 61 63 6b 77 cause the backw
e6c0: 61 72 64 6e 65 73 73 2e 0a 0a 09 73 65 74 20 74 ardness....set t
e6d0: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 heset ('[join $b
e6e0: 72 61 6e 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 ranches {','}]')
e6f0: 0a 0a 09 73 65 74 20 6d 61 78 70 20 5b 73 74 61 ...set maxp [sta
e700: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e te run [subst -n
e710: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 ocommands -nobac
e720: 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 kslashes {..
e730: 2d 2d 20 6d 61 78 69 6d 61 6c 20 70 72 65 64 65 -- maximal prede
e740: 63 65 73 73 6f 72 20 70 6f 73 69 74 69 6f 6e 20 cessor position
e750: 70 65 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20 per branch..
e760: 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 4d 41 SELECT B.bid, MA
e770: 58 20 28 43 4f 2e 70 6f 73 29 0a 09 20 20 20 20 X (CO.pos)..
e780: 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c FROM branch B,
e790: 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 63 73 69 revision R, csi
e7a0: 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 tem CI, changese
e7b0: 74 20 43 2c 20 63 73 6f 72 64 65 72 20 43 4f 0a t C, csorder CO.
e7c0: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 . WHERE B.bi
e7d0: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 d IN $theset
e7e0: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
e7f0: 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 branches of inte
e800: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
e810: 20 42 2e 72 6f 6f 74 20 3d 20 52 2e 72 69 64 20 B.root = R.rid
e820: 20 20 20 20 20 20 2d 2d 20 47 65 74 20 62 72 61 -- Get bra
e830: 6e 63 68 20 72 6f 6f 74 20 72 65 76 69 73 69 6f nch root revisio
e840: 6e 73 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 ns.. AND C
e850: 49 2e 69 69 64 20 3d 20 52 2e 72 69 64 20 20 20 I.iid = R.rid
e860: 20 20 20 20 2d 2d 20 47 65 74 20 63 68 61 6e 67 -- Get chang
e870: 65 73 65 74 73 20 63 6f 6e 74 61 69 6e 69 6e 67 esets containing
e880: 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 20 20 the.. AND
e890: 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 20 C.cid = CI.cid
e8a0: 20 20 20 20 20 20 2d 2d 20 72 6f 6f 74 20 72 65 -- root re
e8b0: 76 69 73 69 6f 6e 73 2c 20 77 68 69 63 68 20 61 visions, which a
e8c0: 72 65 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 re.. AND C
e8d0: 2e 74 79 70 65 20 3d 20 30 20 20 20 20 20 20 20 .type = 0
e8e0: 20 20 20 20 2d 2d 20 72 65 76 69 73 69 6f 6e 20 -- revision
e8f0: 63 68 61 6e 67 65 73 65 74 73 0a 09 20 20 20 20 changesets..
e900: 41 4e 44 20 20 20 20 43 4f 2e 63 69 64 20 3d 20 AND CO.cid =
e910: 43 2e 63 69 64 20 20 20 20 20 20 20 2d 2d 20 47 C.cid -- G
e920: 65 74 20 74 68 65 69 72 20 74 6f 70 6f 6c 6f 67 et their topolog
e930: 69 63 61 6c 20 6f 72 64 65 72 69 6e 67 0a 09 20 ical ordering..
e940: 20 20 20 47 52 4f 55 50 20 42 59 20 42 2e 62 69 GROUP BY B.bi
e950: 64 0a 09 7d 5d 5d 0a 0a 09 73 65 74 20 6d 69 6e d..}]]...set min
e960: 73 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 s [state run [su
e970: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
e980: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
e990: 0a 09 20 20 20 20 2d 2d 20 6d 69 6e 69 6d 61 6c .. -- minimal
e9a0: 20 73 75 63 63 65 73 73 6f 72 20 70 6f 73 69 74 successor posit
e9b0: 69 6f 6e 20 70 65 72 20 62 72 61 6e 63 68 0a 09 ion per branch..
e9c0: 20 20 20 20 53 45 4c 45 43 54 20 42 2e 62 69 64 SELECT B.bid
e9d0: 2c 20 4d 49 4e 20 28 43 4f 2e 70 6f 73 29 0a 09 , MIN (CO.pos)..
e9e0: 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 FROM branc
e9f0: 68 20 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 2c h B, revision R,
ea00: 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e csitem CI, chan
ea10: 67 65 73 65 74 20 43 2c 20 63 73 6f 72 64 65 72 geset C, csorder
ea20: 20 43 4f 0a 09 20 20 20 20 57 48 45 52 45 20 20 CO.. WHERE
ea30: 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 74 B.bid IN $theset
ea40: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
ea50: 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20 to branches of
ea60: 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e interest.. AN
ea70: 44 20 20 20 20 42 2e 66 69 72 73 74 20 3d 20 52 D B.first = R
ea80: 2e 72 69 64 20 20 20 20 20 20 2d 2d 20 47 65 74 .rid -- Get
ea90: 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73 the first revis
eaa0: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 62 72 61 6e ions on the bran
eab0: 63 68 65 73 0a 09 20 20 20 20 41 4e 44 20 20 20 ches.. AND
eac0: 20 43 49 2e 69 69 64 20 3d 20 52 2e 72 69 64 20 CI.iid = R.rid
ead0: 20 20 20 20 20 20 2d 2d 20 47 65 74 20 63 68 61 -- Get cha
eae0: 6e 67 65 73 65 74 73 20 63 6f 6e 74 61 69 6e 69 ngesets containi
eaf0: 6e 67 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 ng the.. AND
eb00: 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 C.cid = CI.ci
eb10: 64 09 2d 2d 20 66 69 72 73 74 20 72 65 76 69 73 d.-- first revis
eb20: 69 6f 6e 73 2c 20 77 68 69 63 68 20 61 72 65 0a ions, which are.
eb30: 09 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 . AND C.ty
eb40: 70 65 20 3d 20 30 09 09 2d 2d 20 72 65 76 69 73 pe = 0..-- revis
eb50: 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 0a 09 ion changesets..
eb60: 20 20 20 20 41 4e 44 20 20 20 20 43 4f 2e 63 69 AND CO.ci
eb70: 64 20 3d 20 43 2e 63 69 64 09 2d 2d 20 47 65 74 d = C.cid.-- Get
eb80: 20 74 68 65 69 72 20 74 6f 70 6f 6c 6f 67 69 63 their topologic
eb90: 61 6c 20 6f 72 64 65 72 69 6e 67 0a 09 20 20 20 al ordering..
eba0: 20 47 52 4f 55 50 20 42 59 20 42 2e 62 69 64 0a GROUP BY B.bid.
ebb0: 09 7d 5d 5d 0a 0a 20 20 20 20 20 20 20 20 72 65 .}]].. re
ebc0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 6d 61 78 70 turn [list $maxp
ebd0: 20 24 6d 69 6e 73 5d 0a 20 20 20 20 7d 0a 0a 20 $mins]. }..
ebe0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
ebf0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
ec00: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 ##########. #
ec10: 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a # Configuration.
ec20: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 . pragma -has
ec30: 69 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f 20 3b instances no ;
ec40: 20 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 20 20 # singleton.
ec50: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 pragma -hastype
ec60: 69 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23 20 6e info no ; # n
ec70: 6f 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a o introspection.
ec80: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 pragma -hast
ec90: 79 70 65 64 65 73 74 72 6f 79 20 6e 6f 20 3b 20 ypedestroy no ;
eca0: 23 20 69 6d 6d 6f 72 74 61 6c 0a 7d 0a 0a 23 20 # immortal.}..#
ecb0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
ecc0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
ecd0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
ece0: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 0a 0a ###########.##..
ecf0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a namespace eval :
ed00: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
ed10: 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 ort::cvs::projec
ed20: 74 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 t {. namespac
ed30: 65 20 65 78 70 6f 72 74 20 72 65 76 0a 20 20 20 e export rev.
ed40: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 namespace eval
ed50: 72 65 76 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 rev {..namespace
ed60: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
ed70: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
ed80: 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 s::state..namesp
ed90: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
eda0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
edb0: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a :cvs::integrity.
edc0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 .namespace impor
edd0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d t ::vc::tools::m
ede0: 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 isc::*..namespac
edf0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
ee00: 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e ools::trouble..n
ee10: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
ee20: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 ::vc::tools::log
ee30: 0a 09 6c 6f 67 20 72 65 67 69 73 74 65 72 20 63 ..log register c
ee40: 73 65 74 73 0a 0a 09 23 20 53 65 74 20 75 70 20 sets...# Set up
ee50: 74 68 65 20 68 65 6c 70 65 72 20 73 69 6e 67 6c the helper singl
ee60: 65 74 6f 6e 73 0a 09 6e 61 6d 65 73 70 61 63 65 etons..namespace
ee70: 20 65 76 61 6c 20 72 65 76 20 7b 0a 09 20 20 20 eval rev {..
ee80: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 namespace impor
ee90: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a t ::vc::fossil::
eea0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 import::cvs::sta
eeb0: 74 65 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 te.. namespac
eec0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
eed0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
eee0: 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 20 vs::integrity..
eef0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 namespace imp
ef00: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
ef10: 3a 6c 6f 67 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 :log..}..namespa
ef20: 63 65 20 65 76 61 6c 20 73 79 6d 3a 3a 74 61 67 ce eval sym::tag
ef30: 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 {.. namespac
ef40: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
ef50: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
ef60: 76 73 3a 3a 73 74 61 74 65 0a 09 20 20 20 20 6e vs::state.. n
ef70: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
ef80: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
ef90: 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 port::cvs::integ
efa0: 72 69 74 79 0a 09 20 20 20 20 6e 61 6d 65 73 70 rity.. namesp
efb0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
efc0: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a 09 :tools::log..}..
efd0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 73 namespace eval s
efe0: 79 6d 3a 3a 62 72 61 6e 63 68 20 7b 0a 09 20 20 ym::branch {..
eff0: 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f namespace impo
f000: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a rt ::vc::fossil:
f010: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 :import::cvs::st
f020: 61 74 65 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 ate.. namespa
f030: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
f040: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
f050: 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 cvs::integrity..
f060: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d namespace im
f070: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 port ::vc::tools
f080: 3a 3a 6c 6f 67 0a 09 7d 0a 20 20 20 20 7d 0a 7d ::log..}. }.}
f090: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 ..# # ## ### ###
f0a0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
f0b0: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######### ######
f0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############.
f0d0: 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 ## Ready..packag
f0e0: 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f e provide vc::fo
f0f0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
f100: 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 20 s::project::rev
f110: 31 2e 30 0a 72 65 74 75 72 6e 0a 1.0.return.