0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23 ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 ############.##
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 Copyright (c) 20
0060: 30 37 2d 32 30 30 38 20 41 6e 64 72 65 61 73 20 07-2008 Andreas
0070: 4b 75 70 72 69 65 73 2e 0a 23 0a 23 20 54 68 69 Kupries..#.# Thi
0080: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6c 69 s software is li
0090: 63 65 6e 73 65 64 20 61 73 20 64 65 73 63 72 69 censed as descri
00a0: 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20 bed in the file
00b0: 4c 49 43 45 4e 53 45 2c 20 77 68 69 63 68 0a 23 LICENSE, which.#
00c0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 you should have
00d0: 20 72 65 63 65 69 76 65 64 20 61 73 20 70 61 72 received as par
00e0: 74 20 6f 66 20 74 68 69 73 20 64 69 73 74 72 69 t of this distri
00f0: 62 75 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73 bution..#.# This
0100: 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 73 69 73 software consis
0110: 74 73 20 6f 66 20 76 6f 6c 75 6e 74 61 72 79 20 ts of voluntary
0120: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 6d 61 contributions ma
0130: 64 65 20 62 79 20 6d 61 6e 79 0a 23 20 69 6e 64 de by many.# ind
0140: 69 76 69 64 75 61 6c 73 2e 20 20 46 6f 72 20 65 ividuals. For e
0150: 78 61 63 74 20 63 6f 6e 74 72 69 62 75 74 69 6f xact contributio
0160: 6e 20 68 69 73 74 6f 72 79 2c 20 73 65 65 20 74 n history, see t
0170: 68 65 20 72 65 76 69 73 69 6f 6e 0a 23 20 68 69 he revision.# hi
0180: 73 74 6f 72 79 20 61 6e 64 20 6c 6f 67 73 2c 20 story and logs,
0190: 61 76 61 69 6c 61 62 6c 65 20 61 74 20 68 74 74 available at htt
01a0: 70 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 68 p://fossil-scm.h
01b0: 77 61 63 69 2e 63 6f 6d 2f 66 6f 73 73 69 6c 0a waci.com/fossil.
01c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
01d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
01e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 #############..#
0200: 23 20 52 65 76 69 73 69 6f 6e 73 20 70 65 72 20 # Revisions per
0210: 70 72 6f 6a 65 63 74 2c 20 61 6b 61 20 43 68 61 project, aka Cha
0220: 6e 67 65 73 65 74 73 2e 20 54 68 65 73 65 20 6f ngesets. These o
0230: 62 6a 65 63 74 73 20 61 72 65 20 66 69 72 73 74 bjects are first
0240: 20 75 73 65 64 0a 23 23 20 69 6e 20 70 61 73 73 used.## in pass
0250: 20 35 2c 20 77 68 69 63 68 20 63 72 65 61 74 65 5, which create
0260: 73 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73 65 s the initial se
0270: 74 20 63 6f 76 65 72 69 6e 67 20 74 68 65 20 72 t covering the r
0280: 65 70 6f 73 69 74 6f 72 79 2e 0a 0a 23 20 23 20 epository...# #
0290: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
02a0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
02b0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
02c0: 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 71 #########.## Req
02d0: 75 69 72 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 uirements..packa
02e0: 67 65 20 72 65 71 75 69 72 65 20 54 63 6c 20 38 ge require Tcl 8
02f0: 2e 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .4
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0310: 20 3b 20 23 20 52 65 71 75 69 72 65 64 20 72 75 ; # Required ru
0320: 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 67 65 20 72 ntime..package r
0330: 65 71 75 69 72 65 20 73 6e 69 74 20 20 20 20 20 equire snit
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; #
0360: 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b OO system..pack
0370: 61 67 65 20 72 65 71 75 69 72 65 20 73 74 72 75 age require stru
0380: 63 74 3a 3a 73 65 74 20 20 20 20 20 20 20 20 20 ct::set
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03a0: 20 20 3b 20 23 20 53 65 74 20 6f 70 65 72 61 74 ; # Set operat
03b0: 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 ions..package re
03c0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a quire vc::tools:
03d0: 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20 20 20 :misc
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 ; #
03f0: 54 65 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a Text formatting.
0400: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
0410: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 vc::tools::troub
0420: 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 le
0430: 20 20 20 20 20 20 3b 20 23 20 45 72 72 6f 72 20 ; # Error
0440: 72 65 70 6f 72 74 69 6e 67 2e 0a 70 61 63 6b 61 reporting..packa
0450: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74 ge require vc::t
0460: 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20 20 20 20 20 ools::log
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0480: 20 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 61 ; # User feedba
0490: 63 6b 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 ck..package requ
04a0: 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a ire vc::fossil::
04b0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 import::cvs::sta
04c0: 74 65 20 20 20 20 20 20 20 20 3b 20 23 20 53 74 te ; # St
04d0: 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 ate storage..pac
04e0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a kage require vc:
04f0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
0500: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 20 :cvs::integrity
0510: 20 20 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74 ; # State int
0520: 65 67 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 0a egrity checks...
0530: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
0540: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
0550: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
0560: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 #############.##
0570: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 ..snit::type ::v
0580: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
0590: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a t::cvs::project:
05a0: 3a 72 65 76 20 7b 0a 20 20 20 20 23 20 23 20 23 :rev {. # # #
05b0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
05c0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
05d0: 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63 ##. ## Public
05e0: 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72 API.. constr
05f0: 75 63 74 6f 72 20 7b 70 72 6f 6a 65 63 74 20 63 uctor {project c
0600: 73 74 79 70 65 20 73 72 63 69 64 20 69 74 65 6d stype srcid item
0610: 73 20 7b 74 68 65 69 64 20 7b 7d 7d 7d 20 7b 0a s {theid {}}} {.
0620: 09 69 66 20 7b 24 74 68 65 69 64 20 6e 65 20 22 .if {$theid ne "
0630: 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 "} {.. set my
0640: 69 64 20 24 74 68 65 69 64 0a 09 7d 20 65 6c 73 id $theid..} els
0650: 65 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 e {.. set myi
0660: 64 20 5b 69 6e 63 72 20 6d 79 63 6f 75 6e 74 65 d [incr mycounte
0670: 72 5d 0a 09 7d 0a 0a 09 69 6e 74 65 67 72 69 74 r]..}...integrit
0680: 79 20 61 73 73 65 72 74 20 7b 0a 09 20 20 20 20 y assert {..
0690: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 63 [info exists myc
06a0: 73 74 79 70 65 28 24 63 73 74 79 70 65 29 5d 0a stype($cstype)].
06b0: 09 7d 20 7b 42 61 64 20 63 68 61 6e 67 65 73 65 .} {Bad changese
06c0: 74 20 74 79 70 65 20 27 24 63 73 74 79 70 65 27 t type '$cstype'
06d0: 2e 7d 0a 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 .}...set myproje
06e0: 63 74 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73 ct $project..s
06f0: 65 74 20 6d 79 74 79 70 65 20 20 20 20 20 20 24 et mytype $
0700: 63 73 74 79 70 65 0a 09 73 65 74 20 6d 79 74 79 cstype..set myty
0710: 70 65 6f 62 6a 20 20 20 3a 3a 76 63 3a 3a 66 6f peobj ::vc::fo
0720: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
0730: 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 3a s::project::rev:
0740: 3a 24 7b 63 73 74 79 70 65 7d 0a 09 73 65 74 20 :${cstype}..set
0750: 6d 79 73 72 63 69 64 09 24 73 72 63 69 64 0a 09 mysrcid.$srcid..
0760: 73 65 74 20 6d 79 69 74 65 6d 73 20 20 20 20 20 set myitems
0770: 24 69 74 65 6d 73 0a 09 73 65 74 20 6d 79 70 6f $items..set mypo
0780: 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 43 s {} ; # C
0790: 6f 6d 6d 69 74 20 6c 6f 63 61 74 69 6f 6e 20 69 ommit location i
07a0: 73 20 6e 6f 74 20 6b 6e 6f 77 6e 20 79 65 74 2e s not known yet.
07b0: 0a 0a 09 23 20 4b 65 65 70 20 74 72 61 63 6b 20 ...# Keep track
07c0: 6f 66 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 of the generated
07d0: 20 63 68 61 6e 67 65 73 65 74 73 20 61 6e 64 20 changesets and
07e0: 6f 66 20 74 68 65 20 69 6e 76 65 72 73 65 0a 09 of the inverse..
07f0: 23 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 69 # mapping from i
0800: 74 65 6d 73 20 74 6f 20 74 68 65 6d 2e 0a 09 6c tems to them...l
0810: 61 70 70 65 6e 64 20 6d 79 63 68 61 6e 67 65 73 append mychanges
0820: 65 74 73 20 20 20 24 73 65 6c 66 0a 09 6c 61 70 ets $self..lap
0830: 70 65 6e 64 20 6d 79 74 63 68 61 6e 67 65 73 65 pend mytchangese
0840: 74 73 28 24 63 73 74 79 70 65 29 20 24 73 65 6c ts($cstype) $sel
0850: 66 0a 09 73 65 74 20 20 20 20 20 6d 79 69 64 6d f..set myidm
0860: 61 70 28 24 6d 79 69 64 29 20 24 73 65 6c 66 0a ap($myid) $self.
0870: 09 66 6f 72 65 61 63 68 20 69 69 64 20 24 69 74 .foreach iid $it
0880: 65 6d 73 20 7b 0a 09 20 20 20 20 73 65 74 20 6b ems {.. set k
0890: 65 79 20 5b 6c 69 73 74 20 24 63 73 74 79 70 65 ey [list $cstype
08a0: 20 24 69 69 64 5d 0a 09 20 20 20 20 73 65 74 20 $iid].. set
08b0: 6d 79 69 74 65 6d 6d 61 70 28 24 6b 65 79 29 20 myitemmap($key)
08c0: 24 73 65 6c 66 0a 09 20 20 20 20 6c 61 70 70 65 $self.. lappe
08d0: 6e 64 20 6d 79 74 69 74 65 6d 73 20 24 6b 65 79 nd mytitems $key
08e0: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
08f0: 38 20 63 73 65 74 73 20 7b 4d 41 50 2b 20 69 74 8 csets {MAP+ it
0900: 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 6c 66 20 em <$key> $self
0910: 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d 0a 09 = [$self str]}..
0920: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
0930: 0a 20 20 20 20 64 65 73 74 72 75 63 74 6f 72 20 . destructor
0940: 7b 0a 09 23 20 54 68 65 20 6d 61 69 6e 20 74 68 {..# The main th
0950: 69 6e 67 20 69 73 20 74 6f 20 6b 65 65 70 20 74 ing is to keep t
0960: 72 61 63 6b 20 6f 66 20 74 68 65 20 69 74 65 6d rack of the item
0970: 6d 61 70 20 61 6e 64 20 72 65 6d 6f 76 65 0a 09 map and remove..
0980: 23 20 74 68 65 20 6f 62 6a 65 63 74 20 66 72 6f # the object fro
0990: 6d 20 69 74 2e 20 54 68 65 20 6c 69 73 74 73 20 m it. The lists
09a0: 6f 66 20 63 68 61 6e 67 65 73 65 74 73 20 28 6d of changesets (m
09b0: 79 63 68 61 6e 67 65 73 65 74 73 2c 0a 09 23 20 ychangesets,..#
09c0: 6d 79 74 63 68 61 6e 67 65 73 65 74 73 29 20 61 mytchangesets) a
09d0: 72 65 20 6e 6f 74 20 6d 61 69 6e 74 61 69 6e 65 re not maintaine
09e0: 64 20 28 3d 20 72 65 64 75 63 65 64 29 2c 20 66 d (= reduced), f
09f0: 6f 72 20 74 68 65 0a 09 23 20 6d 6f 6d 65 6e 74 or the..# moment
0a00: 2e 20 57 65 20 6d 61 79 20 62 65 20 61 62 6c 65 . We may be able
0a10: 20 74 6f 20 67 65 74 20 72 69 64 20 6f 66 20 74 to get rid of t
0a20: 68 69 73 20 65 6e 74 69 72 65 6c 79 2c 20 61 74 his entirely, at
0a30: 20 6c 65 61 73 74 0a 09 23 20 66 6f 72 20 28 64 least..# for (d
0a40: 65 29 63 6f 6e 73 74 72 75 63 74 69 6f 6e 20 61 e)construction a
0a50: 6e 64 20 70 61 73 73 20 49 6e 69 74 43 53 65 74 nd pass InitCSet
0a60: 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 69 69 64 s....foreach iid
0a70: 20 24 6d 79 69 74 65 6d 73 20 7b 0a 09 20 20 20 $myitems {..
0a80: 20 73 65 74 20 6b 65 79 20 5b 6c 69 73 74 20 24 set key [list $
0a90: 6d 79 74 79 70 65 20 24 69 69 64 5d 0a 09 20 20 mytype $iid]..
0aa0: 20 20 75 6e 73 65 74 20 6d 79 69 74 65 6d 6d 61 unset myitemma
0ab0: 70 28 24 6b 65 79 29 0a 09 20 20 20 20 6c 6f 67 p($key).. log
0ac0: 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 7b write 8 csets {
0ad0: 4d 41 50 2d 20 69 74 65 6d 20 3c 24 6b 65 79 3e MAP- item <$key>
0ae0: 20 24 73 65 6c 66 20 3d 20 5b 24 73 65 6c 66 20 $self = [$self
0af0: 73 74 72 5d 7d 0a 09 7d 0a 09 72 65 74 75 72 6e str]}..}..return
0b00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
0b10: 6f 64 20 73 74 72 20 7b 7d 20 7b 0a 09 73 65 74 od str {} {..set
0b20: 20 73 74 72 20 20 20 20 22 3c 22 0a 09 73 65 74 str "<"..set
0b30: 20 64 65 74 61 69 6c 20 22 22 0a 09 69 66 20 7b detail ""..if {
0b40: 5b 24 6d 79 74 79 70 65 6f 62 6a 20 62 79 73 79 [$mytypeobj bysy
0b50: 6d 62 6f 6c 5d 7d 20 7b 0a 09 20 20 20 20 73 65 mbol]} {.. se
0b60: 74 20 64 65 74 61 69 6c 20 22 20 27 5b 73 74 61 t detail " '[sta
0b70: 74 65 20 6f 6e 65 20 7b 0a 09 09 53 45 4c 45 43 te one {...SELEC
0b80: 54 20 53 2e 6e 61 6d 65 0a 09 09 46 52 4f 4d 20 T S.name...FROM
0b90: 20 20 73 79 6d 62 6f 6c 20 53 0a 09 09 57 48 45 symbol S...WHE
0ba0: 52 45 20 20 53 2e 73 69 64 20 3d 20 24 6d 79 73 RE S.sid = $mys
0bb0: 72 63 69 64 0a 09 20 20 20 20 7d 5d 27 22 0a 09 rcid.. }]'"..
0bc0: 7d 0a 09 61 70 70 65 6e 64 20 73 74 72 20 22 24 }..append str "$
0bd0: 6d 79 74 79 70 65 20 24 7b 6d 79 69 64 7d 24 7b mytype ${myid}${
0be0: 64 65 74 61 69 6c 7d 3e 22 0a 09 72 65 74 75 72 detail}>"..retur
0bf0: 6e 20 24 73 74 72 0a 20 20 20 20 7d 0a 0a 20 20 n $str. }..
0c00: 20 20 6d 65 74 68 6f 64 20 6c 6f 64 20 7b 7d 20 method lod {}
0c10: 7b 0a 09 72 65 74 75 72 6e 20 5b 24 6d 79 74 79 {..return [$myty
0c20: 70 65 6f 62 6a 20 63 73 5f 6c 6f 64 20 24 6d 79 peobj cs_lod $my
0c30: 69 74 65 6d 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 items]. }..
0c40: 20 20 6d 65 74 68 6f 64 20 69 64 20 20 20 20 7b method id {
0c50: 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 64 } { return $myid
0c60: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 74 }. method it
0c70: 65 6d 73 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 ems {} { return
0c80: 24 6d 79 74 69 74 65 6d 73 20 7d 0a 20 20 20 20 $mytitems }.
0c90: 6d 65 74 68 6f 64 20 64 61 74 61 20 20 7b 7d 20 method data {}
0ca0: 7b 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 { return [list $
0cb0: 6d 79 70 72 6f 6a 65 63 74 20 24 6d 79 74 79 70 myproject $mytyp
0cc0: 65 20 24 6d 79 73 72 63 69 64 5d 20 7d 0a 0a 20 e $mysrcid] }..
0cd0: 20 20 20 64 65 6c 65 67 61 74 65 20 6d 65 74 68 delegate meth
0ce0: 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 74 6f od bysymbol to
0cf0: 20 6d 79 74 79 70 65 6f 62 6a 0a 20 20 20 20 64 mytypeobj. d
0d00: 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 62 elegate method b
0d10: 79 72 65 76 69 73 69 6f 6e 20 74 6f 20 6d 79 74 yrevision to myt
0d20: 79 70 65 6f 62 6a 0a 20 20 20 20 64 65 6c 65 67 ypeobj. deleg
0d30: 61 74 65 20 6d 65 74 68 6f 64 20 69 73 62 72 61 ate method isbra
0d40: 6e 63 68 20 20 20 74 6f 20 6d 79 74 79 70 65 6f nch to mytypeo
0d50: 62 6a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 20 bj. delegate
0d60: 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 20 20 method istag
0d70: 20 20 74 6f 20 6d 79 74 79 70 65 6f 62 6a 0a 0a to mytypeobj..
0d80: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 70 6f method setpo
0d90: 73 20 7b 70 7d 20 7b 20 73 65 74 20 6d 79 70 6f s {p} { set mypo
0da0: 73 20 24 70 20 3b 20 72 65 74 75 72 6e 20 7d 0a s $p ; return }.
0db0: 20 20 20 20 6d 65 74 68 6f 64 20 70 6f 73 20 20 method pos
0dc0: 20 20 7b 7d 20 20 7b 20 72 65 74 75 72 6e 20 24 {} { return $
0dd0: 6d 79 70 6f 73 20 7d 0a 0a 20 20 20 20 6d 65 74 mypos }.. met
0de0: 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 75 63 hod determinesuc
0df0: 63 65 73 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 20 cessors {} {..#
0e00: 50 61 73 73 20 36 20 6f 70 65 72 61 74 69 6f 6e Pass 6 operation
0e10: 2e 20 43 6f 6d 70 75 74 65 20 70 72 6f 6a 65 63 . Compute projec
0e20: 74 2d 6c 65 76 65 6c 20 64 65 70 65 6e 64 65 6e t-level dependen
0e30: 63 69 65 73 20 66 72 6f 6d 0a 09 23 20 74 68 65 cies from..# the
0e40: 20 66 69 6c 65 2d 6c 65 76 65 6c 20 64 61 74 61 file-level data
0e50: 20 61 6e 64 20 73 61 76 65 20 69 74 20 62 61 63 and save it bac
0e60: 6b 20 74 6f 20 74 68 65 20 73 74 61 74 65 2e 20 k to the state.
0e70: 54 68 69 73 20 6d 61 79 0a 09 23 20 62 65 20 63 This may..# be c
0e80: 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 68 65 alled during the
0e90: 20 63 79 63 6c 65 20 62 72 65 61 6b 65 72 20 70 cycle breaker p
0ea0: 61 73 73 65 73 20 61 73 20 77 65 6c 6c 2c 20 74 asses as well, t
0eb0: 6f 20 61 64 6a 75 73 74 0a 09 23 20 74 68 65 20 o adjust..# the
0ec0: 73 75 63 63 65 73 73 6f 72 20 69 6e 66 6f 72 6d successor inform
0ed0: 61 74 69 6f 6e 20 6f 66 20 63 68 61 6e 67 65 73 ation of changes
0ee0: 65 74 73 20 77 68 69 63 68 20 61 72 65 20 74 68 ets which are th
0ef0: 65 0a 09 23 20 70 72 65 64 65 63 65 73 73 6f 72 e..# predecessor
0f00: 73 20 6f 66 20 64 72 6f 70 70 65 64 20 63 68 61 s of dropped cha
0f10: 6e 67 65 73 65 74 73 2e 20 46 6f 72 20 74 68 65 ngesets. For the
0f20: 6d 20 77 65 20 68 61 76 65 20 74 6f 0a 09 23 20 m we have to..#
0f30: 72 65 6d 6f 76 65 20 74 68 65 69 72 20 65 78 69 remove their exi
0f40: 73 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f sting informatio
0f50: 6e 20 66 69 72 73 74 20 62 65 66 6f 72 65 20 69 n first before i
0f60: 6e 73 65 72 74 69 6e 67 20 74 68 65 0a 09 23 20 nserting the..#
0f70: 6e 65 77 20 64 61 74 61 2e 0a 09 73 74 61 74 65 new data...state
0f80: 20 72 75 6e 20 7b 0a 09 20 20 20 20 44 45 4c 45 run {.. DELE
0f90: 54 45 20 46 52 4f 4d 20 63 73 73 75 63 63 65 73 TE FROM cssucces
0fa0: 73 6f 72 20 57 48 45 52 45 20 63 69 64 20 3d 20 sor WHERE cid =
0fb0: 24 6d 79 69 64 3b 0a 09 7d 0a 09 73 65 74 20 6c $myid;..}..set l
0fc0: 6f 6f 70 20 30 0a 09 66 6f 72 65 61 63 68 20 6e oop 0..foreach n
0fd0: 69 64 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 63 id [$mytypeobj c
0fe0: 73 5f 73 75 63 63 65 73 73 6f 72 73 20 24 6d 79 s_successors $my
0ff0: 69 74 65 6d 73 5d 20 7b 0a 09 20 20 20 20 73 74 items] {.. st
1000: 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 ate run {...INSE
1010: 52 54 20 49 4e 54 4f 20 63 73 73 75 63 63 65 73 RT INTO cssucces
1020: 73 6f 72 20 28 63 69 64 2c 20 20 6e 69 64 29 0a sor (cid, nid).
1030: 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 ..VALUES
1040: 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64 ($myid
1050: 2c 24 6e 69 64 29 0a 09 20 20 20 20 7d 0a 09 20 ,$nid).. }..
1060: 20 20 20 69 66 20 7b 24 6e 69 64 20 3d 3d 20 24 if {$nid == $
1070: 6d 79 69 64 7d 20 7b 20 73 65 74 20 6c 6f 6f 70 myid} { set loop
1080: 20 31 20 7d 0a 09 7d 0a 09 23 20 52 65 70 6f 72 1 }..}..# Repor
1090: 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d 70 t after the comp
10a0: 6c 65 74 65 20 73 74 72 75 63 74 75 72 65 20 68 lete structure h
10b0: 61 73 20 62 65 65 6e 20 73 61 76 65 64 2e 0a 09 as been saved...
10c0: 69 66 20 7b 24 6c 6f 6f 70 7d 20 7b 20 24 73 65 if {$loop} { $se
10d0: 6c 66 20 72 65 70 6f 72 74 6c 6f 6f 70 20 7d 0a lf reportloop }.
10e0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
10f0: 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 # result = li
1100: 73 74 20 28 63 68 61 6e 67 65 73 65 74 29 0a 20 st (changeset).
1110: 20 20 20 6d 65 74 68 6f 64 20 73 75 63 63 65 73 method succes
1120: 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 20 55 73 65 sors {} {..# Use
1130: 20 74 68 65 20 64 61 74 61 20 73 61 76 65 64 20 the data saved
1140: 62 79 20 70 61 73 73 20 36 2e 0a 09 72 65 74 75 by pass 6...retu
1150: 72 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 rn [struct::list
1160: 20 6d 61 70 20 5b 73 74 61 74 65 20 72 75 6e 20 map [state run
1170: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53 2e {.. SELECT S.
1180: 6e 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 nid.. FROM
1190: 63 73 73 75 63 63 65 73 73 6f 72 20 53 0a 09 20 cssuccessor S..
11a0: 20 20 20 57 48 45 52 45 20 20 53 2e 63 69 64 20 WHERE S.cid
11b0: 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 5b 6d 79 74 = $myid..}] [myt
11c0: 79 70 65 6d 65 74 68 6f 64 20 6f 66 5d 5d 0a 20 ypemethod of]].
11d0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 69 74 65 6d }.. # item
11e0: 20 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 0a -> list (item).
11f0: 20 20 20 20 6d 65 74 68 6f 64 20 6e 65 78 74 6d method nextm
1200: 61 70 20 7b 7d 20 7b 0a 09 24 6d 79 74 79 70 65 ap {} {..$mytype
1210: 6f 62 6a 20 73 75 63 63 65 73 73 6f 72 73 20 74 obj successors t
1220: 6d 70 20 24 6d 79 69 74 65 6d 73 0a 09 72 65 74 mp $myitems..ret
1230: 75 72 6e 20 5b 61 72 72 61 79 20 67 65 74 20 74 urn [array get t
1240: 6d 70 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d mp]. }.. m
1250: 65 74 68 6f 64 20 62 72 65 61 6b 69 6e 74 65 72 ethod breakinter
1260: 6e 61 6c 64 65 70 65 6e 64 65 6e 63 69 65 73 20 naldependencies
1270: 7b 63 76 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 {cv} {..upvar 1
1280: 24 63 76 20 63 6f 75 6e 74 65 72 0a 09 6c 6f 67 $cv counter..log
1290: 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 write 14 csets
12a0: 7b 5b 24 73 65 6c 66 20 73 74 72 5d 20 42 49 44 {[$self str] BID
12b0: 7d 0a 09 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 65 }..vc::tools::me
12c0: 6d 3a 3a 6d 61 72 6b 0a 09 23 23 0a 09 23 23 20 m::mark..##..##
12d0: 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f NOTE: This metho
12e0: 64 2c 20 6d 61 79 62 65 20 69 6e 20 63 6f 6e 6a d, maybe in conj
12f0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 69 74 73 unction with its
1300: 20 63 61 6c 6c 65 72 0a 09 23 23 20 20 20 20 20 caller..##
1310: 20 20 73 65 65 6d 73 20 74 6f 20 62 65 20 61 20 seems to be a
1320: 6d 65 6d 6f 72 79 20 68 6f 67 2c 20 65 73 70 65 memory hog, espe
1330: 63 69 61 6c 6c 79 20 66 6f 72 20 6c 61 72 67 65 cially for large
1340: 0a 09 23 23 20 20 20 20 20 20 20 63 68 61 6e 67 ..## chang
1350: 65 73 65 74 73 2c 20 77 69 74 68 20 27 6c 61 72 esets, with 'lar
1360: 67 65 27 20 6d 65 61 6e 69 6e 67 20 74 6f 20 68 ge' meaning to h
1370: 61 76 65 20 61 20 27 6c 6f 6e 67 20 6c 69 73 74 ave a 'long list
1380: 0a 09 23 23 20 20 20 20 20 20 20 6f 66 20 69 74 ..## of it
1390: 65 6d 73 2c 20 73 65 76 65 72 61 6c 20 74 68 6f ems, several tho
13a0: 75 73 61 6e 64 27 2e 20 49 6e 76 65 73 74 69 67 usand'. Investig
13b0: 61 74 65 20 77 68 65 72 65 20 74 68 65 0a 09 23 ate where the..#
13c0: 23 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 20 69 # memory i
13d0: 73 20 73 70 65 6e 74 20 61 6e 64 20 74 68 65 6e s spent and then
13e0: 20 6c 6f 6f 6b 20 66 6f 72 20 77 61 79 73 20 6f look for ways o
13f0: 66 20 72 65 63 74 69 66 79 69 6e 67 0a 09 23 23 f rectifying..##
1400: 20 20 20 20 20 20 20 74 68 65 20 70 72 6f 62 6c the probl
1410: 65 6d 2e 0a 09 23 23 0a 0a 09 23 20 54 68 69 73 em...##...# This
1420: 20 6d 65 74 68 6f 64 20 69 6e 73 70 65 63 74 73 method inspects
1430: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 73 20 the changesets
1440: 66 6f 72 20 69 6e 74 65 72 6e 61 6c 0a 09 23 20 for internal..#
1450: 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 4e 6f dependencies. No
1460: 74 68 69 6e 67 20 69 73 20 64 6f 6e 65 20 69 66 thing is done if
1470: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 0a 09 23 there are no..#
1480: 20 73 75 63 68 2e 20 4f 74 68 65 72 77 69 73 65 such. Otherwise
1490: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 69 the changeset i
14a0: 73 20 73 70 6c 69 74 20 69 6e 74 6f 20 61 20 73 s split into a s
14b0: 65 74 20 6f 66 0a 09 23 20 66 72 61 67 6d 65 6e et of..# fragmen
14c0: 74 73 20 77 69 74 68 6f 75 74 20 69 6e 74 65 72 ts without inter
14d0: 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 nal dependencies
14e0: 2c 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74 , transforming t
14f0: 68 65 0a 09 23 20 69 6e 74 65 72 6e 61 6c 20 64 he..# internal d
1500: 65 70 65 6e 64 65 6e 63 69 65 73 20 69 6e 74 6f ependencies into
1510: 20 65 78 74 65 72 6e 61 6c 20 6f 6e 65 73 2e 20 external ones.
1520: 54 68 65 20 6e 65 77 20 63 68 61 6e 67 65 73 65 The new changese
1530: 74 73 0a 09 23 20 61 72 65 20 61 64 64 65 64 20 ts..# are added
1540: 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 to the list of a
1550: 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a ll changesets...
1560: 09 23 20 57 65 20 70 65 72 66 6f 72 6d 20 61 6c .# We perform al
1570: 6c 20 6e 65 63 65 73 73 61 72 79 20 73 70 6c 69 l necessary spli
1580: 74 73 20 69 6e 20 6f 6e 65 20 67 6f 2c 20 69 6e ts in one go, in
1590: 73 74 65 61 64 20 6f 66 20 6f 6e 6c 79 0a 09 23 stead of only..#
15a0: 20 6f 6e 65 2e 20 54 68 65 20 70 72 65 76 69 6f one. The previo
15b0: 75 73 20 61 6c 67 6f 72 69 74 68 6d 2c 20 61 64 us algorithm, ad
15c0: 61 70 74 65 64 20 66 72 6f 6d 20 63 76 73 32 73 apted from cvs2s
15d0: 76 6e 2c 20 63 6f 6d 70 75 74 65 64 0a 09 23 20 vn, computed..#
15e0: 61 20 6c 6f 74 20 6f 66 20 73 74 61 74 65 20 77 a lot of state w
15f0: 68 69 63 68 20 77 61 73 20 74 68 72 6f 77 6e 20 hich was thrown
1600: 61 77 61 79 20 61 6e 64 20 74 68 65 6e 20 63 6f away and then co
1610: 6d 70 75 74 65 64 20 61 67 61 69 6e 0a 09 23 20 mputed again..#
1620: 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 for each of the
1630: 66 72 61 67 6d 65 6e 74 73 2e 20 49 74 20 73 68 fragments. It sh
1640: 6f 75 6c 64 20 62 65 20 65 61 73 69 65 72 20 74 ould be easier t
1650: 6f 20 75 70 64 61 74 65 20 61 6e 64 0a 09 23 20 o update and..#
1660: 72 65 75 73 65 20 74 68 61 74 20 73 74 61 74 65 reuse that state
1670: 2e 0a 0a 09 23 20 54 68 65 20 63 6f 64 65 20 63 ....# The code c
1680: 68 65 63 6b 73 20 6f 6e 6c 79 20 73 75 63 63 65 hecks only succe
1690: 73 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 69 65 ssor dependencie
16a0: 73 2c 20 61 73 20 74 68 69 73 0a 09 23 20 61 75 s, as this..# au
16b0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 76 65 tomatically cove
16c0: 72 73 20 74 68 65 20 70 72 65 64 65 63 65 73 73 rs the predecess
16d0: 6f 72 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 or dependencies
16e0: 61 73 20 77 65 6c 6c 20 28 41 0a 09 23 20 73 75 as well (A..# su
16f0: 63 63 65 73 73 6f 72 20 64 65 70 65 6e 64 65 6e ccessor dependen
1700: 63 79 20 61 20 2d 3e 20 62 20 69 73 20 61 6c 73 cy a -> b is als
1710: 6f 20 61 20 70 72 65 64 65 63 65 73 73 6f 72 20 o a predecessor
1720: 64 65 70 65 6e 64 65 6e 63 79 0a 09 23 20 62 20 dependency..# b
1730: 2d 3e 20 61 29 2e 0a 0a 09 23 20 41 72 72 61 79 -> a)....# Array
1740: 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 of dependencies
1750: 20 28 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c (parent -> chil
1760: 64 29 2e 20 54 68 69 73 20 69 73 20 70 75 6c 6c d). This is pull
1770: 65 64 20 66 72 6f 6d 0a 09 23 20 74 68 65 20 73 ed from..# the s
1780: 74 61 74 65 2c 20 61 6e 64 20 6c 69 6d 69 74 65 tate, and limite
1790: 64 20 74 6f 20 73 75 63 63 65 73 73 6f 72 73 20 d to successors
17a0: 77 69 74 68 69 6e 20 74 68 65 20 63 68 61 6e 67 within the chang
17b0: 65 73 65 74 2e 0a 0a 09 61 72 72 61 79 20 73 65 eset....array se
17c0: 74 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 7b t dependencies {
17d0: 7d 0a 09 24 6d 79 74 79 70 65 6f 62 6a 20 69 6e }..$mytypeobj in
17e0: 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 ternalsuccessors
17f0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 6d dependencies $m
1800: 79 69 74 65 6d 73 0a 09 69 66 20 7b 21 5b 61 72 yitems..if {![ar
1810: 72 61 79 20 73 69 7a 65 20 64 65 70 65 6e 64 65 ray size depende
1820: 6e 63 69 65 73 5d 7d 20 7b 0a 09 20 20 20 20 72 ncies]} {.. r
1830: 65 74 75 72 6e 20 7b 7d 0a 09 7d 20 3b 20 23 20 eturn {}..} ; #
1840: 4e 6f 74 68 69 6e 67 20 74 6f 20 62 72 65 61 6b Nothing to break
1850: 2e 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20 ....log write 5
1860: 63 73 65 74 73 20 2e 2e 2e 5b 24 73 65 6c 66 20 csets ...[$self
1870: 73 74 72 5d 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e str]............
1880: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
1890: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
18a0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 0a 09 76 63 3a .............vc:
18b0: 3a 74 6f 6f 6c 73 3a 3a 6d 65 6d 3a 3a 6d 61 72 :tools::mem::mar
18c0: 6b 0a 0a 09 23 20 57 65 20 68 61 76 65 20 69 6e k...# We have in
18d0: 74 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 ternal dependenc
18e0: 69 65 73 20 74 6f 20 62 72 65 61 6b 2e 20 57 65 ies to break. We
18f0: 20 6e 6f 77 20 69 74 65 72 61 74 65 20 6f 76 65 now iterate ove
1900: 72 0a 09 23 20 61 6c 6c 20 70 6f 73 69 74 69 6f r..# all positio
1910: 6e 73 20 69 6e 20 74 68 65 20 6c 69 73 74 20 28 ns in the list (
1920: 77 68 69 63 68 20 69 73 20 63 68 72 6f 6e 6f 6c which is chronol
1930: 6f 67 69 63 61 6c 2c 20 61 74 20 6c 65 61 73 74 ogical, at least
1940: 0a 09 23 20 61 73 20 66 61 72 20 61 73 20 74 68 ..# as far as th
1950: 65 20 74 69 6d 65 73 74 61 6d 70 73 20 61 72 65 e timestamps are
1960: 20 63 6f 72 72 65 63 74 20 61 6e 64 20 75 6e 69 correct and uni
1970: 71 75 65 29 20 61 6e 64 0a 09 23 20 64 65 74 65 que) and..# dete
1980: 72 6d 69 6e 65 20 74 68 65 20 62 65 73 74 20 70 rmine the best p
1990: 6f 73 69 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 osition for the
19a0: 62 72 65 61 6b 2c 20 62 79 20 74 72 79 69 6e 67 break, by trying
19b0: 20 74 6f 0a 09 23 20 62 72 65 61 6b 20 61 73 20 to..# break as
19c0: 6d 61 6e 79 20 64 65 70 65 6e 64 65 6e 63 69 65 many dependencie
19d0: 73 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e s as possible in
19e0: 20 6f 6e 65 20 67 6f 2e 20 57 68 65 6e 20 61 0a one go. When a.
19f0: 09 23 20 62 72 65 61 6b 20 77 61 73 20 66 6f 75 .# break was fou
1a00: 6e 64 20 74 68 69 73 20 69 73 20 72 65 64 6f 6e nd this is redon
1a10: 65 20 66 6f 72 20 74 68 65 20 66 72 61 67 6d 65 e for the fragme
1a20: 6e 74 73 20 63 6f 6d 69 6e 67 20 61 6e 64 0a 09 nts coming and..
1a30: 23 20 61 66 74 65 72 2c 20 61 66 74 65 72 20 75 # after, after u
1a40: 70 64 69 6e 67 20 74 68 65 20 63 72 6f 73 73 69 pding the crossi
1a50: 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a ng information..
1a60: 0a 09 23 20 44 61 74 61 20 73 74 72 75 63 74 75 ..# Data structu
1a70: 72 65 73 3a 0a 09 23 20 4d 61 70 3a 20 20 50 4f res:..# Map: PO
1a80: 53 20 20 20 72 65 76 69 73 69 6f 6e 20 69 64 20 S revision id
1a90: 20 20 20 20 20 2d 3e 20 70 6f 73 69 74 69 6f 6e -> position
1aa0: 20 69 6e 20 6c 69 73 74 2e 0a 09 23 20 20 20 20 in list...#
1ab0: 20 20 20 43 52 4f 53 53 20 70 6f 73 69 74 69 6f CROSS positio
1ac0: 6e 20 69 6e 20 6c 69 73 74 20 2d 3e 20 6e 75 6d n in list -> num
1ad0: 62 65 72 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 ber of dependenc
1ae0: 69 65 73 20 63 72 6f 73 73 69 6e 67 20 69 74 0a ies crossing it.
1af0: 09 23 20 20 20 20 20 20 20 44 45 50 43 20 20 64 .# DEPC d
1b00: 65 70 65 6e 64 65 6e 63 79 20 20 20 20 20 20 20 ependency
1b10: 2d 3e 20 70 6f 73 69 74 69 6f 6e 73 20 69 74 20 -> positions it
1b20: 63 72 6f 73 73 65 73 0a 09 23 20 4c 69 73 74 3a crosses..# List:
1b30: 20 52 41 4e 47 45 20 4f 66 20 74 68 65 20 70 6f RANGE Of the po
1b40: 73 69 74 69 6f 6e 73 20 69 74 73 65 6c 66 2e 0a sitions itself..
1b50: 09 23 20 4d 61 70 3a 20 20 44 45 4c 54 41 20 70 .# Map: DELTA p
1b60: 6f 73 69 74 69 6f 6e 20 69 6e 20 6c 69 73 74 20 osition in list
1b70: 2d 3e 20 74 69 6d 65 20 64 65 6c 74 61 20 62 65 -> time delta be
1b80: 74 77 65 65 6e 20 69 74 73 20 72 65 76 69 73 69 tween its revisi
1b90: 6f 6e 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 on..#
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 65 and the ne
1bc0: 78 74 2c 20 69 66 20 61 6e 79 2e 0a 09 23 20 41 xt, if any...# A
1bd0: 20 64 65 70 65 6e 64 65 6e 63 79 20 69 73 20 61 dependency is a
1be0: 20 73 69 6e 67 6c 65 2d 65 6c 65 6d 65 6e 74 20 single-element
1bf0: 6d 61 70 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 map parent -> ch
1c00: 69 6c 64 0a 0a 09 23 20 49 6e 69 74 69 61 6c 69 ild...# Initiali
1c10: 7a 65 42 72 65 61 6b 53 74 61 74 65 20 69 6e 69 zeBreakState ini
1c20: 74 69 61 6c 69 7a 65 73 20 74 68 65 69 72 20 63 tializes their c
1c30: 6f 6e 74 65 6e 74 73 20 61 66 74 65 72 0a 09 23 ontents after..#
1c40: 20 75 70 76 61 72 27 69 6e 67 20 74 68 65 6d 20 upvar'ing them
1c50: 66 72 6f 6d 20 74 68 69 73 20 73 63 6f 70 65 2e from this scope.
1c60: 20 49 74 20 75 73 65 73 20 74 68 65 20 69 6e 66 It uses the inf
1c70: 6f 72 6d 61 74 69 6f 6e 20 69 6e 0a 09 23 20 44 ormation in..# D
1c80: 45 50 45 4e 44 45 4e 43 49 45 53 20 74 6f 20 64 EPENDENCIES to d
1c90: 6f 20 73 6f 2e 0a 0a 09 49 6e 69 74 69 61 6c 69 o so....Initiali
1ca0: 7a 65 42 72 65 61 6b 53 74 61 74 65 20 24 6d 79 zeBreakState $my
1cb0: 69 74 65 6d 73 0a 0a 09 73 65 74 20 66 72 61 67 items...set frag
1cc0: 6d 65 6e 74 73 20 7b 7d 0a 09 73 65 74 20 6e 65 ments {}..set ne
1cd0: 77 20 20 20 20 20 20 20 5b 6c 69 73 74 20 24 72 w [list $r
1ce0: 61 6e 67 65 5d 0a 09 61 72 72 61 79 20 73 65 74 ange]..array set
1cf0: 20 62 72 65 61 6b 73 20 7b 7d 0a 0a 09 23 20 49 breaks {}...# I
1d00: 6e 73 74 65 61 64 20 6f 66 20 6f 6e 65 20 6c 69 nstead of one li
1d10: 73 74 20 68 6f 6c 64 69 6e 67 20 62 6f 74 68 20 st holding both
1d20: 70 72 6f 63 65 73 73 65 64 20 61 6e 64 20 70 65 processed and pe
1d30: 6e 64 69 6e 67 0a 09 23 20 66 72 61 67 6d 65 6e nding..# fragmen
1d40: 74 73 20 77 65 20 75 73 65 20 74 77 6f 2c 20 6f ts we use two, o
1d50: 6e 65 20 66 6f 72 20 74 68 65 20 66 72 61 6d 65 ne for the frame
1d60: 6e 74 73 20 74 6f 20 70 72 6f 63 65 73 73 2c 20 nts to process,
1d70: 6f 6e 65 0a 09 23 20 74 6f 20 68 6f 6c 64 20 74 one..# to hold t
1d80: 68 65 20 6e 65 77 20 66 72 61 67 6d 65 6e 74 73 he new fragments
1d90: 2c 20 61 6e 64 20 74 68 65 20 6c 61 74 74 65 72 , and the latter
1da0: 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 is copied to th
1db0: 65 0a 09 23 20 66 6f 72 6d 65 72 20 77 68 65 6e e..# former when
1dc0: 20 74 68 65 79 20 72 75 6e 20 6f 75 74 2e 20 54 they run out. T
1dd0: 68 69 73 20 6b 65 65 70 73 20 74 68 65 20 6c 69 his keeps the li
1de0: 73 74 20 6f 66 20 70 65 6e 64 69 6e 67 0a 09 23 st of pending..#
1df0: 20 66 72 61 67 6d 65 6e 74 73 20 73 68 6f 72 74 fragments short
1e00: 20 77 69 74 68 6f 75 74 20 73 61 63 72 69 66 69 without sacrifi
1e10: 63 69 6e 67 20 73 70 65 65 64 20 62 79 20 73 68 cing speed by sh
1e20: 69 66 74 69 6e 67 20 73 74 75 66 66 0a 09 23 20 ifting stuff..#
1e30: 64 6f 77 6e 2e 20 57 65 20 65 73 70 65 63 69 61 down. We especia
1e40: 6c 6c 79 20 64 72 6f 70 20 74 68 65 20 6d 65 6d lly drop the mem
1e50: 6f 72 79 20 6f 66 20 66 72 61 67 6d 65 6e 74 73 ory of fragments
1e60: 20 62 72 6f 6b 65 6e 0a 09 23 20 64 75 72 69 6e broken..# durin
1e70: 67 20 70 72 6f 63 65 73 73 69 6e 67 20 61 66 74 g processing aft
1e80: 65 72 20 61 20 73 68 6f 72 74 20 74 69 6d 65 2c er a short time,
1e90: 20 69 6e 73 74 65 61 64 20 6f 66 20 6c 65 74 74 instead of lett
1ea0: 69 6e 67 20 69 74 0a 09 23 20 63 6f 6e 73 75 6d ing it..# consum
1eb0: 65 20 6d 65 6d 6f 72 79 2e 0a 0a 09 77 68 69 6c e memory....whil
1ec0: 65 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6e 65 77 e {[llength $new
1ed0: 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 70 ]} {... set p
1ee0: 65 6e 64 69 6e 67 20 24 6e 65 77 0a 09 20 20 20 ending $new..
1ef0: 20 73 65 74 20 6e 65 77 20 20 20 20 20 7b 7d 0a set new {}.
1f00: 09 20 20 20 20 73 65 74 20 61 74 20 20 20 20 20 . set at
1f10: 20 30 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 0... while {
1f20: 24 61 74 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 $at < [llength $
1f30: 70 65 6e 64 69 6e 67 5d 7d 20 7b 0a 09 09 73 65 pending]} {...se
1f40: 74 20 63 75 72 72 65 6e 74 20 5b 6c 69 6e 64 65 t current [linde
1f50: 78 20 24 70 65 6e 64 69 6e 67 20 24 61 74 5d 0a x $pending $at].
1f60: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 36 20 63 ...log write 6 c
1f70: 73 65 74 73 20 7b 2e 20 2e 20 2e 2e 20 2e 2e 2e sets {. . .. ...
1f80: 20 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 20 ..... ........
1f90: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 7d 0a 09 .............}..
1fa0: 09 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 65 .log write 6 cse
1fb0: 74 73 20 7b 53 63 68 65 64 75 6c 65 64 20 20 20 ts {Scheduled
1fc0: 5b 6a 6f 69 6e 20 5b 50 52 73 20 5b 6c 72 61 6e [join [PRs [lran
1fd0: 67 65 20 24 70 65 6e 64 69 6e 67 20 24 61 74 20 ge $pending $at
1fe0: 65 6e 64 5d 5d 20 7b 20 7d 5d 7d 0a 09 09 6c 6f end]] { }]}...lo
1ff0: 67 20 77 72 69 74 65 20 36 20 63 73 65 74 73 20 g write 6 csets
2000: 7b 43 6f 6e 73 69 64 65 72 69 6e 67 20 5b 50 52 {Considering [PR
2010: 20 24 63 75 72 72 65 6e 74 5d 20 5c 5b 24 61 74 $current] \[$at
2020: 2f 5b 6c 6c 65 6e 67 74 68 20 24 70 65 6e 64 69 /[llength $pendi
2030: 6e 67 5d 5c 5d 7d 0a 0a 09 09 73 65 74 20 62 65 ng]\]}....set be
2040: 73 74 20 5b 46 69 6e 64 42 65 73 74 42 72 65 61 st [FindBestBrea
2050: 6b 20 24 63 75 72 72 65 6e 74 5d 0a 0a 09 09 69 k $current]....i
2060: 66 20 7b 24 62 65 73 74 20 3c 20 30 7d 20 7b 0a f {$best < 0} {.
2070: 09 09 20 20 20 20 23 20 54 68 65 20 69 6e 73 70 .. # The insp
2080: 65 63 74 65 64 20 72 61 6e 67 65 20 68 61 73 20 ected range has
2090: 6e 6f 20 69 6e 74 65 72 6e 61 6c 0a 09 09 20 20 no internal...
20a0: 20 20 23 20 64 65 70 65 6e 64 65 6e 63 69 65 73 # dependencies
20b0: 2e 20 54 68 69 73 20 69 73 20 61 20 63 6f 6d 70 . This is a comp
20c0: 6c 65 74 65 20 66 72 61 67 6d 65 6e 74 2e 0a 09 lete fragment...
20d0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 66 72 61 . lappend fra
20e0: 67 6d 65 6e 74 73 20 24 63 75 72 72 65 6e 74 0a gments $current.
20f0: 0a 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 ... log write
2100: 20 36 20 63 73 65 74 73 20 22 4e 6f 20 62 72 65 6 csets "No bre
2110: 61 6b 73 2c 20 66 69 6e 61 6c 22 0a 09 09 7d 20 aks, final"...}
2120: 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 23 20 53 else {... # S
2130: 70 6c 69 74 20 74 68 65 20 72 61 6e 67 65 20 61 plit the range a
2140: 6e 64 20 73 63 68 65 64 75 6c 65 20 74 68 65 20 nd schedule the
2150: 72 65 73 75 6c 74 69 6e 67 0a 09 09 20 20 20 20 resulting...
2160: 23 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 20 # fragments for
2170: 66 75 72 74 68 65 72 20 69 6e 73 70 65 63 74 69 further inspecti
2180: 6f 6e 2e 20 52 65 6d 65 6d 62 65 72 20 74 68 65 on. Remember the
2190: 0a 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 20 ... # number
21a0: 6f 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 of dependencies
21b0: 63 75 74 20 62 65 66 6f 72 65 20 77 65 20 72 65 cut before we re
21c0: 6d 6f 76 65 20 74 68 65 6d 0a 09 09 20 20 20 20 move them...
21d0: 23 20 66 72 6f 6d 20 63 6f 6e 73 69 64 65 72 61 # from considera
21e0: 74 69 6f 6e 2c 20 66 6f 72 20 64 6f 63 75 6d 65 tion, for docume
21f0: 6e 74 61 74 69 6f 6e 20 6c 61 74 65 72 2e 0a 0a ntation later...
2200: 09 09 20 20 20 20 73 65 74 20 62 72 65 61 6b 73 .. set breaks
2210: 28 24 62 65 73 74 29 20 24 63 72 6f 73 73 28 24 ($best) $cross($
2220: 62 65 73 74 29 0a 0a 09 09 20 20 20 20 6c 6f 67 best).... log
2230: 20 77 72 69 74 65 20 36 20 63 73 65 74 73 20 22 write 6 csets "
2240: 42 65 73 74 20 62 72 65 61 6b 20 40 20 24 62 65 Best break @ $be
2250: 73 74 2c 20 63 75 74 74 69 6e 67 20 5b 6e 73 70 st, cutting [nsp
2260: 20 24 63 72 6f 73 73 28 24 62 65 73 74 29 20 64 $cross($best) d
2270: 65 70 65 6e 64 65 6e 63 79 20 64 65 70 65 6e 64 ependency depend
2280: 65 6e 63 69 65 73 5d 22 0a 0a 09 09 20 20 20 20 encies]"....
2290: 23 20 4e 6f 74 65 3a 20 54 68 65 20 76 61 6c 75 # Note: The valu
22a0: 65 20 6f 66 20 62 65 73 74 20 69 73 20 61 6e 20 e of best is an
22b0: 61 62 6f 6c 75 74 65 20 6c 6f 63 61 74 69 6f 6e abolute location
22c0: 0a 09 09 20 20 20 20 23 20 69 6e 20 6d 79 69 74 ... # in myit
22d0: 65 6d 73 2e 20 55 73 65 20 74 68 65 20 73 74 61 ems. Use the sta
22e0: 72 74 20 6f 66 20 63 75 72 72 65 6e 74 20 74 6f rt of current to
22f0: 20 6d 61 6b 65 20 69 74 0a 09 09 20 20 20 20 23 make it... #
2300: 20 61 6e 20 69 6e 64 65 78 20 61 62 73 6f 6c 75 an index absolu
2310: 74 65 20 74 6f 20 63 75 72 72 65 6e 74 2e 0a 0a te to current...
2320: 09 09 20 20 20 20 73 65 74 20 62 72 65 6c 20 5b .. set brel [
2330: 65 78 70 72 20 7b 24 62 65 73 74 20 2d 20 5b 6c expr {$best - [l
2340: 69 6e 64 65 78 20 24 63 75 72 72 65 6e 74 20 30 index $current 0
2350: 5d 7d 5d 0a 09 09 20 20 20 20 73 65 74 20 62 6e ]}]... set bn
2360: 65 78 74 20 24 62 72 65 6c 20 3b 20 69 6e 63 72 ext $brel ; incr
2370: 20 62 6e 65 78 74 0a 09 09 20 20 20 20 73 65 74 bnext... set
2380: 20 66 72 61 67 62 65 66 6f 72 65 20 5b 6c 72 61 fragbefore [lra
2390: 6e 67 65 20 24 63 75 72 72 65 6e 74 20 30 20 24 nge $current 0 $
23a0: 62 72 65 6c 5d 0a 09 09 20 20 20 20 73 65 74 20 brel]... set
23b0: 66 72 61 67 61 66 74 65 72 20 20 5b 6c 72 61 6e fragafter [lran
23c0: 67 65 20 24 63 75 72 72 65 6e 74 20 24 62 6e 65 ge $current $bne
23d0: 78 74 20 65 6e 64 5d 0a 0a 09 09 20 20 20 20 6c xt end].... l
23e0: 6f 67 20 77 72 69 74 65 20 36 20 63 73 65 74 73 og write 6 csets
23f0: 20 22 4e 65 77 20 70 69 65 63 65 73 20 20 5b 50 "New pieces [P
2400: 52 20 24 66 72 61 67 62 65 66 6f 72 65 5d 20 5b R $fragbefore] [
2410: 50 52 20 24 66 72 61 67 61 66 74 65 72 5d 22 0a PR $fragafter]".
2420: 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 ... integrity
2430: 20 61 73 73 65 72 74 20 7b 5b 6c 6c 65 6e 67 74 assert {[llengt
2440: 68 20 24 66 72 61 67 62 65 66 6f 72 65 5d 7d 20 h $fragbefore]}
2450: 7b 46 6f 75 6e 64 20 7a 65 72 6f 2d 6c 65 6e 67 {Found zero-leng
2460: 74 68 20 66 72 61 67 6d 65 6e 74 20 61 74 20 74 th fragment at t
2470: 68 65 20 62 65 67 69 6e 6e 69 6e 67 7d 0a 09 09 he beginning}...
2480: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 integrity as
2490: 73 65 72 74 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 sert {[llength $
24a0: 66 72 61 67 61 66 74 65 72 5d 7d 20 20 7b 46 6f fragafter]} {Fo
24b0: 75 6e 64 20 7a 65 72 6f 2d 6c 65 6e 67 74 68 20 und zero-length
24c0: 66 72 61 67 6d 65 6e 74 20 61 74 20 74 68 65 20 fragment at the
24d0: 65 6e 64 7d 0a 0a 09 09 20 20 20 20 6c 61 70 70 end}.... lapp
24e0: 65 6e 64 20 6e 65 77 20 24 66 72 61 67 62 65 66 end new $fragbef
24f0: 6f 72 65 20 24 66 72 61 67 61 66 74 65 72 0a 09 ore $fragafter..
2500: 09 20 20 20 20 43 75 74 41 74 20 24 62 65 73 74 . CutAt $best
2510: 0a 09 09 7d 0a 0a 09 09 69 6e 63 72 20 61 74 0a ...}....incr at.
2520: 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 6c 6f 67 20 . }..}...log
2530: 77 72 69 74 65 20 36 20 63 73 65 74 73 20 22 2e write 6 csets ".
2540: 20 2e 20 2e 2e 20 2e 2e 2e 20 2e 2e 2e 2e 2e 20 . .. ... .....
2550: 2e 2e 2e 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e ........ .......
2560: 2e 2e 2e 2e 2e 2e 22 0a 0a 09 23 20 28 2a 29 20 ......"...# (*)
2570: 57 65 20 63 6c 65 61 72 20 6f 75 74 20 74 68 65 We clear out the
2580: 20 61 73 73 6f 63 69 61 74 65 64 20 70 61 72 74 associated part
2590: 20 6f 66 20 74 68 65 20 6d 79 69 74 65 6d 6d 61 of the myitemma
25a0: 70 0a 09 23 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 p..# in-memory i
25b0: 6e 64 65 78 20 69 6e 20 70 72 65 70 61 72 61 74 ndex in preparat
25c0: 69 6f 6e 20 66 6f 72 20 6e 65 77 20 64 61 74 61 ion for new data
25d0: 2e 20 41 20 73 69 6d 70 6c 65 20 75 6e 73 65 74 . A simple unset
25e0: 0a 09 23 20 69 73 20 65 6e 6f 75 67 68 2c 20 77 ..# is enough, w
25f0: 65 20 68 61 76 65 20 6e 6f 20 73 79 6d 62 6f 6c e have no symbol
2600: 20 63 68 61 6e 67 65 73 65 74 73 20 61 74 20 74 changesets at t
2610: 68 69 73 20 74 69 6d 65 2c 20 61 6e 64 0a 09 23 his time, and..#
2620: 20 74 68 75 73 20 6e 65 76 65 72 20 6d 6f 72 65 thus never more
2630: 20 74 68 61 6e 20 6f 6e 65 20 72 65 66 65 72 65 than one refere
2640: 6e 63 65 20 69 6e 20 74 68 65 20 6c 69 73 74 2e nce in the list.
2650: 0a 0a 09 66 6f 72 65 61 63 68 20 69 69 64 20 24 ...foreach iid $
2660: 6d 79 69 74 65 6d 73 20 7b 0a 09 20 20 20 20 73 myitems {.. s
2670: 65 74 20 6b 65 79 20 5b 6c 69 73 74 20 24 6d 79 et key [list $my
2680: 74 79 70 65 20 24 69 69 64 5d 0a 09 20 20 20 20 type $iid]..
2690: 75 6e 73 65 74 20 6d 79 69 74 65 6d 6d 61 70 28 unset myitemmap(
26a0: 24 6b 65 79 29 0a 09 20 20 20 20 6c 6f 67 20 77 $key).. log w
26b0: 72 69 74 65 20 38 20 63 73 65 74 73 20 7b 4d 41 rite 8 csets {MA
26c0: 50 2d 20 69 74 65 6d 20 3c 24 6b 65 79 3e 20 24 P- item <$key> $
26d0: 73 65 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 self = [$self st
26e0: 72 5d 7d 0a 09 7d 0a 0a 09 23 20 43 72 65 61 74 r]}..}...# Creat
26f0: 65 20 63 68 61 6e 67 65 73 65 74 73 20 66 6f 72 e changesets for
2700: 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 2c 20 the fragments,
2710: 72 65 75 73 69 6e 67 20 74 68 65 20 63 75 72 72 reusing the curr
2720: 65 6e 74 20 6f 6e 65 0a 09 23 20 66 6f 72 20 74 ent one..# for t
2730: 68 65 20 66 69 72 73 74 20 66 72 61 67 6d 65 6e he first fragmen
2740: 74 2e 20 57 65 20 73 6f 72 74 20 74 68 65 6d 20 t. We sort them
2750: 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 6c 6c 6f in order to allo
2760: 77 0a 09 23 20 63 68 65 63 6b 69 6e 67 20 66 6f w..# checking fo
2770: 72 20 67 61 70 73 20 61 6e 64 20 6e 69 63 65 20 r gaps and nice
2780: 6d 65 73 73 61 67 65 73 2e 0a 0a 09 73 65 74 20 messages....set
2790: 6e 65 77 63 73 65 74 73 20 20 7b 7d 0a 09 73 65 newcsets {}..se
27a0: 74 20 66 72 61 67 6d 65 6e 74 73 20 5b 6c 73 6f t fragments [lso
27b0: 72 74 20 2d 69 6e 64 65 78 20 30 20 2d 69 6e 74 rt -index 0 -int
27c0: 65 67 65 72 20 24 66 72 61 67 6d 65 6e 74 73 5d eger $fragments]
27d0: 0a 0a 09 23 70 75 74 73 20 5c 74 2e 5b 6a 6f 69 ...#puts \t.[joi
27e0: 6e 20 5b 50 52 73 20 24 66 72 61 67 6d 65 6e 74 n [PRs $fragment
27f0: 73 5d 20 2e 5c 6e 5c 74 2e 5d 2e 0a 0a 09 42 6f s] .\n\t.]....Bo
2800: 72 64 65 72 20 5b 6c 69 6e 64 65 78 20 24 66 72 rder [lindex $fr
2810: 61 67 6d 65 6e 74 73 20 30 5d 20 66 69 72 73 74 agments 0] first
2820: 73 20 66 69 72 73 74 65 0a 0a 09 69 6e 74 65 67 s firste...integ
2830: 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 66 69 rity assert {$fi
2840: 72 73 74 73 20 3d 3d 20 30 7d 20 7b 42 61 64 20 rsts == 0} {Bad
2850: 66 72 61 67 6d 65 6e 74 20 73 74 61 72 74 20 40 fragment start @
2860: 20 24 66 69 72 73 74 73 2c 20 67 61 70 2c 20 6f $firsts, gap, o
2870: 72 20 62 65 66 6f 72 65 20 62 65 67 69 6e 6e 69 r before beginni
2880: 6e 67 20 6f 66 20 74 68 65 20 72 61 6e 67 65 7d ng of the range}
2890: 0a 0a 09 73 65 74 20 6c 61 73 74 65 20 24 66 69 ...set laste $fi
28a0: 72 73 74 65 0a 09 66 6f 72 65 61 63 68 20 66 72 rste..foreach fr
28b0: 61 67 6d 65 6e 74 20 5b 6c 72 61 6e 67 65 20 24 agment [lrange $
28c0: 66 72 61 67 6d 65 6e 74 73 20 31 20 65 6e 64 5d fragments 1 end]
28d0: 20 7b 0a 09 20 20 20 20 42 6f 72 64 65 72 20 24 {.. Border $
28e0: 66 72 61 67 6d 65 6e 74 20 73 20 65 0a 09 20 20 fragment s e..
28f0: 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 integrity asse
2900: 72 74 20 7b 24 6c 61 73 74 65 20 3d 3d 20 28 24 rt {$laste == ($
2910: 73 20 2d 20 31 29 7d 20 7b 42 61 64 20 66 72 61 s - 1)} {Bad fra
2920: 67 6d 65 6e 74 20 62 6f 72 64 65 72 20 3c 24 6c gment border <$l
2930: 61 73 74 65 20 7c 20 24 73 3e 2c 20 67 61 70 20 aste | $s>, gap
2940: 6f 72 20 6f 76 65 72 6c 61 70 7d 0a 0a 09 20 20 or overlap}...
2950: 20 20 73 65 74 20 6e 65 77 20 5b 24 74 79 70 65 set new [$type
2960: 20 25 41 55 54 4f 25 20 24 6d 79 70 72 6f 6a 65 %AUTO% $myproje
2970: 63 74 20 24 6d 79 74 79 70 65 20 24 6d 79 73 72 ct $mytype $mysr
2980: 63 69 64 20 5b 6c 72 61 6e 67 65 20 24 6d 79 69 cid [lrange $myi
2990: 74 65 6d 73 20 24 73 20 24 65 5d 5d 0a 09 20 20 tems $s $e]]..
29a0: 20 20 6c 61 70 70 65 6e 64 20 6e 65 77 63 73 65 lappend newcse
29b0: 74 73 20 24 6e 65 77 0a 09 20 20 20 20 69 6e 63 ts $new.. inc
29c0: 72 20 63 6f 75 6e 74 65 72 0a 0a 20 20 20 20 20 r counter..
29d0: 20 20 20 20 20 20 20 6c 6f 67 20 77 72 69 74 65 log write
29e0: 20 34 20 63 73 65 74 73 20 22 42 72 65 61 6b 69 4 csets "Breaki
29f0: 6e 67 20 5b 24 73 65 6c 66 20 73 74 72 20 5d 20 ng [$self str ]
2a00: 40 20 24 6c 61 73 74 65 2c 20 6e 65 77 20 5b 24 @ $laste, new [$
2a10: 6e 65 77 20 73 74 72 5d 2c 20 63 75 74 74 69 6e new str], cuttin
2a20: 67 20 24 62 72 65 61 6b 73 28 24 6c 61 73 74 65 g $breaks($laste
2a30: 29 22 0a 0a 09 20 20 20 20 73 65 74 20 6c 61 73 )"... set las
2a40: 74 65 20 24 65 0a 09 7d 0a 0a 09 69 6e 74 65 67 te $e..}...integ
2a50: 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 20 rity assert {..
2a60: 20 20 20 24 6c 61 73 74 65 20 3d 3d 20 28 5b 6c $laste == ([l
2a70: 6c 65 6e 67 74 68 20 24 6d 79 69 74 65 6d 73 5d length $myitems]
2a80: 2d 31 29 0a 09 7d 20 7b 42 61 64 20 66 72 61 67 -1)..} {Bad frag
2a90: 6d 65 6e 74 20 65 6e 64 20 40 20 24 6c 61 73 74 ment end @ $last
2aa0: 65 2c 20 67 61 70 2c 20 6f 72 20 62 65 79 6f 6e e, gap, or beyon
2ab0: 64 20 65 6e 64 20 6f 66 20 74 68 65 20 72 61 6e d end of the ran
2ac0: 67 65 7d 0a 0a 09 23 20 50 75 74 20 74 68 65 20 ge}...# Put the
2ad0: 66 69 72 73 74 20 66 72 61 67 6d 65 6e 74 20 69 first fragment i
2ae0: 6e 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 nto the current
2af0: 63 68 61 6e 67 65 73 65 74 2c 20 61 6e 64 0a 09 changeset, and..
2b00: 23 20 75 70 64 61 74 65 20 74 68 65 20 69 6e 2d # update the in-
2b10: 6d 65 6d 6f 72 79 20 69 6e 64 65 78 2e 20 57 65 memory index. We
2b20: 20 63 61 6e 20 73 69 6d 70 6c 79 20 28 72 65 29 can simply (re)
2b30: 61 64 64 20 74 68 65 20 69 74 65 6d 73 0a 09 23 add the items..#
2b40: 20 62 65 63 61 75 73 65 20 77 65 20 63 6c 65 61 because we clea
2b50: 72 65 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 red the previous
2b60: 6c 79 20 65 78 69 73 74 69 6e 67 20 69 6e 66 6f ly existing info
2b70: 72 6d 61 74 69 6f 6e 2c 20 73 65 65 0a 09 23 20 rmation, see..#
2b80: 28 2a 29 20 61 62 6f 76 65 2e 20 50 65 72 73 69 (*) above. Persi
2b90: 73 74 65 6e 63 65 20 64 6f 65 73 20 6e 6f 74 20 stence does not
2ba0: 6d 61 74 74 65 72 20 68 65 72 65 2c 20 6e 6f 6e matter here, non
2bb0: 65 20 6f 66 20 74 68 65 0a 09 23 20 63 68 61 6e e of the..# chan
2bc0: 67 65 73 65 74 73 20 68 61 73 20 62 65 65 6e 20 gesets has been
2bd0: 73 61 76 65 64 20 74 6f 20 74 68 65 20 70 65 72 saved to the per
2be0: 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 79 65 sistent state ye
2bf0: 74 2e 0a 0a 09 73 65 74 20 6d 79 69 74 65 6d 73 t....set myitems
2c00: 20 20 5b 6c 72 61 6e 67 65 20 24 6d 79 69 74 65 [lrange $myite
2c10: 6d 73 20 20 30 20 24 66 69 72 73 74 65 5d 0a 09 ms 0 $firste]..
2c20: 73 65 74 20 6d 79 74 69 74 65 6d 73 20 5b 6c 72 set mytitems [lr
2c30: 61 6e 67 65 20 24 6d 79 74 69 74 65 6d 73 20 30 ange $mytitems 0
2c40: 20 24 66 69 72 73 74 65 5d 0a 09 66 6f 72 65 61 $firste]..forea
2c50: 63 68 20 69 69 64 20 24 6d 79 69 74 65 6d 73 20 ch iid $myitems
2c60: 7b 0a 09 20 20 20 20 73 65 74 20 6b 65 79 20 5b {.. set key [
2c70: 6c 69 73 74 20 24 6d 79 74 79 70 65 20 24 69 69 list $mytype $ii
2c80: 64 5d 0a 09 20 20 20 20 73 65 74 20 6d 79 69 74 d].. set myit
2c90: 65 6d 6d 61 70 28 24 6b 65 79 29 20 24 73 65 6c emmap($key) $sel
2ca0: 66 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 f.. log write
2cb0: 20 38 20 63 73 65 74 73 20 7b 4d 41 50 2b 20 69 8 csets {MAP+ i
2cc0: 74 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 6c 66 tem <$key> $self
2cd0: 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d 0a = [$self str]}.
2ce0: 09 7d 0a 0a 09 72 65 74 75 72 6e 20 24 6e 65 77 .}...return $new
2cf0: 63 73 65 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 csets. }..
2d00: 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74 20 method persist
2d10: 7b 7d 20 7b 0a 09 73 65 74 20 74 69 64 20 24 6d {} {..set tid $m
2d20: 79 63 73 74 79 70 65 28 24 6d 79 74 79 70 65 29 ycstype($mytype)
2d30: 0a 09 73 65 74 20 70 69 64 20 5b 24 6d 79 70 72 ..set pid [$mypr
2d40: 6f 6a 65 63 74 20 69 64 5d 0a 09 73 65 74 20 70 oject id]..set p
2d50: 6f 73 20 30 0a 0a 09 73 74 61 74 65 20 74 72 61 os 0...state tra
2d60: 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 nsaction {..
2d70: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e state run {...IN
2d80: 53 45 52 54 20 49 4e 54 4f 20 63 68 61 6e 67 65 SERT INTO change
2d90: 73 65 74 20 28 63 69 64 2c 20 20 20 70 69 64 2c set (cid, pid,
2da0: 20 20 74 79 70 65 2c 20 73 72 63 29 0a 09 09 56 type, src)...V
2db0: 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20 ALUES
2dc0: 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24 70 69 ($myid, $pi
2dd0: 64 2c 20 24 74 69 64 2c 20 24 6d 79 73 72 63 69 d, $tid, $mysrci
2de0: 64 29 3b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 d);.. }...
2df0: 20 66 6f 72 65 61 63 68 20 69 69 64 20 24 6d 79 foreach iid $my
2e00: 69 74 65 6d 73 20 7b 0a 09 09 73 74 61 74 65 20 items {...state
2e10: 72 75 6e 20 7b 0a 09 09 20 20 20 20 49 4e 53 45 run {... INSE
2e20: 52 54 20 49 4e 54 4f 20 63 73 69 74 65 6d 20 28 RT INTO csitem (
2e30: 63 69 64 2c 20 20 20 70 6f 73 2c 20 20 69 69 64 cid, pos, iid
2e40: 29 0a 09 09 20 20 20 20 56 41 4c 55 45 53 20 20 )... VALUES
2e50: 20 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 ($myi
2e60: 64 2c 20 24 70 6f 73 2c 20 24 69 69 64 29 3b 0a d, $pos, $iid);.
2e70: 09 09 7d 0a 09 09 69 6e 63 72 20 70 6f 73 0a 09 ..}...incr pos..
2e80: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e }..}..return
2e90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
2ea0: 6f 64 20 74 69 6d 65 72 61 6e 67 65 20 7b 7d 20 od timerange {}
2eb0: 7b 20 72 65 74 75 72 6e 20 5b 24 6d 79 74 79 70 { return [$mytyp
2ec0: 65 6f 62 6a 20 74 69 6d 65 72 61 6e 67 65 20 24 eobj timerange $
2ed0: 6d 79 69 74 65 6d 73 5d 20 7d 0a 0a 20 20 20 20 myitems] }..
2ee0: 6d 65 74 68 6f 64 20 6c 69 6d 69 74 73 20 7b 7d method limits {}
2ef0: 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 {..struct::list
2f00: 20 61 73 73 69 67 6e 20 5b 24 6d 79 74 79 70 65 assign [$mytype
2f10: 6f 62 6a 20 6c 69 6d 69 74 73 20 24 6d 79 69 74 obj limits $myit
2f20: 65 6d 73 5d 20 6d 61 78 70 20 6d 69 6e 73 0a 09 ems] maxp mins..
2f30: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b 54 61 return [list [Ta
2f40: 67 49 74 65 6d 44 69 63 74 20 24 6d 61 78 70 20 gItemDict $maxp
2f50: 24 6d 79 74 79 70 65 5d 20 5b 54 61 67 49 74 65 $mytype] [TagIte
2f60: 6d 44 69 63 74 20 24 6d 69 6e 73 20 24 6d 79 74 mDict $mins $myt
2f70: 79 70 65 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 ype]]. }..
2f80: 20 6d 65 74 68 6f 64 20 64 72 6f 70 20 7b 7d 20 method drop {}
2f90: 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 {..log write 8 c
2fa0: 73 65 74 73 20 7b 44 72 6f 70 70 69 6e 67 20 24 sets {Dropping $
2fb0: 73 65 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 self = [$self st
2fc0: 72 5d 7d 0a 0a 09 73 74 61 74 65 20 74 72 61 6e r]}...state tran
2fd0: 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 73 saction {.. s
2fe0: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 44 45 4c tate run {...DEL
2ff0: 45 54 45 20 46 52 4f 4d 20 63 68 61 6e 67 65 73 ETE FROM changes
3000: 65 74 20 20 20 57 48 45 52 45 20 63 69 64 20 3d et WHERE cid =
3010: 20 24 6d 79 69 64 3b 0a 09 09 44 45 4c 45 54 45 $myid;...DELETE
3020: 20 46 52 4f 4d 20 63 73 69 74 65 6d 20 20 20 20 FROM csitem
3030: 20 20 57 48 45 52 45 20 63 69 64 20 3d 20 24 6d WHERE cid = $m
3040: 79 69 64 3b 0a 09 09 44 45 4c 45 54 45 20 46 52 yid;...DELETE FR
3050: 4f 4d 20 63 73 73 75 63 63 65 73 73 6f 72 20 57 OM cssuccessor W
3060: 48 45 52 45 20 63 69 64 20 3d 20 24 6d 79 69 64 HERE cid = $myid
3070: 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 66 6f 72 ;.. }..}..for
3080: 65 61 63 68 20 69 69 64 20 24 6d 79 69 74 65 6d each iid $myitem
3090: 73 20 7b 0a 09 20 20 20 20 73 65 74 20 6b 65 79 s {.. set key
30a0: 20 5b 6c 69 73 74 20 24 6d 79 74 79 70 65 20 24 [list $mytype $
30b0: 69 69 64 5d 0a 09 20 20 20 20 75 6e 73 65 74 20 iid].. unset
30c0: 6d 79 69 74 65 6d 6d 61 70 28 24 6b 65 79 29 0a myitemmap($key).
30d0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 . log write 8
30e0: 20 63 73 65 74 73 20 7b 4d 41 50 2d 20 69 74 65 csets {MAP- ite
30f0: 6d 20 3c 24 6b 65 79 3e 20 24 73 65 6c 66 20 3d m <$key> $self =
3100: 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d 0a 09 7d [$self str]}..}
3110: 0a 09 73 65 74 20 70 6f 73 20 20 20 20 20 20 20 ..set pos
3120: 20 20 20 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 [lsearch -exa
3130: 63 74 20 24 6d 79 63 68 61 6e 67 65 73 65 74 73 ct $mychangesets
3140: 20 24 73 65 6c 66 5d 0a 09 73 65 74 20 6d 79 63 $self]..set myc
3150: 68 61 6e 67 65 73 65 74 73 20 5b 6c 72 65 70 6c hangesets [lrepl
3160: 61 63 65 20 24 6d 79 63 68 61 6e 67 65 73 65 74 ace $mychangeset
3170: 73 20 24 70 6f 73 20 24 70 6f 73 5d 0a 09 73 65 s $pos $pos]..se
3180: 74 20 70 6f 73 20 20 20 20 20 20 20 20 20 20 20 t pos
3190: 20 20 20 20 20 20 20 20 20 5b 6c 73 65 61 72 63 [lsearc
31a0: 68 20 2d 65 78 61 63 74 20 24 6d 79 74 63 68 61 h -exact $mytcha
31b0: 6e 67 65 73 65 74 73 28 24 6d 79 74 79 70 65 29 ngesets($mytype)
31c0: 20 24 73 65 6c 66 5d 0a 09 73 65 74 20 6d 79 74 $self]..set myt
31d0: 63 68 61 6e 67 65 73 65 74 73 28 24 6d 79 74 79 changesets($myty
31e0: 70 65 29 20 5b 6c 72 65 70 6c 61 63 65 20 24 6d pe) [lreplace $m
31f0: 79 74 63 68 61 6e 67 65 73 65 74 73 28 24 6d 79 ytchangesets($my
3200: 74 79 70 65 29 20 24 70 6f 73 20 24 70 6f 73 5d type) $pos $pos]
3210: 0a 0a 09 23 20 52 65 74 75 72 6e 20 74 68 65 20 ...# Return the
3220: 6c 69 73 74 20 6f 66 20 70 72 65 64 65 63 65 73 list of predeces
3230: 73 6f 72 73 20 73 6f 20 74 68 61 74 20 74 68 65 sors so that the
3240: 79 20 63 61 6e 20 62 65 20 61 64 6a 75 73 74 65 y can be adjuste
3250: 64 2e 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 75 d...return [stru
3260: 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 5b 73 74 ct::list map [st
3270: 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 ate run {.. S
3280: 45 4c 45 43 54 20 63 69 64 0a 09 20 20 20 20 46 ELECT cid.. F
3290: 52 4f 4d 20 20 20 63 73 73 75 63 63 65 73 73 6f ROM cssuccesso
32a0: 72 0a 09 20 20 20 20 57 48 45 52 45 20 20 6e 69 r.. WHERE ni
32b0: 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 5b 6d d = $myid..}] [m
32c0: 79 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 5d 5d ytypemethod of]]
32d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
32e0: 6f 64 20 72 65 70 6f 72 74 6c 6f 6f 70 20 7b 7b od reportloop {{
32f0: 6b 69 6c 6c 20 31 7d 7d 20 7b 0a 09 23 20 57 65 kill 1}} {..# We
3300: 20 70 72 69 6e 74 20 74 68 65 20 69 74 65 6d 73 print the items
3310: 20 77 68 69 63 68 20 61 72 65 20 70 72 6f 64 75 which are produ
3320: 63 69 6e 67 20 74 68 65 20 6c 6f 6f 70 2c 20 61 cing the loop, a
3330: 6e 64 20 68 6f 77 2e 0a 0a 09 73 65 74 20 68 64 nd how....set hd
3340: 72 20 22 53 65 6c 66 2d 72 65 66 65 72 65 6e 74 r "Self-referent
3350: 69 61 6c 20 63 68 61 6e 67 65 73 65 74 20 5b 24 ial changeset [$
3360: 73 65 6c 66 20 73 74 72 5d 20 5f 5f 5f 5f 5f 5f self str] ______
3370: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 22 0a 09 73 ____________"..s
3380: 65 74 20 66 74 72 20 5b 72 65 67 73 75 62 20 2d et ftr [regsub -
3390: 61 6c 6c 20 7b 5b 5e 20 09 5d 7d 20 24 68 64 72 all {[^ .]} $hdr
33a0: 20 7b 5f 7d 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 {_}]...log writ
33b0: 65 20 30 20 63 73 65 74 73 20 24 68 64 72 0a 09 e 0 csets $hdr..
33c0: 66 6f 72 65 61 63 68 20 7b 69 74 65 6d 20 6e 65 foreach {item ne
33d0: 78 74 69 74 65 6d 7d 20 5b 24 6d 79 74 79 70 65 xtitem} [$mytype
33e0: 6f 62 6a 20 6c 6f 6f 70 73 20 24 6d 79 69 74 65 obj loops $myite
33f0: 6d 73 5d 20 7b 0a 09 20 20 20 20 23 20 43 72 65 ms] {.. # Cre
3400: 61 74 65 20 74 61 67 67 65 64 20 69 74 65 6d 73 ate tagged items
3410: 20 66 72 6f 6d 20 74 68 65 20 69 64 20 61 6e 64 from the id and
3420: 20 6f 75 72 20 74 79 70 65 2e 0a 09 20 20 20 20 our type...
3430: 73 65 74 20 69 74 65 6d 20 20 20 20 20 5b 6c 69 set item [li
3440: 73 74 20 24 6d 79 74 79 70 65 20 20 24 69 74 65 st $mytype $ite
3450: 6d 5d 0a 09 20 20 20 20 73 65 74 20 6e 65 78 74 m].. set next
3460: 69 74 65 6d 20 5b 6c 69 73 74 20 24 6d 79 74 79 item [list $myty
3470: 70 65 20 24 6e 65 78 74 69 74 65 6d 5d 0a 09 20 pe $nextitem]..
3480: 20 20 20 23 20 50 72 69 6e 74 61 62 6c 65 20 6c # Printable l
3490: 61 62 65 6c 73 2e 0a 09 20 20 20 20 73 65 74 20 abels... set
34a0: 69 20 20 22 3c 5b 24 74 79 70 65 20 69 74 65 6d i "<[$type item
34b0: 73 74 72 20 24 69 74 65 6d 5d 3e 22 0a 09 20 20 str $item]>"..
34c0: 20 20 73 65 74 20 6e 20 20 22 3c 5b 24 74 79 70 set n "<[$typ
34d0: 65 20 69 74 65 6d 73 74 72 20 24 6e 65 78 74 69 e itemstr $nexti
34e0: 74 65 6d 5d 3e 22 0a 09 20 20 20 20 73 65 74 20 tem]>".. set
34f0: 6e 63 73 20 24 6d 79 69 74 65 6d 6d 61 70 28 24 ncs $myitemmap($
3500: 6e 65 78 74 69 74 65 6d 29 0a 09 20 20 20 20 23 nextitem).. #
3510: 20 50 72 69 6e 74 0a 09 20 20 20 20 6c 6f 67 20 Print.. log
3520: 77 72 69 74 65 20 30 20 63 73 65 74 73 20 7b 2a write 0 csets {*
3530: 20 24 69 20 2d 2d 3e 20 24 6e 20 2d 2d 3e 20 63 $i --> $n --> c
3540: 73 20 5b 24 6e 63 73 20 73 74 72 5d 7d 0a 09 7d s [$ncs str]}..}
3550: 0a 09 6c 6f 67 20 77 72 69 74 65 20 30 20 63 73 ..log write 0 cs
3560: 65 74 73 20 24 66 74 72 0a 0a 09 69 66 20 7b 21 ets $ftr...if {!
3570: 24 6b 69 6c 6c 7d 20 72 65 74 75 72 6e 0a 09 74 $kill} return..t
3580: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 rouble internal
3590: 22 5b 24 73 65 6c 66 20 73 74 72 5d 20 64 65 70 "[$self str] dep
35a0: 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66 22 0a ends on itself".
35b0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
35c0: 20 20 20 6d 65 74 68 6f 64 20 70 75 73 68 74 6f method pushto
35d0: 20 7b 72 65 70 6f 73 69 74 6f 72 79 20 64 61 74 {repository dat
35e0: 65 20 72 73 74 61 74 65 7d 20 7b 0a 09 23 20 47 e rstate} {..# G
35f0: 65 6e 65 72 61 74 65 20 61 6e 64 20 69 6d 70 6f enerate and impo
3600: 72 74 20 74 68 65 20 6d 61 6e 69 66 65 73 74 20 rt the manifest
3610: 66 6f 72 20 74 68 69 73 20 63 68 61 6e 67 65 73 for this changes
3620: 65 74 2e 0a 09 23 0a 09 23 20 44 61 74 61 20 6e et...#..# Data n
3630: 65 65 64 65 64 3a 0a 09 23 20 2d 20 43 6f 6d 6d eeded:..# - Comm
3640: 69 74 20 6d 65 73 73 61 67 65 20 20 20 20 20 20 it message
3650: 20 20 20 20 20 20 20 20 20 28 2d 2d 20 6d 79 73 (-- mys
3660: 72 63 69 64 20 2d 3e 20 72 65 70 6f 73 69 74 6f rcid -> reposito
3670: 72 79 20 6d 65 74 61 29 0a 09 23 20 2d 20 55 73 ry meta)..# - Us
3680: 65 72 20 64 6f 69 6e 67 20 74 68 65 20 63 6f 6d er doing the com
3690: 6d 69 74 20 20 20 20 20 20 20 20 28 73 2e 61 2e mit (s.a.
36a0: 29 0a 09 23 0a 09 23 20 2d 20 54 69 6d 65 73 74 )..#..# - Timest
36b0: 61 6d 70 20 6f 66 20 77 68 65 6e 20 63 6f 6d 6d amp of when comm
36c0: 69 74 74 65 64 20 20 28 63 6f 6d 6d 61 6e 64 20 itted (command
36d0: 61 72 67 75 6d 65 6e 74 29 0a 09 23 0a 09 23 20 argument)..#..#
36e0: 2d 20 54 68 65 20 70 61 72 65 6e 74 20 63 68 61 - The parent cha
36f0: 6e 67 65 73 65 74 2c 20 69 66 20 61 6e 79 2e 20 ngeset, if any.
3700: 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 If there is no p
3710: 61 72 65 6e 74 20 66 6f 73 73 69 6c 0a 09 23 20 arent fossil..#
3720: 20 20 77 69 6c 6c 20 75 73 65 20 74 68 65 20 65 will use the e
3730: 6d 70 74 79 20 62 61 73 65 20 72 65 76 69 73 69 mpty base revisi
3740: 6f 6e 20 61 73 20 70 61 72 65 6e 74 2e 0a 09 23 on as parent...#
3750: 0a 09 23 20 2d 20 4c 69 73 74 20 6f 66 20 74 68 ..# - List of th
3760: 65 20 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 73 e file revisions
3770: 20 69 6e 20 74 68 65 20 63 68 61 6e 67 65 73 65 in the changese
3780: 74 2e 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 t....struct::lis
3790: 74 20 61 73 73 69 67 6e 20 5b 24 6d 79 70 72 6f t assign [$mypro
37a0: 6a 65 63 74 20 67 65 74 6d 65 74 61 20 24 6d 79 ject getmeta $my
37b0: 73 72 63 69 64 5d 20 5f 5f 20 5f 5f 20 75 73 65 srcid] __ __ use
37c0: 72 20 6d 65 73 73 61 67 65 0a 0a 09 23 20 57 65 r message...# We
37d0: 20 64 65 72 69 76 65 20 74 68 65 20 6c 6f 64 20 derive the lod
37e0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 64 69 72 65 information dire
37f0: 63 74 6c 79 20 66 72 6f 6d 20 74 68 65 20 72 65 ctly from the re
3800: 76 69 73 69 6f 6e 73 20 6f 66 0a 09 23 20 74 68 visions of..# th
3810: 65 20 63 68 61 6e 67 65 73 65 74 2c 20 61 73 20 e changeset, as
3820: 74 68 65 20 62 72 61 6e 63 68 20 70 61 72 74 20 the branch part
3830: 6f 66 20 74 68 65 20 6d 65 74 61 20 64 61 74 61 of the meta data
3840: 20 28 73 2e 61 2e 29 20 69 73 0a 09 23 20 6f 75 (s.a.) is..# ou
3850: 74 64 61 74 65 64 20 73 69 6e 63 65 20 70 61 73 tdated since pas
3860: 73 20 46 69 6c 74 65 72 53 79 6d 62 6f 6c 73 2e s FilterSymbols.
3870: 0a 0a 09 73 65 74 20 6c 6f 64 6e 61 6d 65 20 5b ...set lodname [
3880: 24 73 65 6c 66 20 6c 6f 64 5d 0a 0a 09 6c 6f 67 $self lod]...log
3890: 20 77 72 69 74 65 20 32 20 63 73 65 74 73 20 7b write 2 csets {
38a0: 49 6d 70 6f 72 74 69 6e 67 20 72 65 76 69 73 69 Importing revisi
38b0: 6f 6e 20 5b 24 73 65 6c 66 20 73 74 72 5d 20 6f on [$self str] o
38c0: 6e 20 24 6c 6f 64 6e 61 6d 65 7d 0a 0a 09 23 20 n $lodname}...#
38d0: 50 65 72 66 6f 72 6d 20 74 68 65 20 69 6d 70 6f Perform the impo
38e0: 72 74 2e 20 41 73 20 70 61 72 74 20 6f 66 20 74 rt. As part of t
38f0: 68 61 74 20 77 65 20 64 65 74 65 72 6d 69 6e 65 hat we determine
3900: 20 74 68 65 20 70 61 72 65 6e 74 0a 09 23 20 77 the parent..# w
3910: 65 20 6e 65 65 64 2c 20 61 6e 64 20 63 6f 6e 76 e need, and conv
3920: 65 72 74 20 74 68 65 20 6c 69 73 74 20 6f 66 20 ert the list of
3930: 69 74 65 6d 73 20 69 6e 20 74 68 65 20 63 68 61 items in the cha
3940: 6e 67 65 73 65 74 20 69 6e 74 6f 0a 09 23 20 75 ngeset into..# u
3950: 75 69 64 73 20 61 6e 64 20 70 72 69 6e 74 61 62 uids and printab
3960: 6c 65 20 64 61 74 61 2e 0a 0a 09 73 74 72 75 63 le data....struc
3970: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b t::list assign [
3980: 47 65 74 69 73 64 65 66 61 75 6c 74 20 24 6d 79 Getisdefault $my
3990: 69 74 65 6d 73 5d 20 69 73 64 65 66 61 75 6c 74 items] isdefault
39a0: 20 6c 61 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 lastdefaultontr
39b0: 75 6e 6b 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 unk...log write
39c0: 38 20 63 73 65 74 73 20 7b 4c 4f 44 20 20 20 20 8 csets {LOD
39d0: 27 24 6c 6f 64 6e 61 6d 65 27 7d 0a 09 6c 6f 67 '$lodname'}..log
39e0: 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 7b write 8 csets {
39f0: 20 64 65 66 3f 20 20 24 69 73 64 65 66 61 75 6c def? $isdefaul
3a00: 74 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 t}..log write 8
3a10: 63 73 65 74 73 20 7b 20 6c 61 73 74 3f 20 24 6c csets { last? $l
3a20: 61 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e astdefaultontrun
3a30: 6b 7d 0a 0a 09 73 65 74 20 6c 77 73 20 20 5b 47 k}...set lws [G
3a40: 65 74 77 6f 72 6b 73 70 61 63 65 20 20 20 20 24 etworkspace $
3a50: 72 73 74 61 74 65 20 24 6c 6f 64 6e 61 6d 65 20 rstate $lodname
3a60: 24 6d 79 70 72 6f 6a 65 63 74 20 24 69 73 64 65 $myproject $isde
3a70: 66 61 75 6c 74 5d 0a 09 24 6c 77 73 20 61 64 64 fault]..$lws add
3a80: 20 5b 47 65 74 72 65 76 69 73 69 6f 6e 69 6e 66 [Getrevisioninf
3a90: 6f 20 24 6d 79 69 74 65 6d 73 5d 0a 0a 09 73 65 o $myitems]...se
3aa0: 74 20 75 75 69 64 20 5b 24 72 65 70 6f 73 69 74 t uuid [$reposit
3ab0: 6f 72 79 20 69 6d 70 6f 72 74 72 65 76 69 73 69 ory importrevisi
3ac0: 6f 6e 20 5b 24 73 65 6c 66 20 73 74 72 5d 20 5c on [$self str] \
3ad0: 0a 09 09 20 20 20 20 20 20 24 75 73 65 72 20 24 ... $user $
3ae0: 6d 65 73 73 61 67 65 20 24 64 61 74 65 20 5c 0a message $date \.
3af0: 09 09 20 20 20 20 20 20 5b 24 6c 77 73 20 67 65 .. [$lws ge
3b00: 74 69 64 5d 20 5b 24 6c 77 73 20 67 65 74 5d 5d tid] [$lws get]]
3b10: 0a 0a 09 23 20 52 65 6d 65 6d 62 65 72 20 74 68 ...# Remember th
3b20: 65 20 69 6d 70 6f 72 74 65 64 20 63 68 61 6e 67 e imported chang
3b30: 65 73 65 74 20 69 6e 20 74 68 65 20 73 74 61 74 eset in the stat
3b40: 65 2c 20 75 6e 64 65 72 20 6f 75 72 0a 09 23 20 e, under our..#
3b50: 4c 4f 44 2e 20 41 6e 64 20 69 66 20 69 74 20 69 LOD. And if it i
3b60: 73 20 74 68 65 20 6c 61 73 74 20 74 72 75 6e 6b s the last trunk
3b70: 20 63 68 61 6e 67 65 73 65 74 20 6f 6e 20 74 68 changeset on th
3b80: 65 20 76 65 6e 64 6f 72 0a 09 23 20 62 72 61 6e e vendor..# bran
3b90: 63 68 20 74 68 65 6e 20 74 68 65 20 72 65 76 69 ch then the revi
3ba0: 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 74 68 65 sion is also the
3bb0: 20 61 63 74 75 61 6c 20 72 6f 6f 74 20 6f 66 20 actual root of
3bc0: 74 68 65 0a 09 23 20 3a 74 72 75 6e 6b 3a 2c 20 the..# :trunk:,
3bd0: 73 6f 20 77 65 20 72 65 6d 65 6d 62 65 72 20 69 so we remember i
3be0: 74 20 61 73 20 73 75 63 68 20 69 6e 20 74 68 65 t as such in the
3bf0: 20 73 74 61 74 65 2e 20 48 6f 77 65 76 65 72 20 state. However
3c00: 69 66 0a 09 23 20 74 68 65 20 74 72 75 6e 6b 20 if..# the trunk
3c10: 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 74 already exists t
3c20: 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 73 65 hen the changese
3c30: 74 20 63 61 6e 6e 6f 74 20 62 65 20 6f 6e 20 69 t cannot be on i
3c40: 74 0a 09 23 20 61 6e 79 20 6d 6f 72 65 2e 20 54 t..# any more. T
3c50: 68 69 73 20 69 6e 64 69 63 61 74 65 73 20 77 65 his indicates we
3c60: 69 72 64 6e 65 73 73 20 69 6e 20 74 68 65 20 73 irdness in the s
3c70: 65 74 75 70 20 6f 66 20 74 68 65 0a 09 23 20 76 etup of the..# v
3c80: 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20 62 75 endor branch, bu
3c90: 74 20 6f 6e 65 20 77 65 20 63 61 6e 20 77 6f 72 t one we can wor
3ca0: 6b 20 61 72 6f 75 6e 64 2e 0a 0a 09 24 6c 77 73 k around....$lws
3cb0: 20 64 65 66 69 64 20 24 75 75 69 64 0a 09 69 66 defid $uuid..if
3cc0: 20 7b 24 6c 61 73 74 64 65 66 61 75 6c 74 6f 6e {$lastdefaulton
3cd0: 74 72 75 6e 6b 7d 20 7b 0a 09 20 20 20 20 69 66 trunk} {.. if
3ce0: 20 7b 5b 24 72 73 74 61 74 65 20 68 61 73 20 3a {[$rstate has :
3cf0: 74 72 75 6e 6b 3a 5d 7d 20 7b 0a 09 09 6c 6f 67 trunk:]} {...log
3d00: 20 77 72 69 74 65 20 32 20 63 73 65 74 73 20 7b write 2 csets {
3d10: 4d 75 6c 74 69 70 6c 65 20 63 68 61 6e 67 65 73 Multiple changes
3d20: 65 74 73 20 64 65 63 6c 61 72 65 64 20 74 6f 20 ets declared to
3d30: 62 65 20 74 68 65 20 6c 61 73 74 20 74 72 75 6e be the last trun
3d40: 6b 20 63 68 61 6e 67 65 73 65 74 20 6f 6e 20 74 k changeset on t
3d50: 68 65 20 76 65 6e 64 6f 72 2d 62 72 61 6e 63 68 he vendor-branch
3d60: 7d 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a }.. } else {.
3d70: 09 09 24 72 73 74 61 74 65 20 6e 65 77 20 3a 74 ..$rstate new :t
3d80: 72 75 6e 6b 3a 20 5b 24 6c 77 73 20 6e 61 6d 65 runk: [$lws name
3d90: 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 ].. }..}...#
3da0: 52 65 6d 65 6d 62 65 72 20 74 68 65 20 77 68 6f Remember the who
3db0: 6c 65 20 63 68 61 6e 67 65 73 65 74 20 2f 20 75 le changeset / u
3dc0: 75 69 64 20 6d 61 70 70 69 6e 67 2c 20 66 6f 72 uid mapping, for
3dd0: 20 74 68 65 20 74 61 67 73 2e 0a 0a 09 73 74 61 the tags....sta
3de0: 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 49 4e te run {.. IN
3df0: 53 45 52 54 20 49 4e 54 4f 20 63 73 75 75 69 64 SERT INTO csuuid
3e00: 20 28 63 69 64 2c 20 20 20 75 75 69 64 29 0a 09 (cid, uuid)..
3e10: 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 20 20 VALUES
3e20: 20 20 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24 ($myid, $
3e30: 75 75 69 64 29 0a 09 7d 0a 09 72 65 74 75 72 6e uuid)..}..return
3e40: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 . }.. proc
3e50: 20 47 65 74 72 65 76 69 73 69 6f 6e 69 6e 66 6f Getrevisioninfo
3e60: 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 {revisions} {..
3e70: 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f set theset ('[jo
3e80: 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 in $revisions {'
3e90: 2c 27 7d 5d 27 29 0a 09 73 65 74 20 72 65 76 69 ,'}]')..set revi
3ea0: 73 69 6f 6e 73 20 7b 7d 0a 09 66 6f 72 65 61 63 sions {}..foreac
3eb0: 68 20 7b 66 72 69 64 20 70 61 74 68 20 66 6e 61 h {frid path fna
3ec0: 6d 65 20 72 65 76 6e 72 20 72 6f 70 7d 20 5b 73 me revnr rop} [s
3ed0: 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 tate run [subst
3ee0: 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 -nocommands -nob
3ef0: 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 ackslashes {..
3f00: 20 20 53 45 4c 45 43 54 20 55 2e 75 75 69 64 2c SELECT U.uuid,
3f10: 20 46 2e 76 69 73 69 62 6c 65 2c 20 46 2e 6e 61 F.visible, F.na
3f20: 6d 65 2c 20 52 2e 72 65 76 2c 20 52 2e 6f 70 0a me, R.rev, R.op.
3f30: 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 . FROM revi
3f40: 73 69 6f 6e 20 52 2c 20 72 65 76 75 75 69 64 20 sion R, revuuid
3f50: 55 2c 20 66 69 6c 65 20 46 0a 09 20 20 20 20 57 U, file F.. W
3f60: 48 45 52 45 20 20 52 2e 72 69 64 20 49 4e 20 24 HERE R.rid IN $
3f70: 74 68 65 73 65 74 20 20 2d 2d 20 41 6c 6c 20 73 theset -- All s
3f80: 70 65 63 69 66 69 65 64 20 72 65 76 69 73 69 6f pecified revisio
3f90: 6e 73 0a 09 20 20 20 20 41 4e 44 20 20 20 20 55 ns.. AND U
3fa0: 2e 72 69 64 20 3d 20 52 2e 72 69 64 20 20 20 20 .rid = R.rid
3fb0: 20 2d 2d 20 67 65 74 20 66 6f 73 73 69 6c 20 75 -- get fossil u
3fc0: 75 69 64 20 6f 66 20 72 65 76 69 73 69 6f 6e 0a uid of revision.
3fd0: 09 20 20 20 20 41 4e 44 20 20 20 20 46 2e 66 69 . AND F.fi
3fe0: 64 20 3d 20 52 2e 66 69 64 20 20 20 20 20 2d 2d d = R.fid --
3ff0: 20 67 65 74 20 66 69 6c 65 20 6f 66 20 72 65 76 get file of rev
4000: 69 73 69 6f 6e 0a 09 7d 5d 5d 20 7b 0a 09 20 20 ision..}]] {..
4010: 20 20 6c 61 70 70 65 6e 64 20 72 65 76 69 73 69 lappend revisi
4020: 6f 6e 73 20 24 66 72 69 64 20 24 70 61 74 68 20 ons $frid $path
4030: 24 66 6e 61 6d 65 2f 24 72 65 76 6e 72 20 24 72 $fname/$revnr $r
4040: 6f 70 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 72 op..}..return $r
4050: 65 76 69 73 69 6f 6e 73 0a 20 20 20 20 7d 0a 0a evisions. }..
4060: 20 20 20 20 70 72 6f 63 20 47 65 74 77 6f 72 6b proc Getwork
4070: 73 70 61 63 65 20 7b 72 73 74 61 74 65 20 6c 6f space {rstate lo
4080: 64 6e 61 6d 65 20 70 72 6f 6a 65 63 74 20 69 73 dname project is
4090: 64 65 66 61 75 6c 74 7d 20 7b 0a 0a 09 23 20 54 default} {...# T
40a0: 68 65 20 73 74 61 74 65 20 6f 62 6a 65 63 74 20 he state object
40b0: 68 6f 6c 64 73 20 74 68 65 20 77 6f 72 6b 73 70 holds the worksp
40c0: 61 63 65 20 73 74 61 74 65 20 6f 66 20 65 61 63 ace state of eac
40d0: 68 20 6b 6e 6f 77 6e 0a 09 23 20 6c 69 6e 65 2d h known..# line-
40e0: 6f 66 2d 64 65 76 65 6c 6f 70 6d 65 6e 74 20 28 of-development (
40f0: 4c 4f 44 29 2c 20 75 70 20 74 6f 20 74 68 65 20 LOD), up to the
4100: 6c 61 73 74 20 63 6f 6d 6d 69 74 74 65 64 0a 09 last committed..
4110: 23 20 63 68 61 6e 67 65 73 65 74 20 62 65 6c 6f # changeset belo
4120: 6e 67 69 6e 67 20 74 6f 20 74 68 61 74 20 4c 4f nging to that LO
4130: 44 2e 0a 0a 09 23 20 28 2a 29 20 53 74 61 6e 64 D....# (*) Stand
4140: 61 72 64 20 68 61 6e 64 6c 69 6e 67 20 69 66 20 ard handling if
4150: 69 6e 2d 4c 4f 44 20 63 68 61 6e 67 65 73 65 74 in-LOD changeset
4160: 73 2e 20 49 66 20 74 68 65 20 4c 4f 44 20 6f 66 s. If the LOD of
4170: 0a 09 23 20 20 20 20 20 74 68 65 20 63 75 72 72 ..# the curr
4180: 65 6e 74 20 63 68 61 6e 67 65 73 65 74 20 65 78 ent changeset ex
4190: 69 73 74 73 20 69 6e 20 74 68 65 20 73 74 61 74 ists in the stat
41a0: 65 20 28 3d 20 68 61 73 20 62 65 65 6e 0a 09 23 e (= has been..#
41b0: 20 20 20 20 20 63 6f 6d 6d 69 74 74 65 64 20 74 committed t
41c0: 6f 29 20 74 68 65 6e 20 74 68 69 73 20 69 74 20 o) then this it
41d0: 68 61 73 20 74 68 65 20 77 6f 72 6b 73 70 61 63 has the workspac
41e0: 65 20 77 65 20 61 72 65 0a 09 23 20 20 20 20 20 e we are..#
41f0: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 2e 0a 0a 09 69 looking for....i
4200: 66 20 7b 5b 24 72 73 74 61 74 65 20 68 61 73 20 f {[$rstate has
4210: 24 6c 6f 64 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 $lodname]} {..
4220: 20 20 72 65 74 75 72 6e 20 5b 24 72 73 74 61 74 return [$rstat
4230: 65 20 67 65 74 20 24 6c 6f 64 6e 61 6d 65 5d 0a e get $lodname].
4240: 09 7d 0a 0a 09 23 20 49 66 20 74 68 65 20 4c 4f .}...# If the LO
4250: 44 20 69 73 20 68 6f 77 65 76 65 72 20 6e 6f 74 D is however not
4260: 20 79 65 74 20 6b 6e 6f 77 6e 2c 20 74 68 65 6e yet known, then
4270: 20 74 68 65 20 63 75 72 72 65 6e 74 0a 09 23 20 the current..#
4280: 63 68 61 6e 67 65 73 65 74 20 63 61 6e 20 62 65 changeset can be
4290: 20 65 69 74 68 65 72 20 6f 66 0a 09 23 20 28 61 either of..# (a
42a0: 29 20 72 6f 6f 74 20 6f 66 20 61 20 76 65 6e 64 ) root of a vend
42b0: 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 20 28 62 or branch,..# (b
42c0: 29 20 72 6f 6f 74 20 6f 66 20 74 68 65 20 74 72 ) root of the tr
42d0: 75 6e 6b 20 4c 4f 44 2c 20 6f 72 0a 09 23 20 28 unk LOD, or..# (
42e0: 63 29 20 74 68 65 20 66 69 72 73 74 20 63 68 61 c) the first cha
42f0: 6e 67 65 73 65 74 20 69 6e 20 61 20 6e 65 77 20 ngeset in a new
4300: 4c 4f 44 20 77 68 69 63 68 20 77 61 73 20 73 70 LOD which was sp
4310: 61 77 6e 65 64 20 66 72 6f 6d 0a 09 23 20 20 20 awned from..#
4320: 20 20 61 6e 20 65 78 69 73 74 69 6e 67 20 4c 4f an existing LO
4330: 44 2e 0a 0a 09 23 20 46 6f 72 20 62 6f 74 68 20 D....# For both
4340: 28 61 29 20 61 6e 64 20 28 62 29 20 77 65 20 68 (a) and (b) we h
4350: 61 76 65 20 74 6f 20 63 72 65 61 74 65 20 61 20 ave to create a
4360: 6e 65 77 20 77 6f 72 6b 73 70 61 63 65 20 66 6f new workspace fo
4370: 72 0a 09 23 20 74 68 65 20 6c 6f 64 2c 20 61 6e r..# the lod, an
4380: 64 20 69 74 20 64 6f 65 73 6e 27 74 20 69 6e 68 d it doesn't inh
4390: 65 72 69 74 20 66 72 6f 6d 20 61 6e 79 74 68 69 erit from anythi
43a0: 6e 67 2e 0a 0a 09 23 20 4f 6e 65 20 65 78 63 65 ng....# One exce
43b0: 70 74 69 6f 6e 20 66 6f 72 20 28 61 29 2e 20 49 ption for (a). I
43c0: 66 20 77 65 20 61 6c 72 65 61 64 79 20 68 61 76 f we already hav
43d0: 65 20 61 20 3a 76 65 6e 64 6f 72 3a 20 62 72 61 e a :vendor: bra
43e0: 6e 63 68 0a 09 23 20 74 68 65 6e 20 6d 75 6c 74 nch..# then mult
43f0: 69 70 6c 65 20 73 79 6d 62 6f 6c 73 20 77 65 72 iple symbols wer
4400: 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 76 e used for the v
4410: 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 62 79 0a endor branch by.
4420: 09 23 20 64 69 66 66 65 72 65 6e 74 20 66 69 6c .# different fil
4430: 65 73 2e 20 49 6e 20 74 68 61 74 20 63 61 73 65 es. In that case
4440: 20 74 68 65 20 27 6e 65 77 27 20 62 72 61 6e 63 the 'new' branc
4450: 68 20 69 73 20 6d 61 64 65 20 61 6e 0a 09 23 20 h is made an..#
4460: 61 6c 69 61 73 20 6f 66 20 74 68 65 20 3a 76 65 alias of the :ve
4470: 6e 64 6f 72 3a 2c 20 65 66 66 65 63 74 69 76 65 ndor:, effective
4480: 6c 79 20 6d 65 72 67 69 6e 67 20 74 68 65 20 73 ly merging the s
4490: 79 6d 62 6f 6c 73 0a 09 23 20 74 6f 67 65 74 68 ymbols..# togeth
44a0: 65 72 2e 0a 0a 09 23 20 4e 6f 74 65 20 74 68 61 er....# Note tha
44b0: 74 20 63 61 73 65 20 28 62 29 20 6d 61 79 20 6e t case (b) may n
44c0: 65 76 65 72 20 6f 63 63 75 72 2e 20 53 65 65 20 ever occur. See
44d0: 74 68 65 20 76 61 72 69 61 62 6c 65 0a 09 23 20 the variable..#
44e0: 27 6c 61 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 'lastdefaultontr
44f0: 75 6e 6b 27 20 69 6e 20 74 68 65 20 63 61 6c 6c unk' in the call
4500: 65 72 20 28 6d 65 74 68 6f 64 20 70 75 73 68 74 er (method pusht
4510: 6f 29 2e 20 54 68 69 73 0a 09 23 20 66 6c 61 67 o). This..# flag
4520: 20 63 61 6e 20 74 68 65 20 67 65 6e 65 72 61 74 can the generat
4530: 69 6f 6e 20 6f 66 20 74 68 65 20 77 6f 72 6b 73 ion of the works
4540: 70 61 63 65 20 66 6f 72 20 74 68 65 20 3a 74 72 pace for the :tr
4550: 75 6e 6b 3a 20 4c 4f 44 0a 09 23 20 61 73 20 77 unk: LOD..# as w
4560: 65 6c 6c 2c 20 6d 61 6b 69 6e 67 20 69 74 20 69 ell, making it i
4570: 6e 68 65 72 69 74 20 74 68 65 20 73 74 61 74 65 nherit the state
4580: 20 6f 66 20 74 68 65 20 6c 61 73 74 0a 09 23 20 of the last..#
4590: 74 72 75 6e 6b 2d 63 68 61 6e 67 65 73 65 74 20 trunk-changeset
45a0: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 2d 62 72 on the vendor-br
45b0: 61 6e 63 68 2e 0a 0a 09 69 66 20 7b 24 69 73 64 anch....if {$isd
45c0: 65 66 61 75 6c 74 7d 20 7b 0a 09 20 20 20 20 69 efault} {.. i
45d0: 66 20 7b 21 5b 24 72 73 74 61 74 65 20 68 61 73 f {![$rstate has
45e0: 20 22 3a 76 65 6e 64 6f 72 3a 22 5d 7d 20 7b 0a ":vendor:"]} {.
45f0: 09 09 23 20 43 72 65 61 74 65 20 74 68 65 20 76 ..# Create the v
4600: 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 69 66 20 endor branch if
4610: 6e 6f 74 20 70 72 65 73 65 6e 74 20 61 6c 72 65 not present alre
4620: 61 64 79 2e 0a 09 09 24 72 73 74 61 74 65 20 6e ady....$rstate n
4630: 65 77 20 3a 76 65 6e 64 6f 72 3a 0a 09 20 20 20 ew :vendor:..
4640: 20 7d 0a 09 20 20 20 20 23 20 4d 65 72 67 65 20 }.. # Merge
4650: 74 68 65 20 6e 65 77 20 73 79 6d 62 6f 6c 20 74 the new symbol t
4660: 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 o the vendor bra
4670: 6e 63 68 0a 09 20 20 20 20 24 72 73 74 61 74 65 nch.. $rstate
4680: 20 64 75 70 20 24 6c 6f 64 6e 61 6d 65 20 3c 2d dup $lodname <-
4690: 2d 20 3a 76 65 6e 64 6f 72 3a 0a 09 20 20 20 20 - :vendor:..
46a0: 72 65 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 return [$rstate
46b0: 67 65 74 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d get $lodname]..}
46c0: 0a 0a 09 69 66 20 7b 24 6c 6f 64 6e 61 6d 65 20 ...if {$lodname
46d0: 65 71 20 22 3a 74 72 75 6e 6b 3a 22 7d 20 7b 0a eq ":trunk:"} {.
46e0: 09 20 20 20 20 72 65 74 75 72 6e 20 5b 24 72 73 . return [$rs
46f0: 74 61 74 65 20 6e 65 77 20 24 6c 6f 64 6e 61 6d tate new $lodnam
4700: 65 5d 0a 09 7d 0a 0a 09 23 20 43 61 73 65 20 28 e]..}...# Case (
4710: 63 29 2e 20 57 65 20 66 69 6e 64 20 74 68 65 20 c). We find the
4720: 70 61 72 65 6e 74 20 4c 4f 44 20 6f 66 20 6f 75 parent LOD of ou
4730: 72 20 4c 4f 44 20 61 6e 64 20 6c 65 74 20 74 68 r LOD and let th
4740: 65 20 6e 65 77 0a 09 23 20 77 6f 72 6b 73 70 61 e new..# workspa
4750: 63 65 20 69 6e 68 65 72 69 74 20 66 72 6f 6d 20 ce inherit from
4760: 74 68 65 20 70 61 72 65 6e 74 27 73 20 77 6f 72 the parent's wor
4770: 6b 73 70 61 63 65 2e 0a 0a 09 73 65 74 20 70 6c kspace....set pl
4780: 6f 64 6e 61 6d 65 20 5b 5b 5b 24 70 72 6f 6a 65 odname [[[$proje
4790: 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 6c 6f ct getsymbol $lo
47a0: 64 6e 61 6d 65 5d 20 70 61 72 65 6e 74 5d 20 6e dname] parent] n
47b0: 61 6d 65 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 ame]...log write
47c0: 20 38 20 63 73 65 74 73 20 7b 70 4c 4f 44 20 20 8 csets {pLOD
47d0: 20 27 24 70 6c 6f 64 6e 61 6d 65 27 7d 0a 0a 09 '$plodname'}...
47e0: 69 66 20 7b 5b 24 72 73 74 61 74 65 20 68 61 73 if {[$rstate has
47f0: 20 24 70 6c 6f 64 6e 61 6d 65 5d 7d 20 7b 0a 09 $plodname]} {..
4800: 20 20 20 20 72 65 74 75 72 6e 20 5b 24 72 73 74 return [$rst
4810: 61 74 65 20 6e 65 77 20 24 6c 6f 64 6e 61 6d 65 ate new $lodname
4820: 20 24 70 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a $plodname]..}..
4830: 09 66 6f 72 65 61 63 68 20 6b 20 5b 6c 73 6f 72 .foreach k [lsor
4840: 74 20 5b 24 72 73 74 61 74 65 20 6e 61 6d 65 73 t [$rstate names
4850: 5d 5d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 ]] {.. log wr
4860: 69 74 65 20 38 20 63 73 65 74 73 20 7b 20 20 20 ite 8 csets {
4870: 20 24 6b 20 3d 20 5b 5b 24 72 73 74 61 74 65 20 $k = [[$rstate
4880: 67 65 74 20 24 6b 5d 20 67 65 74 69 64 5d 7d 0a get $k] getid]}.
4890: 09 7d 0a 0a 09 74 72 6f 75 62 6c 65 20 69 6e 74 .}...trouble int
48a0: 65 72 6e 61 6c 20 7b 55 6e 61 62 6c 65 20 74 6f ernal {Unable to
48b0: 20 64 65 74 65 72 6d 69 6e 65 20 63 68 61 6e 67 determine chang
48c0: 65 73 65 74 20 70 61 72 65 6e 74 7d 0a 09 72 65 eset parent}..re
48d0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
48e0: 70 72 6f 63 20 47 65 74 69 73 64 65 66 61 75 6c proc Getisdefaul
48f0: 74 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a t {revisions} {.
4900: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
4910: 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b oin $revisions {
4920: 27 2c 27 7d 5d 27 29 0a 0a 09 73 74 72 75 63 74 ','}]')...struct
4930: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 73 ::list assign [s
4940: 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 tate run [subst
4950: 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 -nocommands -nob
4960: 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 ackslashes {..
4970: 20 20 53 45 4c 45 43 54 20 52 2e 69 73 64 65 66 SELECT R.isdef
4980: 61 75 6c 74 2c 20 52 2e 64 62 63 68 69 6c 64 0a ault, R.dbchild.
4990: 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 . FROM revi
49a0: 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 sion R.. WHER
49b0: 45 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 E R.rid IN $the
49c0: 73 65 74 20 20 2d 2d 20 41 6c 6c 20 73 70 65 63 set -- All spec
49d0: 69 66 69 65 64 20 72 65 76 69 73 69 6f 6e 73 0a ified revisions.
49e0: 09 20 20 20 20 4c 49 4d 49 54 20 31 0a 09 7d 5d . LIMIT 1..}]
49f0: 5d 20 64 65 66 20 6c 61 73 74 0a 0a 09 23 20 54 ] def last...# T
4a00: 4f 44 4f 2f 43 48 45 43 4b 3a 20 6c 6f 6f 6b 20 ODO/CHECK: look
4a10: 66 6f 72 20 63 68 61 6e 67 65 73 65 74 73 20 77 for changesets w
4a20: 68 65 72 65 20 69 73 64 65 66 61 75 6c 74 2f 64 here isdefault/d
4a30: 62 63 68 69 6c 64 20 69 73 0a 09 23 20 61 6d 62 bchild is..# amb
4a40: 69 67 6f 75 73 2e 0a 0a 09 72 65 74 75 72 6e 20 igous....return
4a50: 5b 6c 69 73 74 20 24 64 65 66 20 5b 65 78 70 72 [list $def [expr
4a60: 20 7b 24 6c 61 73 74 20 6e 65 20 22 22 7d 5d 5d {$last ne ""}]]
4a70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 . }.. type
4a80: 6d 65 74 68 6f 64 20 73 70 6c 69 74 20 7b 63 73 method split {cs
4a90: 65 74 20 61 72 67 73 7d 20 7b 0a 09 23 20 41 73 et args} {..# As
4aa0: 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 72 65 part of the cre
4ab0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6e 65 77 ation of the new
4ac0: 20 63 68 61 6e 67 65 73 65 74 73 20 73 70 65 63 changesets spec
4ad0: 69 66 69 65 64 20 69 6e 0a 09 23 20 41 52 47 53 ified in..# ARGS
4ae0: 20 61 73 20 73 65 74 73 20 6f 66 20 69 74 65 6d as sets of item
4af0: 73 2c 20 61 6c 6c 20 73 75 62 73 65 74 73 20 6f s, all subsets o
4b00: 66 20 43 53 45 54 27 73 20 69 74 65 6d 20 73 65 f CSET's item se
4b10: 74 2c 20 43 53 45 54 0a 09 23 20 77 69 6c 6c 20 t, CSET..# will
4b20: 62 65 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 be dropped from
4b30: 61 6c 6c 20 64 61 74 61 62 61 73 65 73 2c 20 69 all databases, i
4b40: 6e 20 61 6e 64 20 6f 75 74 20 6f 66 20 6d 65 6d n and out of mem
4b50: 6f 72 79 2c 0a 09 23 20 61 6e 64 20 74 68 65 6e ory,..# and then
4b60: 20 64 65 73 74 72 6f 79 65 64 2e 0a 09 23 0a 09 destroyed...#..
4b70: 23 20 4e 6f 74 65 3a 20 54 68 65 20 69 74 65 6d # Note: The item
4b80: 20 6c 69 73 74 73 20 66 6f 75 6e 64 20 69 6e 20 lists found in
4b90: 61 72 67 73 20 61 72 65 20 74 61 67 67 65 64 20 args are tagged
4ba0: 69 74 65 6d 73 2e 20 54 68 65 79 0a 09 23 20 68 items. They..# h
4bb0: 61 76 65 20 74 6f 20 68 61 76 65 20 74 68 65 20 ave to have the
4bc0: 73 61 6d 65 20 74 79 70 65 20 61 73 20 74 68 65 same type as the
4bd0: 20 63 68 61 6e 67 65 73 65 74 2c 20 62 65 69 6e changeset, bein
4be0: 67 20 73 75 62 73 65 74 73 0a 09 23 20 6f 66 20 g subsets..# of
4bf0: 69 74 73 20 69 74 65 6d 73 2e 20 54 68 69 73 20 its items. This
4c00: 69 73 20 63 68 65 63 6b 65 64 20 69 6e 20 55 6e is checked in Un
4c10: 74 61 67 31 2e 0a 0a 09 6c 6f 67 20 77 72 69 74 tag1....log writ
4c20: 65 20 38 20 63 73 65 74 73 20 7b 4f 4c 44 3a 20 e 8 csets {OLD:
4c30: 5b 6c 73 6f 72 74 20 5b 24 63 73 65 74 20 69 74 [lsort [$cset it
4c40: 65 6d 73 5d 5d 7d 0a 09 56 61 6c 69 64 61 74 65 ems]]}..Validate
4c50: 46 72 61 67 6d 65 6e 74 73 20 24 63 73 65 74 20 Fragments $cset
4c60: 24 61 72 67 73 0a 0a 09 23 20 41 6c 6c 20 63 68 $args...# All ch
4c70: 65 63 6b 73 20 70 61 73 73 2c 20 61 63 74 75 61 ecks pass, actua
4c80: 6c 6c 79 20 70 65 72 66 6f 72 6d 20 74 68 65 20 lly perform the
4c90: 73 70 6c 69 74 2e 0a 0a 09 73 74 72 75 63 74 3a split....struct:
4ca0: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 24 63 :list assign [$c
4cb0: 73 65 74 20 64 61 74 61 5d 20 70 72 6f 6a 65 63 set data] projec
4cc0: 74 20 63 73 74 79 70 65 20 63 73 73 72 63 0a 0a t cstype cssrc..
4cd0: 09 73 65 74 20 70 72 65 64 65 63 65 73 73 6f 72 .set predecessor
4ce0: 73 20 5b 24 63 73 65 74 20 64 72 6f 70 5d 0a 09 s [$cset drop]..
4cf0: 24 63 73 65 74 20 64 65 73 74 72 6f 79 0a 0a 09 $cset destroy...
4d00: 73 65 74 20 6e 65 77 63 73 65 74 73 20 7b 7d 0a set newcsets {}.
4d10: 09 66 6f 72 65 61 63 68 20 66 72 61 67 6d 65 6e .foreach fragmen
4d20: 74 69 74 65 6d 73 20 24 61 72 67 73 20 7b 0a 09 titems $args {..
4d30: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 log write 8
4d40: 63 73 65 74 73 20 7b 4d 41 4b 45 3a 20 5b 6c 73 csets {MAKE: [ls
4d50: 6f 72 74 20 24 66 72 61 67 6d 65 6e 74 69 74 65 ort $fragmentite
4d60: 6d 73 5d 7d 0a 0a 09 20 20 20 20 73 65 74 20 66 ms]}... set f
4d70: 72 61 67 6d 65 6e 74 20 5b 24 74 79 70 65 20 25 ragment [$type %
4d80: 41 55 54 4f 25 20 24 70 72 6f 6a 65 63 74 20 24 AUTO% $project $
4d90: 63 73 74 79 70 65 20 24 63 73 73 72 63 20 5c 0a cstype $cssrc \.
4da0: 09 09 09 20 20 20 20 20 20 5b 55 6e 74 61 67 20 ... [Untag
4db0: 24 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 20 24 $fragmentitems $
4dc0: 63 73 74 79 70 65 5d 5d 0a 09 20 20 20 20 6c 61 cstype]].. la
4dd0: 70 70 65 6e 64 20 6e 65 77 63 73 65 74 73 20 24 ppend newcsets $
4de0: 66 72 61 67 6d 65 6e 74 0a 0a 09 20 20 20 20 24 fragment... $
4df0: 66 72 61 67 6d 65 6e 74 20 70 65 72 73 69 73 74 fragment persist
4e00: 0a 09 20 20 20 20 24 66 72 61 67 6d 65 6e 74 20 .. $fragment
4e10: 64 65 74 65 72 6d 69 6e 65 73 75 63 63 65 73 73 determinesuccess
4e20: 6f 72 73 0a 09 7d 0a 0a 09 23 20 54 68 65 20 70 ors..}...# The p
4e30: 72 65 64 65 63 65 73 73 6f 72 73 20 68 61 76 65 redecessors have
4e40: 20 74 6f 20 72 65 63 6f 6d 70 75 74 65 20 74 68 to recompute th
4e50: 65 69 72 20 73 75 63 63 65 73 73 6f 72 73 2c 20 eir successors,
4e60: 69 2e 65 2e 0a 09 23 20 72 65 6d 6f 76 65 20 74 i.e...# remove t
4e70: 68 65 20 64 72 6f 70 70 65 64 20 63 68 61 6e 67 he dropped chang
4e80: 65 73 65 74 20 61 6e 64 20 70 75 74 20 6f 6e 65 eset and put one
4e90: 20 6f 66 20 74 68 65 20 66 72 61 67 6d 65 6e 74 of the fragment
4ea0: 73 0a 09 23 20 69 6e 74 6f 20 69 74 73 20 70 6c s..# into its pl
4eb0: 61 63 65 2e 0a 09 66 6f 72 65 61 63 68 20 70 20 ace...foreach p
4ec0: 24 70 72 65 64 65 63 65 73 73 6f 72 73 20 7b 0a $predecessors {.
4ed0: 09 20 20 20 20 24 70 20 64 65 74 65 72 6d 69 6e . $p determin
4ee0: 65 73 75 63 63 65 73 73 6f 72 73 0a 09 7d 0a 0a esuccessors..}..
4ef0: 09 72 65 74 75 72 6e 20 24 6e 65 77 63 73 65 74 .return $newcset
4f00: 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 s. }.. typ
4f10: 65 6d 65 74 68 6f 64 20 69 74 65 6d 73 74 72 20 emethod itemstr
4f20: 7b 69 74 65 6d 7d 20 7b 0a 09 73 74 72 75 63 74 {item} {..struct
4f30: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 69 ::list assign $i
4f40: 74 65 6d 20 69 74 79 70 65 20 69 69 64 0a 09 72 tem itype iid..r
4f50: 65 74 75 72 6e 20 5b 24 69 74 79 70 65 20 73 74 eturn [$itype st
4f60: 72 20 24 69 69 64 5d 0a 20 20 20 20 7d 0a 0a 20 r $iid]. }..
4f70: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 74 typemethod st
4f80: 72 6c 69 73 74 20 7b 63 68 61 6e 67 65 73 65 74 rlist {changeset
4f90: 73 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 6a 6f s} {..return [jo
4fa0: 69 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 in [struct::list
4fb0: 20 6d 61 70 20 24 63 68 61 6e 67 65 73 65 74 73 map $changesets
4fc0: 20 5b 6d 79 70 72 6f 63 20 49 44 5d 5d 5d 0a 20 [myproc ID]]].
4fd0: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 49 }.. proc I
4fe0: 44 20 7b 63 73 65 74 7d 20 7b 20 24 63 73 65 74 D {cset} { $cset
4ff0: 20 73 74 72 20 7d 0a 0a 20 20 20 20 70 72 6f 63 str }.. proc
5000: 20 55 6e 74 61 67 20 7b 74 61 67 67 65 64 69 74 Untag {taggedit
5010: 65 6d 73 20 63 73 74 79 70 65 7d 20 7b 0a 09 72 ems cstype} {..r
5020: 65 74 75 72 6e 20 5b 73 74 72 75 63 74 3a 3a 6c eturn [struct::l
5030: 69 73 74 20 6d 61 70 20 24 74 61 67 67 65 64 69 ist map $taggedi
5040: 74 65 6d 73 20 5b 6d 79 70 72 6f 63 20 55 6e 74 tems [myproc Unt
5050: 61 67 31 20 24 63 73 74 79 70 65 5d 5d 0a 20 20 ag1 $cstype]].
5060: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 55 6e }.. proc Un
5070: 74 61 67 31 20 7b 63 73 74 79 70 65 20 74 68 65 tag1 {cstype the
5080: 69 74 65 6d 7d 20 7b 0a 09 73 74 72 75 63 74 3a item} {..struct:
5090: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 74 68 :list assign $th
50a0: 65 69 74 65 6d 20 74 20 69 0a 09 69 6e 74 65 67 eitem t i..integ
50b0: 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 63 73 rity assert {$cs
50c0: 74 79 70 65 20 65 71 20 24 74 7d 20 7b 49 74 65 type eq $t} {Ite
50d0: 6d 20 24 69 27 73 20 74 79 70 65 20 69 73 20 27 m $i's type is '
50e0: 24 74 27 2c 20 65 78 70 65 63 74 65 64 20 27 24 $t', expected '$
50f0: 63 73 74 79 70 65 27 7d 0a 09 72 65 74 75 72 6e cstype'}..return
5100: 20 24 69 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 $i. }.. p
5110: 72 6f 63 20 54 61 67 49 74 65 6d 44 69 63 74 20 roc TagItemDict
5120: 7b 69 74 65 6d 64 69 63 74 20 63 73 74 79 70 65 {itemdict cstype
5130: 7d 20 7b 0a 09 73 65 74 20 72 65 73 20 7b 7d 0a } {..set res {}.
5140: 09 66 6f 72 65 61 63 68 20 7b 69 20 76 7d 20 24 .foreach {i v} $
5150: 69 74 65 6d 64 69 63 74 20 7b 20 6c 61 70 70 65 itemdict { lappe
5160: 6e 64 20 72 65 73 20 5b 6c 69 73 74 20 24 63 73 nd res [list $cs
5170: 74 79 70 65 20 24 69 5d 20 24 76 20 7d 0a 09 72 type $i] $v }..r
5180: 65 74 75 72 6e 20 24 72 65 73 0a 20 20 20 20 7d eturn $res. }
5190: 0a 0a 20 20 20 20 70 72 6f 63 20 56 61 6c 69 64 .. proc Valid
51a0: 61 74 65 46 72 61 67 6d 65 6e 74 73 20 7b 63 73 ateFragments {cs
51b0: 65 74 20 66 72 61 67 6d 65 6e 74 73 7d 20 7b 0a et fragments} {.
51c0: 09 23 20 43 68 65 63 6b 20 74 68 65 20 76 61 72 .# Check the var
51d0: 69 6f 75 73 20 69 6e 74 65 67 72 69 74 79 20 63 ious integrity c
51e0: 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 74 onstraints for t
51f0: 68 65 20 66 72 61 67 6d 65 6e 74 73 0a 09 23 20 he fragments..#
5200: 73 70 65 63 69 66 79 69 6e 67 20 68 6f 77 20 74 specifying how t
5210: 6f 20 73 70 6c 69 74 20 74 68 65 20 63 68 61 6e o split the chan
5220: 67 65 73 65 74 3a 0a 09 23 0a 09 23 20 2a 20 57 geset:..#..# * W
5230: 65 20 6d 75 73 74 20 68 61 76 65 20 74 77 6f 20 e must have two
5240: 6f 72 20 6d 6f 72 65 20 66 72 61 67 6d 65 6e 74 or more fragment
5250: 73 2c 20 61 73 20 73 70 6c 69 74 74 69 6e 67 20 s, as splitting
5260: 61 0a 09 23 20 20 20 63 68 61 6e 67 65 73 65 74 a..# changeset
5270: 20 69 6e 74 6f 20 6f 6e 65 20 6d 61 6b 65 73 20 into one makes
5280: 6e 6f 20 73 65 6e 73 65 2e 0a 09 23 20 2a 20 4e no sense...# * N
5290: 6f 20 66 72 61 67 6d 65 6e 74 20 6d 61 79 20 62 o fragment may b
52a0: 65 20 65 6d 70 74 79 2e 0a 09 23 20 2a 20 41 6c e empty...# * Al
52b0: 6c 20 66 72 61 67 6d 65 6e 74 73 20 68 61 76 65 l fragments have
52c0: 20 74 6f 20 62 65 20 74 72 75 65 20 73 75 62 73 to be true subs
52d0: 65 74 73 20 6f 66 20 74 68 65 20 69 74 65 6d 73 ets of the items
52e0: 20 69 6e 20 74 68 65 0a 09 23 20 20 20 63 68 61 in the..# cha
52f0: 6e 67 65 73 65 74 20 74 6f 20 73 70 6c 69 74 2e ngeset to split.
5300: 20 54 68 65 20 27 74 72 75 65 27 20 69 73 20 69 The 'true' is i
5310: 6d 70 6c 69 65 64 20 62 65 63 61 75 73 65 20 6e mplied because n
5320: 6f 6e 65 20 61 72 65 0a 09 23 20 20 20 61 6c 6c one are..# all
5330: 6f 77 65 64 20 74 6f 20 62 65 20 65 6d 70 74 79 owed to be empty
5340: 2c 20 73 6f 20 65 61 63 68 20 68 61 73 20 74 6f , so each has to
5350: 20 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e be smaller than
5360: 20 74 68 65 0a 09 23 20 20 20 74 6f 74 61 6c 2e the..# total.
5370: 0a 09 23 20 2a 20 54 68 65 20 75 6e 69 6f 6e 20 ..# * The union
5380: 6f 66 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 of the fragments
5390: 20 68 61 73 20 74 6f 20 62 65 20 74 68 65 20 69 has to be the i
53a0: 74 65 6d 20 73 65 74 20 6f 66 20 74 68 65 0a 09 tem set of the..
53b0: 23 20 20 20 63 68 61 6e 67 65 73 65 74 2e 0a 09 # changeset...
53c0: 23 20 2a 20 54 68 65 20 66 72 61 67 6d 65 6e 74 # * The fragment
53d0: 20 6d 75 73 74 20 6e 6f 74 20 6f 76 65 72 6c 61 must not overla
53e0: 70 2c 20 69 2e 65 2e 20 74 68 65 69 72 20 70 61 p, i.e. their pa
53f0: 69 72 77 69 73 65 0a 09 23 20 20 20 69 6e 74 65 irwise..# inte
5400: 72 73 65 63 74 69 6f 6e 73 20 68 61 76 65 20 74 rsections have t
5410: 6f 20 62 65 20 65 6d 70 74 79 2e 0a 0a 09 73 65 o be empty....se
5420: 74 20 63 6f 76 65 72 20 7b 7d 0a 09 66 6f 72 65 t cover {}..fore
5430: 61 63 68 20 66 72 61 67 6d 65 6e 74 69 74 65 6d ach fragmentitem
5440: 73 20 24 66 72 61 67 6d 65 6e 74 73 20 7b 0a 09 s $fragments {..
5450: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 log write 8
5460: 63 73 65 74 73 20 7b 4e 45 57 3a 20 5b 6c 73 6f csets {NEW: [lso
5470: 72 74 20 24 66 72 61 67 6d 65 6e 74 69 74 65 6d rt $fragmentitem
5480: 73 5d 7d 0a 0a 09 20 20 20 20 69 6e 74 65 67 72 s]}... integr
5490: 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 21 ity assert {...!
54a0: 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 65 6d 70 [struct::set emp
54b0: 74 79 20 24 66 72 61 67 6d 65 6e 74 69 74 65 6d ty $fragmentitem
54c0: 73 5d 0a 09 20 20 20 20 7d 20 7b 63 68 61 6e 67 s].. } {chang
54d0: 65 73 65 74 20 66 72 61 67 6d 65 6e 74 20 69 73 eset fragment is
54e0: 20 65 6d 70 74 79 7d 0a 0a 09 20 20 20 20 69 6e empty}... in
54f0: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
5500: 0a 09 09 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 ...[struct::set
5510: 73 75 62 73 65 74 6f 66 20 24 66 72 61 67 6d 65 subsetof $fragme
5520: 6e 74 69 74 65 6d 73 20 5b 24 63 73 65 74 20 69 ntitems [$cset i
5530: 74 65 6d 73 5d 5d 0a 09 20 20 20 20 7d 20 7b 63 tems]].. } {c
5540: 68 61 6e 67 65 73 65 74 20 66 72 61 67 6d 65 6e hangeset fragmen
5550: 74 20 69 73 20 6e 6f 74 20 61 20 73 75 62 73 65 t is not a subse
5560: 74 7d 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a t}.. struct::
5570: 73 65 74 20 61 64 64 20 63 6f 76 65 72 20 24 66 set add cover $f
5580: 72 61 67 6d 65 6e 74 69 74 65 6d 73 0a 09 7d 0a ragmentitems..}.
5590: 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 ..integrity asse
55a0: 72 74 20 7b 0a 09 20 20 20 20 5b 73 74 72 75 63 rt {.. [struc
55b0: 74 3a 3a 73 65 74 20 65 71 75 61 6c 20 24 63 6f t::set equal $co
55c0: 76 65 72 20 5b 24 63 73 65 74 20 69 74 65 6d 73 ver [$cset items
55d0: 5d 5d 0a 09 20 7d 20 7b 54 68 65 20 66 72 61 67 ]].. } {The frag
55e0: 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 63 6f 76 ments do not cov
55f0: 65 72 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 er the original
5600: 63 68 61 6e 67 65 73 65 74 7d 0a 0a 09 73 65 74 changeset}...set
5610: 20 69 20 31 0a 09 66 6f 72 65 61 63 68 20 66 69 i 1..foreach fi
5620: 61 20 24 66 72 61 67 6d 65 6e 74 73 20 7b 0a 09 a $fragments {..
5630: 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 62 20 foreach fib
5640: 5b 6c 72 61 6e 67 65 20 24 66 72 61 67 6d 65 6e [lrange $fragmen
5650: 74 73 20 24 69 20 65 6e 64 5d 20 7b 0a 09 09 69 ts $i end] {...i
5660: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
5670: 7b 0a 09 09 20 20 20 20 5b 73 74 72 75 63 74 3a {... [struct:
5680: 3a 73 65 74 20 65 6d 70 74 79 20 5b 73 74 72 75 :set empty [stru
5690: 63 74 3a 3a 73 65 74 20 69 6e 74 65 72 73 65 63 ct::set intersec
56a0: 74 20 24 66 69 61 20 24 66 69 62 5d 5d 0a 09 09 t $fia $fib]]...
56b0: 7d 20 7b 54 68 65 20 66 72 61 67 6d 65 6e 74 73 } {The fragments
56c0: 20 3c 24 66 69 61 3e 20 61 6e 64 20 3c 24 66 69 <$fia> and <$fi
56d0: 62 3e 20 6f 76 65 72 6c 61 70 7d 0a 09 20 20 20 b> overlap}..
56e0: 20 7d 0a 09 20 20 20 20 69 6e 63 72 20 69 0a 09 }.. incr i..
56f0: 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d }...return. }
5700: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ###
5710: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
5720: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 #############.
5730: 20 20 23 23 20 53 74 61 74 65 0a 0a 20 20 20 20 ## State..
5740: 76 61 72 69 61 62 6c 65 20 6d 79 69 64 20 20 20 variable myid
5750: 20 20 20 20 20 7b 7d 20 3b 20 23 20 49 64 20 6f {} ; # Id o
5760: 66 20 74 68 65 20 63 73 65 74 20 66 6f 72 20 74 f the cset for t
5770: 68 65 20 70 65 72 73 69 73 74 65 6e 74 0a 09 09 he persistent...
5780: 09 20 20 20 20 20 20 23 20 73 74 61 74 65 2e 0a . # state..
5790: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 variable myp
57a0: 72 6f 6a 65 63 74 20 20 20 7b 7d 20 3b 20 23 20 roject {} ; #
57b0: 52 65 66 65 72 65 6e 63 65 20 6f 66 20 74 68 65 Reference of the
57c0: 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 74 20 project object
57d0: 74 68 65 0a 09 09 09 20 20 20 20 20 20 23 20 63 the.... # c
57e0: 68 61 6e 67 65 73 65 74 20 62 65 6c 6f 6e 67 73 hangeset belongs
57f0: 20 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c to.. variabl
5800: 65 20 6d 79 74 79 70 65 20 20 20 20 20 20 7b 7d e mytype {}
5810: 20 3b 20 23 20 57 68 61 74 20 74 68 65 20 63 68 ; # What the ch
5820: 61 6e 67 65 73 65 74 20 69 73 20 62 61 73 65 64 angeset is based
5830: 20 6f 6e 0a 09 09 09 20 20 20 20 20 20 23 20 28 on.... # (
5840: 72 65 76 69 73 69 6f 6e 73 2c 20 74 61 67 73 2c revisions, tags,
5850: 20 6f 72 20 62 72 61 6e 63 68 65 73 29 2e 0a 09 or branches)...
5860: 09 09 20 20 20 20 20 20 23 20 56 61 6c 75 65 73 .. # Values
5870: 3a 20 53 65 65 20 6d 79 63 73 74 79 70 65 2e 20 : See mycstype.
5880: 4e 6f 74 65 20 74 68 61 74 20 77 65 0a 09 09 09 Note that we....
5890: 20 20 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 # have to
58a0: 6b 65 65 70 20 74 68 65 20 6e 61 6d 65 73 20 6f keep the names o
58b0: 66 20 74 68 65 20 68 65 6c 70 65 72 0a 09 09 09 f the helper....
58c0: 20 20 20 20 20 20 23 20 73 69 6e 67 6c 65 74 6f # singleto
58d0: 6e 73 20 69 6e 20 73 79 6e 63 20 77 69 74 68 20 ns in sync with
58e0: 74 68 65 20 63 6f 6e 74 65 6e 74 73 0a 09 09 09 the contents....
58f0: 20 20 20 20 20 20 23 20 6f 66 20 73 74 61 74 65 # of state
5900: 20 74 61 62 6c 65 20 27 63 73 74 79 70 65 27 2c table 'cstype',
5910: 20 61 6e 64 20 76 61 72 69 6f 75 73 0a 09 09 09 and various....
5920: 20 20 20 20 20 20 23 20 6f 74 68 65 72 20 70 6c # other pl
5930: 61 63 65 73 20 75 73 69 6e 67 20 74 68 65 6d 20 aces using them
5940: 68 61 72 64 77 69 72 65 64 2e 0a 20 20 20 20 76 hardwired.. v
5950: 61 72 69 61 62 6c 65 20 6d 79 74 79 70 65 6f 62 ariable mytypeob
5960: 6a 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 j {} ; # Refer
5970: 65 6e 63 65 20 74 6f 20 74 68 65 20 63 6f 6e 74 ence to the cont
5980: 61 69 6e 65 72 20 66 6f 72 20 74 68 65 0a 09 09 ainer for the...
5990: 09 20 20 20 20 20 20 23 20 74 79 70 65 20 64 65 . # type de
59a0: 70 65 6e 64 65 6e 74 20 63 6f 64 65 2e 20 44 65 pendent code. De
59b0: 72 69 76 65 64 20 66 72 6f 6d 0a 09 09 09 20 20 rived from....
59c0: 20 20 20 20 23 20 6d 79 74 79 70 65 2e 0a 20 20 # mytype..
59d0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 73 72 63 variable mysrc
59e0: 69 64 20 20 20 20 20 7b 7d 20 3b 20 23 20 49 64 id {} ; # Id
59f0: 20 6f 66 20 74 68 65 20 6d 65 74 61 64 61 74 61 of the metadata
5a00: 20 6f 72 20 73 79 6d 62 6f 6c 20 74 68 65 20 63 or symbol the c
5a10: 73 65 74 0a 09 09 09 20 20 20 20 20 20 23 20 69 set.... # i
5a20: 73 20 62 61 73 65 64 20 6f 6e 2e 0a 20 20 20 20 s based on..
5a30: 76 61 72 69 61 62 6c 65 20 6d 79 69 74 65 6d 73 variable myitems
5a40: 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74 {} ; # List
5a50: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 6c 65 76 of the file lev
5a60: 65 6c 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 09 el revisions,...
5a70: 09 20 20 20 20 20 20 23 20 74 61 67 73 2c 20 6f . # tags, o
5a80: 72 20 62 72 61 6e 63 68 65 73 20 69 6e 20 74 68 r branches in th
5a90: 65 20 63 73 65 74 2c 20 61 73 0a 09 09 09 20 20 e cset, as....
5aa0: 20 20 20 20 23 20 69 64 73 2e 20 4e 6f 74 20 74 # ids. Not t
5ab0: 61 67 67 65 64 2e 0a 20 20 20 20 76 61 72 69 61 agged.. varia
5ac0: 62 6c 65 20 6d 79 74 69 74 65 6d 73 20 20 20 20 ble mytitems
5ad0: 7b 7d 20 3b 20 23 20 41 73 20 6d 79 69 74 65 6d {} ; # As myitem
5ae0: 73 2c 20 74 68 65 20 74 61 67 67 65 64 20 66 6f s, the tagged fo
5af0: 72 6d 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 rm.. variable
5b00: 20 6d 79 70 6f 73 20 20 20 20 20 20 20 7b 7d 20 mypos {}
5b10: 3b 20 23 20 43 6f 6d 6d 69 74 20 70 6f 73 69 74 ; # Commit posit
5b20: 69 6f 6e 20 6f 66 20 74 68 65 20 63 68 61 6e 67 ion of the chang
5b30: 65 73 65 74 2c 20 69 66 0a 09 09 09 20 20 20 20 eset, if....
5b40: 20 20 23 20 6b 6e 6f 77 6e 2e 0a 0a 20 20 20 20 # known...
5b50: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
5b60: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
5b70: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 #######. ## I
5b80: 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a nternal methods.
5b90: 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c . typevariabl
5ba0: 65 20 6d 79 63 6f 75 6e 74 65 72 20 20 20 20 20 e mycounter
5bb0: 20 20 20 30 20 3b 20 23 20 49 64 20 63 6f 75 6e 0 ; # Id coun
5bc0: 74 65 72 20 66 6f 72 20 63 73 65 74 73 2e 20 4c ter for csets. L
5bd0: 61 73 74 20 69 64 0a 09 09 09 09 20 20 20 20 20 ast id.....
5be0: 20 23 20 75 73 65 64 2e 0a 20 20 20 20 74 79 70 # used.. typ
5bf0: 65 76 61 72 69 61 62 6c 65 20 6d 79 63 73 74 79 evariable mycsty
5c00: 70 65 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 pe -array {} ; #
5c10: 20 4d 61 70 20 63 73 74 79 70 65 73 20 28 6e 61 Map cstypes (na
5c20: 6d 65 73 29 20 74 6f 20 70 65 72 73 69 73 74 65 mes) to persiste
5c30: 6e 74 0a 09 09 09 09 20 20 20 20 20 20 23 20 69 nt..... # i
5c40: 64 73 2e 20 4e 6f 74 65 20 74 68 61 74 20 77 65 ds. Note that we
5c50: 20 68 61 76 65 20 74 6f 20 6b 65 65 70 0a 09 09 have to keep...
5c60: 09 09 20 20 20 20 20 20 23 20 74 68 65 20 6e 61 .. # the na
5c70: 6d 65 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 mes in the table
5c80: 20 27 63 73 74 79 70 65 27 0a 09 09 09 09 20 20 'cstype'.....
5c90: 20 20 20 20 23 20 69 6e 20 73 79 6e 63 20 77 69 # in sync wi
5ca0: 74 68 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 th the names of
5cb0: 74 68 65 0a 09 09 09 09 20 20 20 20 20 20 23 20 the..... #
5cc0: 68 65 6c 70 65 72 20 73 69 6e 67 6c 65 74 6f 6e helper singleton
5cd0: 73 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 s... typemeth
5ce0: 6f 64 20 69 6e 6f 72 64 65 72 20 7b 70 72 6f 6a od inorder {proj
5cf0: 65 63 74 69 64 7d 20 7b 0a 09 23 20 52 65 74 75 ectid} {..# Retu
5d00: 72 6e 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 20 rn all revision
5d10: 63 68 61 6e 67 65 73 65 74 73 20 66 6f 72 20 74 changesets for t
5d20: 68 65 20 73 70 65 63 69 66 69 65 64 20 70 72 6f he specified pro
5d30: 6a 65 63 74 2c 20 69 6e 0a 09 23 20 74 68 65 20 ject, in..# the
5d40: 6f 72 64 65 72 20 67 69 76 65 6e 20 74 6f 20 74 order given to t
5d50: 68 65 6d 20 62 79 20 74 68 65 20 73 6f 72 74 20 hem by the sort
5d60: 70 61 73 73 65 73 2e 20 42 6f 74 68 20 74 68 65 passes. Both the
5d70: 0a 09 23 20 66 69 6c 74 65 72 69 6e 67 20 62 79 ..# filtering by
5d80: 20 70 72 6f 6a 65 63 74 20 61 6e 64 20 73 6f 72 project and sor
5d90: 74 69 6e 67 20 6d 61 6b 65 20 75 73 65 20 6f 66 ting make use of
5da0: 20 27 70 72 6f 6a 65 63 74 3a 3a 72 65 76 0a 09 'project::rev..
5db0: 23 20 72 65 76 27 20 69 6d 70 6f 73 73 69 62 6c # rev' impossibl
5dc0: 65 2e 0a 0a 09 73 65 74 20 72 65 73 20 7b 7d 0a e....set res {}.
5dd0: 09 66 6f 72 65 61 63 68 20 7b 63 69 64 20 63 64 .foreach {cid cd
5de0: 61 74 65 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 ate} [state run
5df0: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e {.. SELECT C.
5e00: 63 69 64 2c 20 54 2e 64 61 74 65 0a 09 20 20 20 cid, T.date..
5e10: 20 46 52 4f 4d 20 20 20 63 68 61 6e 67 65 73 65 FROM changese
5e20: 74 20 43 2c 20 63 73 74 69 6d 65 73 74 61 6d 70 t C, cstimestamp
5e30: 20 54 0a 09 20 20 20 20 57 48 45 52 45 20 20 43 T.. WHERE C
5e40: 2e 74 79 70 65 20 3d 20 30 20 20 20 20 20 20 20 .type = 0
5e50: 20 20 20 2d 2d 20 6c 69 6d 69 74 20 74 6f 20 72 -- limit to r
5e60: 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 evision changese
5e70: 74 73 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 ts.. AND C
5e80: 2e 70 69 64 20 20 3d 20 24 70 72 6f 6a 65 63 74 .pid = $project
5e90: 69 64 20 2d 2d 20 6c 69 6d 69 74 20 74 6f 20 63 id -- limit to c
5ea0: 68 61 6e 67 65 73 65 74 73 20 69 6e 20 70 72 6f hangesets in pro
5eb0: 6a 65 63 74 0a 09 20 20 20 20 41 4e 44 20 20 20 ject.. AND
5ec0: 20 54 2e 63 69 64 20 20 3d 20 43 2e 63 69 64 20 T.cid = C.cid
5ed0: 20 20 20 20 20 2d 2d 20 67 65 74 20 6f 72 64 65 -- get orde
5ee0: 72 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e ring information
5ef0: 0a 09 20 20 20 20 4f 52 44 45 52 20 42 59 20 54 .. ORDER BY T
5f00: 2e 64 61 74 65 20 20 20 20 20 20 20 20 20 20 20 .date
5f10: 20 2d 2d 20 73 6f 72 74 20 69 6e 74 6f 20 63 6f -- sort into co
5f20: 6d 6d 69 74 20 6f 72 64 65 72 0a 09 7d 5d 20 7b mmit order..}] {
5f30: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .. lappend re
5f40: 73 20 24 6d 79 69 64 6d 61 70 28 24 63 69 64 29 s $myidmap($cid)
5f50: 20 24 63 64 61 74 65 0a 09 7d 0a 09 72 65 74 75 $cdate..}..retu
5f60: 72 6e 20 24 72 65 73 0a 20 20 20 20 7d 0a 0a 20 rn $res. }..
5f70: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 67 65 typemethod ge
5f80: 74 63 73 74 79 70 65 73 20 7b 7d 20 7b 0a 09 66 tcstypes {} {..f
5f90: 6f 72 65 61 63 68 20 7b 74 69 64 20 6e 61 6d 65 oreach {tid name
5fa0: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 } [state run {..
5fb0: 20 20 20 20 53 45 4c 45 43 54 20 74 69 64 2c 20 SELECT tid,
5fc0: 6e 61 6d 65 20 46 52 4f 4d 20 63 73 74 79 70 65 name FROM cstype
5fd0: 3b 0a 09 7d 5d 20 7b 20 73 65 74 20 6d 79 63 73 ;..}] { set mycs
5fe0: 74 79 70 65 28 24 6e 61 6d 65 29 20 24 74 69 64 type($name) $tid
5ff0: 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d }..return. }
6000: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
6010: 20 6c 6f 61 64 20 7b 72 65 70 6f 73 69 74 6f 72 load {repositor
6020: 79 7d 20 7b 0a 09 73 65 74 20 6e 20 30 0a 09 6c y} {..set n 0..l
6030: 6f 67 20 77 72 69 74 65 20 32 20 63 73 65 74 73 og write 2 csets
6040: 20 7b 4c 6f 61 64 69 6e 67 20 74 68 65 20 63 68 {Loading the ch
6050: 61 6e 67 65 73 65 74 73 7d 0a 09 66 6f 72 65 61 angesets}..forea
6060: 63 68 20 7b 69 64 20 70 69 64 20 63 73 74 79 70 ch {id pid cstyp
6070: 65 20 73 72 63 69 64 7d 20 5b 73 74 61 74 65 20 e srcid} [state
6080: 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 run {.. SELEC
6090: 54 20 43 2e 63 69 64 2c 20 43 2e 70 69 64 2c 20 T C.cid, C.pid,
60a0: 43 53 2e 6e 61 6d 65 2c 20 43 2e 73 72 63 0a 09 CS.name, C.src..
60b0: 20 20 20 20 46 52 4f 4d 20 20 20 63 68 61 6e 67 FROM chang
60c0: 65 73 65 74 20 43 2c 20 63 73 74 79 70 65 20 43 eset C, cstype C
60d0: 53 0a 09 20 20 20 20 57 48 45 52 45 20 20 43 2e S.. WHERE C.
60e0: 74 79 70 65 20 3d 20 43 53 2e 74 69 64 0a 09 20 type = CS.tid..
60f0: 20 20 20 4f 52 44 45 52 20 42 59 20 43 2e 63 69 ORDER BY C.ci
6100: 64 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 6c 6f 67 d..}] {.. log
6110: 20 70 72 6f 67 72 65 73 73 20 32 20 63 73 65 74 progress 2 cset
6120: 73 20 24 6e 20 7b 7d 0a 09 20 20 20 20 73 65 74 s $n {}.. set
6130: 20 72 20 5b 24 74 79 70 65 20 25 41 55 54 4f 25 r [$type %AUTO%
6140: 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 70 72 [$repository pr
6150: 6f 6a 65 63 74 6f 66 20 24 70 69 64 5d 20 24 63 ojectof $pid] $c
6160: 73 74 79 70 65 20 24 73 72 63 69 64 20 5b 73 74 stype $srcid [st
6170: 61 74 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c 45 ate run {...SELE
6180: 43 54 20 43 2e 69 69 64 0a 09 09 46 52 4f 4d 20 CT C.iid...FROM
6190: 20 20 63 73 69 74 65 6d 20 43 0a 09 09 57 48 45 csitem C...WHE
61a0: 52 45 20 20 43 2e 63 69 64 20 3d 20 24 69 64 0a RE C.cid = $id.
61b0: 09 09 4f 52 44 45 52 20 42 59 20 43 2e 70 6f 73 ..ORDER BY C.pos
61c0: 0a 09 20 20 20 20 7d 5d 20 24 69 64 5d 0a 09 20 .. }] $id]..
61d0: 20 20 20 69 6e 63 72 20 6e 0a 09 7d 0a 09 72 65 incr n..}..re
61e0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
61f0: 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 61 64 63 typemethod loadc
6200: 6f 75 6e 74 65 72 20 7b 7d 20 7b 0a 09 23 20 49 ounter {} {..# I
6210: 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 63 6f nitialize the co
6220: 75 6e 74 65 72 20 66 72 6f 6d 20 74 68 65 20 73 unter from the s
6230: 74 61 74 65 0a 09 6c 6f 67 20 77 72 69 74 65 20 tate..log write
6240: 32 20 63 73 65 74 73 20 7b 4c 6f 61 64 69 6e 67 2 csets {Loading
6250: 20 63 68 61 6e 67 65 73 65 74 20 63 6f 75 6e 74 changeset count
6260: 65 72 7d 0a 09 73 65 74 20 6d 79 63 6f 75 6e 74 er}..set mycount
6270: 65 72 20 5b 73 74 61 74 65 20 6f 6e 65 20 7b 20 er [state one {
6280: 53 45 4c 45 43 54 20 4d 41 58 28 63 69 64 29 20 SELECT MAX(cid)
6290: 46 52 4f 4d 20 63 68 61 6e 67 65 73 65 74 20 7d FROM changeset }
62a0: 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a ]..return. }.
62b0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
62c0: 6e 75 6d 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 num {} { return
62d0: 24 6d 79 63 6f 75 6e 74 65 72 20 7d 0a 0a 20 20 $mycounter }..
62e0: 20 20 70 72 6f 63 20 49 6e 69 74 69 61 6c 69 7a proc Initializ
62f0: 65 42 72 65 61 6b 53 74 61 74 65 20 7b 72 65 76 eBreakState {rev
6300: 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 61 72 isions} {..upvar
6310: 20 31 20 70 6f 73 20 70 6f 73 20 63 72 6f 73 73 1 pos pos cross
6320: 20 63 72 6f 73 73 20 72 61 6e 67 65 20 72 61 6e cross range ran
6330: 67 65 20 64 65 70 63 20 64 65 70 63 20 64 65 6c ge depc depc del
6340: 74 61 20 64 65 6c 74 61 20 5c 0a 09 20 20 20 20 ta delta \..
6350: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 64 65 70 dependencies dep
6360: 65 6e 64 65 6e 63 69 65 73 0a 0a 09 23 20 46 69 endencies...# Fi
6370: 72 73 74 20 77 65 20 63 72 65 61 74 65 20 61 20 rst we create a
6380: 6d 61 70 20 6f 66 20 70 6f 73 69 74 69 6f 6e 73 map of positions
6390: 20 74 6f 20 6d 61 6b 65 20 69 74 20 65 61 73 69 to make it easi
63a0: 65 72 20 74 6f 0a 09 23 20 64 65 74 65 72 6d 69 er to..# determi
63b0: 6e 65 20 77 68 65 74 68 65 72 20 61 20 64 65 70 ne whether a dep
63c0: 65 6e 64 65 6e 63 79 20 63 72 6f 73 73 65 73 20 endency crosses
63d0: 61 20 70 61 72 74 69 63 75 6c 61 72 20 69 6e 64 a particular ind
63e0: 65 78 2e 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 ex....log write
63f0: 31 34 20 63 73 65 74 73 20 7b 49 42 53 3a 20 23 14 csets {IBS: #
6400: 72 65 76 20 5b 6c 6c 65 6e 67 74 68 20 24 72 65 rev [llength $re
6410: 76 69 73 69 6f 6e 73 5d 7d 0a 09 6c 6f 67 20 77 visions]}..log w
6420: 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 49 rite 14 csets {I
6430: 42 53 3a 20 70 6f 73 20 6d 61 70 2c 20 63 72 6f BS: pos map, cro
6440: 73 73 20 63 6f 75 6e 74 65 72 7d 0a 0a 09 61 72 ss counter}...ar
6450: 72 61 79 20 73 65 74 20 70 6f 73 20 20 20 7b 7d ray set pos {}
6460: 0a 09 61 72 72 61 79 20 73 65 74 20 63 72 6f 73 ..array set cros
6470: 73 20 7b 7d 0a 09 61 72 72 61 79 20 73 65 74 20 s {}..array set
6480: 64 65 70 63 20 20 7b 7d 0a 09 73 65 74 20 72 61 depc {}..set ra
6490: 6e 67 65 20 20 20 20 20 20 20 7b 7d 0a 09 73 65 nge {}..se
64a0: 74 20 6e 20 30 0a 09 66 6f 72 65 61 63 68 20 72 t n 0..foreach r
64b0: 65 76 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 0a ev $revisions {.
64c0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 61 6e . lappend ran
64d0: 67 65 20 24 6e 0a 09 20 20 20 20 73 65 74 20 70 ge $n.. set p
64e0: 6f 73 28 24 72 65 76 29 20 24 6e 0a 09 20 20 20 os($rev) $n..
64f0: 20 73 65 74 20 63 72 6f 73 73 28 24 6e 29 20 30 set cross($n) 0
6500: 0a 09 20 20 20 20 69 6e 63 72 20 6e 0a 09 7d 0a .. incr n..}.
6510: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 ..log write 14 c
6520: 73 65 74 73 20 7b 49 42 53 3a 20 70 6f 73 2f 5b sets {IBS: pos/[
6530: 61 72 72 61 79 20 73 69 7a 65 20 70 6f 73 5d 2c array size pos],
6540: 20 63 72 6f 73 73 2f 5b 61 72 72 61 79 20 73 69 cross/[array si
6550: 7a 65 20 63 72 6f 73 73 5d 7d 0a 0a 09 23 20 53 ze cross]}...# S
6560: 65 63 6f 6e 64 6c 79 20 77 65 20 63 6f 75 6e 74 econdly we count
6570: 20 74 68 65 20 63 72 6f 73 73 69 6e 67 73 20 70 the crossings p
6580: 65 72 20 70 6f 73 69 74 69 6f 6e 2c 20 62 79 20 er position, by
6590: 69 74 65 72 61 74 69 6e 67 0a 09 23 20 6f 76 65 iterating..# ove
65a0: 72 20 74 68 65 20 72 65 63 6f 72 64 65 64 20 69 r the recorded i
65b0: 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e nternal dependen
65c0: 63 69 65 73 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 cies....# Note:
65d0: 49 66 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70 If the timestamp
65e0: 73 20 61 72 65 20 62 61 64 6c 79 20 6f 75 74 20 s are badly out
65f0: 6f 66 20 6f 72 64 65 72 20 69 74 20 69 73 0a 09 of order it is..
6600: 23 20 20 20 20 20 20 20 70 6f 73 73 69 62 6c 65 # possible
6610: 20 74 6f 20 68 61 76 65 20 61 20 62 61 63 6b 77 to have a backw
6620: 61 72 64 20 73 75 63 63 65 73 73 6f 72 20 64 65 ard successor de
6630: 70 65 6e 64 65 6e 63 79 2c 0a 09 23 20 20 20 20 pendency,..#
6640: 20 20 20 69 2e 65 2e 20 77 69 74 68 20 73 74 61 i.e. with sta
6650: 72 74 20 3e 20 65 6e 64 2e 20 57 65 20 6d 61 79 rt > end. We may
6660: 20 68 61 76 65 20 74 6f 20 73 77 61 70 20 74 68 have to swap th
6670: 65 20 69 6e 64 69 63 65 73 0a 09 23 20 20 20 20 e indices..#
6680: 20 20 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 to ensure tha
6690: 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 t the following
66a0: 6c 6f 6f 70 20 72 75 6e 73 20 63 6f 72 72 65 63 loop runs correc
66b0: 74 6c 79 2e 0a 09 23 0a 09 23 20 4e 6f 74 65 20 tly...#..# Note
66c0: 32 3a 20 73 74 61 72 74 20 3d 3d 20 65 6e 64 20 2: start == end
66d0: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e is not possible.
66e0: 20 49 74 20 69 6e 64 69 63 61 74 65 73 20 61 0a It indicates a.
66f0: 09 23 20 20 20 20 20 20 20 20 20 73 65 6c 66 2d .# self-
6700: 64 65 70 65 6e 64 65 6e 63 79 20 64 75 65 20 74 dependency due t
6710: 6f 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73 o the uniqueness
6720: 20 6f 66 20 70 6f 73 69 74 69 6f 6e 73 2c 0a 09 of positions,..
6730: 23 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 # and th
6740: 61 74 20 69 73 20 73 6f 6d 65 74 68 69 6e 67 20 at is something
6750: 77 65 20 68 61 76 65 20 72 75 6c 65 64 20 6f 75 we have ruled ou
6760: 74 20 61 6c 72 65 61 64 79 2c 20 73 65 65 0a 09 t already, see..
6770: 23 20 20 20 20 20 20 20 20 20 27 72 65 76 20 69 # 'rev i
6780: 6e 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 nternalsuccessor
6790: 73 27 2e 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 s'....log write
67a0: 31 34 20 63 73 65 74 73 20 7b 49 42 53 3a 20 63 14 csets {IBS: c
67b0: 72 6f 73 73 20 63 6f 75 6e 74 65 72 20 66 69 6c ross counter fil
67c0: 6c 69 6e 67 2c 20 70 6f 73 2f 63 72 6f 73 73 20 ling, pos/cross
67d0: 6d 61 70 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b map}...foreach {
67e0: 72 69 64 20 63 68 69 6c 64 72 65 6e 7d 20 5b 61 rid children} [a
67f0: 72 72 61 79 20 67 65 74 20 64 65 70 65 6e 64 65 rray get depende
6800: 6e 63 69 65 73 5d 20 7b 0a 09 20 20 20 20 66 6f ncies] {.. fo
6810: 72 65 61 63 68 20 63 68 69 6c 64 20 24 63 68 69 reach child $chi
6820: 6c 64 72 65 6e 20 7b 0a 09 09 73 65 74 20 64 6b ldren {...set dk
6830: 65 79 20 20 20 20 5b 6c 69 73 74 20 24 72 69 64 ey [list $rid
6840: 20 24 63 68 69 6c 64 5d 0a 09 09 73 65 74 20 73 $child]...set s
6850: 74 61 72 74 20 20 20 24 70 6f 73 28 24 72 69 64 tart $pos($rid
6860: 29 0a 09 09 73 65 74 20 65 6e 64 20 20 20 20 20 )...set end
6870: 24 70 6f 73 28 24 63 68 69 6c 64 29 0a 09 09 73 $pos($child)...s
6880: 65 74 20 63 72 6f 73 73 65 73 20 7b 7d 0a 0a 09 et crosses {}...
6890: 09 69 66 20 7b 24 73 74 61 72 74 20 3e 20 24 65 .if {$start > $e
68a0: 6e 64 7d 20 7b 0a 09 09 20 20 20 20 77 68 69 6c nd} {... whil
68b0: 65 20 7b 24 65 6e 64 20 3c 20 24 73 74 61 72 74 e {$end < $start
68c0: 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 63 } {....lappend c
68d0: 72 6f 73 73 65 73 20 24 65 6e 64 0a 09 09 09 69 rosses $end....i
68e0: 6e 63 72 20 63 72 6f 73 73 28 24 65 6e 64 29 0a ncr cross($end).
68f0: 09 09 09 69 6e 63 72 20 65 6e 64 0a 09 09 20 20 ...incr end...
6900: 20 20 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 }...} else {..
6910: 09 20 20 20 20 77 68 69 6c 65 20 7b 24 73 74 61 . while {$sta
6920: 72 74 20 3c 20 24 65 6e 64 7d 20 7b 0a 09 09 09 rt < $end} {....
6930: 6c 61 70 70 65 6e 64 20 63 72 6f 73 73 65 73 20 lappend crosses
6940: 24 73 74 61 72 74 0a 09 09 09 69 6e 63 72 20 63 $start....incr c
6950: 72 6f 73 73 28 24 73 74 61 72 74 29 0a 09 09 09 ross($start)....
6960: 69 6e 63 72 20 73 74 61 72 74 0a 09 09 20 20 20 incr start...
6970: 20 7d 0a 09 09 7d 0a 09 09 73 65 74 20 64 65 70 }...}...set dep
6980: 63 28 24 64 6b 65 79 29 20 24 63 72 6f 73 73 65 c($dkey) $crosse
6990: 73 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 6c 6f s.. }..}...lo
69a0: 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73 g write 14 csets
69b0: 20 7b 49 42 53 3a 20 70 6f 73 2f 5b 61 72 72 61 {IBS: pos/[arra
69c0: 79 20 73 69 7a 65 20 70 6f 73 5d 2c 20 63 72 6f y size pos], cro
69d0: 73 73 2f 5b 61 72 72 61 79 20 73 69 7a 65 20 63 ss/[array size c
69e0: 72 6f 73 73 5d 2c 20 64 65 70 63 2f 5b 61 72 72 ross], depc/[arr
69f0: 61 79 20 73 69 7a 65 20 64 65 70 63 5d 20 28 66 ay size depc] (f
6a00: 6f 72 20 5b 6c 6c 65 6e 67 74 68 20 24 72 65 76 or [llength $rev
6a10: 69 73 69 6f 6e 73 5d 29 7d 0a 09 6c 6f 67 20 77 isions])}..log w
6a20: 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 49 rite 14 csets {I
6a30: 42 53 3a 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 BS: timestamps,
6a40: 64 65 6c 74 61 73 7d 0a 0a 09 49 6e 69 74 69 61 deltas}...Initia
6a50: 6c 69 7a 65 44 65 6c 74 61 73 20 24 72 65 76 69 lizeDeltas $revi
6a60: 73 69 6f 6e 73 0a 0a 09 6c 6f 67 20 77 72 69 74 sions...log writ
6a70: 65 20 31 34 20 63 73 65 74 73 20 7b 49 42 53 3a e 14 csets {IBS:
6a80: 20 64 65 6c 74 61 20 5b 61 72 72 61 79 20 73 69 delta [array si
6a90: 7a 65 20 64 65 6c 74 61 5d 7d 0a 09 72 65 74 75 ze delta]}..retu
6aa0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 rn. }.. pr
6ab0: 6f 63 20 49 6e 69 74 69 61 6c 69 7a 65 44 65 6c oc InitializeDel
6ac0: 74 61 73 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 tas {revisions}
6ad0: 7b 0a 09 75 70 76 61 72 20 31 20 64 65 6c 74 61 {..upvar 1 delta
6ae0: 20 64 65 6c 74 61 0a 0a 09 23 20 50 75 6c 6c 20 delta...# Pull
6af0: 74 68 65 20 74 69 6d 65 73 74 61 6d 70 73 20 66 the timestamps f
6b00: 6f 72 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 or all revisions
6b10: 20 69 6e 20 74 68 65 20 63 68 61 6e 67 65 73 65 in the changese
6b20: 74 73 20 61 6e 64 0a 09 23 20 63 6f 6d 70 75 74 ts and..# comput
6b30: 65 20 74 68 65 69 72 20 64 65 6c 74 61 73 20 66 e their deltas f
6b40: 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 62 72 or use by the br
6b50: 65 61 6b 20 66 69 6e 64 65 72 2e 0a 0a 09 61 72 eak finder....ar
6b60: 72 61 79 20 73 65 74 20 64 65 6c 74 61 20 7b 7d ray set delta {}
6b70: 0a 09 61 72 72 61 79 20 73 65 74 20 73 74 61 6d ..array set stam
6b80: 70 20 7b 7d 0a 0a 09 73 65 74 20 74 68 65 73 65 p {}...set these
6b90: 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 t ('[join $revis
6ba0: 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 66 ions {','}]')..f
6bb0: 6f 72 65 61 63 68 20 7b 72 69 64 20 74 69 6d 65 oreach {rid time
6bc0: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 } [state run [su
6bd0: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
6be0: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
6bf0: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
6c00: 69 64 2c 20 52 2e 64 61 74 65 0a 09 20 20 20 20 id, R.date..
6c10: 46 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20 52 0a FROM revision R.
6c20: 09 20 20 20 20 57 48 45 52 45 20 52 2e 72 69 64 . WHERE R.rid
6c30: 20 49 4e 20 24 74 68 65 73 65 74 0a 09 7d 5d 5d IN $theset..}]]
6c40: 20 7b 0a 09 20 20 20 20 73 65 74 20 73 74 61 6d {.. set stam
6c50: 70 28 24 72 69 64 29 20 24 74 69 6d 65 0a 09 7d p($rid) $time..}
6c60: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 ...log write 14
6c70: 63 73 65 74 73 20 7b 49 42 53 3a 20 73 74 61 6d csets {IBS: stam
6c80: 70 20 5b 61 72 72 61 79 20 73 69 7a 65 20 73 74 p [array size st
6c90: 61 6d 70 5d 7d 0a 0a 09 73 65 74 20 6e 20 30 0a amp]}...set n 0.
6ca0: 09 66 6f 72 65 61 63 68 20 72 69 64 20 5b 6c 72 .foreach rid [lr
6cb0: 61 6e 67 65 20 24 72 65 76 69 73 69 6f 6e 73 20 ange $revisions
6cc0: 30 20 65 6e 64 2d 31 5d 20 72 6e 65 78 74 20 5b 0 end-1] rnext [
6cd0: 6c 72 61 6e 67 65 20 24 72 65 76 69 73 69 6f 6e lrange $revision
6ce0: 73 20 31 20 65 6e 64 5d 20 7b 0a 09 20 20 20 20 s 1 end] {..
6cf0: 73 65 74 20 64 65 6c 74 61 28 24 6e 29 20 5b 65 set delta($n) [e
6d00: 78 70 72 20 7b 24 73 74 61 6d 70 28 24 72 6e 65 xpr {$stamp($rne
6d10: 78 74 29 20 2d 20 24 73 74 61 6d 70 28 24 72 69 xt) - $stamp($ri
6d20: 64 29 7d 5d 0a 09 20 20 20 20 69 6e 63 72 20 6e d)}].. incr n
6d30: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
6d40: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 46 69 6e 64 }.. proc Find
6d50: 42 65 73 74 42 72 65 61 6b 20 7b 72 61 6e 67 65 BestBreak {range
6d60: 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 63 72 6f } {..upvar 1 cro
6d70: 73 73 20 63 72 6f 73 73 20 64 65 6c 74 61 20 64 ss cross delta d
6d80: 65 6c 74 61 0a 0a 09 23 20 44 65 74 65 72 6d 69 elta...# Determi
6d90: 6e 65 20 74 68 65 20 62 65 73 74 20 62 72 65 61 ne the best brea
6da0: 6b 20 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 74 68 k location in th
6db0: 65 20 67 69 76 65 6e 20 72 61 6e 67 65 20 6f 66 e given range of
6dc0: 0a 09 23 20 70 6f 73 69 74 69 6f 6e 73 2e 20 46 ..# positions. F
6dd0: 69 72 73 74 20 77 65 20 6c 6f 6f 6b 20 66 6f 72 irst we look for
6de0: 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 73 20 77 the locations w
6df0: 69 74 68 20 74 68 65 20 6d 61 78 69 6d 61 6c 0a ith the maximal.
6e00: 09 23 20 6e 75 6d 62 65 72 20 6f 66 20 63 72 6f .# number of cro
6e10: 73 73 69 6e 67 73 2e 20 49 66 20 74 68 65 72 65 ssings. If there
6e20: 20 61 72 65 20 73 65 76 65 72 61 6c 20 77 65 20 are several we
6e30: 6c 6f 6f 6b 20 66 6f 72 20 74 68 65 0a 09 23 20 look for the..#
6e40: 73 68 6f 72 74 65 73 74 20 74 69 6d 65 20 69 6e shortest time in
6e50: 74 65 72 76 61 6c 20 61 6d 6f 6e 67 20 74 68 65 terval among the
6e60: 6d 2e 20 49 66 20 77 65 20 73 74 69 6c 6c 20 68 m. If we still h
6e70: 61 76 65 20 6d 75 6c 74 69 70 6c 65 0a 09 23 20 ave multiple..#
6e80: 70 6f 73 73 69 62 69 6c 69 74 69 65 73 20 61 66 possibilities af
6e90: 74 65 72 20 74 68 61 74 20 77 65 20 73 65 6c 65 ter that we sele
6ea0: 63 74 20 74 68 65 20 65 61 72 6c 69 65 73 74 20 ct the earliest
6eb0: 6c 6f 63 61 74 69 6f 6e 0a 09 23 20 61 6d 6f 6e location..# amon
6ec0: 67 20 74 68 65 73 65 2e 0a 0a 09 23 20 4e 6f 74 g these....# Not
6ed0: 65 3a 20 49 66 20 74 68 65 20 6d 61 78 69 6d 61 e: If the maxima
6ee0: 6c 20 6e 75 6d 62 65 72 20 6f 66 20 63 72 6f 73 l number of cros
6ef0: 73 69 6e 67 73 20 69 73 20 30 20 74 68 65 6e 20 sings is 0 then
6f00: 74 68 65 20 72 61 6e 67 65 0a 09 23 20 20 20 20 the range..#
6f10: 20 20 20 68 61 73 20 6e 6f 20 69 6e 74 65 72 6e has no intern
6f20: 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2c al dependencies,
6f30: 20 61 6e 64 20 6e 6f 20 62 72 65 61 6b 20 6c 6f and no break lo
6f40: 63 61 74 69 6f 6e 20 61 74 0a 09 23 20 20 20 20 cation at..#
6f50: 20 20 20 61 6c 6c 2e 20 54 68 69 73 20 70 6f 73 all. This pos
6f60: 73 69 62 69 6c 69 74 79 20 69 73 20 73 69 67 6e sibility is sign
6f70: 61 6c 65 64 20 76 69 61 20 72 65 73 75 6c 74 20 aled via result
6f80: 2d 31 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 41 20 -1....# Note: A
6f90: 72 61 6e 67 65 20 6f 66 20 6c 65 6e 67 74 68 20 range of length
6fa0: 31 20 6f 72 20 6c 65 73 73 20 63 61 6e 6e 6f 74 1 or less cannot
6fb0: 20 68 61 76 65 20 69 6e 74 65 72 6e 61 6c 0a 09 have internal..
6fc0: 23 20 20 20 20 20 20 20 64 65 70 65 6e 64 65 6e # dependen
6fd0: 63 69 65 73 2c 20 61 73 20 74 68 61 74 20 6e 65 cies, as that ne
6fe0: 65 64 73 20 61 74 20 6c 65 61 73 74 20 74 77 6f eds at least two
6ff0: 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 0a 09 23 revisions in..#
7000: 20 20 20 20 20 20 20 74 68 65 20 72 61 6e 67 65 the range
7010: 2e 0a 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 ....if {[llength
7020: 20 24 72 61 6e 67 65 5d 20 3c 20 32 7d 20 7b 20 $range] < 2} {
7030: 72 65 74 75 72 6e 20 2d 31 20 7d 0a 0a 09 73 65 return -1 }...se
7040: 74 20 6d 61 78 20 2d 31 0a 09 73 65 74 20 62 65 t max -1..set be
7050: 73 74 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 st {}...foreach
7060: 6c 6f 63 61 74 69 6f 6e 20 24 72 61 6e 67 65 20 location $range
7070: 7b 0a 09 20 20 20 20 73 65 74 20 63 72 6f 73 73 {.. set cross
7080: 69 6e 67 73 20 24 63 72 6f 73 73 28 24 6c 6f 63 ings $cross($loc
7090: 61 74 69 6f 6e 29 0a 09 20 20 20 20 69 66 20 7b ation).. if {
70a0: 24 63 72 6f 73 73 69 6e 67 73 20 3e 20 24 6d 61 $crossings > $ma
70b0: 78 7d 20 7b 0a 09 09 73 65 74 20 6d 61 78 20 20 x} {...set max
70c0: 24 63 72 6f 73 73 69 6e 67 73 0a 09 09 73 65 74 $crossings...set
70d0: 20 62 65 73 74 20 5b 6c 69 73 74 20 24 6c 6f 63 best [list $loc
70e0: 61 74 69 6f 6e 5d 0a 09 09 63 6f 6e 74 69 6e 75 ation]...continu
70f0: 65 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 e.. } elseif
7100: 7b 24 63 72 6f 73 73 69 6e 67 73 20 3d 3d 20 24 {$crossings == $
7110: 6d 61 78 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 max} {...lappend
7120: 20 62 65 73 74 20 24 6c 6f 63 61 74 69 6f 6e 0a best $location.
7130: 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 69 66 20 7b . }..}...if {
7140: 24 6d 61 78 20 3d 3d 20 30 7d 20 20 20 20 20 20 $max == 0}
7150: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 2d { return -
7160: 31 20 7d 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 1 }..if {[llengt
7170: 68 20 24 62 65 73 74 5d 20 3d 3d 20 31 7d 20 7b h $best] == 1} {
7180: 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 return [lindex
7190: 24 62 65 73 74 20 30 5d 20 7d 0a 0a 09 73 65 74 $best 0] }...set
71a0: 20 6c 6f 63 61 74 69 6f 6e 73 20 24 62 65 73 74 locations $best
71b0: 0a 09 73 65 74 20 62 65 73 74 20 7b 7d 0a 09 73 ..set best {}..s
71c0: 65 74 20 6d 69 6e 20 2d 31 0a 0a 09 66 6f 72 65 et min -1...fore
71d0: 61 63 68 20 6c 6f 63 61 74 69 6f 6e 20 24 6c 6f ach location $lo
71e0: 63 61 74 69 6f 6e 73 20 7b 0a 09 20 20 20 20 73 cations {.. s
71f0: 65 74 20 69 6e 74 65 72 76 61 6c 20 24 64 65 6c et interval $del
7200: 74 61 28 24 6c 6f 63 61 74 69 6f 6e 29 0a 09 20 ta($location)..
7210: 20 20 20 69 66 20 7b 28 24 6d 69 6e 20 3c 20 30 if {($min < 0
7220: 29 20 7c 7c 20 28 24 69 6e 74 65 72 76 61 6c 20 ) || ($interval
7230: 3c 20 24 6d 69 6e 29 7d 20 7b 0a 09 09 73 65 74 < $min)} {...set
7240: 20 6d 69 6e 20 20 24 69 6e 74 65 72 76 61 6c 0a min $interval.
7250: 09 09 73 65 74 20 62 65 73 74 20 5b 6c 69 73 74 ..set best [list
7260: 20 24 6c 6f 63 61 74 69 6f 6e 5d 0a 09 20 20 20 $location]..
7270: 20 7d 20 65 6c 73 65 69 66 20 7b 24 69 6e 74 65 } elseif {$inte
7280: 72 76 61 6c 20 3d 3d 20 24 6d 69 6e 7d 20 7b 0a rval == $min} {.
7290: 09 09 6c 61 70 70 65 6e 64 20 62 65 73 74 20 24 ..lappend best $
72a0: 6c 6f 63 61 74 69 6f 6e 0a 09 20 20 20 20 7d 0a location.. }.
72b0: 09 7d 0a 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 .}...if {[llengt
72c0: 68 20 24 62 65 73 74 5d 20 3d 3d 20 31 7d 20 7b h $best] == 1} {
72d0: 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 return [lindex
72e0: 24 62 65 73 74 20 30 5d 20 7d 0a 0a 09 72 65 74 $best 0] }...ret
72f0: 75 72 6e 20 5b 6c 69 6e 64 65 78 20 5b 6c 73 6f urn [lindex [lso
7300: 72 74 20 2d 69 6e 74 65 67 65 72 20 2d 69 6e 63 rt -integer -inc
7310: 72 65 61 73 69 6e 67 20 24 62 65 73 74 5d 20 30 reasing $best] 0
7320: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f ]. }.. pro
7330: 63 20 43 75 74 41 74 20 7b 6c 6f 63 61 74 69 6f c CutAt {locatio
7340: 6e 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 63 72 n} {..upvar 1 cr
7350: 6f 73 73 20 63 72 6f 73 73 20 64 65 70 63 20 64 oss cross depc d
7360: 65 70 63 0a 0a 09 23 20 49 74 20 77 61 73 20 64 epc...# It was d
7370: 65 63 69 64 65 64 20 74 6f 20 73 70 6c 69 74 20 ecided to split
7380: 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 61 74 the changeset at
7390: 20 74 68 65 20 67 69 76 65 6e 0a 09 23 20 6c 6f the given..# lo
73a0: 63 61 74 69 6f 6e 2e 20 54 68 69 73 20 63 75 74 cation. This cut
73b0: 73 20 61 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 s a number of de
73c0: 70 65 6e 64 65 6e 63 69 65 73 2e 20 48 65 72 65 pendencies. Here
73d0: 20 77 65 20 75 70 64 61 74 65 0a 09 23 20 74 68 we update..# th
73e0: 65 20 63 72 6f 73 73 20 69 6e 66 6f 72 6d 61 74 e cross informat
73f0: 69 6f 6e 20 73 6f 20 74 68 61 74 20 74 68 65 20 ion so that the
7400: 62 72 65 61 6b 20 66 69 6e 64 65 72 20 68 61 73 break finder has
7410: 20 61 63 63 75 72 61 74 65 0a 09 23 20 64 61 74 accurate..# dat
7420: 61 20 77 68 65 6e 20 77 65 20 6c 6f 6f 6b 20 61 a when we look a
7430: 74 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 20 t the generated
7440: 66 72 61 67 6d 65 6e 74 73 2e 0a 0a 09 73 65 74 fragments....set
7450: 20 73 69 78 20 5b 6c 6f 67 20 76 69 73 69 62 6c six [log visibl
7460: 65 3f 20 36 5d 0a 0a 09 66 6f 72 65 61 63 68 20 e? 6]...foreach
7470: 7b 64 65 70 20 72 61 6e 67 65 7d 20 5b 61 72 72 {dep range} [arr
7480: 61 79 20 67 65 74 20 64 65 70 63 5d 20 7b 0a 09 ay get depc] {..
7490: 20 20 20 20 23 20 43 68 65 63 6b 20 61 6c 6c 20 # Check all
74a0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 73 74 69 dependencies sti
74b0: 6c 6c 20 6b 6e 6f 77 6e 2c 20 74 61 6b 65 20 74 ll known, take t
74c0: 68 65 69 72 20 72 61 6e 67 65 20 61 6e 64 0a 09 heir range and..
74d0: 20 20 20 20 23 20 73 65 65 20 69 66 20 74 68 65 # see if the
74e0: 20 62 72 65 61 6b 20 6c 6f 63 61 74 69 6f 6e 20 break location
74f0: 66 61 6c 6c 73 20 77 69 74 68 69 6e 2e 0a 0a 09 falls within....
7500: 20 20 20 20 42 6f 72 64 65 72 20 24 72 61 6e 67 Border $rang
7510: 65 20 73 20 65 0a 09 20 20 20 20 69 66 20 7b 24 e s e.. if {$
7520: 6c 6f 63 61 74 69 6f 6e 20 3c 20 24 73 7d 20 63 location < $s} c
7530: 6f 6e 74 69 6e 75 65 20 3b 20 23 20 62 72 65 61 ontinue ; # brea
7540: 6b 20 62 65 66 6f 72 65 20 72 61 6e 67 65 2c 20 k before range,
7550: 69 67 6e 6f 72 65 0a 09 20 20 20 20 69 66 20 7b ignore.. if {
7560: 24 6c 6f 63 61 74 69 6f 6e 20 3e 20 24 65 7d 20 $location > $e}
7570: 63 6f 6e 74 69 6e 75 65 20 3b 20 23 20 62 72 65 continue ; # bre
7580: 61 6b 20 61 66 74 65 72 20 72 61 6e 67 65 2c 20 ak after range,
7590: 69 67 6e 6f 72 65 2e 0a 0a 09 20 20 20 20 23 20 ignore.... #
75a0: 54 68 69 73 20 64 65 70 65 6e 64 65 6e 63 79 20 This dependency
75b0: 63 72 6f 73 73 65 73 20 74 68 65 20 62 72 65 61 crosses the brea
75c0: 6b 20 6c 6f 63 61 74 69 6f 6e 2e 20 57 65 20 72 k location. We r
75d0: 65 6d 6f 76 65 20 69 74 0a 09 20 20 20 20 23 20 emove it.. #
75e0: 66 72 6f 6d 20 74 68 65 20 63 72 6f 73 73 69 6e from the crossin
75f0: 67 73 20 63 6f 75 6e 74 65 72 73 2c 20 61 6e 64 gs counters, and
7600: 20 74 68 65 6e 20 61 6c 73 6f 20 66 72 6f 6d 20 then also from
7610: 74 68 65 20 73 65 74 0a 09 20 20 20 20 23 20 6f the set.. # o
7620: 66 20 6b 6e 6f 77 6e 20 64 65 70 65 6e 64 65 6e f known dependen
7630: 63 69 65 73 2c 20 61 73 20 77 65 20 61 72 65 20 cies, as we are
7640: 64 6f 6e 65 20 77 69 74 68 20 69 74 2e 0a 0a 09 done with it....
7650: 20 20 20 20 66 6f 72 65 61 63 68 20 6c 6f 63 20 foreach loc
7660: 24 64 65 70 63 28 24 64 65 70 29 20 7b 20 69 6e $depc($dep) { in
7670: 63 72 20 63 72 6f 73 73 28 24 6c 6f 63 29 20 2d cr cross($loc) -
7680: 31 20 7d 0a 09 20 20 20 20 75 6e 73 65 74 20 64 1 }.. unset d
7690: 65 70 63 28 24 64 65 70 29 0a 0a 09 20 20 20 20 epc($dep)...
76a0: 69 66 20 7b 21 24 73 69 78 7d 20 63 6f 6e 74 69 if {!$six} conti
76b0: 6e 75 65 0a 0a 09 20 20 20 20 73 74 72 75 63 74 nue... struct
76c0: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 64 ::list assign $d
76d0: 65 70 20 70 61 72 65 6e 74 20 63 68 69 6c 64 0a ep parent child.
76e0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 35 . log write 5
76f0: 20 63 73 65 74 73 20 22 42 72 6f 6b 65 20 64 65 csets "Broke de
7700: 70 65 6e 64 65 6e 63 79 20 5b 50 44 20 24 70 61 pendency [PD $pa
7710: 72 65 6e 74 5d 20 2d 2d 3e 20 5b 50 44 20 24 63 rent] --> [PD $c
7720: 68 69 6c 64 5d 22 0a 09 7d 0a 0a 09 72 65 74 75 hild]"..}...retu
7730: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
7740: 50 72 69 6e 74 20 69 64 65 6e 74 69 66 79 69 6e Print identifyin
7750: 67 20 64 61 74 61 20 66 6f 72 20 61 20 72 65 76 g data for a rev
7760: 69 73 69 6f 6e 20 28 70 72 6f 6a 65 63 74 2c 20 ision (project,
7770: 66 69 6c 65 2c 20 64 6f 74 74 65 64 20 72 65 76 file, dotted rev
7780: 0a 20 20 20 20 23 20 6e 75 6d 62 65 72 29 2c 20 . # number),
7790: 66 6f 72 20 68 69 67 68 20 76 65 72 62 6f 73 69 for high verbosi
77a0: 74 79 20 6c 6f 67 20 6f 75 74 70 75 74 2e 0a 20 ty log output..
77b0: 20 20 20 23 20 54 4f 44 4f 3a 20 52 65 70 6c 61 # TODO: Repla
77c0: 63 65 20 77 69 74 68 20 63 61 6c 6c 20 74 6f 20 ce with call to
77d0: 69 74 65 6d 73 74 72 20 28 6c 69 73 74 20 72 65 itemstr (list re
77e0: 76 20 24 69 64 29 0a 0a 20 20 20 20 70 72 6f 63 v $id).. proc
77f0: 20 50 44 20 7b 69 64 7d 20 7b 0a 09 66 6f 72 65 PD {id} {..fore
7800: 61 63 68 20 7b 70 20 66 20 72 7d 20 5b 73 74 61 ach {p f r} [sta
7810: 74 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c 45 43 te run {...SELEC
7820: 54 20 50 2e 6e 61 6d 65 20 2c 20 46 2e 6e 61 6d T P.name , F.nam
7830: 65 2c 20 52 2e 72 65 76 0a 09 09 46 52 4f 4d 20 e, R.rev...FROM
7840: 72 65 76 69 73 69 6f 6e 20 52 2c 20 66 69 6c 65 revision R, file
7850: 20 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 09 F, project P...
7860: 57 48 45 52 45 20 52 2e 72 69 64 20 3d 20 24 69 WHERE R.rid = $i
7870: 64 20 20 20 20 2d 2d 20 46 69 6e 64 20 73 70 65 d -- Find spe
7880: 63 69 66 69 65 64 20 66 69 6c 65 20 72 65 76 69 cified file revi
7890: 73 69 6f 6e 0a 09 09 41 4e 44 20 20 20 46 2e 66 sion...AND F.f
78a0: 69 64 20 3d 20 52 2e 66 69 64 20 20 2d 2d 20 47 id = R.fid -- G
78b0: 65 74 20 66 69 6c 65 20 6f 66 20 74 68 65 20 72 et file of the r
78c0: 65 76 69 73 69 6f 6e 0a 09 09 41 4e 44 20 20 20 evision...AND
78d0: 50 2e 70 69 64 20 3d 20 46 2e 70 69 64 20 20 2d P.pid = F.pid -
78e0: 2d 20 47 65 74 20 70 72 6f 6a 65 63 74 20 6f 66 - Get project of
78f0: 20 74 68 65 20 66 69 6c 65 2e 0a 09 7d 5d 20 62 the file...}] b
7900: 72 65 61 6b 0a 09 72 65 74 75 72 6e 20 22 27 24 reak..return "'$
7910: 70 20 3a 20 24 66 2f 24 72 27 22 0a 20 20 20 20 p : $f/$r'".
7920: 7d 0a 0a 20 20 20 20 23 20 50 72 69 6e 74 69 6e }.. # Printin
7930: 67 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 61 g one or more ra
7940: 6e 67 65 73 2c 20 66 6f 72 6d 61 74 74 65 64 2c nges, formatted,
7950: 20 61 6e 64 20 6f 6e 6c 79 20 74 68 65 69 72 20 and only their
7960: 62 6f 72 64 65 72 20 74 6f 0a 20 20 20 20 23 20 border to. #
7970: 6b 65 65 70 20 74 68 65 20 73 74 72 69 6e 67 73 keep the strings
7980: 20 73 68 6f 72 74 2e 0a 0a 20 20 20 20 70 72 6f short... pro
7990: 63 20 50 52 73 20 7b 72 61 6e 67 65 73 7d 20 7b c PRs {ranges} {
79a0: 0a 09 72 65 74 75 72 6e 20 5b 73 74 72 75 63 74 ..return [struct
79b0: 3a 3a 6c 69 73 74 20 6d 61 70 20 24 72 61 6e 67 ::list map $rang
79c0: 65 73 20 5b 6d 79 70 72 6f 63 20 50 52 5d 5d 0a es [myproc PR]].
79d0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 }.. proc
79e0: 50 52 20 7b 72 61 6e 67 65 7d 20 7b 0a 09 42 6f PR {range} {..Bo
79f0: 72 64 65 72 20 24 72 61 6e 67 65 20 73 20 65 0a rder $range s e.
7a00: 09 72 65 74 75 72 6e 20 3c 24 7b 73 7d 2e 2e 2e .return <${s}...
7a10: 24 7b 65 7d 3e 0a 20 20 20 20 7d 0a 0a 20 20 20 ${e}>. }..
7a20: 20 70 72 6f 63 20 42 6f 72 64 65 72 20 7b 72 61 proc Border {ra
7a30: 6e 67 65 20 73 76 20 65 76 7d 20 7b 0a 09 75 70 nge sv ev} {..up
7a40: 76 61 72 20 31 20 24 73 76 20 73 20 24 65 76 20 var 1 $sv s $ev
7a50: 65 0a 09 73 65 74 20 73 20 5b 6c 69 6e 64 65 78 e..set s [lindex
7a60: 20 24 72 61 6e 67 65 20 30 5d 0a 09 73 65 74 20 $range 0]..set
7a70: 65 20 5b 6c 69 6e 64 65 78 20 24 72 61 6e 67 65 e [lindex $range
7a80: 20 65 6e 64 5d 0a 09 72 65 74 75 72 6e 0a 20 20 end]..return.
7a90: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 }.. # # ##
7aa0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
7ab0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
7ac0: 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 .. typevariab
7ad0: 6c 65 20 6d 79 63 68 61 6e 67 65 73 65 74 73 20 le mychangesets
7ae0: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c {} ; # L
7af0: 69 73 74 20 6f 66 20 61 6c 6c 20 6b 6e 6f 77 6e ist of all known
7b00: 0a 09 09 09 09 09 20 20 20 23 20 63 68 61 6e 67 ...... # chang
7b10: 65 73 65 74 73 2e 0a 0a 20 20 20 20 23 20 4c 69 esets... # Li
7b20: 73 74 20 6f 66 20 61 6c 6c 20 6b 6e 6f 77 6e 20 st of all known
7b30: 63 68 61 6e 67 65 73 65 74 73 20 6f 66 20 61 20 changesets of a
7b40: 74 79 70 65 2e 0a 20 20 20 20 74 79 70 65 76 61 type.. typeva
7b50: 72 69 61 62 6c 65 20 6d 79 74 63 68 61 6e 67 65 riable mytchange
7b60: 73 65 74 73 20 2d 61 72 72 61 79 20 7b 0a 09 73 sets -array {..s
7b70: 79 6d 3a 3a 62 72 61 6e 63 68 20 7b 7d 0a 09 73 ym::branch {}..s
7b80: 79 6d 3a 3a 74 61 67 20 20 20 20 7b 7d 0a 09 72 ym::tag {}..r
7b90: 65 76 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 ev {}.
7ba0: 20 20 7d 0a 09 09 09 09 09 0a 20 20 20 20 74 79 }....... ty
7bb0: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 69 74 65 pevariable myite
7bc0: 6d 6d 61 70 20 20 20 20 20 2d 61 72 72 61 79 20 mmap -array
7bd0: 7b 7d 20 3b 20 23 20 4d 61 70 20 66 72 6f 6d 20 {} ; # Map from
7be0: 69 74 65 6d 73 20 28 74 61 67 67 65 64 29 0a 09 items (tagged)..
7bf0: 09 09 09 09 20 20 20 23 20 74 6f 20 74 68 65 20 .... # to the
7c00: 6c 69 73 74 20 6f 66 20 63 68 61 6e 67 65 73 65 list of changese
7c10: 74 73 0a 09 09 09 09 09 20 20 20 23 20 63 6f 6e ts...... # con
7c20: 74 61 69 6e 69 6e 67 20 69 74 2e 20 45 61 63 68 taining it. Each
7c30: 20 69 74 65 6d 0a 09 09 09 09 09 20 20 20 23 20 item...... #
7c40: 63 61 6e 20 62 65 20 75 73 65 64 20 62 79 20 6f can be used by o
7c50: 6e 6c 79 20 6f 6e 65 0a 09 09 09 09 09 20 20 20 nly one......
7c60: 23 20 63 68 61 6e 67 65 73 65 74 2e 0a 20 20 20 # changeset..
7c70: 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 typevariable my
7c80: 69 64 6d 61 70 20 20 20 2d 61 72 72 61 79 20 7b idmap -array {
7c90: 7d 20 3b 20 23 20 4d 61 70 20 66 72 6f 6d 20 63 } ; # Map from c
7ca0: 68 61 6e 67 65 73 65 74 20 69 64 20 74 6f 0a 09 hangeset id to..
7cb0: 09 09 09 20 20 20 20 20 20 20 23 20 63 68 61 6e ... # chan
7cc0: 67 65 73 65 74 2e 0a 0a 20 20 20 20 74 79 70 65 geset... type
7cd0: 6d 65 74 68 6f 64 20 61 6c 6c 20 20 20 20 7b 7d method all {}
7ce0: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 { return $my
7cf0: 63 68 61 6e 67 65 73 65 74 73 20 7d 0a 20 20 20 changesets }.
7d00: 20 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 20 20 typemethod of
7d10: 20 20 20 7b 63 69 64 7d 20 7b 20 72 65 74 75 72 {cid} { retur
7d20: 6e 20 24 6d 79 69 64 6d 61 70 28 24 63 69 64 29 n $myidmap($cid)
7d30: 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }. typemetho
7d40: 64 20 6f 66 69 74 65 6d 20 7b 69 69 64 7d 20 7b d ofitem {iid} {
7d50: 20 72 65 74 75 72 6e 20 24 6d 79 69 74 65 6d 6d return $myitemm
7d60: 61 70 28 24 69 69 64 29 20 7d 0a 0a 20 20 20 20 ap($iid) }..
7d70: 74 79 70 65 6d 65 74 68 6f 64 20 72 65 76 20 20 typemethod rev
7d80: 20 20 7b 7d 20 20 20 20 7b 20 72 65 74 75 72 6e {} { return
7d90: 20 24 6d 79 74 63 68 61 6e 67 65 73 65 74 73 28 $mytchangesets(
7da0: 72 65 76 29 20 7d 0a 20 20 20 20 74 79 70 65 6d rev) }. typem
7db0: 65 74 68 6f 64 20 73 79 6d 20 20 20 20 7b 7d 20 ethod sym {}
7dc0: 20 20 20 7b 20 72 65 74 75 72 6e 20 5b 63 6f 6e { return [con
7dd0: 63 61 74 20 5c 0a 09 09 09 09 09 20 20 24 7b 6d cat \...... ${m
7de0: 79 74 63 68 61 6e 67 65 73 65 74 73 28 73 79 6d ytchangesets(sym
7df0: 3a 3a 62 72 61 6e 63 68 29 7d 20 5c 0a 09 09 09 ::branch)} \....
7e00: 09 09 20 20 24 7b 6d 79 74 63 68 61 6e 67 65 73 .. ${mytchanges
7e10: 65 74 73 28 73 79 6d 3a 3a 74 61 67 29 7d 5d 20 ets(sym::tag)}]
7e20: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
7e30: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
7e40: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############.
7e50: 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 ## Configurat
7e60: 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 ion.. pragma
7e70: 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 -hastypeinfo
7e80: 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 no ; # no type
7e90: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 introspection.
7ea0: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 pragma -hasinf
7eb0: 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 o no ; #
7ec0: 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f no object intro
7ed0: 73 70 65 63 74 69 6f 6e 0a 0a 20 20 20 20 23 20 spection.. #
7ee0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
7ef0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
7f00: 23 23 23 23 23 0a 7d 0a 0a 23 23 0a 23 23 20 4e #####.}..##.## N
7f10: 4f 54 45 3a 20 54 68 65 20 73 75 63 63 65 73 73 OTE: The success
7f20: 6f 72 20 61 6e 64 20 70 72 65 64 65 63 65 73 73 or and predecess
7f30: 6f 72 20 6d 65 74 68 6f 64 73 20 64 65 66 69 6e or methods defin
7f40: 65 64 20 62 79 20 74 68 65 20 63 6c 61 73 73 65 ed by the classe
7f50: 73 0a 23 23 20 20 20 20 20 20 20 62 65 6c 6f 77 s.## below
7f60: 20 61 72 65 20 2d 2d 20 62 6f 74 74 6c 65 20 6e are -- bottle n
7f70: 65 63 6b 73 20 2d 2d 2e 20 4c 6f 6f 6b 20 66 6f ecks --. Look fo
7f80: 72 20 77 61 79 73 20 74 6f 20 6d 61 6b 65 20 74 r ways to make t
7f90: 68 65 20 53 51 4c 0a 23 23 20 20 20 20 20 20 20 he SQL.##
7fa0: 66 61 73 74 65 72 2e 0a 23 23 0a 0a 23 20 23 20 faster..##..# #
7fb0: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
7fc0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
7fd0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
7fe0: 23 23 23 23 23 23 23 23 23 0a 23 23 20 48 65 6c #########.## Hel
7ff0: 70 65 72 20 73 69 6e 67 6c 65 74 6f 6e 2e 20 43 per singleton. C
8000: 6f 6d 6d 61 6e 64 73 20 66 6f 72 20 72 65 76 69 ommands for revi
8010: 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 2e sion changesets.
8020: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 ..snit::type ::v
8030: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
8040: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a t::cvs::project:
8050: 3a 72 65 76 3a 3a 72 65 76 20 7b 0a 20 20 20 20 :rev::rev {.
8060: 74 79 70 65 6d 65 74 68 6f 64 20 62 79 72 65 76 typemethod byrev
8070: 69 73 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75 72 ision {} { retur
8080: 6e 20 31 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 n 1 }. typeme
8090: 74 68 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 thod bysymbol
80a0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a {} { return 0 }.
80b0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 typemethod i
80c0: 73 74 61 67 20 20 20 20 20 20 7b 7d 20 7b 20 72 stag {} { r
80d0: 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 eturn 0 }. ty
80e0: 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61 6e 63 pemethod isbranc
80f0: 68 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 h {} { return
8100: 30 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 0 }.. typemet
8110: 68 6f 64 20 73 74 72 20 7b 72 65 76 69 73 69 6f hod str {revisio
8120: 6e 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 n} {..struct::li
8130: 73 74 20 61 73 73 69 67 6e 20 5b 73 74 61 74 65 st assign [state
8140: 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 run {.. SELE
8150: 43 54 20 52 2e 72 65 76 2c 20 46 2e 6e 61 6d 65 CT R.rev, F.name
8160: 2c 20 50 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 , P.name.. FR
8170: 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c OM revision R,
8180: 20 66 69 6c 65 20 46 2c 20 70 72 6f 6a 65 63 74 file F, project
8190: 20 50 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 P.. WHERE R
81a0: 2e 72 69 64 20 3d 20 24 72 65 76 69 73 69 6f 6e .rid = $revision
81b0: 20 2d 2d 20 46 69 6e 64 20 73 70 65 63 69 66 69 -- Find specifi
81c0: 65 64 20 66 69 6c 65 20 72 65 76 69 73 69 6f 6e ed file revision
81d0: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 46 2e 66 .. AND F.f
81e0: 69 64 20 3d 20 52 2e 66 69 64 20 20 20 20 20 2d id = R.fid -
81f0: 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 20 74 68 - Get file of th
8200: 65 20 72 65 76 69 73 69 6f 6e 0a 09 20 20 20 20 e revision..
8210: 41 4e 44 20 20 20 20 50 2e 70 69 64 20 3d 20 46 AND P.pid = F
8220: 2e 70 69 64 20 20 20 20 20 2d 2d 20 47 65 74 20 .pid -- Get
8230: 70 72 6f 6a 65 63 74 20 6f 66 20 74 68 65 20 66 project of the f
8240: 69 6c 65 2e 0a 09 7d 5d 20 72 65 76 6e 72 20 66 ile...}] revnr f
8250: 6e 61 6d 65 20 70 6e 61 6d 65 0a 09 72 65 74 75 name pname..retu
8260: 72 6e 20 22 24 70 6e 61 6d 65 2f 24 7b 72 65 76 rn "$pname/${rev
8270: 6e 72 7d 3a 3a 24 66 6e 61 6d 65 22 0a 20 20 20 nr}::$fname".
8280: 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 }.. # result
8290: 20 3d 20 6c 69 73 74 20 28 6d 69 6e 74 69 6d 65 = list (mintime
82a0: 2c 20 6d 61 78 74 69 6d 65 29 0a 20 20 20 20 74 , maxtime). t
82b0: 79 70 65 6d 65 74 68 6f 64 20 74 69 6d 65 72 61 ypemethod timera
82c0: 6e 67 65 20 7b 69 74 65 6d 73 7d 20 7b 0a 09 73 nge {items} {..s
82d0: 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 et theset ('[joi
82e0: 6e 20 24 69 74 65 6d 73 20 7b 27 2c 27 7d 5d 27 n $items {','}]'
82f0: 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 61 74 65 )..return [state
8300: 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 run [subst -noc
8310: 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 ommands -nobacks
8320: 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 lashes {.. SE
8330: 4c 45 43 54 20 4d 49 4e 28 52 2e 64 61 74 65 29 LECT MIN(R.date)
8340: 2c 20 4d 41 58 28 52 2e 64 61 74 65 29 0a 09 20 , MAX(R.date)..
8350: 20 20 20 46 52 4f 4d 20 72 65 76 69 73 69 6f 6e FROM revision
8360: 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 52 2e R.. WHERE R.
8370: 72 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 2d rid IN $theset -
8380: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 - Restrict to re
8390: 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 visions of inter
83a0: 65 73 74 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a est..}]]. }..
83b0: 20 20 20 20 23 20 76 61 72 28 64 76 29 20 3d 20 # var(dv) =
83c0: 64 69 63 74 20 28 72 65 76 69 73 69 6f 6e 20 2d dict (revision -
83d0: 3e 20 6c 69 73 74 20 28 72 65 76 69 73 69 6f 6e > list (revision
83e0: 29 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f )). typemetho
83f0: 64 20 69 6e 74 65 72 6e 61 6c 73 75 63 63 65 73 d internalsucces
8400: 73 6f 72 73 20 7b 64 76 20 72 65 76 69 73 69 6f sors {dv revisio
8410: 6e 73 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24 ns} {..upvar 1 $
8420: 64 76 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a dv dependencies.
8430: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
8440: 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b oin $revisions {
8450: 27 2c 27 7d 5d 27 29 0a 0a 09 6c 6f 67 20 77 72 ','}]')...log wr
8460: 69 74 65 20 31 34 20 63 73 65 74 73 20 69 6e 74 ite 14 csets int
8470: 65 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 0a ernalsuccessors.
8480: 0a 09 23 20 53 65 65 20 27 73 75 63 63 65 73 73 ..# See 'success
8490: 6f 72 73 27 20 62 65 6c 6f 77 20 66 6f 72 20 74 ors' below for t
84a0: 68 65 20 6d 61 69 6e 20 65 78 70 6c 61 6e 61 74 he main explanat
84b0: 69 6f 6e 20 6f 66 0a 09 23 20 74 68 65 20 76 61 ion of..# the va
84c0: 72 69 6f 75 73 20 63 61 73 65 73 2e 20 54 68 69 rious cases. Thi
84d0: 73 20 70 69 65 63 65 20 69 73 20 73 70 65 63 69 s piece is speci
84e0: 61 6c 20 69 6e 20 74 68 61 74 20 69 74 0a 09 23 al in that it..#
84f0: 20 72 65 73 74 72 69 63 74 73 20 74 68 65 20 73 restricts the s
8500: 75 63 63 65 73 73 6f 72 73 20 77 65 20 6c 6f 6f uccessors we loo
8510: 6b 20 66 6f 72 20 74 6f 20 74 68 65 20 73 61 6d k for to the sam
8520: 65 20 73 65 74 20 6f 66 0a 09 23 20 72 65 76 69 e set of..# revi
8530: 73 69 6f 6e 73 20 77 65 20 73 74 61 72 74 20 66 sions we start f
8540: 72 6f 6d 2e 20 53 65 6e 73 69 62 6c 65 20 61 73 rom. Sensible as
8550: 20 77 65 20 61 72 65 20 6c 6f 6f 6b 69 6e 67 20 we are looking
8560: 66 6f 72 0a 09 23 20 63 68 61 6e 67 65 73 65 74 for..# changeset
8570: 20 69 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e 64 internal depend
8580: 65 6e 63 69 65 73 2e 0a 0a 09 61 72 72 61 79 20 encies....array
8590: 73 65 74 20 64 65 70 20 7b 7d 0a 0a 09 66 6f 72 set dep {}...for
85a0: 65 61 63 68 20 7b 72 69 64 20 63 68 69 6c 64 7d each {rid child}
85b0: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
85c0: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
85d0: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
85e0: 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d 61 -- (1) Prima
85f0: 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 45 ry child.. SE
8600: 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 2e 63 68 LECT R.rid, R.ch
8610: 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 ild.. FROM
8620: 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 revision R..
8630: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 WHERE R.rid I
8640: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
8650: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
8660: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
8670: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 st.. AND R
8680: 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55 .child IS NOT NU
8690: 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69 LL -- Has pri
86a0: 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 mary child..
86b0: 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49 AND R.child I
86c0: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
86d0: 20 57 68 69 63 68 20 69 73 20 61 6c 73 6f 20 6f Which is also o
86e0: 66 20 69 6e 74 65 72 65 73 74 0a 20 20 20 20 55 f interest. U
86f0: 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 32 29 20 NION. -- (2)
8700: 53 65 63 6f 6e 64 61 72 79 20 28 62 72 61 6e 63 Secondary (branc
8710: 68 29 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 h) children..
8720: 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 42 SELECT R.rid, B
8730: 2e 62 72 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 .brid.. FROM
8740: 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 revision R, re
8750: 76 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c visionbranchchil
8760: 64 72 65 6e 20 42 0a 09 20 20 20 20 57 48 45 52 dren B.. WHER
8770: 45 20 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 E R.rid IN $t
8780: 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 heset -- Res
8790: 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f trict to revisio
87a0: 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 ns of interest..
87b0: 20 20 20 20 41 4e 44 20 20 20 20 52 2e 72 69 64 AND R.rid
87c0: 20 3d 20 42 2e 72 69 64 20 20 20 20 20 20 20 20 = B.rid
87d0: 20 20 2d 2d 20 53 65 6c 65 63 74 20 73 75 62 73 -- Select subs
87e0: 65 74 20 6f 66 20 62 72 61 6e 63 68 20 63 68 69 et of branch chi
87f0: 6c 64 72 65 6e 0a 09 20 20 20 20 41 4e 44 20 20 ldren.. AND
8800: 20 20 42 2e 62 72 69 64 20 49 4e 20 24 74 68 65 B.brid IN $the
8810: 73 65 74 20 20 20 20 20 20 2d 2d 20 57 68 69 63 set -- Whic
8820: 68 20 69 73 20 61 6c 73 6f 20 6f 66 20 69 6e 74 h is also of int
8830: 65 72 65 73 74 0a 20 20 20 20 55 4e 49 4f 4e 0a erest. UNION.
8840: 20 20 20 20 2d 2d 20 28 34 29 20 43 68 69 6c 64 -- (4) Child
8850: 20 6f 66 20 74 72 75 6e 6b 20 72 6f 6f 74 20 73 of trunk root s
8860: 75 63 63 65 73 73 6f 72 20 6f 66 20 6c 61 73 74 uccessor of last
8870: 20 4e 54 44 42 20 6f 6e 20 74 72 75 6e 6b 2e 0a NTDB on trunk..
8880: 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 . SELECT R.ri
8890: 64 2c 20 52 41 2e 63 68 69 6c 64 0a 09 20 20 20 d, RA.child..
88a0: 20 46 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20 52 FROM revision R
88b0: 2c 20 72 65 76 69 73 69 6f 6e 20 52 41 0a 09 20 , revision RA..
88c0: 20 20 20 57 48 45 52 45 20 52 2e 72 69 64 20 20 WHERE R.rid
88d0: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
88e0: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
88f0: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
8900: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
8910: 20 52 2e 69 73 64 65 66 61 75 6c 74 20 20 20 20 R.isdefault
8920: 20 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 -- Rest
8930: 72 69 63 74 20 74 6f 20 4e 54 44 42 0a 09 20 20 rict to NTDB..
8940: 20 20 41 4e 44 20 20 20 52 2e 64 62 63 68 69 6c AND R.dbchil
8950: 64 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 d IS NOT NULL
8960: 2d 2d 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 -- and last NTDB
8970: 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 belonging to tr
8980: 75 6e 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 52 unk.. AND R
8990: 41 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 6c A.rid = R.dbchil
89a0: 64 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 72 d -- Go dir
89b0: 65 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 72 ectly to trunk r
89c0: 6f 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 52 oot.. AND R
89d0: 41 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e A.child IS NOT N
89e0: 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 ULL -- Has pr
89f0: 69 6d 61 72 79 20 63 68 69 6c 64 2e 0a 20 20 20 imary child..
8a00: 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 52 AND R
8a10: 41 2e 63 68 69 6c 64 20 49 4e 20 24 74 68 65 73 A.child IN $thes
8a20: 65 74 20 20 20 20 20 2d 2d 20 57 68 69 63 68 20 et -- Which
8a30: 69 73 20 61 6c 73 6f 20 6f 66 20 69 6e 74 65 72 is also of inter
8a40: 65 73 74 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 est..}]] {..
8a50: 23 20 43 6f 6e 73 69 64 65 72 20 6d 6f 76 69 6e # Consider movin
8a60: 67 20 74 68 69 73 20 74 6f 20 74 68 65 20 69 6e g this to the in
8a70: 74 65 67 72 69 74 79 20 6d 6f 64 75 6c 65 2e 0a tegrity module..
8a80: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 . integrity a
8a90: 73 73 65 72 74 20 7b 24 72 69 64 20 21 3d 20 24 ssert {$rid != $
8aa0: 63 68 69 6c 64 7d 20 7b 52 65 76 69 73 69 6f 6e child} {Revision
8ab0: 20 24 72 69 64 20 64 65 70 65 6e 64 73 20 6f 6e $rid depends on
8ac0: 20 69 74 73 65 6c 66 2e 7d 0a 09 20 20 20 20 6c itself.}.. l
8ad0: 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 append dependenc
8ae0: 69 65 73 28 24 72 69 64 29 20 24 63 68 69 6c 64 ies($rid) $child
8af0: 0a 09 20 20 20 20 73 65 74 20 64 65 70 28 24 72 .. set dep($r
8b00: 69 64 2c 24 63 68 69 6c 64 29 20 2e 0a 09 7d 0a id,$child) ...}.
8b10: 0a 09 23 20 54 68 65 20 73 71 6c 20 73 74 61 74 ..# The sql stat
8b20: 65 6d 65 6e 74 73 20 61 62 6f 76 65 20 6c 6f 6f ements above loo
8b30: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 64 69 72 65 ks only for dire
8b40: 63 74 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a ct dependencies.
8b50: 09 23 20 62 65 74 77 65 65 6e 20 72 65 76 69 73 .# between revis
8b60: 69 6f 6e 20 69 6e 20 74 68 65 20 63 68 61 6e 67 ion in the chang
8b70: 65 73 65 74 2e 20 48 6f 77 65 76 65 72 20 64 75 eset. However du
8b80: 65 20 74 6f 20 74 68 65 0a 09 23 20 76 61 67 61 e to the..# vaga
8b90: 72 69 65 73 20 6f 66 20 6d 65 74 61 20 64 61 74 ries of meta dat
8ba0: 61 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 a it is possible
8bb0: 20 66 6f 72 20 74 77 6f 20 72 65 76 69 73 69 6f for two revisio
8bc0: 6e 73 20 6f 66 0a 09 23 20 74 68 65 20 73 61 6d ns of..# the sam
8bd0: 65 20 66 69 6c 65 20 74 6f 20 65 6e 64 20 75 70 e file to end up
8be0: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 63 68 61 in the same cha
8bf0: 6e 67 65 73 65 74 2c 20 77 69 74 68 6f 75 74 20 ngeset, without
8c00: 61 0a 09 23 20 64 69 72 65 63 74 20 64 65 70 65 a..# direct depe
8c10: 6e 64 65 6e 63 79 20 62 65 74 77 65 65 6e 20 74 ndency between t
8c20: 68 65 6d 2e 20 48 6f 77 65 76 65 72 20 77 65 20 hem. However we
8c30: 6b 6e 6f 77 20 74 68 61 74 20 74 68 65 72 65 0a know that there.
8c40: 09 23 20 68 61 73 20 74 6f 20 62 65 20 61 20 61 .# has to be a a
8c50: 6e 20 69 6e 64 69 72 65 63 74 20 64 65 70 65 6e n indirect depen
8c60: 64 65 6e 63 79 2c 20 62 65 20 69 74 20 74 68 72 dency, be it thr
8c70: 6f 75 67 68 20 70 72 69 6d 61 72 79 0a 09 23 20 ough primary..#
8c80: 63 68 69 6c 64 72 65 6e 2c 20 62 72 61 6e 63 68 children, branch
8c90: 20 63 68 69 6c 64 72 65 6e 2c 20 6f 72 20 61 20 children, or a
8ca0: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 74 68 65 72 combination ther
8cb0: 65 6f 66 2e 0a 0a 09 23 20 57 65 20 6e 6f 77 20 eof....# We now
8cc0: 66 69 6c 6c 20 69 6e 20 74 68 65 73 65 20 70 73 fill in these ps
8cd0: 65 75 64 6f 2d 64 65 70 65 6e 64 65 6e 63 69 65 eudo-dependencie
8ce0: 73 2c 20 69 66 20 6e 6f 20 73 75 63 68 0a 09 23 s, if no such..#
8cf0: 20 64 65 70 65 6e 64 65 6e 63 79 20 65 78 69 73 dependency exis
8d00: 74 73 20 61 6c 72 65 61 64 79 2e 20 54 68 65 20 ts already. The
8d10: 64 69 72 65 63 74 69 6f 6e 20 6f 66 20 74 68 65 direction of the
8d20: 20 64 65 70 65 6e 64 65 6e 63 79 0a 09 23 20 69 dependency..# i
8d30: 73 20 61 63 74 75 61 6c 6c 79 20 69 72 72 65 6c s actually irrel
8d40: 65 76 61 6e 74 20 66 6f 72 20 74 68 69 73 2e 0a evant for this..
8d50: 0a 09 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 ..# NOTE: This i
8d60: 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d s different from
8d70: 20 63 76 73 32 73 76 6e 2e 20 4f 75 72 20 73 70 cvs2svn. Our sp
8d80: 69 72 69 74 75 61 6c 20 61 6e 63 65 73 74 6f 72 iritual ancestor
8d90: 0a 09 23 20 64 6f 65 73 20 6e 6f 74 20 75 73 65 ..# does not use
8da0: 20 73 75 63 68 20 70 73 65 75 64 6f 2d 64 65 70 such pseudo-dep
8db0: 65 6e 64 65 6e 63 69 65 73 2c 20 68 6f 77 65 76 endencies, howev
8dc0: 65 72 20 69 74 20 75 73 65 73 20 61 0a 09 23 20 er it uses a..#
8dd0: 43 4f 4d 4d 49 54 5f 54 48 52 45 53 48 4f 4c 44 COMMIT_THRESHOLD
8de0: 2c 20 61 20 74 69 6d 65 20 69 6e 74 65 72 76 61 , a time interva
8df0: 6c 20 63 6f 6d 6d 69 74 73 20 73 68 6f 75 6c 64 l commits should
8e00: 20 66 61 6c 6c 2e 20 54 68 69 73 0a 09 23 20 77 fall. This..# w
8e10: 69 6c 6c 20 67 72 65 61 74 6c 79 20 72 65 64 75 ill greatly redu
8e20: 63 65 73 20 74 68 65 20 72 69 73 6b 20 6f 66 20 ces the risk of
8e30: 67 65 74 74 69 6e 67 20 66 61 72 20 73 65 70 61 getting far sepa
8e40: 72 61 74 65 64 0a 09 23 20 72 65 76 69 73 69 6f rated..# revisio
8e50: 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 66 ns of the same f
8e60: 69 6c 65 20 69 6e 74 6f 20 6f 6e 65 20 63 68 61 ile into one cha
8e70: 6e 67 65 73 65 74 2e 0a 0a 09 23 20 57 65 20 61 ngeset....# We a
8e80: 6c 6c 6f 77 20 72 65 76 69 73 69 6f 6e 73 20 74 llow revisions t
8e90: 6f 20 62 65 20 66 61 72 20 61 70 61 72 74 20 69 o be far apart i
8ea0: 6e 20 74 69 6d 65 20 69 6e 20 74 68 65 20 73 61 n time in the sa
8eb0: 6d 65 0a 09 23 20 63 68 61 6e 67 65 73 65 74 2c me..# changeset,
8ec0: 20 62 75 74 20 69 6e 20 74 75 72 6e 20 6e 65 65 but in turn nee
8ed0: 64 20 74 68 65 20 70 73 65 75 64 6f 2d 64 65 70 d the pseudo-dep
8ee0: 65 6e 64 65 6e 63 69 65 73 20 74 6f 0a 09 23 20 endencies to..#
8ef0: 68 61 6e 64 6c 65 20 74 68 69 73 2e 0a 0a 09 6c handle this....l
8f00: 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 og write 14 cset
8f10: 73 20 7b 69 6e 74 65 72 6e 61 6c 20 20 5b 61 72 s {internal [ar
8f20: 72 61 79 20 73 69 7a 65 20 64 65 70 5d 7d 0a 09 ray size dep]}..
8f30: 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 log write 14 cse
8f40: 74 73 20 7b 63 6f 6c 6c 65 63 74 65 64 20 5b 61 ts {collected [a
8f50: 72 72 61 79 20 73 69 7a 65 20 64 65 70 65 6e 64 rray size depend
8f60: 65 6e 63 69 65 73 5d 7d 0a 09 6c 6f 67 20 77 72 encies]}..log wr
8f70: 69 74 65 20 31 34 20 63 73 65 74 73 20 70 73 65 ite 14 csets pse
8f80: 75 64 6f 2d 69 6e 74 65 72 6e 61 6c 73 75 63 63 udo-internalsucc
8f90: 65 73 73 6f 72 73 0a 0a 09 61 72 72 61 79 20 73 essors...array s
8fa0: 65 74 20 66 69 64 73 20 7b 7d 0a 09 66 6f 72 65 et fids {}..fore
8fb0: 61 63 68 20 7b 72 69 64 20 66 69 64 7d 20 5b 73 ach {rid fid} [s
8fc0: 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 tate run [subst
8fd0: 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 -nocommands -nob
8fe0: 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 ackslashes {..
8ff0: 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 SELECT R.rid,
9000: 52 2e 66 69 64 0a 20 20 20 20 20 20 20 20 20 20 R.fid.
9010: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
9020: 6e 20 52 0a 20 20 20 20 20 20 20 20 20 20 20 20 n R.
9030: 57 48 45 52 45 20 20 52 2e 72 69 64 20 49 4e 20 WHERE R.rid IN
9040: 24 74 68 65 73 65 74 0a 09 7d 5d 5d 20 7b 20 6c $theset..}]] { l
9050: 61 70 70 65 6e 64 20 66 69 64 73 28 24 66 69 64 append fids($fid
9060: 29 20 24 72 69 64 20 7d 0a 0a 09 73 65 74 20 67 ) $rid }...set g
9070: 72 6f 75 70 73 20 7b 7d 0a 09 66 6f 72 65 61 63 roups {}..foreac
9080: 68 20 7b 66 69 64 20 72 69 64 73 7d 20 5b 61 72 h {fid rids} [ar
9090: 72 61 79 20 67 65 74 20 66 69 64 73 5d 20 7b 0a ray get fids] {.
90a0: 09 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 . if {[llengt
90b0: 68 20 24 72 69 64 73 5d 20 3c 20 32 7d 20 63 6f h $rids] < 2} co
90c0: 6e 74 69 6e 75 65 0a 09 20 20 20 20 66 6f 72 65 ntinue.. fore
90d0: 61 63 68 20 61 20 24 72 69 64 73 20 7b 0a 09 09 ach a $rids {...
90e0: 66 6f 72 65 61 63 68 20 62 20 24 72 69 64 73 20 foreach b $rids
90f0: 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 61 20 3d {... if {$a =
9100: 3d 20 24 62 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 = $b} continue..
9110: 09 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 . if {[info e
9120: 78 69 73 74 73 20 64 65 70 28 24 61 2c 24 62 29 xists dep($a,$b)
9130: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 ]} continue...
9140: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis
9150: 74 73 20 64 65 70 28 24 62 2c 24 61 29 5d 7d 20 ts dep($b,$a)]}
9160: 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 6c continue... l
9170: 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 append dependenc
9180: 69 65 73 28 24 61 29 20 24 62 0a 09 09 20 20 20 ies($a) $b...
9190: 20 73 65 74 20 64 65 70 28 24 61 2c 24 62 29 20 set dep($a,$b)
91a0: 2e 0a 09 09 20 20 20 20 73 65 74 20 64 65 70 28 .... set dep(
91b0: 24 62 2c 24 61 29 20 2e 0a 09 09 7d 0a 09 20 20 $b,$a) ....}..
91c0: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 6e 20 5b }.. set n [
91d0: 6c 6c 65 6e 67 74 68 20 24 72 69 64 73 5d 0a 09 llength $rids]..
91e0: 20 20 20 20 6c 61 70 70 65 6e 64 20 67 72 6f 75 lappend grou
91f0: 70 73 20 5b 6c 69 73 74 20 24 6e 20 5b 65 78 70 ps [list $n [exp
9200: 72 20 7b 28 24 6e 2a 24 6e 2d 24 6e 29 2f 32 7d r {($n*$n-$n)/2}
9210: 5d 5d 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 ]]..}...log writ
9220: 65 20 31 34 20 63 73 65 74 73 20 7b 70 73 65 75 e 14 csets {pseu
9230: 64 6f 20 20 20 20 5b 61 72 72 61 79 20 73 69 7a do [array siz
9240: 65 20 66 69 64 73 5d 20 28 5b 6c 73 6f 72 74 20 e fids] ([lsort
9250: 2d 69 6e 64 65 78 20 30 20 2d 64 65 63 72 65 61 -index 0 -decrea
9260: 73 69 6e 67 20 2d 69 6e 74 65 67 65 72 20 24 67 sing -integer $g
9270: 72 6f 75 70 73 5d 29 7d 0a 09 6c 6f 67 20 77 72 roups])}..log wr
9280: 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 69 6e ite 14 csets {in
9290: 74 65 72 6e 61 6c 20 20 5b 61 72 72 61 79 20 73 ternal [array s
92a0: 69 7a 65 20 64 65 70 5d 7d 0a 09 6c 6f 67 20 77 ize dep]}..log w
92b0: 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 63 rite 14 csets {c
92c0: 6f 6c 6c 65 63 74 65 64 20 5b 61 72 72 61 79 20 ollected [array
92d0: 73 69 7a 65 20 64 65 70 65 6e 64 65 6e 63 69 65 size dependencie
92e0: 73 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 s]}..log write 1
92f0: 34 20 63 73 65 74 73 20 63 6f 6d 70 6c 65 74 65 4 csets complete
9300: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
9310: 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 34 # result = 4
9320: 2d 6c 69 73 74 20 28 69 74 65 6d 74 79 70 65 20 -list (itemtype
9330: 69 74 65 6d 69 64 20 6e 65 78 74 69 74 65 6d 74 itemid nextitemt
9340: 79 70 65 20 6e 65 78 74 69 74 65 6d 69 64 20 2e ype nextitemid .
9350: 2e 2e 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 ..). typemeth
9360: 6f 64 20 6c 6f 6f 70 73 20 7b 72 65 76 69 73 69 od loops {revisi
9370: 6f 6e 73 7d 20 7b 0a 09 23 20 4e 6f 74 65 3a 20 ons} {..# Note:
9380: 54 61 67 73 20 61 6e 64 20 62 72 61 6e 63 68 65 Tags and branche
9390: 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 74 s cannot cause t
93a0: 68 65 20 6c 6f 6f 70 2e 20 54 68 65 69 72 20 69 he loop. Their i
93b0: 64 27 73 2c 0a 09 23 20 62 65 69 6e 67 20 6f 66 d's,..# being of
93c0: 20 61 20 66 75 6e 64 61 6d 65 6e 74 61 6c 6c 79 a fundamentally
93d0: 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 20 different type
93e0: 74 68 61 6e 20 74 68 65 20 72 65 76 69 73 69 6f than the revisio
93f0: 6e 73 0a 09 23 20 63 6f 6d 69 6e 67 20 69 6e 20 ns..# coming in
9400: 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 74 68 65 cannot be in the
9410: 20 73 65 74 2e 0a 0a 09 73 65 74 20 74 68 65 73 set....set thes
9420: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 et ('[join $revi
9430: 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 sions {','}]')..
9440: 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 return [state ru
9450: 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d n [subst -nocomm
9460: 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 ands -nobackslas
9470: 68 65 73 20 7b 0a 09 20 20 20 20 2d 2d 20 28 31 hes {.. -- (1
9480: 29 20 50 72 69 6d 61 72 79 20 63 68 69 6c 64 0a ) Primary child.
9490: 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 . SELECT R.ri
94a0: 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 20 20 20 d, R.child..
94b0: 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 FROM revision
94c0: 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e R.. WHERE R.
94d0: 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 rid IN $theset
94e0: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
94f0: 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 to revisions of
9500: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
9510: 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49 53 ND R.child IS
9520: 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d 20 NOT NULL --
9530: 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69 6c Has primary chil
9540: 64 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e d.. AND R.
9550: 63 68 69 6c 64 20 49 4e 20 24 74 68 65 73 65 74 child IN $theset
9560: 20 20 20 20 20 2d 2d 20 4c 6f 6f 70 0a 09 20 20 -- Loop..
9570: 20 20 2d 2d 0a 09 20 20 20 20 55 4e 49 4f 4e 0a --.. UNION.
9580: 09 20 20 20 20 2d 2d 20 28 32 29 20 53 65 63 6f . -- (2) Seco
9590: 6e 64 61 72 79 20 28 62 72 61 6e 63 68 29 20 63 ndary (branch) c
95a0: 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 53 45 4c hildren.. SEL
95b0: 45 43 54 20 52 2e 72 69 64 2c 20 42 2e 62 72 69 ECT R.rid, B.bri
95c0: 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 d.. FROM re
95d0: 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 vision R, revisi
95e0: 6f 6e 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e onbranchchildren
95f0: 20 42 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 B.. WHERE R
9600: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 .rid IN $these
9610: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
9620: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
9630: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
9640: 41 4e 44 20 20 20 20 52 2e 72 69 64 20 3d 20 42 AND R.rid = B
9650: 2e 72 69 64 20 20 20 20 20 20 20 20 20 20 2d 2d .rid --
9660: 20 53 65 6c 65 63 74 20 73 75 62 73 65 74 20 6f Select subset o
9670: 66 20 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 f branch childre
9680: 6e 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e n.. AND B.
9690: 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 rid IN $theset
96a0: 20 20 20 20 20 2d 2d 20 4c 6f 6f 70 0a 09 20 20 -- Loop..
96b0: 20 20 2d 2d 0a 09 20 20 20 20 55 4e 49 4f 4e 0a --.. UNION.
96c0: 09 20 20 20 20 2d 2d 20 28 34 29 20 43 68 69 6c . -- (4) Chil
96d0: 64 20 6f 66 20 74 72 75 6e 6b 20 72 6f 6f 74 20 d of trunk root
96e0: 73 75 63 63 65 73 73 6f 72 20 6f 66 20 6c 61 73 successor of las
96f0: 74 20 4e 54 44 42 20 6f 6e 20 74 72 75 6e 6b 2e t NTDB on trunk.
9700: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
9710: 69 64 2c 20 52 41 2e 63 68 69 6c 64 0a 09 20 20 id, RA.child..
9720: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
9730: 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 20 52 41 n R, revision RA
9740: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 .. WHERE R.r
9750: 69 64 20 20 20 20 49 4e 20 24 74 68 65 73 65 74 id IN $theset
9760: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
9770: 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 to revisions of
9780: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
9790: 4e 44 20 20 20 20 52 2e 69 73 64 65 66 61 75 6c ND R.isdefaul
97a0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d t --
97b0: 20 52 65 73 74 72 69 63 74 20 74 6f 20 4e 54 44 Restrict to NTD
97c0: 42 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e B.. AND R.
97d0: 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e dbchild IS NOT N
97e0: 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c 61 73 ULL -- and las
97f0: 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 6e 67 t NTDB belonging
9800: 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 20 41 to trunk.. A
9810: 4e 44 20 20 20 20 52 41 2e 72 69 64 20 3d 20 52 ND RA.rid = R
9820: 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d 2d .dbchild --
9830: 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f 20 Go directly to
9840: 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 20 trunk root..
9850: 41 4e 44 20 20 20 20 52 41 2e 63 68 69 6c 64 20 AND RA.child
9860: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d IS NOT NULL -
9870: 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 - Has primary ch
9880: 69 6c 64 2e 0a 09 20 20 20 20 41 4e 44 20 20 20 ild... AND
9890: 20 52 41 2e 63 68 69 6c 64 20 49 4e 20 24 74 68 RA.child IN $th
98a0: 65 73 65 74 20 20 20 20 20 2d 2d 20 4c 6f 6f 70 eset -- Loop
98b0: 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 ..}]]. }..
98c0: 20 23 20 76 61 72 28 64 76 29 20 3d 20 64 69 63 # var(dv) = dic
98d0: 74 20 28 69 74 65 6d 20 2d 3e 20 6c 69 73 74 20 t (item -> list
98e0: 28 69 74 65 6d 29 29 2c 20 69 74 65 6d 20 20 3d (item)), item =
98f0: 20 6c 69 73 74 20 28 74 79 70 65 20 69 64 29 0a list (type id).
9900: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 typemethod s
9910: 75 63 63 65 73 73 6f 72 73 20 7b 64 76 20 72 65 uccessors {dv re
9920: 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 61 visions} {..upva
9930: 72 20 31 20 24 64 76 20 64 65 70 65 6e 64 65 6e r 1 $dv dependen
9940: 63 69 65 73 0a 09 73 65 74 20 74 68 65 73 65 74 cies..set theset
9950: 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 ('[join $revisi
9960: 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 0a 09 23 ons {','}]')...#
9970: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 The following c
9980: 61 73 65 73 20 73 70 65 63 69 66 79 20 77 68 65 ases specify whe
9990: 6e 20 61 20 72 65 76 69 73 69 6f 6e 20 53 20 69 n a revision S i
99a0: 73 20 61 20 73 75 63 63 65 73 73 6f 72 0a 09 23 s a successor..#
99b0: 20 6f 66 20 61 20 72 65 76 69 73 69 6f 6e 20 52 of a revision R
99c0: 2e 20 45 61 63 68 20 6f 66 20 74 68 65 20 63 61 . Each of the ca
99d0: 73 65 73 20 74 72 61 6e 73 6c 61 74 65 73 20 69 ses translates i
99e0: 6e 74 6f 20 6f 6e 65 20 6f 66 0a 09 23 20 74 68 nto one of..# th
99f0: 65 20 62 72 61 6e 63 68 65 73 20 6f 66 20 74 68 e branches of th
9a00: 65 20 53 51 4c 20 55 4e 49 4f 4e 20 63 6f 6d 69 e SQL UNION comi
9a10: 6e 67 20 62 65 6c 6f 77 2e 0a 09 23 0a 09 23 20 ng below...#..#
9a20: 28 31 29 20 53 20 63 61 6e 20 62 65 20 61 20 70 (1) S can be a p
9a30: 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 20 rimary child of
9a40: 52 2c 20 69 2e 65 2e 20 69 6e 20 74 68 65 20 73 R, i.e. in the s
9a50: 61 6d 65 20 4c 4f 44 2e 20 52 0a 09 23 20 20 20 ame LOD. R..#
9a60: 20 20 72 65 66 65 72 65 6e 63 65 73 20 53 20 64 references S d
9a70: 69 72 65 63 74 6c 79 2e 20 52 2e 63 68 69 6c 64 irectly. R.child
9a80: 20 3d 20 53 28 2e 72 69 64 29 2c 20 69 66 20 69 = S(.rid), if i
9a90: 74 20 65 78 69 73 74 73 2e 0a 09 23 0a 09 23 20 t exists...#..#
9aa0: 28 32 29 20 53 20 63 61 6e 20 62 65 20 61 20 73 (2) S can be a s
9ab0: 65 63 6f 6e 64 61 72 79 2c 20 69 2e 65 2e 20 62 econdary, i.e. b
9ac0: 72 61 6e 63 68 2c 20 63 68 69 6c 64 20 6f 66 20 ranch, child of
9ad0: 52 2e 20 48 65 72 65 20 74 68 65 0a 09 23 20 20 R. Here the..#
9ae0: 20 20 20 6c 69 6e 6b 20 69 73 20 6d 61 64 65 20 link is made
9af0: 74 68 72 6f 75 67 68 20 74 68 65 20 68 65 6c 70 through the help
9b00: 65 72 20 74 61 62 6c 65 0a 09 23 20 20 20 20 20 er table..#
9b10: 52 45 56 49 53 49 4f 4e 42 52 41 4e 43 48 43 48 REVISIONBRANCHCH
9b20: 49 4c 44 52 45 4e 2e 20 52 2e 72 69 64 20 2d 3e ILDREN. R.rid ->
9b30: 20 52 42 43 2e 72 69 64 2c 20 52 42 43 2e 62 72 RBC.rid, RBC.br
9b40: 69 64 20 3d 0a 09 23 20 20 20 20 20 53 28 2e 72 id =..# S(.r
9b50: 69 64 29 0a 09 23 0a 09 23 20 28 33 29 20 4f 72 id)..#..# (3) Or
9b60: 69 67 69 6e 61 6c 6c 79 20 74 68 69 73 20 75 73 iginally this us
9b70: 65 20 63 61 73 65 20 64 65 66 69 6e 65 64 20 74 e case defined t
9b80: 68 65 20 72 6f 6f 74 20 6f 66 20 61 20 64 65 74 he root of a det
9b90: 61 63 68 65 64 0a 09 23 20 20 20 20 20 4e 54 44 ached..# NTD
9ba0: 42 20 61 73 20 74 68 65 20 73 75 63 63 65 73 73 B as the success
9bb0: 6f 72 20 6f 66 20 74 68 65 20 74 72 75 6e 6b 20 or of the trunk
9bc0: 72 6f 6f 74 2e 20 54 68 69 73 20 6c 65 61 64 73 root. This leads
9bd0: 20 74 6f 20 61 0a 09 23 20 20 20 20 20 62 61 64 to a..# bad
9be0: 20 74 61 6e 67 6c 65 20 6c 61 74 65 72 20 6f 6e tangle later on
9bf0: 2e 20 57 69 74 68 20 61 20 64 65 74 61 63 68 65 . With a detache
9c00: 64 20 4e 54 44 42 20 74 68 65 20 6f 72 69 67 69 d NTDB the origi
9c10: 6e 61 6c 0a 09 23 20 20 20 20 20 74 72 75 6e 6b nal..# trunk
9c20: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 77 root revision w
9c30: 61 73 20 72 65 6d 6f 76 65 64 20 61 73 20 69 72 as removed as ir
9c40: 72 65 6c 65 76 61 6e 74 2c 20 61 6c 6c 6f 77 69 relevant, allowi
9c50: 6e 67 0a 09 23 20 20 20 20 20 74 68 65 20 6e 6f ng..# the no
9c60: 6d 69 6e 61 6c 20 72 6f 6f 74 20 74 6f 20 62 65 minal root to be
9c70: 20 6c 61 74 65 72 20 69 6e 20 74 69 6d 65 20 74 later in time t
9c80: 68 61 6e 20 74 68 65 20 4e 54 44 42 0a 09 23 20 han the NTDB..#
9c90: 20 20 20 20 72 6f 6f 74 2e 20 4e 6f 77 20 73 65 root. Now se
9ca0: 74 74 69 6e 67 20 74 68 69 73 20 64 65 70 65 6e tting this depen
9cb0: 64 65 6e 63 79 20 77 69 6c 6c 20 62 65 20 62 61 dency will be ba
9cc0: 63 6b 77 61 72 64 20 69 6e 0a 09 23 20 20 20 20 ckward in..#
9cd0: 20 74 69 6d 65 2e 20 52 45 4d 4f 56 45 44 2e 0a time. REMOVED..
9ce0: 09 23 0a 09 23 20 28 34 29 20 49 66 20 52 20 69 .#..# (4) If R i
9cf0: 73 20 74 68 65 20 6c 61 73 74 20 6f 66 20 74 68 s the last of th
9d00: 65 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 73 e NTDB revisions
9d10: 20 77 68 69 63 68 20 62 65 6c 6f 6e 67 20 74 6f which belong to
9d20: 0a 09 23 20 20 20 20 20 74 68 65 20 74 72 75 6e ..# the trun
9d30: 6b 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 6d k, then the prim
9d40: 61 72 79 20 63 68 69 6c 64 20 6f 66 20 74 68 65 ary child of the
9d50: 20 74 72 75 6e 6b 20 72 6f 6f 74 20 28 74 68 65 trunk root (the
9d60: 0a 09 23 20 20 20 20 20 27 31 2e 32 27 20 72 65 ..# '1.2' re
9d70: 76 69 73 69 6f 6e 29 20 69 73 20 61 20 73 75 63 vision) is a suc
9d80: 63 65 73 73 6f 72 2c 20 69 66 20 69 74 20 65 78 cessor, if it ex
9d90: 69 73 74 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 74 ists....# Note t
9da0: 68 61 74 20 74 68 65 20 62 72 61 6e 63 68 65 73 hat the branches
9db0: 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 74 68 spawned from th
9dc0: 65 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 e revisions, and
9dd0: 20 74 68 65 0a 09 23 20 74 61 67 73 20 61 73 73 the..# tags ass
9de0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 ociated with the
9df0: 6d 20 61 72 65 20 73 75 63 63 65 73 73 6f 72 73 m are successors
9e00: 20 61 73 20 77 65 6c 6c 2e 0a 0a 09 66 6f 72 65 as well....fore
9e10: 61 63 68 20 7b 72 69 64 20 63 68 69 6c 64 7d 20 ach {rid child}
9e20: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
9e30: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
9e40: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 20 obackslashes {.
9e50: 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d 61 72 -- (1) Primar
9e60: 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 45 4c y child.. SEL
9e70: 45 43 54 20 52 2e 72 69 64 2c 20 52 2e 63 68 69 ECT R.rid, R.chi
9e80: 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 ld.. FROM r
9e90: 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 evision R.. W
9ea0: 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 4e HERE R.rid IN
9eb0: 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 $theset --
9ec0: 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 Restrict to revi
9ed0: 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 sions of interes
9ee0: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e t.. AND R.
9ef0: 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55 4c child IS NOT NUL
9f00: 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69 6d L -- Has prim
9f10: 61 72 79 20 63 68 69 6c 64 0a 20 20 20 20 55 4e ary child. UN
9f20: 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 32 29 20 53 ION. -- (2) S
9f30: 65 63 6f 6e 64 61 72 79 20 28 62 72 61 6e 63 68 econdary (branch
9f40: 29 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 ) children..
9f50: 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 42 2e SELECT R.rid, B.
9f60: 62 72 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 brid.. FROM
9f70: 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 revision R, rev
9f80: 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c 64 isionbranchchild
9f90: 72 65 6e 20 42 0a 09 20 20 20 20 57 48 45 52 45 ren B.. WHERE
9fa0: 20 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 R.rid IN $th
9fb0: 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 eset -- Rest
9fc0: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e rict to revision
9fd0: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
9fe0: 20 20 20 41 4e 44 20 20 20 20 52 2e 72 69 64 20 AND R.rid
9ff0: 3d 20 42 2e 72 69 64 20 20 20 20 20 20 20 20 20 = B.rid
a000: 20 2d 2d 20 53 65 6c 65 63 74 20 73 75 62 73 65 -- Select subse
a010: 74 20 6f 66 20 62 72 61 6e 63 68 20 63 68 69 6c t of branch chil
a020: 64 72 65 6e 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 dren. UNION.
a030: 20 20 20 2d 2d 20 28 34 29 20 43 68 69 6c 64 20 -- (4) Child
a040: 6f 66 20 74 72 75 6e 6b 20 72 6f 6f 74 20 73 75 of trunk root su
a050: 63 63 65 73 73 6f 72 20 6f 66 20 6c 61 73 74 20 ccessor of last
a060: 4e 54 44 42 20 6f 6e 20 74 72 75 6e 6b 2e 0a 09 NTDB on trunk...
a070: 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 SELECT R.rid
a080: 2c 20 52 41 2e 63 68 69 6c 64 0a 09 20 20 20 20 , RA.child..
a090: 46 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20 52 2c FROM revision R,
a0a0: 20 72 65 76 69 73 69 6f 6e 20 52 41 0a 09 20 20 revision RA..
a0b0: 20 20 57 48 45 52 45 20 52 2e 72 69 64 20 20 20 WHERE R.rid
a0c0: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 IN $theset
a0d0: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 -- Restrict to r
a0e0: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 evisions of inte
a0f0: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
a100: 52 2e 69 73 64 65 66 61 75 6c 74 20 20 20 20 20 R.isdefault
a110: 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 -- Restr
a120: 69 63 74 20 74 6f 20 4e 54 44 42 0a 09 20 20 20 ict to NTDB..
a130: 20 41 4e 44 20 20 20 52 2e 64 62 63 68 69 6c 64 AND R.dbchild
a140: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 2d IS NOT NULL -
a150: 2d 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 20 - and last NTDB
a160: 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 75 belonging to tru
a170: 6e 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 52 41 nk.. AND RA
a180: 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 6c 64 .rid = R.dbchild
a190: 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 72 65 -- Go dire
a1a0: 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 72 6f ctly to trunk ro
a1b0: 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 52 41 ot.. AND RA
a1c0: 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55 .child IS NOT NU
a1d0: 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69 LL -- Has pri
a1e0: 6d 61 72 79 20 63 68 69 6c 64 2e 0a 09 7d 5d 5d mary child...}]]
a1f0: 20 7b 0a 09 20 20 20 20 23 20 43 6f 6e 73 69 64 {.. # Consid
a200: 65 72 20 6d 6f 76 69 6e 67 20 74 68 69 73 20 74 er moving this t
a210: 6f 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 o the integrity
a220: 6d 6f 64 75 6c 65 2e 0a 09 20 20 20 20 69 6e 74 module... int
a230: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 egrity assert {$
a240: 72 69 64 20 21 3d 20 24 63 68 69 6c 64 7d 20 7b rid != $child} {
a250: 52 65 76 69 73 69 6f 6e 20 24 72 69 64 20 64 65 Revision $rid de
a260: 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66 2e pends on itself.
a270: 7d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 }.. lappend d
a280: 65 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 ependencies([lis
a290: 74 20 72 65 76 20 24 72 69 64 5d 29 20 5b 6c 69 t rev $rid]) [li
a2a0: 73 74 20 72 65 76 20 24 63 68 69 6c 64 5d 0a 09 st rev $child]..
a2b0: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 64 20 }..foreach {rid
a2c0: 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 20 72 75 child} [state ru
a2d0: 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d n [subst -nocomm
a2e0: 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 ands -nobackslas
a2f0: 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 hes {.. SELEC
a300: 54 20 52 2e 72 69 64 2c 20 54 2e 74 69 64 0a 09 T R.rid, T.tid..
a310: 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 FROM revis
a320: 69 6f 6e 20 52 2c 20 74 61 67 20 54 0a 09 20 20 ion R, tag T..
a330: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 49 WHERE R.rid I
a340: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 N $theset
a350: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 -- Restrict to r
a360: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 evisions of inte
a370: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
a380: 20 54 2e 72 65 76 20 3d 20 52 2e 72 69 64 20 20 T.rev = R.rid
a390: 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 -- Selec
a3a0: 74 20 74 61 67 73 20 61 74 74 61 63 68 65 64 20 t tags attached
a3b0: 74 6f 20 74 68 65 6d 0a 09 7d 5d 5d 20 7b 0a 09 to them..}]] {..
a3c0: 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65 lappend depe
a3d0: 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 72 ndencies([list r
a3e0: 65 76 20 24 72 69 64 5d 29 20 5b 6c 69 73 74 20 ev $rid]) [list
a3f0: 73 79 6d 3a 3a 74 61 67 20 24 63 68 69 6c 64 5d sym::tag $child]
a400: 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 ..}..foreach {ri
a410: 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 20 d child} [state
a420: 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f run [subst -noco
a430: 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c mmands -nobacksl
a440: 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c ashes {.. SEL
a450: 45 43 54 20 52 2e 72 69 64 2c 20 42 2e 62 69 64 ECT R.rid, B.bid
a460: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 .. FROM rev
a470: 69 73 69 6f 6e 20 52 2c 20 62 72 61 6e 63 68 20 ision R, branch
a480: 42 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e B.. WHERE R.
a490: 72 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 rid IN $theset
a4a0: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
a4b0: 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 to revisions of
a4c0: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
a4d0: 4e 44 20 20 20 20 42 2e 72 6f 6f 74 20 3d 20 52 ND B.root = R
a4e0: 2e 72 69 64 20 20 20 20 20 20 20 20 20 2d 2d 20 .rid --
a4f0: 53 65 6c 65 63 74 20 62 72 61 6e 63 68 65 73 20 Select branches
a500: 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d attached to them
a510: 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 ..}]] {.. lap
a520: 70 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 65 pend dependencie
a530: 73 28 5b 6c 69 73 74 20 72 65 76 20 24 72 69 64 s([list rev $rid
a540: 5d 29 20 5b 6c 69 73 74 20 73 79 6d 3a 3a 62 72 ]) [list sym::br
a550: 61 6e 63 68 20 24 63 68 69 6c 64 5d 0a 09 7d 0a anch $child]..}.
a560: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
a570: 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 # result = li
a580: 73 74 20 28 63 68 61 6e 67 65 73 65 74 2d 69 64 st (changeset-id
a590: 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 ). typemethod
a5a0: 20 63 73 5f 73 75 63 63 65 73 73 6f 72 73 20 7b cs_successors {
a5b0: 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 20 20 20 revisions} {.
a5c0: 20 20 20 20 20 23 20 54 68 69 73 20 69 73 20 61 # This is a
a5d0: 20 76 61 72 69 61 6e 74 20 6f 66 20 27 73 75 63 variant of 'suc
a5e0: 63 65 73 73 6f 72 73 27 20 77 68 69 63 68 20 6d cessors' which m
a5f0: 61 70 73 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 aps the low-leve
a600: 6c 0a 20 20 20 20 20 20 20 20 23 20 64 61 74 61 l. # data
a610: 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74 68 65 directly to the
a620: 20 61 73 73 6f 63 69 61 74 65 64 20 63 68 61 6e associated chan
a630: 67 65 73 65 74 73 2e 20 49 2e 65 2e 20 69 6e 73 gesets. I.e. ins
a640: 74 65 61 64 0a 20 20 20 20 20 20 20 20 23 20 6d tead. # m
a650: 69 6c 6c 69 6f 6e 73 20 6f 66 20 64 65 70 65 6e illions of depen
a660: 64 65 6e 63 79 20 70 61 69 72 73 20 28 69 6e 20 dency pairs (in
a670: 65 78 74 72 65 6d 65 20 63 61 73 65 73 20 28 45 extreme cases (E
a680: 78 61 6d 70 6c 65 3a 20 54 63 6c 0a 20 20 20 20 xample: Tcl.
a690: 20 20 20 20 23 20 43 56 53 29 29 20 77 65 20 72 # CVS)) we r
a6a0: 65 74 75 72 6e 20 61 20 76 65 72 79 20 73 68 6f eturn a very sho
a6b0: 72 74 20 61 6e 64 20 6d 75 63 68 20 6d 6f 72 65 rt and much more
a6c0: 20 6d 61 6e 61 67 65 61 62 6c 65 20 6c 69 73 74 manageable list
a6d0: 0a 20 20 20 20 20 20 20 20 23 20 6f 66 20 63 68 . # of ch
a6e0: 61 6e 67 65 73 65 74 73 2e 0a 0a 09 73 65 74 20 angesets....set
a6f0: 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 theset ('[join $
a700: 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d revisions {','}]
a710: 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 61 74 ')..return [stat
a720: 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f e run [subst -no
a730: 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b commands -noback
a740: 73 6c 61 73 68 65 73 20 7b 0a 20 20 20 20 2d 2d slashes {. --
a750: 20 28 31 29 20 50 72 69 6d 61 72 79 20 63 68 69 (1) Primary chi
a760: 6c 64 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 ld.. SELECT C
a770: 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 .cid.. FROM
a780: 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 63 73 69 revision R, csi
a790: 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 tem CI, changese
a7a0: 74 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 t C.. WHERE
a7b0: 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 R.rid IN $thes
a7c0: 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 et -- Restri
a7d0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 ct to revisions
a7e0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
a7f0: 20 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 AND R.child
a800: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d IS NOT NULL -
a810: 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 - Has primary ch
a820: 69 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 ild.
a830: 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d 20 AND CI.iid =
a840: 52 2e 63 68 69 6c 64 20 20 20 20 20 20 20 2d 2d R.child --
a850: 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e Select all chan
a860: 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 gesets.
a870: 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 AND C.cid
a880: 3d 20 43 49 2e 63 69 64 20 20 20 20 20 20 20 20 = CI.cid
a890: 20 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 -- containing t
a8a0: 68 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 he primary child
a8b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
a8c0: 20 20 20 20 43 2e 74 79 70 65 20 3d 20 30 20 20 C.type = 0
a8d0: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 77 68 -- wh
a8e0: 69 63 68 20 61 72 65 20 72 65 76 69 73 69 6f 6e ich are revision
a8f0: 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 20 20 changesets.
a900: 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 32 29 UNION. -- (2)
a910: 20 53 65 63 6f 6e 64 61 72 79 20 28 62 72 61 6e Secondary (bran
a920: 63 68 29 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 ch) children..
a930: 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 SELECT C.cid..
a940: 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 FROM revis
a950: 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 62 ion R, revisionb
a960: 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 42 2c ranchchildren B,
a970: 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e csitem CI, chan
a980: 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 45 geset C.. WHE
a990: 52 45 20 20 52 2e 72 69 64 20 20 20 49 4e 20 24 RE R.rid IN $
a9a0: 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 theset -- Re
a9b0: 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 strict to revisi
a9c0: 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a ons of interest.
a9d0: 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e 72 69 . AND R.ri
a9e0: 64 20 3d 20 42 2e 72 69 64 20 20 20 20 20 20 20 d = B.rid
a9f0: 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 73 75 62 -- Select sub
aa00: 73 65 74 20 6f 66 20 62 72 61 6e 63 68 20 63 68 set of branch ch
aa10: 69 6c 64 72 65 6e 0a 20 20 20 20 20 20 20 20 20 ildren.
aa20: 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 AND CI.iid
aa30: 20 3d 20 42 2e 62 72 69 64 20 20 20 20 20 20 20 = B.brid
aa40: 20 2d 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 -- Select all c
aa50: 68 61 6e 67 65 73 65 74 73 0a 20 20 20 20 20 20 hangesets.
aa60: 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e 63 AND C.c
aa70: 69 64 20 3d 20 43 49 2e 63 69 64 09 20 20 2d 2d id = CI.cid. --
aa80: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the
aa90: 62 72 61 6e 63 68 0a 20 20 20 20 20 20 20 20 20 branch.
aaa0: 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 AND C.type
aab0: 20 3d 20 30 09 09 20 20 2d 2d 20 77 68 69 63 68 = 0.. -- which
aac0: 20 61 72 65 20 72 65 76 69 73 69 6f 6e 20 63 68 are revision ch
aad0: 61 6e 67 65 73 65 74 73 0a 20 20 20 20 55 4e 49 angesets. UNI
aae0: 4f 4e 0a 20 20 20 20 2d 2d 20 28 34 29 20 43 68 ON. -- (4) Ch
aaf0: 69 6c 64 20 6f 66 20 74 72 75 6e 6b 20 72 6f 6f ild of trunk roo
ab00: 74 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 6c t successor of l
ab10: 61 73 74 20 4e 54 44 42 20 6f 6e 20 74 72 75 6e ast NTDB on trun
ab20: 6b 2e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 k... SELECT C
ab30: 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 .cid.. FROM
ab40: 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 revision R, rev
ab50: 69 73 69 6f 6e 20 52 41 2c 20 63 73 69 74 65 6d ision RA, csitem
ab60: 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 CI, changeset C
ab70: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 .. WHERE R.r
ab80: 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 id IN $theset
ab90: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
aba0: 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 to revisions of
abb0: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
abc0: 4e 44 20 20 20 20 52 2e 69 73 64 65 66 61 75 6c ND R.isdefaul
abd0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d t --
abe0: 20 52 65 73 74 72 69 63 74 20 74 6f 20 4e 54 44 Restrict to NTD
abf0: 42 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e B.. AND R.
ac00: 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e dbchild IS NOT N
ac10: 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c 61 73 ULL -- and las
ac20: 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 6e 67 t NTDB belonging
ac30: 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 20 41 to trunk.. A
ac40: 4e 44 20 20 20 20 52 41 2e 72 69 64 20 3d 20 52 ND RA.rid = R
ac50: 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d 2d .dbchild --
ac60: 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f 20 Go directly to
ac70: 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 20 trunk root..
ac80: 41 4e 44 20 20 20 20 52 41 2e 63 68 69 6c 64 20 AND RA.child
ac90: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d IS NOT NULL -
aca0: 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 - Has primary ch
acb0: 69 6c 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 ild..
acc0: 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d AND CI.iid =
acd0: 20 52 41 2e 63 68 69 6c 64 20 20 20 20 20 20 20 RA.child
ace0: 2d 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 -- Select all ch
acf0: 61 6e 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 angesets.
ad00: 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 AND C.ci
ad10: 64 20 3d 20 43 49 2e 63 69 64 09 20 20 20 2d 2d d = CI.cid. --
ad20: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the
ad30: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 20 20 primary child.
ad40: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
ad50: 20 43 2e 74 79 70 65 20 3d 20 30 09 09 20 20 20 C.type = 0..
ad60: 2d 2d 20 77 68 69 63 68 20 61 72 65 20 72 65 76 -- which are rev
ad70: 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 ision changesets
ad80: 0a 20 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 . UNION..
ad90: 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 SELECT C.cid..
ada0: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
adb0: 6e 20 52 2c 20 74 61 67 20 54 2c 20 63 73 69 74 n R, tag T, csit
adc0: 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 em CI, changeset
add0: 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 C.. WHERE R
ade0: 2e 72 69 64 20 69 6e 20 24 74 68 65 73 65 74 20 .rid in $theset
adf0: 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 -- Restri
ae00: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 ct to revisions
ae10: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
ae20: 20 41 4e 44 20 20 20 20 54 2e 72 65 76 20 3d 20 AND T.rev =
ae30: 52 2e 72 69 64 09 20 20 20 2d 2d 20 53 65 6c 65 R.rid. -- Sele
ae40: 63 74 20 74 61 67 73 20 61 74 74 61 63 68 65 64 ct tags attached
ae50: 20 74 6f 20 74 68 65 6d 0a 20 20 20 20 20 20 20 to them.
ae60: 20 20 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 AND CI.i
ae70: 69 64 20 3d 20 54 2e 74 69 64 20 20 20 20 20 20 id = T.tid
ae80: 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 61 6c -- Select al
ae90: 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 20 l changesets.
aea0: 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 AND
aeb0: 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 09 20 C.cid = CI.cid.
aec0: 20 20 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 -- containing
aed0: 74 68 65 20 74 61 67 73 0a 20 20 20 20 20 20 20 the tags.
aee0: 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 AND C.ty
aef0: 70 65 20 3d 20 31 09 09 20 20 20 2d 2d 20 77 68 pe = 1.. -- wh
af00: 69 63 68 20 61 72 65 20 74 61 67 20 63 68 61 6e ich are tag chan
af10: 67 65 73 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e gesets. UNION
af20: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 .. SELECT C.c
af30: 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 id.. FROM r
af40: 65 76 69 73 69 6f 6e 20 52 2c 20 62 72 61 6e 63 evision R, branc
af50: 68 20 42 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 h B, csitem CI,
af60: 63 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 changeset C..
af70: 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 69 6e WHERE R.rid in
af80: 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 20 $theset
af90: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 -- Restrict to r
afa0: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 evisions of inte
afb0: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
afc0: 20 42 2e 72 6f 6f 74 20 3d 20 52 2e 72 69 64 09 B.root = R.rid.
afd0: 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 62 72 61 -- Select bra
afe0: 6e 63 68 65 73 20 61 74 74 61 63 68 65 64 20 74 nches attached t
aff0: 6f 20 74 68 65 6d 0a 20 20 20 20 20 20 20 20 20 o them.
b000: 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 AND CI.iid
b010: 20 3d 20 42 2e 62 69 64 20 20 20 20 20 20 20 20 = B.bid
b020: 20 20 2d 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 -- Select all
b030: 63 68 61 6e 67 65 73 65 74 73 0a 20 20 20 20 20 changesets.
b040: 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e AND C.
b050: 63 69 64 20 3d 20 43 49 2e 63 69 64 09 20 20 20 cid = CI.cid.
b060: 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 -- containing th
b070: 65 20 62 72 61 6e 63 68 65 73 0a 20 20 20 20 20 e branches.
b080: 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e AND C.
b090: 74 79 70 65 20 3d 20 32 09 09 20 20 20 2d 2d 20 type = 2.. --
b0a0: 77 68 69 63 68 20 61 72 65 20 62 72 61 6e 63 68 which are branch
b0b0: 20 63 68 61 6e 67 65 73 65 74 73 0a 09 7d 5d 5d changesets..}]]
b0c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 . }.. # re
b0d0: 73 75 6c 74 20 3d 20 73 79 6d 62 6f 6c 20 6e 61 sult = symbol na
b0e0: 6d 65 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f me. typemetho
b0f0: 64 20 63 73 5f 6c 6f 64 20 7b 72 65 76 69 73 69 d cs_lod {revisi
b100: 6f 6e 73 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d ons} {..# Determ
b110: 69 6e 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 ines the name of
b120: 20 74 68 65 20 73 79 6d 62 6f 6c 20 77 68 69 63 the symbol whic
b130: 68 20 69 73 20 74 68 65 20 6c 69 6e 65 20 6f 66 h is the line of
b140: 0a 09 23 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 ..# development
b150: 66 6f 72 20 74 68 65 20 72 65 76 69 73 69 6f 6e for the revision
b160: 73 20 69 6e 20 61 20 63 68 61 6e 67 65 73 65 74 s in a changeset
b170: 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 ....set theset (
b180: 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e '[join $revision
b190: 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 s {','}]')..retu
b1a0: 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 rn [state run [s
b1b0: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
b1c0: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
b1d0: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 0a 09 20 {.. SELECT..
b1e0: 20 20 20 44 49 53 54 49 4e 43 54 20 4c 2e 6e 61 DISTINCT L.na
b1f0: 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 me.. FROM r
b200: 65 76 69 73 69 6f 6e 20 52 2c 20 73 79 6d 62 6f evision R, symbo
b210: 6c 20 4c 0a 09 20 20 20 20 57 48 45 52 45 20 20 l L.. WHERE
b220: 52 2e 72 69 64 20 69 6e 20 24 74 68 65 73 65 74 R.rid in $theset
b230: 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 -- Restr
b240: 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 ict to revisions
b250: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
b260: 20 20 41 4e 44 20 20 20 20 4c 2e 73 69 64 20 3d AND L.sid =
b270: 20 52 2e 6c 6f 64 20 20 20 20 20 20 20 20 20 20 R.lod
b280: 20 2d 2d 20 47 65 74 20 6c 6f 64 20 73 79 6d 62 -- Get lod symb
b290: 6f 6c 20 6f 66 20 72 65 76 69 73 69 6f 6e 0a 09 ol of revision..
b2a0: 7d 5d 5d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 }]]. }.}..# #
b2b0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
b2c0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
b2d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
b2e0: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 48 65 ##########.## He
b2f0: 6c 70 65 72 20 73 69 6e 67 6c 65 74 6f 6e 2e 20 lper singleton.
b300: 43 6f 6d 6d 61 6e 64 73 20 66 6f 72 20 74 61 67 Commands for tag
b310: 20 73 79 6d 62 6f 6c 20 63 68 61 6e 67 65 73 65 symbol changese
b320: 74 73 2e 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 ts...snit::type
b330: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
b340: 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 port::cvs::proje
b350: 63 74 3a 3a 72 65 76 3a 3a 73 79 6d 3a 3a 74 61 ct::rev::sym::ta
b360: 67 20 7b 0a 20 20 20 20 74 79 70 65 6d 65 74 68 g {. typemeth
b370: 6f 64 20 62 79 72 65 76 69 73 69 6f 6e 20 7b 7d od byrevision {}
b380: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20 { return 0 }.
b390: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 79 73 typemethod bys
b3a0: 79 6d 62 6f 6c 20 20 20 7b 7d 20 7b 20 72 65 74 ymbol {} { ret
b3b0: 75 72 6e 20 31 20 7d 0a 20 20 20 20 74 79 70 65 urn 1 }. type
b3c0: 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 20 20 method istag
b3d0: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 {} { return 1
b3e0: 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 }. typemethod
b3f0: 20 69 73 62 72 61 6e 63 68 20 20 20 7b 7d 20 7b isbranch {} {
b400: 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a 20 20 20 return 0 }..
b410: 20 74 79 70 65 6d 65 74 68 6f 64 20 73 74 72 20 typemethod str
b420: 7b 74 61 67 7d 20 7b 0a 09 73 74 72 75 63 74 3a {tag} {..struct:
b430: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 73 74 :list assign [st
b440: 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 ate run {.. S
b450: 45 4c 45 43 54 20 53 2e 6e 61 6d 65 2c 20 46 2e ELECT S.name, F.
b460: 6e 61 6d 65 2c 20 50 2e 6e 61 6d 65 0a 09 20 20 name, P.name..
b470: 20 20 46 52 4f 4d 20 20 20 74 61 67 20 54 2c 20 FROM tag T,
b480: 73 79 6d 62 6f 6c 20 53 2c 20 66 69 6c 65 20 46 symbol S, file F
b490: 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 20 20 20 , project P..
b4a0: 20 57 48 45 52 45 20 20 54 2e 74 69 64 20 3d 20 WHERE T.tid =
b4b0: 24 74 61 67 20 20 20 2d 2d 20 46 69 6e 64 20 73 $tag -- Find s
b4c0: 70 65 63 69 66 69 65 64 20 74 61 67 0a 09 20 20 pecified tag..
b4d0: 20 20 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d AND F.fid =
b4e0: 20 54 2e 66 69 64 20 20 2d 2d 20 47 65 74 20 66 T.fid -- Get f
b4f0: 69 6c 65 20 6f 66 20 74 61 67 0a 09 20 20 20 20 ile of tag..
b500: 41 4e 44 20 20 20 20 50 2e 70 69 64 20 3d 20 46 AND P.pid = F
b510: 2e 70 69 64 20 20 2d 2d 20 47 65 74 20 70 72 6f .pid -- Get pro
b520: 6a 65 63 74 20 6f 66 20 66 69 6c 65 0a 09 20 20 ject of file..
b530: 20 20 41 4e 44 20 20 20 20 53 2e 73 69 64 20 3d AND S.sid =
b540: 20 54 2e 73 69 64 20 20 2d 2d 20 47 65 74 20 73 T.sid -- Get s
b550: 79 6d 62 6f 6c 20 6f 66 20 74 61 67 0a 09 7d 5d ymbol of tag..}]
b560: 20 73 6e 61 6d 65 20 66 6e 61 6d 65 20 70 6e 61 sname fname pna
b570: 6d 65 0a 09 72 65 74 75 72 6e 20 22 24 70 6e 61 me..return "$pna
b580: 6d 65 2f 54 27 24 7b 73 6e 61 6d 65 7d 27 3a 3a me/T'${sname}'::
b590: 24 66 6e 61 6d 65 22 0a 20 20 20 20 7d 0a 0a 20 $fname". }..
b5a0: 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 # result = li
b5b0: 73 74 20 28 6d 69 6e 74 69 6d 65 2c 20 6d 61 78 st (mintime, max
b5c0: 74 69 6d 65 29 0a 20 20 20 20 74 79 70 65 6d 65 time). typeme
b5d0: 74 68 6f 64 20 74 69 6d 65 72 61 6e 67 65 20 7b thod timerange {
b5e0: 74 61 67 73 7d 20 7b 0a 09 23 20 54 68 65 20 72 tags} {..# The r
b5f0: 61 6e 67 65 20 69 73 20 64 65 66 69 6e 65 64 20 ange is defined
b600: 61 73 20 74 68 65 20 72 61 6e 67 65 20 6f 66 20 as the range of
b610: 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 74 68 the revisions th
b620: 65 20 74 61 67 73 0a 09 23 20 61 72 65 20 61 74 e tags..# are at
b630: 74 61 63 68 65 64 20 74 6f 2e 0a 0a 09 73 65 74 tached to....set
b640: 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 theset ('[join
b650: 24 74 61 67 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 $tags {','}]')..
b660: 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 return [state ru
b670: 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d n [subst -nocomm
b680: 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 ands -nobackslas
b690: 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 hes {.. SELEC
b6a0: 54 20 4d 49 4e 28 52 2e 64 61 74 65 29 2c 20 4d T MIN(R.date), M
b6b0: 41 58 28 52 2e 64 61 74 65 29 0a 09 20 20 20 20 AX(R.date)..
b6c0: 46 52 4f 4d 20 20 20 74 61 67 20 54 2c 20 72 65 FROM tag T, re
b6d0: 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 vision R.. WH
b6e0: 45 52 45 20 20 54 2e 74 69 64 20 49 4e 20 24 74 ERE T.tid IN $t
b6f0: 68 65 73 65 74 20 20 2d 2d 20 52 65 73 74 72 69 heset -- Restri
b700: 63 74 20 74 6f 20 74 61 67 73 20 6f 66 20 69 6e ct to tags of in
b710: 74 65 72 65 73 74 0a 20 20 20 20 20 20 20 20 20 terest.
b720: 20 20 20 41 4e 44 20 20 20 20 52 2e 72 69 64 20 AND R.rid
b730: 3d 20 54 2e 72 65 76 20 20 20 20 20 2d 2d 20 53 = T.rev -- S
b740: 65 6c 65 63 74 20 74 61 67 20 70 61 72 65 6e 74 elect tag parent
b750: 20 72 65 76 69 73 69 6f 6e 73 0a 09 7d 5d 5d 0a revisions..}]].
b760: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 76 61 72 }.. # var
b770: 28 64 76 29 20 3d 20 64 69 63 74 20 28 69 74 65 (dv) = dict (ite
b780: 6d 20 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 m -> list (item)
b790: 29 2c 20 69 74 65 6d 20 20 3d 20 6c 69 73 74 20 ), item = list
b7a0: 28 74 79 70 65 20 69 64 29 0a 20 20 20 20 74 79 (type id). ty
b7b0: 70 65 6d 65 74 68 6f 64 20 73 75 63 63 65 73 73 pemethod success
b7c0: 6f 72 73 20 7b 64 76 20 74 61 67 73 7d 20 7b 0a ors {dv tags} {.
b7d0: 09 23 20 54 61 67 73 20 68 61 76 65 20 6e 6f 20 .# Tags have no
b7e0: 73 75 63 63 65 73 73 6f 72 73 2e 0a 09 72 65 74 successors...ret
b7f0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 urn. }.. #
b800: 20 72 65 73 75 6c 74 20 3d 20 34 2d 6c 69 73 74 result = 4-list
b810: 20 28 69 74 65 6d 74 79 70 65 20 69 74 65 6d 69 (itemtype itemi
b820: 64 20 6e 65 78 74 69 74 65 6d 74 79 70 65 20 6e d nextitemtype n
b830: 65 78 74 69 74 65 6d 69 64 20 2e 2e 2e 29 0a 20 extitemid ...).
b840: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f typemethod lo
b850: 6f 70 73 20 7b 74 61 67 73 7d 20 7b 0a 09 23 20 ops {tags} {..#
b860: 54 61 67 73 20 68 61 76 65 20 6e 6f 20 73 75 63 Tags have no suc
b870: 63 65 73 73 6f 72 73 2c 20 74 68 65 72 65 66 6f cessors, therefo
b880: 72 65 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 re cannot cause
b890: 6c 6f 6f 70 73 0a 09 72 65 74 75 72 6e 20 7b 7d loops..return {}
b8a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 . }.. # re
b8b0: 73 75 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 sult = list (cha
b8c0: 6e 67 65 73 65 74 2d 69 64 29 0a 20 20 20 20 74 ngeset-id). t
b8d0: 79 70 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 ypemethod cs_suc
b8e0: 63 65 73 73 6f 72 73 20 7b 74 61 67 73 7d 20 7b cessors {tags} {
b8f0: 0a 09 23 20 54 61 67 73 20 68 61 76 65 20 6e 6f ..# Tags have no
b900: 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 09 72 65 successors...re
b910: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
b920: 23 20 72 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f # result = symbo
b930: 6c 20 6e 61 6d 65 0a 20 20 20 20 74 79 70 65 6d l name. typem
b940: 65 74 68 6f 64 20 63 73 5f 6c 6f 64 20 7b 74 61 ethod cs_lod {ta
b950: 67 73 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d 69 gs} {..# Determi
b960: 6e 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 nes the name of
b970: 74 68 65 20 73 79 6d 62 6f 6c 20 77 68 69 63 68 the symbol which
b980: 20 69 73 20 74 68 65 20 6c 69 6e 65 20 6f 66 0a is the line of.
b990: 09 23 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 .# development f
b9a0: 6f 72 20 74 68 65 20 74 61 67 73 20 69 6e 20 61 or the tags in a
b9b0: 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a 09 73 65 changeset....se
b9c0: 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e t theset ('[join
b9d0: 20 24 74 61 67 73 20 7b 27 2c 27 7d 5d 27 29 0a $tags {','}]').
b9e0: 09 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 .return [state r
b9f0: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
ba00: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
ba10: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
ba20: 43 54 0a 09 20 20 20 20 44 49 53 54 49 4e 43 54 CT.. DISTINCT
ba30: 20 4c 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f L.name.. FRO
ba40: 4d 20 20 20 74 61 67 20 54 2c 20 73 79 6d 62 6f M tag T, symbo
ba50: 6c 20 4c 0a 09 20 20 20 20 57 48 45 52 45 20 20 l L.. WHERE
ba60: 54 2e 74 69 64 20 69 6e 20 24 74 68 65 73 65 74 T.tid in $theset
ba70: 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 -- Restr
ba80: 69 63 74 20 74 6f 20 74 61 67 73 20 6f 66 20 69 ict to tags of i
ba90: 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 nterest.. AND
baa0: 20 20 20 20 4c 2e 73 69 64 20 3d 20 54 2e 6c 6f L.sid = T.lo
bab0: 64 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 47 d -- G
bac0: 65 74 20 6c 6f 64 20 73 79 6d 62 6f 6c 20 6f 66 et lod symbol of
bad0: 20 74 61 67 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a tag..}]]. }.
bae0: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 }..# # ## ### ##
baf0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
bb00: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 ########## #####
bb10: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
bb20: 0a 23 23 20 48 65 6c 70 65 72 20 73 69 6e 67 6c .## Helper singl
bb30: 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e 64 73 20 66 eton. Commands f
bb40: 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c or branch symbol
bb50: 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a 73 6e changesets...sn
bb60: 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 it::type ::vc::f
bb70: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
bb80: 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 vs::project::rev
bb90: 3a 3a 73 79 6d 3a 3a 62 72 61 6e 63 68 20 7b 0a ::sym::branch {.
bba0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 typemethod b
bbb0: 79 72 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 20 72 yrevision {} { r
bbc0: 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 eturn 0 }. ty
bbd0: 70 65 6d 65 74 68 6f 64 20 62 79 73 79 6d 62 6f pemethod bysymbo
bbe0: 6c 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 l {} { return
bbf0: 31 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 1 }. typemeth
bc00: 6f 64 20 69 73 74 61 67 20 20 20 20 20 20 7b 7d od istag {}
bc10: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20 { return 0 }.
bc20: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 62 typemethod isb
bc30: 72 61 6e 63 68 20 20 20 7b 7d 20 7b 20 72 65 74 ranch {} { ret
bc40: 75 72 6e 20 31 20 7d 0a 0a 20 20 20 20 74 79 70 urn 1 }.. typ
bc50: 65 6d 65 74 68 6f 64 20 73 74 72 20 7b 62 72 61 emethod str {bra
bc60: 6e 63 68 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a nch} {..struct::
bc70: 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 73 74 61 list assign [sta
bc80: 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 te run {.. SE
bc90: 4c 45 43 54 20 53 2e 6e 61 6d 65 2c 20 46 2e 6e LECT S.name, F.n
bca0: 61 6d 65 2c 20 50 2e 6e 61 6d 65 0a 09 20 20 20 ame, P.name..
bcb0: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 FROM branch B
bcc0: 2c 20 73 79 6d 62 6f 6c 20 53 2c 20 66 69 6c 65 , symbol S, file
bcd0: 20 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 20 F, project P..
bce0: 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 WHERE B.bid
bcf0: 3d 20 24 62 72 61 6e 63 68 20 20 2d 2d 20 46 69 = $branch -- Fi
bd00: 6e 64 20 73 70 65 63 69 66 69 65 64 20 62 72 61 nd specified bra
bd10: 6e 63 68 0a 09 20 20 20 20 41 4e 44 20 20 20 20 nch.. AND
bd20: 46 2e 66 69 64 20 3d 20 42 2e 66 69 64 20 20 20 F.fid = B.fid
bd30: 20 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 20 -- Get file of
bd40: 62 72 61 6e 63 68 0a 09 20 20 20 20 41 4e 44 20 branch.. AND
bd50: 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70 69 64 P.pid = F.pid
bd60: 20 20 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65 -- Get proje
bd70: 63 74 20 6f 66 20 66 69 6c 65 0a 09 20 20 20 20 ct of file..
bd80: 41 4e 44 20 20 20 20 53 2e 73 69 64 20 3d 20 42 AND S.sid = B
bd90: 2e 73 69 64 20 20 20 20 2d 2d 20 47 65 74 20 73 .sid -- Get s
bda0: 79 6d 62 6f 6c 20 6f 66 20 62 72 61 6e 63 68 0a ymbol of branch.
bdb0: 09 7d 5d 20 73 6e 61 6d 65 20 66 6e 61 6d 65 20 .}] sname fname
bdc0: 70 6e 61 6d 65 0a 09 72 65 74 75 72 6e 20 22 24 pname..return "$
bdd0: 70 6e 61 6d 65 2f 42 27 24 7b 73 6e 61 6d 65 7d pname/B'${sname}
bde0: 27 3a 3a 24 66 6e 61 6d 65 22 0a 20 20 20 20 7d '::$fname". }
bdf0: 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d .. # result =
be00: 20 6c 69 73 74 20 28 6d 69 6e 74 69 6d 65 2c 20 list (mintime,
be10: 6d 61 78 74 69 6d 65 29 0a 20 20 20 20 74 79 70 maxtime). typ
be20: 65 6d 65 74 68 6f 64 20 74 69 6d 65 72 61 6e 67 emethod timerang
be30: 65 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b 0a 09 e {branches} {..
be40: 23 20 54 68 65 20 72 61 6e 67 65 20 6f 66 20 61 # The range of a
be50: 20 62 72 61 6e 63 68 20 69 73 20 64 65 66 69 6e branch is defin
be60: 65 64 20 61 73 20 74 68 65 20 72 61 6e 67 65 20 ed as the range
be70: 6f 66 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 of the..# revisi
be80: 6f 6e 73 20 74 68 65 20 62 72 61 6e 63 68 65 73 ons the branches
be90: 20 61 72 65 20 73 70 61 77 6e 65 64 20 62 79 2e are spawned by.
bea0: 20 4e 4f 54 45 20 68 6f 77 65 76 65 72 20 74 68 NOTE however th
beb0: 61 74 20 74 68 65 0a 09 23 20 62 72 61 6e 63 68 at the..# branch
bec0: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 es associated wi
bed0: 74 68 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 th a detached NT
bee0: 44 42 20 77 69 6c 6c 20 68 61 76 65 20 6e 6f 20 DB will have no
bef0: 72 6f 6f 74 0a 09 23 20 73 70 61 77 6e 69 6e 67 root..# spawning
bf00: 20 74 68 65 6d 2c 20 68 65 6e 63 65 20 74 68 65 them, hence the
bf10: 79 20 68 61 76 65 20 6e 6f 20 72 65 61 6c 20 74 y have no real t
bf20: 69 6d 65 72 61 6e 67 65 20 61 6e 79 0a 09 23 20 imerange any..#
bf30: 6c 6f 6e 67 65 72 2e 20 42 79 20 75 73 69 6e 67 longer. By using
bf40: 20 30 20 77 65 20 70 75 74 20 74 68 65 6d 20 69 0 we put them i
bf50: 6e 20 66 72 6f 6e 74 20 6f 66 20 65 76 65 72 79 n front of every
bf60: 74 68 69 6e 67 20 65 6c 73 65 2c 0a 09 23 20 61 thing else,..# a
bf70: 73 20 74 68 65 79 20 6c 6f 67 69 63 61 6c 6c 79 s they logically
bf80: 20 61 72 65 2e 0a 0a 09 73 65 74 20 74 68 65 73 are....set thes
bf90: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e et ('[join $bran
bfa0: 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 ches {','}]')..r
bfb0: 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e eturn [state run
bfc0: 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 [subst -nocomma
bfd0: 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 nds -nobackslash
bfe0: 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 es {.. SELECT
bff0: 20 49 46 4e 55 4c 4c 28 4d 49 4e 28 52 2e 64 61 IFNULL(MIN(R.da
c000: 74 65 29 2c 30 29 2c 20 49 46 4e 55 4c 4c 28 4d te),0), IFNULL(M
c010: 41 58 28 52 2e 64 61 74 65 29 2c 30 29 0a 09 20 AX(R.date),0)..
c020: 20 20 20 46 52 4f 4d 20 20 62 72 61 6e 63 68 20 FROM branch
c030: 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 B, revision R..
c040: 20 20 20 57 48 45 52 45 20 42 2e 62 69 64 20 49 WHERE B.bid I
c050: 4e 20 24 74 68 65 73 65 74 20 20 20 2d 2d 20 52 N $theset -- R
c060: 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 estrict to branc
c070: 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a hes of interest.
c080: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
c090: 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 6f 6f 74 R.rid = B.root
c0a0: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 62 -- Select b
c0b0: 72 61 6e 63 68 20 70 61 72 65 6e 74 20 72 65 76 ranch parent rev
c0c0: 69 73 69 6f 6e 73 0a 09 7d 5d 5d 0a 20 20 20 20 isions..}]].
c0d0: 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 }.. # result
c0e0: 3d 20 34 2d 6c 69 73 74 20 28 69 74 65 6d 74 79 = 4-list (itemty
c0f0: 70 65 20 69 74 65 6d 69 64 20 6e 65 78 74 69 74 pe itemid nextit
c100: 65 6d 74 79 70 65 20 6e 65 78 74 69 74 65 6d 69 emtype nextitemi
c110: 64 20 2e 2e 2e 29 0a 20 20 20 20 74 79 70 65 6d d ...). typem
c120: 65 74 68 6f 64 20 6c 6f 6f 70 73 20 7b 62 72 61 ethod loops {bra
c130: 6e 63 68 65 73 7d 20 7b 0a 09 23 20 4e 6f 74 65 nches} {..# Note
c140: 3a 20 52 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 : Revisions and
c150: 74 61 67 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 tags cannot caus
c160: 65 20 74 68 65 20 6c 6f 6f 70 2e 20 42 65 69 6e e the loop. Bein
c170: 67 20 6f 66 20 61 0a 09 23 20 66 75 6e 64 61 6d g of a..# fundam
c180: 65 6e 74 61 6c 6c 79 20 64 69 66 66 65 72 65 6e entally differen
c190: 74 20 74 79 70 65 20 74 68 65 79 20 63 61 6e 6e t type they cann
c1a0: 6f 74 20 62 65 20 69 6e 20 74 68 65 20 69 6e 63 ot be in the inc
c1b0: 6f 6d 69 6e 67 0a 09 23 20 73 65 74 20 6f 66 20 oming..# set of
c1c0: 69 64 73 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 ids....set these
c1d0: 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e 63 t ('[join $branc
c1e0: 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 hes {','}]')..re
c1f0: 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 turn [state run
c200: 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e [subst -nocomman
c210: 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 ds -nobackslashe
c220: 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 s {.. SELECT
c230: 42 2e 62 69 64 2c 20 42 58 2e 62 69 64 0a 09 20 B.bid, BX.bid..
c240: 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 FROM branch
c250: 20 42 2c 20 70 72 65 66 65 72 65 64 70 61 72 65 B, preferedpare
c260: 6e 74 20 50 2c 20 62 72 61 6e 63 68 20 42 58 0a nt P, branch BX.
c270: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 . WHERE B.bi
c280: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 2d d IN $theset -
c290: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 - Restrict to br
c2a0: 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 anches of intere
c2b0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 st.. AND B
c2c0: 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 20 .sid = P.pid
c2d0: 20 20 2d 2d 20 47 65 74 20 74 68 65 20 70 72 65 -- Get the pre
c2e0: 66 65 72 65 64 20 62 72 61 6e 63 68 65 73 20 76 fered branches v
c2f0: 69 61 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 ia.. AND B
c300: 58 2e 73 69 64 20 3d 20 50 2e 73 69 64 20 20 20 X.sid = P.sid
c310: 20 20 2d 2d 20 74 68 65 20 62 72 61 6e 63 68 20 -- the branch
c320: 73 79 6d 62 6f 6c 73 0a 09 20 20 20 20 41 4e 44 symbols.. AND
c330: 20 20 20 20 42 58 2e 62 69 64 20 49 4e 20 24 74 BX.bid IN $t
c340: 68 65 73 65 74 20 20 2d 2d 20 4c 6f 6f 70 0a 09 heset -- Loop..
c350: 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 }]]. }.. #
c360: 20 76 61 72 28 64 76 29 20 3d 20 64 69 63 74 20 var(dv) = dict
c370: 28 69 74 65 6d 20 2d 3e 20 6c 69 73 74 20 28 69 (item -> list (i
c380: 74 65 6d 29 29 2c 20 69 74 65 6d 20 20 3d 20 6c tem)), item = l
c390: 69 73 74 20 28 74 79 70 65 20 69 64 29 0a 20 20 ist (type id).
c3a0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 75 63 typemethod suc
c3b0: 63 65 73 73 6f 72 73 20 7b 64 76 20 62 72 61 6e cessors {dv bran
c3c0: 63 68 65 73 7d 20 7b 0a 09 75 70 76 61 72 20 31 ches} {..upvar 1
c3d0: 20 24 64 76 20 64 65 70 65 6e 64 65 6e 63 69 65 $dv dependencie
c3e0: 73 0a 09 23 20 54 68 65 20 66 69 72 73 74 20 72 s..# The first r
c3f0: 65 76 69 73 69 6f 6e 20 63 6f 6d 6d 69 74 74 65 evision committe
c400: 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20 61 d on a branch, a
c410: 6e 64 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 0a nd all branches.
c420: 09 23 20 61 6e 64 20 74 61 67 73 20 77 68 69 63 .# and tags whic
c430: 68 20 68 61 76 65 20 69 74 20 61 73 20 74 68 65 h have it as the
c440: 69 72 20 70 72 65 66 65 72 65 64 20 70 61 72 65 ir prefered pare
c450: 6e 74 20 61 72 65 20 74 68 65 0a 09 23 20 73 75 nt are the..# su
c460: 63 63 65 73 73 6f 72 73 20 6f 66 20 61 20 62 72 ccessors of a br
c470: 61 6e 63 68 2e 0a 0a 09 73 65 74 20 74 68 65 73 anch....set thes
c480: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e et ('[join $bran
c490: 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 66 ches {','}]')..f
c4a0: 6f 72 65 61 63 68 20 7b 62 69 64 20 63 68 69 6c oreach {bid chil
c4b0: 64 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 d} [state run [s
c4c0: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
c4d0: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
c4e0: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e {.. SELECT B.
c4f0: 62 69 64 2c 20 52 2e 72 69 64 0a 09 20 20 20 20 bid, R.rid..
c500: 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c FROM branch B,
c510: 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 revision R..
c520: 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e WHERE B.bid IN
c530: 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 $theset --
c540: 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e Restrict to bran
c550: 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 ches of interest
c560: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e 66 .. AND B.f
c570: 69 72 73 74 20 3d 20 52 2e 72 69 64 20 20 20 20 irst = R.rid
c580: 20 20 2d 2d 20 47 65 74 20 66 69 72 73 74 20 72 -- Get first r
c590: 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 62 evision on the b
c5a0: 72 61 6e 63 68 0a 09 7d 5d 5d 20 7b 0a 09 20 20 ranch..}]] {..
c5b0: 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 lappend depend
c5c0: 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 73 79 6d encies([list sym
c5d0: 3a 3a 62 72 61 6e 63 68 20 24 62 69 64 5d 29 20 ::branch $bid])
c5e0: 5b 6c 69 73 74 20 72 65 76 20 24 63 68 69 6c 64 [list rev $child
c5f0: 5d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 7b 62 ]..}..foreach {b
c600: 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 id child} [state
c610: 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 run [subst -noc
c620: 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 ommands -nobacks
c630: 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 lashes {.. SE
c640: 4c 45 43 54 20 42 2e 62 69 64 2c 20 42 58 2e 62 LECT B.bid, BX.b
c650: 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 id.. FROM b
c660: 72 61 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 ranch B, prefere
c670: 64 70 61 72 65 6e 74 20 50 2c 20 62 72 61 6e 63 dparent P, branc
c680: 68 20 42 58 0a 09 20 20 20 20 57 48 45 52 45 20 h BX.. WHERE
c690: 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 B.bid IN $these
c6a0: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
c6b0: 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 t to branches of
c6c0: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
c6d0: 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20 50 2e ND B.sid = P.
c6e0: 70 69 64 20 20 20 20 20 20 20 20 2d 2d 20 47 65 pid -- Ge
c6f0: 74 20 73 75 62 6f 72 64 69 6e 61 74 65 20 62 72 t subordinate br
c700: 61 6e 63 68 65 73 20 76 69 61 20 74 68 65 0a 09 anches via the..
c710: 20 20 20 20 41 4e 44 20 20 20 20 42 58 2e 73 69 AND BX.si
c720: 64 20 3d 20 50 2e 73 69 64 20 20 20 20 20 20 20 d = P.sid
c730: 2d 2d 20 70 72 65 66 65 72 65 64 20 70 61 72 65 -- prefered pare
c740: 6e 74 73 20 6f 66 20 74 68 65 69 72 20 73 79 6d nts of their sym
c750: 62 6f 6c 73 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 bols..}]] {..
c760: 20 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 lappend depende
c770: 6e 63 69 65 73 28 5b 6c 69 73 74 20 73 79 6d 3a ncies([list sym:
c780: 3a 62 72 61 6e 63 68 20 24 62 69 64 5d 29 20 5b :branch $bid]) [
c790: 6c 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 list sym::branch
c7a0: 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 6f 72 $child]..}..for
c7b0: 65 61 63 68 20 7b 62 69 64 20 63 68 69 6c 64 7d each {bid child}
c7c0: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
c7d0: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
c7e0: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
c7f0: 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e 62 69 . SELECT B.bi
c800: 64 2c 20 54 2e 74 69 64 0a 09 20 20 20 20 46 52 d, T.tid.. FR
c810: 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 70 OM branch B, p
c820: 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 50 2c referedparent P,
c830: 20 74 61 67 20 54 0a 09 20 20 20 20 57 48 45 52 tag T.. WHER
c840: 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 E B.bid IN $the
c850: 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 set -- Restr
c860: 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 ict to branches
c870: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
c880: 20 41 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20 AND B.sid =
c890: 50 2e 70 69 64 20 20 20 20 20 20 20 20 2d 2d 20 P.pid --
c8a0: 47 65 74 20 73 75 62 6f 72 64 69 6e 61 74 65 20 Get subordinate
c8b0: 74 61 67 73 20 76 69 61 20 74 68 65 0a 09 20 20 tags via the..
c8c0: 20 20 41 4e 44 20 20 20 20 54 2e 73 69 64 20 3d AND T.sid =
c8d0: 20 50 2e 73 69 64 20 20 20 20 20 20 20 20 2d 2d P.sid --
c8e0: 20 70 72 65 66 65 72 65 64 20 70 61 72 65 6e 74 prefered parent
c8f0: 73 20 6f 66 20 74 68 65 69 72 20 73 79 6d 62 6f s of their symbo
c900: 6c 73 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c ls..}]] {.. l
c910: 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 append dependenc
c920: 69 65 73 28 5b 6c 69 73 74 20 73 79 6d 3a 3a 62 ies([list sym::b
c930: 72 61 6e 63 68 20 24 62 69 64 5d 29 20 5b 6c 69 ranch $bid]) [li
c940: 73 74 20 73 79 6d 3a 3a 74 61 67 20 24 63 68 69 st sym::tag $chi
c950: 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 ld]..}..return.
c960: 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 }.. # resu
c970: 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e 67 lt = list (chang
c980: 65 73 65 74 2d 69 64 29 0a 20 20 20 20 74 79 70 eset-id). typ
c990: 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 63 65 emethod cs_succe
c9a0: 73 73 6f 72 73 20 7b 62 72 61 6e 63 68 65 73 7d ssors {branches}
c9b0: 20 7b 0a 20 20 20 20 20 20 20 20 23 20 54 68 69 {. # Thi
c9c0: 73 20 69 73 20 61 20 76 61 72 69 61 6e 74 20 6f s is a variant o
c9d0: 66 20 27 73 75 63 63 65 73 73 6f 72 73 27 20 77 f 'successors' w
c9e0: 68 69 63 68 20 6d 61 70 73 20 74 68 65 20 6c 6f hich maps the lo
c9f0: 77 2d 6c 65 76 65 6c 0a 20 20 20 20 20 20 20 20 w-level.
ca00: 23 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 20 # data directly
ca10: 74 6f 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 to the associate
ca20: 64 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49 2e d changesets. I.
ca30: 65 2e 20 69 6e 73 74 65 61 64 0a 20 20 20 20 20 e. instead.
ca40: 20 20 20 23 20 6d 69 6c 6c 69 6f 6e 73 20 6f 66 # millions of
ca50: 20 64 65 70 65 6e 64 65 6e 63 79 20 70 61 69 72 dependency pair
ca60: 73 20 28 69 6e 20 65 78 74 72 65 6d 65 20 63 61 s (in extreme ca
ca70: 73 65 73 20 28 45 78 61 6d 70 6c 65 3a 20 54 63 ses (Example: Tc
ca80: 6c 0a 20 20 20 20 20 20 20 20 23 20 43 56 53 29 l. # CVS)
ca90: 29 20 77 65 20 72 65 74 75 72 6e 20 61 20 76 65 ) we return a ve
caa0: 72 79 20 73 68 6f 72 74 20 61 6e 64 20 6d 75 63 ry short and muc
cab0: 68 20 6d 6f 72 65 20 6d 61 6e 61 67 65 61 62 6c h more manageabl
cac0: 65 20 6c 69 73 74 0a 20 20 20 20 20 20 20 20 23 e list. #
cad0: 20 6f 66 20 63 68 61 6e 67 65 73 65 74 73 2e 0a of changesets..
cae0: 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b ..set theset ('[
caf0: 6a 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b join $branches {
cb00: 27 2c 27 7d 5d 27 29 0a 20 20 20 20 20 20 20 20 ','}]').
cb10: 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 return [state ru
cb20: 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d n [subst -nocomm
cb30: 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 ands -nobackslas
cb40: 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 hes {.. SELEC
cb50: 54 20 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f T C.cid.. FRO
cb60: 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 72 65 M branch B, re
cb70: 76 69 73 69 6f 6e 20 52 2c 20 63 73 69 74 65 6d vision R, csitem
cb80: 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 CI, changeset C
cb90: 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 .. WHERE B.b
cba0: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 id IN $theset
cbb0: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
cbc0: 20 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 branches of int
cbd0: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
cbe0: 20 20 42 2e 66 69 72 73 74 20 3d 20 52 2e 72 69 B.first = R.ri
cbf0: 64 09 2d 2d 20 47 65 74 20 66 69 72 73 74 20 72 d.-- Get first r
cc00: 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 62 evision on the b
cc10: 72 61 6e 63 68 0a 20 20 20 20 20 20 20 20 20 20 ranch.
cc20: 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 AND CI.iid
cc30: 3d 20 52 2e 72 69 64 20 20 20 20 20 20 20 2d 2d = R.rid --
cc40: 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e Select all chan
cc50: 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 gesets.
cc60: 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 AND C.cid
cc70: 3d 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e 74 = CI.cid.-- cont
cc80: 61 69 6e 69 6e 67 20 74 68 69 73 20 72 65 76 69 aining this revi
cc90: 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 sion.
cca0: 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d AND C.type =
ccb0: 20 30 09 09 2d 2d 20 77 68 69 63 68 20 61 72 65 0..-- which are
ccc0: 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 revision change
ccd0: 73 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 09 sets. UNION..
cce0: 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 SELECT C.cid
ccf0: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 .. FROM bra
cd00: 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 64 70 nch B, preferedp
cd10: 61 72 65 6e 74 20 50 2c 20 62 72 61 6e 63 68 20 arent P, branch
cd20: 42 58 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 BX, csitem CI, c
cd30: 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 hangeset C..
cd40: 57 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 WHERE B.bid IN
cd50: 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 $theset -- R
cd60: 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 estrict to branc
cd70: 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a hes of interest.
cd80: 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e 73 69 . AND B.si
cd90: 64 20 3d 20 50 2e 70 69 64 09 2d 2d 20 47 65 74 d = P.pid.-- Get
cda0: 20 73 75 62 6f 72 64 69 6e 61 74 65 20 62 72 61 subordinate bra
cdb0: 6e 63 68 65 73 20 76 69 61 20 74 68 65 0a 09 20 nches via the..
cdc0: 20 20 20 41 4e 44 20 20 20 20 42 58 2e 73 69 64 AND BX.sid
cdd0: 20 3d 20 50 2e 73 69 64 09 2d 2d 20 70 72 65 66 = P.sid.-- pref
cde0: 65 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20 ered parents of
cdf0: 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 20 20 their symbols.
ce00: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
ce10: 20 43 49 2e 69 69 64 20 3d 20 42 58 2e 62 69 64 CI.iid = BX.bid
ce20: 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 -- Select
ce30: 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 all changesets.
ce40: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
ce50: 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 C.cid = CI.cid
ce60: 09 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 .-- containing t
ce70: 68 65 20 73 75 62 6f 72 64 69 6e 61 74 65 20 62 he subordinate b
ce80: 72 61 6e 63 68 65 73 0a 20 20 20 20 20 20 20 20 ranches.
ce90: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 AND C.typ
cea0: 65 20 3d 20 32 09 09 2d 2d 20 77 68 69 63 68 20 e = 2..-- which
ceb0: 61 72 65 20 62 72 61 6e 63 68 20 63 68 61 6e 67 are branch chang
cec0: 65 73 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a esets. UNION.
ced0: 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 . SELECT C.ci
cee0: 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 d.. FROM br
cef0: 61 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 64 anch B, prefered
cf00: 70 61 72 65 6e 74 20 50 2c 20 74 61 67 20 54 2c parent P, tag T,
cf10: 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e csitem CI, chan
cf20: 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 45 geset C.. WHE
cf30: 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 RE B.bid IN $th
cf40: 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 eset -- Rest
cf50: 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 rict to branches
cf60: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
cf70: 20 20 41 4e 44 20 20 20 20 42 2e 73 69 64 20 3d AND B.sid =
cf80: 20 50 2e 70 69 64 09 2d 2d 20 47 65 74 20 73 75 P.pid.-- Get su
cf90: 62 6f 72 64 69 6e 61 74 65 20 74 61 67 73 20 76 bordinate tags v
cfa0: 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 ia the.. AND
cfb0: 20 20 20 54 2e 73 69 64 20 3d 20 50 2e 73 69 64 T.sid = P.sid
cfc0: 09 2d 2d 20 70 72 65 66 65 72 65 64 20 70 61 72 .-- prefered par
cfd0: 65 6e 74 73 20 6f 66 20 74 68 65 69 72 20 73 79 ents of their sy
cfe0: 6d 62 6f 6c 73 0a 20 20 20 20 20 20 20 20 20 20 mbols.
cff0: 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 AND CI.iid
d000: 3d 20 54 2e 74 69 64 20 20 20 20 20 20 20 2d 2d = T.tid --
d010: 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e Select all chan
d020: 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 gesets.
d030: 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 AND C.cid
d040: 3d 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e 74 = CI.cid.-- cont
d050: 61 69 6e 69 6e 67 20 74 68 65 20 73 75 62 6f 72 aining the subor
d060: 64 69 6e 61 74 65 20 74 61 67 73 0a 20 20 20 20 dinate tags.
d070: 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 AND C
d080: 2e 74 79 70 65 20 3d 20 31 09 09 2d 2d 20 77 68 .type = 1..-- wh
d090: 69 63 68 20 61 72 65 20 74 61 67 20 63 68 61 6e ich are tag chan
d0a0: 67 65 73 65 74 73 0a 09 7d 5d 5d 0a 09 72 65 74 gesets..}]]..ret
d0b0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 urn. }.. #
d0c0: 20 72 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f 6c result = symbol
d0d0: 20 6e 61 6d 65 0a 20 20 20 20 74 79 70 65 6d 65 name. typeme
d0e0: 74 68 6f 64 20 63 73 5f 6c 6f 64 20 7b 62 72 61 thod cs_lod {bra
d0f0: 6e 63 68 65 73 7d 20 7b 0a 09 23 20 44 65 74 65 nches} {..# Dete
d100: 72 6d 69 6e 65 73 20 74 68 65 20 6e 61 6d 65 20 rmines the name
d110: 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 77 68 of the symbol wh
d120: 69 63 68 20 69 73 20 74 68 65 20 6c 69 6e 65 20 ich is the line
d130: 6f 66 0a 09 23 20 64 65 76 65 6c 6f 70 6d 65 6e of..# developmen
d140: 74 20 66 6f 72 20 74 68 65 20 62 72 61 6e 63 68 t for the branch
d150: 65 73 20 69 6e 20 61 20 63 68 61 6e 67 65 73 65 es in a changese
d160: 74 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 t....set theset
d170: 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e 63 68 65 ('[join $branche
d180: 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 s {','}]')..retu
d190: 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 rn [state run [s
d1a0: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
d1b0: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
d1c0: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 0a 09 20 {.. SELECT..
d1d0: 20 20 20 44 49 53 54 49 4e 43 54 20 4c 2e 6e 61 DISTINCT L.na
d1e0: 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 me.. FROM b
d1f0: 72 61 6e 63 68 20 42 2c 20 73 79 6d 62 6f 6c 20 ranch B, symbol
d200: 4c 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 2e L.. WHERE B.
d210: 62 69 64 20 69 6e 20 24 74 68 65 73 65 74 20 20 bid in $theset
d220: 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 -- Restric
d230: 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 t to branches of
d240: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
d250: 4e 44 20 20 20 20 4c 2e 73 69 64 20 3d 20 42 2e ND L.sid = B.
d260: 6c 6f 64 20 20 20 20 20 20 20 20 20 20 20 2d 2d lod --
d270: 20 47 65 74 20 6c 6f 64 20 73 79 6d 62 6f 6c 20 Get lod symbol
d280: 6f 66 20 62 72 61 6e 63 68 0a 09 7d 5d 5d 0a 20 of branch..}]].
d290: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 }.. typeme
d2a0: 74 68 6f 64 20 6c 69 6d 69 74 73 20 7b 62 72 61 thod limits {bra
d2b0: 6e 63 68 65 73 7d 20 7b 0a 09 23 20 4e 6f 74 65 nches} {..# Note
d2c0: 73 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20 65 s. This method e
d2d0: 78 69 73 74 73 20 6f 6e 6c 79 20 66 6f 72 20 62 xists only for b
d2e0: 72 61 6e 63 68 65 73 2e 20 49 74 20 69 73 20 6e ranches. It is n
d2f0: 65 65 64 65 64 20 74 6f 0a 09 23 20 67 65 74 20 eeded to..# get
d300: 64 65 74 61 69 6c 65 64 20 69 6e 66 6f 72 6d 61 detailed informa
d310: 74 69 6f 6e 20 61 62 6f 75 74 20 61 20 62 61 63 tion about a bac
d320: 6b 77 61 72 64 20 62 72 61 6e 63 68 2e 20 49 74 kward branch. It
d330: 20 64 6f 65 73 0a 09 23 20 6e 6f 74 20 61 70 70 does..# not app
d340: 6c 79 20 74 6f 20 74 61 67 73 2c 20 6e 6f 72 20 ly to tags, nor
d350: 72 65 76 69 73 69 6f 6e 73 2e 20 54 68 65 20 71 revisions. The q
d360: 75 65 72 69 65 73 20 63 61 6e 20 61 6c 73 6f 0a ueries can also.
d370: 09 23 20 72 65 73 74 72 69 63 74 20 74 68 65 6d .# restrict them
d380: 73 65 6c 76 65 73 20 74 6f 20 74 68 65 20 72 65 selves to the re
d390: 76 69 73 69 6f 6e 20 73 75 63 65 73 73 6f 72 73 vision sucessors
d3a0: 2f 70 72 65 64 65 63 65 73 73 6f 72 73 0a 09 23 /predecessors..#
d3b0: 20 6f 66 20 62 72 61 6e 63 68 65 73 2c 20 61 73 of branches, as
d3c0: 20 6f 6e 6c 79 20 74 68 65 79 20 68 61 76 65 20 only they have
d3d0: 6f 72 64 65 72 69 6e 67 20 64 61 74 61 20 61 6e ordering data an
d3e0: 64 20 74 68 75 73 20 63 61 6e 0a 09 23 20 63 61 d thus can..# ca
d3f0: 75 73 65 20 74 68 65 20 62 61 63 6b 77 61 72 64 use the backward
d400: 6e 65 73 73 2e 0a 0a 09 73 65 74 20 74 68 65 73 ness....set thes
d410: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e et ('[join $bran
d420: 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 0a 09 ches {','}]')...
d430: 73 65 74 20 6d 61 78 70 20 5b 73 74 61 74 65 20 set maxp [state
d440: 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f run [subst -noco
d450: 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c mmands -nobacksl
d460: 61 73 68 65 73 20 7b 0a 09 20 20 20 20 2d 2d 20 ashes {.. --
d470: 6d 61 78 69 6d 61 6c 20 70 72 65 64 65 63 65 73 maximal predeces
d480: 73 6f 72 20 70 6f 73 69 74 69 6f 6e 20 70 65 72 sor position per
d490: 20 62 72 61 6e 63 68 0a 09 20 20 20 20 53 45 4c branch.. SEL
d4a0: 45 43 54 20 42 2e 62 69 64 2c 20 4d 41 58 20 28 ECT B.bid, MAX (
d4b0: 43 4f 2e 70 6f 73 29 0a 09 20 20 20 20 46 52 4f CO.pos).. FRO
d4c0: 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 72 65 M branch B, re
d4d0: 76 69 73 69 6f 6e 20 52 2c 20 63 73 69 74 65 6d vision R, csitem
d4e0: 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 CI, changeset C
d4f0: 2c 20 63 73 6f 72 64 65 72 20 43 4f 0a 09 20 20 , csorder CO..
d500: 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 49 WHERE B.bid I
d510: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
d520: 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 Restrict to bra
d530: 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 nches of interes
d540: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e t.. AND B.
d550: 72 6f 6f 74 20 3d 20 52 2e 72 69 64 20 20 20 20 root = R.rid
d560: 20 20 20 2d 2d 20 47 65 74 20 62 72 61 6e 63 68 -- Get branch
d570: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 0a root revisions.
d580: 09 20 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 . AND CI.i
d590: 69 64 20 3d 20 52 2e 72 69 64 20 20 20 20 20 20 id = R.rid
d5a0: 20 2d 2d 20 47 65 74 20 63 68 61 6e 67 65 73 65 -- Get changese
d5b0: 74 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 ts containing th
d5c0: 65 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 2e e.. AND C.
d5d0: 63 69 64 20 3d 20 43 49 2e 63 69 64 20 20 20 20 cid = CI.cid
d5e0: 20 20 20 2d 2d 20 72 6f 6f 74 20 72 65 76 69 73 -- root revis
d5f0: 69 6f 6e 73 2c 20 77 68 69 63 68 20 61 72 65 0a ions, which are.
d600: 09 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 . AND C.ty
d610: 70 65 20 3d 20 30 20 20 20 20 20 20 20 20 20 20 pe = 0
d620: 20 2d 2d 20 72 65 76 69 73 69 6f 6e 20 63 68 61 -- revision cha
d630: 6e 67 65 73 65 74 73 0a 09 20 20 20 20 41 4e 44 ngesets.. AND
d640: 20 20 20 20 43 4f 2e 63 69 64 20 3d 20 43 2e 63 CO.cid = C.c
d650: 69 64 20 20 20 20 20 20 20 2d 2d 20 47 65 74 20 id -- Get
d660: 74 68 65 69 72 20 74 6f 70 6f 6c 6f 67 69 63 61 their topologica
d670: 6c 20 6f 72 64 65 72 69 6e 67 0a 09 20 20 20 20 l ordering..
d680: 47 52 4f 55 50 20 42 59 20 42 2e 62 69 64 0a 09 GROUP BY B.bid..
d690: 7d 5d 5d 0a 0a 09 73 65 74 20 6d 69 6e 73 20 5b }]]...set mins [
d6a0: 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 state run [subst
d6b0: 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f -nocommands -no
d6c0: 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 backslashes {..
d6d0: 20 20 20 2d 2d 20 6d 69 6e 69 6d 61 6c 20 73 75 -- minimal su
d6e0: 63 63 65 73 73 6f 72 20 70 6f 73 69 74 69 6f 6e ccessor position
d6f0: 20 70 65 72 20 62 72 61 6e 63 68 0a 09 20 20 20 per branch..
d700: 20 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 4d SELECT B.bid, M
d710: 49 4e 20 28 43 4f 2e 70 6f 73 29 0a 09 20 20 20 IN (CO.pos)..
d720: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 FROM branch B
d730: 2c 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 63 73 , revision R, cs
d740: 69 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 item CI, changes
d750: 65 74 20 43 2c 20 63 73 6f 72 64 65 72 20 43 4f et C, csorder CO
d760: 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 .. WHERE B.b
d770: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 id IN $theset
d780: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
d790: 20 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 branches of int
d7a0: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
d7b0: 20 20 42 2e 66 69 72 73 74 20 3d 20 52 2e 72 69 B.first = R.ri
d7c0: 64 20 20 20 20 20 20 2d 2d 20 47 65 74 20 74 68 d -- Get th
d7d0: 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e e first revision
d7e0: 73 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 65 s on the branche
d7f0: 73 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 49 s.. AND CI
d800: 2e 69 69 64 20 3d 20 52 2e 72 69 64 20 20 20 20 .iid = R.rid
d810: 20 20 20 2d 2d 20 47 65 74 20 63 68 61 6e 67 65 -- Get change
d820: 73 65 74 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 sets containing
d830: 74 68 65 0a 09 20 20 20 20 41 4e 44 20 20 20 20 the.. AND
d840: 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 09 2d C.cid = CI.cid.-
d850: 2d 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e - first revision
d860: 73 2c 20 77 68 69 63 68 20 61 72 65 0a 09 20 20 s, which are..
d870: 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 AND C.type
d880: 3d 20 30 09 09 2d 2d 20 72 65 76 69 73 69 6f 6e = 0..-- revision
d890: 20 63 68 61 6e 67 65 73 65 74 73 0a 09 20 20 20 changesets..
d8a0: 20 41 4e 44 20 20 20 20 43 4f 2e 63 69 64 20 3d AND CO.cid =
d8b0: 20 43 2e 63 69 64 09 2d 2d 20 47 65 74 20 74 68 C.cid.-- Get th
d8c0: 65 69 72 20 74 6f 70 6f 6c 6f 67 69 63 61 6c 20 eir topological
d8d0: 6f 72 64 65 72 69 6e 67 0a 09 20 20 20 20 47 52 ordering.. GR
d8e0: 4f 55 50 20 42 59 20 42 2e 62 69 64 0a 09 7d 5d OUP BY B.bid..}]
d8f0: 5d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ].. retur
d900: 6e 20 5b 6c 69 73 74 20 24 6d 61 78 70 20 24 6d n [list $maxp $m
d910: 69 6e 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ins]. }..
d920: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
d930: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
d940: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 #######. ## C
d950: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 onfiguration..
d960: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 73 pragma -hasins
d970: 74 61 6e 63 65 73 20 20 20 6e 6f 20 3b 20 23 20 tances no ; #
d980: 73 69 6e 67 6c 65 74 6f 6e 0a 20 20 20 20 70 72 singleton. pr
d990: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69 6e 66 agma -hastypeinf
d9a0: 6f 20 20 20 20 6e 6f 20 3b 20 23 20 6e 6f 20 69 o no ; # no i
d9b0: 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 ntrospection.
d9c0: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 pragma -hastype
d9d0: 64 65 73 74 72 6f 79 20 6e 6f 20 3b 20 23 20 69 destroy no ; # i
d9e0: 6d 6d 6f 72 74 61 6c 0a 7d 0a 0a 23 20 23 20 23 mmortal.}..# # #
d9f0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
da00: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
da10: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
da20: 23 23 23 23 23 23 23 23 0a 23 23 0a 0a 6e 61 6d ########.##..nam
da30: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 espace eval ::vc
da40: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
da50: 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 20 7b ::cvs::project {
da60: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 . namespace e
da70: 78 70 6f 72 74 20 72 65 76 0a 20 20 20 20 6e 61 xport rev. na
da80: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 72 65 76 mespace eval rev
da90: 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d {..namespace im
daa0: 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 port ::vc::fossi
dab0: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
dac0: 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65 state..namespace
dad0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
dae0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
daf0: 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 6e 61 s::integrity..na
db00: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
db10: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 :vc::tools::misc
db20: 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 ::*..namespace i
db30: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c mport ::vc::tool
db40: 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d 65 s::trouble..name
db50: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
db60: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6c c::tools::log..l
db70: 6f 67 20 72 65 67 69 73 74 65 72 20 63 73 65 74 og register cset
db80: 73 0a 0a 09 23 20 53 65 74 20 75 70 20 74 68 65 s...# Set up the
db90: 20 68 65 6c 70 65 72 20 73 69 6e 67 6c 65 74 6f helper singleto
dba0: 6e 73 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76 ns..namespace ev
dbb0: 61 6c 20 72 65 76 20 7b 0a 09 20 20 20 20 6e 61 al rev {.. na
dbc0: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
dbd0: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
dbe0: 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a ort::cvs::state.
dbf0: 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 . namespace i
dc00: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 mport ::vc::foss
dc10: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
dc20: 3a 69 6e 74 65 67 72 69 74 79 0a 09 20 20 20 20 :integrity..
dc30: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
dc40: 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f ::vc::tools::lo
dc50: 67 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 g..}..namespace
dc60: 65 76 61 6c 20 73 79 6d 3a 3a 74 61 67 20 7b 0a eval sym::tag {.
dc70: 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 . namespace i
dc80: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 mport ::vc::foss
dc90: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
dca0: 3a 73 74 61 74 65 0a 09 20 20 20 20 6e 61 6d 65 :state.. name
dcb0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
dcc0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
dcd0: 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 t::cvs::integrit
dce0: 79 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 y.. namespace
dcf0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f import ::vc::to
dd00: 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a 09 6e 61 6d ols::log..}..nam
dd10: 65 73 70 61 63 65 20 65 76 61 6c 20 73 79 6d 3a espace eval sym:
dd20: 3a 62 72 61 6e 63 68 20 7b 0a 09 20 20 20 20 6e :branch {.. n
dd30: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
dd40: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
dd50: 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 port::cvs::state
dd60: 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 .. namespace
dd70: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 import ::vc::fos
dd80: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
dd90: 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 20 20 20 ::integrity..
dda0: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 namespace impor
ddb0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c t ::vc::tools::l
ddc0: 6f 67 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 og..}. }.}..#
ddd0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
dde0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
ddf0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
de00: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 ############.##
de10: 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 Ready..package p
de20: 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 rovide vc::fossi
de30: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
de40: 70 72 6f 6a 65 63 74 3a 3a 72 65 76 20 31 2e 30 project::rev 1.0
de50: 0a 72 65 74 75 72 6e 0a .return.