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 69 74 65 6d 73 5d 0a 20 _lod $myitems].
0be0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
0bf0: 20 69 64 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 id {} { retu
0c00: 72 6e 20 24 6d 79 69 64 20 7d 0a 20 20 20 20 6d rn $myid }. m
0c10: 65 74 68 6f 64 20 69 74 65 6d 73 20 7b 7d 20 7b ethod items {} {
0c20: 20 72 65 74 75 72 6e 20 24 6d 79 74 69 74 65 6d return $mytitem
0c30: 73 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 s }. method d
0c40: 61 74 61 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e ata {} { return
0c50: 20 5b 6c 69 73 74 20 24 6d 79 70 72 6f 6a 65 63 [list $myprojec
0c60: 74 20 24 6d 79 74 79 70 65 20 24 6d 79 73 72 63 t $mytype $mysrc
0c70: 69 64 5d 20 7d 0a 0a 20 20 20 20 64 65 6c 65 67 id] }.. deleg
0c80: 61 74 65 20 6d 65 74 68 6f 64 20 62 79 73 79 6d ate method bysym
0c90: 62 6f 6c 20 20 20 74 6f 20 6d 79 74 79 70 65 6f bol to mytypeo
0ca0: 62 6a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 20 bj. delegate
0cb0: 6d 65 74 68 6f 64 20 62 79 72 65 76 69 73 69 6f method byrevisio
0cc0: 6e 20 74 6f 20 6d 79 74 79 70 65 6f 62 6a 0a 20 n to mytypeobj.
0cd0: 20 20 20 64 65 6c 65 67 61 74 65 20 6d 65 74 68 delegate meth
0ce0: 6f 64 20 69 73 62 72 61 6e 63 68 20 20 20 74 6f od isbranch to
0cf0: 20 6d 79 74 79 70 65 6f 62 6a 0a 20 20 20 20 64 mytypeobj. d
0d00: 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 69 elegate method i
0d10: 73 74 61 67 20 20 20 20 20 20 74 6f 20 6d 79 74 stag to myt
0d20: 79 70 65 6f 62 6a 0a 0a 20 20 20 20 6d 65 74 68 ypeobj.. meth
0d30: 6f 64 20 73 65 74 70 6f 73 20 7b 70 7d 20 7b 20 od setpos {p} {
0d40: 73 65 74 20 6d 79 70 6f 73 20 24 70 20 3b 20 72 set mypos $p ; r
0d50: 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 eturn }. meth
0d60: 6f 64 20 70 6f 73 20 20 20 20 7b 7d 20 20 7b 20 od pos {} {
0d70: 72 65 74 75 72 6e 20 24 6d 79 70 6f 73 20 7d 0a return $mypos }.
0d80: 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65 74 65 . method dete
0d90: 72 6d 69 6e 65 73 75 63 63 65 73 73 6f 72 73 20 rminesuccessors
0da0: 7b 7d 20 7b 0a 09 23 20 50 61 73 73 20 36 20 6f {} {..# Pass 6 o
0db0: 70 65 72 61 74 69 6f 6e 2e 20 43 6f 6d 70 75 74 peration. Comput
0dc0: 65 20 70 72 6f 6a 65 63 74 2d 6c 65 76 65 6c 20 e project-level
0dd0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 66 72 6f dependencies fro
0de0: 6d 0a 09 23 20 74 68 65 20 66 69 6c 65 2d 6c 65 m..# the file-le
0df0: 76 65 6c 20 64 61 74 61 20 61 6e 64 20 73 61 76 vel data and sav
0e00: 65 20 69 74 20 62 61 63 6b 20 74 6f 20 74 68 65 e it back to the
0e10: 20 73 74 61 74 65 2e 20 54 68 69 73 20 6d 61 79 state. This may
0e20: 0a 09 23 20 62 65 20 63 61 6c 6c 65 64 20 64 75 ..# be called du
0e30: 72 69 6e 67 20 74 68 65 20 63 79 63 6c 65 20 62 ring the cycle b
0e40: 72 65 61 6b 65 72 20 70 61 73 73 65 73 20 61 73 reaker passes as
0e50: 20 77 65 6c 6c 2c 20 74 6f 20 61 64 6a 75 73 74 well, to adjust
0e60: 0a 09 23 20 74 68 65 20 73 75 63 63 65 73 73 6f ..# the successo
0e70: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 66 r information of
0e80: 20 63 68 61 6e 67 65 73 65 74 73 20 77 68 69 63 changesets whic
0e90: 68 20 61 72 65 20 74 68 65 0a 09 23 20 70 72 65 h are the..# pre
0ea0: 64 65 63 65 73 73 6f 72 73 20 6f 66 20 64 72 6f decessors of dro
0eb0: 70 70 65 64 20 63 68 61 6e 67 65 73 65 74 73 2e pped changesets.
0ec0: 20 46 6f 72 20 74 68 65 6d 20 77 65 20 68 61 76 For them we hav
0ed0: 65 20 74 6f 0a 09 23 20 72 65 6d 6f 76 65 20 74 e to..# remove t
0ee0: 68 65 69 72 20 65 78 69 73 74 69 6e 67 20 69 6e heir existing in
0ef0: 66 6f 72 6d 61 74 69 6f 6e 20 66 69 72 73 74 20 formation first
0f00: 62 65 66 6f 72 65 20 69 6e 73 65 72 74 69 6e 67 before inserting
0f10: 20 74 68 65 0a 09 23 20 6e 65 77 20 64 61 74 61 the..# new data
0f20: 2e 0a 09 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 ...state run {..
0f30: 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 DELETE FROM
0f40: 63 73 73 75 63 63 65 73 73 6f 72 20 57 48 45 52 cssuccessor WHER
0f50: 45 20 63 69 64 20 3d 20 24 6d 79 69 64 3b 0a 09 E cid = $myid;..
0f60: 7d 0a 09 73 65 74 20 6c 6f 6f 70 20 30 0a 09 66 }..set loop 0..f
0f70: 6f 72 65 61 63 68 20 6e 69 64 20 5b 24 6d 79 74 oreach nid [$myt
0f80: 79 70 65 6f 62 6a 20 63 73 5f 73 75 63 63 65 73 ypeobj cs_succes
0f90: 73 6f 72 73 20 24 6d 79 69 74 65 6d 73 5d 20 7b sors $myitems] {
0fa0: 0a 09 20 20 20 20 73 74 61 74 65 20 72 75 6e 20 .. state run
0fb0: 7b 0a 09 09 49 4e 53 45 52 54 20 49 4e 54 4f 20 {...INSERT INTO
0fc0: 63 73 73 75 63 63 65 73 73 6f 72 20 28 63 69 64 cssuccessor (cid
0fd0: 2c 20 20 6e 69 64 29 0a 09 09 56 41 4c 55 45 53 , nid)...VALUES
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ff0: 20 20 28 24 6d 79 69 64 2c 24 6e 69 64 29 0a 09 ($myid,$nid)..
1000: 20 20 20 20 7d 0a 09 20 20 20 20 69 66 20 7b 24 }.. if {$
1010: 6e 69 64 20 3d 3d 20 24 6d 79 69 64 7d 20 7b 20 nid == $myid} {
1020: 73 65 74 20 6c 6f 6f 70 20 31 20 7d 0a 09 7d 0a set loop 1 }..}.
1030: 09 23 20 52 65 70 6f 72 74 20 61 66 74 65 72 20 .# Report after
1040: 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 73 74 72 the complete str
1050: 75 63 74 75 72 65 20 68 61 73 20 62 65 65 6e 20 ucture has been
1060: 73 61 76 65 64 2e 0a 09 69 66 20 7b 24 6c 6f 6f saved...if {$loo
1070: 70 7d 20 7b 20 24 73 65 6c 66 20 72 65 70 6f 72 p} { $self repor
1080: 74 6c 6f 6f 70 20 7d 0a 09 72 65 74 75 72 6e 0a tloop }..return.
1090: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 }.. # res
10a0: 75 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e ult = list (chan
10b0: 67 65 73 65 74 29 0a 20 20 20 20 6d 65 74 68 6f geset). metho
10c0: 64 20 73 75 63 63 65 73 73 6f 72 73 20 7b 7d 20 d successors {}
10d0: 7b 0a 09 23 20 55 73 65 20 74 68 65 20 64 61 74 {..# Use the dat
10e0: 61 20 73 61 76 65 64 20 62 79 20 70 61 73 73 20 a saved by pass
10f0: 36 2e 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 75 6...return [stru
1100: 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 5b 73 74 ct::list map [st
1110: 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 ate run {.. S
1120: 45 4c 45 43 54 20 53 2e 6e 69 64 0a 09 20 20 20 ELECT S.nid..
1130: 20 46 52 4f 4d 20 20 20 63 73 73 75 63 63 65 73 FROM cssucces
1140: 73 6f 72 20 53 0a 09 20 20 20 20 57 48 45 52 45 sor S.. WHERE
1150: 20 20 53 2e 63 69 64 20 3d 20 24 6d 79 69 64 0a S.cid = $myid.
1160: 09 7d 5d 20 5b 6d 79 74 79 70 65 6d 65 74 68 6f .}] [mytypemetho
1170: 64 20 6f 66 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 d of]]. }..
1180: 20 20 23 20 69 74 65 6d 20 2d 3e 20 6c 69 73 74 # item -> list
1190: 20 28 69 74 65 6d 29 0a 20 20 20 20 6d 65 74 68 (item). meth
11a0: 6f 64 20 6e 65 78 74 6d 61 70 20 7b 7d 20 7b 0a od nextmap {} {.
11b0: 09 24 6d 79 74 79 70 65 6f 62 6a 20 73 75 63 63 .$mytypeobj succ
11c0: 65 73 73 6f 72 73 20 74 6d 70 20 24 6d 79 69 74 essors tmp $myit
11d0: 65 6d 73 0a 09 72 65 74 75 72 6e 20 5b 61 72 72 ems..return [arr
11e0: 61 79 20 67 65 74 20 74 6d 70 5d 0a 20 20 20 20 ay get tmp].
11f0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 62 72 }.. method br
1200: 65 61 6b 69 6e 74 65 72 6e 61 6c 64 65 70 65 6e eakinternaldepen
1210: 64 65 6e 63 69 65 73 20 7b 63 76 7d 20 7b 0a 09 dencies {cv} {..
1220: 75 70 76 61 72 20 31 20 24 63 76 20 63 6f 75 6e upvar 1 $cv coun
1230: 74 65 72 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 ter..log write 1
1240: 34 20 63 73 65 74 73 20 7b 5b 24 73 65 6c 66 20 4 csets {[$self
1250: 73 74 72 5d 20 42 49 44 7d 0a 09 76 63 3a 3a 74 str] BID}..vc::t
1260: 6f 6f 6c 73 3a 3a 6d 65 6d 3a 3a 6d 61 72 6b 0a ools::mem::mark.
1270: 0a 09 23 20 54 68 69 73 20 6d 65 74 68 6f 64 20 ..# This method
1280: 69 6e 73 70 65 63 74 73 20 74 68 65 20 63 68 61 inspects the cha
1290: 6e 67 65 73 65 74 2c 20 6c 6f 6f 6b 69 6e 67 20 ngeset, looking
12a0: 66 6f 72 20 69 6e 74 65 72 6e 61 6c 0a 09 23 20 for internal..#
12b0: 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 4e 6f dependencies. No
12c0: 74 68 69 6e 67 20 69 73 20 64 6f 6e 65 20 69 66 thing is done if
12d0: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 73 75 there are no su
12e0: 63 68 2e 0a 0a 09 23 20 4f 74 68 65 72 77 69 73 ch....# Otherwis
12f0: 65 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 e the changeset
1300: 69 73 20 73 70 6c 69 74 20 69 6e 74 6f 20 61 20 is split into a
1310: 73 65 74 20 6f 66 20 66 72 61 67 6d 65 6e 74 73 set of fragments
1320: 0a 09 23 20 77 68 69 63 68 20 68 61 76 65 20 6e ..# which have n
1330: 6f 20 69 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e o internal depen
1340: 64 65 6e 63 69 65 73 2c 20 74 72 61 6e 73 66 6f dencies, transfo
1350: 72 6d 69 6e 67 20 74 68 65 0a 09 23 20 69 6e 74 rming the..# int
1360: 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 ernal dependenci
1370: 65 73 20 69 6e 74 6f 20 65 78 74 65 72 6e 61 6c es into external
1380: 20 6f 6e 65 73 2e 20 54 68 65 20 6e 65 77 20 63 ones. The new c
1390: 68 61 6e 67 65 73 65 74 73 0a 09 23 20 67 65 6e hangesets..# gen
13a0: 65 72 61 74 65 64 20 66 72 6f 6d 20 74 68 65 20 erated from the
13b0: 66 72 61 67 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 fragment informa
13c0: 74 69 6f 6e 20 61 72 65 20 61 64 64 65 64 20 74 tion are added t
13d0: 6f 20 74 68 65 0a 09 23 20 6c 69 73 74 20 6f 66 o the..# list of
13e0: 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 20 all changesets
13f0: 28 62 79 20 74 68 65 20 63 61 6c 6c 65 72 29 2e (by the caller).
1400: 0a 0a 09 23 20 54 68 65 20 63 6f 64 65 20 63 68 ...# The code ch
1410: 65 63 6b 73 20 6f 6e 6c 79 20 73 75 63 63 65 73 ecks only succes
1420: 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 69 65 73 sor dependencies
1430: 2c 20 61 73 20 74 68 69 73 20 61 75 74 6f 2d 0a , as this auto-.
1440: 09 23 20 6d 61 74 69 63 61 6c 6c 79 20 63 6f 76 .# matically cov
1450: 65 72 73 20 74 68 65 20 70 72 65 64 65 63 65 73 ers the predeces
1460: 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 69 65 73 sor dependencies
1470: 20 61 73 20 77 65 6c 6c 20 28 41 6e 79 0a 09 23 as well (Any..#
1480: 20 73 75 63 63 65 73 73 6f 72 20 64 65 70 65 6e successor depen
1490: 64 65 6e 63 79 20 61 20 2d 3e 20 62 20 69 73 20 dency a -> b is
14a0: 61 6c 73 6f 20 61 20 70 72 65 64 65 63 65 73 73 also a predecess
14b0: 6f 72 20 64 65 70 65 6e 64 65 6e 63 79 0a 09 23 or dependency..#
14c0: 20 62 20 2d 3e 20 61 29 2e 0a 0a 09 61 72 72 61 b -> a)....arra
14d0: 79 20 73 65 74 20 62 72 65 61 6b 73 20 7b 7d 0a y set breaks {}.
14e0: 0a 09 73 65 74 20 66 72 61 67 6d 65 6e 74 73 20 ..set fragments
14f0: 5b 42 72 65 61 6b 44 69 72 65 63 74 44 65 70 65 [BreakDirectDepe
1500: 6e 64 65 6e 63 69 65 73 20 24 6d 79 69 74 65 6d ndencies $myitem
1510: 73 20 62 72 65 61 6b 73 5d 0a 0a 09 69 66 20 7b s breaks]...if {
1520: 21 5b 6c 6c 65 6e 67 74 68 20 24 66 72 61 67 6d ![llength $fragm
1530: 65 6e 74 73 5d 7d 20 7b 20 72 65 74 75 72 6e 20 ents]} { return
1540: 7b 7d 20 7d 0a 0a 09 72 65 74 75 72 6e 20 5b 24 {} }...return [$
1550: 73 65 6c 66 20 43 72 65 61 74 65 46 72 6f 6d 46 self CreateFromF
1560: 72 61 67 6d 65 6e 74 73 20 24 66 72 61 67 6d 65 ragments $fragme
1570: 6e 74 73 20 63 6f 75 6e 74 65 72 20 62 72 65 61 nts counter brea
1580: 6b 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d ks]. }.. m
1590: 65 74 68 6f 64 20 70 65 72 73 69 73 74 20 7b 7d ethod persist {}
15a0: 20 7b 0a 09 73 65 74 20 74 69 64 20 24 6d 79 63 {..set tid $myc
15b0: 73 74 79 70 65 28 24 6d 79 74 79 70 65 29 0a 09 stype($mytype)..
15c0: 73 65 74 20 70 69 64 20 5b 24 6d 79 70 72 6f 6a set pid [$myproj
15d0: 65 63 74 20 69 64 5d 0a 09 73 65 74 20 70 6f 73 ect id]..set pos
15e0: 20 30 0a 0a 09 73 74 61 74 65 20 74 72 61 6e 73 0...state trans
15f0: 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74 action {.. st
1600: 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 ate run {...INSE
1610: 52 54 20 49 4e 54 4f 20 63 68 61 6e 67 65 73 65 RT INTO changese
1620: 74 20 28 63 69 64 2c 20 20 20 70 69 64 2c 20 20 t (cid, pid,
1630: 74 79 70 65 2c 20 73 72 63 29 0a 09 09 56 41 4c type, src)...VAL
1640: 55 45 53 20 20 20 20 20 20 20 20 20 20 20 20 20 UES
1650: 20 20 20 28 24 6d 79 69 64 2c 20 24 70 69 64 2c ($myid, $pid,
1660: 20 24 74 69 64 2c 20 24 6d 79 73 72 63 69 64 29 $tid, $mysrcid)
1670: 3b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 66 ;.. }... f
1680: 6f 72 65 61 63 68 20 69 69 64 20 24 6d 79 69 74 oreach iid $myit
1690: 65 6d 73 20 7b 0a 09 09 73 74 61 74 65 20 72 75 ems {...state ru
16a0: 6e 20 7b 0a 09 09 20 20 20 20 49 4e 53 45 52 54 n {... INSERT
16b0: 20 49 4e 54 4f 20 63 73 69 74 65 6d 20 28 63 69 INTO csitem (ci
16c0: 64 2c 20 20 20 70 6f 73 2c 20 20 69 69 64 29 0a d, pos, iid).
16d0: 09 09 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 .. VALUES
16e0: 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64 2c ($myid,
16f0: 20 24 70 6f 73 2c 20 24 69 69 64 29 3b 0a 09 09 $pos, $iid);...
1700: 7d 0a 09 09 69 6e 63 72 20 70 6f 73 0a 09 20 20 }...incr pos..
1710: 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 }..}..return.
1720: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
1730: 20 74 69 6d 65 72 61 6e 67 65 20 7b 7d 20 7b 20 timerange {} {
1740: 72 65 74 75 72 6e 20 5b 24 6d 79 74 79 70 65 6f return [$mytypeo
1750: 62 6a 20 74 69 6d 65 72 61 6e 67 65 20 24 6d 79 bj timerange $my
1760: 69 74 65 6d 73 5d 20 7d 0a 0a 20 20 20 20 6d 65 items] }.. me
1770: 74 68 6f 64 20 6c 69 6d 69 74 73 20 7b 7d 20 7b thod limits {} {
1780: 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 ..struct::list a
1790: 73 73 69 67 6e 20 5b 24 6d 79 74 79 70 65 6f 62 ssign [$mytypeob
17a0: 6a 20 6c 69 6d 69 74 73 20 24 6d 79 69 74 65 6d j limits $myitem
17b0: 73 5d 20 6d 61 78 70 20 6d 69 6e 73 0a 09 72 65 s] maxp mins..re
17c0: 74 75 72 6e 20 5b 6c 69 73 74 20 5b 54 61 67 49 turn [list [TagI
17d0: 74 65 6d 44 69 63 74 20 24 6d 61 78 70 20 24 6d temDict $maxp $m
17e0: 79 74 79 70 65 5d 20 5b 54 61 67 49 74 65 6d 44 ytype] [TagItemD
17f0: 69 63 74 20 24 6d 69 6e 73 20 24 6d 79 74 79 70 ict $mins $mytyp
1800: 65 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d e]]. }.. m
1810: 65 74 68 6f 64 20 64 72 6f 70 20 7b 7d 20 7b 0a ethod drop {} {.
1820: 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 .log write 8 cse
1830: 74 73 20 7b 44 72 6f 70 70 69 6e 67 20 24 73 65 ts {Dropping $se
1840: 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d lf = [$self str]
1850: 7d 0a 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 }...state transa
1860: 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74 61 ction {.. sta
1870: 74 65 20 72 75 6e 20 7b 0a 09 09 44 45 4c 45 54 te run {...DELET
1880: 45 20 46 52 4f 4d 20 63 68 61 6e 67 65 73 65 74 E FROM changeset
1890: 20 20 20 57 48 45 52 45 20 63 69 64 20 3d 20 24 WHERE cid = $
18a0: 6d 79 69 64 3b 0a 09 09 44 45 4c 45 54 45 20 46 myid;...DELETE F
18b0: 52 4f 4d 20 63 73 69 74 65 6d 20 20 20 20 20 20 ROM csitem
18c0: 57 48 45 52 45 20 63 69 64 20 3d 20 24 6d 79 69 WHERE cid = $myi
18d0: 64 3b 0a 09 09 44 45 4c 45 54 45 20 46 52 4f 4d d;...DELETE FROM
18e0: 20 63 73 73 75 63 63 65 73 73 6f 72 20 57 48 45 cssuccessor WHE
18f0: 52 45 20 63 69 64 20 3d 20 24 6d 79 69 64 3b 0a RE cid = $myid;.
1900: 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 55 6e 6d 61 . }..}...Unma
1910: 70 49 74 65 6d 73 20 24 6d 79 74 79 70 65 20 24 pItems $mytype $
1920: 6d 79 69 74 65 6d 73 0a 09 75 6e 73 65 74 20 6d myitems..unset m
1930: 79 69 64 6d 61 70 28 24 6d 79 69 64 29 0a 0a 09 yidmap($myid)...
1940: 73 65 74 20 70 6f 73 20 20 20 20 20 20 20 20 20 set pos
1950: 20 20 20 20 20 20 20 20 20 20 20 5b 6c 73 65 61 [lsea
1960: 72 63 68 20 2d 65 78 61 63 74 20 24 6d 79 63 68 rch -exact $mych
1970: 61 6e 67 65 73 65 74 73 20 24 73 65 6c 66 5d 0a angesets $self].
1980: 09 73 65 74 20 6d 79 63 68 61 6e 67 65 73 65 74 .set mychangeset
1990: 73 20 20 20 20 20 20 20 20 20 20 20 5b 6c 72 65 s [lre
19a0: 70 6c 61 63 65 20 20 20 20 20 20 20 24 6d 79 63 place $myc
19b0: 68 61 6e 67 65 73 65 74 73 20 24 70 6f 73 20 24 hangesets $pos $
19c0: 70 6f 73 5d 0a 09 73 65 74 20 70 6f 73 20 20 20 pos]..set pos
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19e0: 20 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 [lsearch -exact
19f0: 20 24 6d 79 74 63 68 61 6e 67 65 73 65 74 73 28 $mytchangesets(
1a00: 24 6d 79 74 79 70 65 29 20 24 73 65 6c 66 5d 0a $mytype) $self].
1a10: 09 73 65 74 20 6d 79 74 63 68 61 6e 67 65 73 65 .set mytchangese
1a20: 74 73 28 24 6d 79 74 79 70 65 29 20 5b 6c 72 65 ts($mytype) [lre
1a30: 70 6c 61 63 65 20 20 20 20 20 20 20 24 6d 79 74 place $myt
1a40: 63 68 61 6e 67 65 73 65 74 73 28 24 6d 79 74 79 changesets($myty
1a50: 70 65 29 20 24 70 6f 73 20 24 70 6f 73 5d 0a 0a pe) $pos $pos]..
1a60: 09 23 20 52 65 74 75 72 6e 20 74 68 65 20 6c 69 .# Return the li
1a70: 73 74 20 6f 66 20 70 72 65 64 65 63 65 73 73 6f st of predecesso
1a80: 72 73 20 73 6f 20 74 68 61 74 20 74 68 65 79 20 rs so that they
1a90: 63 61 6e 20 62 65 20 61 64 6a 75 73 74 65 64 2e can be adjusted.
1aa0: 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 75 63 74 ..return [struct
1ab0: 3a 3a 6c 69 73 74 20 6d 61 70 20 5b 73 74 61 74 ::list map [stat
1ac0: 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c e run {.. SEL
1ad0: 45 43 54 20 63 69 64 0a 09 20 20 20 20 46 52 4f ECT cid.. FRO
1ae0: 4d 20 20 20 63 73 73 75 63 63 65 73 73 6f 72 0a M cssuccessor.
1af0: 09 20 20 20 20 57 48 45 52 45 20 20 6e 69 64 20 . WHERE nid
1b00: 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 5b 6d 79 74 = $myid..}] [myt
1b10: 79 70 65 6d 65 74 68 6f 64 20 6f 66 5d 5d 0a 20 ypemethod of]].
1b20: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
1b30: 20 72 65 70 6f 72 74 6c 6f 6f 70 20 7b 7b 6b 69 reportloop {{ki
1b40: 6c 6c 20 31 7d 7d 20 7b 0a 09 23 20 57 65 20 70 ll 1}} {..# We p
1b50: 72 69 6e 74 20 74 68 65 20 69 74 65 6d 73 20 77 rint the items w
1b60: 68 69 63 68 20 61 72 65 20 70 72 6f 64 75 63 69 hich are produci
1b70: 6e 67 20 74 68 65 20 6c 6f 6f 70 2c 20 61 6e 64 ng the loop, and
1b80: 20 68 6f 77 2e 0a 0a 09 73 65 74 20 68 64 72 20 how....set hdr
1b90: 22 53 65 6c 66 2d 72 65 66 65 72 65 6e 74 69 61 "Self-referentia
1ba0: 6c 20 63 68 61 6e 67 65 73 65 74 20 5b 24 73 65 l changeset [$se
1bb0: 6c 66 20 73 74 72 5d 20 5f 5f 5f 5f 5f 5f 5f 5f lf str] ________
1bc0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 22 0a 09 73 65 74 __________"..set
1bd0: 20 66 74 72 20 5b 72 65 67 73 75 62 20 2d 61 6c ftr [regsub -al
1be0: 6c 20 7b 5b 5e 20 09 5d 7d 20 24 68 64 72 20 7b l {[^ .]} $hdr {
1bf0: 5f 7d 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 _}]...log write
1c00: 30 20 63 73 65 74 73 20 24 68 64 72 0a 09 66 6f 0 csets $hdr..fo
1c10: 72 65 61 63 68 20 7b 69 74 65 6d 20 6e 65 78 74 reach {item next
1c20: 69 74 65 6d 7d 20 5b 24 6d 79 74 79 70 65 6f 62 item} [$mytypeob
1c30: 6a 20 6c 6f 6f 70 73 20 24 6d 79 69 74 65 6d 73 j loops $myitems
1c40: 5d 20 7b 0a 09 20 20 20 20 23 20 43 72 65 61 74 ] {.. # Creat
1c50: 65 20 74 61 67 67 65 64 20 69 74 65 6d 73 20 66 e tagged items f
1c60: 72 6f 6d 20 74 68 65 20 69 64 20 61 6e 64 20 6f rom the id and o
1c70: 75 72 20 74 79 70 65 2e 0a 09 20 20 20 20 73 65 ur type... se
1c80: 74 20 69 74 65 6d 20 20 20 20 20 5b 6c 69 73 74 t item [list
1c90: 20 24 6d 79 74 79 70 65 20 20 24 69 74 65 6d 5d $mytype $item]
1ca0: 0a 09 20 20 20 20 73 65 74 20 6e 65 78 74 69 74 .. set nextit
1cb0: 65 6d 20 5b 6c 69 73 74 20 24 6d 79 74 79 70 65 em [list $mytype
1cc0: 20 24 6e 65 78 74 69 74 65 6d 5d 0a 09 20 20 20 $nextitem]..
1cd0: 20 23 20 50 72 69 6e 74 61 62 6c 65 20 6c 61 62 # Printable lab
1ce0: 65 6c 73 2e 0a 09 20 20 20 20 73 65 74 20 69 20 els... set i
1cf0: 20 22 3c 5b 24 74 79 70 65 20 69 74 65 6d 73 74 "<[$type itemst
1d00: 72 20 24 69 74 65 6d 5d 3e 22 0a 09 20 20 20 20 r $item]>"..
1d10: 73 65 74 20 6e 20 20 22 3c 5b 24 74 79 70 65 20 set n "<[$type
1d20: 69 74 65 6d 73 74 72 20 24 6e 65 78 74 69 74 65 itemstr $nextite
1d30: 6d 5d 3e 22 0a 09 20 20 20 20 73 65 74 20 6e 63 m]>".. set nc
1d40: 73 20 24 6d 79 69 74 65 6d 6d 61 70 28 24 6e 65 s $myitemmap($ne
1d50: 78 74 69 74 65 6d 29 0a 09 20 20 20 20 23 20 50 xtitem).. # P
1d60: 72 69 6e 74 0a 09 20 20 20 20 6c 6f 67 20 77 72 rint.. log wr
1d70: 69 74 65 20 30 20 63 73 65 74 73 20 7b 2a 20 24 ite 0 csets {* $
1d80: 69 20 2d 2d 3e 20 24 6e 20 2d 2d 3e 20 63 73 20 i --> $n --> cs
1d90: 5b 24 6e 63 73 20 73 74 72 5d 7d 0a 09 7d 0a 09 [$ncs str]}..}..
1da0: 6c 6f 67 20 77 72 69 74 65 20 30 20 63 73 65 74 log write 0 cset
1db0: 73 20 24 66 74 72 0a 0a 09 69 66 20 7b 21 24 6b s $ftr...if {!$k
1dc0: 69 6c 6c 7d 20 72 65 74 75 72 6e 0a 09 74 72 6f ill} return..tro
1dd0: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 5b uble internal "[
1de0: 24 73 65 6c 66 20 73 74 72 5d 20 64 65 70 65 6e $self str] depen
1df0: 64 73 20 6f 6e 20 69 74 73 65 6c 66 22 0a 09 72 ds on itself"..r
1e00: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
1e10: 20 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 20 7b method pushto {
1e20: 72 65 70 6f 73 69 74 6f 72 79 20 64 61 74 65 20 repository date
1e30: 72 73 74 61 74 65 7d 20 7b 0a 09 23 20 47 65 6e rstate} {..# Gen
1e40: 65 72 61 74 65 20 61 6e 64 20 69 6d 70 6f 72 74 erate and import
1e50: 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 66 6f the manifest fo
1e60: 72 20 74 68 69 73 20 63 68 61 6e 67 65 73 65 74 r this changeset
1e70: 2e 0a 09 23 0a 09 23 20 44 61 74 61 20 6e 65 65 ...#..# Data nee
1e80: 64 65 64 3a 0a 09 23 20 2d 20 43 6f 6d 6d 69 74 ded:..# - Commit
1e90: 20 6d 65 73 73 61 67 65 20 20 20 20 20 20 20 20 message
1ea0: 20 20 20 20 20 20 20 28 2d 2d 20 6d 79 73 72 63 (-- mysrc
1eb0: 69 64 20 2d 3e 20 72 65 70 6f 73 69 74 6f 72 79 id -> repository
1ec0: 20 6d 65 74 61 29 0a 09 23 20 2d 20 55 73 65 72 meta)..# - User
1ed0: 20 64 6f 69 6e 67 20 74 68 65 20 63 6f 6d 6d 69 doing the commi
1ee0: 74 20 20 20 20 20 20 20 20 28 73 2e 61 2e 29 0a t (s.a.).
1ef0: 09 23 0a 09 23 20 2d 20 54 69 6d 65 73 74 61 6d .#..# - Timestam
1f00: 70 20 6f 66 20 77 68 65 6e 20 63 6f 6d 6d 69 74 p of when commit
1f10: 74 65 64 20 20 28 63 6f 6d 6d 61 6e 64 20 61 72 ted (command ar
1f20: 67 75 6d 65 6e 74 29 0a 09 23 0a 09 23 20 2d 20 gument)..#..# -
1f30: 54 68 65 20 70 61 72 65 6e 74 20 63 68 61 6e 67 The parent chang
1f40: 65 73 65 74 2c 20 69 66 20 61 6e 79 2e 20 49 66 eset, if any. If
1f50: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 61 72 there is no par
1f60: 65 6e 74 20 66 6f 73 73 69 6c 0a 09 23 20 20 20 ent fossil..#
1f70: 77 69 6c 6c 20 75 73 65 20 74 68 65 20 65 6d 70 will use the emp
1f80: 74 79 20 62 61 73 65 20 72 65 76 69 73 69 6f 6e ty base revision
1f90: 20 61 73 20 70 61 72 65 6e 74 2e 0a 09 23 0a 09 as parent...#..
1fa0: 23 20 2d 20 4c 69 73 74 20 6f 66 20 74 68 65 20 # - List of the
1fb0: 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 73 20 69 file revisions i
1fc0: 6e 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 2e n the changeset.
1fd0: 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 ...struct::list
1fe0: 61 73 73 69 67 6e 20 5b 24 6d 79 70 72 6f 6a 65 assign [$myproje
1ff0: 63 74 20 67 65 74 6d 65 74 61 20 24 6d 79 73 72 ct getmeta $mysr
2000: 63 69 64 5d 20 5f 5f 20 5f 5f 20 75 73 65 72 20 cid] __ __ user
2010: 6d 65 73 73 61 67 65 0a 0a 09 23 20 57 65 20 64 message...# We d
2020: 65 72 69 76 65 20 74 68 65 20 6c 6f 64 20 69 6e erive the lod in
2030: 66 6f 72 6d 61 74 69 6f 6e 20 64 69 72 65 63 74 formation direct
2040: 6c 79 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 ly from the revi
2050: 73 69 6f 6e 73 20 6f 66 0a 09 23 20 74 68 65 20 sions of..# the
2060: 63 68 61 6e 67 65 73 65 74 2c 20 61 73 20 74 68 changeset, as th
2070: 65 20 62 72 61 6e 63 68 20 70 61 72 74 20 6f 66 e branch part of
2080: 20 74 68 65 20 6d 65 74 61 20 64 61 74 61 20 28 the meta data (
2090: 73 2e 61 2e 29 20 69 73 0a 09 23 20 6f 75 74 64 s.a.) is..# outd
20a0: 61 74 65 64 20 73 69 6e 63 65 20 70 61 73 73 20 ated since pass
20b0: 46 69 6c 74 65 72 53 79 6d 62 6f 6c 73 2e 0a 0a FilterSymbols...
20c0: 09 73 65 74 20 6c 6f 64 6e 61 6d 65 20 5b 24 73 .set lodname [$s
20d0: 65 6c 66 20 6c 6f 64 5d 0a 0a 09 6c 6f 67 20 77 elf lod]...log w
20e0: 72 69 74 65 20 32 20 63 73 65 74 73 20 7b 49 6d rite 2 csets {Im
20f0: 70 6f 72 74 69 6e 67 20 72 65 76 69 73 69 6f 6e porting revision
2100: 20 5b 24 73 65 6c 66 20 73 74 72 5d 20 6f 6e 20 [$self str] on
2110: 24 6c 6f 64 6e 61 6d 65 7d 0a 0a 09 23 20 50 65 $lodname}...# Pe
2120: 72 66 6f 72 6d 20 74 68 65 20 69 6d 70 6f 72 74 rform the import
2130: 2e 20 41 73 20 70 61 72 74 20 6f 66 20 74 68 61 . As part of tha
2140: 74 20 77 65 20 64 65 74 65 72 6d 69 6e 65 20 74 t we determine t
2150: 68 65 20 70 61 72 65 6e 74 0a 09 23 20 77 65 20 he parent..# we
2160: 6e 65 65 64 2c 20 61 6e 64 20 63 6f 6e 76 65 72 need, and conver
2170: 74 20 74 68 65 20 6c 69 73 74 20 6f 66 20 69 74 t the list of it
2180: 65 6d 73 20 69 6e 20 74 68 65 20 63 68 61 6e 67 ems in the chang
2190: 65 73 65 74 20 69 6e 74 6f 0a 09 23 20 75 75 69 eset into..# uui
21a0: 64 73 20 61 6e 64 20 70 72 69 6e 74 61 62 6c 65 ds and printable
21b0: 20 64 61 74 61 2e 0a 0a 09 73 74 72 75 63 74 3a data....struct:
21c0: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 47 65 :list assign [Ge
21d0: 74 69 73 64 65 66 61 75 6c 74 20 24 6d 79 69 74 tisdefault $myit
21e0: 65 6d 73 5d 20 69 73 64 65 66 61 75 6c 74 20 6c ems] isdefault l
21f0: 61 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e astdefaultontrun
2200: 6b 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 k...log write 8
2210: 63 73 65 74 73 20 7b 4c 4f 44 20 20 20 20 27 24 csets {LOD '$
2220: 6c 6f 64 6e 61 6d 65 27 7d 0a 09 6c 6f 67 20 77 lodname'}..log w
2230: 72 69 74 65 20 38 20 63 73 65 74 73 20 7b 20 64 rite 8 csets { d
2240: 65 66 3f 20 20 24 69 73 64 65 66 61 75 6c 74 7d ef? $isdefault}
2250: 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 ..log write 8 cs
2260: 65 74 73 20 7b 20 6c 61 73 74 3f 20 24 6c 61 73 ets { last? $las
2270: 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b 7d tdefaultontrunk}
2280: 0a 0a 09 73 65 74 20 6c 77 73 20 20 5b 47 65 74 ...set lws [Get
2290: 77 6f 72 6b 73 70 61 63 65 20 20 20 20 24 72 73 workspace $rs
22a0: 74 61 74 65 20 24 6c 6f 64 6e 61 6d 65 20 24 6d tate $lodname $m
22b0: 79 70 72 6f 6a 65 63 74 20 24 69 73 64 65 66 61 yproject $isdefa
22c0: 75 6c 74 5d 0a 09 24 6c 77 73 20 61 64 64 20 5b ult]..$lws add [
22d0: 47 65 74 72 65 76 69 73 69 6f 6e 69 6e 66 6f 20 Getrevisioninfo
22e0: 24 6d 79 69 74 65 6d 73 5d 0a 0a 09 73 65 74 20 $myitems]...set
22f0: 75 75 69 64 20 5b 24 72 65 70 6f 73 69 74 6f 72 uuid [$repositor
2300: 79 20 69 6d 70 6f 72 74 72 65 76 69 73 69 6f 6e y importrevision
2310: 20 5b 24 73 65 6c 66 20 73 74 72 5d 20 5c 0a 09 [$self str] \..
2320: 09 20 20 20 20 20 20 24 75 73 65 72 20 24 6d 65 . $user $me
2330: 73 73 61 67 65 20 24 64 61 74 65 20 5c 0a 09 09 ssage $date \...
2340: 20 20 20 20 20 20 5b 24 6c 77 73 20 67 65 74 69 [$lws geti
2350: 64 5d 20 5b 24 6c 77 73 20 67 65 74 5d 5d 0a 0a d] [$lws get]]..
2360: 09 23 20 52 65 6d 65 6d 62 65 72 20 74 68 65 20 .# Remember the
2370: 69 6d 70 6f 72 74 65 64 20 63 68 61 6e 67 65 73 imported changes
2380: 65 74 20 69 6e 20 74 68 65 20 73 74 61 74 65 2c et in the state,
2390: 20 75 6e 64 65 72 20 6f 75 72 0a 09 23 20 4c 4f under our..# LO
23a0: 44 2e 20 41 6e 64 20 69 66 20 69 74 20 69 73 20 D. And if it is
23b0: 74 68 65 20 6c 61 73 74 20 74 72 75 6e 6b 20 63 the last trunk c
23c0: 68 61 6e 67 65 73 65 74 20 6f 6e 20 74 68 65 20 hangeset on the
23d0: 76 65 6e 64 6f 72 0a 09 23 20 62 72 61 6e 63 68 vendor..# branch
23e0: 20 74 68 65 6e 20 74 68 65 20 72 65 76 69 73 69 then the revisi
23f0: 6f 6e 20 69 73 20 61 6c 73 6f 20 74 68 65 20 61 on is also the a
2400: 63 74 75 61 6c 20 72 6f 6f 74 20 6f 66 20 74 68 ctual root of th
2410: 65 0a 09 23 20 3a 74 72 75 6e 6b 3a 2c 20 73 6f e..# :trunk:, so
2420: 20 77 65 20 72 65 6d 65 6d 62 65 72 20 69 74 20 we remember it
2430: 61 73 20 73 75 63 68 20 69 6e 20 74 68 65 20 73 as such in the s
2440: 74 61 74 65 2e 20 48 6f 77 65 76 65 72 20 69 66 tate. However if
2450: 0a 09 23 20 74 68 65 20 74 72 75 6e 6b 20 61 6c ..# the trunk al
2460: 72 65 61 64 79 20 65 78 69 73 74 73 20 74 68 65 ready exists the
2470: 6e 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 n the changeset
2480: 63 61 6e 6e 6f 74 20 62 65 20 6f 6e 20 69 74 0a cannot be on it.
2490: 09 23 20 61 6e 79 20 6d 6f 72 65 2e 20 54 68 69 .# any more. Thi
24a0: 73 20 69 6e 64 69 63 61 74 65 73 20 77 65 69 72 s indicates weir
24b0: 64 6e 65 73 73 20 69 6e 20 74 68 65 20 73 65 74 dness in the set
24c0: 75 70 20 6f 66 20 74 68 65 0a 09 23 20 76 65 6e up of the..# ven
24d0: 64 6f 72 20 62 72 61 6e 63 68 2c 20 62 75 74 20 dor branch, but
24e0: 6f 6e 65 20 77 65 20 63 61 6e 20 77 6f 72 6b 20 one we can work
24f0: 61 72 6f 75 6e 64 2e 0a 0a 09 24 6c 77 73 20 64 around....$lws d
2500: 65 66 69 64 20 24 75 75 69 64 0a 09 69 66 20 7b efid $uuid..if {
2510: 24 6c 61 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 $lastdefaultontr
2520: 75 6e 6b 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b unk} {.. if {
2530: 5b 24 72 73 74 61 74 65 20 68 61 73 20 3a 74 72 [$rstate has :tr
2540: 75 6e 6b 3a 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 unk:]} {...log w
2550: 72 69 74 65 20 32 20 63 73 65 74 73 20 7b 4d 75 rite 2 csets {Mu
2560: 6c 74 69 70 6c 65 20 63 68 61 6e 67 65 73 65 74 ltiple changeset
2570: 73 20 64 65 63 6c 61 72 65 64 20 74 6f 20 62 65 s declared to be
2580: 20 74 68 65 20 6c 61 73 74 20 74 72 75 6e 6b 20 the last trunk
2590: 63 68 61 6e 67 65 73 65 74 20 6f 6e 20 74 68 65 changeset on the
25a0: 20 76 65 6e 64 6f 72 2d 62 72 61 6e 63 68 7d 0a vendor-branch}.
25b0: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 . } else {...
25c0: 24 72 73 74 61 74 65 20 6e 65 77 20 3a 74 72 75 $rstate new :tru
25d0: 6e 6b 3a 20 5b 24 6c 77 73 20 6e 61 6d 65 5d 0a nk: [$lws name].
25e0: 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 52 65 . }..}...# Re
25f0: 6d 65 6d 62 65 72 20 74 68 65 20 77 68 6f 6c 65 member the whole
2600: 20 63 68 61 6e 67 65 73 65 74 20 2f 20 75 75 69 changeset / uui
2610: 64 20 6d 61 70 70 69 6e 67 2c 20 66 6f 72 20 74 d mapping, for t
2620: 68 65 20 74 61 67 73 2e 0a 0a 09 73 74 61 74 65 he tags....state
2630: 20 72 75 6e 20 7b 0a 09 20 20 20 20 49 4e 53 45 run {.. INSE
2640: 52 54 20 49 4e 54 4f 20 63 73 75 75 69 64 20 28 RT INTO csuuid (
2650: 63 69 64 2c 20 20 20 75 75 69 64 29 0a 09 20 20 cid, uuid)..
2660: 20 20 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 VALUES
2670: 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24 75 75 ($myid, $uu
2680: 69 64 29 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 id)..}..return.
2690: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 47 }.. proc G
26a0: 65 74 72 65 76 69 73 69 6f 6e 69 6e 66 6f 20 7b etrevisioninfo {
26b0: 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 73 65 revisions} {..se
26c0: 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e t theset ('[join
26d0: 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 $revisions {','
26e0: 7d 5d 27 29 0a 09 73 65 74 20 72 65 76 69 73 69 }]')..set revisi
26f0: 6f 6e 73 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 ons {}..foreach
2700: 7b 66 72 69 64 20 70 61 74 68 20 66 6e 61 6d 65 {frid path fname
2710: 20 72 65 76 6e 72 20 72 6f 70 7d 20 5b 73 74 61 revnr rop} [sta
2720: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e te run [subst -n
2730: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 ocommands -nobac
2740: 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 kslashes {..
2750: 53 45 4c 45 43 54 20 55 2e 75 75 69 64 2c 20 46 SELECT U.uuid, F
2760: 2e 76 69 73 69 62 6c 65 2c 20 46 2e 6e 61 6d 65 .visible, F.name
2770: 2c 20 52 2e 72 65 76 2c 20 52 2e 6f 70 0a 09 20 , R.rev, R.op..
2780: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
2790: 6f 6e 20 52 2c 20 72 65 76 75 75 69 64 20 55 2c on R, revuuid U,
27a0: 20 66 69 6c 65 20 46 0a 09 20 20 20 20 57 48 45 file F.. WHE
27b0: 52 45 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68 RE R.rid IN $th
27c0: 65 73 65 74 20 20 2d 2d 20 41 6c 6c 20 73 70 65 eset -- All spe
27d0: 63 69 66 69 65 64 20 72 65 76 69 73 69 6f 6e 73 cified revisions
27e0: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 55 2e 72 .. AND U.r
27f0: 69 64 20 3d 20 52 2e 72 69 64 20 20 20 20 20 2d id = R.rid -
2800: 2d 20 67 65 74 20 66 6f 73 73 69 6c 20 75 75 69 - get fossil uui
2810: 64 20 6f 66 20 72 65 76 69 73 69 6f 6e 0a 09 20 d of revision..
2820: 20 20 20 41 4e 44 20 20 20 20 46 2e 66 69 64 20 AND F.fid
2830: 3d 20 52 2e 66 69 64 20 20 20 20 20 2d 2d 20 67 = R.fid -- g
2840: 65 74 20 66 69 6c 65 20 6f 66 20 72 65 76 69 73 et file of revis
2850: 69 6f 6e 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 ion..}]] {..
2860: 6c 61 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e lappend revision
2870: 73 20 24 66 72 69 64 20 24 70 61 74 68 20 24 66 s $frid $path $f
2880: 6e 61 6d 65 2f 24 72 65 76 6e 72 20 24 72 6f 70 name/$revnr $rop
2890: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 72 65 76 ..}..return $rev
28a0: 69 73 69 6f 6e 73 0a 20 20 20 20 7d 0a 0a 20 20 isions. }..
28b0: 20 20 70 72 6f 63 20 47 65 74 77 6f 72 6b 73 70 proc Getworksp
28c0: 61 63 65 20 7b 72 73 74 61 74 65 20 6c 6f 64 6e ace {rstate lodn
28d0: 61 6d 65 20 70 72 6f 6a 65 63 74 20 69 73 64 65 ame project isde
28e0: 66 61 75 6c 74 7d 20 7b 0a 0a 09 23 20 54 68 65 fault} {...# The
28f0: 20 73 74 61 74 65 20 6f 62 6a 65 63 74 20 68 6f state object ho
2900: 6c 64 73 20 74 68 65 20 77 6f 72 6b 73 70 61 63 lds the workspac
2910: 65 20 73 74 61 74 65 20 6f 66 20 65 61 63 68 20 e state of each
2920: 6b 6e 6f 77 6e 0a 09 23 20 6c 69 6e 65 2d 6f 66 known..# line-of
2930: 2d 64 65 76 65 6c 6f 70 6d 65 6e 74 20 28 4c 4f -development (LO
2940: 44 29 2c 20 75 70 20 74 6f 20 74 68 65 20 6c 61 D), up to the la
2950: 73 74 20 63 6f 6d 6d 69 74 74 65 64 0a 09 23 20 st committed..#
2960: 63 68 61 6e 67 65 73 65 74 20 62 65 6c 6f 6e 67 changeset belong
2970: 69 6e 67 20 74 6f 20 74 68 61 74 20 4c 4f 44 2e ing to that LOD.
2980: 0a 0a 09 23 20 28 2a 29 20 53 74 61 6e 64 61 72 ...# (*) Standar
2990: 64 20 68 61 6e 64 6c 69 6e 67 20 69 66 20 69 6e d handling if in
29a0: 2d 4c 4f 44 20 63 68 61 6e 67 65 73 65 74 73 2e -LOD changesets.
29b0: 20 49 66 20 74 68 65 20 4c 4f 44 20 6f 66 0a 09 If the LOD of..
29c0: 23 20 20 20 20 20 74 68 65 20 63 75 72 72 65 6e # the curren
29d0: 74 20 63 68 61 6e 67 65 73 65 74 20 65 78 69 73 t changeset exis
29e0: 74 73 20 69 6e 20 74 68 65 20 73 74 61 74 65 20 ts in the state
29f0: 28 3d 20 68 61 73 20 62 65 65 6e 0a 09 23 20 20 (= has been..#
2a00: 20 20 20 63 6f 6d 6d 69 74 74 65 64 20 74 6f 29 committed to)
2a10: 20 74 68 65 6e 20 74 68 69 73 20 69 74 20 68 61 then this it ha
2a20: 73 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65 20 s the workspace
2a30: 77 65 20 61 72 65 0a 09 23 20 20 20 20 20 6c 6f we are..# lo
2a40: 6f 6b 69 6e 67 20 66 6f 72 2e 0a 0a 09 69 66 20 oking for....if
2a50: 7b 5b 24 72 73 74 61 74 65 20 68 61 73 20 24 6c {[$rstate has $l
2a60: 6f 64 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 odname]} {..
2a70: 72 65 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 return [$rstate
2a80: 67 65 74 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d get $lodname]..}
2a90: 0a 0a 09 23 20 49 66 20 74 68 65 20 4c 4f 44 20 ...# If the LOD
2aa0: 69 73 20 68 6f 77 65 76 65 72 20 6e 6f 74 20 79 is however not y
2ab0: 65 74 20 6b 6e 6f 77 6e 2c 20 74 68 65 6e 20 74 et known, then t
2ac0: 68 65 20 63 75 72 72 65 6e 74 0a 09 23 20 63 68 he current..# ch
2ad0: 61 6e 67 65 73 65 74 20 63 61 6e 20 62 65 20 65 angeset can be e
2ae0: 69 74 68 65 72 20 6f 66 0a 09 23 20 28 61 29 20 ither of..# (a)
2af0: 72 6f 6f 74 20 6f 66 20 61 20 76 65 6e 64 6f 72 root of a vendor
2b00: 20 62 72 61 6e 63 68 2c 0a 09 23 20 28 62 29 20 branch,..# (b)
2b10: 72 6f 6f 74 20 6f 66 20 74 68 65 20 74 72 75 6e root of the trun
2b20: 6b 20 4c 4f 44 2c 20 6f 72 0a 09 23 20 28 63 29 k LOD, or..# (c)
2b30: 20 74 68 65 20 66 69 72 73 74 20 63 68 61 6e 67 the first chang
2b40: 65 73 65 74 20 69 6e 20 61 20 6e 65 77 20 4c 4f eset in a new LO
2b50: 44 20 77 68 69 63 68 20 77 61 73 20 73 70 61 77 D which was spaw
2b60: 6e 65 64 20 66 72 6f 6d 0a 09 23 20 20 20 20 20 ned from..#
2b70: 61 6e 20 65 78 69 73 74 69 6e 67 20 4c 4f 44 2e an existing LOD.
2b80: 0a 0a 09 23 20 46 6f 72 20 62 6f 74 68 20 28 61 ...# For both (a
2b90: 29 20 61 6e 64 20 28 62 29 20 77 65 20 68 61 76 ) and (b) we hav
2ba0: 65 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 e to create a ne
2bb0: 77 20 77 6f 72 6b 73 70 61 63 65 20 66 6f 72 0a w workspace for.
2bc0: 09 23 20 74 68 65 20 6c 6f 64 2c 20 61 6e 64 20 .# the lod, and
2bd0: 69 74 20 64 6f 65 73 6e 27 74 20 69 6e 68 65 72 it doesn't inher
2be0: 69 74 20 66 72 6f 6d 20 61 6e 79 74 68 69 6e 67 it from anything
2bf0: 2e 0a 0a 09 23 20 4f 6e 65 20 65 78 63 65 70 74 ....# One except
2c00: 69 6f 6e 20 66 6f 72 20 28 61 29 2e 20 49 66 20 ion for (a). If
2c10: 77 65 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 we already have
2c20: 61 20 3a 76 65 6e 64 6f 72 3a 20 62 72 61 6e 63 a :vendor: branc
2c30: 68 0a 09 23 20 74 68 65 6e 20 6d 75 6c 74 69 70 h..# then multip
2c40: 6c 65 20 73 79 6d 62 6f 6c 73 20 77 65 72 65 20 le symbols were
2c50: 75 73 65 64 20 66 6f 72 20 74 68 65 20 76 65 6e used for the ven
2c60: 64 6f 72 20 62 72 61 6e 63 68 20 62 79 0a 09 23 dor branch by..#
2c70: 20 64 69 66 66 65 72 65 6e 74 20 66 69 6c 65 73 different files
2c80: 2e 20 49 6e 20 74 68 61 74 20 63 61 73 65 20 74 . In that case t
2c90: 68 65 20 27 6e 65 77 27 20 62 72 61 6e 63 68 20 he 'new' branch
2ca0: 69 73 20 6d 61 64 65 20 61 6e 0a 09 23 20 61 6c is made an..# al
2cb0: 69 61 73 20 6f 66 20 74 68 65 20 3a 76 65 6e 64 ias of the :vend
2cc0: 6f 72 3a 2c 20 65 66 66 65 63 74 69 76 65 6c 79 or:, effectively
2cd0: 20 6d 65 72 67 69 6e 67 20 74 68 65 20 73 79 6d merging the sym
2ce0: 62 6f 6c 73 0a 09 23 20 74 6f 67 65 74 68 65 72 bols..# together
2cf0: 2e 0a 0a 09 23 20 4e 6f 74 65 20 74 68 61 74 20 ....# Note that
2d00: 63 61 73 65 20 28 62 29 20 6d 61 79 20 6e 65 76 case (b) may nev
2d10: 65 72 20 6f 63 63 75 72 2e 20 53 65 65 20 74 68 er occur. See th
2d20: 65 20 76 61 72 69 61 62 6c 65 0a 09 23 20 27 6c e variable..# 'l
2d30: 61 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e astdefaultontrun
2d40: 6b 27 20 69 6e 20 74 68 65 20 63 61 6c 6c 65 72 k' in the caller
2d50: 20 28 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 29 (method pushto)
2d60: 2e 20 54 68 69 73 0a 09 23 20 66 6c 61 67 20 63 . This..# flag c
2d70: 61 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f an the generatio
2d80: 6e 20 6f 66 20 74 68 65 20 77 6f 72 6b 73 70 61 n of the workspa
2d90: 63 65 20 66 6f 72 20 74 68 65 20 3a 74 72 75 6e ce for the :trun
2da0: 6b 3a 20 4c 4f 44 0a 09 23 20 61 73 20 77 65 6c k: LOD..# as wel
2db0: 6c 2c 20 6d 61 6b 69 6e 67 20 69 74 20 69 6e 68 l, making it inh
2dc0: 65 72 69 74 20 74 68 65 20 73 74 61 74 65 20 6f erit the state o
2dd0: 66 20 74 68 65 20 6c 61 73 74 0a 09 23 20 74 72 f the last..# tr
2de0: 75 6e 6b 2d 63 68 61 6e 67 65 73 65 74 20 6f 6e unk-changeset on
2df0: 20 74 68 65 20 76 65 6e 64 6f 72 2d 62 72 61 6e the vendor-bran
2e00: 63 68 2e 0a 0a 09 69 66 20 7b 24 69 73 64 65 66 ch....if {$isdef
2e10: 61 75 6c 74 7d 20 7b 0a 09 20 20 20 20 69 66 20 ault} {.. if
2e20: 7b 21 5b 24 72 73 74 61 74 65 20 68 61 73 20 22 {![$rstate has "
2e30: 3a 76 65 6e 64 6f 72 3a 22 5d 7d 20 7b 0a 09 09 :vendor:"]} {...
2e40: 23 20 43 72 65 61 74 65 20 74 68 65 20 76 65 6e # Create the ven
2e50: 64 6f 72 20 62 72 61 6e 63 68 20 69 66 20 6e 6f dor branch if no
2e60: 74 20 70 72 65 73 65 6e 74 20 61 6c 72 65 61 64 t present alread
2e70: 79 2e 0a 09 09 24 72 73 74 61 74 65 20 6e 65 77 y....$rstate new
2e80: 20 3a 76 65 6e 64 6f 72 3a 0a 09 20 20 20 20 7d :vendor:.. }
2e90: 0a 09 20 20 20 20 23 20 4d 65 72 67 65 20 74 68 .. # Merge th
2ea0: 65 20 6e 65 77 20 73 79 6d 62 6f 6c 20 74 6f 20 e new symbol to
2eb0: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 the vendor branc
2ec0: 68 0a 09 20 20 20 20 24 72 73 74 61 74 65 20 64 h.. $rstate d
2ed0: 75 70 20 24 6c 6f 64 6e 61 6d 65 20 3c 2d 2d 20 up $lodname <--
2ee0: 3a 76 65 6e 64 6f 72 3a 0a 09 20 20 20 20 72 65 :vendor:.. re
2ef0: 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 67 65 turn [$rstate ge
2f00: 74 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a t $lodname]..}..
2f10: 09 69 66 20 7b 24 6c 6f 64 6e 61 6d 65 20 65 71 .if {$lodname eq
2f20: 20 22 3a 74 72 75 6e 6b 3a 22 7d 20 7b 0a 09 20 ":trunk:"} {..
2f30: 20 20 20 72 65 74 75 72 6e 20 5b 24 72 73 74 61 return [$rsta
2f40: 74 65 20 6e 65 77 20 24 6c 6f 64 6e 61 6d 65 5d te new $lodname]
2f50: 0a 09 7d 0a 0a 09 23 20 43 61 73 65 20 28 63 29 ..}...# Case (c)
2f60: 2e 20 57 65 20 66 69 6e 64 20 74 68 65 20 70 61 . We find the pa
2f70: 72 65 6e 74 20 4c 4f 44 20 6f 66 20 6f 75 72 20 rent LOD of our
2f80: 4c 4f 44 20 61 6e 64 20 6c 65 74 20 74 68 65 20 LOD and let the
2f90: 6e 65 77 0a 09 23 20 77 6f 72 6b 73 70 61 63 65 new..# workspace
2fa0: 20 69 6e 68 65 72 69 74 20 66 72 6f 6d 20 74 68 inherit from th
2fb0: 65 20 70 61 72 65 6e 74 27 73 20 77 6f 72 6b 73 e parent's works
2fc0: 70 61 63 65 2e 0a 0a 09 73 65 74 20 70 6c 6f 64 pace....set plod
2fd0: 6e 61 6d 65 20 5b 5b 5b 24 70 72 6f 6a 65 63 74 name [[[$project
2fe0: 20 67 65 74 73 79 6d 62 6f 6c 20 24 6c 6f 64 6e getsymbol $lodn
2ff0: 61 6d 65 5d 20 70 61 72 65 6e 74 5d 20 6e 61 6d ame] parent] nam
3000: 65 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 e]...log write 8
3010: 20 63 73 65 74 73 20 7b 70 4c 4f 44 20 20 20 27 csets {pLOD '
3020: 24 70 6c 6f 64 6e 61 6d 65 27 7d 0a 0a 09 69 66 $plodname'}...if
3030: 20 7b 5b 24 72 73 74 61 74 65 20 68 61 73 20 24 {[$rstate has $
3040: 70 6c 6f 64 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 plodname]} {..
3050: 20 20 72 65 74 75 72 6e 20 5b 24 72 73 74 61 74 return [$rstat
3060: 65 20 6e 65 77 20 24 6c 6f 64 6e 61 6d 65 20 24 e new $lodname $
3070: 70 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 66 plodname]..}...f
3080: 6f 72 65 61 63 68 20 6b 20 5b 6c 73 6f 72 74 20 oreach k [lsort
3090: 5b 24 72 73 74 61 74 65 20 6e 61 6d 65 73 5d 5d [$rstate names]]
30a0: 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 {.. log writ
30b0: 65 20 38 20 63 73 65 74 73 20 7b 20 20 20 20 24 e 8 csets { $
30c0: 6b 20 3d 20 5b 5b 24 72 73 74 61 74 65 20 67 65 k = [[$rstate ge
30d0: 74 20 24 6b 5d 20 67 65 74 69 64 5d 7d 0a 09 7d t $k] getid]}..}
30e0: 0a 0a 09 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 ...trouble inter
30f0: 6e 61 6c 20 7b 55 6e 61 62 6c 65 20 74 6f 20 64 nal {Unable to d
3100: 65 74 65 72 6d 69 6e 65 20 63 68 61 6e 67 65 73 etermine changes
3110: 65 74 20 70 61 72 65 6e 74 7d 0a 09 72 65 74 75 et parent}..retu
3120: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 rn. }.. pr
3130: 6f 63 20 47 65 74 69 73 64 65 66 61 75 6c 74 20 oc Getisdefault
3140: 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 73 {revisions} {..s
3150: 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 et theset ('[joi
3160: 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c n $revisions {',
3170: 27 7d 5d 27 29 0a 0a 09 73 74 72 75 63 74 3a 3a '}]')...struct::
3180: 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 73 74 61 list assign [sta
3190: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e te run [subst -n
31a0: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 ocommands -nobac
31b0: 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 kslashes {..
31c0: 53 45 4c 45 43 54 20 52 2e 69 73 64 65 66 61 75 SELECT R.isdefau
31d0: 6c 74 2c 20 52 2e 64 62 63 68 69 6c 64 0a 09 20 lt, R.dbchild..
31e0: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
31f0: 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 on R.. WHERE
3200: 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 73 65 R.rid IN $these
3210: 74 20 20 2d 2d 20 41 6c 6c 20 73 70 65 63 69 66 t -- All specif
3220: 69 65 64 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 ied revisions..
3230: 20 20 20 4c 49 4d 49 54 20 31 0a 09 7d 5d 5d 20 LIMIT 1..}]]
3240: 64 65 66 20 6c 61 73 74 0a 0a 09 23 20 54 4f 44 def last...# TOD
3250: 4f 2f 43 48 45 43 4b 3a 20 6c 6f 6f 6b 20 66 6f O/CHECK: look fo
3260: 72 20 63 68 61 6e 67 65 73 65 74 73 20 77 68 65 r changesets whe
3270: 72 65 20 69 73 64 65 66 61 75 6c 74 2f 64 62 63 re isdefault/dbc
3280: 68 69 6c 64 20 69 73 0a 09 23 20 61 6d 62 69 67 hild is..# ambig
3290: 6f 75 73 2e 0a 0a 09 72 65 74 75 72 6e 20 5b 6c ous....return [l
32a0: 69 73 74 20 24 64 65 66 20 5b 65 78 70 72 20 7b ist $def [expr {
32b0: 24 6c 61 73 74 20 6e 65 20 22 22 7d 5d 5d 0a 20 $last ne ""}]].
32c0: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 }.. typeme
32d0: 74 68 6f 64 20 73 70 6c 69 74 20 7b 63 73 65 74 thod split {cset
32e0: 20 61 72 67 73 7d 20 7b 0a 09 23 20 41 73 20 70 args} {..# As p
32f0: 61 72 74 20 6f 66 20 74 68 65 20 63 72 65 61 74 art of the creat
3300: 69 6f 6e 20 6f 66 20 74 68 65 20 6e 65 77 20 63 ion of the new c
3310: 68 61 6e 67 65 73 65 74 73 20 73 70 65 63 69 66 hangesets specif
3320: 69 65 64 20 69 6e 0a 09 23 20 41 52 47 53 20 61 ied in..# ARGS a
3330: 73 20 73 65 74 73 20 6f 66 20 69 74 65 6d 73 2c s sets of items,
3340: 20 61 6c 6c 20 73 75 62 73 65 74 73 20 6f 66 20 all subsets of
3350: 43 53 45 54 27 73 20 69 74 65 6d 20 73 65 74 2c CSET's item set,
3360: 20 43 53 45 54 0a 09 23 20 77 69 6c 6c 20 62 65 CSET..# will be
3370: 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 61 6c dropped from al
3380: 6c 20 64 61 74 61 62 61 73 65 73 2c 20 69 6e 20 l databases, in
3390: 61 6e 64 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 and out of memor
33a0: 79 2c 0a 09 23 20 61 6e 64 20 74 68 65 6e 20 64 y,..# and then d
33b0: 65 73 74 72 6f 79 65 64 2e 0a 09 23 0a 09 23 20 estroyed...#..#
33c0: 4e 6f 74 65 3a 20 54 68 65 20 69 74 65 6d 20 6c Note: The item l
33d0: 69 73 74 73 20 66 6f 75 6e 64 20 69 6e 20 61 72 ists found in ar
33e0: 67 73 20 61 72 65 20 74 61 67 67 65 64 20 69 74 gs are tagged it
33f0: 65 6d 73 2e 20 54 68 65 79 0a 09 23 20 68 61 76 ems. They..# hav
3400: 65 20 74 6f 20 68 61 76 65 20 74 68 65 20 73 61 e to have the sa
3410: 6d 65 20 74 79 70 65 20 61 73 20 74 68 65 20 63 me type as the c
3420: 68 61 6e 67 65 73 65 74 2c 20 62 65 69 6e 67 20 hangeset, being
3430: 73 75 62 73 65 74 73 0a 09 23 20 6f 66 20 69 74 subsets..# of it
3440: 73 20 69 74 65 6d 73 2e 20 54 68 69 73 20 69 73 s items. This is
3450: 20 63 68 65 63 6b 65 64 20 69 6e 20 55 6e 74 61 checked in Unta
3460: 67 31 2e 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 g1....log write
3470: 38 20 63 73 65 74 73 20 7b 4f 4c 44 3a 20 5b 6c 8 csets {OLD: [l
3480: 73 6f 72 74 20 5b 24 63 73 65 74 20 69 74 65 6d sort [$cset item
3490: 73 5d 5d 7d 0a 09 56 61 6c 69 64 61 74 65 46 72 s]]}..ValidateFr
34a0: 61 67 6d 65 6e 74 73 20 24 63 73 65 74 20 24 61 agments $cset $a
34b0: 72 67 73 0a 0a 09 23 20 41 6c 6c 20 63 68 65 63 rgs...# All chec
34c0: 6b 73 20 70 61 73 73 2c 20 61 63 74 75 61 6c 6c ks pass, actuall
34d0: 79 20 70 65 72 66 6f 72 6d 20 74 68 65 20 73 70 y perform the sp
34e0: 6c 69 74 2e 0a 0a 09 73 74 72 75 63 74 3a 3a 6c lit....struct::l
34f0: 69 73 74 20 61 73 73 69 67 6e 20 5b 24 63 73 65 ist assign [$cse
3500: 74 20 64 61 74 61 5d 20 70 72 6f 6a 65 63 74 20 t data] project
3510: 63 73 74 79 70 65 20 63 73 73 72 63 0a 0a 09 73 cstype cssrc...s
3520: 65 74 20 70 72 65 64 65 63 65 73 73 6f 72 73 20 et predecessors
3530: 5b 24 63 73 65 74 20 64 72 6f 70 5d 0a 09 24 63 [$cset drop]..$c
3540: 73 65 74 20 64 65 73 74 72 6f 79 0a 0a 09 73 65 set destroy...se
3550: 74 20 6e 65 77 63 73 65 74 73 20 7b 7d 0a 09 66 t newcsets {}..f
3560: 6f 72 65 61 63 68 20 66 72 61 67 6d 65 6e 74 69 oreach fragmenti
3570: 74 65 6d 73 20 24 61 72 67 73 20 7b 0a 09 20 20 tems $args {..
3580: 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 log write 8 cs
3590: 65 74 73 20 7b 4d 41 4b 45 3a 20 5b 6c 73 6f 72 ets {MAKE: [lsor
35a0: 74 20 24 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 t $fragmentitems
35b0: 5d 7d 0a 0a 09 20 20 20 20 73 65 74 20 66 72 61 ]}... set fra
35c0: 67 6d 65 6e 74 20 5b 24 74 79 70 65 20 25 41 55 gment [$type %AU
35d0: 54 4f 25 20 24 70 72 6f 6a 65 63 74 20 24 63 73 TO% $project $cs
35e0: 74 79 70 65 20 24 63 73 73 72 63 20 5c 0a 09 09 type $cssrc \...
35f0: 09 20 20 20 20 20 20 5b 55 6e 74 61 67 20 24 66 . [Untag $f
3600: 72 61 67 6d 65 6e 74 69 74 65 6d 73 20 24 63 73 ragmentitems $cs
3610: 74 79 70 65 5d 5d 0a 09 20 20 20 20 6c 61 70 70 type]].. lapp
3620: 65 6e 64 20 6e 65 77 63 73 65 74 73 20 24 66 72 end newcsets $fr
3630: 61 67 6d 65 6e 74 0a 0a 09 20 20 20 20 24 66 72 agment... $fr
3640: 61 67 6d 65 6e 74 20 70 65 72 73 69 73 74 0a 09 agment persist..
3650: 20 20 20 20 24 66 72 61 67 6d 65 6e 74 20 64 65 $fragment de
3660: 74 65 72 6d 69 6e 65 73 75 63 63 65 73 73 6f 72 terminesuccessor
3670: 73 0a 09 7d 0a 0a 09 23 20 54 68 65 20 70 72 65 s..}...# The pre
3680: 64 65 63 65 73 73 6f 72 73 20 68 61 76 65 20 74 decessors have t
3690: 6f 20 72 65 63 6f 6d 70 75 74 65 20 74 68 65 69 o recompute thei
36a0: 72 20 73 75 63 63 65 73 73 6f 72 73 2c 20 69 2e r successors, i.
36b0: 65 2e 0a 09 23 20 72 65 6d 6f 76 65 20 74 68 65 e...# remove the
36c0: 20 64 72 6f 70 70 65 64 20 63 68 61 6e 67 65 73 dropped changes
36d0: 65 74 20 61 6e 64 20 70 75 74 20 6f 6e 65 20 6f et and put one o
36e0: 66 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 0a f the fragments.
36f0: 09 23 20 69 6e 74 6f 20 69 74 73 20 70 6c 61 63 .# into its plac
3700: 65 2e 0a 09 66 6f 72 65 61 63 68 20 70 20 24 70 e...foreach p $p
3710: 72 65 64 65 63 65 73 73 6f 72 73 20 7b 0a 09 20 redecessors {..
3720: 20 20 20 24 70 20 64 65 74 65 72 6d 69 6e 65 73 $p determines
3730: 75 63 63 65 73 73 6f 72 73 0a 09 7d 0a 0a 09 72 uccessors..}...r
3740: 65 74 75 72 6e 20 24 6e 65 77 63 73 65 74 73 0a eturn $newcsets.
3750: 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d }.. typem
3760: 65 74 68 6f 64 20 69 74 65 6d 73 74 72 20 7b 69 ethod itemstr {i
3770: 74 65 6d 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a tem} {..struct::
3780: 6c 69 73 74 20 61 73 73 69 67 6e 20 24 69 74 65 list assign $ite
3790: 6d 20 69 74 79 70 65 20 69 69 64 0a 09 72 65 74 m itype iid..ret
37a0: 75 72 6e 20 5b 24 69 74 79 70 65 20 73 74 72 20 urn [$itype str
37b0: 24 69 69 64 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 $iid]. }..
37c0: 20 74 79 70 65 6d 65 74 68 6f 64 20 73 74 72 6c typemethod strl
37d0: 69 73 74 20 7b 63 68 61 6e 67 65 73 65 74 73 7d ist {changesets}
37e0: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 6a 6f 69 6e {..return [join
37f0: 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 6d [struct::list m
3800: 61 70 20 24 63 68 61 6e 67 65 73 65 74 73 20 5b ap $changesets [
3810: 6d 79 70 72 6f 63 20 49 44 5d 5d 5d 0a 20 20 20 myproc ID]]].
3820: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 49 44 20 }.. proc ID
3830: 7b 63 73 65 74 7d 20 7b 20 24 63 73 65 74 20 73 {cset} { $cset s
3840: 74 72 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 55 tr }.. proc U
3850: 6e 74 61 67 20 7b 74 61 67 67 65 64 69 74 65 6d ntag {taggeditem
3860: 73 20 63 73 74 79 70 65 7d 20 7b 0a 09 72 65 74 s cstype} {..ret
3870: 75 72 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 urn [struct::lis
3880: 74 20 6d 61 70 20 24 74 61 67 67 65 64 69 74 65 t map $taggedite
3890: 6d 73 20 5b 6d 79 70 72 6f 63 20 55 6e 74 61 67 ms [myproc Untag
38a0: 31 20 24 63 73 74 79 70 65 5d 5d 0a 20 20 20 20 1 $cstype]].
38b0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 55 6e 74 61 }.. proc Unta
38c0: 67 31 20 7b 63 73 74 79 70 65 20 74 68 65 69 74 g1 {cstype theit
38d0: 65 6d 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c em} {..struct::l
38e0: 69 73 74 20 61 73 73 69 67 6e 20 24 74 68 65 69 ist assign $thei
38f0: 74 65 6d 20 74 20 69 0a 09 69 6e 74 65 67 72 69 tem t i..integri
3900: 74 79 20 61 73 73 65 72 74 20 7b 24 63 73 74 79 ty assert {$csty
3910: 70 65 20 65 71 20 24 74 7d 20 7b 49 74 65 6d 20 pe eq $t} {Item
3920: 24 69 27 73 20 74 79 70 65 20 69 73 20 27 24 74 $i's type is '$t
3930: 27 2c 20 65 78 70 65 63 74 65 64 20 27 24 63 73 ', expected '$cs
3940: 74 79 70 65 27 7d 0a 09 72 65 74 75 72 6e 20 24 type'}..return $
3950: 69 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f i. }.. pro
3960: 63 20 54 61 67 49 74 65 6d 44 69 63 74 20 7b 69 c TagItemDict {i
3970: 74 65 6d 64 69 63 74 20 63 73 74 79 70 65 7d 20 temdict cstype}
3980: 7b 0a 09 73 65 74 20 72 65 73 20 7b 7d 0a 09 66 {..set res {}..f
3990: 6f 72 65 61 63 68 20 7b 69 20 76 7d 20 24 69 74 oreach {i v} $it
39a0: 65 6d 64 69 63 74 20 7b 20 6c 61 70 70 65 6e 64 emdict { lappend
39b0: 20 72 65 73 20 5b 6c 69 73 74 20 24 63 73 74 79 res [list $csty
39c0: 70 65 20 24 69 5d 20 24 76 20 7d 0a 09 72 65 74 pe $i] $v }..ret
39d0: 75 72 6e 20 24 72 65 73 0a 20 20 20 20 7d 0a 0a urn $res. }..
39e0: 20 20 20 20 70 72 6f 63 20 56 61 6c 69 64 61 74 proc Validat
39f0: 65 46 72 61 67 6d 65 6e 74 73 20 7b 63 73 65 74 eFragments {cset
3a00: 20 66 72 61 67 6d 65 6e 74 73 7d 20 7b 0a 09 23 fragments} {..#
3a10: 20 43 68 65 63 6b 20 74 68 65 20 76 61 72 69 6f Check the vario
3a20: 75 73 20 69 6e 74 65 67 72 69 74 79 20 63 6f 6e us integrity con
3a30: 73 74 72 61 69 6e 74 73 20 66 6f 72 20 74 68 65 straints for the
3a40: 20 66 72 61 67 6d 65 6e 74 73 0a 09 23 20 73 70 fragments..# sp
3a50: 65 63 69 66 79 69 6e 67 20 68 6f 77 20 74 6f 20 ecifying how to
3a60: 73 70 6c 69 74 20 74 68 65 20 63 68 61 6e 67 65 split the change
3a70: 73 65 74 3a 0a 09 23 0a 09 23 20 2a 20 57 65 20 set:..#..# * We
3a80: 6d 75 73 74 20 68 61 76 65 20 74 77 6f 20 6f 72 must have two or
3a90: 20 6d 6f 72 65 20 66 72 61 67 6d 65 6e 74 73 2c more fragments,
3aa0: 20 61 73 20 73 70 6c 69 74 74 69 6e 67 20 61 0a as splitting a.
3ab0: 09 23 20 20 20 63 68 61 6e 67 65 73 65 74 20 69 .# changeset i
3ac0: 6e 74 6f 20 6f 6e 65 20 6d 61 6b 65 73 20 6e 6f nto one makes no
3ad0: 20 73 65 6e 73 65 2e 0a 09 23 20 2a 20 4e 6f 20 sense...# * No
3ae0: 66 72 61 67 6d 65 6e 74 20 6d 61 79 20 62 65 20 fragment may be
3af0: 65 6d 70 74 79 2e 0a 09 23 20 2a 20 41 6c 6c 20 empty...# * All
3b00: 66 72 61 67 6d 65 6e 74 73 20 68 61 76 65 20 74 fragments have t
3b10: 6f 20 62 65 20 74 72 75 65 20 73 75 62 73 65 74 o be true subset
3b20: 73 20 6f 66 20 74 68 65 20 69 74 65 6d 73 20 69 s of the items i
3b30: 6e 20 74 68 65 0a 09 23 20 20 20 63 68 61 6e 67 n the..# chang
3b40: 65 73 65 74 20 74 6f 20 73 70 6c 69 74 2e 20 54 eset to split. T
3b50: 68 65 20 27 74 72 75 65 27 20 69 73 20 69 6d 70 he 'true' is imp
3b60: 6c 69 65 64 20 62 65 63 61 75 73 65 20 6e 6f 6e lied because non
3b70: 65 20 61 72 65 0a 09 23 20 20 20 61 6c 6c 6f 77 e are..# allow
3b80: 65 64 20 74 6f 20 62 65 20 65 6d 70 74 79 2c 20 ed to be empty,
3b90: 73 6f 20 65 61 63 68 20 68 61 73 20 74 6f 20 62 so each has to b
3ba0: 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74 e smaller than t
3bb0: 68 65 0a 09 23 20 20 20 74 6f 74 61 6c 2e 0a 09 he..# total...
3bc0: 23 20 2a 20 54 68 65 20 75 6e 69 6f 6e 20 6f 66 # * The union of
3bd0: 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 20 68 the fragments h
3be0: 61 73 20 74 6f 20 62 65 20 74 68 65 20 69 74 65 as to be the ite
3bf0: 6d 20 73 65 74 20 6f 66 20 74 68 65 0a 09 23 20 m set of the..#
3c00: 20 20 63 68 61 6e 67 65 73 65 74 2e 0a 09 23 20 changeset...#
3c10: 2a 20 54 68 65 20 66 72 61 67 6d 65 6e 74 20 6d * The fragment m
3c20: 75 73 74 20 6e 6f 74 20 6f 76 65 72 6c 61 70 2c ust not overlap,
3c30: 20 69 2e 65 2e 20 74 68 65 69 72 20 70 61 69 72 i.e. their pair
3c40: 77 69 73 65 0a 09 23 20 20 20 69 6e 74 65 72 73 wise..# inters
3c50: 65 63 74 69 6f 6e 73 20 68 61 76 65 20 74 6f 20 ections have to
3c60: 62 65 20 65 6d 70 74 79 2e 0a 0a 09 73 65 74 20 be empty....set
3c70: 63 6f 76 65 72 20 7b 7d 0a 09 66 6f 72 65 61 63 cover {}..foreac
3c80: 68 20 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 20 h fragmentitems
3c90: 24 66 72 61 67 6d 65 6e 74 73 20 7b 0a 09 20 20 $fragments {..
3ca0: 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 log write 8 cs
3cb0: 65 74 73 20 7b 4e 45 57 3a 20 5b 6c 73 6f 72 74 ets {NEW: [lsort
3cc0: 20 24 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 5d $fragmentitems]
3cd0: 7d 0a 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 }... integrit
3ce0: 79 20 61 73 73 65 72 74 20 7b 0a 09 09 21 5b 73 y assert {...![s
3cf0: 74 72 75 63 74 3a 3a 73 65 74 20 65 6d 70 74 79 truct::set empty
3d00: 20 24 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 5d $fragmentitems]
3d10: 0a 09 20 20 20 20 7d 20 7b 63 68 61 6e 67 65 73 .. } {changes
3d20: 65 74 20 66 72 61 67 6d 65 6e 74 20 69 73 20 65 et fragment is e
3d30: 6d 70 74 79 7d 0a 0a 09 20 20 20 20 69 6e 74 65 mpty}... inte
3d40: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 grity assert {..
3d50: 09 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 73 75 .[struct::set su
3d60: 62 73 65 74 6f 66 20 24 66 72 61 67 6d 65 6e 74 bsetof $fragment
3d70: 69 74 65 6d 73 20 5b 24 63 73 65 74 20 69 74 65 items [$cset ite
3d80: 6d 73 5d 5d 0a 09 20 20 20 20 7d 20 7b 63 68 61 ms]].. } {cha
3d90: 6e 67 65 73 65 74 20 66 72 61 67 6d 65 6e 74 20 ngeset fragment
3da0: 69 73 20 6e 6f 74 20 61 20 73 75 62 73 65 74 7d is not a subset}
3db0: 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a 73 65 .. struct::se
3dc0: 74 20 61 64 64 20 63 6f 76 65 72 20 24 66 72 61 t add cover $fra
3dd0: 67 6d 65 6e 74 69 74 65 6d 73 0a 09 7d 0a 0a 09 gmentitems..}...
3de0: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 integrity assert
3df0: 20 7b 0a 09 20 20 20 20 5b 73 74 72 75 63 74 3a {.. [struct:
3e00: 3a 73 65 74 20 65 71 75 61 6c 20 24 63 6f 76 65 :set equal $cove
3e10: 72 20 5b 24 63 73 65 74 20 69 74 65 6d 73 5d 5d r [$cset items]]
3e20: 0a 09 20 7d 20 7b 54 68 65 20 66 72 61 67 6d 65 .. } {The fragme
3e30: 6e 74 73 20 64 6f 20 6e 6f 74 20 63 6f 76 65 72 nts do not cover
3e40: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63 68 the original ch
3e50: 61 6e 67 65 73 65 74 7d 0a 0a 09 73 65 74 20 69 angeset}...set i
3e60: 20 31 0a 09 66 6f 72 65 61 63 68 20 66 69 61 20 1..foreach fia
3e70: 24 66 72 61 67 6d 65 6e 74 73 20 7b 0a 09 20 20 $fragments {..
3e80: 20 20 66 6f 72 65 61 63 68 20 66 69 62 20 5b 6c foreach fib [l
3e90: 72 61 6e 67 65 20 24 66 72 61 67 6d 65 6e 74 73 range $fragments
3ea0: 20 24 69 20 65 6e 64 5d 20 7b 0a 09 09 69 6e 74 $i end] {...int
3eb0: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a egrity assert {.
3ec0: 09 09 20 20 20 20 5b 73 74 72 75 63 74 3a 3a 73 .. [struct::s
3ed0: 65 74 20 65 6d 70 74 79 20 5b 73 74 72 75 63 74 et empty [struct
3ee0: 3a 3a 73 65 74 20 69 6e 74 65 72 73 65 63 74 20 ::set intersect
3ef0: 24 66 69 61 20 24 66 69 62 5d 5d 0a 09 09 7d 20 $fia $fib]]...}
3f00: 7b 54 68 65 20 66 72 61 67 6d 65 6e 74 73 20 3c {The fragments <
3f10: 24 66 69 61 3e 20 61 6e 64 20 3c 24 66 69 62 3e $fia> and <$fib>
3f20: 20 6f 76 65 72 6c 61 70 7d 0a 09 20 20 20 20 7d overlap}.. }
3f30: 0a 09 20 20 20 20 69 6e 63 72 20 69 0a 09 7d 0a .. incr i..}.
3f40: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
3f50: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
3f60: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
3f70: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
3f80: 23 23 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 ## State.. va
3f90: 72 69 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20 riable myid
3fa0: 20 20 20 7b 7d 20 3b 20 23 20 49 64 20 6f 66 20 {} ; # Id of
3fb0: 74 68 65 20 63 73 65 74 20 66 6f 72 20 74 68 65 the cset for the
3fc0: 20 70 65 72 73 69 73 74 65 6e 74 0a 09 09 09 20 persistent....
3fd0: 20 20 20 20 20 23 20 73 74 61 74 65 2e 0a 20 20 # state..
3fe0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f variable mypro
3ff0: 6a 65 63 74 20 20 20 7b 7d 20 3b 20 23 20 52 65 ject {} ; # Re
4000: 66 65 72 65 6e 63 65 20 6f 66 20 74 68 65 20 70 ference of the p
4010: 72 6f 6a 65 63 74 20 6f 62 6a 65 63 74 20 74 68 roject object th
4020: 65 0a 09 09 09 20 20 20 20 20 20 23 20 63 68 61 e.... # cha
4030: 6e 67 65 73 65 74 20 62 65 6c 6f 6e 67 73 20 74 ngeset belongs t
4040: 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 o.. variable
4050: 6d 79 74 79 70 65 20 20 20 20 20 20 7b 7d 20 3b mytype {} ;
4060: 20 23 20 57 68 61 74 20 74 68 65 20 63 68 61 6e # What the chan
4070: 67 65 73 65 74 20 69 73 20 62 61 73 65 64 20 6f geset is based o
4080: 6e 0a 09 09 09 20 20 20 20 20 20 23 20 28 72 65 n.... # (re
4090: 76 69 73 69 6f 6e 73 2c 20 74 61 67 73 2c 20 6f visions, tags, o
40a0: 72 20 62 72 61 6e 63 68 65 73 29 2e 0a 09 09 09 r branches).....
40b0: 20 20 20 20 20 20 23 20 56 61 6c 75 65 73 3a 20 # Values:
40c0: 53 65 65 20 6d 79 63 73 74 79 70 65 2e 20 4e 6f See mycstype. No
40d0: 74 65 20 74 68 61 74 20 77 65 0a 09 09 09 20 20 te that we....
40e0: 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 6b 65 # have to ke
40f0: 65 70 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 ep the names of
4100: 74 68 65 20 68 65 6c 70 65 72 0a 09 09 09 20 20 the helper....
4110: 20 20 20 20 23 20 73 69 6e 67 6c 65 74 6f 6e 73 # singletons
4120: 20 69 6e 20 73 79 6e 63 20 77 69 74 68 20 74 68 in sync with th
4130: 65 20 63 6f 6e 74 65 6e 74 73 0a 09 09 09 20 20 e contents....
4140: 20 20 20 20 23 20 6f 66 20 73 74 61 74 65 20 74 # of state t
4150: 61 62 6c 65 20 27 63 73 74 79 70 65 27 2c 20 61 able 'cstype', a
4160: 6e 64 20 76 61 72 69 6f 75 73 0a 09 09 09 20 20 nd various....
4170: 20 20 20 20 23 20 6f 74 68 65 72 20 70 6c 61 63 # other plac
4180: 65 73 20 75 73 69 6e 67 20 74 68 65 6d 20 68 61 es using them ha
4190: 72 64 77 69 72 65 64 2e 0a 20 20 20 20 76 61 72 rdwired.. var
41a0: 69 61 62 6c 65 20 6d 79 74 79 70 65 6f 62 6a 20 iable mytypeobj
41b0: 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e {} ; # Referen
41c0: 63 65 20 74 6f 20 74 68 65 20 63 6f 6e 74 61 69 ce to the contai
41d0: 6e 65 72 20 66 6f 72 20 74 68 65 0a 09 09 09 20 ner for the....
41e0: 20 20 20 20 20 23 20 74 79 70 65 20 64 65 70 65 # type depe
41f0: 6e 64 65 6e 74 20 63 6f 64 65 2e 20 44 65 72 69 ndent code. Deri
4200: 76 65 64 20 66 72 6f 6d 0a 09 09 09 20 20 20 20 ved from....
4210: 20 20 23 20 6d 79 74 79 70 65 2e 0a 20 20 20 20 # mytype..
4220: 76 61 72 69 61 62 6c 65 20 6d 79 73 72 63 69 64 variable mysrcid
4230: 20 20 20 20 20 7b 7d 20 3b 20 23 20 49 64 20 6f {} ; # Id o
4240: 66 20 74 68 65 20 6d 65 74 61 64 61 74 61 20 6f f the metadata o
4250: 72 20 73 79 6d 62 6f 6c 20 74 68 65 20 63 73 65 r symbol the cse
4260: 74 0a 09 09 09 20 20 20 20 20 20 23 20 69 73 20 t.... # is
4270: 62 61 73 65 64 20 6f 6e 2e 0a 20 20 20 20 76 61 based on.. va
4280: 72 69 61 62 6c 65 20 6d 79 69 74 65 6d 73 20 20 riable myitems
4290: 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f {} ; # List o
42a0: 66 20 74 68 65 20 66 69 6c 65 20 6c 65 76 65 6c f the file level
42b0: 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 09 09 20 revisions,....
42c0: 20 20 20 20 20 23 20 74 61 67 73 2c 20 6f 72 20 # tags, or
42d0: 62 72 61 6e 63 68 65 73 20 69 6e 20 74 68 65 20 branches in the
42e0: 63 73 65 74 2c 20 61 73 0a 09 09 09 20 20 20 20 cset, as....
42f0: 20 20 23 20 69 64 73 2e 20 4e 6f 74 20 74 61 67 # ids. Not tag
4300: 67 65 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c ged.. variabl
4310: 65 20 6d 79 74 69 74 65 6d 73 20 20 20 20 7b 7d e mytitems {}
4320: 20 3b 20 23 20 41 73 20 6d 79 69 74 65 6d 73 2c ; # As myitems,
4330: 20 74 68 65 20 74 61 67 67 65 64 20 66 6f 72 6d the tagged form
4340: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
4350: 79 70 6f 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 ypos {} ;
4360: 23 20 43 6f 6d 6d 69 74 20 70 6f 73 69 74 69 6f # Commit positio
4370: 6e 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 73 n of the changes
4380: 65 74 2c 20 69 66 0a 09 09 09 20 20 20 20 20 20 et, if....
4390: 23 20 6b 6e 6f 77 6e 2e 0a 0a 20 20 20 20 23 20 # known... #
43a0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
43b0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
43c0: 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 #####. ## Int
43d0: 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 ernal methods..
43e0: 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 typevariable
43f0: 6d 79 63 6f 75 6e 74 65 72 20 20 20 20 20 20 20 mycounter
4400: 20 30 20 3b 20 23 20 49 64 20 63 6f 75 6e 74 65 0 ; # Id counte
4410: 72 20 66 6f 72 20 63 73 65 74 73 2e 20 4c 61 73 r for csets. Las
4420: 74 20 69 64 0a 09 09 09 09 20 20 20 20 20 20 23 t id..... #
4430: 20 75 73 65 64 2e 0a 20 20 20 20 74 79 70 65 76 used.. typev
4440: 61 72 69 61 62 6c 65 20 6d 79 63 73 74 79 70 65 ariable mycstype
4450: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d -array {} ; # M
4460: 61 70 20 63 73 74 79 70 65 73 20 28 6e 61 6d 65 ap cstypes (name
4470: 73 29 20 74 6f 20 70 65 72 73 69 73 74 65 6e 74 s) to persistent
4480: 0a 09 09 09 09 20 20 20 20 20 20 23 20 69 64 73 ..... # ids
4490: 2e 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 68 . Note that we h
44a0: 61 76 65 20 74 6f 20 6b 65 65 70 0a 09 09 09 09 ave to keep.....
44b0: 20 20 20 20 20 20 23 20 74 68 65 20 6e 61 6d 65 # the name
44c0: 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 27 s in the table '
44d0: 63 73 74 79 70 65 27 0a 09 09 09 09 20 20 20 20 cstype'.....
44e0: 20 20 23 20 69 6e 20 73 79 6e 63 20 77 69 74 68 # in sync with
44f0: 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 the names of th
4500: 65 0a 09 09 09 09 20 20 20 20 20 20 23 20 68 65 e..... # he
4510: 6c 70 65 72 20 73 69 6e 67 6c 65 74 6f 6e 73 2e lper singletons.
4520: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
4530: 20 69 6e 6f 72 64 65 72 20 7b 70 72 6f 6a 65 63 inorder {projec
4540: 74 69 64 7d 20 7b 0a 09 23 20 52 65 74 75 72 6e tid} {..# Return
4550: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 20 63 68 all revision ch
4560: 61 6e 67 65 73 65 74 73 20 66 6f 72 20 74 68 65 angesets for the
4570: 20 73 70 65 63 69 66 69 65 64 20 70 72 6f 6a 65 specified proje
4580: 63 74 2c 20 69 6e 0a 09 23 20 74 68 65 20 6f 72 ct, in..# the or
4590: 64 65 72 20 67 69 76 65 6e 20 74 6f 20 74 68 65 der given to the
45a0: 6d 20 62 79 20 74 68 65 20 73 6f 72 74 20 70 61 m by the sort pa
45b0: 73 73 65 73 2e 20 42 6f 74 68 20 74 68 65 0a 09 sses. Both the..
45c0: 23 20 66 69 6c 74 65 72 69 6e 67 20 62 79 20 70 # filtering by p
45d0: 72 6f 6a 65 63 74 20 61 6e 64 20 73 6f 72 74 69 roject and sorti
45e0: 6e 67 20 6d 61 6b 65 20 75 73 65 20 6f 66 20 27 ng make use of '
45f0: 70 72 6f 6a 65 63 74 3a 3a 72 65 76 0a 09 23 20 project::rev..#
4600: 72 65 76 27 20 69 6d 70 6f 73 73 69 62 6c 65 2e rev' impossible.
4610: 0a 0a 09 73 65 74 20 72 65 73 20 7b 7d 0a 09 66 ...set res {}..f
4620: 6f 72 65 61 63 68 20 7b 63 69 64 20 63 64 61 74 oreach {cid cdat
4630: 65 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a e} [state run {.
4640: 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 . SELECT C.ci
4650: 64 2c 20 54 2e 64 61 74 65 0a 09 20 20 20 20 46 d, T.date.. F
4660: 52 4f 4d 20 20 20 63 68 61 6e 67 65 73 65 74 20 ROM changeset
4670: 43 2c 20 63 73 74 69 6d 65 73 74 61 6d 70 20 54 C, cstimestamp T
4680: 0a 09 20 20 20 20 57 48 45 52 45 20 20 43 2e 74 .. WHERE C.t
4690: 79 70 65 20 3d 20 30 20 20 20 20 20 20 20 20 20 ype = 0
46a0: 20 2d 2d 20 6c 69 6d 69 74 20 74 6f 20 72 65 76 -- limit to rev
46b0: 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 ision changesets
46c0: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 2e 70 .. AND C.p
46d0: 69 64 20 20 3d 20 24 70 72 6f 6a 65 63 74 69 64 id = $projectid
46e0: 20 2d 2d 20 6c 69 6d 69 74 20 74 6f 20 63 68 61 -- limit to cha
46f0: 6e 67 65 73 65 74 73 20 69 6e 20 70 72 6f 6a 65 ngesets in proje
4700: 63 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 54 ct.. AND T
4710: 2e 63 69 64 20 20 3d 20 43 2e 63 69 64 20 20 20 .cid = C.cid
4720: 20 20 20 2d 2d 20 67 65 74 20 6f 72 64 65 72 69 -- get orderi
4730: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 09 ng information..
4740: 20 20 20 20 4f 52 44 45 52 20 42 59 20 54 2e 64 ORDER BY T.d
4750: 61 74 65 20 20 20 20 20 20 20 20 20 20 20 20 2d ate -
4760: 2d 20 73 6f 72 74 20 69 6e 74 6f 20 63 6f 6d 6d - sort into comm
4770: 69 74 20 6f 72 64 65 72 0a 09 7d 5d 20 7b 0a 09 it order..}] {..
4780: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 lappend res
4790: 24 6d 79 69 64 6d 61 70 28 24 63 69 64 29 20 24 $myidmap($cid) $
47a0: 63 64 61 74 65 0a 09 7d 0a 09 72 65 74 75 72 6e cdate..}..return
47b0: 20 24 72 65 73 0a 20 20 20 20 7d 0a 0a 20 20 20 $res. }..
47c0: 20 74 79 70 65 6d 65 74 68 6f 64 20 67 65 74 63 typemethod getc
47d0: 73 74 79 70 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 stypes {} {..for
47e0: 65 61 63 68 20 7b 74 69 64 20 6e 61 6d 65 7d 20 each {tid name}
47f0: 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 [state run {..
4800: 20 20 53 45 4c 45 43 54 20 74 69 64 2c 20 6e 61 SELECT tid, na
4810: 6d 65 20 46 52 4f 4d 20 63 73 74 79 70 65 3b 0a me FROM cstype;.
4820: 09 7d 5d 20 7b 20 73 65 74 20 6d 79 63 73 74 79 .}] { set mycsty
4830: 70 65 28 24 6e 61 6d 65 29 20 24 74 69 64 20 7d pe($name) $tid }
4840: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
4850: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c typemethod l
4860: 6f 61 64 20 7b 72 65 70 6f 73 69 74 6f 72 79 7d oad {repository}
4870: 20 7b 0a 09 73 65 74 20 6e 20 30 0a 09 6c 6f 67 {..set n 0..log
4880: 20 77 72 69 74 65 20 32 20 63 73 65 74 73 20 7b write 2 csets {
4890: 4c 6f 61 64 69 6e 67 20 74 68 65 20 63 68 61 6e Loading the chan
48a0: 67 65 73 65 74 73 7d 0a 09 66 6f 72 65 61 63 68 gesets}..foreach
48b0: 20 7b 69 64 20 70 69 64 20 63 73 74 79 70 65 20 {id pid cstype
48c0: 73 72 63 69 64 7d 20 5b 73 74 61 74 65 20 72 75 srcid} [state ru
48d0: 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 n {.. SELECT
48e0: 43 2e 63 69 64 2c 20 43 2e 70 69 64 2c 20 43 53 C.cid, C.pid, CS
48f0: 2e 6e 61 6d 65 2c 20 43 2e 73 72 63 0a 09 20 20 .name, C.src..
4900: 20 20 46 52 4f 4d 20 20 20 63 68 61 6e 67 65 73 FROM changes
4910: 65 74 20 43 2c 20 63 73 74 79 70 65 20 43 53 0a et C, cstype CS.
4920: 09 20 20 20 20 57 48 45 52 45 20 20 43 2e 74 79 . WHERE C.ty
4930: 70 65 20 3d 20 43 53 2e 74 69 64 0a 09 20 20 20 pe = CS.tid..
4940: 20 4f 52 44 45 52 20 42 59 20 43 2e 63 69 64 0a ORDER BY C.cid.
4950: 09 7d 5d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 70 .}] {.. log p
4960: 72 6f 67 72 65 73 73 20 32 20 63 73 65 74 73 20 rogress 2 csets
4970: 24 6e 20 7b 7d 0a 09 20 20 20 20 73 65 74 20 72 $n {}.. set r
4980: 20 5b 24 74 79 70 65 20 25 41 55 54 4f 25 20 5b [$type %AUTO% [
4990: 24 72 65 70 6f 73 69 74 6f 72 79 20 70 72 6f 6a $repository proj
49a0: 65 63 74 6f 66 20 24 70 69 64 5d 20 24 63 73 74 ectof $pid] $cst
49b0: 79 70 65 20 24 73 72 63 69 64 20 5b 73 74 61 74 ype $srcid [stat
49c0: 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c 45 43 54 e run {...SELECT
49d0: 20 43 2e 69 69 64 0a 09 09 46 52 4f 4d 20 20 20 C.iid...FROM
49e0: 63 73 69 74 65 6d 20 43 0a 09 09 57 48 45 52 45 csitem C...WHERE
49f0: 20 20 43 2e 63 69 64 20 3d 20 24 69 64 0a 09 09 C.cid = $id...
4a00: 4f 52 44 45 52 20 42 59 20 43 2e 70 6f 73 0a 09 ORDER BY C.pos..
4a10: 20 20 20 20 7d 5d 20 24 69 64 5d 0a 09 20 20 20 }] $id]..
4a20: 20 69 6e 63 72 20 6e 0a 09 7d 0a 09 72 65 74 75 incr n..}..retu
4a30: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 rn. }.. ty
4a40: 70 65 6d 65 74 68 6f 64 20 6c 6f 61 64 63 6f 75 pemethod loadcou
4a50: 6e 74 65 72 20 7b 7d 20 7b 0a 09 23 20 49 6e 69 nter {} {..# Ini
4a60: 74 69 61 6c 69 7a 65 20 74 68 65 20 63 6f 75 6e tialize the coun
4a70: 74 65 72 20 66 72 6f 6d 20 74 68 65 20 73 74 61 ter from the sta
4a80: 74 65 0a 09 6c 6f 67 20 77 72 69 74 65 20 32 20 te..log write 2
4a90: 63 73 65 74 73 20 7b 4c 6f 61 64 69 6e 67 20 63 csets {Loading c
4aa0: 68 61 6e 67 65 73 65 74 20 63 6f 75 6e 74 65 72 hangeset counter
4ab0: 7d 0a 09 73 65 74 20 6d 79 63 6f 75 6e 74 65 72 }..set mycounter
4ac0: 20 5b 73 74 61 74 65 20 6f 6e 65 20 7b 20 53 45 [state one { SE
4ad0: 4c 45 43 54 20 4d 41 58 28 63 69 64 29 20 46 52 LECT MAX(cid) FR
4ae0: 4f 4d 20 63 68 61 6e 67 65 73 65 74 20 7d 5d 0a OM changeset }].
4af0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
4b00: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6e 75 typemethod nu
4b10: 6d 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d m {} { return $m
4b20: 79 63 6f 75 6e 74 65 72 20 7d 0a 0a 20 20 20 20 ycounter }..
4b30: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
4b40: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
4b50: 23 23 23 23 23 23 23 0a 0a 20 20 20 20 6d 65 74 #######.. met
4b60: 68 6f 64 20 43 72 65 61 74 65 46 72 6f 6d 46 72 hod CreateFromFr
4b70: 61 67 6d 65 6e 74 73 20 7b 66 72 61 67 6d 65 6e agments {fragmen
4b80: 74 73 20 63 76 20 62 76 7d 20 7b 0a 09 75 70 76 ts cv bv} {..upv
4b90: 61 72 20 31 20 24 63 76 20 63 6f 75 6e 74 65 72 ar 1 $cv counter
4ba0: 20 24 62 76 20 62 72 65 61 6b 73 0a 09 55 6e 6d $bv breaks..Unm
4bb0: 61 70 49 74 65 6d 73 20 24 6d 79 74 79 70 65 20 apItems $mytype
4bc0: 24 6d 79 69 74 65 6d 73 0a 0a 09 23 20 43 72 65 $myitems...# Cre
4bd0: 61 74 65 20 63 68 61 6e 67 65 73 65 74 73 20 66 ate changesets f
4be0: 6f 72 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 or the fragments
4bf0: 2c 20 72 65 75 73 69 6e 67 20 74 68 65 20 63 75 , reusing the cu
4c00: 72 72 65 6e 74 20 6f 6e 65 0a 09 23 20 66 6f 72 rrent one..# for
4c10: 20 74 68 65 20 66 69 72 73 74 20 66 72 61 67 6d the first fragm
4c20: 65 6e 74 2e 20 57 65 20 73 6f 72 74 20 74 68 65 ent. We sort the
4c30: 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 6c m in order to al
4c40: 6c 6f 77 0a 09 23 20 63 68 65 63 6b 69 6e 67 20 low..# checking
4c50: 66 6f 72 20 67 61 70 73 20 61 6e 64 20 6e 69 63 for gaps and nic
4c60: 65 20 6d 65 73 73 61 67 65 73 2e 0a 0a 09 73 65 e messages....se
4c70: 74 20 6e 65 77 63 73 65 74 73 20 20 7b 7d 0a 09 t newcsets {}..
4c80: 73 65 74 20 66 72 61 67 6d 65 6e 74 73 20 5b 6c set fragments [l
4c90: 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 69 sort -index 0 -i
4ca0: 6e 74 65 67 65 72 20 24 66 72 61 67 6d 65 6e 74 nteger $fragment
4cb0: 73 5d 0a 0a 09 23 70 75 74 73 20 5c 74 2e 5b 6a s]...#puts \t.[j
4cc0: 6f 69 6e 20 5b 50 52 73 20 24 66 72 61 67 6d 65 oin [PRs $fragme
4cd0: 6e 74 73 5d 20 2e 5c 6e 5c 74 2e 5d 2e 0a 0a 09 nts] .\n\t.]....
4ce0: 42 6f 72 64 65 72 20 5b 6c 69 6e 64 65 78 20 24 Border [lindex $
4cf0: 66 72 61 67 6d 65 6e 74 73 20 30 5d 20 66 69 72 fragments 0] fir
4d00: 73 74 73 20 66 69 72 73 74 65 0a 0a 09 69 6e 74 sts firste...int
4d10: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a egrity assert {.
4d20: 09 20 20 20 20 24 66 69 72 73 74 73 20 3d 3d 20 . $firsts ==
4d30: 30 0a 09 7d 20 7b 42 61 64 20 66 72 61 67 6d 65 0..} {Bad fragme
4d40: 6e 74 20 73 74 61 72 74 20 40 20 24 66 69 72 73 nt start @ $firs
4d50: 74 73 2c 20 67 61 70 2c 20 6f 72 20 62 65 66 6f ts, gap, or befo
4d60: 72 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 re beginning of
4d70: 74 68 65 20 72 61 6e 67 65 7d 0a 0a 09 73 65 74 the range}...set
4d80: 20 6c 61 73 74 65 20 24 66 69 72 73 74 65 0a 09 laste $firste..
4d90: 66 6f 72 65 61 63 68 20 66 72 61 67 6d 65 6e 74 foreach fragment
4da0: 20 5b 6c 72 61 6e 67 65 20 24 66 72 61 67 6d 65 [lrange $fragme
4db0: 6e 74 73 20 31 20 65 6e 64 5d 20 7b 0a 09 20 20 nts 1 end] {..
4dc0: 20 20 42 6f 72 64 65 72 20 24 66 72 61 67 6d 65 Border $fragme
4dd0: 6e 74 20 73 20 65 0a 09 20 20 20 20 69 6e 74 65 nt s e.. inte
4de0: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 grity assert {..
4df0: 09 24 6c 61 73 74 65 20 3d 3d 20 28 24 73 20 2d .$laste == ($s -
4e00: 20 31 29 0a 09 20 20 20 20 7d 20 7b 42 61 64 20 1).. } {Bad
4e10: 66 72 61 67 6d 65 6e 74 20 62 6f 72 64 65 72 20 fragment border
4e20: 3c 24 6c 61 73 74 65 20 7c 20 24 73 3e 2c 20 67 <$laste | $s>, g
4e30: 61 70 20 6f 72 20 6f 76 65 72 6c 61 70 7d 0a 0a ap or overlap}..
4e40: 09 20 20 20 20 73 65 74 20 6e 65 77 20 5b 24 74 . set new [$t
4e50: 79 70 65 20 25 41 55 54 4f 25 20 24 6d 79 70 72 ype %AUTO% $mypr
4e60: 6f 6a 65 63 74 20 24 6d 79 74 79 70 65 20 24 6d oject $mytype $m
4e70: 79 73 72 63 69 64 20 5b 6c 72 61 6e 67 65 20 24 ysrcid [lrange $
4e80: 6d 79 69 74 65 6d 73 20 24 73 20 24 65 5d 5d 0a myitems $s $e]].
4e90: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6e 65 77 . lappend new
4ea0: 63 73 65 74 73 20 24 6e 65 77 0a 09 20 20 20 20 csets $new..
4eb0: 69 6e 63 72 20 63 6f 75 6e 74 65 72 0a 0a 20 20 incr counter..
4ec0: 20 20 20 20 20 20 20 20 20 20 6c 6f 67 20 77 72 log wr
4ed0: 69 74 65 20 34 20 63 73 65 74 73 20 7b 42 72 65 ite 4 csets {Bre
4ee0: 61 6b 69 6e 67 20 5b 24 73 65 6c 66 20 73 74 72 aking [$self str
4ef0: 20 5d 20 40 20 24 6c 61 73 74 65 2c 20 6e 65 77 ] @ $laste, new
4f00: 20 5b 24 6e 65 77 20 73 74 72 5d 2c 20 63 75 74 [$new str], cut
4f10: 74 69 6e 67 20 24 62 72 65 61 6b 73 28 24 6c 61 ting $breaks($la
4f20: 73 74 65 29 7d 0a 0a 09 20 20 20 20 73 65 74 20 ste)}... set
4f30: 6c 61 73 74 65 20 24 65 0a 09 7d 0a 0a 09 69 6e laste $e..}...in
4f40: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
4f50: 0a 09 20 20 20 20 24 6c 61 73 74 65 20 3d 3d 20 .. $laste ==
4f60: 28 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 69 74 65 ([llength $myite
4f70: 6d 73 5d 2d 31 29 0a 09 7d 20 7b 42 61 64 20 66 ms]-1)..} {Bad f
4f80: 72 61 67 6d 65 6e 74 20 65 6e 64 20 40 20 24 6c ragment end @ $l
4f90: 61 73 74 65 2c 20 67 61 70 2c 20 6f 72 20 62 65 aste, gap, or be
4fa0: 79 6f 6e 64 20 65 6e 64 20 6f 66 20 74 68 65 20 yond end of the
4fb0: 72 61 6e 67 65 7d 0a 0a 09 23 20 50 75 74 20 74 range}...# Put t
4fc0: 68 65 20 66 69 72 73 74 20 66 72 61 67 6d 65 6e he first fragmen
4fd0: 74 20 69 6e 74 6f 20 74 68 65 20 63 75 72 72 65 t into the curre
4fe0: 6e 74 20 63 68 61 6e 67 65 73 65 74 2c 20 61 6e nt changeset, an
4ff0: 64 0a 09 23 20 75 70 64 61 74 65 20 74 68 65 20 d..# update the
5000: 69 6e 2d 6d 65 6d 6f 72 79 20 69 6e 64 65 78 2e in-memory index.
5010: 20 57 65 20 63 61 6e 20 73 69 6d 70 6c 79 20 28 We can simply (
5020: 72 65 29 61 64 64 20 74 68 65 20 69 74 65 6d 73 re)add the items
5030: 0a 09 23 20 62 65 63 61 75 73 65 20 77 65 20 63 ..# because we c
5040: 6c 65 61 72 65 64 20 74 68 65 20 70 72 65 76 69 leared the previ
5050: 6f 75 73 6c 79 20 65 78 69 73 74 69 6e 67 20 69 ously existing i
5060: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 73 65 65 0a nformation, see.
5070: 09 23 20 27 55 6e 6d 61 70 49 74 65 6d 73 27 20 .# 'UnmapItems'
5080: 61 62 6f 76 65 2e 20 50 65 72 73 69 73 74 65 6e above. Persisten
5090: 63 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 ce does not matt
50a0: 65 72 20 68 65 72 65 2c 20 6e 6f 6e 65 0a 09 23 er here, none..#
50b0: 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65 73 65 of the changese
50c0: 74 73 20 68 61 73 20 62 65 65 6e 20 73 61 76 65 ts has been save
50d0: 64 20 74 6f 20 74 68 65 20 70 65 72 73 69 73 74 d to the persist
50e0: 65 6e 74 20 73 74 61 74 65 0a 09 23 20 79 65 74 ent state..# yet
50f0: 2e 0a 0a 09 73 65 74 20 6d 79 69 74 65 6d 73 20 ....set myitems
5100: 20 5b 6c 72 61 6e 67 65 20 24 6d 79 69 74 65 6d [lrange $myitem
5110: 73 20 20 30 20 24 66 69 72 73 74 65 5d 0a 09 73 s 0 $firste]..s
5120: 65 74 20 6d 79 74 69 74 65 6d 73 20 5b 6c 72 61 et mytitems [lra
5130: 6e 67 65 20 24 6d 79 74 69 74 65 6d 73 20 30 20 nge $mytitems 0
5140: 24 66 69 72 73 74 65 5d 0a 09 4d 61 70 49 74 65 $firste]..MapIte
5150: 6d 73 20 24 6d 79 74 79 70 65 20 24 6d 79 69 74 ms $mytype $myit
5160: 65 6d 73 0a 09 72 65 74 75 72 6e 20 24 6e 65 77 ems..return $new
5170: 63 73 65 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 csets. }..
5180: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
5190: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
51a0: 23 23 23 23 23 23 23 23 0a 0a 20 20 20 20 70 72 ########.. pr
51b0: 6f 63 20 42 72 65 61 6b 44 69 72 65 63 74 44 65 oc BreakDirectDe
51c0: 70 65 6e 64 65 6e 63 69 65 73 20 7b 74 68 65 69 pendencies {thei
51d0: 74 65 6d 73 20 62 76 7d 20 7b 0a 09 75 70 76 61 tems bv} {..upva
51e0: 72 20 31 20 6d 79 74 79 70 65 6f 62 6a 20 6d 79 r 1 mytypeobj my
51f0: 74 79 70 65 6f 62 6a 20 73 65 6c 66 20 73 65 6c typeobj self sel
5200: 66 20 24 62 76 20 62 72 65 61 6b 73 0a 0a 09 23 f $bv breaks...#
5210: 20 41 72 72 61 79 20 6f 66 20 64 65 70 65 6e 64 Array of depend
5220: 65 6e 63 69 65 73 20 28 70 61 72 65 6e 74 20 2d encies (parent -
5230: 3e 20 63 68 69 6c 64 29 2e 20 54 68 69 73 20 69 > child). This i
5240: 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 0a 09 23 s pulled from..#
5250: 20 74 68 65 20 73 74 61 74 65 2c 20 61 6e 64 20 the state, and
5260: 6c 69 6d 69 74 65 64 20 74 6f 20 73 75 63 63 65 limited to succe
5270: 73 73 6f 72 73 20 77 69 74 68 69 6e 20 74 68 65 ssors within the
5280: 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a 09 61 72 changeset....ar
5290: 72 61 79 20 73 65 74 20 64 65 70 65 6e 64 65 6e ray set dependen
52a0: 63 69 65 73 20 7b 7d 0a 0a 09 24 6d 79 74 79 70 cies {}...$mytyp
52b0: 65 6f 62 6a 20 69 6e 74 65 72 6e 61 6c 73 75 63 eobj internalsuc
52c0: 63 65 73 73 6f 72 73 20 64 65 70 65 6e 64 65 6e cessors dependen
52d0: 63 69 65 73 20 24 74 68 65 69 74 65 6d 73 0a 09 cies $theitems..
52e0: 69 66 20 7b 21 5b 61 72 72 61 79 20 73 69 7a 65 if {![array size
52f0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 7d 20 dependencies]}
5300: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d {.. return {}
5310: 0a 09 7d 20 3b 20 23 20 4e 6f 74 68 69 6e 67 20 ..} ; # Nothing
5320: 74 6f 20 62 72 65 61 6b 2e 0a 0a 09 6c 6f 67 20 to break....log
5330: 77 72 69 74 65 20 35 20 63 73 65 74 73 20 2e 2e write 5 csets ..
5340: 2e 5b 24 73 65 6c 66 20 73 74 72 5d 2e 2e 2e 2e .[$self str]....
5350: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
5360: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
5370: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
5380: 2e 2e 2e 0a 09 76 63 3a 3a 74 6f 6f 6c 73 3a 3a .....vc::tools::
5390: 6d 65 6d 3a 3a 6d 61 72 6b 0a 0a 09 72 65 74 75 mem::mark...retu
53a0: 72 6e 20 5b 42 72 65 61 6b 65 72 43 6f 72 65 20 rn [BreakerCore
53b0: 24 74 68 65 69 74 65 6d 73 20 64 65 70 65 6e 64 $theitems depend
53c0: 65 6e 63 69 65 73 20 62 72 65 61 6b 73 5d 0a 20 encies breaks].
53d0: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 42 }.. proc B
53e0: 72 65 61 6b 65 72 43 6f 72 65 20 7b 74 68 65 69 reakerCore {thei
53f0: 74 65 6d 73 20 64 76 20 62 76 7d 20 7b 0a 09 23 tems dv bv} {..#
5400: 20 42 72 65 61 6b 20 61 20 73 65 74 20 6f 66 20 Break a set of
5410: 72 65 76 69 73 69 6f 6e 73 20 69 6e 74 6f 20 66 revisions into f
5420: 72 61 67 6d 65 6e 74 73 20 77 68 69 63 68 20 68 ragments which h
5430: 61 76 65 20 6e 6f 0a 09 23 20 69 6e 74 65 72 6e ave no..# intern
5440: 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e al dependencies.
5450: 0a 0a 09 23 20 57 65 20 70 65 72 66 6f 72 6d 20 ...# We perform
5460: 61 6c 6c 20 6e 65 63 65 73 73 61 72 79 20 73 70 all necessary sp
5470: 6c 69 74 73 20 69 6e 20 6f 6e 65 20 67 6f 2c 20 lits in one go,
5480: 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 6c 79 0a instead of only.
5490: 09 23 20 6f 6e 65 2e 20 54 68 65 20 70 72 65 76 .# one. The prev
54a0: 69 6f 75 73 20 61 6c 67 6f 72 69 74 68 6d 2c 20 ious algorithm,
54b0: 61 64 61 70 74 65 64 20 66 72 6f 6d 20 63 76 73 adapted from cvs
54c0: 32 73 76 6e 2c 20 63 6f 6d 70 75 74 65 64 0a 09 2svn, computed..
54d0: 23 20 61 20 6c 6f 74 20 6f 66 20 73 74 61 74 65 # a lot of state
54e0: 20 77 68 69 63 68 20 77 61 73 20 74 68 72 6f 77 which was throw
54f0: 6e 20 61 77 61 79 20 61 6e 64 20 74 68 65 6e 20 n away and then
5500: 63 6f 6d 70 75 74 65 64 20 61 67 61 69 6e 0a 09 computed again..
5510: 23 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 # for each of th
5520: 65 20 66 72 61 67 6d 65 6e 74 73 2e 20 49 74 20 e fragments. It
5530: 73 68 6f 75 6c 64 20 62 65 20 65 61 73 69 65 72 should be easier
5540: 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 0a 09 to update and..
5550: 23 20 72 65 75 73 65 20 74 68 61 74 20 73 74 61 # reuse that sta
5560: 74 65 2e 0a 0a 09 75 70 76 61 72 20 31 20 24 64 te....upvar 1 $d
5570: 76 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 v dependencies $
5580: 62 76 20 62 72 65 61 6b 73 0a 0a 09 23 20 57 65 bv breaks...# We
5590: 20 68 61 76 65 20 69 6e 74 65 72 6e 61 6c 20 64 have internal d
55a0: 65 70 65 6e 64 65 6e 63 69 65 73 20 74 6f 20 62 ependencies to b
55b0: 72 65 61 6b 2e 20 57 65 20 6e 6f 77 20 69 74 65 reak. We now ite
55c0: 72 61 74 65 20 6f 76 65 72 0a 09 23 20 61 6c 6c rate over..# all
55d0: 20 70 6f 73 69 74 69 6f 6e 73 20 69 6e 20 74 68 positions in th
55e0: 65 20 6c 69 73 74 20 28 77 68 69 63 68 20 69 73 e list (which is
55f0: 20 63 68 72 6f 6e 6f 6c 6f 67 69 63 61 6c 2c 20 chronological,
5600: 61 74 20 6c 65 61 73 74 0a 09 23 20 61 73 20 66 at least..# as f
5610: 61 72 20 61 73 20 74 68 65 20 74 69 6d 65 73 74 ar as the timest
5620: 61 6d 70 73 20 61 72 65 20 63 6f 72 72 65 63 74 amps are correct
5630: 20 61 6e 64 20 75 6e 69 71 75 65 29 20 61 6e 64 and unique) and
5640: 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 20 74 68 ..# determine th
5650: 65 20 62 65 73 74 20 70 6f 73 69 74 69 6f 6e 20 e best position
5660: 66 6f 72 20 74 68 65 20 62 72 65 61 6b 2c 20 62 for the break, b
5670: 79 20 74 72 79 69 6e 67 20 74 6f 0a 09 23 20 62 y trying to..# b
5680: 72 65 61 6b 20 61 73 20 6d 61 6e 79 20 64 65 70 reak as many dep
5690: 65 6e 64 65 6e 63 69 65 73 20 61 73 20 70 6f 73 endencies as pos
56a0: 73 69 62 6c 65 20 69 6e 20 6f 6e 65 20 67 6f 2e sible in one go.
56b0: 20 57 68 65 6e 20 61 0a 09 23 20 62 72 65 61 6b When a..# break
56c0: 20 77 61 73 20 66 6f 75 6e 64 20 74 68 69 73 20 was found this
56d0: 69 73 20 72 65 64 6f 6e 65 20 66 6f 72 20 74 68 is redone for th
56e0: 65 20 66 72 61 67 6d 65 6e 74 73 20 63 6f 6d 69 e fragments comi
56f0: 6e 67 20 61 6e 64 0a 09 23 20 61 66 74 65 72 2c ng and..# after,
5700: 20 61 66 74 65 72 20 75 70 64 69 6e 67 20 74 68 after upding th
5710: 65 20 63 72 6f 73 73 69 6e 67 20 69 6e 66 6f 72 e crossing infor
5720: 6d 61 74 69 6f 6e 2e 0a 0a 09 23 20 44 61 74 61 mation....# Data
5730: 20 73 74 72 75 63 74 75 72 65 73 3a 0a 09 23 20 structures:..#
5740: 4d 61 70 3a 20 20 50 4f 53 20 20 20 72 65 76 69 Map: POS revi
5750: 73 69 6f 6e 20 69 64 20 20 20 20 20 20 2d 3e 20 sion id ->
5760: 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6c 69 73 74 position in list
5770: 2e 0a 09 23 20 20 20 20 20 20 20 43 52 4f 53 53 ...# CROSS
5780: 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6c 69 73 position in lis
5790: 74 20 2d 3e 20 6e 75 6d 62 65 72 20 6f 66 20 64 t -> number of d
57a0: 65 70 65 6e 64 65 6e 63 69 65 73 20 63 72 6f 73 ependencies cros
57b0: 73 69 6e 67 20 69 74 0a 09 23 20 20 20 20 20 20 sing it..#
57c0: 20 44 45 50 43 20 20 64 65 70 65 6e 64 65 6e 63 DEPC dependenc
57d0: 79 20 20 20 20 20 20 20 2d 3e 20 70 6f 73 69 74 y -> posit
57e0: 69 6f 6e 73 20 69 74 20 63 72 6f 73 73 65 73 0a ions it crosses.
57f0: 09 23 20 4c 69 73 74 3a 20 52 41 4e 47 45 20 4f .# List: RANGE O
5800: 66 20 74 68 65 20 70 6f 73 69 74 69 6f 6e 73 20 f the positions
5810: 69 74 73 65 6c 66 2e 0a 09 23 20 4d 61 70 3a 20 itself...# Map:
5820: 20 44 45 4c 54 41 20 70 6f 73 69 74 69 6f 6e 20 DELTA position
5830: 69 6e 20 6c 69 73 74 20 2d 3e 20 74 69 6d 65 20 in list -> time
5840: 64 65 6c 74 61 20 62 65 74 77 65 65 6e 20 69 74 delta between it
5850: 73 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 20 20 s revision..#
5860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e an
5880: 64 20 74 68 65 20 6e 65 78 74 2c 20 69 66 20 61 d the next, if a
5890: 6e 79 2e 0a 09 23 20 41 20 64 65 70 65 6e 64 65 ny...# A depende
58a0: 6e 63 79 20 69 73 20 61 20 73 69 6e 67 6c 65 2d ncy is a single-
58b0: 65 6c 65 6d 65 6e 74 20 6d 61 70 20 70 61 72 65 element map pare
58c0: 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 0a 09 23 20 nt -> child...#
58d0: 49 6e 69 74 69 61 6c 69 7a 65 42 72 65 61 6b 53 InitializeBreakS
58e0: 74 61 74 65 20 69 6e 69 74 69 61 6c 69 7a 65 73 tate initializes
58f0: 20 74 68 65 69 72 20 63 6f 6e 74 65 6e 74 73 20 their contents
5900: 61 66 74 65 72 0a 09 23 20 75 70 76 61 72 27 69 after..# upvar'i
5910: 6e 67 20 74 68 65 6d 20 66 72 6f 6d 20 74 68 69 ng them from thi
5920: 73 20 73 63 6f 70 65 2e 20 49 74 20 75 73 65 73 s scope. It uses
5930: 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e the information
5940: 20 69 6e 0a 09 23 20 44 45 50 45 4e 44 45 4e 43 in..# DEPENDENC
5950: 49 45 53 20 74 6f 20 64 6f 20 73 6f 2e 0a 0a 09 IES to do so....
5960: 49 6e 69 74 69 61 6c 69 7a 65 42 72 65 61 6b 53 InitializeBreakS
5970: 74 61 74 65 20 24 74 68 65 69 74 65 6d 73 0a 0a tate $theitems..
5980: 09 73 65 74 20 66 72 61 67 6d 65 6e 74 73 20 7b .set fragments {
5990: 7d 0a 09 73 65 74 20 6e 65 77 20 20 20 20 20 20 }..set new
59a0: 20 5b 6c 69 73 74 20 24 72 61 6e 67 65 5d 0a 0a [list $range]..
59b0: 09 23 20 49 6e 73 74 65 61 64 20 6f 66 20 6f 6e .# Instead of on
59c0: 65 20 6c 69 73 74 20 68 6f 6c 64 69 6e 67 20 62 e list holding b
59d0: 6f 74 68 20 70 72 6f 63 65 73 73 65 64 20 61 6e oth processed an
59e0: 64 20 70 65 6e 64 69 6e 67 0a 09 23 20 66 72 61 d pending..# fra
59f0: 67 6d 65 6e 74 73 20 77 65 20 75 73 65 20 74 77 gments we use tw
5a00: 6f 2c 20 6f 6e 65 20 66 6f 72 20 74 68 65 20 66 o, one for the f
5a10: 72 61 6d 65 6e 74 73 20 74 6f 20 70 72 6f 63 65 raments to proce
5a20: 73 73 2c 20 6f 6e 65 0a 09 23 20 74 6f 20 68 6f ss, one..# to ho
5a30: 6c 64 20 74 68 65 20 6e 65 77 20 66 72 61 67 6d ld the new fragm
5a40: 65 6e 74 73 2c 20 61 6e 64 20 74 68 65 20 6c 61 ents, and the la
5a50: 74 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 74 tter is copied t
5a60: 6f 20 74 68 65 0a 09 23 20 66 6f 72 6d 65 72 20 o the..# former
5a70: 77 68 65 6e 20 74 68 65 79 20 72 75 6e 20 6f 75 when they run ou
5a80: 74 2e 20 54 68 69 73 20 6b 65 65 70 73 20 74 68 t. This keeps th
5a90: 65 20 6c 69 73 74 20 6f 66 20 70 65 6e 64 69 6e e list of pendin
5aa0: 67 0a 09 23 20 66 72 61 67 6d 65 6e 74 73 20 73 g..# fragments s
5ab0: 68 6f 72 74 20 77 69 74 68 6f 75 74 20 73 61 63 hort without sac
5ac0: 72 69 66 69 63 69 6e 67 20 73 70 65 65 64 20 62 rificing speed b
5ad0: 79 20 73 68 69 66 74 69 6e 67 20 73 74 75 66 66 y shifting stuff
5ae0: 0a 09 23 20 64 6f 77 6e 2e 20 57 65 20 65 73 70 ..# down. We esp
5af0: 65 63 69 61 6c 6c 79 20 64 72 6f 70 20 74 68 65 ecially drop the
5b00: 20 6d 65 6d 6f 72 79 20 6f 66 20 66 72 61 67 6d memory of fragm
5b10: 65 6e 74 73 20 62 72 6f 6b 65 6e 0a 09 23 20 64 ents broken..# d
5b20: 75 72 69 6e 67 20 70 72 6f 63 65 73 73 69 6e 67 uring processing
5b30: 20 61 66 74 65 72 20 61 20 73 68 6f 72 74 20 74 after a short t
5b40: 69 6d 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 ime, instead of
5b50: 6c 65 74 74 69 6e 67 20 69 74 0a 09 23 20 63 6f letting it..# co
5b60: 6e 73 75 6d 65 20 6d 65 6d 6f 72 79 2e 0a 0a 09 nsume memory....
5b70: 77 68 69 6c 65 20 7b 5b 6c 6c 65 6e 67 74 68 20 while {[llength
5b80: 24 6e 65 77 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 $new]} {... s
5b90: 65 74 20 70 65 6e 64 69 6e 67 20 24 6e 65 77 0a et pending $new.
5ba0: 09 20 20 20 20 73 65 74 20 6e 65 77 20 20 20 20 . set new
5bb0: 20 7b 7d 0a 09 20 20 20 20 73 65 74 20 61 74 20 {}.. set at
5bc0: 20 20 20 20 20 30 0a 0a 09 20 20 20 20 77 68 69 0... whi
5bd0: 6c 65 20 7b 24 61 74 20 3c 20 5b 6c 6c 65 6e 67 le {$at < [lleng
5be0: 74 68 20 24 70 65 6e 64 69 6e 67 5d 7d 20 7b 0a th $pending]} {.
5bf0: 09 09 73 65 74 20 63 75 72 72 65 6e 74 20 5b 6c ..set current [l
5c00: 69 6e 64 65 78 20 24 70 65 6e 64 69 6e 67 20 24 index $pending $
5c10: 61 74 5d 0a 0a 09 09 6c 6f 67 20 77 72 69 74 65 at]....log write
5c20: 20 36 20 63 73 65 74 73 20 7b 2e 20 2e 20 2e 2e 6 csets {. . ..
5c30: 20 2e 2e 2e 20 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e ... ..... .....
5c40: 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ... ............
5c50: 2e 7d 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 36 .}...log write 6
5c60: 20 63 73 65 74 73 20 7b 53 63 68 65 64 75 6c 65 csets {Schedule
5c70: 64 20 20 20 5b 6a 6f 69 6e 20 5b 50 52 73 20 5b d [join [PRs [
5c80: 6c 72 61 6e 67 65 20 24 70 65 6e 64 69 6e 67 20 lrange $pending
5c90: 24 61 74 20 65 6e 64 5d 5d 20 7b 20 7d 5d 7d 0a $at end]] { }]}.
5ca0: 09 09 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 ..log write 6 cs
5cb0: 65 74 73 20 7b 43 6f 6e 73 69 64 65 72 69 6e 67 ets {Considering
5cc0: 20 5b 50 52 20 24 63 75 72 72 65 6e 74 5d 20 5c [PR $current] \
5cd0: 5b 24 61 74 2f 5b 6c 6c 65 6e 67 74 68 20 24 70 [$at/[llength $p
5ce0: 65 6e 64 69 6e 67 5d 5c 5d 7d 0a 0a 09 09 73 65 ending]\]}....se
5cf0: 74 20 62 65 73 74 20 5b 46 69 6e 64 42 65 73 74 t best [FindBest
5d00: 42 72 65 61 6b 20 24 63 75 72 72 65 6e 74 5d 0a Break $current].
5d10: 0a 09 09 69 66 20 7b 24 62 65 73 74 20 3c 20 30 ...if {$best < 0
5d20: 7d 20 7b 0a 09 09 20 20 20 20 23 20 54 68 65 20 } {... # The
5d30: 69 6e 73 70 65 63 74 65 64 20 72 61 6e 67 65 20 inspected range
5d40: 68 61 73 20 6e 6f 20 69 6e 74 65 72 6e 61 6c 0a has no internal.
5d50: 09 09 20 20 20 20 23 20 64 65 70 65 6e 64 65 6e .. # dependen
5d60: 63 69 65 73 2e 20 54 68 69 73 20 69 73 20 61 20 cies. This is a
5d70: 63 6f 6d 70 6c 65 74 65 20 66 72 61 67 6d 65 6e complete fragmen
5d80: 74 2e 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 t.... lappend
5d90: 20 66 72 61 67 6d 65 6e 74 73 20 24 63 75 72 72 fragments $curr
5da0: 65 6e 74 0a 0a 09 09 20 20 20 20 6c 6f 67 20 77 ent.... log w
5db0: 72 69 74 65 20 36 20 63 73 65 74 73 20 22 4e 6f rite 6 csets "No
5dc0: 20 62 72 65 61 6b 73 2c 20 66 69 6e 61 6c 22 0a breaks, final".
5dd0: 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 ..} else {...
5de0: 20 23 20 53 70 6c 69 74 20 74 68 65 20 72 61 6e # Split the ran
5df0: 67 65 20 61 6e 64 20 73 63 68 65 64 75 6c 65 20 ge and schedule
5e00: 74 68 65 20 72 65 73 75 6c 74 69 6e 67 0a 09 09 the resulting...
5e10: 20 20 20 20 23 20 66 72 61 67 6d 65 6e 74 73 20 # fragments
5e20: 66 6f 72 20 66 75 72 74 68 65 72 20 69 6e 73 70 for further insp
5e30: 65 63 74 69 6f 6e 2e 20 52 65 6d 65 6d 62 65 72 ection. Remember
5e40: 20 74 68 65 0a 09 09 20 20 20 20 23 20 6e 75 6d the... # num
5e50: 62 65 72 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 ber of dependenc
5e60: 69 65 73 20 63 75 74 20 62 65 66 6f 72 65 20 77 ies cut before w
5e70: 65 20 72 65 6d 6f 76 65 20 74 68 65 6d 0a 09 09 e remove them...
5e80: 20 20 20 20 23 20 66 72 6f 6d 20 63 6f 6e 73 69 # from consi
5e90: 64 65 72 61 74 69 6f 6e 2c 20 66 6f 72 20 64 6f deration, for do
5ea0: 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6c 61 74 65 cumentation late
5eb0: 72 2e 0a 0a 09 09 20 20 20 20 73 65 74 20 62 72 r..... set br
5ec0: 65 61 6b 73 28 24 62 65 73 74 29 20 24 63 72 6f eaks($best) $cro
5ed0: 73 73 28 24 62 65 73 74 29 0a 0a 09 09 20 20 20 ss($best)....
5ee0: 20 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 65 log write 6 cse
5ef0: 74 73 20 22 42 65 73 74 20 62 72 65 61 6b 20 40 ts "Best break @
5f00: 20 24 62 65 73 74 2c 20 63 75 74 74 69 6e 67 20 $best, cutting
5f10: 5b 6e 73 70 20 24 63 72 6f 73 73 28 24 62 65 73 [nsp $cross($bes
5f20: 74 29 20 64 65 70 65 6e 64 65 6e 63 79 20 64 65 t) dependency de
5f30: 70 65 6e 64 65 6e 63 69 65 73 5d 22 0a 0a 09 09 pendencies]"....
5f40: 20 20 20 20 23 20 4e 6f 74 65 3a 20 54 68 65 20 # Note: The
5f50: 76 61 6c 75 65 20 6f 66 20 62 65 73 74 20 69 73 value of best is
5f60: 20 61 6e 20 61 62 6f 6c 75 74 65 20 6c 6f 63 61 an abolute loca
5f70: 74 69 6f 6e 0a 09 09 20 20 20 20 23 20 69 6e 20 tion... # in
5f80: 6d 79 69 74 65 6d 73 2e 20 55 73 65 20 74 68 65 myitems. Use the
5f90: 20 73 74 61 72 74 20 6f 66 20 63 75 72 72 65 6e start of curren
5fa0: 74 20 74 6f 20 6d 61 6b 65 20 69 74 0a 09 09 20 t to make it...
5fb0: 20 20 20 23 20 61 6e 20 69 6e 64 65 78 20 61 62 # an index ab
5fc0: 73 6f 6c 75 74 65 20 74 6f 20 63 75 72 72 65 6e solute to curren
5fd0: 74 2e 0a 0a 09 09 20 20 20 20 73 65 74 20 62 72 t..... set br
5fe0: 65 6c 20 5b 65 78 70 72 20 7b 24 62 65 73 74 20 el [expr {$best
5ff0: 2d 20 5b 6c 69 6e 64 65 78 20 24 63 75 72 72 65 - [lindex $curre
6000: 6e 74 20 30 5d 7d 5d 0a 09 09 20 20 20 20 73 65 nt 0]}]... se
6010: 74 20 62 6e 65 78 74 20 24 62 72 65 6c 20 3b 20 t bnext $brel ;
6020: 69 6e 63 72 20 62 6e 65 78 74 0a 09 09 20 20 20 incr bnext...
6030: 20 73 65 74 20 66 72 61 67 62 65 66 6f 72 65 20 set fragbefore
6040: 5b 6c 72 61 6e 67 65 20 24 63 75 72 72 65 6e 74 [lrange $current
6050: 20 30 20 24 62 72 65 6c 5d 0a 09 09 20 20 20 20 0 $brel]...
6060: 73 65 74 20 66 72 61 67 61 66 74 65 72 20 20 5b set fragafter [
6070: 6c 72 61 6e 67 65 20 24 63 75 72 72 65 6e 74 20 lrange $current
6080: 24 62 6e 65 78 74 20 65 6e 64 5d 0a 0a 09 09 20 $bnext end]....
6090: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 36 20 63 log write 6 c
60a0: 73 65 74 73 20 22 4e 65 77 20 70 69 65 63 65 73 sets "New pieces
60b0: 20 20 5b 50 52 20 24 66 72 61 67 62 65 66 6f 72 [PR $fragbefor
60c0: 65 5d 20 5b 50 52 20 24 66 72 61 67 61 66 74 65 e] [PR $fragafte
60d0: 72 5d 22 0a 0a 09 09 20 20 20 20 69 6e 74 65 67 r]".... integ
60e0: 72 69 74 79 20 61 73 73 65 72 74 20 7b 5b 6c 6c rity assert {[ll
60f0: 65 6e 67 74 68 20 24 66 72 61 67 62 65 66 6f 72 ength $fragbefor
6100: 65 5d 7d 20 7b 46 6f 75 6e 64 20 7a 65 72 6f 2d e]} {Found zero-
6110: 6c 65 6e 67 74 68 20 66 72 61 67 6d 65 6e 74 20 length fragment
6120: 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 at the beginning
6130: 7d 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 }... integrit
6140: 79 20 61 73 73 65 72 74 20 7b 5b 6c 6c 65 6e 67 y assert {[lleng
6150: 74 68 20 24 66 72 61 67 61 66 74 65 72 5d 7d 20 th $fragafter]}
6160: 20 7b 46 6f 75 6e 64 20 7a 65 72 6f 2d 6c 65 6e {Found zero-len
6170: 67 74 68 20 66 72 61 67 6d 65 6e 74 20 61 74 20 gth fragment at
6180: 74 68 65 20 65 6e 64 7d 0a 0a 09 09 20 20 20 20 the end}....
6190: 6c 61 70 70 65 6e 64 20 6e 65 77 20 24 66 72 61 lappend new $fra
61a0: 67 62 65 66 6f 72 65 20 24 66 72 61 67 61 66 74 gbefore $fragaft
61b0: 65 72 0a 09 09 20 20 20 20 43 75 74 41 74 20 24 er... CutAt $
61c0: 62 65 73 74 0a 09 09 7d 0a 0a 09 09 69 6e 63 72 best...}....incr
61d0: 20 61 74 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 at.. }..}...
61e0: 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 65 74 log write 6 cset
61f0: 73 20 22 2e 20 2e 20 2e 2e 20 2e 2e 2e 20 2e 2e s ". . .. ... ..
6200: 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 20 2e 2e 2e ... ........ ...
6210: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 22 0a 0a 09 72 65 .........."...re
6220: 74 75 72 6e 20 24 66 72 61 67 6d 65 6e 74 73 0a turn $fragments.
6230: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 }.. proc
6240: 49 6e 69 74 69 61 6c 69 7a 65 42 72 65 61 6b 53 InitializeBreakS
6250: 74 61 74 65 20 7b 72 65 76 69 73 69 6f 6e 73 7d tate {revisions}
6260: 20 7b 0a 09 75 70 76 61 72 20 31 20 70 6f 73 20 {..upvar 1 pos
6270: 70 6f 73 20 63 72 6f 73 73 20 63 72 6f 73 73 20 pos cross cross
6280: 72 61 6e 67 65 20 72 61 6e 67 65 20 64 65 70 63 range range depc
6290: 20 64 65 70 63 20 64 65 6c 74 61 20 64 65 6c 74 depc delta delt
62a0: 61 20 5c 0a 09 20 20 20 20 64 65 70 65 6e 64 65 a \.. depende
62b0: 6e 63 69 65 73 20 64 65 70 65 6e 64 65 6e 63 69 ncies dependenci
62c0: 65 73 0a 0a 09 23 20 46 69 72 73 74 20 77 65 20 es...# First we
62d0: 63 72 65 61 74 65 20 61 20 6d 61 70 20 6f 66 20 create a map of
62e0: 70 6f 73 69 74 69 6f 6e 73 20 74 6f 20 6d 61 6b positions to mak
62f0: 65 20 69 74 20 65 61 73 69 65 72 20 74 6f 0a 09 e it easier to..
6300: 23 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 # determine whet
6310: 68 65 72 20 61 20 64 65 70 65 6e 64 65 6e 63 79 her a dependency
6320: 20 63 72 6f 73 73 65 73 20 61 20 70 61 72 74 69 crosses a parti
6330: 63 75 6c 61 72 20 69 6e 64 65 78 2e 0a 0a 09 6c cular index....l
6340: 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 og write 14 cset
6350: 73 20 7b 49 42 53 3a 20 23 72 65 76 20 5b 6c 6c s {IBS: #rev [ll
6360: 65 6e 67 74 68 20 24 72 65 76 69 73 69 6f 6e 73 ength $revisions
6370: 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 ]}..log write 14
6380: 20 63 73 65 74 73 20 7b 49 42 53 3a 20 70 6f 73 csets {IBS: pos
6390: 20 6d 61 70 2c 20 63 72 6f 73 73 20 63 6f 75 6e map, cross coun
63a0: 74 65 72 7d 0a 0a 09 61 72 72 61 79 20 73 65 74 ter}...array set
63b0: 20 70 6f 73 20 20 20 7b 7d 0a 09 61 72 72 61 79 pos {}..array
63c0: 20 73 65 74 20 63 72 6f 73 73 20 7b 7d 0a 09 61 set cross {}..a
63d0: 72 72 61 79 20 73 65 74 20 64 65 70 63 20 20 7b rray set depc {
63e0: 7d 0a 09 73 65 74 20 72 61 6e 67 65 20 20 20 20 }..set range
63f0: 20 20 20 7b 7d 0a 09 73 65 74 20 6e 20 30 0a 09 {}..set n 0..
6400: 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 65 76 foreach rev $rev
6410: 69 73 69 6f 6e 73 20 7b 0a 09 20 20 20 20 6c 61 isions {.. la
6420: 70 70 65 6e 64 20 72 61 6e 67 65 20 24 6e 0a 09 ppend range $n..
6430: 20 20 20 20 73 65 74 20 70 6f 73 28 24 72 65 76 set pos($rev
6440: 29 20 24 6e 0a 09 20 20 20 20 73 65 74 20 63 72 ) $n.. set cr
6450: 6f 73 73 28 24 6e 29 20 30 0a 09 20 20 20 20 69 oss($n) 0.. i
6460: 6e 63 72 20 6e 0a 09 7d 0a 0a 09 6c 6f 67 20 77 ncr n..}...log w
6470: 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 49 rite 14 csets {I
6480: 42 53 3a 20 70 6f 73 2f 5b 61 72 72 61 79 20 73 BS: pos/[array s
6490: 69 7a 65 20 70 6f 73 5d 2c 20 63 72 6f 73 73 2f ize pos], cross/
64a0: 5b 61 72 72 61 79 20 73 69 7a 65 20 63 72 6f 73 [array size cros
64b0: 73 5d 7d 0a 0a 09 23 20 53 65 63 6f 6e 64 6c 79 s]}...# Secondly
64c0: 20 77 65 20 63 6f 75 6e 74 20 74 68 65 20 63 72 we count the cr
64d0: 6f 73 73 69 6e 67 73 20 70 65 72 20 70 6f 73 69 ossings per posi
64e0: 74 69 6f 6e 2c 20 62 79 20 69 74 65 72 61 74 69 tion, by iterati
64f0: 6e 67 0a 09 23 20 6f 76 65 72 20 74 68 65 20 72 ng..# over the r
6500: 65 63 6f 72 64 65 64 20 69 6e 74 65 72 6e 61 6c ecorded internal
6510: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 0a 0a dependencies...
6520: 09 23 20 4e 6f 74 65 3a 20 49 66 20 74 68 65 20 .# Note: If the
6530: 74 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20 62 timestamps are b
6540: 61 64 6c 79 20 6f 75 74 20 6f 66 20 6f 72 64 65 adly out of orde
6550: 72 20 69 74 20 69 73 0a 09 23 20 20 20 20 20 20 r it is..#
6560: 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 76 possible to hav
6570: 65 20 61 20 62 61 63 6b 77 61 72 64 20 73 75 63 e a backward suc
6580: 63 65 73 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 cessor dependenc
6590: 79 2c 0a 09 23 20 20 20 20 20 20 20 69 2e 65 2e y,..# i.e.
65a0: 20 77 69 74 68 20 73 74 61 72 74 20 3e 20 65 6e with start > en
65b0: 64 2e 20 57 65 20 6d 61 79 20 68 61 76 65 20 74 d. We may have t
65c0: 6f 20 73 77 61 70 20 74 68 65 20 69 6e 64 69 63 o swap the indic
65d0: 65 73 0a 09 23 20 20 20 20 20 20 20 74 6f 20 65 es..# to e
65e0: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 66 nsure that the f
65f0: 6f 6c 6c 6f 77 69 6e 67 20 6c 6f 6f 70 20 72 75 ollowing loop ru
6600: 6e 73 20 63 6f 72 72 65 63 74 6c 79 2e 0a 09 23 ns correctly...#
6610: 0a 09 23 20 4e 6f 74 65 20 32 3a 20 73 74 61 72 ..# Note 2: star
6620: 74 20 3d 3d 20 65 6e 64 20 69 73 20 6e 6f 74 20 t == end is not
6630: 70 6f 73 73 69 62 6c 65 2e 20 49 74 20 69 6e 64 possible. It ind
6640: 69 63 61 74 65 73 20 61 0a 09 23 20 20 20 20 20 icates a..#
6650: 20 20 20 20 73 65 6c 66 2d 64 65 70 65 6e 64 65 self-depende
6660: 6e 63 79 20 64 75 65 20 74 6f 20 74 68 65 20 75 ncy due to the u
6670: 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70 6f 73 niqueness of pos
6680: 69 74 69 6f 6e 73 2c 0a 09 23 20 20 20 20 20 20 itions,..#
6690: 20 20 20 61 6e 64 20 74 68 61 74 20 69 73 20 73 and that is s
66a0: 6f 6d 65 74 68 69 6e 67 20 77 65 20 68 61 76 65 omething we have
66b0: 20 72 75 6c 65 64 20 6f 75 74 20 61 6c 72 65 61 ruled out alrea
66c0: 64 79 2c 20 73 65 65 0a 09 23 20 20 20 20 20 20 dy, see..#
66d0: 20 20 20 27 72 65 76 20 69 6e 74 65 72 6e 61 6c 'rev internal
66e0: 73 75 63 63 65 73 73 6f 72 73 27 2e 0a 0a 09 6c successors'....l
66f0: 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 og write 14 cset
6700: 73 20 7b 49 42 53 3a 20 63 72 6f 73 73 20 63 6f s {IBS: cross co
6710: 75 6e 74 65 72 20 66 69 6c 6c 69 6e 67 2c 20 70 unter filling, p
6720: 6f 73 2f 63 72 6f 73 73 20 6d 61 70 7d 0a 0a 09 os/cross map}...
6730: 66 6f 72 65 61 63 68 20 7b 72 69 64 20 63 68 69 foreach {rid chi
6740: 6c 64 72 65 6e 7d 20 5b 61 72 72 61 79 20 67 65 ldren} [array ge
6750: 74 20 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 20 t dependencies]
6760: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 63 {.. foreach c
6770: 68 69 6c 64 20 24 63 68 69 6c 64 72 65 6e 20 7b hild $children {
6780: 0a 09 09 73 65 74 20 64 6b 65 79 20 20 20 20 5b ...set dkey [
6790: 6c 69 73 74 20 24 72 69 64 20 24 63 68 69 6c 64 list $rid $child
67a0: 5d 0a 09 09 73 65 74 20 73 74 61 72 74 20 20 20 ]...set start
67b0: 24 70 6f 73 28 24 72 69 64 29 0a 09 09 73 65 74 $pos($rid)...set
67c0: 20 65 6e 64 20 20 20 20 20 24 70 6f 73 28 24 63 end $pos($c
67d0: 68 69 6c 64 29 0a 0a 09 09 69 66 20 7b 24 73 74 hild)....if {$st
67e0: 61 72 74 20 3e 20 24 65 6e 64 7d 20 7b 0a 09 09 art > $end} {...
67f0: 20 20 20 20 73 65 74 20 63 72 6f 73 73 65 73 20 set crosses
6800: 5b 6c 69 73 74 20 24 65 6e 64 20 5b 65 78 70 72 [list $end [expr
6810: 20 7b 24 73 74 61 72 74 2d 31 7d 5d 5d 0a 09 09 {$start-1}]]...
6820: 20 20 20 20 77 68 69 6c 65 20 7b 24 65 6e 64 20 while {$end
6830: 3c 20 24 73 74 61 72 74 7d 20 7b 0a 09 09 09 69 < $start} {....i
6840: 6e 63 72 20 63 72 6f 73 73 28 24 65 6e 64 29 0a ncr cross($end).
6850: 09 09 09 69 6e 63 72 20 65 6e 64 0a 09 09 20 20 ...incr end...
6860: 20 20 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 }...} else {..
6870: 09 20 20 20 20 73 65 74 20 63 72 6f 73 73 65 73 . set crosses
6880: 20 5b 6c 69 73 74 20 24 73 74 61 72 74 20 5b 65 [list $start [e
6890: 78 70 72 20 7b 24 65 6e 64 2d 31 7d 5d 5d 0a 09 xpr {$end-1}]]..
68a0: 09 20 20 20 20 77 68 69 6c 65 20 7b 24 73 74 61 . while {$sta
68b0: 72 74 20 3c 20 24 65 6e 64 7d 20 7b 0a 09 09 09 rt < $end} {....
68c0: 69 6e 63 72 20 63 72 6f 73 73 28 24 73 74 61 72 incr cross($star
68d0: 74 29 0a 09 09 09 69 6e 63 72 20 73 74 61 72 74 t)....incr start
68e0: 0a 09 09 20 20 20 20 7d 0a 09 09 7d 0a 09 09 73 ... }...}...s
68f0: 65 74 20 64 65 70 63 28 24 64 6b 65 79 29 20 24 et depc($dkey) $
6900: 63 72 6f 73 73 65 73 0a 09 20 20 20 20 7d 0a 09 crosses.. }..
6910: 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 }...log write 14
6920: 20 63 73 65 74 73 20 7b 49 42 53 3a 20 70 6f 73 csets {IBS: pos
6930: 2f 5b 61 72 72 61 79 20 73 69 7a 65 20 70 6f 73 /[array size pos
6940: 5d 2c 20 63 72 6f 73 73 2f 5b 61 72 72 61 79 20 ], cross/[array
6950: 73 69 7a 65 20 63 72 6f 73 73 5d 2c 20 64 65 70 size cross], dep
6960: 63 2f 5b 61 72 72 61 79 20 73 69 7a 65 20 64 65 c/[array size de
6970: 70 63 5d 20 28 66 6f 72 20 5b 6c 6c 65 6e 67 74 pc] (for [llengt
6980: 68 20 24 72 65 76 69 73 69 6f 6e 73 5d 29 7d 0a h $revisions])}.
6990: 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 .log write 14 cs
69a0: 65 74 73 20 7b 49 42 53 3a 20 74 69 6d 65 73 74 ets {IBS: timest
69b0: 61 6d 70 73 2c 20 64 65 6c 74 61 73 7d 0a 0a 09 amps, deltas}...
69c0: 49 6e 69 74 69 61 6c 69 7a 65 44 65 6c 74 61 73 InitializeDeltas
69d0: 20 24 72 65 76 69 73 69 6f 6e 73 0a 0a 09 6c 6f $revisions...lo
69e0: 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73 g write 14 csets
69f0: 20 7b 49 42 53 3a 20 64 65 6c 74 61 20 5b 61 72 {IBS: delta [ar
6a00: 72 61 79 20 73 69 7a 65 20 64 65 6c 74 61 5d 7d ray size delta]}
6a10: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
6a20: 20 20 20 20 70 72 6f 63 20 49 6e 69 74 69 61 6c proc Initial
6a30: 69 7a 65 44 65 6c 74 61 73 20 7b 72 65 76 69 73 izeDeltas {revis
6a40: 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 61 72 20 31 ions} {..upvar 1
6a50: 20 64 65 6c 74 61 20 64 65 6c 74 61 0a 0a 09 23 delta delta...#
6a60: 20 50 75 6c 6c 20 74 68 65 20 74 69 6d 65 73 74 Pull the timest
6a70: 61 6d 70 73 20 66 6f 72 20 61 6c 6c 20 72 65 76 amps for all rev
6a80: 69 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 63 68 isions in the ch
6a90: 61 6e 67 65 73 65 74 73 20 61 6e 64 0a 09 23 20 angesets and..#
6aa0: 63 6f 6d 70 75 74 65 20 74 68 65 69 72 20 64 65 compute their de
6ab0: 6c 74 61 73 20 66 6f 72 20 75 73 65 20 62 79 20 ltas for use by
6ac0: 74 68 65 20 62 72 65 61 6b 20 66 69 6e 64 65 72 the break finder
6ad0: 2e 0a 0a 09 61 72 72 61 79 20 73 65 74 20 64 65 ....array set de
6ae0: 6c 74 61 20 7b 7d 0a 09 61 72 72 61 79 20 73 65 lta {}..array se
6af0: 74 20 73 74 61 6d 70 20 7b 7d 0a 0a 09 73 65 74 t stamp {}...set
6b00: 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 theset ('[join
6b10: 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d $revisions {','}
6b20: 5d 27 29 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 ]')..foreach {ri
6b30: 64 20 74 69 6d 65 7d 20 5b 73 74 61 74 65 20 72 d time} [state r
6b40: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
6b50: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
6b60: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
6b70: 43 54 20 52 2e 72 69 64 2c 20 52 2e 64 61 74 65 CT R.rid, R.date
6b80: 0a 09 20 20 20 20 46 52 4f 4d 20 72 65 76 69 73 .. FROM revis
6b90: 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 ion R.. WHERE
6ba0: 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 73 65 R.rid IN $these
6bb0: 74 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 73 65 t..}]] {.. se
6bc0: 74 20 73 74 61 6d 70 28 24 72 69 64 29 20 24 74 t stamp($rid) $t
6bd0: 69 6d 65 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 ime..}...log wri
6be0: 74 65 20 31 34 20 63 73 65 74 73 20 7b 49 42 53 te 14 csets {IBS
6bf0: 3a 20 73 74 61 6d 70 20 5b 61 72 72 61 79 20 73 : stamp [array s
6c00: 69 7a 65 20 73 74 61 6d 70 5d 7d 0a 0a 09 73 65 ize stamp]}...se
6c10: 74 20 6e 20 30 0a 09 66 6f 72 65 61 63 68 20 72 t n 0..foreach r
6c20: 69 64 20 5b 6c 72 61 6e 67 65 20 24 72 65 76 69 id [lrange $revi
6c30: 73 69 6f 6e 73 20 30 20 65 6e 64 2d 31 5d 20 72 sions 0 end-1] r
6c40: 6e 65 78 74 20 5b 6c 72 61 6e 67 65 20 24 72 65 next [lrange $re
6c50: 76 69 73 69 6f 6e 73 20 31 20 65 6e 64 5d 20 7b visions 1 end] {
6c60: 0a 09 20 20 20 20 73 65 74 20 64 65 6c 74 61 28 .. set delta(
6c70: 24 6e 29 20 5b 65 78 70 72 20 7b 24 73 74 61 6d $n) [expr {$stam
6c80: 70 28 24 72 6e 65 78 74 29 20 2d 20 24 73 74 61 p($rnext) - $sta
6c90: 6d 70 28 24 72 69 64 29 7d 5d 0a 09 20 20 20 20 mp($rid)}]..
6ca0: 69 6e 63 72 20 6e 0a 09 7d 0a 09 72 65 74 75 72 incr n..}..retur
6cb0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f n. }.. pro
6cc0: 63 20 46 69 6e 64 42 65 73 74 42 72 65 61 6b 20 c FindBestBreak
6cd0: 7b 72 61 6e 67 65 7d 20 7b 0a 09 75 70 76 61 72 {range} {..upvar
6ce0: 20 31 20 63 72 6f 73 73 20 63 72 6f 73 73 20 64 1 cross cross d
6cf0: 65 6c 74 61 20 64 65 6c 74 61 0a 0a 09 23 20 44 elta delta...# D
6d00: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73 etermine the bes
6d10: 74 20 62 72 65 61 6b 20 6c 6f 63 61 74 69 6f 6e t break location
6d20: 20 69 6e 20 74 68 65 20 67 69 76 65 6e 20 72 61 in the given ra
6d30: 6e 67 65 20 6f 66 0a 09 23 20 70 6f 73 69 74 69 nge of..# positi
6d40: 6f 6e 73 2e 20 46 69 72 73 74 20 77 65 20 6c 6f ons. First we lo
6d50: 6f 6b 20 66 6f 72 20 74 68 65 20 6c 6f 63 61 74 ok for the locat
6d60: 69 6f 6e 73 20 77 69 74 68 20 74 68 65 20 6d 61 ions with the ma
6d70: 78 69 6d 61 6c 0a 09 23 20 6e 75 6d 62 65 72 20 ximal..# number
6d80: 6f 66 20 63 72 6f 73 73 69 6e 67 73 2e 20 49 66 of crossings. If
6d90: 20 74 68 65 72 65 20 61 72 65 20 73 65 76 65 72 there are sever
6da0: 61 6c 20 77 65 20 6c 6f 6f 6b 20 66 6f 72 20 74 al we look for t
6db0: 68 65 0a 09 23 20 73 68 6f 72 74 65 73 74 20 74 he..# shortest t
6dc0: 69 6d 65 20 69 6e 74 65 72 76 61 6c 20 61 6d 6f ime interval amo
6dd0: 6e 67 20 74 68 65 6d 2e 20 49 66 20 77 65 20 73 ng them. If we s
6de0: 74 69 6c 6c 20 68 61 76 65 20 6d 75 6c 74 69 70 till have multip
6df0: 6c 65 0a 09 23 20 70 6f 73 73 69 62 69 6c 69 74 le..# possibilit
6e00: 69 65 73 20 61 66 74 65 72 20 74 68 61 74 20 77 ies after that w
6e10: 65 20 73 65 6c 65 63 74 20 74 68 65 20 65 61 72 e select the ear
6e20: 6c 69 65 73 74 20 6c 6f 63 61 74 69 6f 6e 0a 09 liest location..
6e30: 23 20 61 6d 6f 6e 67 20 74 68 65 73 65 2e 0a 0a # among these...
6e40: 09 23 20 4e 6f 74 65 3a 20 49 66 20 74 68 65 20 .# Note: If the
6e50: 6d 61 78 69 6d 61 6c 20 6e 75 6d 62 65 72 20 6f maximal number o
6e60: 66 20 63 72 6f 73 73 69 6e 67 73 20 69 73 20 30 f crossings is 0
6e70: 20 74 68 65 6e 20 74 68 65 20 72 61 6e 67 65 0a then the range.
6e80: 09 23 20 20 20 20 20 20 20 68 61 73 20 6e 6f 20 .# has no
6e90: 69 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 internal depende
6ea0: 6e 63 69 65 73 2c 20 61 6e 64 20 6e 6f 20 62 72 ncies, and no br
6eb0: 65 61 6b 20 6c 6f 63 61 74 69 6f 6e 20 61 74 0a eak location at.
6ec0: 09 23 20 20 20 20 20 20 20 61 6c 6c 2e 20 54 68 .# all. Th
6ed0: 69 73 20 70 6f 73 73 69 62 69 6c 69 74 79 20 69 is possibility i
6ee0: 73 20 73 69 67 6e 61 6c 65 64 20 76 69 61 20 72 s signaled via r
6ef0: 65 73 75 6c 74 20 2d 31 2e 0a 0a 09 23 20 4e 6f esult -1....# No
6f00: 74 65 3a 20 41 20 72 61 6e 67 65 20 6f 66 20 6c te: A range of l
6f10: 65 6e 67 74 68 20 31 20 6f 72 20 6c 65 73 73 20 ength 1 or less
6f20: 63 61 6e 6e 6f 74 20 68 61 76 65 20 69 6e 74 65 cannot have inte
6f30: 72 6e 61 6c 0a 09 23 20 20 20 20 20 20 20 64 65 rnal..# de
6f40: 70 65 6e 64 65 6e 63 69 65 73 2c 20 61 73 20 74 pendencies, as t
6f50: 68 61 74 20 6e 65 65 64 73 20 61 74 20 6c 65 61 hat needs at lea
6f60: 73 74 20 74 77 6f 20 72 65 76 69 73 69 6f 6e 73 st two revisions
6f70: 20 69 6e 0a 09 23 20 20 20 20 20 20 20 74 68 65 in..# the
6f80: 20 72 61 6e 67 65 2e 0a 0a 09 69 66 20 7b 5b 6c range....if {[l
6f90: 6c 65 6e 67 74 68 20 24 72 61 6e 67 65 5d 20 3c length $range] <
6fa0: 20 32 7d 20 7b 20 72 65 74 75 72 6e 20 2d 31 20 2} { return -1
6fb0: 7d 0a 0a 09 73 65 74 20 6d 61 78 20 2d 31 0a 09 }...set max -1..
6fc0: 73 65 74 20 62 65 73 74 20 7b 7d 0a 0a 09 66 6f set best {}...fo
6fd0: 72 65 61 63 68 20 6c 6f 63 61 74 69 6f 6e 20 24 reach location $
6fe0: 72 61 6e 67 65 20 7b 0a 09 20 20 20 20 73 65 74 range {.. set
6ff0: 20 63 72 6f 73 73 69 6e 67 73 20 24 63 72 6f 73 crossings $cros
7000: 73 28 24 6c 6f 63 61 74 69 6f 6e 29 0a 09 20 20 s($location)..
7010: 20 20 69 66 20 7b 24 63 72 6f 73 73 69 6e 67 73 if {$crossings
7020: 20 3e 20 24 6d 61 78 7d 20 7b 0a 09 09 73 65 74 > $max} {...set
7030: 20 6d 61 78 20 20 24 63 72 6f 73 73 69 6e 67 73 max $crossings
7040: 0a 09 09 73 65 74 20 62 65 73 74 20 5b 6c 69 73 ...set best [lis
7050: 74 20 24 6c 6f 63 61 74 69 6f 6e 5d 0a 09 09 63 t $location]...c
7060: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 7d 20 65 ontinue.. } e
7070: 6c 73 65 69 66 20 7b 24 63 72 6f 73 73 69 6e 67 lseif {$crossing
7080: 73 20 3d 3d 20 24 6d 61 78 7d 20 7b 0a 09 09 6c s == $max} {...l
7090: 61 70 70 65 6e 64 20 62 65 73 74 20 24 6c 6f 63 append best $loc
70a0: 61 74 69 6f 6e 0a 09 20 20 20 20 7d 0a 09 7d 0a ation.. }..}.
70b0: 0a 09 69 66 20 7b 24 6d 61 78 20 3d 3d 20 30 7d ..if {$max == 0}
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 72 65 { re
70d0: 74 75 72 6e 20 2d 31 20 7d 0a 09 69 66 20 7b 5b turn -1 }..if {[
70e0: 6c 6c 65 6e 67 74 68 20 24 62 65 73 74 5d 20 3d llength $best] =
70f0: 3d 20 31 7d 20 7b 20 72 65 74 75 72 6e 20 5b 6c = 1} { return [l
7100: 69 6e 64 65 78 20 24 62 65 73 74 20 30 5d 20 7d index $best 0] }
7110: 0a 0a 09 73 65 74 20 6c 6f 63 61 74 69 6f 6e 73 ...set locations
7120: 20 24 62 65 73 74 0a 09 73 65 74 20 62 65 73 74 $best..set best
7130: 20 7b 7d 0a 09 73 65 74 20 6d 69 6e 20 2d 31 0a {}..set min -1.
7140: 0a 09 66 6f 72 65 61 63 68 20 6c 6f 63 61 74 69 ..foreach locati
7150: 6f 6e 20 24 6c 6f 63 61 74 69 6f 6e 73 20 7b 0a on $locations {.
7160: 09 20 20 20 20 73 65 74 20 69 6e 74 65 72 76 61 . set interva
7170: 6c 20 24 64 65 6c 74 61 28 24 6c 6f 63 61 74 69 l $delta($locati
7180: 6f 6e 29 0a 09 20 20 20 20 69 66 20 7b 28 24 6d on).. if {($m
7190: 69 6e 20 3c 20 30 29 20 7c 7c 20 28 24 69 6e 74 in < 0) || ($int
71a0: 65 72 76 61 6c 20 3c 20 24 6d 69 6e 29 7d 20 7b erval < $min)} {
71b0: 0a 09 09 73 65 74 20 6d 69 6e 20 20 24 69 6e 74 ...set min $int
71c0: 65 72 76 61 6c 0a 09 09 73 65 74 20 62 65 73 74 erval...set best
71d0: 20 5b 6c 69 73 74 20 24 6c 6f 63 61 74 69 6f 6e [list $location
71e0: 5d 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 ].. } elseif
71f0: 7b 24 69 6e 74 65 72 76 61 6c 20 3d 3d 20 24 6d {$interval == $m
7200: 69 6e 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 in} {...lappend
7210: 62 65 73 74 20 24 6c 6f 63 61 74 69 6f 6e 0a 09 best $location..
7220: 20 20 20 20 7d 0a 09 7d 0a 0a 09 69 66 20 7b 5b }..}...if {[
7230: 6c 6c 65 6e 67 74 68 20 24 62 65 73 74 5d 20 3d llength $best] =
7240: 3d 20 31 7d 20 7b 20 72 65 74 75 72 6e 20 5b 6c = 1} { return [l
7250: 69 6e 64 65 78 20 24 62 65 73 74 20 30 5d 20 7d index $best 0] }
7260: 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 ...return [linde
7270: 78 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 x [lsort -intege
7280: 72 20 2d 69 6e 63 72 65 61 73 69 6e 67 20 24 62 r -increasing $b
7290: 65 73 74 5d 20 30 5d 0a 20 20 20 20 7d 0a 0a 20 est] 0]. }..
72a0: 20 20 20 70 72 6f 63 20 43 75 74 41 74 20 7b 6c proc CutAt {l
72b0: 6f 63 61 74 69 6f 6e 7d 20 7b 0a 09 75 70 76 61 ocation} {..upva
72c0: 72 20 31 20 63 72 6f 73 73 20 63 72 6f 73 73 20 r 1 cross cross
72d0: 64 65 70 63 20 64 65 70 63 0a 0a 09 23 20 49 74 depc depc...# It
72e0: 20 77 61 73 20 64 65 63 69 64 65 64 20 74 6f 20 was decided to
72f0: 73 70 6c 69 74 20 74 68 65 20 63 68 61 6e 67 65 split the change
7300: 73 65 74 20 61 74 20 74 68 65 20 67 69 76 65 6e set at the given
7310: 0a 09 23 20 6c 6f 63 61 74 69 6f 6e 2e 20 54 68 ..# location. Th
7320: 69 73 20 63 75 74 73 20 61 20 6e 75 6d 62 65 72 is cuts a number
7330: 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 of dependencies
7340: 2e 20 48 65 72 65 20 77 65 20 75 70 64 61 74 65 . Here we update
7350: 0a 09 23 20 74 68 65 20 63 72 6f 73 73 20 69 6e ..# the cross in
7360: 66 6f 72 6d 61 74 69 6f 6e 20 73 6f 20 74 68 61 formation so tha
7370: 74 20 74 68 65 20 62 72 65 61 6b 20 66 69 6e 64 t the break find
7380: 65 72 20 68 61 73 20 61 63 63 75 72 61 74 65 0a er has accurate.
7390: 09 23 20 64 61 74 61 20 77 68 65 6e 20 77 65 20 .# data when we
73a0: 6c 6f 6f 6b 20 61 74 20 74 68 65 20 67 65 6e 65 look at the gene
73b0: 72 61 74 65 64 20 66 72 61 67 6d 65 6e 74 73 2e rated fragments.
73c0: 0a 0a 09 73 65 74 20 73 69 78 20 5b 6c 6f 67 20 ...set six [log
73d0: 76 69 73 69 62 6c 65 3f 20 36 5d 0a 0a 09 23 20 visible? 6]...#
73e0: 4e 6f 74 65 3a 20 54 68 65 20 6c 6f 6f 70 20 62 Note: The loop b
73f0: 65 6c 6f 77 20 63 6f 75 6c 64 20 62 65 20 6d 61 elow could be ma
7400: 64 65 20 66 61 73 74 65 72 20 62 79 20 6b 65 65 de faster by kee
7410: 70 69 6e 67 20 61 20 6d 61 70 0a 09 23 20 66 72 ping a map..# fr
7420: 6f 6d 20 70 6f 73 69 74 69 6f 6e 73 20 74 6f 20 om positions to
7430: 74 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 the dependencies
7440: 20 63 72 6f 73 73 69 6e 67 2e 20 41 6e 20 65 78 crossing. An ex
7450: 74 65 6e 73 69 6f 6e 20 6f 66 0a 09 23 20 43 52 tension of..# CR
7460: 4f 53 53 2c 20 69 2e 65 2e 20 6c 69 73 74 20 6f OSS, i.e. list o
7470: 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 f dependencies,
7480: 63 6f 75 6e 74 65 72 20 69 73 20 69 6d 70 6c 69 counter is impli
7490: 65 64 2e 20 54 61 6b 65 73 0a 09 23 20 61 20 6c ed. Takes..# a l
74a0: 6f 74 20 6d 6f 72 65 20 6d 65 6d 6f 72 79 20 68 ot more memory h
74b0: 6f 77 65 76 65 72 2c 20 61 6e 64 20 74 61 6b 65 owever, and take
74c0: 73 20 74 69 6d 65 20 74 6f 20 75 70 64 61 74 65 s time to update
74d0: 20 68 65 72 65 0a 09 23 20 28 54 68 65 20 69 6e here..# (The in
74e0: 6e 65 72 20 6c 6f 6f 70 20 69 73 20 6e 6f 74 20 ner loop is not
74f0: 69 6e 63 72 20 2d 31 2c 20 62 75 74 20 6c 64 65 incr -1, but lde
7500: 6c 65 74 65 29 2e 0a 0a 09 66 6f 72 65 61 63 68 lete)....foreach
7510: 20 64 65 70 20 5b 61 72 72 61 79 20 6e 61 6d 65 dep [array name
7520: 73 20 64 65 70 63 5d 20 7b 0a 09 20 20 20 20 73 s depc] {.. s
7530: 65 74 20 72 61 6e 67 65 20 24 64 65 70 63 28 24 et range $depc($
7540: 64 65 70 29 0a 09 20 20 20 20 23 20 43 68 65 63 dep).. # Chec
7550: 6b 20 61 6c 6c 20 64 65 70 65 6e 64 65 6e 63 69 k all dependenci
7560: 65 73 20 73 74 69 6c 6c 20 6b 6e 6f 77 6e 2c 20 es still known,
7570: 74 61 6b 65 20 74 68 65 69 72 20 72 61 6e 67 65 take their range
7580: 20 61 6e 64 0a 09 20 20 20 20 23 20 73 65 65 20 and.. # see
7590: 69 66 20 74 68 65 20 62 72 65 61 6b 20 6c 6f 63 if the break loc
75a0: 61 74 69 6f 6e 20 66 61 6c 6c 73 20 77 69 74 68 ation falls with
75b0: 69 6e 2e 0a 0a 09 20 20 20 20 42 6f 72 64 65 72 in.... Border
75c0: 20 24 72 61 6e 67 65 20 73 20 65 0a 09 20 20 20 $range s e..
75d0: 20 69 66 20 7b 24 6c 6f 63 61 74 69 6f 6e 20 3c if {$location <
75e0: 20 24 73 7d 20 63 6f 6e 74 69 6e 75 65 20 3b 20 $s} continue ;
75f0: 23 20 62 72 65 61 6b 20 62 65 66 6f 72 65 20 72 # break before r
7600: 61 6e 67 65 2c 20 69 67 6e 6f 72 65 0a 09 20 20 ange, ignore..
7610: 20 20 69 66 20 7b 24 6c 6f 63 61 74 69 6f 6e 20 if {$location
7620: 3e 20 24 65 7d 20 63 6f 6e 74 69 6e 75 65 20 3b > $e} continue ;
7630: 20 23 20 62 72 65 61 6b 20 61 66 74 65 72 20 72 # break after r
7640: 61 6e 67 65 2c 20 69 67 6e 6f 72 65 2e 0a 0a 09 ange, ignore....
7650: 20 20 20 20 23 20 54 68 69 73 20 64 65 70 65 6e # This depen
7660: 64 65 6e 63 79 20 63 72 6f 73 73 65 73 20 74 68 dency crosses th
7670: 65 20 62 72 65 61 6b 20 6c 6f 63 61 74 69 6f 6e e break location
7680: 2e 20 57 65 20 72 65 6d 6f 76 65 20 69 74 0a 09 . We remove it..
7690: 20 20 20 20 23 20 66 72 6f 6d 20 74 68 65 20 63 # from the c
76a0: 72 6f 73 73 69 6e 67 73 20 63 6f 75 6e 74 65 72 rossings counter
76b0: 73 2c 20 61 6e 64 20 74 68 65 6e 20 61 6c 73 6f s, and then also
76c0: 20 66 72 6f 6d 20 74 68 65 20 73 65 74 0a 09 20 from the set..
76d0: 20 20 20 23 20 6f 66 20 6b 6e 6f 77 6e 20 64 65 # of known de
76e0: 70 65 6e 64 65 6e 63 69 65 73 2c 20 61 73 20 77 pendencies, as w
76f0: 65 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68 20 e are done with
7700: 69 74 2e 0a 0a 09 20 20 20 20 42 6f 72 64 65 72 it.... Border
7710: 20 24 64 65 70 63 28 24 64 65 70 29 20 64 73 20 $depc($dep) ds
7720: 64 65 0a 09 20 20 20 20 66 6f 72 20 7b 73 65 74 de.. for {set
7730: 20 6c 6f 63 20 24 64 73 7d 20 7b 24 6c 6f 63 20 loc $ds} {$loc
7740: 3c 3d 20 24 64 65 7d 20 7b 69 6e 63 72 20 6c 6f <= $de} {incr lo
7750: 63 7d 20 7b 0a 09 09 69 6e 63 72 20 63 72 6f 73 c} {...incr cros
7760: 73 28 24 6c 6f 63 29 20 2d 31 0a 09 20 20 20 20 s($loc) -1..
7770: 7d 0a 09 20 20 20 20 75 6e 73 65 74 20 64 65 70 }.. unset dep
7780: 63 28 24 64 65 70 29 0a 0a 09 20 20 20 20 69 66 c($dep)... if
7790: 20 7b 21 24 73 69 78 7d 20 63 6f 6e 74 69 6e 75 {!$six} continu
77a0: 65 0a 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a e... struct::
77b0: 6c 69 73 74 20 61 73 73 69 67 6e 20 24 64 65 70 list assign $dep
77c0: 20 70 61 72 65 6e 74 20 63 68 69 6c 64 0a 09 20 parent child..
77d0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 35 20 63 log write 5 c
77e0: 73 65 74 73 20 22 42 72 6f 6b 65 20 64 65 70 65 sets "Broke depe
77f0: 6e 64 65 6e 63 79 20 5b 50 44 20 24 70 61 72 65 ndency [PD $pare
7800: 6e 74 5d 20 2d 2d 3e 20 5b 50 44 20 24 63 68 69 nt] --> [PD $chi
7810: 6c 64 5d 22 0a 09 7d 0a 0a 09 72 65 74 75 72 6e ld]"..}...return
7820: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 50 72 . }.. # Pr
7830: 69 6e 74 20 69 64 65 6e 74 69 66 79 69 6e 67 20 int identifying
7840: 64 61 74 61 20 66 6f 72 20 61 20 72 65 76 69 73 data for a revis
7850: 69 6f 6e 20 28 70 72 6f 6a 65 63 74 2c 20 66 69 ion (project, fi
7860: 6c 65 2c 20 64 6f 74 74 65 64 20 72 65 76 0a 20 le, dotted rev.
7870: 20 20 20 23 20 6e 75 6d 62 65 72 29 2c 20 66 6f # number), fo
7880: 72 20 68 69 67 68 20 76 65 72 62 6f 73 69 74 79 r high verbosity
7890: 20 6c 6f 67 20 6f 75 74 70 75 74 2e 0a 20 20 20 log output..
78a0: 20 23 20 54 4f 44 4f 3a 20 52 65 70 6c 61 63 65 # TODO: Replace
78b0: 20 77 69 74 68 20 63 61 6c 6c 20 74 6f 20 69 74 with call to it
78c0: 65 6d 73 74 72 20 28 6c 69 73 74 20 72 65 76 20 emstr (list rev
78d0: 24 69 64 29 0a 0a 20 20 20 20 70 72 6f 63 20 50 $id).. proc P
78e0: 44 20 7b 69 64 7d 20 7b 0a 09 66 6f 72 65 61 63 D {id} {..foreac
78f0: 68 20 7b 70 20 66 20 72 7d 20 5b 73 74 61 74 65 h {p f r} [state
7900: 20 72 75 6e 20 7b 0a 09 09 53 45 4c 45 43 54 20 run {...SELECT
7910: 50 2e 6e 61 6d 65 20 2c 20 46 2e 6e 61 6d 65 2c P.name , F.name,
7920: 20 52 2e 72 65 76 0a 09 09 46 52 4f 4d 20 72 65 R.rev...FROM re
7930: 76 69 73 69 6f 6e 20 52 2c 20 66 69 6c 65 20 46 vision R, file F
7940: 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 09 57 48 , project P...WH
7950: 45 52 45 20 52 2e 72 69 64 20 3d 20 24 69 64 20 ERE R.rid = $id
7960: 20 20 20 2d 2d 20 46 69 6e 64 20 73 70 65 63 69 -- Find speci
7970: 66 69 65 64 20 66 69 6c 65 20 72 65 76 69 73 69 fied file revisi
7980: 6f 6e 0a 09 09 41 4e 44 20 20 20 46 2e 66 69 64 on...AND F.fid
7990: 20 3d 20 52 2e 66 69 64 20 20 2d 2d 20 47 65 74 = R.fid -- Get
79a0: 20 66 69 6c 65 20 6f 66 20 74 68 65 20 72 65 76 file of the rev
79b0: 69 73 69 6f 6e 0a 09 09 41 4e 44 20 20 20 50 2e ision...AND P.
79c0: 70 69 64 20 3d 20 46 2e 70 69 64 20 20 2d 2d 20 pid = F.pid --
79d0: 47 65 74 20 70 72 6f 6a 65 63 74 20 6f 66 20 74 Get project of t
79e0: 68 65 20 66 69 6c 65 2e 0a 09 7d 5d 20 62 72 65 he file...}] bre
79f0: 61 6b 0a 09 72 65 74 75 72 6e 20 22 27 24 70 20 ak..return "'$p
7a00: 3a 20 24 66 2f 24 72 27 22 0a 20 20 20 20 7d 0a : $f/$r'". }.
7a10: 0a 20 20 20 20 23 20 50 72 69 6e 74 69 6e 67 20 . # Printing
7a20: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 61 6e 67 one or more rang
7a30: 65 73 2c 20 66 6f 72 6d 61 74 74 65 64 2c 20 61 es, formatted, a
7a40: 6e 64 20 6f 6e 6c 79 20 74 68 65 69 72 20 62 6f nd only their bo
7a50: 72 64 65 72 20 74 6f 0a 20 20 20 20 23 20 6b 65 rder to. # ke
7a60: 65 70 20 74 68 65 20 73 74 72 69 6e 67 73 20 73 ep the strings s
7a70: 68 6f 72 74 2e 0a 0a 20 20 20 20 70 72 6f 63 20 hort... proc
7a80: 50 52 73 20 7b 72 61 6e 67 65 73 7d 20 7b 0a 09 PRs {ranges} {..
7a90: 72 65 74 75 72 6e 20 5b 73 74 72 75 63 74 3a 3a return [struct::
7aa0: 6c 69 73 74 20 6d 61 70 20 24 72 61 6e 67 65 73 list map $ranges
7ab0: 20 5b 6d 79 70 72 6f 63 20 50 52 5d 5d 0a 20 20 [myproc PR]].
7ac0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 50 52 }.. proc PR
7ad0: 20 7b 72 61 6e 67 65 7d 20 7b 0a 09 42 6f 72 64 {range} {..Bord
7ae0: 65 72 20 24 72 61 6e 67 65 20 73 20 65 0a 09 72 er $range s e..r
7af0: 65 74 75 72 6e 20 3c 24 7b 73 7d 2e 2e 2e 24 7b eturn <${s}...${
7b00: 65 7d 3e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 e}>. }.. p
7b10: 72 6f 63 20 42 6f 72 64 65 72 20 7b 72 61 6e 67 roc Border {rang
7b20: 65 20 73 76 20 65 76 7d 20 7b 0a 09 75 70 76 61 e sv ev} {..upva
7b30: 72 20 31 20 24 73 76 20 73 20 24 65 76 20 65 0a r 1 $sv s $ev e.
7b40: 09 73 65 74 20 73 20 5b 6c 69 6e 64 65 78 20 24 .set s [lindex $
7b50: 72 61 6e 67 65 20 30 5d 0a 09 73 65 74 20 65 20 range 0]..set e
7b60: 5b 6c 69 6e 64 65 78 20 24 72 61 6e 67 65 20 65 [lindex $range e
7b70: 6e 64 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 nd]..return.
7b80: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
7b90: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
7ba0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a #############..
7bb0: 20 20 20 20 70 72 6f 63 20 55 6e 6d 61 70 49 74 proc UnmapIt
7bc0: 65 6d 73 20 7b 74 68 65 74 79 70 65 20 74 68 65 ems {thetype the
7bd0: 69 74 65 6d 73 7d 20 7b 0a 09 23 20 28 2a 29 20 items} {..# (*)
7be0: 57 65 20 63 6c 65 61 72 20 6f 75 74 20 74 68 65 We clear out the
7bf0: 20 61 73 73 6f 63 69 61 74 65 64 20 70 61 72 74 associated part
7c00: 20 6f 66 20 74 68 65 20 6d 79 69 74 65 6d 6d 61 of the myitemma
7c10: 70 0a 09 23 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 p..# in-memory i
7c20: 6e 64 65 78 20 69 6e 20 70 72 65 70 61 72 61 74 ndex in preparat
7c30: 69 6f 6e 20 66 6f 72 20 6e 65 77 20 64 61 74 61 ion for new data
7c40: 2c 20 6f 72 20 61 73 20 70 61 72 74 20 6f 66 0a , or as part of.
7c50: 09 23 20 6f 62 6a 65 63 74 20 64 65 73 74 72 75 .# object destru
7c60: 63 74 69 6f 6e 2e 20 41 20 73 69 6d 70 6c 65 20 ction. A simple
7c70: 75 6e 73 65 74 20 69 73 20 65 6e 6f 75 67 68 2c unset is enough,
7c80: 20 77 65 20 68 61 76 65 20 6e 6f 0a 09 23 20 73 we have no..# s
7c90: 79 6d 62 6f 6c 20 63 68 61 6e 67 65 73 65 74 73 ymbol changesets
7ca0: 20 61 74 20 74 68 69 73 20 74 69 6d 65 2c 20 61 at this time, a
7cb0: 6e 64 20 74 68 75 73 20 6e 65 76 65 72 20 6d 6f nd thus never mo
7cc0: 72 65 20 74 68 61 6e 20 6f 6e 65 0a 09 23 20 72 re than one..# r
7cd0: 65 66 65 72 65 6e 63 65 20 69 6e 20 74 68 65 20 eference in the
7ce0: 6c 69 73 74 2e 0a 0a 09 75 70 76 61 72 20 31 20 list....upvar 1
7cf0: 6d 79 69 74 65 6d 6d 61 70 20 6d 79 69 74 65 6d myitemmap myitem
7d00: 6d 61 70 20 73 65 6c 66 20 73 65 6c 66 0a 09 66 map self self..f
7d10: 6f 72 65 61 63 68 20 69 69 64 20 24 74 68 65 69 oreach iid $thei
7d20: 74 65 6d 73 20 7b 0a 09 20 20 20 20 73 65 74 20 tems {.. set
7d30: 6b 65 79 20 5b 6c 69 73 74 20 24 74 68 65 74 79 key [list $thety
7d40: 70 65 20 24 69 69 64 5d 0a 09 20 20 20 20 75 6e pe $iid].. un
7d50: 73 65 74 20 6d 79 69 74 65 6d 6d 61 70 28 24 6b set myitemmap($k
7d60: 65 79 29 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 ey).. log wri
7d70: 74 65 20 38 20 63 73 65 74 73 20 7b 4d 41 50 2d te 8 csets {MAP-
7d80: 20 69 74 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 item <$key> $se
7d90: 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d lf = [$self str]
7da0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 }..}..return.
7db0: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 4d 61 70 }.. proc Map
7dc0: 49 74 65 6d 73 20 7b 74 68 65 74 79 70 65 20 74 Items {thetype t
7dd0: 68 65 69 74 65 6d 73 7d 20 7b 0a 09 75 70 76 61 heitems} {..upva
7de0: 72 20 31 20 6d 79 69 74 65 6d 6d 61 70 20 6d 79 r 1 myitemmap my
7df0: 69 74 65 6d 6d 61 70 20 73 65 6c 66 20 73 65 6c itemmap self sel
7e00: 66 0a 0a 09 66 6f 72 65 61 63 68 20 69 69 64 20 f...foreach iid
7e10: 24 74 68 65 69 74 65 6d 73 20 7b 0a 09 20 20 20 $theitems {..
7e20: 20 73 65 74 20 6b 65 79 20 5b 6c 69 73 74 20 24 set key [list $
7e30: 74 68 65 74 79 70 65 20 24 69 69 64 5d 0a 09 20 thetype $iid]..
7e40: 20 20 20 73 65 74 20 6d 79 69 74 65 6d 6d 61 70 set myitemmap
7e50: 28 24 6b 65 79 29 20 24 73 65 6c 66 0a 09 20 20 ($key) $self..
7e60: 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 log write 8 cs
7e70: 65 74 73 20 7b 4d 41 50 2b 20 69 74 65 6d 20 3c ets {MAP+ item <
7e80: 24 6b 65 79 3e 20 24 73 65 6c 66 20 3d 20 5b 24 $key> $self = [$
7e90: 73 65 6c 66 20 73 74 72 5d 7d 0a 09 7d 0a 09 72 self str]}..}..r
7ea0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
7eb0: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
7ec0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
7ed0: 23 23 23 23 23 23 23 23 0a 0a 20 20 20 20 74 79 ########.. ty
7ee0: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 63 68 61 pevariable mycha
7ef0: 6e 67 65 73 65 74 73 20 20 20 20 20 20 20 20 20 ngesets
7f00: 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 61 {} ; # List of a
7f10: 6c 6c 20 6b 6e 6f 77 6e 0a 09 09 09 09 09 20 20 ll known......
7f20: 20 23 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a # changesets...
7f30: 20 20 20 20 23 20 4c 69 73 74 20 6f 66 20 61 6c # List of al
7f40: 6c 20 6b 6e 6f 77 6e 20 63 68 61 6e 67 65 73 65 l known changese
7f50: 74 73 20 6f 66 20 61 20 74 79 70 65 2e 0a 20 20 ts of a type..
7f60: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d typevariable m
7f70: 79 74 63 68 61 6e 67 65 73 65 74 73 20 2d 61 72 ytchangesets -ar
7f80: 72 61 79 20 7b 0a 09 73 79 6d 3a 3a 62 72 61 6e ray {..sym::bran
7f90: 63 68 20 7b 7d 0a 09 73 79 6d 3a 3a 74 61 67 20 ch {}..sym::tag
7fa0: 20 20 20 7b 7d 0a 09 72 65 76 20 20 20 20 20 20 {}..rev
7fb0: 20 20 20 7b 7d 0a 20 20 20 20 7d 0a 09 09 09 09 {}. }.....
7fc0: 09 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 .. typevariab
7fd0: 6c 65 20 6d 79 69 74 65 6d 6d 61 70 20 20 20 20 le myitemmap
7fe0: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d -array {} ; # M
7ff0: 61 70 20 66 72 6f 6d 20 69 74 65 6d 73 20 28 74 ap from items (t
8000: 61 67 67 65 64 29 0a 09 09 09 09 09 20 20 20 23 agged)...... #
8010: 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20 to the list of
8020: 63 68 61 6e 67 65 73 65 74 73 0a 09 09 09 09 09 changesets......
8030: 20 20 20 23 20 63 6f 6e 74 61 69 6e 69 6e 67 20 # containing
8040: 69 74 2e 20 45 61 63 68 20 69 74 65 6d 0a 09 09 it. Each item...
8050: 09 09 09 20 20 20 23 20 63 61 6e 20 62 65 20 75 ... # can be u
8060: 73 65 64 20 62 79 20 6f 6e 6c 79 20 6f 6e 65 0a sed by only one.
8070: 09 09 09 09 09 20 20 20 23 20 63 68 61 6e 67 65 ..... # change
8080: 73 65 74 2e 0a 20 20 20 20 74 79 70 65 76 61 72 set.. typevar
8090: 69 61 62 6c 65 20 6d 79 69 64 6d 61 70 20 20 20 iable myidmap
80a0: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 -array {} ; # Ma
80b0: 70 20 66 72 6f 6d 20 63 68 61 6e 67 65 73 65 74 p from changeset
80c0: 20 69 64 20 74 6f 0a 09 09 09 09 20 20 20 20 20 id to.....
80d0: 20 20 23 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a # changeset...
80e0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 61 typemethod a
80f0: 6c 6c 20 20 20 20 7b 7d 20 20 20 20 7b 20 72 65 ll {} { re
8100: 74 75 72 6e 20 24 6d 79 63 68 61 6e 67 65 73 65 turn $mychangese
8110: 74 73 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 ts }. typemet
8120: 68 6f 64 20 6f 66 20 20 20 20 20 7b 63 69 64 7d hod of {cid}
8130: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 64 6d { return $myidm
8140: 61 70 28 24 63 69 64 29 20 7d 0a 20 20 20 20 74 ap($cid) }. t
8150: 79 70 65 6d 65 74 68 6f 64 20 6f 66 69 74 65 6d ypemethod ofitem
8160: 20 7b 69 69 64 7d 20 7b 20 72 65 74 75 72 6e 20 {iid} { return
8170: 24 6d 79 69 74 65 6d 6d 61 70 28 24 69 69 64 29 $myitemmap($iid)
8180: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 }.. typemeth
8190: 6f 64 20 72 65 76 20 20 20 20 7b 7d 20 20 20 20 od rev {}
81a0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 74 63 68 61 { return $mytcha
81b0: 6e 67 65 73 65 74 73 28 72 65 76 29 20 7d 0a 20 ngesets(rev) }.
81c0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 79 typemethod sy
81d0: 6d 20 20 20 20 7b 7d 20 20 20 20 7b 20 72 65 74 m {} { ret
81e0: 75 72 6e 20 5b 63 6f 6e 63 61 74 20 5c 0a 09 09 urn [concat \...
81f0: 09 09 09 20 20 24 7b 6d 79 74 63 68 61 6e 67 65 ... ${mytchange
8200: 73 65 74 73 28 73 79 6d 3a 3a 62 72 61 6e 63 68 sets(sym::branch
8210: 29 7d 20 5c 0a 09 09 09 09 09 20 20 24 7b 6d 79 )} \...... ${my
8220: 74 63 68 61 6e 67 65 73 65 74 73 28 73 79 6d 3a tchangesets(sym:
8230: 3a 74 61 67 29 7d 5d 20 7d 0a 0a 20 20 20 20 23 :tag)}] }.. #
8240: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
8250: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
8260: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f ######. ## Co
8270: 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 nfiguration..
8280: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 pragma -hastype
8290: 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 info no ; #
82a0: 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65 no type introspe
82b0: 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 ction. pragma
82c0: 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20 -hasinfo
82d0: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 no ; # no obje
82e0: 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e ct introspection
82f0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ###
8300: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
8310: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a #############.}.
8320: 0a 23 23 0a 23 23 20 4e 4f 54 45 3a 20 54 68 65 .##.## NOTE: The
8330: 20 73 75 63 63 65 73 73 6f 72 20 61 6e 64 20 70 successor and p
8340: 72 65 64 65 63 65 73 73 6f 72 20 6d 65 74 68 6f redecessor metho
8350: 64 73 20 64 65 66 69 6e 65 64 20 62 79 20 74 68 ds defined by th
8360: 65 20 63 6c 61 73 73 65 73 0a 23 23 20 20 20 20 e classes.##
8370: 20 20 20 62 65 6c 6f 77 20 61 72 65 20 2d 2d 20 below are --
8380: 62 6f 74 74 6c 65 20 6e 65 63 6b 73 20 2d 2d 2e bottle necks --.
8390: 20 4c 6f 6f 6b 20 66 6f 72 20 77 61 79 73 20 74 Look for ways t
83a0: 6f 20 6d 61 6b 65 20 74 68 65 20 53 51 4c 0a 23 o make the SQL.#
83b0: 23 20 20 20 20 20 20 20 66 61 73 74 65 72 2e 0a # faster..
83c0: 23 23 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 ##..# # ## ### #
83d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
83e0: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 ########### ####
83f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
8400: 23 0a 23 23 20 48 65 6c 70 65 72 20 73 69 6e 67 #.## Helper sing
8410: 6c 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e 64 73 20 leton. Commands
8420: 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 63 68 61 for revision cha
8430: 6e 67 65 73 65 74 73 2e 0a 0a 73 6e 69 74 3a 3a ngesets...snit::
8440: 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 type ::vc::fossi
8450: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
8460: 70 72 6f 6a 65 63 74 3a 3a 72 65 76 3a 3a 72 65 project::rev::re
8470: 76 20 7b 0a 20 20 20 20 74 79 70 65 6d 65 74 68 v {. typemeth
8480: 6f 64 20 62 79 72 65 76 69 73 69 6f 6e 20 7b 7d od byrevision {}
8490: 20 7b 20 72 65 74 75 72 6e 20 31 20 7d 0a 20 20 { return 1 }.
84a0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 79 73 typemethod bys
84b0: 79 6d 62 6f 6c 20 20 20 7b 7d 20 7b 20 72 65 74 ymbol {} { ret
84c0: 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 70 65 urn 0 }. type
84d0: 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 20 20 method istag
84e0: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 {} { return 0
84f0: 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 }. typemethod
8500: 20 69 73 62 72 61 6e 63 68 20 20 20 7b 7d 20 7b isbranch {} {
8510: 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a 20 20 20 return 0 }..
8520: 20 74 79 70 65 6d 65 74 68 6f 64 20 73 74 72 20 typemethod str
8530: 7b 72 65 76 69 73 69 6f 6e 7d 20 7b 0a 09 73 74 {revision} {..st
8540: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 ruct::list assig
8550: 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 n [state run {..
8560: 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 65 76 SELECT R.rev
8570: 2c 20 46 2e 6e 61 6d 65 2c 20 50 2e 6e 61 6d 65 , F.name, P.name
8580: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 .. FROM rev
8590: 69 73 69 6f 6e 20 52 2c 20 66 69 6c 65 20 46 2c ision R, file F,
85a0: 20 70 72 6f 6a 65 63 74 20 50 0a 09 20 20 20 20 project P..
85b0: 57 48 45 52 45 20 20 52 2e 72 69 64 20 3d 20 24 WHERE R.rid = $
85c0: 72 65 76 69 73 69 6f 6e 20 2d 2d 20 46 69 6e 64 revision -- Find
85d0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 specified file
85e0: 72 65 76 69 73 69 6f 6e 0a 09 20 20 20 20 41 4e revision.. AN
85f0: 44 20 20 20 20 46 2e 66 69 64 20 3d 20 52 2e 66 D F.fid = R.f
8600: 69 64 20 20 20 20 20 2d 2d 20 47 65 74 20 66 69 id -- Get fi
8610: 6c 65 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 le of the revisi
8620: 6f 6e 0a 09 20 20 20 20 41 4e 44 20 20 20 20 50 on.. AND P
8630: 2e 70 69 64 20 3d 20 46 2e 70 69 64 20 20 20 20 .pid = F.pid
8640: 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65 63 74 20 -- Get project
8650: 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a 09 7d 5d of the file...}]
8660: 20 72 65 76 6e 72 20 66 6e 61 6d 65 20 70 6e 61 revnr fname pna
8670: 6d 65 0a 09 72 65 74 75 72 6e 20 22 24 70 6e 61 me..return "$pna
8680: 6d 65 2f 24 7b 72 65 76 6e 72 7d 3a 3a 24 66 6e me/${revnr}::$fn
8690: 61 6d 65 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ame". }..
86a0: 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 73 74 20 # result = list
86b0: 28 6d 69 6e 74 69 6d 65 2c 20 6d 61 78 74 69 6d (mintime, maxtim
86c0: 65 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f e). typemetho
86d0: 64 20 74 69 6d 65 72 61 6e 67 65 20 7b 69 74 65 d timerange {ite
86e0: 6d 73 7d 20 7b 0a 09 73 65 74 20 74 68 65 73 65 ms} {..set these
86f0: 74 20 28 27 5b 6a 6f 69 6e 20 24 69 74 65 6d 73 t ('[join $items
8700: 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 {','}]')..retur
8710: 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 n [state run [su
8720: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
8730: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
8740: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 4d 49 4e .. SELECT MIN
8750: 28 52 2e 64 61 74 65 29 2c 20 4d 41 58 28 52 2e (R.date), MAX(R.
8760: 64 61 74 65 29 0a 09 20 20 20 20 46 52 4f 4d 20 date).. FROM
8770: 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 revision R..
8780: 57 48 45 52 45 20 52 2e 72 69 64 20 49 4e 20 24 WHERE R.rid IN $
8790: 74 68 65 73 65 74 20 2d 2d 20 52 65 73 74 72 69 theset -- Restri
87a0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 ct to revisions
87b0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 7d 5d 5d of interest..}]]
87c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 76 61 . }.. # va
87d0: 72 28 64 76 29 20 3d 20 64 69 63 74 20 28 72 65 r(dv) = dict (re
87e0: 76 69 73 69 6f 6e 20 2d 3e 20 6c 69 73 74 20 28 vision -> list (
87f0: 72 65 76 69 73 69 6f 6e 29 29 0a 20 20 20 20 74 revision)). t
8800: 79 70 65 6d 65 74 68 6f 64 20 69 6e 74 65 72 6e ypemethod intern
8810: 61 6c 73 75 63 63 65 73 73 6f 72 73 20 7b 64 76 alsuccessors {dv
8820: 20 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 revisions} {..u
8830: 70 76 61 72 20 31 20 24 64 76 20 64 65 70 65 6e pvar 1 $dv depen
8840: 64 65 6e 63 69 65 73 0a 09 73 65 74 20 74 68 65 dencies..set the
8850: 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 set ('[join $rev
8860: 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a isions {','}]').
8870: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 ..log write 14 c
8880: 73 65 74 73 20 69 6e 74 65 72 6e 61 6c 73 75 63 sets internalsuc
8890: 63 65 73 73 6f 72 73 0a 0a 09 23 20 53 65 65 20 cessors...# See
88a0: 27 73 75 63 63 65 73 73 6f 72 73 27 20 62 65 6c 'successors' bel
88b0: 6f 77 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 ow for the main
88c0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 0a 09 explanation of..
88d0: 23 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 61 # the various ca
88e0: 73 65 73 2e 20 54 68 69 73 20 70 69 65 63 65 20 ses. This piece
88f0: 69 73 20 73 70 65 63 69 61 6c 20 69 6e 20 74 68 is special in th
8900: 61 74 20 69 74 0a 09 23 20 72 65 73 74 72 69 63 at it..# restric
8910: 74 73 20 74 68 65 20 73 75 63 63 65 73 73 6f 72 ts the successor
8920: 73 20 77 65 20 6c 6f 6f 6b 20 66 6f 72 20 74 6f s we look for to
8930: 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66 the same set of
8940: 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 77 65 ..# revisions we
8950: 20 73 74 61 72 74 20 66 72 6f 6d 2e 20 53 65 6e start from. Sen
8960: 73 69 62 6c 65 20 61 73 20 77 65 20 61 72 65 20 sible as we are
8970: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 0a 09 23 20 63 looking for..# c
8980: 68 61 6e 67 65 73 65 74 20 69 6e 74 65 72 6e 61 hangeset interna
8990: 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 0a l dependencies..
89a0: 0a 09 61 72 72 61 79 20 73 65 74 20 64 65 70 20 ..array set dep
89b0: 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 {}...foreach {ri
89c0: 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 20 d child} [state
89d0: 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f run [subst -noco
89e0: 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c mmands -nobacksl
89f0: 61 73 68 65 73 20 7b 0a 20 20 20 20 2d 2d 20 28 ashes {. -- (
8a00: 31 29 20 50 72 69 6d 61 72 79 20 63 68 69 6c 64 1) Primary child
8a10: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
8a20: 69 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 20 20 id, R.child..
8a30: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
8a40: 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 R.. WHERE R
8a50: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 .rid IN $these
8a60: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
8a70: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
8a80: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
8a90: 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49 AND R.child I
8aa0: 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d S NOT NULL --
8ab0: 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69 Has primary chi
8ac0: 6c 64 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 ld.. AND R
8ad0: 2e 63 68 69 6c 64 20 49 4e 20 24 74 68 65 73 65 .child IN $these
8ae0: 74 20 20 20 20 20 2d 2d 20 57 68 69 63 68 20 69 t -- Which i
8af0: 73 20 61 6c 73 6f 20 6f 66 20 69 6e 74 65 72 65 s also of intere
8b00: 73 74 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 st. UNION.
8b10: 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 61 72 -- (2) Secondar
8b20: 79 20 28 62 72 61 6e 63 68 29 20 63 68 69 6c 64 y (branch) child
8b30: 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 ren.. SELECT
8b40: 52 2e 72 69 64 2c 20 42 2e 62 72 69 64 0a 09 20 R.rid, B.brid..
8b50: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
8b60: 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 62 72 on R, revisionbr
8b70: 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 42 0a 09 anchchildren B..
8b80: 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 WHERE R.rid
8b90: 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 IN $theset
8ba0: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
8bb0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e revisions of in
8bc0: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 terest.. AND
8bd0: 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 64 R.rid = B.rid
8be0: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c -- Sel
8bf0: 65 63 74 20 73 75 62 73 65 74 20 6f 66 20 62 72 ect subset of br
8c00: 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a 09 20 anch children..
8c10: 20 20 20 41 4e 44 20 20 20 20 42 2e 62 72 69 64 AND B.brid
8c20: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
8c30: 20 2d 2d 20 57 68 69 63 68 20 69 73 20 61 6c 73 -- Which is als
8c40: 6f 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 20 20 o of interest.
8c50: 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 UNION. -- (
8c60: 34 29 20 43 68 69 6c 64 20 6f 66 20 74 72 75 6e 4) Child of trun
8c70: 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 73 6f 72 k root successor
8c80: 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 20 6f 6e of last NTDB on
8c90: 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53 45 4c trunk... SEL
8ca0: 45 43 54 20 52 2e 72 69 64 2c 20 52 41 2e 63 68 ECT R.rid, RA.ch
8cb0: 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 72 65 ild.. FROM re
8cc0: 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 vision R, revisi
8cd0: 6f 6e 20 52 41 0a 09 20 20 20 20 57 48 45 52 45 on RA.. WHERE
8ce0: 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 R.rid IN $the
8cf0: 73 65 74 20 20 20 20 20 20 2d 2d 20 52 65 73 74 set -- Rest
8d00: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e rict to revision
8d10: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
8d20: 20 20 20 41 4e 44 20 20 20 52 2e 69 73 64 65 66 AND R.isdef
8d30: 61 75 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 ault
8d40: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
8d50: 4e 54 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 NTDB.. AND
8d60: 52 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 R.dbchild IS NOT
8d70: 20 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c NULL -- and l
8d80: 61 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 ast NTDB belongi
8d90: 6e 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 ng to trunk..
8da0: 20 41 4e 44 20 20 20 52 41 2e 72 69 64 20 3d 20 AND RA.rid =
8db0: 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d R.dbchild -
8dc0: 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f - Go directly to
8dd0: 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 trunk root..
8de0: 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20 AND RA.child
8df0: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d IS NOT NULL -
8e00: 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 - Has primary ch
8e10: 69 6c 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 ild..
8e20: 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20 AND RA.child
8e30: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
8e40: 2d 20 57 68 69 63 68 20 69 73 20 61 6c 73 6f 20 - Which is also
8e50: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 7d 5d 5d of interest..}]]
8e60: 20 7b 0a 09 20 20 20 20 23 20 43 6f 6e 73 69 64 {.. # Consid
8e70: 65 72 20 6d 6f 76 69 6e 67 20 74 68 69 73 20 74 er moving this t
8e80: 6f 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 o the integrity
8e90: 6d 6f 64 75 6c 65 2e 0a 09 20 20 20 20 69 6e 74 module... int
8ea0: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 egrity assert {$
8eb0: 72 69 64 20 21 3d 20 24 63 68 69 6c 64 7d 20 7b rid != $child} {
8ec0: 52 65 76 69 73 69 6f 6e 20 24 72 69 64 20 64 65 Revision $rid de
8ed0: 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66 2e pends on itself.
8ee0: 7d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 }.. lappend d
8ef0: 65 70 65 6e 64 65 6e 63 69 65 73 28 24 72 69 64 ependencies($rid
8f00: 29 20 24 63 68 69 6c 64 0a 09 20 20 20 20 73 65 ) $child.. se
8f10: 74 20 64 65 70 28 24 72 69 64 2c 24 63 68 69 6c t dep($rid,$chil
8f20: 64 29 20 2e 0a 09 7d 0a 0a 09 23 20 54 68 65 20 d) ...}...# The
8f30: 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 sql statements a
8f40: 62 6f 76 65 20 6c 6f 6f 6b 73 20 6f 6e 6c 79 20 bove looks only
8f50: 66 6f 72 20 64 69 72 65 63 74 20 64 65 70 65 6e for direct depen
8f60: 64 65 6e 63 69 65 73 0a 09 23 20 62 65 74 77 65 dencies..# betwe
8f70: 65 6e 20 72 65 76 69 73 69 6f 6e 20 69 6e 20 74 en revision in t
8f80: 68 65 20 63 68 61 6e 67 65 73 65 74 2e 20 48 6f he changeset. Ho
8f90: 77 65 76 65 72 20 64 75 65 20 74 6f 20 74 68 65 wever due to the
8fa0: 0a 09 23 20 76 61 67 61 72 69 65 73 20 6f 66 20 ..# vagaries of
8fb0: 6d 65 74 61 20 64 61 74 61 20 69 74 20 69 73 20 meta data it is
8fc0: 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 77 6f possible for two
8fd0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 0a 09 23 revisions of..#
8fe0: 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 20 74 the same file t
8ff0: 6f 20 65 6e 64 20 75 70 20 69 6e 20 74 68 65 20 o end up in the
9000: 73 61 6d 65 20 63 68 61 6e 67 65 73 65 74 2c 20 same changeset,
9010: 77 69 74 68 6f 75 74 20 61 0a 09 23 20 64 69 72 without a..# dir
9020: 65 63 74 20 64 65 70 65 6e 64 65 6e 63 79 20 62 ect dependency b
9030: 65 74 77 65 65 6e 20 74 68 65 6d 2e 20 48 6f 77 etween them. How
9040: 65 76 65 72 20 77 65 20 6b 6e 6f 77 20 74 68 61 ever we know tha
9050: 74 20 74 68 65 72 65 0a 09 23 20 68 61 73 20 74 t there..# has t
9060: 6f 20 62 65 20 61 20 61 6e 20 69 6e 64 69 72 65 o be a an indire
9070: 63 74 20 64 65 70 65 6e 64 65 6e 63 79 2c 20 62 ct dependency, b
9080: 65 20 69 74 20 74 68 72 6f 75 67 68 20 70 72 69 e it through pri
9090: 6d 61 72 79 0a 09 23 20 63 68 69 6c 64 72 65 6e mary..# children
90a0: 2c 20 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 , branch childre
90b0: 6e 2c 20 6f 72 20 61 20 63 6f 6d 62 69 6e 61 74 n, or a combinat
90c0: 69 6f 6e 20 74 68 65 72 65 6f 66 2e 0a 0a 09 23 ion thereof....#
90d0: 20 57 65 20 6e 6f 77 20 66 69 6c 6c 20 69 6e 20 We now fill in
90e0: 74 68 65 73 65 20 70 73 65 75 64 6f 2d 64 65 70 these pseudo-dep
90f0: 65 6e 64 65 6e 63 69 65 73 2c 20 69 66 20 6e 6f endencies, if no
9100: 20 73 75 63 68 0a 09 23 20 64 65 70 65 6e 64 65 such..# depende
9110: 6e 63 79 20 65 78 69 73 74 73 20 61 6c 72 65 61 ncy exists alrea
9120: 64 79 2e 20 54 68 65 20 64 69 72 65 63 74 69 6f dy. The directio
9130: 6e 20 6f 66 20 74 68 65 20 64 65 70 65 6e 64 65 n of the depende
9140: 6e 63 79 0a 09 23 20 69 73 20 61 63 74 75 61 6c ncy..# is actual
9150: 6c 79 20 69 72 72 65 6c 65 76 61 6e 74 20 66 6f ly irrelevant fo
9160: 72 20 74 68 69 73 2e 0a 0a 09 23 20 4e 4f 54 45 r this....# NOTE
9170: 3a 20 54 68 69 73 20 69 73 20 64 69 66 66 65 72 : This is differ
9180: 65 6e 74 20 66 72 6f 6d 20 63 76 73 32 73 76 6e ent from cvs2svn
9190: 2e 20 4f 75 72 20 73 70 69 72 69 74 75 61 6c 20 . Our spiritual
91a0: 61 6e 63 65 73 74 6f 72 0a 09 23 20 64 6f 65 73 ancestor..# does
91b0: 20 6e 6f 74 20 75 73 65 20 73 75 63 68 20 70 73 not use such ps
91c0: 65 75 64 6f 2d 64 65 70 65 6e 64 65 6e 63 69 65 eudo-dependencie
91d0: 73 2c 20 68 6f 77 65 76 65 72 20 69 74 20 75 73 s, however it us
91e0: 65 73 20 61 0a 09 23 20 43 4f 4d 4d 49 54 5f 54 es a..# COMMIT_T
91f0: 48 52 45 53 48 4f 4c 44 2c 20 61 20 74 69 6d 65 HRESHOLD, a time
9200: 20 69 6e 74 65 72 76 61 6c 20 63 6f 6d 6d 69 74 interval commit
9210: 73 20 73 68 6f 75 6c 64 20 66 61 6c 6c 2e 20 54 s should fall. T
9220: 68 69 73 0a 09 23 20 77 69 6c 6c 20 67 72 65 61 his..# will grea
9230: 74 6c 79 20 72 65 64 75 63 65 73 20 74 68 65 20 tly reduces the
9240: 72 69 73 6b 20 6f 66 20 67 65 74 74 69 6e 67 20 risk of getting
9250: 66 61 72 20 73 65 70 61 72 61 74 65 64 0a 09 23 far separated..#
9260: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 74 68 revisions of th
9270: 65 20 73 61 6d 65 20 66 69 6c 65 20 69 6e 74 6f e same file into
9280: 20 6f 6e 65 20 63 68 61 6e 67 65 73 65 74 2e 0a one changeset..
9290: 0a 09 23 20 57 65 20 61 6c 6c 6f 77 20 72 65 76 ..# We allow rev
92a0: 69 73 69 6f 6e 73 20 74 6f 20 62 65 20 66 61 72 isions to be far
92b0: 20 61 70 61 72 74 20 69 6e 20 74 69 6d 65 20 69 apart in time i
92c0: 6e 20 74 68 65 20 73 61 6d 65 0a 09 23 20 63 68 n the same..# ch
92d0: 61 6e 67 65 73 65 74 2c 20 62 75 74 20 69 6e 20 angeset, but in
92e0: 74 75 72 6e 20 6e 65 65 64 20 74 68 65 20 70 73 turn need the ps
92f0: 65 75 64 6f 2d 64 65 70 65 6e 64 65 6e 63 69 65 eudo-dependencie
9300: 73 20 74 6f 0a 09 23 20 68 61 6e 64 6c 65 20 74 s to..# handle t
9310: 68 69 73 2e 0a 0a 09 6c 6f 67 20 77 72 69 74 65 his....log write
9320: 20 31 34 20 63 73 65 74 73 20 7b 69 6e 74 65 72 14 csets {inter
9330: 6e 61 6c 20 20 5b 61 72 72 61 79 20 73 69 7a 65 nal [array size
9340: 20 64 65 70 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 dep]}..log writ
9350: 65 20 31 34 20 63 73 65 74 73 20 7b 63 6f 6c 6c e 14 csets {coll
9360: 65 63 74 65 64 20 5b 61 72 72 61 79 20 73 69 7a ected [array siz
9370: 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 7d e dependencies]}
9380: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 ..log write 14 c
9390: 73 65 74 73 20 70 73 65 75 64 6f 2d 69 6e 74 65 sets pseudo-inte
93a0: 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 0a 0a rnalsuccessors..
93b0: 09 61 72 72 61 79 20 73 65 74 20 66 69 64 73 20 .array set fids
93c0: 7b 7d 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 64 {}..foreach {rid
93d0: 20 66 69 64 7d 20 5b 73 74 61 74 65 20 72 75 6e fid} [state run
93e0: 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 [subst -nocomma
93f0: 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 nds -nobackslash
9400: 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 es {.. SELECT
9410: 20 52 2e 72 69 64 2c 20 52 2e 66 69 64 0a 20 20 R.rid, R.fid.
9420: 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d 20 20 FROM
9430: 20 72 65 76 69 73 69 6f 6e 20 52 0a 20 20 20 20 revision R.
9440: 20 20 20 20 20 20 20 20 57 48 45 52 45 20 20 52 WHERE R
9450: 2e 72 69 64 20 49 4e 20 24 74 68 65 73 65 74 0a .rid IN $theset.
9460: 09 7d 5d 5d 20 7b 20 6c 61 70 70 65 6e 64 20 66 .}]] { lappend f
9470: 69 64 73 28 24 66 69 64 29 20 24 72 69 64 20 7d ids($fid) $rid }
9480: 0a 0a 09 73 65 74 20 67 72 6f 75 70 73 20 7b 7d ...set groups {}
9490: 0a 09 66 6f 72 65 61 63 68 20 7b 66 69 64 20 72 ..foreach {fid r
94a0: 69 64 73 7d 20 5b 61 72 72 61 79 20 67 65 74 20 ids} [array get
94b0: 66 69 64 73 5d 20 7b 0a 09 20 20 20 20 69 66 20 fids] {.. if
94c0: 7b 5b 6c 6c 65 6e 67 74 68 20 24 72 69 64 73 5d {[llength $rids]
94d0: 20 3c 20 32 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 < 2} continue..
94e0: 20 20 20 20 66 6f 72 65 61 63 68 20 61 20 24 72 foreach a $r
94f0: 69 64 73 20 7b 0a 09 09 66 6f 72 65 61 63 68 20 ids {...foreach
9500: 62 20 24 72 69 64 73 20 7b 0a 09 09 20 20 20 20 b $rids {...
9510: 69 66 20 7b 24 61 20 3d 3d 20 24 62 7d 20 63 6f if {$a == $b} co
9520: 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 69 66 20 ntinue... if
9530: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 65 {[info exists de
9540: 70 28 24 61 2c 24 62 29 5d 7d 20 63 6f 6e 74 69 p($a,$b)]} conti
9550: 6e 75 65 0a 09 09 20 20 20 20 69 66 20 7b 5b 69 nue... if {[i
9560: 6e 66 6f 20 65 78 69 73 74 73 20 64 65 70 28 24 nfo exists dep($
9570: 62 2c 24 61 29 5d 7d 20 63 6f 6e 74 69 6e 75 65 b,$a)]} continue
9580: 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 ... lappend d
9590: 65 70 65 6e 64 65 6e 63 69 65 73 28 24 61 29 20 ependencies($a)
95a0: 24 62 0a 09 09 20 20 20 20 73 65 74 20 64 65 70 $b... set dep
95b0: 28 24 61 2c 24 62 29 20 2e 0a 09 09 20 20 20 20 ($a,$b) ....
95c0: 73 65 74 20 64 65 70 28 24 62 2c 24 61 29 20 2e set dep($b,$a) .
95d0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 ...}.. }..
95e0: 20 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 set n [llength
95f0: 24 72 69 64 73 5d 0a 09 20 20 20 20 6c 61 70 70 $rids].. lapp
9600: 65 6e 64 20 67 72 6f 75 70 73 20 5b 6c 69 73 74 end groups [list
9610: 20 24 6e 20 5b 65 78 70 72 20 7b 28 24 6e 2a 24 $n [expr {($n*$
9620: 6e 2d 24 6e 29 2f 32 7d 5d 5d 0a 09 7d 0a 0a 09 n-$n)/2}]]..}...
9630: 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 log write 14 cse
9640: 74 73 20 7b 70 73 65 75 64 6f 20 20 20 20 5b 61 ts {pseudo [a
9650: 72 72 61 79 20 73 69 7a 65 20 66 69 64 73 5d 20 rray size fids]
9660: 28 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 ([lsort -index 0
9670: 20 2d 64 65 63 72 65 61 73 69 6e 67 20 2d 69 6e -decreasing -in
9680: 74 65 67 65 72 20 24 67 72 6f 75 70 73 5d 29 7d teger $groups])}
9690: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 ..log write 14 c
96a0: 73 65 74 73 20 7b 69 6e 74 65 72 6e 61 6c 20 20 sets {internal
96b0: 5b 61 72 72 61 79 20 73 69 7a 65 20 64 65 70 5d [array size dep]
96c0: 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 }..log write 14
96d0: 63 73 65 74 73 20 7b 63 6f 6c 6c 65 63 74 65 64 csets {collected
96e0: 20 5b 61 72 72 61 79 20 73 69 7a 65 20 64 65 70 [array size dep
96f0: 65 6e 64 65 6e 63 69 65 73 5d 7d 0a 09 6c 6f 67 endencies]}..log
9700: 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 write 14 csets
9710: 63 6f 6d 70 6c 65 74 65 0a 09 72 65 74 75 72 6e complete..return
9720: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 . }.. # re
9730: 73 75 6c 74 20 3d 20 34 2d 6c 69 73 74 20 28 69 sult = 4-list (i
9740: 74 65 6d 74 79 70 65 20 69 74 65 6d 69 64 20 6e temtype itemid n
9750: 65 78 74 69 74 65 6d 74 79 70 65 20 6e 65 78 74 extitemtype next
9760: 69 74 65 6d 69 64 20 2e 2e 2e 29 0a 20 20 20 20 itemid ...).
9770: 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 6f 70 73 typemethod loops
9780: 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 {revisions} {..
9790: 23 20 4e 6f 74 65 3a 20 54 61 67 73 20 61 6e 64 # Note: Tags and
97a0: 20 62 72 61 6e 63 68 65 73 20 63 61 6e 6e 6f 74 branches cannot
97b0: 20 63 61 75 73 65 20 74 68 65 20 6c 6f 6f 70 2e cause the loop.
97c0: 20 54 68 65 69 72 20 69 64 27 73 2c 0a 09 23 20 Their id's,..#
97d0: 62 65 69 6e 67 20 6f 66 20 61 20 66 75 6e 64 61 being of a funda
97e0: 6d 65 6e 74 61 6c 6c 79 20 64 69 66 66 65 72 65 mentally differe
97f0: 6e 74 20 74 79 70 65 20 74 68 61 6e 20 74 68 65 nt type than the
9800: 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20 63 6f revisions..# co
9810: 6d 69 6e 67 20 69 6e 20 63 61 6e 6e 6f 74 20 62 ming in cannot b
9820: 65 20 69 6e 20 74 68 65 20 73 65 74 2e 0a 0a 09 e in the set....
9830: 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f set theset ('[jo
9840: 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 in $revisions {'
9850: 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b ,'}]')..return [
9860: 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 state run [subst
9870: 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f -nocommands -no
9880: 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 backslashes {..
9890: 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d 61 72 -- (1) Primar
98a0: 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 45 4c y child.. SEL
98b0: 45 43 54 20 52 2e 72 69 64 2c 20 52 2e 63 68 69 ECT R.rid, R.chi
98c0: 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 ld.. FROM r
98d0: 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 evision R.. W
98e0: 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 4e HERE R.rid IN
98f0: 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 $theset --
9900: 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 Restrict to revi
9910: 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 sions of interes
9920: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e t.. AND R.
9930: 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55 4c child IS NOT NUL
9940: 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69 6d L -- Has prim
9950: 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 41 ary child.. A
9960: 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49 4e ND R.child IN
9970: 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 $theset --
9980: 4c 6f 6f 70 0a 09 20 20 20 20 2d 2d 0a 09 20 20 Loop.. --..
9990: 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 2d 2d 20 UNION.. --
99a0: 28 32 29 20 53 65 63 6f 6e 64 61 72 79 20 28 62 (2) Secondary (b
99b0: 72 61 6e 63 68 29 20 63 68 69 6c 64 72 65 6e 0a ranch) children.
99c0: 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 . SELECT R.ri
99d0: 64 2c 20 42 2e 62 72 69 64 0a 09 20 20 20 20 46 d, B.brid.. F
99e0: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R
99f0: 2c 20 72 65 76 69 73 69 6f 6e 62 72 61 6e 63 68 , revisionbranch
9a00: 63 68 69 6c 64 72 65 6e 20 42 0a 09 20 20 20 20 children B..
9a10: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 WHERE R.rid I
9a20: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
9a30: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
9a40: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
9a50: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 st.. AND R
9a60: 2e 72 69 64 20 3d 20 42 2e 72 69 64 20 20 20 20 .rid = B.rid
9a70: 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 -- Select
9a80: 73 75 62 73 65 74 20 6f 66 20 62 72 61 6e 63 68 subset of branch
9a90: 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 41 children.. A
9aa0: 4e 44 20 20 20 20 42 2e 72 69 64 20 20 20 49 4e ND B.rid IN
9ab0: 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 $theset --
9ac0: 4c 6f 6f 70 0a 09 20 20 20 20 2d 2d 0a 09 20 20 Loop.. --..
9ad0: 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 2d 2d 20 UNION.. --
9ae0: 28 34 29 20 43 68 69 6c 64 20 6f 66 20 74 72 75 (4) Child of tru
9af0: 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 73 6f nk root successo
9b00: 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 20 6f r of last NTDB o
9b10: 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53 45 n trunk... SE
9b20: 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 41 2e 63 LECT R.rid, RA.c
9b30: 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 hild.. FROM
9b40: 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 revision R, rev
9b50: 69 73 69 6f 6e 20 52 41 0a 09 20 20 20 20 57 48 ision RA.. WH
9b60: 45 52 45 20 20 52 2e 72 69 64 20 20 20 20 49 4e ERE R.rid IN
9b70: 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 $theset --
9b80: 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 Restrict to revi
9b90: 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 sions of interes
9ba0: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e t.. AND R.
9bb0: 69 73 64 65 66 61 75 6c 74 20 20 20 20 20 20 20 isdefault
9bc0: 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 -- Restric
9bd0: 74 20 74 6f 20 4e 54 44 42 0a 09 20 20 20 20 41 t to NTDB.. A
9be0: 4e 44 20 20 20 20 52 2e 64 62 63 68 69 6c 64 20 ND R.dbchild
9bf0: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 2d 2d IS NOT NULL --
9c00: 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 20 62 and last NTDB b
9c10: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 75 6e elonging to trun
9c20: 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 41 k.. AND RA
9c30: 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 6c 64 .rid = R.dbchild
9c40: 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 72 65 -- Go dire
9c50: 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 72 6f ctly to trunk ro
9c60: 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 ot.. AND R
9c70: 41 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e A.child IS NOT N
9c80: 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 ULL -- Has pr
9c90: 69 6d 61 72 79 20 63 68 69 6c 64 2e 0a 09 20 20 imary child...
9ca0: 20 20 41 4e 44 20 20 20 20 52 41 2e 63 68 69 6c AND RA.chil
9cb0: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 d IN $theset
9cc0: 20 2d 2d 20 4c 6f 6f 70 0a 09 7d 5d 5d 0a 20 20 -- Loop..}]].
9cd0: 20 20 7d 0a 0a 20 20 20 20 23 20 76 61 72 28 64 }.. # var(d
9ce0: 76 29 20 3d 20 64 69 63 74 20 28 69 74 65 6d 20 v) = dict (item
9cf0: 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 29 2c -> list (item)),
9d00: 20 69 74 65 6d 20 20 3d 20 6c 69 73 74 20 28 74 item = list (t
9d10: 79 70 65 20 69 64 29 0a 20 20 20 20 74 79 70 65 ype id). type
9d20: 6d 65 74 68 6f 64 20 73 75 63 63 65 73 73 6f 72 method successor
9d30: 73 20 7b 64 76 20 72 65 76 69 73 69 6f 6e 73 7d s {dv revisions}
9d40: 20 7b 0a 09 75 70 76 61 72 20 31 20 24 64 76 20 {..upvar 1 $dv
9d50: 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 73 65 dependencies..se
9d60: 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e t theset ('[join
9d70: 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 $revisions {','
9d80: 7d 5d 27 29 0a 0a 09 23 20 54 68 65 20 66 6f 6c }]')...# The fol
9d90: 6c 6f 77 69 6e 67 20 63 61 73 65 73 20 73 70 65 lowing cases spe
9da0: 63 69 66 79 20 77 68 65 6e 20 61 20 72 65 76 69 cify when a revi
9db0: 73 69 6f 6e 20 53 20 69 73 20 61 20 73 75 63 63 sion S is a succ
9dc0: 65 73 73 6f 72 0a 09 23 20 6f 66 20 61 20 72 65 essor..# of a re
9dd0: 76 69 73 69 6f 6e 20 52 2e 20 45 61 63 68 20 6f vision R. Each o
9de0: 66 20 74 68 65 20 63 61 73 65 73 20 74 72 61 6e f the cases tran
9df0: 73 6c 61 74 65 73 20 69 6e 74 6f 20 6f 6e 65 20 slates into one
9e00: 6f 66 0a 09 23 20 74 68 65 20 62 72 61 6e 63 68 of..# the branch
9e10: 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20 55 4e es of the SQL UN
9e20: 49 4f 4e 20 63 6f 6d 69 6e 67 20 62 65 6c 6f 77 ION coming below
9e30: 2e 0a 09 23 0a 09 23 20 28 31 29 20 53 20 63 61 ...#..# (1) S ca
9e40: 6e 20 62 65 20 61 20 70 72 69 6d 61 72 79 20 63 n be a primary c
9e50: 68 69 6c 64 20 6f 66 20 52 2c 20 69 2e 65 2e 20 hild of R, i.e.
9e60: 69 6e 20 74 68 65 20 73 61 6d 65 20 4c 4f 44 2e in the same LOD.
9e70: 20 52 0a 09 23 20 20 20 20 20 72 65 66 65 72 65 R..# refere
9e80: 6e 63 65 73 20 53 20 64 69 72 65 63 74 6c 79 2e nces S directly.
9e90: 20 52 2e 63 68 69 6c 64 20 3d 20 53 28 2e 72 69 R.child = S(.ri
9ea0: 64 29 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 d), if it exists
9eb0: 2e 0a 09 23 0a 09 23 20 28 32 29 20 53 20 63 61 ...#..# (2) S ca
9ec0: 6e 20 62 65 20 61 20 73 65 63 6f 6e 64 61 72 79 n be a secondary
9ed0: 2c 20 69 2e 65 2e 20 62 72 61 6e 63 68 2c 20 63 , i.e. branch, c
9ee0: 68 69 6c 64 20 6f 66 20 52 2e 20 48 65 72 65 20 hild of R. Here
9ef0: 74 68 65 0a 09 23 20 20 20 20 20 6c 69 6e 6b 20 the..# link
9f00: 69 73 20 6d 61 64 65 20 74 68 72 6f 75 67 68 20 is made through
9f10: 74 68 65 20 68 65 6c 70 65 72 20 74 61 62 6c 65 the helper table
9f20: 0a 09 23 20 20 20 20 20 52 45 56 49 53 49 4f 4e ..# REVISION
9f30: 42 52 41 4e 43 48 43 48 49 4c 44 52 45 4e 2e 20 BRANCHCHILDREN.
9f40: 52 2e 72 69 64 20 2d 3e 20 52 42 43 2e 72 69 64 R.rid -> RBC.rid
9f50: 2c 20 52 42 43 2e 62 72 69 64 20 3d 0a 09 23 20 , RBC.brid =..#
9f60: 20 20 20 20 53 28 2e 72 69 64 29 0a 09 23 0a 09 S(.rid)..#..
9f70: 23 20 28 33 29 20 4f 72 69 67 69 6e 61 6c 6c 79 # (3) Originally
9f80: 20 74 68 69 73 20 75 73 65 20 63 61 73 65 20 64 this use case d
9f90: 65 66 69 6e 65 64 20 74 68 65 20 72 6f 6f 74 20 efined the root
9fa0: 6f 66 20 61 20 64 65 74 61 63 68 65 64 0a 09 23 of a detached..#
9fb0: 20 20 20 20 20 4e 54 44 42 20 61 73 20 74 68 65 NTDB as the
9fc0: 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 74 68 successor of th
9fd0: 65 20 74 72 75 6e 6b 20 72 6f 6f 74 2e 20 54 68 e trunk root. Th
9fe0: 69 73 20 6c 65 61 64 73 20 74 6f 20 61 0a 09 23 is leads to a..#
9ff0: 20 20 20 20 20 62 61 64 20 74 61 6e 67 6c 65 20 bad tangle
a000: 6c 61 74 65 72 20 6f 6e 2e 20 57 69 74 68 20 61 later on. With a
a010: 20 64 65 74 61 63 68 65 64 20 4e 54 44 42 20 74 detached NTDB t
a020: 68 65 20 6f 72 69 67 69 6e 61 6c 0a 09 23 20 20 he original..#
a030: 20 20 20 74 72 75 6e 6b 20 72 6f 6f 74 20 72 65 trunk root re
a040: 76 69 73 69 6f 6e 20 77 61 73 20 72 65 6d 6f 76 vision was remov
a050: 65 64 20 61 73 20 69 72 72 65 6c 65 76 61 6e 74 ed as irrelevant
a060: 2c 20 61 6c 6c 6f 77 69 6e 67 0a 09 23 20 20 20 , allowing..#
a070: 20 20 74 68 65 20 6e 6f 6d 69 6e 61 6c 20 72 6f the nominal ro
a080: 6f 74 20 74 6f 20 62 65 20 6c 61 74 65 72 20 69 ot to be later i
a090: 6e 20 74 69 6d 65 20 74 68 61 6e 20 74 68 65 20 n time than the
a0a0: 4e 54 44 42 0a 09 23 20 20 20 20 20 72 6f 6f 74 NTDB..# root
a0b0: 2e 20 4e 6f 77 20 73 65 74 74 69 6e 67 20 74 68 . Now setting th
a0c0: 69 73 20 64 65 70 65 6e 64 65 6e 63 79 20 77 69 is dependency wi
a0d0: 6c 6c 20 62 65 20 62 61 63 6b 77 61 72 64 20 69 ll be backward i
a0e0: 6e 0a 09 23 20 20 20 20 20 74 69 6d 65 2e 20 52 n..# time. R
a0f0: 45 4d 4f 56 45 44 2e 0a 09 23 0a 09 23 20 28 34 EMOVED...#..# (4
a100: 29 20 49 66 20 52 20 69 73 20 74 68 65 20 6c 61 ) If R is the la
a110: 73 74 20 6f 66 20 74 68 65 20 4e 54 44 42 20 72 st of the NTDB r
a120: 65 76 69 73 69 6f 6e 73 20 77 68 69 63 68 20 62 evisions which b
a130: 65 6c 6f 6e 67 20 74 6f 0a 09 23 20 20 20 20 20 elong to..#
a140: 74 68 65 20 74 72 75 6e 6b 2c 20 74 68 65 6e 20 the trunk, then
a150: 74 68 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c the primary chil
a160: 64 20 6f 66 20 74 68 65 20 74 72 75 6e 6b 20 72 d of the trunk r
a170: 6f 6f 74 20 28 74 68 65 0a 09 23 20 20 20 20 20 oot (the..#
a180: 27 31 2e 32 27 20 72 65 76 69 73 69 6f 6e 29 20 '1.2' revision)
a190: 69 73 20 61 20 73 75 63 63 65 73 73 6f 72 2c 20 is a successor,
a1a0: 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a 0a 09 if it exists....
a1b0: 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 # Note that the
a1c0: 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 branches spawned
a1d0: 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69 from the revisi
a1e0: 6f 6e 73 2c 20 61 6e 64 20 74 68 65 0a 09 23 20 ons, and the..#
a1f0: 74 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 tags associated
a200: 77 69 74 68 20 74 68 65 6d 20 61 72 65 20 73 75 with them are su
a210: 63 63 65 73 73 6f 72 73 20 61 73 20 77 65 6c 6c ccessors as well
a220: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 64 ....foreach {rid
a230: 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 20 72 child} [state r
a240: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
a250: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
a260: 73 68 65 73 20 7b 0a 20 20 20 20 2d 2d 20 28 31 shes {. -- (1
a270: 29 20 50 72 69 6d 61 72 79 20 63 68 69 6c 64 0a ) Primary child.
a280: 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 . SELECT R.ri
a290: 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 20 20 20 d, R.child..
a2a0: 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 FROM revision
a2b0: 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e R.. WHERE R.
a2c0: 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 rid IN $theset
a2d0: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
a2e0: 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 to revisions of
a2f0: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
a300: 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49 53 ND R.child IS
a310: 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d 20 NOT NULL --
a320: 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69 6c Has primary chil
a330: 64 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 d. UNION.
a340: 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 61 72 79 -- (2) Secondary
a350: 20 28 62 72 61 6e 63 68 29 20 63 68 69 6c 64 72 (branch) childr
a360: 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 en.. SELECT R
a370: 2e 72 69 64 2c 20 42 2e 62 72 69 64 0a 09 20 20 .rid, B.brid..
a380: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
a390: 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 62 72 61 n R, revisionbra
a3a0: 6e 63 68 63 68 69 6c 64 72 65 6e 20 42 0a 09 20 nchchildren B..
a3b0: 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 WHERE R.rid
a3c0: 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 IN $theset
a3d0: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
a3e0: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
a3f0: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
a400: 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 64 20 R.rid = B.rid
a410: 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 -- Sele
a420: 63 74 20 73 75 62 73 65 74 20 6f 66 20 62 72 61 ct subset of bra
a430: 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a 20 20 20 nch children.
a440: 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 34 UNION. -- (4
a450: 29 20 43 68 69 6c 64 20 6f 66 20 74 72 75 6e 6b ) Child of trunk
a460: 20 72 6f 6f 74 20 73 75 63 63 65 73 73 6f 72 20 root successor
a470: 6f 66 20 6c 61 73 74 20 4e 54 44 42 20 6f 6e 20 of last NTDB on
a480: 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53 45 4c 45 trunk... SELE
a490: 43 54 20 52 2e 72 69 64 2c 20 52 41 2e 63 68 69 CT R.rid, RA.chi
a4a0: 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 72 65 76 ld.. FROM rev
a4b0: 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f ision R, revisio
a4c0: 6e 20 52 41 0a 09 20 20 20 20 57 48 45 52 45 20 n RA.. WHERE
a4d0: 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 R.rid IN $thes
a4e0: 65 74 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 et -- Restr
a4f0: 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 ict to revisions
a500: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
a510: 20 20 41 4e 44 20 20 20 52 2e 69 73 64 65 66 61 AND R.isdefa
a520: 75 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 20 ult
a530: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 4e -- Restrict to N
a540: 54 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 52 TDB.. AND R
a550: 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 .dbchild IS NOT
a560: 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c 61 NULL -- and la
a570: 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 6e st NTDB belongin
a580: 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 20 g to trunk..
a590: 41 4e 44 20 20 20 52 41 2e 72 69 64 20 3d 20 52 AND RA.rid = R
a5a0: 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d 2d .dbchild --
a5b0: 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f 20 Go directly to
a5c0: 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 20 trunk root..
a5d0: 41 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20 49 AND RA.child I
a5e0: 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d S NOT NULL --
a5f0: 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69 Has primary chi
a600: 6c 64 2e 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 ld...}]] {..
a610: 23 20 43 6f 6e 73 69 64 65 72 20 6d 6f 76 69 6e # Consider movin
a620: 67 20 74 68 69 73 20 74 6f 20 74 68 65 20 69 6e g this to the in
a630: 74 65 67 72 69 74 79 20 6d 6f 64 75 6c 65 2e 0a tegrity module..
a640: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 . integrity a
a650: 73 73 65 72 74 20 7b 24 72 69 64 20 21 3d 20 24 ssert {$rid != $
a660: 63 68 69 6c 64 7d 20 7b 52 65 76 69 73 69 6f 6e child} {Revision
a670: 20 24 72 69 64 20 64 65 70 65 6e 64 73 20 6f 6e $rid depends on
a680: 20 69 74 73 65 6c 66 2e 7d 0a 09 20 20 20 20 6c itself.}.. l
a690: 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 append dependenc
a6a0: 69 65 73 28 5b 6c 69 73 74 20 72 65 76 20 24 72 ies([list rev $r
a6b0: 69 64 5d 29 20 5b 6c 69 73 74 20 72 65 76 20 24 id]) [list rev $
a6c0: 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 6f 72 65 61 child]..}..forea
a6d0: 63 68 20 7b 72 69 64 20 63 68 69 6c 64 7d 20 5b ch {rid child} [
a6e0: 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 state run [subst
a6f0: 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f -nocommands -no
a700: 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 backslashes {..
a710: 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c SELECT R.rid,
a720: 20 54 2e 74 69 64 0a 09 20 20 20 20 46 52 4f 4d T.tid.. FROM
a730: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 74 revision R, t
a740: 61 67 20 54 0a 09 20 20 20 20 57 48 45 52 45 20 ag T.. WHERE
a750: 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 73 65 R.rid IN $these
a760: 74 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 t -- Restr
a770: 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 ict to revisions
a780: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
a790: 20 20 41 4e 44 20 20 20 20 54 2e 72 65 76 20 3d AND T.rev =
a7a0: 20 52 2e 72 69 64 20 20 20 20 20 20 20 20 20 20 R.rid
a7b0: 2d 2d 20 53 65 6c 65 63 74 20 74 61 67 73 20 61 -- Select tags a
a7c0: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d 0a ttached to them.
a7d0: 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 .}]] {.. lapp
a7e0: 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73 end dependencies
a7f0: 28 5b 6c 69 73 74 20 72 65 76 20 24 72 69 64 5d ([list rev $rid]
a800: 29 20 5b 6c 69 73 74 20 73 79 6d 3a 3a 74 61 67 ) [list sym::tag
a810: 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 6f 72 $child]..}..for
a820: 65 61 63 68 20 7b 72 69 64 20 63 68 69 6c 64 7d each {rid child}
a830: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
a840: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
a850: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
a860: 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 . SELECT R.ri
a870: 64 2c 20 42 2e 62 69 64 0a 09 20 20 20 20 46 52 d, B.bid.. FR
a880: 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c OM revision R,
a890: 20 62 72 61 6e 63 68 20 42 0a 09 20 20 20 20 57 branch B.. W
a8a0: 48 45 52 45 20 20 52 2e 72 69 64 20 49 4e 20 24 HERE R.rid IN $
a8b0: 74 68 65 73 65 74 20 20 20 20 20 20 20 2d 2d 20 theset --
a8c0: 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 Restrict to revi
a8d0: 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 sions of interes
a8e0: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e t.. AND B.
a8f0: 72 6f 6f 74 20 3d 20 52 2e 72 69 64 20 20 20 20 root = R.rid
a900: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 62 -- Select b
a910: 72 61 6e 63 68 65 73 20 61 74 74 61 63 68 65 64 ranches attached
a920: 20 74 6f 20 74 68 65 6d 0a 09 7d 5d 5d 20 7b 0a to them..}]] {.
a930: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 70 . lappend dep
a940: 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 endencies([list
a950: 72 65 76 20 24 72 69 64 5d 29 20 5b 6c 69 73 74 rev $rid]) [list
a960: 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20 24 63 68 sym::branch $ch
a970: 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a ild]..}..return.
a980: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 }.. # res
a990: 75 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e ult = list (chan
a9a0: 67 65 73 65 74 2d 69 64 29 0a 20 20 20 20 74 79 geset-id). ty
a9b0: 70 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 63 pemethod cs_succ
a9c0: 65 73 73 6f 72 73 20 7b 72 65 76 69 73 69 6f 6e essors {revision
a9d0: 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 23 20 54 s} {. # T
a9e0: 68 69 73 20 69 73 20 61 20 76 61 72 69 61 6e 74 his is a variant
a9f0: 20 6f 66 20 27 73 75 63 63 65 73 73 6f 72 73 27 of 'successors'
aa00: 20 77 68 69 63 68 20 6d 61 70 73 20 74 68 65 20 which maps the
aa10: 6c 6f 77 2d 6c 65 76 65 6c 0a 20 20 20 20 20 20 low-level.
aa20: 20 20 23 20 64 61 74 61 20 64 69 72 65 63 74 6c # data directl
aa30: 79 20 74 6f 20 74 68 65 20 61 73 73 6f 63 69 61 y to the associa
aa40: 74 65 64 20 63 68 61 6e 67 65 73 65 74 73 2e 20 ted changesets.
aa50: 49 2e 65 2e 20 69 6e 73 74 65 61 64 0a 20 20 20 I.e. instead.
aa60: 20 20 20 20 20 23 20 6d 69 6c 6c 69 6f 6e 73 20 # millions
aa70: 6f 66 20 64 65 70 65 6e 64 65 6e 63 79 20 70 61 of dependency pa
aa80: 69 72 73 20 28 69 6e 20 65 78 74 72 65 6d 65 20 irs (in extreme
aa90: 63 61 73 65 73 20 28 45 78 61 6d 70 6c 65 3a 20 cases (Example:
aaa0: 54 63 6c 0a 20 20 20 20 20 20 20 20 23 20 43 56 Tcl. # CV
aab0: 53 29 29 20 77 65 20 72 65 74 75 72 6e 20 61 20 S)) we return a
aac0: 76 65 72 79 20 73 68 6f 72 74 20 61 6e 64 20 6d very short and m
aad0: 75 63 68 20 6d 6f 72 65 20 6d 61 6e 61 67 65 61 uch more managea
aae0: 62 6c 65 20 6c 69 73 74 0a 20 20 20 20 20 20 20 ble list.
aaf0: 20 23 20 6f 66 20 63 68 61 6e 67 65 73 65 74 73 # of changesets
ab00: 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 ....set theset (
ab10: 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e '[join $revision
ab20: 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 s {','}]')..retu
ab30: 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 rn [state run [s
ab40: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
ab50: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
ab60: 7b 0a 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 {. -- (1) Pri
ab70: 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 mary child..
ab80: 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 SELECT C.cid..
ab90: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
aba0: 6e 20 52 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 n R, csitem CI,
abb0: 63 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 changeset C..
abc0: 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 WHERE R.rid
abd0: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
abe0: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 - Restrict to re
abf0: 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 visions of inter
ac00: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
ac10: 52 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e R.child IS NOT N
ac20: 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 ULL -- Has pr
ac30: 69 6d 61 72 79 20 63 68 69 6c 64 0a 20 20 20 20 imary child.
ac40: 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 AND C
ac50: 49 2e 69 69 64 20 3d 20 52 2e 63 68 69 6c 64 20 I.iid = R.child
ac60: 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 -- Select
ac70: 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 all changesets.
ac80: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
ac90: 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 C.cid = CI.cid
aca0: 20 20 20 20 20 20 20 20 20 2d 2d 20 63 6f 6e 74 -- cont
acb0: 61 69 6e 69 6e 67 20 74 68 65 20 70 72 69 6d 61 aining the prima
acc0: 72 79 20 63 68 69 6c 64 0a 20 20 20 20 20 20 20 ry child.
acd0: 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 AND C.ty
ace0: 70 65 20 3d 20 30 20 20 20 20 20 20 20 20 20 20 pe = 0
acf0: 20 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 20 -- which are
ad00: 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 revision changes
ad10: 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 ets. UNION.
ad20: 20 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 61 -- (2) Seconda
ad30: 72 79 20 28 62 72 61 6e 63 68 29 20 63 68 69 6c ry (branch) chil
ad40: 64 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 54 dren.. SELECT
ad50: 20 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d C.cid.. FROM
ad60: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 revision R, r
ad70: 65 76 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 evisionbranchchi
ad80: 6c 64 72 65 6e 20 42 2c 20 63 73 69 74 65 6d 20 ldren B, csitem
ad90: 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 0a CI, changeset C.
ada0: 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 . WHERE R.ri
adb0: 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 d IN $theset
adc0: 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 -- Restrict t
add0: 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 o revisions of i
ade0: 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 nterest.. AND
adf0: 20 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 R.rid = B.ri
ae00: 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 d -- Se
ae10: 6c 65 63 74 20 73 75 62 73 65 74 20 6f 66 20 62 lect subset of b
ae20: 72 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a 20 ranch children.
ae30: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
ae40: 20 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 72 69 CI.iid = B.bri
ae50: 64 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 d -- Sele
ae60: 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 ct all changeset
ae70: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e s. AN
ae80: 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e D C.cid = CI.
ae90: 63 69 64 09 20 20 2d 2d 20 63 6f 6e 74 61 69 6e cid. -- contain
aea0: 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 0a 20 ing the branch.
aeb0: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
aec0: 20 20 43 2e 74 79 70 65 20 3d 20 30 09 09 20 20 C.type = 0..
aed0: 2d 2d 20 77 68 69 63 68 20 61 72 65 20 72 65 76 -- which are rev
aee0: 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 ision changesets
aef0: 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d . UNION. -
af00: 2d 20 28 34 29 20 43 68 69 6c 64 20 6f 66 20 74 - (4) Child of t
af10: 72 75 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 runk root succes
af20: 73 6f 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 sor of last NTDB
af30: 20 6f 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 on trunk...
af40: 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 SELECT C.cid..
af50: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
af60: 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 20 52 41 n R, revision RA
af70: 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 , csitem CI, cha
af80: 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 ngeset C.. WH
af90: 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 4e 20 ERE R.rid IN
afa0: 24 74 68 65 73 65 74 20 20 20 20 20 20 2d 2d 20 $theset --
afb0: 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 Restrict to revi
afc0: 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 sions of interes
afd0: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e t.. AND R.
afe0: 69 73 64 65 66 61 75 6c 74 20 20 20 20 20 20 20 isdefault
aff0: 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 -- Restric
b000: 74 20 74 6f 20 4e 54 44 42 0a 09 20 20 20 20 41 t to NTDB.. A
b010: 4e 44 20 20 20 20 52 2e 64 62 63 68 69 6c 64 20 ND R.dbchild
b020: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 2d 2d IS NOT NULL --
b030: 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 20 62 and last NTDB b
b040: 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 75 6e elonging to trun
b050: 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 41 k.. AND RA
b060: 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 6c 64 .rid = R.dbchild
b070: 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 72 65 -- Go dire
b080: 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 72 6f ctly to trunk ro
b090: 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 ot.. AND R
b0a0: 41 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e A.child IS NOT N
b0b0: 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 ULL -- Has pr
b0c0: 69 6d 61 72 79 20 63 68 69 6c 64 2e 0a 20 20 20 imary child..
b0d0: 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 AND
b0e0: 43 49 2e 69 69 64 20 3d 20 52 41 2e 63 68 69 6c CI.iid = RA.chil
b0f0: 64 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 d -- Selec
b100: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 t all changesets
b110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
b120: 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 C.cid = CI.c
b130: 69 64 09 20 20 20 2d 2d 20 63 6f 6e 74 61 69 6e id. -- contain
b140: 69 6e 67 20 74 68 65 20 70 72 69 6d 61 72 79 20 ing the primary
b150: 63 68 69 6c 64 0a 20 20 20 20 20 20 20 20 20 20 child.
b160: 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 AND C.type
b170: 3d 20 30 09 09 20 20 20 2d 2d 20 77 68 69 63 68 = 0.. -- which
b180: 20 61 72 65 20 72 65 76 69 73 69 6f 6e 20 63 68 are revision ch
b190: 61 6e 67 65 73 65 74 73 0a 20 20 20 20 55 4e 49 angesets. UNI
b1a0: 4f 4e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 ON.. SELECT C
b1b0: 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 .cid.. FROM
b1c0: 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 74 61 67 revision R, tag
b1d0: 20 54 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 T, csitem CI, c
b1e0: 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 hangeset C..
b1f0: 57 48 45 52 45 20 20 52 2e 72 69 64 20 69 6e 20 WHERE R.rid in
b200: 24 74 68 65 73 65 74 20 20 20 20 20 20 20 20 2d $theset -
b210: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 - Restrict to re
b220: 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 visions of inter
b230: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
b240: 54 2e 72 65 76 20 3d 20 52 2e 72 69 64 09 20 20 T.rev = R.rid.
b250: 20 2d 2d 20 53 65 6c 65 63 74 20 74 61 67 73 20 -- Select tags
b260: 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d attached to them
b270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
b280: 20 20 20 20 43 49 2e 69 69 64 20 3d 20 54 2e 74 CI.iid = T.t
b290: 69 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 id -- S
b2a0: 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 elect all change
b2b0: 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 sets.
b2c0: 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 AND C.cid =
b2d0: 43 49 2e 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e CI.cid. -- con
b2e0: 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 67 73 taining the tags
b2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
b300: 20 20 20 20 43 2e 74 79 70 65 20 3d 20 31 09 09 C.type = 1..
b310: 20 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 20 -- which are
b320: 74 61 67 20 63 68 61 6e 67 65 73 65 74 73 0a 20 tag changesets.
b330: 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 45 UNION.. SE
b340: 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 LECT C.cid..
b350: 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 FROM revision
b360: 52 2c 20 62 72 61 6e 63 68 20 42 2c 20 63 73 69 R, branch B, csi
b370: 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 tem CI, changese
b380: 74 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 t C.. WHERE
b390: 52 2e 72 69 64 20 69 6e 20 24 74 68 65 73 65 74 R.rid in $theset
b3a0: 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 -- Restr
b3b0: 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 ict to revisions
b3c0: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
b3d0: 20 20 41 4e 44 20 20 20 20 42 2e 72 6f 6f 74 20 AND B.root
b3e0: 3d 20 52 2e 72 69 64 09 20 20 20 2d 2d 20 53 65 = R.rid. -- Se
b3f0: 6c 65 63 74 20 62 72 61 6e 63 68 65 73 20 61 74 lect branches at
b400: 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d 0a 20 tached to them.
b410: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
b420: 20 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 69 64 CI.iid = B.bid
b430: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c -- Sel
b440: 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 ect all changese
b450: 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 ts. A
b460: 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 ND C.cid = CI
b470: 2e 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e 74 61 .cid. -- conta
b480: 69 6e 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 ining the branch
b490: 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 es. A
b4a0: 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 32 ND C.type = 2
b4b0: 09 09 20 20 20 2d 2d 20 77 68 69 63 68 20 61 72 .. -- which ar
b4c0: 65 20 62 72 61 6e 63 68 20 63 68 61 6e 67 65 73 e branch changes
b4d0: 65 74 73 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a ets..}]]. }..
b4e0: 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 73 # result = s
b4f0: 79 6d 62 6f 6c 20 6e 61 6d 65 0a 20 20 20 20 74 ymbol name. t
b500: 79 70 65 6d 65 74 68 6f 64 20 63 73 5f 6c 6f 64 ypemethod cs_lod
b510: 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 {revisions} {..
b520: 23 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65 # Determines the
b530: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 79 6d name of the sym
b540: 62 6f 6c 20 77 68 69 63 68 20 69 73 20 74 68 65 bol which is the
b550: 20 6c 69 6e 65 20 6f 66 0a 09 23 20 64 65 76 65 line of..# deve
b560: 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 lopment for the
b570: 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 61 20 63 revisions in a c
b580: 68 61 6e 67 65 73 65 74 2e 0a 0a 09 73 65 74 20 hangeset....set
b590: 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 theset ('[join $
b5a0: 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d revisions {','}]
b5b0: 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 61 74 ')..return [stat
b5c0: 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f e run [subst -no
b5d0: 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b commands -noback
b5e0: 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 slashes {.. S
b5f0: 45 4c 45 43 54 0a 09 20 20 20 20 44 49 53 54 49 ELECT.. DISTI
b600: 4e 43 54 20 4c 2e 6e 61 6d 65 0a 09 20 20 20 20 NCT L.name..
b610: 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 FROM revision
b620: 52 2c 20 73 79 6d 62 6f 6c 20 4c 0a 09 20 20 20 R, symbol L..
b630: 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 69 6e WHERE R.rid in
b640: 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 20 $theset
b650: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 -- Restrict to r
b660: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 evisions of inte
b670: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
b680: 20 4c 2e 73 69 64 20 3d 20 52 2e 6c 6f 64 20 20 L.sid = R.lod
b690: 20 20 20 20 20 20 20 20 20 2d 2d 20 47 65 74 20 -- Get
b6a0: 6c 6f 64 20 73 79 6d 62 6f 6c 20 6f 66 20 72 65 lod symbol of re
b6b0: 76 69 73 69 6f 6e 0a 09 7d 5d 5d 0a 20 20 20 20 vision..}]].
b6c0: 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 }.}..# # ## ###
b6d0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
b6e0: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 ############ ###
b6f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b700: 23 23 0a 23 23 20 48 65 6c 70 65 72 20 73 69 6e ##.## Helper sin
b710: 67 6c 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e 64 73 gleton. Commands
b720: 20 66 6f 72 20 74 61 67 20 73 79 6d 62 6f 6c 20 for tag symbol
b730: 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a 73 6e 69 changesets...sni
b740: 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f t::type ::vc::fo
b750: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
b760: 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 3a s::project::rev:
b770: 3a 73 79 6d 3a 3a 74 61 67 20 7b 0a 20 20 20 20 :sym::tag {.
b780: 74 79 70 65 6d 65 74 68 6f 64 20 62 79 72 65 76 typemethod byrev
b790: 69 73 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75 72 ision {} { retur
b7a0: 6e 20 30 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 n 0 }. typeme
b7b0: 74 68 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 thod bysymbol
b7c0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 7d 0a {} { return 1 }.
b7d0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 typemethod i
b7e0: 73 74 61 67 20 20 20 20 20 20 7b 7d 20 7b 20 72 stag {} { r
b7f0: 65 74 75 72 6e 20 31 20 7d 0a 20 20 20 20 74 79 eturn 1 }. ty
b800: 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61 6e 63 pemethod isbranc
b810: 68 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 h {} { return
b820: 30 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 0 }.. typemet
b830: 68 6f 64 20 73 74 72 20 7b 74 61 67 7d 20 7b 0a hod str {tag} {.
b840: 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 .struct::list as
b850: 73 69 67 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 sign [state run
b860: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53 2e {.. SELECT S.
b870: 6e 61 6d 65 2c 20 46 2e 6e 61 6d 65 2c 20 50 2e name, F.name, P.
b880: 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 name.. FROM
b890: 20 74 61 67 20 54 2c 20 73 79 6d 62 6f 6c 20 53 tag T, symbol S
b8a0: 2c 20 66 69 6c 65 20 46 2c 20 70 72 6f 6a 65 63 , file F, projec
b8b0: 74 20 50 0a 09 20 20 20 20 57 48 45 52 45 20 20 t P.. WHERE
b8c0: 54 2e 74 69 64 20 3d 20 24 74 61 67 20 20 20 2d T.tid = $tag -
b8d0: 2d 20 46 69 6e 64 20 73 70 65 63 69 66 69 65 64 - Find specified
b8e0: 20 74 61 67 0a 09 20 20 20 20 41 4e 44 20 20 20 tag.. AND
b8f0: 20 46 2e 66 69 64 20 3d 20 54 2e 66 69 64 20 20 F.fid = T.fid
b900: 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 20 74 -- Get file of t
b910: 61 67 0a 09 20 20 20 20 41 4e 44 20 20 20 20 50 ag.. AND P
b920: 2e 70 69 64 20 3d 20 46 2e 70 69 64 20 20 2d 2d .pid = F.pid --
b930: 20 47 65 74 20 70 72 6f 6a 65 63 74 20 6f 66 20 Get project of
b940: 66 69 6c 65 0a 09 20 20 20 20 41 4e 44 20 20 20 file.. AND
b950: 20 53 2e 73 69 64 20 3d 20 54 2e 73 69 64 20 20 S.sid = T.sid
b960: 2d 2d 20 47 65 74 20 73 79 6d 62 6f 6c 20 6f 66 -- Get symbol of
b970: 20 74 61 67 0a 09 7d 5d 20 73 6e 61 6d 65 20 66 tag..}] sname f
b980: 6e 61 6d 65 20 70 6e 61 6d 65 0a 09 72 65 74 75 name pname..retu
b990: 72 6e 20 22 24 70 6e 61 6d 65 2f 54 27 24 7b 73 rn "$pname/T'${s
b9a0: 6e 61 6d 65 7d 27 3a 3a 24 66 6e 61 6d 65 22 0a name}'::$fname".
b9b0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 }.. # res
b9c0: 75 6c 74 20 3d 20 6c 69 73 74 20 28 6d 69 6e 74 ult = list (mint
b9d0: 69 6d 65 2c 20 6d 61 78 74 69 6d 65 29 0a 20 20 ime, maxtime).
b9e0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 74 69 6d typemethod tim
b9f0: 65 72 61 6e 67 65 20 7b 74 61 67 73 7d 20 7b 0a erange {tags} {.
ba00: 09 23 20 54 68 65 20 72 61 6e 67 65 20 69 73 20 .# The range is
ba10: 64 65 66 69 6e 65 64 20 61 73 20 74 68 65 20 72 defined as the r
ba20: 61 6e 67 65 20 6f 66 20 74 68 65 20 72 65 76 69 ange of the revi
ba30: 73 69 6f 6e 73 20 74 68 65 20 74 61 67 73 0a 09 sions the tags..
ba40: 23 20 61 72 65 20 61 74 74 61 63 68 65 64 20 74 # are attached t
ba50: 6f 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 o....set theset
ba60: 28 27 5b 6a 6f 69 6e 20 24 74 61 67 73 20 7b 27 ('[join $tags {'
ba70: 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b ,'}]')..return [
ba80: 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 state run [subst
ba90: 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f -nocommands -no
baa0: 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 backslashes {..
bab0: 20 20 20 53 45 4c 45 43 54 20 4d 49 4e 28 52 2e SELECT MIN(R.
bac0: 64 61 74 65 29 2c 20 4d 41 58 28 52 2e 64 61 74 date), MAX(R.dat
bad0: 65 29 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 74 e).. FROM t
bae0: 61 67 20 54 2c 20 72 65 76 69 73 69 6f 6e 20 52 ag T, revision R
baf0: 0a 09 20 20 20 20 57 48 45 52 45 20 20 54 2e 74 .. WHERE T.t
bb00: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 2d id IN $theset -
bb10: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 74 61 - Restrict to ta
bb20: 67 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 20 gs of interest.
bb30: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
bb40: 20 20 52 2e 72 69 64 20 3d 20 54 2e 72 65 76 20 R.rid = T.rev
bb50: 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 74 61 -- Select ta
bb60: 67 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f g parent revisio
bb70: 6e 73 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 ns..}]]. }..
bb80: 20 20 20 23 20 76 61 72 28 64 76 29 20 3d 20 64 # var(dv) = d
bb90: 69 63 74 20 28 69 74 65 6d 20 2d 3e 20 6c 69 73 ict (item -> lis
bba0: 74 20 28 69 74 65 6d 29 29 2c 20 69 74 65 6d 20 t (item)), item
bbb0: 20 3d 20 6c 69 73 74 20 28 74 79 70 65 20 69 64 = list (type id
bbc0: 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 ). typemethod
bbd0: 20 73 75 63 63 65 73 73 6f 72 73 20 7b 64 76 20 successors {dv
bbe0: 74 61 67 73 7d 20 7b 0a 09 23 20 54 61 67 73 20 tags} {..# Tags
bbf0: 68 61 76 65 20 6e 6f 20 73 75 63 63 65 73 73 6f have no successo
bc00: 72 73 2e 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 rs...return.
bc10: 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 }.. # result
bc20: 3d 20 34 2d 6c 69 73 74 20 28 69 74 65 6d 74 79 = 4-list (itemty
bc30: 70 65 20 69 74 65 6d 69 64 20 6e 65 78 74 69 74 pe itemid nextit
bc40: 65 6d 74 79 70 65 20 6e 65 78 74 69 74 65 6d 69 emtype nextitemi
bc50: 64 20 2e 2e 2e 29 0a 20 20 20 20 74 79 70 65 6d d ...). typem
bc60: 65 74 68 6f 64 20 6c 6f 6f 70 73 20 7b 74 61 67 ethod loops {tag
bc70: 73 7d 20 7b 0a 09 23 20 54 61 67 73 20 68 61 76 s} {..# Tags hav
bc80: 65 20 6e 6f 20 73 75 63 63 65 73 73 6f 72 73 2c e no successors,
bc90: 20 74 68 65 72 65 66 6f 72 65 20 63 61 6e 6e 6f therefore canno
bca0: 74 20 63 61 75 73 65 20 6c 6f 6f 70 73 0a 09 72 t cause loops..r
bcb0: 65 74 75 72 6e 20 7b 7d 0a 20 20 20 20 7d 0a 0a eturn {}. }..
bcc0: 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c # result = l
bcd0: 69 73 74 20 28 63 68 61 6e 67 65 73 65 74 2d 69 ist (changeset-i
bce0: 64 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f d). typemetho
bcf0: 64 20 63 73 5f 73 75 63 63 65 73 73 6f 72 73 20 d cs_successors
bd00: 7b 74 61 67 73 7d 20 7b 0a 09 23 20 54 61 67 73 {tags} {..# Tags
bd10: 20 68 61 76 65 20 6e 6f 20 73 75 63 63 65 73 73 have no success
bd20: 6f 72 73 2e 0a 09 72 65 74 75 72 6e 0a 20 20 20 ors...return.
bd30: 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 }.. # result
bd40: 20 3d 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 0a 20 = symbol name.
bd50: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 63 73 typemethod cs
bd60: 5f 6c 6f 64 20 7b 74 61 67 73 7d 20 7b 0a 09 23 _lod {tags} {..#
bd70: 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 Determines the
bd80: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 79 6d 62 name of the symb
bd90: 6f 6c 20 77 68 69 63 68 20 69 73 20 74 68 65 20 ol which is the
bda0: 6c 69 6e 65 20 6f 66 0a 09 23 20 64 65 76 65 6c line of..# devel
bdb0: 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 74 opment for the t
bdc0: 61 67 73 20 69 6e 20 61 20 63 68 61 6e 67 65 73 ags in a changes
bdd0: 65 74 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 et....set theset
bde0: 20 28 27 5b 6a 6f 69 6e 20 24 74 61 67 73 20 7b ('[join $tags {
bdf0: 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 ','}]')..return
be00: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
be10: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
be20: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
be30: 20 20 20 20 53 45 4c 45 43 54 0a 09 20 20 20 20 SELECT..
be40: 44 49 53 54 49 4e 43 54 20 4c 2e 6e 61 6d 65 0a DISTINCT L.name.
be50: 09 20 20 20 20 46 52 4f 4d 20 20 20 74 61 67 20 . FROM tag
be60: 54 2c 20 73 79 6d 62 6f 6c 20 4c 0a 09 20 20 20 T, symbol L..
be70: 20 57 48 45 52 45 20 20 54 2e 74 69 64 20 69 6e WHERE T.tid in
be80: 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 20 $theset
be90: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 74 -- Restrict to t
bea0: 61 67 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a ags of interest.
beb0: 09 20 20 20 20 41 4e 44 20 20 20 20 4c 2e 73 69 . AND L.si
bec0: 64 20 3d 20 54 2e 6c 6f 64 20 20 20 20 20 20 20 d = T.lod
bed0: 20 20 20 20 2d 2d 20 47 65 74 20 6c 6f 64 20 73 -- Get lod s
bee0: 79 6d 62 6f 6c 20 6f 66 20 74 61 67 0a 09 7d 5d ymbol of tag..}]
bef0: 5d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 ]. }.}..# # #
bf00: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
bf10: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
bf20: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
bf30: 23 23 23 23 23 23 23 23 0a 23 23 20 48 65 6c 70 ########.## Help
bf40: 65 72 20 73 69 6e 67 6c 65 74 6f 6e 2e 20 43 6f er singleton. Co
bf50: 6d 6d 61 6e 64 73 20 66 6f 72 20 62 72 61 6e 63 mmands for branc
bf60: 68 20 73 79 6d 62 6f 6c 20 63 68 61 6e 67 65 73 h symbol changes
bf70: 65 74 73 2e 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 ets...snit::type
bf80: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
bf90: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a mport::cvs::proj
bfa0: 65 63 74 3a 3a 72 65 76 3a 3a 73 79 6d 3a 3a 62 ect::rev::sym::b
bfb0: 72 61 6e 63 68 20 7b 0a 20 20 20 20 74 79 70 65 ranch {. type
bfc0: 6d 65 74 68 6f 64 20 62 79 72 65 76 69 73 69 6f method byrevisio
bfd0: 6e 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 n {} { return 0
bfe0: 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 }. typemethod
bff0: 20 62 79 73 79 6d 62 6f 6c 20 20 20 7b 7d 20 7b bysymbol {} {
c000: 20 72 65 74 75 72 6e 20 31 20 7d 0a 20 20 20 20 return 1 }.
c010: 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74 61 67 typemethod istag
c020: 20 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 {} { retur
c030: 6e 20 30 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 n 0 }. typeme
c040: 74 68 6f 64 20 69 73 62 72 61 6e 63 68 20 20 20 thod isbranch
c050: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 7d 0a {} { return 1 }.
c060: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
c070: 73 74 72 20 7b 62 72 61 6e 63 68 7d 20 7b 0a 09 str {branch} {..
c080: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 struct::list ass
c090: 69 67 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 7b ign [state run {
c0a0: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53 2e 6e .. SELECT S.n
c0b0: 61 6d 65 2c 20 46 2e 6e 61 6d 65 2c 20 50 2e 6e ame, F.name, P.n
c0c0: 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 ame.. FROM
c0d0: 62 72 61 6e 63 68 20 42 2c 20 73 79 6d 62 6f 6c branch B, symbol
c0e0: 20 53 2c 20 66 69 6c 65 20 46 2c 20 70 72 6f 6a S, file F, proj
c0f0: 65 63 74 20 50 0a 09 20 20 20 20 57 48 45 52 45 ect P.. WHERE
c100: 20 20 42 2e 62 69 64 20 3d 20 24 62 72 61 6e 63 B.bid = $branc
c110: 68 20 20 2d 2d 20 46 69 6e 64 20 73 70 65 63 69 h -- Find speci
c120: 66 69 65 64 20 62 72 61 6e 63 68 0a 09 20 20 20 fied branch..
c130: 20 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d 20 AND F.fid =
c140: 42 2e 66 69 64 20 20 20 20 2d 2d 20 47 65 74 20 B.fid -- Get
c150: 66 69 6c 65 20 6f 66 20 62 72 61 6e 63 68 0a 09 file of branch..
c160: 20 20 20 20 41 4e 44 20 20 20 20 50 2e 70 69 64 AND P.pid
c170: 20 3d 20 46 2e 70 69 64 20 20 20 20 2d 2d 20 47 = F.pid -- G
c180: 65 74 20 70 72 6f 6a 65 63 74 20 6f 66 20 66 69 et project of fi
c190: 6c 65 0a 09 20 20 20 20 41 4e 44 20 20 20 20 53 le.. AND S
c1a0: 2e 73 69 64 20 3d 20 42 2e 73 69 64 20 20 20 20 .sid = B.sid
c1b0: 2d 2d 20 47 65 74 20 73 79 6d 62 6f 6c 20 6f 66 -- Get symbol of
c1c0: 20 62 72 61 6e 63 68 0a 09 7d 5d 20 73 6e 61 6d branch..}] snam
c1d0: 65 20 66 6e 61 6d 65 20 70 6e 61 6d 65 0a 09 72 e fname pname..r
c1e0: 65 74 75 72 6e 20 22 24 70 6e 61 6d 65 2f 42 27 eturn "$pname/B'
c1f0: 24 7b 73 6e 61 6d 65 7d 27 3a 3a 24 66 6e 61 6d ${sname}'::$fnam
c200: 65 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 e". }.. #
c210: 72 65 73 75 6c 74 20 3d 20 6c 69 73 74 20 28 6d result = list (m
c220: 69 6e 74 69 6d 65 2c 20 6d 61 78 74 69 6d 65 29 intime, maxtime)
c230: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
c240: 74 69 6d 65 72 61 6e 67 65 20 7b 62 72 61 6e 63 timerange {branc
c250: 68 65 73 7d 20 7b 0a 09 23 20 54 68 65 20 72 61 hes} {..# The ra
c260: 6e 67 65 20 6f 66 20 61 20 62 72 61 6e 63 68 20 nge of a branch
c270: 69 73 20 64 65 66 69 6e 65 64 20 61 73 20 74 68 is defined as th
c280: 65 20 72 61 6e 67 65 20 6f 66 20 74 68 65 0a 09 e range of the..
c290: 23 20 72 65 76 69 73 69 6f 6e 73 20 74 68 65 20 # revisions the
c2a0: 62 72 61 6e 63 68 65 73 20 61 72 65 20 73 70 61 branches are spa
c2b0: 77 6e 65 64 20 62 79 2e 20 4e 4f 54 45 20 68 6f wned by. NOTE ho
c2c0: 77 65 76 65 72 20 74 68 61 74 20 74 68 65 0a 09 wever that the..
c2d0: 23 20 62 72 61 6e 63 68 65 73 20 61 73 73 6f 63 # branches assoc
c2e0: 69 61 74 65 64 20 77 69 74 68 20 61 20 64 65 74 iated with a det
c2f0: 61 63 68 65 64 20 4e 54 44 42 20 77 69 6c 6c 20 ached NTDB will
c300: 68 61 76 65 20 6e 6f 20 72 6f 6f 74 0a 09 23 20 have no root..#
c310: 73 70 61 77 6e 69 6e 67 20 74 68 65 6d 2c 20 68 spawning them, h
c320: 65 6e 63 65 20 74 68 65 79 20 68 61 76 65 20 6e ence they have n
c330: 6f 20 72 65 61 6c 20 74 69 6d 65 72 61 6e 67 65 o real timerange
c340: 20 61 6e 79 0a 09 23 20 6c 6f 6e 67 65 72 2e 20 any..# longer.
c350: 42 79 20 75 73 69 6e 67 20 30 20 77 65 20 70 75 By using 0 we pu
c360: 74 20 74 68 65 6d 20 69 6e 20 66 72 6f 6e 74 20 t them in front
c370: 6f 66 20 65 76 65 72 79 74 68 69 6e 67 20 65 6c of everything el
c380: 73 65 2c 0a 09 23 20 61 73 20 74 68 65 79 20 6c se,..# as they l
c390: 6f 67 69 63 61 6c 6c 79 20 61 72 65 2e 0a 0a 09 ogically are....
c3a0: 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f set theset ('[jo
c3b0: 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 2c in $branches {',
c3c0: 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 '}]')..return [s
c3d0: 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 tate run [subst
c3e0: 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 -nocommands -nob
c3f0: 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 ackslashes {..
c400: 20 20 53 45 4c 45 43 54 20 49 46 4e 55 4c 4c 28 SELECT IFNULL(
c410: 4d 49 4e 28 52 2e 64 61 74 65 29 2c 30 29 2c 20 MIN(R.date),0),
c420: 49 46 4e 55 4c 4c 28 4d 41 58 28 52 2e 64 61 74 IFNULL(MAX(R.dat
c430: 65 29 2c 30 29 0a 09 20 20 20 20 46 52 4f 4d 20 e),0).. FROM
c440: 20 62 72 61 6e 63 68 20 42 2c 20 72 65 76 69 73 branch B, revis
c450: 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 ion R.. WHERE
c460: 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 B.bid IN $these
c470: 74 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 t -- Restrict
c480: 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20 69 to branches of i
c490: 6e 74 65 72 65 73 74 0a 20 20 20 20 20 20 20 20 nterest.
c4a0: 20 20 20 20 41 4e 44 20 20 20 52 2e 72 69 64 20 AND R.rid
c4b0: 3d 20 42 2e 72 6f 6f 74 20 20 20 20 20 2d 2d 20 = B.root --
c4c0: 53 65 6c 65 63 74 20 62 72 61 6e 63 68 20 70 61 Select branch pa
c4d0: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 73 0a 09 rent revisions..
c4e0: 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 }]]. }.. #
c4f0: 20 72 65 73 75 6c 74 20 3d 20 34 2d 6c 69 73 74 result = 4-list
c500: 20 28 69 74 65 6d 74 79 70 65 20 69 74 65 6d 69 (itemtype itemi
c510: 64 20 6e 65 78 74 69 74 65 6d 74 79 70 65 20 6e d nextitemtype n
c520: 65 78 74 69 74 65 6d 69 64 20 2e 2e 2e 29 0a 20 extitemid ...).
c530: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f typemethod lo
c540: 6f 70 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b ops {branches} {
c550: 0a 09 23 20 4e 6f 74 65 3a 20 52 65 76 69 73 69 ..# Note: Revisi
c560: 6f 6e 73 20 61 6e 64 20 74 61 67 73 20 63 61 6e ons and tags can
c570: 6e 6f 74 20 63 61 75 73 65 20 74 68 65 20 6c 6f not cause the lo
c580: 6f 70 2e 20 42 65 69 6e 67 20 6f 66 20 61 0a 09 op. Being of a..
c590: 23 20 66 75 6e 64 61 6d 65 6e 74 61 6c 6c 79 20 # fundamentally
c5a0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 20 74 different type t
c5b0: 68 65 79 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e hey cannot be in
c5c0: 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 0a 09 23 the incoming..#
c5d0: 20 73 65 74 20 6f 66 20 69 64 73 2e 0a 0a 09 73 set of ids....s
c5e0: 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 et theset ('[joi
c5f0: 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 2c 27 n $branches {','
c600: 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 }]')..return [st
c610: 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d ate run [subst -
c620: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 nocommands -noba
c630: 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 ckslashes {..
c640: 20 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 42 SELECT B.bid, B
c650: 58 2e 62 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 X.bid.. FROM
c660: 20 20 62 72 61 6e 63 68 20 42 2c 20 70 72 65 66 branch B, pref
c670: 65 72 65 64 70 61 72 65 6e 74 20 50 2c 20 62 72 eredparent P, br
c680: 61 6e 63 68 20 42 58 0a 09 20 20 20 20 57 48 45 anch BX.. WHE
c690: 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 RE B.bid IN $th
c6a0: 65 73 65 74 20 20 20 2d 2d 20 52 65 73 74 72 69 eset -- Restri
c6b0: 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f ct to branches o
c6c0: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
c6d0: 41 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20 50 AND B.sid = P
c6e0: 2e 70 69 64 20 20 20 20 20 20 2d 2d 20 47 65 74 .pid -- Get
c6f0: 20 74 68 65 20 70 72 65 66 65 72 65 64 20 62 72 the prefered br
c700: 61 6e 63 68 65 73 20 76 69 61 0a 09 20 20 20 20 anches via..
c710: 41 4e 44 20 20 20 20 42 58 2e 73 69 64 20 3d 20 AND BX.sid =
c720: 50 2e 73 69 64 20 20 20 20 20 2d 2d 20 74 68 65 P.sid -- the
c730: 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 73 0a branch symbols.
c740: 09 20 20 20 20 41 4e 44 20 20 20 20 42 58 2e 62 . AND BX.b
c750: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 2d id IN $theset -
c760: 2d 20 4c 6f 6f 70 0a 09 7d 5d 5d 0a 20 20 20 20 - Loop..}]].
c770: 7d 0a 0a 20 20 20 20 23 20 76 61 72 28 64 76 29 }.. # var(dv)
c780: 20 3d 20 64 69 63 74 20 28 69 74 65 6d 20 2d 3e = dict (item ->
c790: 20 6c 69 73 74 20 28 69 74 65 6d 29 29 2c 20 69 list (item)), i
c7a0: 74 65 6d 20 20 3d 20 6c 69 73 74 20 28 74 79 70 tem = list (typ
c7b0: 65 20 69 64 29 0a 20 20 20 20 74 79 70 65 6d 65 e id). typeme
c7c0: 74 68 6f 64 20 73 75 63 63 65 73 73 6f 72 73 20 thod successors
c7d0: 7b 64 76 20 62 72 61 6e 63 68 65 73 7d 20 7b 0a {dv branches} {.
c7e0: 09 75 70 76 61 72 20 31 20 24 64 76 20 64 65 70 .upvar 1 $dv dep
c7f0: 65 6e 64 65 6e 63 69 65 73 0a 09 23 20 54 68 65 endencies..# The
c800: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 first revision
c810: 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 61 20 62 committed on a b
c820: 72 61 6e 63 68 2c 20 61 6e 64 20 61 6c 6c 20 62 ranch, and all b
c830: 72 61 6e 63 68 65 73 0a 09 23 20 61 6e 64 20 74 ranches..# and t
c840: 61 67 73 20 77 68 69 63 68 20 68 61 76 65 20 69 ags which have i
c850: 74 20 61 73 20 74 68 65 69 72 20 70 72 65 66 65 t as their prefe
c860: 72 65 64 20 70 61 72 65 6e 74 20 61 72 65 20 74 red parent are t
c870: 68 65 0a 09 23 20 73 75 63 63 65 73 73 6f 72 73 he..# successors
c880: 20 6f 66 20 61 20 62 72 61 6e 63 68 2e 0a 0a 09 of a branch....
c890: 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f set theset ('[jo
c8a0: 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 2c in $branches {',
c8b0: 27 7d 5d 27 29 0a 09 66 6f 72 65 61 63 68 20 7b '}]')..foreach {
c8c0: 62 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 bid child} [stat
c8d0: 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f e run [subst -no
c8e0: 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b commands -noback
c8f0: 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 slashes {.. S
c900: 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 52 2e 72 ELECT B.bid, R.r
c910: 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 id.. FROM b
c920: 72 61 6e 63 68 20 42 2c 20 72 65 76 69 73 69 6f ranch B, revisio
c930: 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 n R.. WHERE
c940: 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 74 B.bid IN $theset
c950: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
c960: 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20 to branches of
c970: 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e interest.. AN
c980: 44 20 20 20 20 42 2e 66 69 72 73 74 20 3d 20 52 D B.first = R
c990: 2e 72 69 64 20 20 20 20 20 20 2d 2d 20 47 65 74 .rid -- Get
c9a0: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 first revision
c9b0: 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 09 7d on the branch..}
c9c0: 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e ]] {.. lappen
c9d0: 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 5b d dependencies([
c9e0: 6c 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 list sym::branch
c9f0: 20 24 62 69 64 5d 29 20 5b 6c 69 73 74 20 72 65 $bid]) [list re
ca00: 76 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 6f v $child]..}..fo
ca10: 72 65 61 63 68 20 7b 62 69 64 20 63 68 69 6c 64 reach {bid child
ca20: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 } [state run [su
ca30: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
ca40: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
ca50: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e 62 .. SELECT B.b
ca60: 69 64 2c 20 42 58 2e 62 69 64 0a 09 20 20 20 20 id, BX.bid..
ca70: 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c FROM branch B,
ca80: 20 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 preferedparent
ca90: 50 2c 20 62 72 61 6e 63 68 20 42 58 0a 09 20 20 P, branch BX..
caa0: 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 49 WHERE B.bid I
cab0: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
cac0: 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 Restrict to bra
cad0: 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 nches of interes
cae0: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e t.. AND B.
caf0: 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 20 20 sid = P.pid
cb00: 20 20 20 2d 2d 20 47 65 74 20 73 75 62 6f 72 64 -- Get subord
cb10: 69 6e 61 74 65 20 62 72 61 6e 63 68 65 73 20 76 inate branches v
cb20: 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 ia the.. AND
cb30: 20 20 20 42 58 2e 73 69 64 20 3d 20 50 2e 73 69 BX.sid = P.si
cb40: 64 20 20 20 20 20 20 20 2d 2d 20 70 72 65 66 65 d -- prefe
cb50: 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20 74 red parents of t
cb60: 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 09 7d 5d heir symbols..}]
cb70: 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 ] {.. lappend
cb80: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c dependencies([l
cb90: 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20 ist sym::branch
cba0: 24 62 69 64 5d 29 20 5b 6c 69 73 74 20 73 79 6d $bid]) [list sym
cbb0: 3a 3a 62 72 61 6e 63 68 20 24 63 68 69 6c 64 5d ::branch $child]
cbc0: 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 7b 62 69 ..}..foreach {bi
cbd0: 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 20 d child} [state
cbe0: 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f run [subst -noco
cbf0: 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c mmands -nobacksl
cc00: 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c ashes {.. SEL
cc10: 45 43 54 20 42 2e 62 69 64 2c 20 54 2e 74 69 64 ECT B.bid, T.tid
cc20: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 .. FROM bra
cc30: 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 64 70 nch B, preferedp
cc40: 61 72 65 6e 74 20 50 2c 20 74 61 67 20 54 0a 09 arent P, tag T..
cc50: 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 WHERE B.bid
cc60: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
cc70: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 -- Restrict to b
cc80: 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 ranches of inter
cc90: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
cca0: 42 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 B.sid = P.pid
ccb0: 20 20 20 20 20 2d 2d 20 47 65 74 20 73 75 62 6f -- Get subo
ccc0: 72 64 69 6e 61 74 65 20 74 61 67 73 20 76 69 61 rdinate tags via
ccd0: 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 20 20 the.. AND
cce0: 20 54 2e 73 69 64 20 3d 20 50 2e 73 69 64 20 20 T.sid = P.sid
ccf0: 20 20 20 20 20 20 2d 2d 20 70 72 65 66 65 72 65 -- prefere
cd00: 64 20 70 61 72 65 6e 74 73 20 6f 66 20 74 68 65 d parents of the
cd10: 69 72 20 73 79 6d 62 6f 6c 73 0a 09 7d 5d 5d 20 ir symbols..}]]
cd20: 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 {.. lappend d
cd30: 65 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 ependencies([lis
cd40: 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20 24 62 t sym::branch $b
cd50: 69 64 5d 29 20 5b 6c 69 73 74 20 73 79 6d 3a 3a id]) [list sym::
cd60: 74 61 67 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 tag $child]..}..
cd70: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
cd80: 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 73 # result = lis
cd90: 74 20 28 63 68 61 6e 67 65 73 65 74 2d 69 64 29 t (changeset-id)
cda0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
cdb0: 63 73 5f 73 75 63 63 65 73 73 6f 72 73 20 7b 62 cs_successors {b
cdc0: 72 61 6e 63 68 65 73 7d 20 7b 0a 20 20 20 20 20 ranches} {.
cdd0: 20 20 20 23 20 54 68 69 73 20 69 73 20 61 20 76 # This is a v
cde0: 61 72 69 61 6e 74 20 6f 66 20 27 73 75 63 63 65 ariant of 'succe
cdf0: 73 73 6f 72 73 27 20 77 68 69 63 68 20 6d 61 70 ssors' which map
ce00: 73 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 6c 0a s the low-level.
ce10: 20 20 20 20 20 20 20 20 23 20 64 61 74 61 20 64 # data d
ce20: 69 72 65 63 74 6c 79 20 74 6f 20 74 68 65 20 61 irectly to the a
ce30: 73 73 6f 63 69 61 74 65 64 20 63 68 61 6e 67 65 ssociated change
ce40: 73 65 74 73 2e 20 49 2e 65 2e 20 69 6e 73 74 65 sets. I.e. inste
ce50: 61 64 0a 20 20 20 20 20 20 20 20 23 20 6d 69 6c ad. # mil
ce60: 6c 69 6f 6e 73 20 6f 66 20 64 65 70 65 6e 64 65 lions of depende
ce70: 6e 63 79 20 70 61 69 72 73 20 28 69 6e 20 65 78 ncy pairs (in ex
ce80: 74 72 65 6d 65 20 63 61 73 65 73 20 28 45 78 61 treme cases (Exa
ce90: 6d 70 6c 65 3a 20 54 63 6c 0a 20 20 20 20 20 20 mple: Tcl.
cea0: 20 20 23 20 43 56 53 29 29 20 77 65 20 72 65 74 # CVS)) we ret
ceb0: 75 72 6e 20 61 20 76 65 72 79 20 73 68 6f 72 74 urn a very short
cec0: 20 61 6e 64 20 6d 75 63 68 20 6d 6f 72 65 20 6d and much more m
ced0: 61 6e 61 67 65 61 62 6c 65 20 6c 69 73 74 0a 20 anageable list.
cee0: 20 20 20 20 20 20 20 23 20 6f 66 20 63 68 61 6e # of chan
cef0: 67 65 73 65 74 73 2e 0a 0a 09 73 65 74 20 74 68 gesets....set th
cf00: 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 eset ('[join $br
cf10: 61 6e 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a anches {','}]').
cf20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [
cf30: 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 state run [subst
cf40: 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f -nocommands -no
cf50: 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 backslashes {..
cf60: 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a SELECT C.cid.
cf70: 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e . FROM bran
cf80: 63 68 20 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 ch B, revision R
cf90: 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 , csitem CI, cha
cfa0: 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 ngeset C.. WH
cfb0: 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 ERE B.bid IN $t
cfc0: 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 heset -- Res
cfd0: 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 trict to branche
cfe0: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
cff0: 20 20 20 41 4e 44 20 20 20 20 42 2e 66 69 72 73 AND B.firs
d000: 74 20 3d 20 52 2e 72 69 64 09 2d 2d 20 47 65 74 t = R.rid.-- Get
d010: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 first revision
d020: 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 20 20 on the branch.
d030: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
d040: 20 43 49 2e 69 69 64 20 3d 20 52 2e 72 69 64 20 CI.iid = R.rid
d050: 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 -- Select
d060: 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 all changesets.
d070: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
d080: 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 C.cid = CI.cid
d090: 09 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 .-- containing t
d0a0: 68 69 73 20 72 65 76 69 73 69 6f 6e 0a 20 20 20 his revision.
d0b0: 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 AND
d0c0: 43 2e 74 79 70 65 20 3d 20 30 09 09 2d 2d 20 77 C.type = 0..-- w
d0d0: 68 69 63 68 20 61 72 65 20 72 65 76 69 73 69 6f hich are revisio
d0e0: 6e 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 20 n changesets.
d0f0: 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 45 4c 45 UNION.. SELE
d100: 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 46 52 CT C.cid.. FR
d110: 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 70 OM branch B, p
d120: 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 50 2c referedparent P,
d130: 20 62 72 61 6e 63 68 20 42 58 2c 20 63 73 69 74 branch BX, csit
d140: 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 em CI, changeset
d150: 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 C.. WHERE B
d160: 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 .bid IN $theset
d170: 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 -- Restrict
d180: 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20 69 to branches of i
d190: 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 nterest.. AND
d1a0: 20 20 20 20 42 2e 73 69 64 20 3d 20 50 2e 70 69 B.sid = P.pi
d1b0: 64 09 2d 2d 20 47 65 74 20 73 75 62 6f 72 64 69 d.-- Get subordi
d1c0: 6e 61 74 65 20 62 72 61 6e 63 68 65 73 20 76 69 nate branches vi
d1d0: 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 20 a the.. AND
d1e0: 20 20 42 58 2e 73 69 64 20 3d 20 50 2e 73 69 64 BX.sid = P.sid
d1f0: 09 2d 2d 20 70 72 65 66 65 72 65 64 20 70 61 72 .-- prefered par
d200: 65 6e 74 73 20 6f 66 20 74 68 65 69 72 20 73 79 ents of their sy
d210: 6d 62 6f 6c 73 0a 20 20 20 20 20 20 20 20 20 20 mbols.
d220: 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 AND CI.iid
d230: 3d 20 42 58 2e 62 69 64 20 20 20 20 20 20 2d 2d = BX.bid --
d240: 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e Select all chan
d250: 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 gesets.
d260: 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 AND C.cid
d270: 3d 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e 74 = CI.cid.-- cont
d280: 61 69 6e 69 6e 67 20 74 68 65 20 73 75 62 6f 72 aining the subor
d290: 64 69 6e 61 74 65 20 62 72 61 6e 63 68 65 73 0a dinate branches.
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
d2b0: 20 20 20 43 2e 74 79 70 65 20 3d 20 32 09 09 2d C.type = 2..-
d2c0: 2d 20 77 68 69 63 68 20 61 72 65 20 62 72 61 6e - which are bran
d2d0: 63 68 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 ch changesets.
d2e0: 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 45 4c UNION.. SEL
d2f0: 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 46 ECT C.cid.. F
d300: 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 ROM branch B,
d310: 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 50 preferedparent P
d320: 2c 20 74 61 67 20 54 2c 20 63 73 69 74 65 6d 20 , tag T, csitem
d330: 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 0a CI, changeset C.
d340: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 . WHERE B.bi
d350: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 d IN $theset
d360: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
d370: 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 branches of inte
d380: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
d390: 20 42 2e 73 69 64 20 3d 20 50 2e 70 69 64 09 2d B.sid = P.pid.-
d3a0: 2d 20 47 65 74 20 73 75 62 6f 72 64 69 6e 61 74 - Get subordinat
d3b0: 65 20 74 61 67 73 20 76 69 61 20 74 68 65 0a 09 e tags via the..
d3c0: 20 20 20 20 41 4e 44 20 20 20 20 54 2e 73 69 64 AND T.sid
d3d0: 20 3d 20 50 2e 73 69 64 09 2d 2d 20 70 72 65 66 = P.sid.-- pref
d3e0: 65 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20 ered parents of
d3f0: 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 20 20 their symbols.
d400: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
d410: 20 43 49 2e 69 69 64 20 3d 20 54 2e 74 69 64 20 CI.iid = T.tid
d420: 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 -- Select
d430: 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 all changesets.
d440: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
d450: 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 C.cid = CI.cid
d460: 09 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 .-- containing t
d470: 68 65 20 73 75 62 6f 72 64 69 6e 61 74 65 20 74 he subordinate t
d480: 61 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 ags.
d490: 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 AND C.type =
d4a0: 31 09 09 2d 2d 20 77 68 69 63 68 20 61 72 65 20 1..-- which are
d4b0: 74 61 67 20 63 68 61 6e 67 65 73 65 74 73 0a 09 tag changesets..
d4c0: 7d 5d 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 }]]..return.
d4d0: 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 }.. # result
d4e0: 3d 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 0a 20 20 = symbol name.
d4f0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 63 73 5f typemethod cs_
d500: 6c 6f 64 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b lod {branches} {
d510: 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 73 20 74 ..# Determines t
d520: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 he name of the s
d530: 79 6d 62 6f 6c 20 77 68 69 63 68 20 69 73 20 74 ymbol which is t
d540: 68 65 20 6c 69 6e 65 20 6f 66 0a 09 23 20 64 65 he line of..# de
d550: 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 velopment for th
d560: 65 20 62 72 61 6e 63 68 65 73 20 69 6e 20 61 20 e branches in a
d570: 63 68 61 6e 67 65 73 65 74 2e 0a 0a 09 73 65 74 changeset....set
d580: 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 theset ('[join
d590: 24 62 72 61 6e 63 68 65 73 20 7b 27 2c 27 7d 5d $branches {','}]
d5a0: 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 61 74 ')..return [stat
d5b0: 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f e run [subst -no
d5c0: 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b commands -noback
d5d0: 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 slashes {.. S
d5e0: 45 4c 45 43 54 0a 09 20 20 20 20 44 49 53 54 49 ELECT.. DISTI
d5f0: 4e 43 54 20 4c 2e 6e 61 6d 65 0a 09 20 20 20 20 NCT L.name..
d600: 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c FROM branch B,
d610: 20 73 79 6d 62 6f 6c 20 4c 0a 09 20 20 20 20 57 symbol L.. W
d620: 48 45 52 45 20 20 42 2e 62 69 64 20 69 6e 20 24 HERE B.bid in $
d630: 74 68 65 73 65 74 20 20 20 20 20 20 20 20 2d 2d theset --
d640: 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 Restrict to bra
d650: 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 nches of interes
d660: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 4c 2e t.. AND L.
d670: 73 69 64 20 3d 20 42 2e 6c 6f 64 20 20 20 20 20 sid = B.lod
d680: 20 20 20 20 20 20 2d 2d 20 47 65 74 20 6c 6f 64 -- Get lod
d690: 20 73 79 6d 62 6f 6c 20 6f 66 20 62 72 61 6e 63 symbol of branc
d6a0: 68 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 h..}]]. }..
d6b0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 69 6d typemethod lim
d6c0: 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b its {branches} {
d6d0: 0a 09 23 20 4e 6f 74 65 73 2e 20 54 68 69 73 20 ..# Notes. This
d6e0: 6d 65 74 68 6f 64 20 65 78 69 73 74 73 20 6f 6e method exists on
d6f0: 6c 79 20 66 6f 72 20 62 72 61 6e 63 68 65 73 2e ly for branches.
d700: 20 49 74 20 69 73 20 6e 65 65 64 65 64 20 74 6f It is needed to
d710: 0a 09 23 20 67 65 74 20 64 65 74 61 69 6c 65 64 ..# get detailed
d720: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f information abo
d730: 75 74 20 61 20 62 61 63 6b 77 61 72 64 20 62 72 ut a backward br
d740: 61 6e 63 68 2e 20 49 74 20 64 6f 65 73 0a 09 23 anch. It does..#
d750: 20 6e 6f 74 20 61 70 70 6c 79 20 74 6f 20 74 61 not apply to ta
d760: 67 73 2c 20 6e 6f 72 20 72 65 76 69 73 69 6f 6e gs, nor revision
d770: 73 2e 20 54 68 65 20 71 75 65 72 69 65 73 20 63 s. The queries c
d780: 61 6e 20 61 6c 73 6f 0a 09 23 20 72 65 73 74 72 an also..# restr
d790: 69 63 74 20 74 68 65 6d 73 65 6c 76 65 73 20 74 ict themselves t
d7a0: 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 73 o the revision s
d7b0: 75 63 65 73 73 6f 72 73 2f 70 72 65 64 65 63 65 ucessors/predece
d7c0: 73 73 6f 72 73 0a 09 23 20 6f 66 20 62 72 61 6e ssors..# of bran
d7d0: 63 68 65 73 2c 20 61 73 20 6f 6e 6c 79 20 74 68 ches, as only th
d7e0: 65 79 20 68 61 76 65 20 6f 72 64 65 72 69 6e 67 ey have ordering
d7f0: 20 64 61 74 61 20 61 6e 64 20 74 68 75 73 20 63 data and thus c
d800: 61 6e 0a 09 23 20 63 61 75 73 65 20 74 68 65 20 an..# cause the
d810: 62 61 63 6b 77 61 72 64 6e 65 73 73 2e 0a 0a 09 backwardness....
d820: 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f set theset ('[jo
d830: 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 2c in $branches {',
d840: 27 7d 5d 27 29 0a 0a 09 73 65 74 20 6d 61 78 70 '}]')...set maxp
d850: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
d860: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
d870: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
d880: 09 20 20 20 20 2d 2d 20 6d 61 78 69 6d 61 6c 20 . -- maximal
d890: 70 72 65 64 65 63 65 73 73 6f 72 20 70 6f 73 69 predecessor posi
d8a0: 74 69 6f 6e 20 70 65 72 20 62 72 61 6e 63 68 0a tion per branch.
d8b0: 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e 62 69 . SELECT B.bi
d8c0: 64 2c 20 4d 41 58 20 28 43 4f 2e 70 6f 73 29 0a d, MAX (CO.pos).
d8d0: 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e . FROM bran
d8e0: 63 68 20 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 ch B, revision R
d8f0: 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 , csitem CI, cha
d900: 6e 67 65 73 65 74 20 43 2c 20 63 73 6f 72 64 65 ngeset C, csorde
d910: 72 20 43 4f 0a 09 20 20 20 20 57 48 45 52 45 20 r CO.. WHERE
d920: 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 B.bid IN $these
d930: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
d940: 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 t to branches of
d950: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
d960: 4e 44 20 20 20 20 42 2e 72 6f 6f 74 20 3d 20 52 ND B.root = R
d970: 2e 72 69 64 20 20 20 20 20 20 20 2d 2d 20 47 65 .rid -- Ge
d980: 74 20 62 72 61 6e 63 68 20 72 6f 6f 74 20 72 65 t branch root re
d990: 76 69 73 69 6f 6e 73 0a 09 20 20 20 20 41 4e 44 visions.. AND
d9a0: 20 20 20 20 43 49 2e 69 69 64 20 3d 20 52 2e 72 CI.iid = R.r
d9b0: 69 64 20 20 20 20 20 20 20 2d 2d 20 47 65 74 20 id -- Get
d9c0: 63 68 61 6e 67 65 73 65 74 73 20 63 6f 6e 74 61 changesets conta
d9d0: 69 6e 69 6e 67 20 74 68 65 0a 09 20 20 20 20 41 ining the.. A
d9e0: 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 ND C.cid = CI
d9f0: 2e 63 69 64 20 20 20 20 20 20 20 2d 2d 20 72 6f .cid -- ro
da00: 6f 74 20 72 65 76 69 73 69 6f 6e 73 2c 20 77 68 ot revisions, wh
da10: 69 63 68 20 61 72 65 0a 09 20 20 20 20 41 4e 44 ich are.. AND
da20: 20 20 20 20 43 2e 74 79 70 65 20 3d 20 30 20 20 C.type = 0
da30: 20 20 20 20 20 20 20 20 20 2d 2d 20 72 65 76 69 -- revi
da40: 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 0a sion changesets.
da50: 09 20 20 20 20 41 4e 44 20 20 20 20 43 4f 2e 63 . AND CO.c
da60: 69 64 20 3d 20 43 2e 63 69 64 20 20 20 20 20 20 id = C.cid
da70: 20 2d 2d 20 47 65 74 20 74 68 65 69 72 20 74 6f -- Get their to
da80: 70 6f 6c 6f 67 69 63 61 6c 20 6f 72 64 65 72 69 pological orderi
da90: 6e 67 0a 09 20 20 20 20 47 52 4f 55 50 20 42 59 ng.. GROUP BY
daa0: 20 42 2e 62 69 64 0a 09 7d 5d 5d 0a 0a 09 73 65 B.bid..}]]...se
dab0: 74 20 6d 69 6e 73 20 5b 73 74 61 74 65 20 72 75 t mins [state ru
dac0: 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d n [subst -nocomm
dad0: 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 ands -nobackslas
dae0: 68 65 73 20 7b 0a 09 20 20 20 20 2d 2d 20 6d 69 hes {.. -- mi
daf0: 6e 69 6d 61 6c 20 73 75 63 63 65 73 73 6f 72 20 nimal successor
db00: 70 6f 73 69 74 69 6f 6e 20 70 65 72 20 62 72 61 position per bra
db10: 6e 63 68 0a 09 20 20 20 20 53 45 4c 45 43 54 20 nch.. SELECT
db20: 42 2e 62 69 64 2c 20 4d 49 4e 20 28 43 4f 2e 70 B.bid, MIN (CO.p
db30: 6f 73 29 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 os).. FROM
db40: 62 72 61 6e 63 68 20 42 2c 20 72 65 76 69 73 69 branch B, revisi
db50: 6f 6e 20 52 2c 20 63 73 69 74 65 6d 20 43 49 2c on R, csitem CI,
db60: 20 63 68 61 6e 67 65 73 65 74 20 43 2c 20 63 73 changeset C, cs
db70: 6f 72 64 65 72 20 43 4f 0a 09 20 20 20 20 57 48 order CO.. WH
db80: 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 ERE B.bid IN $t
db90: 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 heset -- Res
dba0: 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 trict to branche
dbb0: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
dbc0: 20 20 20 41 4e 44 20 20 20 20 42 2e 66 69 72 73 AND B.firs
dbd0: 74 20 3d 20 52 2e 72 69 64 20 20 20 20 20 20 2d t = R.rid -
dbe0: 2d 20 47 65 74 20 74 68 65 20 66 69 72 73 74 20 - Get the first
dbf0: 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 65 revisions on the
dc00: 20 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20 41 branches.. A
dc10: 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d 20 52 ND CI.iid = R
dc20: 2e 72 69 64 20 20 20 20 20 20 20 2d 2d 20 47 65 .rid -- Ge
dc30: 74 20 63 68 61 6e 67 65 73 65 74 73 20 63 6f 6e t changesets con
dc40: 74 61 69 6e 69 6e 67 20 74 68 65 0a 09 20 20 20 taining the..
dc50: 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 AND C.cid =
dc60: 43 49 2e 63 69 64 09 2d 2d 20 66 69 72 73 74 20 CI.cid.-- first
dc70: 72 65 76 69 73 69 6f 6e 73 2c 20 77 68 69 63 68 revisions, which
dc80: 20 61 72 65 0a 09 20 20 20 20 41 4e 44 20 20 20 are.. AND
dc90: 20 43 2e 74 79 70 65 20 3d 20 30 09 09 2d 2d 20 C.type = 0..--
dca0: 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 revision changes
dcb0: 65 74 73 0a 09 20 20 20 20 41 4e 44 20 20 20 20 ets.. AND
dcc0: 43 4f 2e 63 69 64 20 3d 20 43 2e 63 69 64 09 2d CO.cid = C.cid.-
dcd0: 2d 20 47 65 74 20 74 68 65 69 72 20 74 6f 70 6f - Get their topo
dce0: 6c 6f 67 69 63 61 6c 20 6f 72 64 65 72 69 6e 67 logical ordering
dcf0: 0a 09 20 20 20 20 47 52 4f 55 50 20 42 59 20 42 .. GROUP BY B
dd00: 2e 62 69 64 0a 09 7d 5d 5d 0a 0a 20 20 20 20 20 .bid..}]]..
dd10: 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 return [list
dd20: 24 6d 61 78 70 20 24 6d 69 6e 73 5d 0a 20 20 20 $maxp $mins].
dd30: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 }.. # # ## #
dd40: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
dd50: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
dd60: 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 ## Configura
dd70: 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 tion.. pragma
dd80: 20 2d 68 61 73 69 6e 73 74 61 6e 63 65 73 20 20 -hasinstances
dd90: 20 6e 6f 20 3b 20 23 20 73 69 6e 67 6c 65 74 6f no ; # singleto
dda0: 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 n. pragma -ha
ddb0: 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 stypeinfo no
ddc0: 3b 20 23 20 6e 6f 20 69 6e 74 72 6f 73 70 65 63 ; # no introspec
ddd0: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 tion. pragma
dde0: 2d 68 61 73 74 79 70 65 64 65 73 74 72 6f 79 20 -hastypedestroy
ddf0: 6e 6f 20 3b 20 23 20 69 6d 6d 6f 72 74 61 6c 0a no ; # immortal.
de00: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 }..# # ## ### ##
de10: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
de20: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 ########## #####
de30: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
de40: 0a 23 23 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 .##..namespace e
de50: 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c val ::vc::fossil
de60: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 ::import::cvs::p
de70: 72 6f 6a 65 63 74 20 7b 0a 20 20 20 20 6e 61 6d roject {. nam
de80: 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 72 65 espace export re
de90: 76 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 v. namespace
dea0: 65 76 61 6c 20 72 65 76 20 7b 0a 09 6e 61 6d 65 eval rev {..name
deb0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
dec0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
ded0: 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e t::cvs::state..n
dee0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
def0: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
df00: 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 port::cvs::integ
df10: 72 69 74 79 0a 09 6e 61 6d 65 73 70 61 63 65 20 rity..namespace
df20: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f import ::vc::too
df30: 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d ls::misc::*..nam
df40: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import ::
df50: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 vc::tools::troub
df60: 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d le..namespace im
df70: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 port ::vc::tools
df80: 3a 3a 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 73 ::log..log regis
df90: 74 65 72 20 63 73 65 74 73 0a 0a 09 23 20 53 65 ter csets...# Se
dfa0: 74 20 75 70 20 74 68 65 20 68 65 6c 70 65 72 20 t up the helper
dfb0: 73 69 6e 67 6c 65 74 6f 6e 73 0a 09 6e 61 6d 65 singletons..name
dfc0: 73 70 61 63 65 20 65 76 61 6c 20 72 65 76 20 7b space eval rev {
dfd0: 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 .. namespace
dfe0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 import ::vc::fos
dff0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
e000: 3a 3a 73 74 61 74 65 0a 09 20 20 20 20 6e 61 6d ::state.. nam
e010: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import ::
e020: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
e030: 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 rt::cvs::integri
e040: 74 79 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 ty.. namespac
e050: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
e060: 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a 09 6e 61 ools::log..}..na
e070: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 73 79 6d mespace eval sym
e080: 3a 3a 74 61 67 20 7b 0a 09 20 20 20 20 6e 61 6d ::tag {.. nam
e090: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import ::
e0a0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
e0b0: 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 rt::cvs::state..
e0c0: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d namespace im
e0d0: 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 port ::vc::fossi
e0e0: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
e0f0: 69 6e 74 65 67 72 69 74 79 0a 09 20 20 20 20 6e integrity.. n
e100: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
e110: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 ::vc::tools::log
e120: 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 ..}..namespace e
e130: 76 61 6c 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20 val sym::branch
e140: 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 {.. namespace
e150: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
e160: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
e170: 73 3a 3a 73 74 61 74 65 0a 09 20 20 20 20 6e 61 s::state.. na
e180: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
e190: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
e1a0: 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 ort::cvs::integr
e1b0: 69 74 79 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 ity.. namespa
e1c0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
e1d0: 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a 20 20 tools::log..}.
e1e0: 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 }.}..# # ## ##
e1f0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
e200: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 ############# #
e210: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
e220: 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 ####.## Ready..p
e230: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 ackage provide v
e240: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
e250: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a t::cvs::project:
e260: 3a 72 65 76 20 31 2e 30 0a 72 65 74 75 72 6e 0a :rev 1.0.return.