0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23 ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 ############.##
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 Copyright (c) 20
0060: 30 37 2d 32 30 30 38 20 41 6e 64 72 65 61 73 20 07-2008 Andreas
0070: 4b 75 70 72 69 65 73 2e 0a 23 0a 23 20 54 68 69 Kupries..#.# Thi
0080: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6c 69 s software is li
0090: 63 65 6e 73 65 64 20 61 73 20 64 65 73 63 72 69 censed as descri
00a0: 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20 bed in the file
00b0: 4c 49 43 45 4e 53 45 2c 20 77 68 69 63 68 0a 23 LICENSE, which.#
00c0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 you should have
00d0: 20 72 65 63 65 69 76 65 64 20 61 73 20 70 61 72 received as par
00e0: 74 20 6f 66 20 74 68 69 73 20 64 69 73 74 72 69 t of this distri
00f0: 62 75 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73 bution..#.# This
0100: 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 73 69 73 software consis
0110: 74 73 20 6f 66 20 76 6f 6c 75 6e 74 61 72 79 20 ts of voluntary
0120: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 6d 61 contributions ma
0130: 64 65 20 62 79 20 6d 61 6e 79 0a 23 20 69 6e 64 de by many.# ind
0140: 69 76 69 64 75 61 6c 73 2e 20 20 46 6f 72 20 65 ividuals. For e
0150: 78 61 63 74 20 63 6f 6e 74 72 69 62 75 74 69 6f xact contributio
0160: 6e 20 68 69 73 74 6f 72 79 2c 20 73 65 65 20 74 n history, see t
0170: 68 65 20 72 65 76 69 73 69 6f 6e 0a 23 20 68 69 he revision.# hi
0180: 73 74 6f 72 79 20 61 6e 64 20 6c 6f 67 73 2c 20 story and logs,
0190: 61 76 61 69 6c 61 62 6c 65 20 61 74 20 68 74 74 available at htt
01a0: 70 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 68 p://fossil-scm.h
01b0: 77 61 63 69 2e 63 6f 6d 2f 66 6f 73 73 69 6c 0a waci.com/fossil.
01c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
01d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
01e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 #############..#
0200: 23 20 52 65 76 69 73 69 6f 6e 73 20 70 65 72 20 # Revisions per
0210: 70 72 6f 6a 65 63 74 2c 20 61 6b 61 20 43 68 61 project, aka Cha
0220: 6e 67 65 73 65 74 73 2e 20 54 68 65 73 65 20 6f ngesets. These o
0230: 62 6a 65 63 74 73 20 61 72 65 20 66 69 72 73 74 bjects are first
0240: 20 75 73 65 64 0a 23 23 20 69 6e 20 70 61 73 73 used.## in pass
0250: 20 35 2c 20 77 68 69 63 68 20 63 72 65 61 74 65 5, which create
0260: 73 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73 65 s the initial se
0270: 74 20 63 6f 76 65 72 69 6e 67 20 74 68 65 20 72 t covering the r
0280: 65 70 6f 73 69 74 6f 72 79 2e 0a 0a 23 20 23 20 epository...# #
0290: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
02a0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
02b0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
02c0: 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 71 #########.## Req
02d0: 75 69 72 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 uirements..packa
02e0: 67 65 20 72 65 71 75 69 72 65 20 54 63 6c 20 38 ge require Tcl 8
02f0: 2e 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .4
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0310: 20 3b 20 23 20 52 65 71 75 69 72 65 64 20 72 75 ; # Required ru
0320: 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 67 65 20 72 ntime..package r
0330: 65 71 75 69 72 65 20 73 6e 69 74 20 20 20 20 20 equire snit
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; #
0360: 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b OO system..pack
0370: 61 67 65 20 72 65 71 75 69 72 65 20 73 74 72 75 age require stru
0380: 63 74 3a 3a 73 65 74 20 20 20 20 20 20 20 20 20 ct::set
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03a0: 20 20 3b 20 23 20 53 65 74 20 6f 70 65 72 61 74 ; # Set operat
03b0: 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 ions..package re
03c0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a quire vc::tools:
03d0: 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20 20 20 :misc
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 ; #
03f0: 54 65 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a Text formatting.
0400: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
0410: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 vc::tools::troub
0420: 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 le
0430: 20 20 20 20 20 20 3b 20 23 20 45 72 72 6f 72 20 ; # Error
0440: 72 65 70 6f 72 74 69 6e 67 2e 0a 70 61 63 6b 61 reporting..packa
0450: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74 ge require vc::t
0460: 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20 20 20 20 20 ools::log
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0480: 20 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 61 ; # User feedba
0490: 63 6b 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 ck..package requ
04a0: 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a ire vc::fossil::
04b0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 import::cvs::sta
04c0: 74 65 20 20 20 20 20 20 20 20 3b 20 23 20 53 74 te ; # St
04d0: 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 ate storage..pac
04e0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a kage require vc:
04f0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
0500: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 20 :cvs::integrity
0510: 20 20 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74 ; # State int
0520: 65 67 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 0a egrity checks...
0530: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
0540: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
0550: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
0560: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 #############.##
0570: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 ..snit::type ::v
0580: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
0590: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a t::cvs::project:
05a0: 3a 72 65 76 20 7b 0a 20 20 20 20 23 20 23 20 23 :rev {. # # #
05b0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
05c0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
05d0: 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63 ##. ## Public
05e0: 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72 API.. constr
05f0: 75 63 74 6f 72 20 7b 70 72 6f 6a 65 63 74 20 63 uctor {project c
0600: 73 74 79 70 65 20 73 72 63 69 64 20 69 74 65 6d stype srcid item
0610: 73 20 7b 74 68 65 69 64 20 7b 7d 7d 7d 20 7b 0a s {theid {}}} {.
0620: 09 69 66 20 7b 24 74 68 65 69 64 20 6e 65 20 22 .if {$theid ne "
0630: 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 "} {.. set my
0640: 69 64 20 24 74 68 65 69 64 0a 09 7d 20 65 6c 73 id $theid..} els
0650: 65 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 e {.. set myi
0660: 64 20 5b 69 6e 63 72 20 6d 79 63 6f 75 6e 74 65 d [incr mycounte
0670: 72 5d 0a 09 7d 0a 0a 09 69 6e 74 65 67 72 69 74 r]..}...integrit
0680: 79 20 61 73 73 65 72 74 20 7b 0a 09 20 20 20 20 y assert {..
0690: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 63 [info exists myc
06a0: 73 74 79 70 65 28 24 63 73 74 79 70 65 29 5d 0a stype($cstype)].
06b0: 09 7d 20 7b 42 61 64 20 63 68 61 6e 67 65 73 65 .} {Bad changese
06c0: 74 20 74 79 70 65 20 27 24 63 73 74 79 70 65 27 t type '$cstype'
06d0: 2e 7d 0a 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 .}...set myproje
06e0: 63 74 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73 ct $project..s
06f0: 65 74 20 6d 79 74 79 70 65 20 20 20 20 20 20 24 et mytype $
0700: 63 73 74 79 70 65 0a 09 73 65 74 20 6d 79 74 79 cstype..set myty
0710: 70 65 6f 62 6a 20 20 20 3a 3a 76 63 3a 3a 66 6f peobj ::vc::fo
0720: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
0730: 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 3a s::project::rev:
0740: 3a 24 7b 63 73 74 79 70 65 7d 0a 09 73 65 74 20 :${cstype}..set
0750: 6d 79 73 72 63 69 64 09 24 73 72 63 69 64 0a 09 mysrcid.$srcid..
0760: 73 65 74 20 6d 79 69 74 65 6d 73 20 20 20 20 20 set myitems
0770: 24 69 74 65 6d 73 0a 09 73 65 74 20 6d 79 70 6f $items..set mypo
0780: 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 43 s {} ; # C
0790: 6f 6d 6d 69 74 20 6c 6f 63 61 74 69 6f 6e 20 69 ommit location i
07a0: 73 20 6e 6f 74 20 6b 6e 6f 77 6e 20 79 65 74 2e s not known yet.
07b0: 0a 0a 09 23 20 4b 65 65 70 20 74 72 61 63 6b 20 ...# Keep track
07c0: 6f 66 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 of the generated
07d0: 20 63 68 61 6e 67 65 73 65 74 73 20 61 6e 64 20 changesets and
07e0: 6f 66 20 74 68 65 20 69 6e 76 65 72 73 65 0a 09 of the inverse..
07f0: 23 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 69 # mapping from i
0800: 74 65 6d 73 20 74 6f 20 74 68 65 6d 2e 0a 09 6c tems to them...l
0810: 61 70 70 65 6e 64 20 6d 79 63 68 61 6e 67 65 73 append mychanges
0820: 65 74 73 20 20 20 24 73 65 6c 66 0a 09 6c 61 70 ets $self..lap
0830: 70 65 6e 64 20 6d 79 74 63 68 61 6e 67 65 73 65 pend mytchangese
0840: 74 73 28 24 63 73 74 79 70 65 29 20 24 73 65 6c ts($cstype) $sel
0850: 66 0a 09 73 65 74 20 20 20 20 20 6d 79 69 64 6d f..set myidm
0860: 61 70 28 24 6d 79 69 64 29 20 24 73 65 6c 66 0a ap($myid) $self.
0870: 09 66 6f 72 65 61 63 68 20 69 69 64 20 24 69 74 .foreach iid $it
0880: 65 6d 73 20 7b 0a 09 20 20 20 20 73 65 74 20 6b ems {.. set k
0890: 65 79 20 5b 6c 69 73 74 20 24 63 73 74 79 70 65 ey [list $cstype
08a0: 20 24 69 69 64 5d 0a 09 20 20 20 20 73 65 74 20 $iid].. set
08b0: 6d 79 69 74 65 6d 6d 61 70 28 24 6b 65 79 29 20 myitemmap($key)
08c0: 24 73 65 6c 66 0a 09 20 20 20 20 6c 61 70 70 65 $self.. lappe
08d0: 6e 64 20 6d 79 74 69 74 65 6d 73 20 24 6b 65 79 nd mytitems $key
08e0: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
08f0: 38 20 63 73 65 74 73 20 7b 4d 41 50 2b 20 69 74 8 csets {MAP+ it
0900: 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 6c 66 20 em <$key> $self
0910: 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d 0a 09 = [$self str]}..
0920: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
0930: 0a 20 20 20 20 64 65 73 74 72 75 63 74 6f 72 20 . destructor
0940: 7b 0a 09 23 20 54 68 65 20 6d 61 69 6e 20 74 68 {..# The main th
0950: 69 6e 67 20 69 73 20 74 6f 20 6b 65 65 70 20 74 ing is to keep t
0960: 72 61 63 6b 20 6f 66 20 74 68 65 20 69 74 65 6d rack of the item
0970: 6d 61 70 20 61 6e 64 20 72 65 6d 6f 76 65 0a 09 map and remove..
0980: 23 20 74 68 65 20 6f 62 6a 65 63 74 20 66 72 6f # the object fro
0990: 6d 20 69 74 2e 20 54 68 65 20 6c 69 73 74 73 20 m it. The lists
09a0: 6f 66 20 63 68 61 6e 67 65 73 65 74 73 20 28 6d of changesets (m
09b0: 79 63 68 61 6e 67 65 73 65 74 73 2c 0a 09 23 20 ychangesets,..#
09c0: 6d 79 74 63 68 61 6e 67 65 73 65 74 73 29 20 61 mytchangesets) a
09d0: 72 65 20 6e 6f 74 20 6d 61 69 6e 74 61 69 6e 65 re not maintaine
09e0: 64 20 28 3d 20 72 65 64 75 63 65 64 29 2c 20 66 d (= reduced), f
09f0: 6f 72 20 74 68 65 0a 09 23 20 6d 6f 6d 65 6e 74 or the..# moment
0a00: 2e 20 57 65 20 6d 61 79 20 62 65 20 61 62 6c 65 . We may be able
0a10: 20 74 6f 20 67 65 74 20 72 69 64 20 6f 66 20 74 to get rid of t
0a20: 68 69 73 20 65 6e 74 69 72 65 6c 79 2c 20 61 74 his entirely, at
0a30: 20 6c 65 61 73 74 0a 09 23 20 66 6f 72 20 28 64 least..# for (d
0a40: 65 29 63 6f 6e 73 74 72 75 63 74 69 6f 6e 20 61 e)construction a
0a50: 6e 64 20 70 61 73 73 20 49 6e 69 74 43 53 65 74 nd pass InitCSet
0a60: 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 69 69 64 s....foreach iid
0a70: 20 24 6d 79 69 74 65 6d 73 20 7b 0a 09 20 20 20 $myitems {..
0a80: 20 73 65 74 20 6b 65 79 20 5b 6c 69 73 74 20 24 set key [list $
0a90: 6d 79 74 79 70 65 20 24 69 69 64 5d 0a 09 20 20 mytype $iid]..
0aa0: 20 20 75 6e 73 65 74 20 6d 79 69 74 65 6d 6d 61 unset myitemma
0ab0: 70 28 24 6b 65 79 29 0a 09 20 20 20 20 6c 6f 67 p($key).. log
0ac0: 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 7b write 8 csets {
0ad0: 4d 41 50 2d 20 69 74 65 6d 20 3c 24 6b 65 79 3e MAP- item <$key>
0ae0: 20 24 73 65 6c 66 20 3d 20 5b 24 73 65 6c 66 20 $self = [$self
0af0: 73 74 72 5d 7d 0a 09 7d 0a 09 72 65 74 75 72 6e str]}..}..return
0b00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
0b10: 6f 64 20 73 74 72 20 7b 7d 20 7b 0a 09 73 65 74 od str {} {..set
0b20: 20 73 74 72 20 20 20 20 22 3c 22 0a 09 73 65 74 str "<"..set
0b30: 20 64 65 74 61 69 6c 20 22 22 0a 09 69 66 20 7b detail ""..if {
0b40: 5b 24 6d 79 74 79 70 65 6f 62 6a 20 62 79 73 79 [$mytypeobj bysy
0b50: 6d 62 6f 6c 5d 7d 20 7b 0a 09 20 20 20 20 73 65 mbol]} {.. se
0b60: 74 20 64 65 74 61 69 6c 20 22 20 27 5b 73 74 61 t detail " '[sta
0b70: 74 65 20 6f 6e 65 20 7b 0a 09 09 53 45 4c 45 43 te one {...SELEC
0b80: 54 20 53 2e 6e 61 6d 65 0a 09 09 46 52 4f 4d 20 T S.name...FROM
0b90: 20 20 73 79 6d 62 6f 6c 20 53 0a 09 09 57 48 45 symbol S...WHE
0ba0: 52 45 20 20 53 2e 73 69 64 20 3d 20 24 6d 79 73 RE S.sid = $mys
0bb0: 72 63 69 64 0a 09 20 20 20 20 7d 5d 27 22 0a 09 rcid.. }]'"..
0bc0: 7d 0a 09 61 70 70 65 6e 64 20 73 74 72 20 22 24 }..append str "$
0bd0: 6d 79 74 79 70 65 20 24 7b 6d 79 69 64 7d 24 7b mytype ${myid}${
0be0: 64 65 74 61 69 6c 7d 3e 22 0a 09 72 65 74 75 72 detail}>"..retur
0bf0: 6e 20 24 73 74 72 0a 20 20 20 20 7d 0a 0a 20 20 n $str. }..
0c00: 20 20 6d 65 74 68 6f 64 20 6c 6f 64 20 7b 7d 20 method lod {}
0c10: 7b 0a 09 72 65 74 75 72 6e 20 5b 24 6d 79 74 79 {..return [$myty
0c20: 70 65 6f 62 6a 20 63 73 5f 6c 6f 64 20 24 6d 79 peobj cs_lod $my
0c30: 69 74 65 6d 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 items]. }..
0c40: 20 20 6d 65 74 68 6f 64 20 69 64 20 20 20 20 7b method id {
0c50: 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 64 } { return $myid
0c60: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 74 }. method it
0c70: 65 6d 73 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 ems {} { return
0c80: 24 6d 79 74 69 74 65 6d 73 20 7d 0a 20 20 20 20 $mytitems }.
0c90: 6d 65 74 68 6f 64 20 64 61 74 61 20 20 7b 7d 20 method data {}
0ca0: 7b 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 { return [list $
0cb0: 6d 79 70 72 6f 6a 65 63 74 20 24 6d 79 74 79 70 myproject $mytyp
0cc0: 65 20 24 6d 79 73 72 63 69 64 5d 20 7d 0a 0a 20 e $mysrcid] }..
0cd0: 20 20 20 64 65 6c 65 67 61 74 65 20 6d 65 74 68 delegate meth
0ce0: 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 74 6f od bysymbol to
0cf0: 20 6d 79 74 79 70 65 6f 62 6a 0a 20 20 20 20 64 mytypeobj. d
0d00: 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 62 elegate method b
0d10: 79 72 65 76 69 73 69 6f 6e 20 74 6f 20 6d 79 74 yrevision to myt
0d20: 79 70 65 6f 62 6a 0a 20 20 20 20 64 65 6c 65 67 ypeobj. deleg
0d30: 61 74 65 20 6d 65 74 68 6f 64 20 69 73 62 72 61 ate method isbra
0d40: 6e 63 68 20 20 20 74 6f 20 6d 79 74 79 70 65 6f nch to mytypeo
0d50: 62 6a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 20 bj. delegate
0d60: 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 20 20 method istag
0d70: 20 20 74 6f 20 6d 79 74 79 70 65 6f 62 6a 0a 0a to mytypeobj..
0d80: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 70 6f method setpo
0d90: 73 20 7b 70 7d 20 7b 20 73 65 74 20 6d 79 70 6f s {p} { set mypo
0da0: 73 20 24 70 20 3b 20 72 65 74 75 72 6e 20 7d 0a s $p ; return }.
0db0: 20 20 20 20 6d 65 74 68 6f 64 20 70 6f 73 20 20 method pos
0dc0: 20 20 7b 7d 20 20 7b 20 72 65 74 75 72 6e 20 24 {} { return $
0dd0: 6d 79 70 6f 73 20 7d 0a 0a 20 20 20 20 6d 65 74 mypos }.. met
0de0: 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 75 63 hod determinesuc
0df0: 63 65 73 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 20 cessors {} {..#
0e00: 50 61 73 73 20 36 20 6f 70 65 72 61 74 69 6f 6e Pass 6 operation
0e10: 2e 20 43 6f 6d 70 75 74 65 20 70 72 6f 6a 65 63 . Compute projec
0e20: 74 2d 6c 65 76 65 6c 20 64 65 70 65 6e 64 65 6e t-level dependen
0e30: 63 69 65 73 20 66 72 6f 6d 0a 09 23 20 74 68 65 cies from..# the
0e40: 20 66 69 6c 65 2d 6c 65 76 65 6c 20 64 61 74 61 file-level data
0e50: 20 61 6e 64 20 73 61 76 65 20 69 74 20 62 61 63 and save it bac
0e60: 6b 20 74 6f 20 74 68 65 20 73 74 61 74 65 2e 20 k to the state.
0e70: 54 68 69 73 20 6d 61 79 0a 09 23 20 62 65 20 63 This may..# be c
0e80: 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 68 65 alled during the
0e90: 20 63 79 63 6c 65 20 62 72 65 61 6b 65 72 20 70 cycle breaker p
0ea0: 61 73 73 65 73 20 61 73 20 77 65 6c 6c 2c 20 74 asses as well, t
0eb0: 6f 20 61 64 6a 75 73 74 0a 09 23 20 74 68 65 20 o adjust..# the
0ec0: 73 75 63 63 65 73 73 6f 72 20 69 6e 66 6f 72 6d successor inform
0ed0: 61 74 69 6f 6e 20 6f 66 20 63 68 61 6e 67 65 73 ation of changes
0ee0: 65 74 73 20 77 68 69 63 68 20 61 72 65 20 74 68 ets which are th
0ef0: 65 0a 09 23 20 70 72 65 64 65 63 65 73 73 6f 72 e..# predecessor
0f00: 73 20 6f 66 20 64 72 6f 70 70 65 64 20 63 68 61 s of dropped cha
0f10: 6e 67 65 73 65 74 73 2e 20 46 6f 72 20 74 68 65 ngesets. For the
0f20: 6d 20 77 65 20 68 61 76 65 20 74 6f 0a 09 23 20 m we have to..#
0f30: 72 65 6d 6f 76 65 20 74 68 65 69 72 20 65 78 69 remove their exi
0f40: 73 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f sting informatio
0f50: 6e 20 66 69 72 73 74 20 62 65 66 6f 72 65 20 69 n first before i
0f60: 6e 73 65 72 74 69 6e 67 20 74 68 65 0a 09 23 20 nserting the..#
0f70: 6e 65 77 20 64 61 74 61 2e 0a 09 73 74 61 74 65 new data...state
0f80: 20 72 75 6e 20 7b 0a 09 20 20 20 20 44 45 4c 45 run {.. DELE
0f90: 54 45 20 46 52 4f 4d 20 63 73 73 75 63 63 65 73 TE FROM cssucces
0fa0: 73 6f 72 20 57 48 45 52 45 20 63 69 64 20 3d 20 sor WHERE cid =
0fb0: 24 6d 79 69 64 3b 0a 09 7d 0a 09 73 65 74 20 6c $myid;..}..set l
0fc0: 6f 6f 70 20 30 0a 09 66 6f 72 65 61 63 68 20 6e oop 0..foreach n
0fd0: 69 64 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 63 id [$mytypeobj c
0fe0: 73 5f 73 75 63 63 65 73 73 6f 72 73 20 24 6d 79 s_successors $my
0ff0: 69 74 65 6d 73 5d 20 7b 0a 09 20 20 20 20 73 74 items] {.. st
1000: 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 ate run {...INSE
1010: 52 54 20 49 4e 54 4f 20 63 73 73 75 63 63 65 73 RT INTO cssucces
1020: 73 6f 72 20 28 63 69 64 2c 20 20 6e 69 64 29 0a sor (cid, nid).
1030: 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 ..VALUES
1040: 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64 ($myid
1050: 2c 24 6e 69 64 29 0a 09 20 20 20 20 7d 0a 09 20 ,$nid).. }..
1060: 20 20 20 69 66 20 7b 24 6e 69 64 20 3d 3d 20 24 if {$nid == $
1070: 6d 79 69 64 7d 20 7b 20 73 65 74 20 6c 6f 6f 70 myid} { set loop
1080: 20 31 20 7d 0a 09 7d 0a 09 23 20 52 65 70 6f 72 1 }..}..# Repor
1090: 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d 70 t after the comp
10a0: 6c 65 74 65 20 73 74 72 75 63 74 75 72 65 20 68 lete structure h
10b0: 61 73 20 62 65 65 6e 20 73 61 76 65 64 2e 0a 09 as been saved...
10c0: 69 66 20 7b 24 6c 6f 6f 70 7d 20 7b 20 24 73 65 if {$loop} { $se
10d0: 6c 66 20 72 65 70 6f 72 74 6c 6f 6f 70 20 7d 0a lf reportloop }.
10e0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
10f0: 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 # result = li
1100: 73 74 20 28 63 68 61 6e 67 65 73 65 74 29 0a 20 st (changeset).
1110: 20 20 20 6d 65 74 68 6f 64 20 73 75 63 63 65 73 method succes
1120: 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 20 55 73 65 sors {} {..# Use
1130: 20 74 68 65 20 64 61 74 61 20 73 61 76 65 64 20 the data saved
1140: 62 79 20 70 61 73 73 20 36 2e 0a 09 72 65 74 75 by pass 6...retu
1150: 72 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 rn [struct::list
1160: 20 6d 61 70 20 5b 73 74 61 74 65 20 72 75 6e 20 map [state run
1170: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53 2e {.. SELECT S.
1180: 6e 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 nid.. FROM
1190: 63 73 73 75 63 63 65 73 73 6f 72 20 53 0a 09 20 cssuccessor S..
11a0: 20 20 20 57 48 45 52 45 20 20 53 2e 63 69 64 20 WHERE S.cid
11b0: 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 5b 6d 79 74 = $myid..}] [myt
11c0: 79 70 65 6d 65 74 68 6f 64 20 6f 66 5d 5d 0a 20 ypemethod of]].
11d0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 69 74 65 6d }.. # item
11e0: 20 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 0a -> list (item).
11f0: 20 20 20 20 6d 65 74 68 6f 64 20 6e 65 78 74 6d method nextm
1200: 61 70 20 7b 7d 20 7b 0a 09 24 6d 79 74 79 70 65 ap {} {..$mytype
1210: 6f 62 6a 20 73 75 63 63 65 73 73 6f 72 73 20 74 obj successors t
1220: 6d 70 20 24 6d 79 69 74 65 6d 73 0a 09 72 65 74 mp $myitems..ret
1230: 75 72 6e 20 5b 61 72 72 61 79 20 67 65 74 20 74 urn [array get t
1240: 6d 70 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d mp]. }.. m
1250: 65 74 68 6f 64 20 62 72 65 61 6b 69 6e 74 65 72 ethod breakinter
1260: 6e 61 6c 64 65 70 65 6e 64 65 6e 63 69 65 73 20 naldependencies
1270: 7b 63 76 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 {cv} {..upvar 1
1280: 24 63 76 20 63 6f 75 6e 74 65 72 0a 09 6c 6f 67 $cv counter..log
1290: 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 write 14 csets
12a0: 7b 5b 24 73 65 6c 66 20 73 74 72 5d 20 42 49 44 {[$self str] BID
12b0: 7d 0a 09 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 65 }..vc::tools::me
12c0: 6d 3a 3a 6d 61 72 6b 0a 09 23 23 0a 09 23 23 20 m::mark..##..##
12d0: 4e 4f 54 45 3a 20 54 68 69 73 20 6d 65 74 68 6f NOTE: This metho
12e0: 64 2c 20 6d 61 79 62 65 20 69 6e 20 63 6f 6e 6a d, maybe in conj
12f0: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 69 74 73 unction with its
1300: 20 63 61 6c 6c 65 72 0a 09 23 23 20 20 20 20 20 caller..##
1310: 20 20 73 65 65 6d 73 20 74 6f 20 62 65 20 61 20 seems to be a
1320: 6d 65 6d 6f 72 79 20 68 6f 67 2c 20 65 73 70 65 memory hog, espe
1330: 63 69 61 6c 6c 79 20 66 6f 72 20 6c 61 72 67 65 cially for large
1340: 0a 09 23 23 20 20 20 20 20 20 20 63 68 61 6e 67 ..## chang
1350: 65 73 65 74 73 2c 20 77 69 74 68 20 27 6c 61 72 esets, with 'lar
1360: 67 65 27 20 6d 65 61 6e 69 6e 67 20 74 6f 20 68 ge' meaning to h
1370: 61 76 65 20 61 20 27 6c 6f 6e 67 20 6c 69 73 74 ave a 'long list
1380: 0a 09 23 23 20 20 20 20 20 20 20 6f 66 20 69 74 ..## of it
1390: 65 6d 73 2c 20 73 65 76 65 72 61 6c 20 74 68 6f ems, several tho
13a0: 75 73 61 6e 64 27 2e 20 49 6e 76 65 73 74 69 67 usand'. Investig
13b0: 61 74 65 20 77 68 65 72 65 20 74 68 65 0a 09 23 ate where the..#
13c0: 23 20 20 20 20 20 20 20 6d 65 6d 6f 72 79 20 69 # memory i
13d0: 73 20 73 70 65 6e 74 20 61 6e 64 20 74 68 65 6e s spent and then
13e0: 20 6c 6f 6f 6b 20 66 6f 72 20 77 61 79 73 20 6f look for ways o
13f0: 66 20 72 65 63 74 69 66 79 69 6e 67 0a 09 23 23 f rectifying..##
1400: 20 20 20 20 20 20 20 74 68 65 20 70 72 6f 62 6c the probl
1410: 65 6d 2e 0a 09 23 23 0a 0a 09 23 20 54 68 69 73 em...##...# This
1420: 20 6d 65 74 68 6f 64 20 69 6e 73 70 65 63 74 73 method inspects
1430: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 73 20 the changesets
1440: 66 6f 72 20 69 6e 74 65 72 6e 61 6c 0a 09 23 20 for internal..#
1450: 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 4e 6f dependencies. No
1460: 74 68 69 6e 67 20 69 73 20 64 6f 6e 65 20 69 66 thing is done if
1470: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 0a 09 23 there are no..#
1480: 20 73 75 63 68 2e 20 4f 74 68 65 72 77 69 73 65 such. Otherwise
1490: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 69 the changeset i
14a0: 73 20 73 70 6c 69 74 20 69 6e 74 6f 20 61 20 73 s split into a s
14b0: 65 74 20 6f 66 0a 09 23 20 66 72 61 67 6d 65 6e et of..# fragmen
14c0: 74 73 20 77 69 74 68 6f 75 74 20 69 6e 74 65 72 ts without inter
14d0: 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 nal dependencies
14e0: 2c 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74 , transforming t
14f0: 68 65 0a 09 23 20 69 6e 74 65 72 6e 61 6c 20 64 he..# internal d
1500: 65 70 65 6e 64 65 6e 63 69 65 73 20 69 6e 74 6f ependencies into
1510: 20 65 78 74 65 72 6e 61 6c 20 6f 6e 65 73 2e 20 external ones.
1520: 54 68 65 20 6e 65 77 20 63 68 61 6e 67 65 73 65 The new changese
1530: 74 73 0a 09 23 20 61 72 65 20 61 64 64 65 64 20 ts..# are added
1540: 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 20 61 to the list of a
1550: 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a ll changesets...
1560: 09 23 20 57 65 20 70 65 72 66 6f 72 6d 20 61 6c .# We perform al
1570: 6c 20 6e 65 63 65 73 73 61 72 79 20 73 70 6c 69 l necessary spli
1580: 74 73 20 69 6e 20 6f 6e 65 20 67 6f 2c 20 69 6e ts in one go, in
1590: 73 74 65 61 64 20 6f 66 20 6f 6e 6c 79 0a 09 23 stead of only..#
15a0: 20 6f 6e 65 2e 20 54 68 65 20 70 72 65 76 69 6f one. The previo
15b0: 75 73 20 61 6c 67 6f 72 69 74 68 6d 2c 20 61 64 us algorithm, ad
15c0: 61 70 74 65 64 20 66 72 6f 6d 20 63 76 73 32 73 apted from cvs2s
15d0: 76 6e 2c 20 63 6f 6d 70 75 74 65 64 0a 09 23 20 vn, computed..#
15e0: 61 20 6c 6f 74 20 6f 66 20 73 74 61 74 65 20 77 a lot of state w
15f0: 68 69 63 68 20 77 61 73 20 74 68 72 6f 77 6e 20 hich was thrown
1600: 61 77 61 79 20 61 6e 64 20 74 68 65 6e 20 63 6f away and then co
1610: 6d 70 75 74 65 64 20 61 67 61 69 6e 0a 09 23 20 mputed again..#
1620: 66 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 for each of the
1630: 66 72 61 67 6d 65 6e 74 73 2e 20 49 74 20 73 68 fragments. It sh
1640: 6f 75 6c 64 20 62 65 20 65 61 73 69 65 72 20 74 ould be easier t
1650: 6f 20 75 70 64 61 74 65 20 61 6e 64 0a 09 23 20 o update and..#
1660: 72 65 75 73 65 20 74 68 61 74 20 73 74 61 74 65 reuse that state
1670: 2e 0a 0a 09 23 20 54 68 65 20 63 6f 64 65 20 63 ....# The code c
1680: 68 65 63 6b 73 20 6f 6e 6c 79 20 73 75 63 63 65 hecks only succe
1690: 73 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 69 65 ssor dependencie
16a0: 73 2c 20 61 73 20 74 68 69 73 0a 09 23 20 61 75 s, as this..# au
16b0: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 76 65 tomatically cove
16c0: 72 73 20 74 68 65 20 70 72 65 64 65 63 65 73 73 rs the predecess
16d0: 6f 72 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 or dependencies
16e0: 61 73 20 77 65 6c 6c 20 28 41 0a 09 23 20 73 75 as well (A..# su
16f0: 63 63 65 73 73 6f 72 20 64 65 70 65 6e 64 65 6e ccessor dependen
1700: 63 79 20 61 20 2d 3e 20 62 20 69 73 20 61 6c 73 cy a -> b is als
1710: 6f 20 61 20 70 72 65 64 65 63 65 73 73 6f 72 20 o a predecessor
1720: 64 65 70 65 6e 64 65 6e 63 79 0a 09 23 20 62 20 dependency..# b
1730: 2d 3e 20 61 29 2e 0a 0a 09 23 20 41 72 72 61 79 -> a)....# Array
1740: 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 of dependencies
1750: 20 28 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c (parent -> chil
1760: 64 29 2e 20 54 68 69 73 20 69 73 20 70 75 6c 6c d). This is pull
1770: 65 64 20 66 72 6f 6d 0a 09 23 20 74 68 65 20 73 ed from..# the s
1780: 74 61 74 65 2c 20 61 6e 64 20 6c 69 6d 69 74 65 tate, and limite
1790: 64 20 74 6f 20 73 75 63 63 65 73 73 6f 72 73 20 d to successors
17a0: 77 69 74 68 69 6e 20 74 68 65 20 63 68 61 6e 67 within the chang
17b0: 65 73 65 74 2e 0a 0a 09 61 72 72 61 79 20 73 65 eset....array se
17c0: 74 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 7b t dependencies {
17d0: 7d 0a 09 24 6d 79 74 79 70 65 6f 62 6a 20 69 6e }..$mytypeobj in
17e0: 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 ternalsuccessors
17f0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 6d dependencies $m
1800: 79 69 74 65 6d 73 0a 09 69 66 20 7b 21 5b 61 72 yitems..if {![ar
1810: 72 61 79 20 73 69 7a 65 20 64 65 70 65 6e 64 65 ray size depende
1820: 6e 63 69 65 73 5d 7d 20 7b 0a 09 20 20 20 20 72 ncies]} {.. r
1830: 65 74 75 72 6e 20 30 0a 09 7d 20 3b 20 23 20 4e eturn 0..} ; # N
1840: 6f 74 68 69 6e 67 20 74 6f 20 62 72 65 61 6b 2e othing to break.
1850: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20 63 ...log write 5 c
1860: 73 65 74 73 20 2e 2e 2e 5b 24 73 65 6c 66 20 73 sets ...[$self s
1870: 74 72 5d 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e tr].............
1880: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
1890: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
18a0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 0a 09 76 63 3a 3a ............vc::
18b0: 74 6f 6f 6c 73 3a 3a 6d 65 6d 3a 3a 6d 61 72 6b tools::mem::mark
18c0: 0a 0a 09 23 20 57 65 20 68 61 76 65 20 69 6e 74 ...# We have int
18d0: 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 ernal dependenci
18e0: 65 73 20 74 6f 20 62 72 65 61 6b 2e 20 57 65 20 es to break. We
18f0: 6e 6f 77 20 69 74 65 72 61 74 65 20 6f 76 65 72 now iterate over
1900: 0a 09 23 20 61 6c 6c 20 70 6f 73 69 74 69 6f 6e ..# all position
1910: 73 20 69 6e 20 74 68 65 20 6c 69 73 74 20 28 77 s in the list (w
1920: 68 69 63 68 20 69 73 20 63 68 72 6f 6e 6f 6c 6f hich is chronolo
1930: 67 69 63 61 6c 2c 20 61 74 20 6c 65 61 73 74 0a gical, at least.
1940: 09 23 20 61 73 20 66 61 72 20 61 73 20 74 68 65 .# as far as the
1950: 20 74 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20 timestamps are
1960: 63 6f 72 72 65 63 74 20 61 6e 64 20 75 6e 69 71 correct and uniq
1970: 75 65 29 20 61 6e 64 0a 09 23 20 64 65 74 65 72 ue) and..# deter
1980: 6d 69 6e 65 20 74 68 65 20 62 65 73 74 20 70 6f mine the best po
1990: 73 69 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 62 sition for the b
19a0: 72 65 61 6b 2c 20 62 79 20 74 72 79 69 6e 67 20 reak, by trying
19b0: 74 6f 0a 09 23 20 62 72 65 61 6b 20 61 73 20 6d to..# break as m
19c0: 61 6e 79 20 64 65 70 65 6e 64 65 6e 63 69 65 73 any dependencies
19d0: 20 61 73 20 70 6f 73 73 69 62 6c 65 20 69 6e 20 as possible in
19e0: 6f 6e 65 20 67 6f 2e 20 57 68 65 6e 20 61 0a 09 one go. When a..
19f0: 23 20 62 72 65 61 6b 20 77 61 73 20 66 6f 75 6e # break was foun
1a00: 64 20 74 68 69 73 20 69 73 20 72 65 64 6f 6e 65 d this is redone
1a10: 20 66 6f 72 20 74 68 65 20 66 72 61 67 6d 65 6e for the fragmen
1a20: 74 73 20 63 6f 6d 69 6e 67 20 61 6e 64 0a 09 23 ts coming and..#
1a30: 20 61 66 74 65 72 2c 20 61 66 74 65 72 20 75 70 after, after up
1a40: 64 69 6e 67 20 74 68 65 20 63 72 6f 73 73 69 6e ding the crossin
1a50: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a g information...
1a60: 09 23 20 44 61 74 61 20 73 74 72 75 63 74 75 72 .# Data structur
1a70: 65 73 3a 0a 09 23 20 4d 61 70 3a 20 20 50 4f 53 es:..# Map: POS
1a80: 20 20 20 72 65 76 69 73 69 6f 6e 20 69 64 20 20 revision id
1a90: 20 20 20 20 2d 3e 20 70 6f 73 69 74 69 6f 6e 20 -> position
1aa0: 69 6e 20 6c 69 73 74 2e 0a 09 23 20 20 20 20 20 in list...#
1ab0: 20 20 43 52 4f 53 53 20 70 6f 73 69 74 69 6f 6e CROSS position
1ac0: 20 69 6e 20 6c 69 73 74 20 2d 3e 20 6e 75 6d 62 in list -> numb
1ad0: 65 72 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 69 er of dependenci
1ae0: 65 73 20 63 72 6f 73 73 69 6e 67 20 69 74 0a 09 es crossing it..
1af0: 23 20 20 20 20 20 20 20 44 45 50 43 20 20 64 65 # DEPC de
1b00: 70 65 6e 64 65 6e 63 79 20 20 20 20 20 20 20 2d pendency -
1b10: 3e 20 70 6f 73 69 74 69 6f 6e 73 20 69 74 20 63 > positions it c
1b20: 72 6f 73 73 65 73 0a 09 23 20 4c 69 73 74 3a 20 rosses..# List:
1b30: 52 41 4e 47 45 20 4f 66 20 74 68 65 20 70 6f 73 RANGE Of the pos
1b40: 69 74 69 6f 6e 73 20 69 74 73 65 6c 66 2e 0a 09 itions itself...
1b50: 23 20 4d 61 70 3a 20 20 44 45 4c 54 41 20 70 6f # Map: DELTA po
1b60: 73 69 74 69 6f 6e 20 69 6e 20 6c 69 73 74 20 2d sition in list -
1b70: 3e 20 74 69 6d 65 20 64 65 6c 74 61 20 62 65 74 > time delta bet
1b80: 77 65 65 6e 20 69 74 73 20 72 65 76 69 73 69 6f ween its revisio
1b90: 6e 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 20 n..#
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb0: 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 65 78 and the nex
1bc0: 74 2c 20 69 66 20 61 6e 79 2e 0a 09 23 20 41 20 t, if any...# A
1bd0: 64 65 70 65 6e 64 65 6e 63 79 20 69 73 20 61 20 dependency is a
1be0: 73 69 6e 67 6c 65 2d 65 6c 65 6d 65 6e 74 20 6d single-element m
1bf0: 61 70 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 ap parent -> chi
1c00: 6c 64 0a 0a 09 23 20 49 6e 69 74 69 61 6c 69 7a ld...# Initializ
1c10: 65 42 72 65 61 6b 53 74 61 74 65 20 69 6e 69 74 eBreakState init
1c20: 69 61 6c 69 7a 65 73 20 74 68 65 69 72 20 63 6f ializes their co
1c30: 6e 74 65 6e 74 73 20 61 66 74 65 72 0a 09 23 20 ntents after..#
1c40: 75 70 76 61 72 27 69 6e 67 20 74 68 65 6d 20 66 upvar'ing them f
1c50: 72 6f 6d 20 74 68 69 73 20 73 63 6f 70 65 2e 20 rom this scope.
1c60: 49 74 20 75 73 65 73 20 74 68 65 20 69 6e 66 6f It uses the info
1c70: 72 6d 61 74 69 6f 6e 20 69 6e 0a 09 23 20 44 45 rmation in..# DE
1c80: 50 45 4e 44 45 4e 43 49 45 53 20 74 6f 20 64 6f PENDENCIES to do
1c90: 20 73 6f 2e 0a 0a 09 49 6e 69 74 69 61 6c 69 7a so....Initializ
1ca0: 65 42 72 65 61 6b 53 74 61 74 65 20 24 6d 79 69 eBreakState $myi
1cb0: 74 65 6d 73 0a 0a 09 73 65 74 20 66 72 61 67 6d tems...set fragm
1cc0: 65 6e 74 73 20 7b 7d 0a 09 73 65 74 20 6e 65 77 ents {}..set new
1cd0: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 24 72 61 [list $ra
1ce0: 6e 67 65 5d 0a 09 61 72 72 61 79 20 73 65 74 20 nge]..array set
1cf0: 62 72 65 61 6b 73 20 7b 7d 0a 0a 09 23 20 49 6e breaks {}...# In
1d00: 73 74 65 61 64 20 6f 66 20 6f 6e 65 20 6c 69 73 stead of one lis
1d10: 74 20 68 6f 6c 64 69 6e 67 20 62 6f 74 68 20 70 t holding both p
1d20: 72 6f 63 65 73 73 65 64 20 61 6e 64 20 70 65 6e rocessed and pen
1d30: 64 69 6e 67 0a 09 23 20 66 72 61 67 6d 65 6e 74 ding..# fragment
1d40: 73 20 77 65 20 75 73 65 20 74 77 6f 2c 20 6f 6e s we use two, on
1d50: 65 20 66 6f 72 20 74 68 65 20 66 72 61 6d 65 6e e for the framen
1d60: 74 73 20 74 6f 20 70 72 6f 63 65 73 73 2c 20 6f ts to process, o
1d70: 6e 65 0a 09 23 20 74 6f 20 68 6f 6c 64 20 74 68 ne..# to hold th
1d80: 65 20 6e 65 77 20 66 72 61 67 6d 65 6e 74 73 2c e new fragments,
1d90: 20 61 6e 64 20 74 68 65 20 6c 61 74 74 65 72 20 and the latter
1da0: 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 is copied to the
1db0: 0a 09 23 20 66 6f 72 6d 65 72 20 77 68 65 6e 20 ..# former when
1dc0: 74 68 65 79 20 72 75 6e 20 6f 75 74 2e 20 54 68 they run out. Th
1dd0: 69 73 20 6b 65 65 70 73 20 74 68 65 20 6c 69 73 is keeps the lis
1de0: 74 20 6f 66 20 70 65 6e 64 69 6e 67 0a 09 23 20 t of pending..#
1df0: 66 72 61 67 6d 65 6e 74 73 20 73 68 6f 72 74 20 fragments short
1e00: 77 69 74 68 6f 75 74 20 73 61 63 72 69 66 69 63 without sacrific
1e10: 69 6e 67 20 73 70 65 65 64 20 62 79 20 73 68 69 ing speed by shi
1e20: 66 74 69 6e 67 20 73 74 75 66 66 0a 09 23 20 64 fting stuff..# d
1e30: 6f 77 6e 2e 20 57 65 20 65 73 70 65 63 69 61 6c own. We especial
1e40: 6c 79 20 64 72 6f 70 20 74 68 65 20 6d 65 6d 6f ly drop the memo
1e50: 72 79 20 6f 66 20 66 72 61 67 6d 65 6e 74 73 20 ry of fragments
1e60: 62 72 6f 6b 65 6e 0a 09 23 20 64 75 72 69 6e 67 broken..# during
1e70: 20 70 72 6f 63 65 73 73 69 6e 67 20 61 66 74 65 processing afte
1e80: 72 20 61 20 73 68 6f 72 74 20 74 69 6d 65 2c 20 r a short time,
1e90: 69 6e 73 74 65 61 64 20 6f 66 20 6c 65 74 74 69 instead of letti
1ea0: 6e 67 20 69 74 0a 09 23 20 63 6f 6e 73 75 6d 65 ng it..# consume
1eb0: 20 6d 65 6d 6f 72 79 2e 0a 0a 09 77 68 69 6c 65 memory....while
1ec0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6e 65 77 5d {[llength $new]
1ed0: 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 70 65 } {... set pe
1ee0: 6e 64 69 6e 67 20 24 6e 65 77 0a 09 20 20 20 20 nding $new..
1ef0: 73 65 74 20 6e 65 77 20 20 20 20 20 7b 7d 0a 09 set new {}..
1f00: 20 20 20 20 73 65 74 20 61 74 20 20 20 20 20 20 set at
1f10: 30 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 0... while {$
1f20: 61 74 20 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 70 at < [llength $p
1f30: 65 6e 64 69 6e 67 5d 7d 20 7b 0a 09 09 73 65 74 ending]} {...set
1f40: 20 63 75 72 72 65 6e 74 20 5b 6c 69 6e 64 65 78 current [lindex
1f50: 20 24 70 65 6e 64 69 6e 67 20 24 61 74 5d 0a 0a $pending $at]..
1f60: 09 09 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 ..log write 6 cs
1f70: 65 74 73 20 7b 2e 20 2e 20 2e 2e 20 2e 2e 2e 20 ets {. . .. ...
1f80: 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 20 2e ..... ........ .
1f90: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 7d 0a 09 09 ............}...
1fa0: 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 65 74 log write 6 cset
1fb0: 73 20 7b 53 63 68 65 64 75 6c 65 64 20 20 20 5b s {Scheduled [
1fc0: 6a 6f 69 6e 20 5b 50 52 73 20 5b 6c 72 61 6e 67 join [PRs [lrang
1fd0: 65 20 24 70 65 6e 64 69 6e 67 20 24 61 74 20 65 e $pending $at e
1fe0: 6e 64 5d 5d 20 7b 20 7d 5d 7d 0a 09 09 6c 6f 67 nd]] { }]}...log
1ff0: 20 77 72 69 74 65 20 36 20 63 73 65 74 73 20 7b write 6 csets {
2000: 43 6f 6e 73 69 64 65 72 69 6e 67 20 5b 50 52 20 Considering [PR
2010: 24 63 75 72 72 65 6e 74 5d 20 5c 5b 24 61 74 2f $current] \[$at/
2020: 5b 6c 6c 65 6e 67 74 68 20 24 70 65 6e 64 69 6e [llength $pendin
2030: 67 5d 5c 5d 7d 0a 0a 09 09 73 65 74 20 62 65 73 g]\]}....set bes
2040: 74 20 5b 46 69 6e 64 42 65 73 74 42 72 65 61 6b t [FindBestBreak
2050: 20 24 63 75 72 72 65 6e 74 5d 0a 0a 09 09 69 66 $current]....if
2060: 20 7b 24 62 65 73 74 20 3c 20 30 7d 20 7b 0a 09 {$best < 0} {..
2070: 09 20 20 20 20 23 20 54 68 65 20 69 6e 73 70 65 . # The inspe
2080: 63 74 65 64 20 72 61 6e 67 65 20 68 61 73 20 6e cted range has n
2090: 6f 20 69 6e 74 65 72 6e 61 6c 0a 09 09 20 20 20 o internal...
20a0: 20 23 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e # dependencies.
20b0: 20 54 68 69 73 20 69 73 20 61 20 63 6f 6d 70 6c This is a compl
20c0: 65 74 65 20 66 72 61 67 6d 65 6e 74 2e 0a 09 09 ete fragment....
20d0: 20 20 20 20 6c 61 70 70 65 6e 64 20 66 72 61 67 lappend frag
20e0: 6d 65 6e 74 73 20 24 63 75 72 72 65 6e 74 0a 0a ments $current..
20f0: 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
2100: 36 20 63 73 65 74 73 20 22 4e 6f 20 62 72 65 61 6 csets "No brea
2110: 6b 73 2c 20 66 69 6e 61 6c 22 0a 09 09 7d 20 65 ks, final"...} e
2120: 6c 73 65 20 7b 0a 09 09 20 20 20 20 23 20 53 70 lse {... # Sp
2130: 6c 69 74 20 74 68 65 20 72 61 6e 67 65 20 61 6e lit the range an
2140: 64 20 73 63 68 65 64 75 6c 65 20 74 68 65 20 72 d schedule the r
2150: 65 73 75 6c 74 69 6e 67 0a 09 09 20 20 20 20 23 esulting... #
2160: 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 20 66 fragments for f
2170: 75 72 74 68 65 72 20 69 6e 73 70 65 63 74 69 6f urther inspectio
2180: 6e 2e 20 52 65 6d 65 6d 62 65 72 20 74 68 65 0a n. Remember the.
2190: 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6f .. # number o
21a0: 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 63 f dependencies c
21b0: 75 74 20 62 65 66 6f 72 65 20 77 65 20 72 65 6d ut before we rem
21c0: 6f 76 65 20 74 68 65 6d 0a 09 09 20 20 20 20 23 ove them... #
21d0: 20 66 72 6f 6d 20 63 6f 6e 73 69 64 65 72 61 74 from considerat
21e0: 69 6f 6e 2c 20 66 6f 72 20 64 6f 63 75 6d 65 6e ion, for documen
21f0: 74 61 74 69 6f 6e 20 6c 61 74 65 72 2e 0a 0a 09 tation later....
2200: 09 20 20 20 20 73 65 74 20 62 72 65 61 6b 73 28 . set breaks(
2210: 24 62 65 73 74 29 20 24 63 72 6f 73 73 28 24 62 $best) $cross($b
2220: 65 73 74 29 0a 0a 09 09 20 20 20 20 6c 6f 67 20 est).... log
2230: 77 72 69 74 65 20 36 20 63 73 65 74 73 20 22 42 write 6 csets "B
2240: 65 73 74 20 62 72 65 61 6b 20 40 20 24 62 65 73 est break @ $bes
2250: 74 2c 20 63 75 74 74 69 6e 67 20 5b 6e 73 70 20 t, cutting [nsp
2260: 24 63 72 6f 73 73 28 24 62 65 73 74 29 20 64 65 $cross($best) de
2270: 70 65 6e 64 65 6e 63 79 20 64 65 70 65 6e 64 65 pendency depende
2280: 6e 63 69 65 73 5d 22 0a 0a 09 09 20 20 20 20 23 ncies]".... #
2290: 20 4e 6f 74 65 3a 20 54 68 65 20 76 61 6c 75 65 Note: The value
22a0: 20 6f 66 20 62 65 73 74 20 69 73 20 61 6e 20 61 of best is an a
22b0: 62 6f 6c 75 74 65 20 6c 6f 63 61 74 69 6f 6e 0a bolute location.
22c0: 09 09 20 20 20 20 23 20 69 6e 20 6d 79 69 74 65 .. # in myite
22d0: 6d 73 2e 20 55 73 65 20 74 68 65 20 73 74 61 72 ms. Use the star
22e0: 74 20 6f 66 20 63 75 72 72 65 6e 74 20 74 6f 20 t of current to
22f0: 6d 61 6b 65 20 69 74 0a 09 09 20 20 20 20 23 20 make it... #
2300: 61 6e 20 69 6e 64 65 78 20 61 62 73 6f 6c 75 74 an index absolut
2310: 65 20 74 6f 20 63 75 72 72 65 6e 74 2e 0a 0a 09 e to current....
2320: 09 20 20 20 20 73 65 74 20 62 72 65 6c 20 5b 65 . set brel [e
2330: 78 70 72 20 7b 24 62 65 73 74 20 2d 20 5b 6c 69 xpr {$best - [li
2340: 6e 64 65 78 20 24 63 75 72 72 65 6e 74 20 30 5d ndex $current 0]
2350: 7d 5d 0a 09 09 20 20 20 20 73 65 74 20 62 6e 65 }]... set bne
2360: 78 74 20 24 62 72 65 6c 20 3b 20 69 6e 63 72 20 xt $brel ; incr
2370: 62 6e 65 78 74 0a 09 09 20 20 20 20 73 65 74 20 bnext... set
2380: 66 72 61 67 62 65 66 6f 72 65 20 5b 6c 72 61 6e fragbefore [lran
2390: 67 65 20 24 63 75 72 72 65 6e 74 20 30 20 24 62 ge $current 0 $b
23a0: 72 65 6c 5d 0a 09 09 20 20 20 20 73 65 74 20 66 rel]... set f
23b0: 72 61 67 61 66 74 65 72 20 20 5b 6c 72 61 6e 67 ragafter [lrang
23c0: 65 20 24 63 75 72 72 65 6e 74 20 24 62 6e 65 78 e $current $bnex
23d0: 74 20 65 6e 64 5d 0a 0a 09 09 20 20 20 20 6c 6f t end].... lo
23e0: 67 20 77 72 69 74 65 20 36 20 63 73 65 74 73 20 g write 6 csets
23f0: 22 4e 65 77 20 70 69 65 63 65 73 20 20 5b 50 52 "New pieces [PR
2400: 20 24 66 72 61 67 62 65 66 6f 72 65 5d 20 5b 50 $fragbefore] [P
2410: 52 20 24 66 72 61 67 61 66 74 65 72 5d 22 0a 0a R $fragafter]"..
2420: 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 .. integrity
2430: 61 73 73 65 72 74 20 7b 5b 6c 6c 65 6e 67 74 68 assert {[llength
2440: 20 24 66 72 61 67 62 65 66 6f 72 65 5d 7d 20 7b $fragbefore]} {
2450: 46 6f 75 6e 64 20 7a 65 72 6f 2d 6c 65 6e 67 74 Found zero-lengt
2460: 68 20 66 72 61 67 6d 65 6e 74 20 61 74 20 74 68 h fragment at th
2470: 65 20 62 65 67 69 6e 6e 69 6e 67 7d 0a 09 09 20 e beginning}...
2480: 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 integrity ass
2490: 65 72 74 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 ert {[llength $f
24a0: 72 61 67 61 66 74 65 72 5d 7d 20 20 7b 46 6f 75 ragafter]} {Fou
24b0: 6e 64 20 7a 65 72 6f 2d 6c 65 6e 67 74 68 20 66 nd zero-length f
24c0: 72 61 67 6d 65 6e 74 20 61 74 20 74 68 65 20 65 ragment at the e
24d0: 6e 64 7d 0a 0a 09 09 20 20 20 20 6c 61 70 70 65 nd}.... lappe
24e0: 6e 64 20 6e 65 77 20 24 66 72 61 67 62 65 66 6f nd new $fragbefo
24f0: 72 65 20 24 66 72 61 67 61 66 74 65 72 0a 09 09 re $fragafter...
2500: 20 20 20 20 43 75 74 41 74 20 24 62 65 73 74 0a CutAt $best.
2510: 09 09 7d 0a 0a 09 09 69 6e 63 72 20 61 74 0a 09 ..}....incr at..
2520: 20 20 20 20 7d 0a 09 7d 0a 0a 09 6c 6f 67 20 77 }..}...log w
2530: 72 69 74 65 20 36 20 63 73 65 74 73 20 22 2e 20 rite 6 csets ".
2540: 2e 20 2e 2e 20 2e 2e 2e 20 2e 2e 2e 2e 2e 20 2e . .. ... ..... .
2550: 2e 2e 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e ....... ........
2560: 2e 2e 2e 2e 2e 22 0a 0a 09 23 20 28 2a 29 20 57 ....."...# (*) W
2570: 65 20 63 6c 65 61 72 20 6f 75 74 20 74 68 65 20 e clear out the
2580: 61 73 73 6f 63 69 61 74 65 64 20 70 61 72 74 20 associated part
2590: 6f 66 20 74 68 65 20 6d 79 69 74 65 6d 6d 61 70 of the myitemmap
25a0: 0a 09 23 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6e ..# in-memory in
25b0: 64 65 78 20 69 6e 20 70 72 65 70 61 72 61 74 69 dex in preparati
25c0: 6f 6e 20 66 6f 72 20 6e 65 77 20 64 61 74 61 2e on for new data.
25d0: 20 41 20 73 69 6d 70 6c 65 20 75 6e 73 65 74 0a A simple unset.
25e0: 09 23 20 69 73 20 65 6e 6f 75 67 68 2c 20 77 65 .# is enough, we
25f0: 20 68 61 76 65 20 6e 6f 20 73 79 6d 62 6f 6c 20 have no symbol
2600: 63 68 61 6e 67 65 73 65 74 73 20 61 74 20 74 68 changesets at th
2610: 69 73 20 74 69 6d 65 2c 20 61 6e 64 0a 09 23 20 is time, and..#
2620: 74 68 75 73 20 6e 65 76 65 72 20 6d 6f 72 65 20 thus never more
2630: 74 68 61 6e 20 6f 6e 65 20 72 65 66 65 72 65 6e than one referen
2640: 63 65 20 69 6e 20 74 68 65 20 6c 69 73 74 2e 0a ce in the list..
2650: 0a 09 66 6f 72 65 61 63 68 20 69 69 64 20 24 6d ..foreach iid $m
2660: 79 69 74 65 6d 73 20 7b 0a 09 20 20 20 20 73 65 yitems {.. se
2670: 74 20 6b 65 79 20 5b 6c 69 73 74 20 24 6d 79 74 t key [list $myt
2680: 79 70 65 20 24 69 69 64 5d 0a 09 20 20 20 20 75 ype $iid].. u
2690: 6e 73 65 74 20 6d 79 69 74 65 6d 6d 61 70 28 24 nset myitemmap($
26a0: 6b 65 79 29 0a 09 20 20 20 20 6c 6f 67 20 77 72 key).. log wr
26b0: 69 74 65 20 38 20 63 73 65 74 73 20 7b 4d 41 50 ite 8 csets {MAP
26c0: 2d 20 69 74 65 6d 20 3c 24 6b 65 79 3e 20 24 73 - item <$key> $s
26d0: 65 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 elf = [$self str
26e0: 5d 7d 0a 09 7d 0a 0a 09 23 20 43 72 65 61 74 65 ]}..}...# Create
26f0: 20 63 68 61 6e 67 65 73 65 74 73 20 66 6f 72 20 changesets for
2700: 74 68 65 20 66 72 61 67 6d 65 6e 74 73 2c 20 72 the fragments, r
2710: 65 75 73 69 6e 67 20 74 68 65 20 63 75 72 72 65 eusing the curre
2720: 6e 74 20 6f 6e 65 0a 09 23 20 66 6f 72 20 74 68 nt one..# for th
2730: 65 20 66 69 72 73 74 20 66 72 61 67 6d 65 6e 74 e first fragment
2740: 2e 20 57 65 20 73 6f 72 74 20 74 68 65 6d 20 69 . We sort them i
2750: 6e 20 6f 72 64 65 72 20 74 6f 20 61 6c 6c 6f 77 n order to allow
2760: 0a 09 23 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 ..# checking for
2770: 20 67 61 70 73 20 61 6e 64 20 6e 69 63 65 20 6d gaps and nice m
2780: 65 73 73 61 67 65 73 2e 0a 0a 09 73 65 74 20 66 essages....set f
2790: 72 61 67 6d 65 6e 74 73 20 5b 6c 73 6f 72 74 20 ragments [lsort
27a0: 2d 69 6e 64 65 78 20 30 20 2d 69 6e 74 65 67 65 -index 0 -intege
27b0: 72 20 24 66 72 61 67 6d 65 6e 74 73 5d 0a 0a 09 r $fragments]...
27c0: 23 70 75 74 73 20 5c 74 2e 5b 6a 6f 69 6e 20 5b #puts \t.[join [
27d0: 50 52 73 20 24 66 72 61 67 6d 65 6e 74 73 5d 20 PRs $fragments]
27e0: 2e 5c 6e 5c 74 2e 5d 2e 0a 0a 09 42 6f 72 64 65 .\n\t.]....Borde
27f0: 72 20 5b 6c 69 6e 64 65 78 20 24 66 72 61 67 6d r [lindex $fragm
2800: 65 6e 74 73 20 30 5d 20 66 69 72 73 74 73 20 66 ents 0] firsts f
2810: 69 72 73 74 65 0a 0a 09 69 6e 74 65 67 72 69 74 irste...integrit
2820: 79 20 61 73 73 65 72 74 20 7b 24 66 69 72 73 74 y assert {$first
2830: 73 20 3d 3d 20 30 7d 20 7b 42 61 64 20 66 72 61 s == 0} {Bad fra
2840: 67 6d 65 6e 74 20 73 74 61 72 74 20 40 20 24 66 gment start @ $f
2850: 69 72 73 74 73 2c 20 67 61 70 2c 20 6f 72 20 62 irsts, gap, or b
2860: 65 66 6f 72 65 20 62 65 67 69 6e 6e 69 6e 67 20 efore beginning
2870: 6f 66 20 74 68 65 20 72 61 6e 67 65 7d 0a 0a 09 of the range}...
2880: 73 65 74 20 6c 61 73 74 65 20 24 66 69 72 73 74 set laste $first
2890: 65 0a 09 66 6f 72 65 61 63 68 20 66 72 61 67 6d e..foreach fragm
28a0: 65 6e 74 20 5b 6c 72 61 6e 67 65 20 24 66 72 61 ent [lrange $fra
28b0: 67 6d 65 6e 74 73 20 31 20 65 6e 64 5d 20 7b 0a gments 1 end] {.
28c0: 09 20 20 20 20 42 6f 72 64 65 72 20 24 66 72 61 . Border $fra
28d0: 67 6d 65 6e 74 20 73 20 65 0a 09 20 20 20 20 69 gment s e.. i
28e0: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
28f0: 7b 24 6c 61 73 74 65 20 3d 3d 20 28 24 73 20 2d {$laste == ($s -
2900: 20 31 29 7d 20 7b 42 61 64 20 66 72 61 67 6d 65 1)} {Bad fragme
2910: 6e 74 20 62 6f 72 64 65 72 20 3c 24 6c 61 73 74 nt border <$last
2920: 65 20 7c 20 24 73 3e 2c 20 67 61 70 20 6f 72 20 e | $s>, gap or
2930: 6f 76 65 72 6c 61 70 7d 0a 0a 09 20 20 20 20 73 overlap}... s
2940: 65 74 20 6e 65 77 20 5b 24 74 79 70 65 20 25 41 et new [$type %A
2950: 55 54 4f 25 20 24 6d 79 70 72 6f 6a 65 63 74 20 UTO% $myproject
2960: 24 6d 79 74 79 70 65 20 24 6d 79 73 72 63 69 64 $mytype $mysrcid
2970: 20 5b 6c 72 61 6e 67 65 20 24 6d 79 69 74 65 6d [lrange $myitem
2980: 73 20 24 73 20 24 65 5d 5d 0a 09 20 20 20 20 69 s $s $e]].. i
2990: 6e 63 72 20 63 6f 75 6e 74 65 72 0a 0a 20 20 20 ncr counter..
29a0: 20 20 20 20 20 20 20 20 20 6c 6f 67 20 77 72 69 log wri
29b0: 74 65 20 34 20 63 73 65 74 73 20 22 42 72 65 61 te 4 csets "Brea
29c0: 6b 69 6e 67 20 5b 24 73 65 6c 66 20 73 74 72 20 king [$self str
29d0: 5d 20 40 20 24 6c 61 73 74 65 2c 20 6e 65 77 20 ] @ $laste, new
29e0: 5b 24 6e 65 77 20 73 74 72 5d 2c 20 63 75 74 74 [$new str], cutt
29f0: 69 6e 67 20 24 62 72 65 61 6b 73 28 24 6c 61 73 ing $breaks($las
2a00: 74 65 29 22 0a 0a 09 20 20 20 20 73 65 74 20 6c te)"... set l
2a10: 61 73 74 65 20 24 65 0a 09 7d 0a 0a 09 69 6e 74 aste $e..}...int
2a20: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a egrity assert {.
2a30: 09 20 20 20 20 24 6c 61 73 74 65 20 3d 3d 20 28 . $laste == (
2a40: 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 69 74 65 6d [llength $myitem
2a50: 73 5d 2d 31 29 0a 09 7d 20 7b 42 61 64 20 66 72 s]-1)..} {Bad fr
2a60: 61 67 6d 65 6e 74 20 65 6e 64 20 40 20 24 6c 61 agment end @ $la
2a70: 73 74 65 2c 20 67 61 70 2c 20 6f 72 20 62 65 79 ste, gap, or bey
2a80: 6f 6e 64 20 65 6e 64 20 6f 66 20 74 68 65 20 72 ond end of the r
2a90: 61 6e 67 65 7d 0a 0a 09 23 20 50 75 74 20 74 68 ange}...# Put th
2aa0: 65 20 66 69 72 73 74 20 66 72 61 67 6d 65 6e 74 e first fragment
2ab0: 20 69 6e 74 6f 20 74 68 65 20 63 75 72 72 65 6e into the curren
2ac0: 74 20 63 68 61 6e 67 65 73 65 74 2c 20 61 6e 64 t changeset, and
2ad0: 0a 09 23 20 75 70 64 61 74 65 20 74 68 65 20 69 ..# update the i
2ae0: 6e 2d 6d 65 6d 6f 72 79 20 69 6e 64 65 78 2e 20 n-memory index.
2af0: 57 65 20 63 61 6e 20 73 69 6d 70 6c 79 20 28 72 We can simply (r
2b00: 65 29 61 64 64 20 74 68 65 20 69 74 65 6d 73 0a e)add the items.
2b10: 09 23 20 62 65 63 61 75 73 65 20 77 65 20 63 6c .# because we cl
2b20: 65 61 72 65 64 20 74 68 65 20 70 72 65 76 69 6f eared the previo
2b30: 75 73 6c 79 20 65 78 69 73 74 69 6e 67 20 69 6e usly existing in
2b40: 66 6f 72 6d 61 74 69 6f 6e 2c 20 73 65 65 0a 09 formation, see..
2b50: 23 20 28 2a 29 20 61 62 6f 76 65 2e 20 50 65 72 # (*) above. Per
2b60: 73 69 73 74 65 6e 63 65 20 64 6f 65 73 20 6e 6f sistence does no
2b70: 74 20 6d 61 74 74 65 72 20 68 65 72 65 2c 20 6e t matter here, n
2b80: 6f 6e 65 20 6f 66 20 74 68 65 0a 09 23 20 63 68 one of the..# ch
2b90: 61 6e 67 65 73 65 74 73 20 68 61 73 20 62 65 65 angesets has bee
2ba0: 6e 20 73 61 76 65 64 20 74 6f 20 74 68 65 20 70 n saved to the p
2bb0: 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 ersistent state
2bc0: 79 65 74 2e 0a 0a 09 73 65 74 20 6d 79 69 74 65 yet....set myite
2bd0: 6d 73 20 20 5b 6c 72 61 6e 67 65 20 24 6d 79 69 ms [lrange $myi
2be0: 74 65 6d 73 20 20 30 20 24 66 69 72 73 74 65 5d tems 0 $firste]
2bf0: 0a 09 73 65 74 20 6d 79 74 69 74 65 6d 73 20 5b ..set mytitems [
2c00: 6c 72 61 6e 67 65 20 24 6d 79 74 69 74 65 6d 73 lrange $mytitems
2c10: 20 30 20 24 66 69 72 73 74 65 5d 0a 09 66 6f 72 0 $firste]..for
2c20: 65 61 63 68 20 69 69 64 20 24 6d 79 69 74 65 6d each iid $myitem
2c30: 73 20 7b 0a 09 20 20 20 20 73 65 74 20 6b 65 79 s {.. set key
2c40: 20 5b 6c 69 73 74 20 24 6d 79 74 79 70 65 20 24 [list $mytype $
2c50: 69 69 64 5d 0a 09 20 20 20 20 73 65 74 20 6d 79 iid].. set my
2c60: 69 74 65 6d 6d 61 70 28 24 6b 65 79 29 20 24 73 itemmap($key) $s
2c70: 65 6c 66 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 elf.. log wri
2c80: 74 65 20 38 20 63 73 65 74 73 20 7b 4d 41 50 2b te 8 csets {MAP+
2c90: 20 69 74 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 item <$key> $se
2ca0: 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d lf = [$self str]
2cb0: 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 20 31 0a }..}...return 1.
2cc0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
2cd0: 64 20 70 65 72 73 69 73 74 20 7b 7d 20 7b 0a 09 d persist {} {..
2ce0: 73 65 74 20 74 69 64 20 24 6d 79 63 73 74 79 70 set tid $mycstyp
2cf0: 65 28 24 6d 79 74 79 70 65 29 0a 09 73 65 74 20 e($mytype)..set
2d00: 70 69 64 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 pid [$myproject
2d10: 69 64 5d 0a 09 73 65 74 20 70 6f 73 20 30 0a 0a id]..set pos 0..
2d20: 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 69 .state transacti
2d30: 6f 6e 20 7b 0a 09 20 20 20 20 73 74 61 74 65 20 on {.. state
2d40: 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52 54 20 49 run {...INSERT I
2d50: 4e 54 4f 20 63 68 61 6e 67 65 73 65 74 20 28 63 NTO changeset (c
2d60: 69 64 2c 20 20 20 70 69 64 2c 20 20 74 79 70 65 id, pid, type
2d70: 2c 20 73 72 63 29 0a 09 09 56 41 4c 55 45 53 20 , src)...VALUES
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
2d90: 24 6d 79 69 64 2c 20 24 70 69 64 2c 20 24 74 69 $myid, $pid, $ti
2da0: 64 2c 20 24 6d 79 73 72 63 69 64 29 3b 0a 09 20 d, $mysrcid);..
2db0: 20 20 20 7d 0a 0a 09 20 20 20 20 66 6f 72 65 61 }... forea
2dc0: 63 68 20 69 69 64 20 24 6d 79 69 74 65 6d 73 20 ch iid $myitems
2dd0: 7b 0a 09 09 73 74 61 74 65 20 72 75 6e 20 7b 0a {...state run {.
2de0: 09 09 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 .. INSERT INT
2df0: 4f 20 63 73 69 74 65 6d 20 28 63 69 64 2c 20 20 O csitem (cid,
2e00: 20 70 6f 73 2c 20 20 69 69 64 29 0a 09 09 20 20 pos, iid)...
2e10: 20 20 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 VALUES
2e20: 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24 70 6f ($myid, $po
2e30: 73 2c 20 24 69 69 64 29 3b 0a 09 09 7d 0a 09 09 s, $iid);...}...
2e40: 69 6e 63 72 20 70 6f 73 0a 09 20 20 20 20 7d 0a incr pos.. }.
2e50: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
2e60: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 74 69 6d .. method tim
2e70: 65 72 61 6e 67 65 20 7b 7d 20 7b 20 72 65 74 75 erange {} { retu
2e80: 72 6e 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 74 rn [$mytypeobj t
2e90: 69 6d 65 72 61 6e 67 65 20 24 6d 79 69 74 65 6d imerange $myitem
2ea0: 73 5d 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 s] }.. method
2eb0: 20 6c 69 6d 69 74 73 20 7b 7d 20 7b 0a 09 73 74 limits {} {..st
2ec0: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 ruct::list assig
2ed0: 6e 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 6c 69 n [$mytypeobj li
2ee0: 6d 69 74 73 20 24 6d 79 69 74 65 6d 73 5d 20 6d mits $myitems] m
2ef0: 61 78 70 20 6d 69 6e 73 0a 09 72 65 74 75 72 6e axp mins..return
2f00: 20 5b 6c 69 73 74 20 5b 54 61 67 49 74 65 6d 44 [list [TagItemD
2f10: 69 63 74 20 24 6d 61 78 70 20 24 6d 79 74 79 70 ict $maxp $mytyp
2f20: 65 5d 20 5b 54 61 67 49 74 65 6d 44 69 63 74 20 e] [TagItemDict
2f30: 24 6d 69 6e 73 20 24 6d 79 74 79 70 65 5d 5d 0a $mins $mytype]].
2f40: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
2f50: 64 20 64 72 6f 70 20 7b 7d 20 7b 0a 09 6c 6f 67 d drop {} {..log
2f60: 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 7b write 8 csets {
2f70: 44 72 6f 70 70 69 6e 67 20 24 73 65 6c 66 20 3d Dropping $self =
2f80: 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d 0a 0a 09 [$self str]}...
2f90: 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f state transactio
2fa0: 6e 20 7b 0a 09 20 20 20 20 73 74 61 74 65 20 72 n {.. state r
2fb0: 75 6e 20 7b 0a 09 09 44 45 4c 45 54 45 20 46 52 un {...DELETE FR
2fc0: 4f 4d 20 63 68 61 6e 67 65 73 65 74 20 20 20 57 OM changeset W
2fd0: 48 45 52 45 20 63 69 64 20 3d 20 24 6d 79 69 64 HERE cid = $myid
2fe0: 3b 0a 09 09 44 45 4c 45 54 45 20 46 52 4f 4d 20 ;...DELETE FROM
2ff0: 63 73 69 74 65 6d 20 20 20 20 20 20 57 48 45 52 csitem WHER
3000: 45 20 63 69 64 20 3d 20 24 6d 79 69 64 3b 0a 09 E cid = $myid;..
3010: 09 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 73 73 .DELETE FROM css
3020: 75 63 63 65 73 73 6f 72 20 57 48 45 52 45 20 63 uccessor WHERE c
3030: 69 64 20 3d 20 24 6d 79 69 64 3b 0a 09 20 20 20 id = $myid;..
3040: 20 7d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 69 }..}..foreach i
3050: 69 64 20 24 6d 79 69 74 65 6d 73 20 7b 0a 09 20 id $myitems {..
3060: 20 20 20 73 65 74 20 6b 65 79 20 5b 6c 69 73 74 set key [list
3070: 20 24 6d 79 74 79 70 65 20 24 69 69 64 5d 0a 09 $mytype $iid]..
3080: 20 20 20 20 75 6e 73 65 74 20 6d 79 69 74 65 6d unset myitem
3090: 6d 61 70 28 24 6b 65 79 29 0a 09 20 20 20 20 6c map($key).. l
30a0: 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 og write 8 csets
30b0: 20 7b 4d 41 50 2d 20 69 74 65 6d 20 3c 24 6b 65 {MAP- item <$ke
30c0: 79 3e 20 24 73 65 6c 66 20 3d 20 5b 24 73 65 6c y> $self = [$sel
30d0: 66 20 73 74 72 5d 7d 0a 09 7d 0a 09 73 65 74 20 f str]}..}..set
30e0: 70 6f 73 20 20 20 20 20 20 20 20 20 20 5b 6c 73 pos [ls
30f0: 65 61 72 63 68 20 2d 65 78 61 63 74 20 24 6d 79 earch -exact $my
3100: 63 68 61 6e 67 65 73 65 74 73 20 24 73 65 6c 66 changesets $self
3110: 5d 0a 09 73 65 74 20 6d 79 63 68 61 6e 67 65 73 ]..set mychanges
3120: 65 74 73 20 5b 6c 72 65 70 6c 61 63 65 20 24 6d ets [lreplace $m
3130: 79 63 68 61 6e 67 65 73 65 74 73 20 24 70 6f 73 ychangesets $pos
3140: 20 24 70 6f 73 5d 0a 09 73 65 74 20 70 6f 73 20 $pos]..set pos
3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3160: 20 20 20 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 [lsearch -exa
3170: 63 74 20 24 6d 79 74 63 68 61 6e 67 65 73 65 74 ct $mytchangeset
3180: 73 28 24 6d 79 74 79 70 65 29 20 24 73 65 6c 66 s($mytype) $self
3190: 5d 0a 09 73 65 74 20 6d 79 74 63 68 61 6e 67 65 ]..set mytchange
31a0: 73 65 74 73 28 24 6d 79 74 79 70 65 29 20 5b 6c sets($mytype) [l
31b0: 72 65 70 6c 61 63 65 20 24 6d 79 74 63 68 61 6e replace $mytchan
31c0: 67 65 73 65 74 73 28 24 6d 79 74 79 70 65 29 20 gesets($mytype)
31d0: 24 70 6f 73 20 24 70 6f 73 5d 0a 0a 09 23 20 52 $pos $pos]...# R
31e0: 65 74 75 72 6e 20 74 68 65 20 6c 69 73 74 20 6f eturn the list o
31f0: 66 20 70 72 65 64 65 63 65 73 73 6f 72 73 20 73 f predecessors s
3200: 6f 20 74 68 61 74 20 74 68 65 79 20 63 61 6e 20 o that they can
3210: 62 65 20 61 64 6a 75 73 74 65 64 2e 0a 09 72 65 be adjusted...re
3220: 74 75 72 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 turn [struct::li
3230: 73 74 20 6d 61 70 20 5b 73 74 61 74 65 20 72 75 st map [state ru
3240: 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 n {.. SELECT
3250: 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 cid.. FROM
3260: 63 73 73 75 63 63 65 73 73 6f 72 0a 09 20 20 20 cssuccessor..
3270: 20 57 48 45 52 45 20 20 6e 69 64 20 3d 20 24 6d WHERE nid = $m
3280: 79 69 64 0a 09 7d 5d 20 5b 6d 79 74 79 70 65 6d yid..}] [mytypem
3290: 65 74 68 6f 64 20 6f 66 5d 5d 0a 20 20 20 20 7d ethod of]]. }
32a0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65 70 .. method rep
32b0: 6f 72 74 6c 6f 6f 70 20 7b 7b 6b 69 6c 6c 20 31 ortloop {{kill 1
32c0: 7d 7d 20 7b 0a 09 23 20 57 65 20 70 72 69 6e 74 }} {..# We print
32d0: 20 74 68 65 20 69 74 65 6d 73 20 77 68 69 63 68 the items which
32e0: 20 61 72 65 20 70 72 6f 64 75 63 69 6e 67 20 74 are producing t
32f0: 68 65 20 6c 6f 6f 70 2c 20 61 6e 64 20 68 6f 77 he loop, and how
3300: 2e 0a 0a 09 73 65 74 20 68 64 72 20 22 53 65 6c ....set hdr "Sel
3310: 66 2d 72 65 66 65 72 65 6e 74 69 61 6c 20 63 68 f-referential ch
3320: 61 6e 67 65 73 65 74 20 5b 24 73 65 6c 66 20 73 angeset [$self s
3330: 74 72 5d 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f tr] ____________
3340: 5f 5f 5f 5f 5f 5f 22 0a 09 73 65 74 20 66 74 72 ______"..set ftr
3350: 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c 20 7b 5b [regsub -all {[
3360: 5e 20 09 5d 7d 20 24 68 64 72 20 7b 5f 7d 5d 0a ^ .]} $hdr {_}].
3370: 0a 09 6c 6f 67 20 77 72 69 74 65 20 30 20 63 73 ..log write 0 cs
3380: 65 74 73 20 24 68 64 72 0a 09 66 6f 72 65 61 63 ets $hdr..foreac
3390: 68 20 7b 69 74 65 6d 20 6e 65 78 74 69 74 65 6d h {item nextitem
33a0: 7d 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 6c 6f } [$mytypeobj lo
33b0: 6f 70 73 20 24 6d 79 69 74 65 6d 73 5d 20 7b 0a ops $myitems] {.
33c0: 09 20 20 20 20 23 20 43 72 65 61 74 65 20 74 61 . # Create ta
33d0: 67 67 65 64 20 69 74 65 6d 73 20 66 72 6f 6d 20 gged items from
33e0: 74 68 65 20 69 64 20 61 6e 64 20 6f 75 72 20 74 the id and our t
33f0: 79 70 65 2e 0a 09 20 20 20 20 73 65 74 20 69 74 ype... set it
3400: 65 6d 20 20 20 20 20 5b 6c 69 73 74 20 24 6d 79 em [list $my
3410: 74 79 70 65 20 20 24 69 74 65 6d 5d 0a 09 20 20 type $item]..
3420: 20 20 73 65 74 20 6e 65 78 74 69 74 65 6d 20 5b set nextitem [
3430: 6c 69 73 74 20 24 6d 79 74 79 70 65 20 24 6e 65 list $mytype $ne
3440: 78 74 69 74 65 6d 5d 0a 09 20 20 20 20 23 20 50 xtitem].. # P
3450: 72 69 6e 74 61 62 6c 65 20 6c 61 62 65 6c 73 2e rintable labels.
3460: 0a 09 20 20 20 20 73 65 74 20 69 20 20 22 3c 5b .. set i "<[
3470: 24 74 79 70 65 20 69 74 65 6d 73 74 72 20 24 69 $type itemstr $i
3480: 74 65 6d 5d 3e 22 0a 09 20 20 20 20 73 65 74 20 tem]>".. set
3490: 6e 20 20 22 3c 5b 24 74 79 70 65 20 69 74 65 6d n "<[$type item
34a0: 73 74 72 20 24 6e 65 78 74 69 74 65 6d 5d 3e 22 str $nextitem]>"
34b0: 0a 09 20 20 20 20 73 65 74 20 6e 63 73 20 24 6d .. set ncs $m
34c0: 79 69 74 65 6d 6d 61 70 28 24 6e 65 78 74 69 74 yitemmap($nextit
34d0: 65 6d 29 0a 09 20 20 20 20 23 20 50 72 69 6e 74 em).. # Print
34e0: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
34f0: 30 20 63 73 65 74 73 20 7b 2a 20 24 69 20 2d 2d 0 csets {* $i --
3500: 3e 20 24 6e 20 2d 2d 3e 20 63 73 20 5b 24 6e 63 > $n --> cs [$nc
3510: 73 20 73 74 72 5d 7d 0a 09 7d 0a 09 6c 6f 67 20 s str]}..}..log
3520: 77 72 69 74 65 20 30 20 63 73 65 74 73 20 24 66 write 0 csets $f
3530: 74 72 0a 0a 09 69 66 20 7b 21 24 6b 69 6c 6c 7d tr...if {!$kill}
3540: 20 72 65 74 75 72 6e 0a 09 74 72 6f 75 62 6c 65 return..trouble
3550: 20 69 6e 74 65 72 6e 61 6c 20 22 5b 24 73 65 6c internal "[$sel
3560: 66 20 73 74 72 5d 20 64 65 70 65 6e 64 73 20 6f f str] depends o
3570: 6e 20 69 74 73 65 6c 66 22 0a 09 72 65 74 75 72 n itself"..retur
3580: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
3590: 68 6f 64 20 70 75 73 68 74 6f 20 7b 72 65 70 6f hod pushto {repo
35a0: 73 69 74 6f 72 79 20 64 61 74 65 20 72 73 74 61 sitory date rsta
35b0: 74 65 7d 20 7b 0a 09 23 20 47 65 6e 65 72 61 74 te} {..# Generat
35c0: 65 20 61 6e 64 20 69 6d 70 6f 72 74 20 74 68 65 e and import the
35d0: 20 6d 61 6e 69 66 65 73 74 20 66 6f 72 20 74 68 manifest for th
35e0: 69 73 20 63 68 61 6e 67 65 73 65 74 2e 0a 09 23 is changeset...#
35f0: 0a 09 23 20 44 61 74 61 20 6e 65 65 64 65 64 3a ..# Data needed:
3600: 0a 09 23 20 2d 20 43 6f 6d 6d 69 74 20 6d 65 73 ..# - Commit mes
3610: 73 61 67 65 20 20 20 20 20 20 20 20 20 20 20 20 sage
3620: 20 20 20 28 2d 2d 20 6d 79 73 72 63 69 64 20 2d (-- mysrcid -
3630: 3e 20 72 65 70 6f 73 69 74 6f 72 79 20 6d 65 74 > repository met
3640: 61 29 0a 09 23 20 2d 20 55 73 65 72 20 64 6f 69 a)..# - User doi
3650: 6e 67 20 74 68 65 20 63 6f 6d 6d 69 74 20 20 20 ng the commit
3660: 20 20 20 20 20 28 73 2e 61 2e 29 0a 09 23 0a 09 (s.a.)..#..
3670: 23 20 2d 20 54 69 6d 65 73 74 61 6d 70 20 6f 66 # - Timestamp of
3680: 20 77 68 65 6e 20 63 6f 6d 6d 69 74 74 65 64 20 when committed
3690: 20 28 63 6f 6d 6d 61 6e 64 20 61 72 67 75 6d 65 (command argume
36a0: 6e 74 29 0a 09 23 0a 09 23 20 2d 20 54 68 65 20 nt)..#..# - The
36b0: 70 61 72 65 6e 74 20 63 68 61 6e 67 65 73 65 74 parent changeset
36c0: 2c 20 69 66 20 61 6e 79 2e 20 49 66 20 74 68 65 , if any. If the
36d0: 72 65 20 69 73 20 6e 6f 20 70 61 72 65 6e 74 20 re is no parent
36e0: 66 6f 73 73 69 6c 0a 09 23 20 20 20 77 69 6c 6c fossil..# will
36f0: 20 75 73 65 20 74 68 65 20 65 6d 70 74 79 20 62 use the empty b
3700: 61 73 65 20 72 65 76 69 73 69 6f 6e 20 61 73 20 ase revision as
3710: 70 61 72 65 6e 74 2e 0a 09 23 0a 09 23 20 2d 20 parent...#..# -
3720: 4c 69 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65 List of the file
3730: 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 74 68 revisions in th
3740: 65 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a 09 73 e changeset....s
3750: 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 truct::list assi
3760: 67 6e 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 gn [$myproject g
3770: 65 74 6d 65 74 61 20 24 6d 79 73 72 63 69 64 5d etmeta $mysrcid]
3780: 20 5f 5f 20 5f 5f 20 75 73 65 72 20 6d 65 73 73 __ __ user mess
3790: 61 67 65 0a 0a 09 23 20 57 65 20 64 65 72 69 76 age...# We deriv
37a0: 65 20 74 68 65 20 6c 6f 64 20 69 6e 66 6f 72 6d e the lod inform
37b0: 61 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 ation directly f
37c0: 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69 6f 6e rom the revision
37d0: 73 20 6f 66 0a 09 23 20 74 68 65 20 63 68 61 6e s of..# the chan
37e0: 67 65 73 65 74 2c 20 61 73 20 74 68 65 20 62 72 geset, as the br
37f0: 61 6e 63 68 20 70 61 72 74 20 6f 66 20 74 68 65 anch part of the
3800: 20 6d 65 74 61 20 64 61 74 61 20 28 73 2e 61 2e meta data (s.a.
3810: 29 20 69 73 0a 09 23 20 6f 75 74 64 61 74 65 64 ) is..# outdated
3820: 20 73 69 6e 63 65 20 70 61 73 73 20 46 69 6c 74 since pass Filt
3830: 65 72 53 79 6d 62 6f 6c 73 2e 0a 0a 09 73 65 74 erSymbols....set
3840: 20 6c 6f 64 6e 61 6d 65 20 5b 24 73 65 6c 66 20 lodname [$self
3850: 6c 6f 64 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 lod]...log write
3860: 20 32 20 63 73 65 74 73 20 7b 49 6d 70 6f 72 74 2 csets {Import
3870: 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 5b 24 73 ing revision [$s
3880: 65 6c 66 20 73 74 72 5d 20 6f 6e 20 24 6c 6f 64 elf str] on $lod
3890: 6e 61 6d 65 7d 0a 0a 09 23 20 50 65 72 66 6f 72 name}...# Perfor
38a0: 6d 20 74 68 65 20 69 6d 70 6f 72 74 2e 20 41 73 m the import. As
38b0: 20 70 61 72 74 20 6f 66 20 74 68 61 74 20 77 65 part of that we
38c0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 70 determine the p
38d0: 61 72 65 6e 74 0a 09 23 20 77 65 20 6e 65 65 64 arent..# we need
38e0: 2c 20 61 6e 64 20 63 6f 6e 76 65 72 74 20 74 68 , and convert th
38f0: 65 20 6c 69 73 74 20 6f 66 20 69 74 65 6d 73 20 e list of items
3900: 69 6e 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 in the changeset
3910: 20 69 6e 74 6f 0a 09 23 20 75 75 69 64 73 20 61 into..# uuids a
3920: 6e 64 20 70 72 69 6e 74 61 62 6c 65 20 64 61 74 nd printable dat
3930: 61 2e 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 a....struct::lis
3940: 74 20 61 73 73 69 67 6e 20 5b 47 65 74 69 73 64 t assign [Getisd
3950: 65 66 61 75 6c 74 20 24 6d 79 69 74 65 6d 73 5d efault $myitems]
3960: 20 69 73 64 65 66 61 75 6c 74 20 6c 61 73 74 64 isdefault lastd
3970: 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b 0a 0a 09 efaultontrunk...
3980: 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 74 log write 8 cset
3990: 73 20 7b 4c 4f 44 20 20 20 20 27 24 6c 6f 64 6e s {LOD '$lodn
39a0: 61 6d 65 27 7d 0a 09 6c 6f 67 20 77 72 69 74 65 ame'}..log write
39b0: 20 38 20 63 73 65 74 73 20 7b 20 64 65 66 3f 20 8 csets { def?
39c0: 20 24 69 73 64 65 66 61 75 6c 74 7d 0a 09 6c 6f $isdefault}..lo
39d0: 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 g write 8 csets
39e0: 7b 20 6c 61 73 74 3f 20 24 6c 61 73 74 64 65 66 { last? $lastdef
39f0: 61 75 6c 74 6f 6e 74 72 75 6e 6b 7d 0a 0a 09 73 aultontrunk}...s
3a00: 65 74 20 6c 77 73 20 20 5b 47 65 74 77 6f 72 6b et lws [Getwork
3a10: 73 70 61 63 65 20 20 20 20 24 72 73 74 61 74 65 space $rstate
3a20: 20 24 6c 6f 64 6e 61 6d 65 20 24 6d 79 70 72 6f $lodname $mypro
3a30: 6a 65 63 74 20 24 69 73 64 65 66 61 75 6c 74 5d ject $isdefault]
3a40: 0a 09 24 6c 77 73 20 61 64 64 20 5b 47 65 74 72 ..$lws add [Getr
3a50: 65 76 69 73 69 6f 6e 69 6e 66 6f 20 24 6d 79 69 evisioninfo $myi
3a60: 74 65 6d 73 5d 0a 0a 09 73 65 74 20 75 75 69 64 tems]...set uuid
3a70: 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 69 6d [$repository im
3a80: 70 6f 72 74 72 65 76 69 73 69 6f 6e 20 5b 24 73 portrevision [$s
3a90: 65 6c 66 20 73 74 72 5d 20 5c 0a 09 09 20 20 20 elf str] \...
3aa0: 20 20 20 24 75 73 65 72 20 24 6d 65 73 73 61 67 $user $messag
3ab0: 65 20 24 64 61 74 65 20 5c 0a 09 09 20 20 20 20 e $date \...
3ac0: 20 20 5b 24 6c 77 73 20 67 65 74 69 64 5d 20 5b [$lws getid] [
3ad0: 24 6c 77 73 20 67 65 74 5d 5d 0a 0a 09 23 20 52 $lws get]]...# R
3ae0: 65 6d 65 6d 62 65 72 20 74 68 65 20 69 6d 70 6f emember the impo
3af0: 72 74 65 64 20 63 68 61 6e 67 65 73 65 74 20 69 rted changeset i
3b00: 6e 20 74 68 65 20 73 74 61 74 65 2c 20 75 6e 64 n the state, und
3b10: 65 72 20 6f 75 72 0a 09 23 20 4c 4f 44 2e 20 41 er our..# LOD. A
3b20: 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 65 20 nd if it is the
3b30: 6c 61 73 74 20 74 72 75 6e 6b 20 63 68 61 6e 67 last trunk chang
3b40: 65 73 65 74 20 6f 6e 20 74 68 65 20 76 65 6e 64 eset on the vend
3b50: 6f 72 0a 09 23 20 62 72 61 6e 63 68 20 74 68 65 or..# branch the
3b60: 6e 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 69 n the revision i
3b70: 73 20 61 6c 73 6f 20 74 68 65 20 61 63 74 75 61 s also the actua
3b80: 6c 20 72 6f 6f 74 20 6f 66 20 74 68 65 0a 09 23 l root of the..#
3b90: 20 3a 74 72 75 6e 6b 3a 2c 20 73 6f 20 77 65 20 :trunk:, so we
3ba0: 72 65 6d 65 6d 62 65 72 20 69 74 20 61 73 20 73 remember it as s
3bb0: 75 63 68 20 69 6e 20 74 68 65 20 73 74 61 74 65 uch in the state
3bc0: 2e 20 48 6f 77 65 76 65 72 20 69 66 0a 09 23 20 . However if..#
3bd0: 74 68 65 20 74 72 75 6e 6b 20 61 6c 72 65 61 64 the trunk alread
3be0: 79 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68 y exists then th
3bf0: 65 20 63 68 61 6e 67 65 73 65 74 20 63 61 6e 6e e changeset cann
3c00: 6f 74 20 62 65 20 6f 6e 20 69 74 0a 09 23 20 61 ot be on it..# a
3c10: 6e 79 20 6d 6f 72 65 2e 20 54 68 69 73 20 69 6e ny more. This in
3c20: 64 69 63 61 74 65 73 20 77 65 69 72 64 6e 65 73 dicates weirdnes
3c30: 73 20 69 6e 20 74 68 65 20 73 65 74 75 70 20 6f s in the setup o
3c40: 66 20 74 68 65 0a 09 23 20 76 65 6e 64 6f 72 20 f the..# vendor
3c50: 62 72 61 6e 63 68 2c 20 62 75 74 20 6f 6e 65 20 branch, but one
3c60: 77 65 20 63 61 6e 20 77 6f 72 6b 20 61 72 6f 75 we can work arou
3c70: 6e 64 2e 0a 0a 09 24 6c 77 73 20 64 65 66 69 64 nd....$lws defid
3c80: 20 24 75 75 69 64 0a 09 69 66 20 7b 24 6c 61 73 $uuid..if {$las
3c90: 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b 7d tdefaultontrunk}
3ca0: 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 73 {.. if {[$rs
3cb0: 74 61 74 65 20 68 61 73 20 3a 74 72 75 6e 6b 3a tate has :trunk:
3cc0: 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 ]} {...log write
3cd0: 20 32 20 63 73 65 74 73 20 7b 4d 75 6c 74 69 70 2 csets {Multip
3ce0: 6c 65 20 63 68 61 6e 67 65 73 65 74 73 20 64 65 le changesets de
3cf0: 63 6c 61 72 65 64 20 74 6f 20 62 65 20 74 68 65 clared to be the
3d00: 20 6c 61 73 74 20 74 72 75 6e 6b 20 63 68 61 6e last trunk chan
3d10: 67 65 73 65 74 20 6f 6e 20 74 68 65 20 76 65 6e geset on the ven
3d20: 64 6f 72 2d 62 72 61 6e 63 68 7d 0a 09 20 20 20 dor-branch}..
3d30: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 24 72 73 74 } else {...$rst
3d40: 61 74 65 20 6e 65 77 20 3a 74 72 75 6e 6b 3a 20 ate new :trunk:
3d50: 5b 24 6c 77 73 20 6e 61 6d 65 5d 0a 09 20 20 20 [$lws name]..
3d60: 20 7d 0a 09 7d 0a 0a 09 23 20 52 65 6d 65 6d 62 }..}...# Rememb
3d70: 65 72 20 74 68 65 20 77 68 6f 6c 65 20 63 68 61 er the whole cha
3d80: 6e 67 65 73 65 74 20 2f 20 75 75 69 64 20 6d 61 ngeset / uuid ma
3d90: 70 70 69 6e 67 2c 20 66 6f 72 20 74 68 65 20 74 pping, for the t
3da0: 61 67 73 2e 0a 0a 09 73 74 61 74 65 20 72 75 6e ags....state run
3db0: 20 7b 0a 09 20 20 20 20 49 4e 53 45 52 54 20 49 {.. INSERT I
3dc0: 4e 54 4f 20 63 73 75 75 69 64 20 28 63 69 64 2c NTO csuuid (cid,
3dd0: 20 20 20 75 75 69 64 29 0a 09 20 20 20 20 56 41 uuid).. VA
3de0: 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20 20 LUES
3df0: 20 28 24 6d 79 69 64 2c 20 24 75 75 69 64 29 0a ($myid, $uuid).
3e00: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
3e10: 0a 0a 20 20 20 20 70 72 6f 63 20 47 65 74 72 65 .. proc Getre
3e20: 76 69 73 69 6f 6e 69 6e 66 6f 20 7b 72 65 76 69 visioninfo {revi
3e30: 73 69 6f 6e 73 7d 20 7b 0a 09 73 65 74 20 74 68 sions} {..set th
3e40: 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 eset ('[join $re
3e50: 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 visions {','}]')
3e60: 0a 09 73 65 74 20 72 65 76 69 73 69 6f 6e 73 20 ..set revisions
3e70: 7b 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 72 69 {}..foreach {fri
3e80: 64 20 70 61 74 68 20 66 6e 61 6d 65 20 72 65 76 d path fname rev
3e90: 6e 72 20 72 6f 70 7d 20 5b 73 74 61 74 65 20 72 nr rop} [state r
3ea0: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
3eb0: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
3ec0: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
3ed0: 43 54 20 55 2e 75 75 69 64 2c 20 46 2e 76 69 73 CT U.uuid, F.vis
3ee0: 69 62 6c 65 2c 20 46 2e 6e 61 6d 65 2c 20 52 2e ible, F.name, R.
3ef0: 72 65 76 2c 20 52 2e 6f 70 0a 09 20 20 20 20 46 rev, R.op.. F
3f00: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R
3f10: 2c 20 72 65 76 75 75 69 64 20 55 2c 20 66 69 6c , revuuid U, fil
3f20: 65 20 46 0a 09 20 20 20 20 57 48 45 52 45 20 20 e F.. WHERE
3f30: 52 2e 72 69 64 20 49 4e 20 24 74 68 65 73 65 74 R.rid IN $theset
3f40: 20 20 2d 2d 20 41 6c 6c 20 73 70 65 63 69 66 69 -- All specifi
3f50: 65 64 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 ed revisions..
3f60: 20 20 41 4e 44 20 20 20 20 55 2e 72 69 64 20 3d AND U.rid =
3f70: 20 52 2e 72 69 64 20 20 20 20 20 2d 2d 20 67 65 R.rid -- ge
3f80: 74 20 66 6f 73 73 69 6c 20 75 75 69 64 20 6f 66 t fossil uuid of
3f90: 20 72 65 76 69 73 69 6f 6e 0a 09 20 20 20 20 41 revision.. A
3fa0: 4e 44 20 20 20 20 46 2e 66 69 64 20 3d 20 52 2e ND F.fid = R.
3fb0: 66 69 64 20 20 20 20 20 2d 2d 20 67 65 74 20 66 fid -- get f
3fc0: 69 6c 65 20 6f 66 20 72 65 76 69 73 69 6f 6e 0a ile of revision.
3fd0: 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 .}]] {.. lapp
3fe0: 65 6e 64 20 72 65 76 69 73 69 6f 6e 73 20 24 66 end revisions $f
3ff0: 72 69 64 20 24 70 61 74 68 20 24 66 6e 61 6d 65 rid $path $fname
4000: 2f 24 72 65 76 6e 72 20 24 72 6f 70 0a 09 7d 0a /$revnr $rop..}.
4010: 09 72 65 74 75 72 6e 20 24 72 65 76 69 73 69 6f .return $revisio
4020: 6e 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 ns. }.. pr
4030: 6f 63 20 47 65 74 77 6f 72 6b 73 70 61 63 65 20 oc Getworkspace
4040: 7b 72 73 74 61 74 65 20 6c 6f 64 6e 61 6d 65 20 {rstate lodname
4050: 70 72 6f 6a 65 63 74 20 69 73 64 65 66 61 75 6c project isdefaul
4060: 74 7d 20 7b 0a 0a 09 23 20 54 68 65 20 73 74 61 t} {...# The sta
4070: 74 65 20 6f 62 6a 65 63 74 20 68 6f 6c 64 73 20 te object holds
4080: 74 68 65 20 77 6f 72 6b 73 70 61 63 65 20 73 74 the workspace st
4090: 61 74 65 20 6f 66 20 65 61 63 68 20 6b 6e 6f 77 ate of each know
40a0: 6e 0a 09 23 20 6c 69 6e 65 2d 6f 66 2d 64 65 76 n..# line-of-dev
40b0: 65 6c 6f 70 6d 65 6e 74 20 28 4c 4f 44 29 2c 20 elopment (LOD),
40c0: 75 70 20 74 6f 20 74 68 65 20 6c 61 73 74 20 63 up to the last c
40d0: 6f 6d 6d 69 74 74 65 64 0a 09 23 20 63 68 61 6e ommitted..# chan
40e0: 67 65 73 65 74 20 62 65 6c 6f 6e 67 69 6e 67 20 geset belonging
40f0: 74 6f 20 74 68 61 74 20 4c 4f 44 2e 0a 0a 09 23 to that LOD....#
4100: 20 28 2a 29 20 53 74 61 6e 64 61 72 64 20 68 61 (*) Standard ha
4110: 6e 64 6c 69 6e 67 20 69 66 20 69 6e 2d 4c 4f 44 ndling if in-LOD
4120: 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49 66 20 changesets. If
4130: 74 68 65 20 4c 4f 44 20 6f 66 0a 09 23 20 20 20 the LOD of..#
4140: 20 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 68 the current ch
4150: 61 6e 67 65 73 65 74 20 65 78 69 73 74 73 20 69 angeset exists i
4160: 6e 20 74 68 65 20 73 74 61 74 65 20 28 3d 20 68 n the state (= h
4170: 61 73 20 62 65 65 6e 0a 09 23 20 20 20 20 20 63 as been..# c
4180: 6f 6d 6d 69 74 74 65 64 20 74 6f 29 20 74 68 65 ommitted to) the
4190: 6e 20 74 68 69 73 20 69 74 20 68 61 73 20 74 68 n this it has th
41a0: 65 20 77 6f 72 6b 73 70 61 63 65 20 77 65 20 61 e workspace we a
41b0: 72 65 0a 09 23 20 20 20 20 20 6c 6f 6f 6b 69 6e re..# lookin
41c0: 67 20 66 6f 72 2e 0a 0a 09 69 66 20 7b 5b 24 72 g for....if {[$r
41d0: 73 74 61 74 65 20 68 61 73 20 24 6c 6f 64 6e 61 state has $lodna
41e0: 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75 me]} {.. retu
41f0: 72 6e 20 5b 24 72 73 74 61 74 65 20 67 65 74 20 rn [$rstate get
4200: 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 23 $lodname]..}...#
4210: 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73 20 68 If the LOD is h
4220: 6f 77 65 76 65 72 20 6e 6f 74 20 79 65 74 20 6b owever not yet k
4230: 6e 6f 77 6e 2c 20 74 68 65 6e 20 74 68 65 20 63 nown, then the c
4240: 75 72 72 65 6e 74 0a 09 23 20 63 68 61 6e 67 65 urrent..# change
4250: 73 65 74 20 63 61 6e 20 62 65 20 65 69 74 68 65 set can be eithe
4260: 72 20 6f 66 0a 09 23 20 28 61 29 20 72 6f 6f 74 r of..# (a) root
4270: 20 6f 66 20 61 20 76 65 6e 64 6f 72 20 62 72 61 of a vendor bra
4280: 6e 63 68 2c 0a 09 23 20 28 62 29 20 72 6f 6f 74 nch,..# (b) root
4290: 20 6f 66 20 74 68 65 20 74 72 75 6e 6b 20 4c 4f of the trunk LO
42a0: 44 2c 20 6f 72 0a 09 23 20 28 63 29 20 74 68 65 D, or..# (c) the
42b0: 20 66 69 72 73 74 20 63 68 61 6e 67 65 73 65 74 first changeset
42c0: 20 69 6e 20 61 20 6e 65 77 20 4c 4f 44 20 77 68 in a new LOD wh
42d0: 69 63 68 20 77 61 73 20 73 70 61 77 6e 65 64 20 ich was spawned
42e0: 66 72 6f 6d 0a 09 23 20 20 20 20 20 61 6e 20 65 from..# an e
42f0: 78 69 73 74 69 6e 67 20 4c 4f 44 2e 0a 0a 09 23 xisting LOD....#
4300: 20 46 6f 72 20 62 6f 74 68 20 28 61 29 20 61 6e For both (a) an
4310: 64 20 28 62 29 20 77 65 20 68 61 76 65 20 74 6f d (b) we have to
4320: 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 77 6f create a new wo
4330: 72 6b 73 70 61 63 65 20 66 6f 72 0a 09 23 20 74 rkspace for..# t
4340: 68 65 20 6c 6f 64 2c 20 61 6e 64 20 69 74 20 64 he lod, and it d
4350: 6f 65 73 6e 27 74 20 69 6e 68 65 72 69 74 20 66 oesn't inherit f
4360: 72 6f 6d 20 61 6e 79 74 68 69 6e 67 2e 0a 0a 09 rom anything....
4370: 23 20 4f 6e 65 20 65 78 63 65 70 74 69 6f 6e 20 # One exception
4380: 66 6f 72 20 28 61 29 2e 20 49 66 20 77 65 20 61 for (a). If we a
4390: 6c 72 65 61 64 79 20 68 61 76 65 20 61 20 3a 76 lready have a :v
43a0: 65 6e 64 6f 72 3a 20 62 72 61 6e 63 68 0a 09 23 endor: branch..#
43b0: 20 74 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 73 then multiple s
43c0: 79 6d 62 6f 6c 73 20 77 65 72 65 20 75 73 65 64 ymbols were used
43d0: 20 66 6f 72 20 74 68 65 20 76 65 6e 64 6f 72 20 for the vendor
43e0: 62 72 61 6e 63 68 20 62 79 0a 09 23 20 64 69 66 branch by..# dif
43f0: 66 65 72 65 6e 74 20 66 69 6c 65 73 2e 20 49 6e ferent files. In
4400: 20 74 68 61 74 20 63 61 73 65 20 74 68 65 20 27 that case the '
4410: 6e 65 77 27 20 62 72 61 6e 63 68 20 69 73 20 6d new' branch is m
4420: 61 64 65 20 61 6e 0a 09 23 20 61 6c 69 61 73 20 ade an..# alias
4430: 6f 66 20 74 68 65 20 3a 76 65 6e 64 6f 72 3a 2c of the :vendor:,
4440: 20 65 66 66 65 63 74 69 76 65 6c 79 20 6d 65 72 effectively mer
4450: 67 69 6e 67 20 74 68 65 20 73 79 6d 62 6f 6c 73 ging the symbols
4460: 0a 09 23 20 74 6f 67 65 74 68 65 72 2e 0a 0a 09 ..# together....
4470: 23 20 4e 6f 74 65 20 74 68 61 74 20 63 61 73 65 # Note that case
4480: 20 28 62 29 20 6d 61 79 20 6e 65 76 65 72 20 6f (b) may never o
4490: 63 63 75 72 2e 20 53 65 65 20 74 68 65 20 76 61 ccur. See the va
44a0: 72 69 61 62 6c 65 0a 09 23 20 27 6c 61 73 74 64 riable..# 'lastd
44b0: 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b 27 20 69 efaultontrunk' i
44c0: 6e 20 74 68 65 20 63 61 6c 6c 65 72 20 28 6d 65 n the caller (me
44d0: 74 68 6f 64 20 70 75 73 68 74 6f 29 2e 20 54 68 thod pushto). Th
44e0: 69 73 0a 09 23 20 66 6c 61 67 20 63 61 6e 20 74 is..# flag can t
44f0: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 he generation of
4500: 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65 20 66 the workspace f
4510: 6f 72 20 74 68 65 20 3a 74 72 75 6e 6b 3a 20 4c or the :trunk: L
4520: 4f 44 0a 09 23 20 61 73 20 77 65 6c 6c 2c 20 6d OD..# as well, m
4530: 61 6b 69 6e 67 20 69 74 20 69 6e 68 65 72 69 74 aking it inherit
4540: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 the state of th
4550: 65 20 6c 61 73 74 0a 09 23 20 74 72 75 6e 6b 2d e last..# trunk-
4560: 63 68 61 6e 67 65 73 65 74 20 6f 6e 20 74 68 65 changeset on the
4570: 20 76 65 6e 64 6f 72 2d 62 72 61 6e 63 68 2e 0a vendor-branch..
4580: 0a 09 69 66 20 7b 24 69 73 64 65 66 61 75 6c 74 ..if {$isdefault
4590: 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b 24 } {.. if {![$
45a0: 72 73 74 61 74 65 20 68 61 73 20 22 3a 76 65 6e rstate has ":ven
45b0: 64 6f 72 3a 22 5d 7d 20 7b 0a 09 09 23 20 43 72 dor:"]} {...# Cr
45c0: 65 61 74 65 20 74 68 65 20 76 65 6e 64 6f 72 20 eate the vendor
45d0: 62 72 61 6e 63 68 20 69 66 20 6e 6f 74 20 70 72 branch if not pr
45e0: 65 73 65 6e 74 20 61 6c 72 65 61 64 79 2e 0a 09 esent already...
45f0: 09 24 72 73 74 61 74 65 20 6e 65 77 20 3a 76 65 .$rstate new :ve
4600: 6e 64 6f 72 3a 0a 09 20 20 20 20 7d 0a 09 20 20 ndor:.. }..
4610: 20 20 23 20 4d 65 72 67 65 20 74 68 65 20 6e 65 # Merge the ne
4620: 77 20 73 79 6d 62 6f 6c 20 74 6f 20 74 68 65 20 w symbol to the
4630: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 0a 09 20 vendor branch..
4640: 20 20 20 24 72 73 74 61 74 65 20 64 75 70 20 24 $rstate dup $
4650: 6c 6f 64 6e 61 6d 65 20 3c 2d 2d 20 3a 76 65 6e lodname <-- :ven
4660: 64 6f 72 3a 0a 09 20 20 20 20 72 65 74 75 72 6e dor:.. return
4670: 20 5b 24 72 73 74 61 74 65 20 67 65 74 20 24 6c [$rstate get $l
4680: 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 69 66 20 odname]..}...if
4690: 7b 24 6c 6f 64 6e 61 6d 65 20 65 71 20 22 3a 74 {$lodname eq ":t
46a0: 72 75 6e 6b 3a 22 7d 20 7b 0a 09 20 20 20 20 72 runk:"} {.. r
46b0: 65 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 6e eturn [$rstate n
46c0: 65 77 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a ew $lodname]..}.
46d0: 0a 09 23 20 43 61 73 65 20 28 63 29 2e 20 57 65 ..# Case (c). We
46e0: 20 66 69 6e 64 20 74 68 65 20 70 61 72 65 6e 74 find the parent
46f0: 20 4c 4f 44 20 6f 66 20 6f 75 72 20 4c 4f 44 20 LOD of our LOD
4700: 61 6e 64 20 6c 65 74 20 74 68 65 20 6e 65 77 0a and let the new.
4710: 09 23 20 77 6f 72 6b 73 70 61 63 65 20 69 6e 68 .# workspace inh
4720: 65 72 69 74 20 66 72 6f 6d 20 74 68 65 20 70 61 erit from the pa
4730: 72 65 6e 74 27 73 20 77 6f 72 6b 73 70 61 63 65 rent's workspace
4740: 2e 0a 0a 09 73 65 74 20 70 6c 6f 64 6e 61 6d 65 ....set plodname
4750: 20 5b 5b 5b 24 70 72 6f 6a 65 63 74 20 67 65 74 [[[$project get
4760: 73 79 6d 62 6f 6c 20 24 6c 6f 64 6e 61 6d 65 5d symbol $lodname]
4770: 20 70 61 72 65 6e 74 5d 20 6e 61 6d 65 5d 0a 0a parent] name]..
4780: 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 .log write 8 cse
4790: 74 73 20 7b 70 4c 4f 44 20 20 20 27 24 70 6c 6f ts {pLOD '$plo
47a0: 64 6e 61 6d 65 27 7d 0a 0a 09 69 66 20 7b 5b 24 dname'}...if {[$
47b0: 72 73 74 61 74 65 20 68 61 73 20 24 70 6c 6f 64 rstate has $plod
47c0: 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 72 65 name]} {.. re
47d0: 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 6e 65 turn [$rstate ne
47e0: 77 20 24 6c 6f 64 6e 61 6d 65 20 24 70 6c 6f 64 w $lodname $plod
47f0: 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 66 6f 72 65 61 name]..}...forea
4800: 63 68 20 6b 20 5b 6c 73 6f 72 74 20 5b 24 72 73 ch k [lsort [$rs
4810: 74 61 74 65 20 6e 61 6d 65 73 5d 5d 20 7b 0a 09 tate names]] {..
4820: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 log write 8
4830: 63 73 65 74 73 20 7b 20 20 20 20 24 6b 20 3d 20 csets { $k =
4840: 5b 5b 24 72 73 74 61 74 65 20 67 65 74 20 24 6b [[$rstate get $k
4850: 5d 20 67 65 74 69 64 5d 7d 0a 09 7d 0a 0a 09 74 ] getid]}..}...t
4860: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 rouble internal
4870: 7b 55 6e 61 62 6c 65 20 74 6f 20 64 65 74 65 72 {Unable to deter
4880: 6d 69 6e 65 20 63 68 61 6e 67 65 73 65 74 20 70 mine changeset p
4890: 61 72 65 6e 74 7d 0a 09 72 65 74 75 72 6e 0a 20 arent}..return.
48a0: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 47 }.. proc G
48b0: 65 74 69 73 64 65 66 61 75 6c 74 20 7b 72 65 76 etisdefault {rev
48c0: 69 73 69 6f 6e 73 7d 20 7b 0a 09 73 65 74 20 74 isions} {..set t
48d0: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 heset ('[join $r
48e0: 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 evisions {','}]'
48f0: 29 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 )...struct::list
4900: 20 61 73 73 69 67 6e 20 5b 73 74 61 74 65 20 72 assign [state r
4910: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
4920: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
4930: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
4940: 43 54 20 52 2e 69 73 64 65 66 61 75 6c 74 2c 20 CT R.isdefault,
4950: 52 2e 64 62 63 68 69 6c 64 0a 09 20 20 20 20 46 R.dbchild.. F
4960: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R
4970: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 .. WHERE R.r
4980: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 2d id IN $theset -
4990: 2d 20 41 6c 6c 20 73 70 65 63 69 66 69 65 64 20 - All specified
49a0: 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 20 4c revisions.. L
49b0: 49 4d 49 54 20 31 0a 09 7d 5d 5d 20 64 65 66 20 IMIT 1..}]] def
49c0: 6c 61 73 74 0a 0a 09 23 20 54 4f 44 4f 2f 43 48 last...# TODO/CH
49d0: 45 43 4b 3a 20 6c 6f 6f 6b 20 66 6f 72 20 63 68 ECK: look for ch
49e0: 61 6e 67 65 73 65 74 73 20 77 68 65 72 65 20 69 angesets where i
49f0: 73 64 65 66 61 75 6c 74 2f 64 62 63 68 69 6c 64 sdefault/dbchild
4a00: 20 69 73 0a 09 23 20 61 6d 62 69 67 6f 75 73 2e is..# ambigous.
4a10: 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 ...return [list
4a20: 24 64 65 66 20 5b 65 78 70 72 20 7b 24 6c 61 73 $def [expr {$las
4a30: 74 20 6e 65 20 22 22 7d 5d 5d 0a 20 20 20 20 7d t ne ""}]]. }
4a40: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
4a50: 20 73 70 6c 69 74 20 7b 63 73 65 74 20 61 72 67 split {cset arg
4a60: 73 7d 20 7b 0a 09 23 20 41 73 20 70 61 72 74 20 s} {..# As part
4a70: 6f 66 20 74 68 65 20 63 72 65 61 74 69 6f 6e 20 of the creation
4a80: 6f 66 20 74 68 65 20 6e 65 77 20 63 68 61 6e 67 of the new chang
4a90: 65 73 65 74 73 20 73 70 65 63 69 66 69 65 64 20 esets specified
4aa0: 69 6e 0a 09 23 20 41 52 47 53 20 61 73 20 73 65 in..# ARGS as se
4ab0: 74 73 20 6f 66 20 69 74 65 6d 73 2c 20 61 6c 6c ts of items, all
4ac0: 20 73 75 62 73 65 74 73 20 6f 66 20 43 53 45 54 subsets of CSET
4ad0: 27 73 20 69 74 65 6d 20 73 65 74 2c 20 43 53 45 's item set, CSE
4ae0: 54 0a 09 23 20 77 69 6c 6c 20 62 65 20 64 72 6f T..# will be dro
4af0: 70 70 65 64 20 66 72 6f 6d 20 61 6c 6c 20 64 61 pped from all da
4b00: 74 61 62 61 73 65 73 2c 20 69 6e 20 61 6e 64 20 tabases, in and
4b10: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2c 0a 09 out of memory,..
4b20: 23 20 61 6e 64 20 74 68 65 6e 20 64 65 73 74 72 # and then destr
4b30: 6f 79 65 64 2e 0a 09 23 0a 09 23 20 4e 6f 74 65 oyed...#..# Note
4b40: 3a 20 54 68 65 20 69 74 65 6d 20 6c 69 73 74 73 : The item lists
4b50: 20 66 6f 75 6e 64 20 69 6e 20 61 72 67 73 20 61 found in args a
4b60: 72 65 20 74 61 67 67 65 64 20 69 74 65 6d 73 2e re tagged items.
4b70: 20 54 68 65 79 0a 09 23 20 68 61 76 65 20 74 6f They..# have to
4b80: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 74 have the same t
4b90: 79 70 65 20 61 73 20 74 68 65 20 63 68 61 6e 67 ype as the chang
4ba0: 65 73 65 74 2c 20 62 65 69 6e 67 20 73 75 62 73 eset, being subs
4bb0: 65 74 73 0a 09 23 20 6f 66 20 69 74 73 20 69 74 ets..# of its it
4bc0: 65 6d 73 2e 20 54 68 69 73 20 69 73 20 63 68 65 ems. This is che
4bd0: 63 6b 65 64 20 69 6e 20 55 6e 74 61 67 31 2e 0a cked in Untag1..
4be0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 ..log write 8 cs
4bf0: 65 74 73 20 7b 4f 4c 44 3a 20 5b 6c 73 6f 72 74 ets {OLD: [lsort
4c00: 20 5b 24 63 73 65 74 20 69 74 65 6d 73 5d 5d 7d [$cset items]]}
4c10: 0a 09 56 61 6c 69 64 61 74 65 46 72 61 67 6d 65 ..ValidateFragme
4c20: 6e 74 73 20 24 63 73 65 74 20 24 61 72 67 73 0a nts $cset $args.
4c30: 0a 09 23 20 41 6c 6c 20 63 68 65 63 6b 73 20 70 ..# All checks p
4c40: 61 73 73 2c 20 61 63 74 75 61 6c 6c 79 20 70 65 ass, actually pe
4c50: 72 66 6f 72 6d 20 74 68 65 20 73 70 6c 69 74 2e rform the split.
4c60: 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 ...struct::list
4c70: 61 73 73 69 67 6e 20 5b 24 63 73 65 74 20 64 61 assign [$cset da
4c80: 74 61 5d 20 70 72 6f 6a 65 63 74 20 63 73 74 79 ta] project csty
4c90: 70 65 20 63 73 73 72 63 0a 0a 09 73 65 74 20 70 pe cssrc...set p
4ca0: 72 65 64 65 63 65 73 73 6f 72 73 20 5b 24 63 73 redecessors [$cs
4cb0: 65 74 20 64 72 6f 70 5d 0a 09 24 63 73 65 74 20 et drop]..$cset
4cc0: 64 65 73 74 72 6f 79 0a 0a 09 73 65 74 20 6e 65 destroy...set ne
4cd0: 77 63 73 65 74 73 20 7b 7d 0a 09 66 6f 72 65 61 wcsets {}..forea
4ce0: 63 68 20 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 ch fragmentitems
4cf0: 20 24 61 72 67 73 20 7b 0a 09 20 20 20 20 6c 6f $args {.. lo
4d00: 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 g write 8 csets
4d10: 7b 4d 41 4b 45 3a 20 5b 6c 73 6f 72 74 20 24 66 {MAKE: [lsort $f
4d20: 72 61 67 6d 65 6e 74 69 74 65 6d 73 5d 7d 0a 0a ragmentitems]}..
4d30: 09 20 20 20 20 73 65 74 20 66 72 61 67 6d 65 6e . set fragmen
4d40: 74 20 5b 24 74 79 70 65 20 25 41 55 54 4f 25 20 t [$type %AUTO%
4d50: 24 70 72 6f 6a 65 63 74 20 24 63 73 74 79 70 65 $project $cstype
4d60: 20 24 63 73 73 72 63 20 5c 0a 09 09 09 20 20 20 $cssrc \....
4d70: 20 20 20 5b 55 6e 74 61 67 20 24 66 72 61 67 6d [Untag $fragm
4d80: 65 6e 74 69 74 65 6d 73 20 24 63 73 74 79 70 65 entitems $cstype
4d90: 5d 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 ]].. lappend
4da0: 6e 65 77 63 73 65 74 73 20 24 66 72 61 67 6d 65 newcsets $fragme
4db0: 6e 74 0a 0a 09 20 20 20 20 24 66 72 61 67 6d 65 nt... $fragme
4dc0: 6e 74 20 70 65 72 73 69 73 74 0a 09 20 20 20 20 nt persist..
4dd0: 24 66 72 61 67 6d 65 6e 74 20 64 65 74 65 72 6d $fragment determ
4de0: 69 6e 65 73 75 63 63 65 73 73 6f 72 73 0a 09 7d inesuccessors..}
4df0: 0a 0a 09 23 20 54 68 65 20 70 72 65 64 65 63 65 ...# The predece
4e00: 73 73 6f 72 73 20 68 61 76 65 20 74 6f 20 72 65 ssors have to re
4e10: 63 6f 6d 70 75 74 65 20 74 68 65 69 72 20 73 75 compute their su
4e20: 63 63 65 73 73 6f 72 73 2c 20 69 2e 65 2e 0a 09 ccessors, i.e...
4e30: 23 20 72 65 6d 6f 76 65 20 74 68 65 20 64 72 6f # remove the dro
4e40: 70 70 65 64 20 63 68 61 6e 67 65 73 65 74 20 61 pped changeset a
4e50: 6e 64 20 70 75 74 20 6f 6e 65 20 6f 66 20 74 68 nd put one of th
4e60: 65 20 66 72 61 67 6d 65 6e 74 73 0a 09 23 20 69 e fragments..# i
4e70: 6e 74 6f 20 69 74 73 20 70 6c 61 63 65 2e 0a 09 nto its place...
4e80: 66 6f 72 65 61 63 68 20 70 20 24 70 72 65 64 65 foreach p $prede
4e90: 63 65 73 73 6f 72 73 20 7b 0a 09 20 20 20 20 24 cessors {.. $
4ea0: 70 20 64 65 74 65 72 6d 69 6e 65 73 75 63 63 65 p determinesucce
4eb0: 73 73 6f 72 73 0a 09 7d 0a 0a 09 72 65 74 75 72 ssors..}...retur
4ec0: 6e 20 24 6e 65 77 63 73 65 74 73 0a 20 20 20 20 n $newcsets.
4ed0: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }.. typemetho
4ee0: 64 20 69 74 65 6d 73 74 72 20 7b 69 74 65 6d 7d d itemstr {item}
4ef0: 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 {..struct::list
4f00: 20 61 73 73 69 67 6e 20 24 69 74 65 6d 20 69 74 assign $item it
4f10: 79 70 65 20 69 69 64 0a 09 72 65 74 75 72 6e 20 ype iid..return
4f20: 5b 24 69 74 79 70 65 20 73 74 72 20 24 69 69 64 [$itype str $iid
4f30: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 ]. }.. typ
4f40: 65 6d 65 74 68 6f 64 20 73 74 72 6c 69 73 74 20 emethod strlist
4f50: 7b 63 68 61 6e 67 65 73 65 74 73 7d 20 7b 0a 09 {changesets} {..
4f60: 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b 73 74 return [join [st
4f70: 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 24 ruct::list map $
4f80: 63 68 61 6e 67 65 73 65 74 73 20 5b 6d 79 70 72 changesets [mypr
4f90: 6f 63 20 49 44 5d 5d 5d 0a 20 20 20 20 7d 0a 0a oc ID]]]. }..
4fa0: 20 20 20 20 70 72 6f 63 20 49 44 20 7b 63 73 65 proc ID {cse
4fb0: 74 7d 20 7b 20 24 63 73 65 74 20 73 74 72 20 7d t} { $cset str }
4fc0: 0a 0a 20 20 20 20 70 72 6f 63 20 55 6e 74 61 67 .. proc Untag
4fd0: 20 7b 74 61 67 67 65 64 69 74 65 6d 73 20 63 73 {taggeditems cs
4fe0: 74 79 70 65 7d 20 7b 0a 09 72 65 74 75 72 6e 20 type} {..return
4ff0: 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 [struct::list ma
5000: 70 20 24 74 61 67 67 65 64 69 74 65 6d 73 20 5b p $taggeditems [
5010: 6d 79 70 72 6f 63 20 55 6e 74 61 67 31 20 24 63 myproc Untag1 $c
5020: 73 74 79 70 65 5d 5d 0a 20 20 20 20 7d 0a 0a 20 stype]]. }..
5030: 20 20 20 70 72 6f 63 20 55 6e 74 61 67 31 20 7b proc Untag1 {
5040: 63 73 74 79 70 65 20 74 68 65 69 74 65 6d 7d 20 cstype theitem}
5050: 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 {..struct::list
5060: 61 73 73 69 67 6e 20 24 74 68 65 69 74 65 6d 20 assign $theitem
5070: 74 20 69 0a 09 69 6e 74 65 67 72 69 74 79 20 61 t i..integrity a
5080: 73 73 65 72 74 20 7b 24 63 73 74 79 70 65 20 65 ssert {$cstype e
5090: 71 20 24 74 7d 20 7b 49 74 65 6d 20 24 69 27 73 q $t} {Item $i's
50a0: 20 74 79 70 65 20 69 73 20 27 24 74 27 2c 20 65 type is '$t', e
50b0: 78 70 65 63 74 65 64 20 27 24 63 73 74 79 70 65 xpected '$cstype
50c0: 27 7d 0a 09 72 65 74 75 72 6e 20 24 69 0a 20 20 '}..return $i.
50d0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 54 61 }.. proc Ta
50e0: 67 49 74 65 6d 44 69 63 74 20 7b 69 74 65 6d 64 gItemDict {itemd
50f0: 69 63 74 20 63 73 74 79 70 65 7d 20 7b 0a 09 73 ict cstype} {..s
5100: 65 74 20 72 65 73 20 7b 7d 0a 09 66 6f 72 65 61 et res {}..forea
5110: 63 68 20 7b 69 20 76 7d 20 24 69 74 65 6d 64 69 ch {i v} $itemdi
5120: 63 74 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 ct { lappend res
5130: 20 5b 6c 69 73 74 20 24 63 73 74 79 70 65 20 24 [list $cstype $
5140: 69 5d 20 24 76 20 7d 0a 09 72 65 74 75 72 6e 20 i] $v }..return
5150: 24 72 65 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 $res. }..
5160: 70 72 6f 63 20 56 61 6c 69 64 61 74 65 46 72 61 proc ValidateFra
5170: 67 6d 65 6e 74 73 20 7b 63 73 65 74 20 66 72 61 gments {cset fra
5180: 67 6d 65 6e 74 73 7d 20 7b 0a 09 23 20 43 68 65 gments} {..# Che
5190: 63 6b 20 74 68 65 20 76 61 72 69 6f 75 73 20 69 ck the various i
51a0: 6e 74 65 67 72 69 74 79 20 63 6f 6e 73 74 72 61 ntegrity constra
51b0: 69 6e 74 73 20 66 6f 72 20 74 68 65 20 66 72 61 ints for the fra
51c0: 67 6d 65 6e 74 73 0a 09 23 20 73 70 65 63 69 66 gments..# specif
51d0: 79 69 6e 67 20 68 6f 77 20 74 6f 20 73 70 6c 69 ying how to spli
51e0: 74 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 3a t the changeset:
51f0: 0a 09 23 0a 09 23 20 2a 20 57 65 20 6d 75 73 74 ..#..# * We must
5200: 20 68 61 76 65 20 74 77 6f 20 6f 72 20 6d 6f 72 have two or mor
5210: 65 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 73 20 e fragments, as
5220: 73 70 6c 69 74 74 69 6e 67 20 61 0a 09 23 20 20 splitting a..#
5230: 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 6f 20 changeset into
5240: 6f 6e 65 20 6d 61 6b 65 73 20 6e 6f 20 73 65 6e one makes no sen
5250: 73 65 2e 0a 09 23 20 2a 20 4e 6f 20 66 72 61 67 se...# * No frag
5260: 6d 65 6e 74 20 6d 61 79 20 62 65 20 65 6d 70 74 ment may be empt
5270: 79 2e 0a 09 23 20 2a 20 41 6c 6c 20 66 72 61 67 y...# * All frag
5280: 6d 65 6e 74 73 20 68 61 76 65 20 74 6f 20 62 65 ments have to be
5290: 20 74 72 75 65 20 73 75 62 73 65 74 73 20 6f 66 true subsets of
52a0: 20 74 68 65 20 69 74 65 6d 73 20 69 6e 20 74 68 the items in th
52b0: 65 0a 09 23 20 20 20 63 68 61 6e 67 65 73 65 74 e..# changeset
52c0: 20 74 6f 20 73 70 6c 69 74 2e 20 54 68 65 20 27 to split. The '
52d0: 74 72 75 65 27 20 69 73 20 69 6d 70 6c 69 65 64 true' is implied
52e0: 20 62 65 63 61 75 73 65 20 6e 6f 6e 65 20 61 72 because none ar
52f0: 65 0a 09 23 20 20 20 61 6c 6c 6f 77 65 64 20 74 e..# allowed t
5300: 6f 20 62 65 20 65 6d 70 74 79 2c 20 73 6f 20 65 o be empty, so e
5310: 61 63 68 20 68 61 73 20 74 6f 20 62 65 20 73 6d ach has to be sm
5320: 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 0a 09 aller than the..
5330: 23 20 20 20 74 6f 74 61 6c 2e 0a 09 23 20 2a 20 # total...# *
5340: 54 68 65 20 75 6e 69 6f 6e 20 6f 66 20 74 68 65 The union of the
5350: 20 66 72 61 67 6d 65 6e 74 73 20 68 61 73 20 74 fragments has t
5360: 6f 20 62 65 20 74 68 65 20 69 74 65 6d 20 73 65 o be the item se
5370: 74 20 6f 66 20 74 68 65 0a 09 23 20 20 20 63 68 t of the..# ch
5380: 61 6e 67 65 73 65 74 2e 0a 09 23 20 2a 20 54 68 angeset...# * Th
5390: 65 20 66 72 61 67 6d 65 6e 74 20 6d 75 73 74 20 e fragment must
53a0: 6e 6f 74 20 6f 76 65 72 6c 61 70 2c 20 69 2e 65 not overlap, i.e
53b0: 2e 20 74 68 65 69 72 20 70 61 69 72 77 69 73 65 . their pairwise
53c0: 0a 09 23 20 20 20 69 6e 74 65 72 73 65 63 74 69 ..# intersecti
53d0: 6f 6e 73 20 68 61 76 65 20 74 6f 20 62 65 20 65 ons have to be e
53e0: 6d 70 74 79 2e 0a 0a 09 73 65 74 20 63 6f 76 65 mpty....set cove
53f0: 72 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 66 72 r {}..foreach fr
5400: 61 67 6d 65 6e 74 69 74 65 6d 73 20 24 66 72 61 agmentitems $fra
5410: 67 6d 65 6e 74 73 20 7b 0a 09 20 20 20 20 6c 6f gments {.. lo
5420: 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 g write 8 csets
5430: 7b 4e 45 57 3a 20 5b 6c 73 6f 72 74 20 24 66 72 {NEW: [lsort $fr
5440: 61 67 6d 65 6e 74 69 74 65 6d 73 5d 7d 0a 0a 09 agmentitems]}...
5450: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 integrity as
5460: 73 65 72 74 20 7b 0a 09 09 21 5b 73 74 72 75 63 sert {...![struc
5470: 74 3a 3a 73 65 74 20 65 6d 70 74 79 20 24 66 72 t::set empty $fr
5480: 61 67 6d 65 6e 74 69 74 65 6d 73 5d 0a 09 20 20 agmentitems]..
5490: 20 20 7d 20 7b 63 68 61 6e 67 65 73 65 74 20 66 } {changeset f
54a0: 72 61 67 6d 65 6e 74 20 69 73 20 65 6d 70 74 79 ragment is empty
54b0: 7d 0a 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 }... integrit
54c0: 79 20 61 73 73 65 72 74 20 7b 0a 09 09 5b 73 74 y assert {...[st
54d0: 72 75 63 74 3a 3a 73 65 74 20 73 75 62 73 65 74 ruct::set subset
54e0: 6f 66 20 24 66 72 61 67 6d 65 6e 74 69 74 65 6d of $fragmentitem
54f0: 73 20 5b 24 63 73 65 74 20 69 74 65 6d 73 5d 5d s [$cset items]]
5500: 0a 09 20 20 20 20 7d 20 7b 63 68 61 6e 67 65 73 .. } {changes
5510: 65 74 20 66 72 61 67 6d 65 6e 74 20 69 73 20 6e et fragment is n
5520: 6f 74 20 61 20 73 75 62 73 65 74 7d 0a 09 20 20 ot a subset}..
5530: 20 20 73 74 72 75 63 74 3a 3a 73 65 74 20 61 64 struct::set ad
5540: 64 20 63 6f 76 65 72 20 24 66 72 61 67 6d 65 6e d cover $fragmen
5550: 74 69 74 65 6d 73 0a 09 7d 0a 0a 09 69 6e 74 65 titems..}...inte
5560: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 grity assert {..
5570: 20 20 20 20 5b 73 74 72 75 63 74 3a 3a 73 65 74 [struct::set
5580: 20 65 71 75 61 6c 20 24 63 6f 76 65 72 20 5b 24 equal $cover [$
5590: 63 73 65 74 20 69 74 65 6d 73 5d 5d 0a 09 20 7d cset items]].. }
55a0: 20 7b 54 68 65 20 66 72 61 67 6d 65 6e 74 73 20 {The fragments
55b0: 64 6f 20 6e 6f 74 20 63 6f 76 65 72 20 74 68 65 do not cover the
55c0: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 original change
55d0: 73 65 74 7d 0a 0a 09 73 65 74 20 69 20 31 0a 09 set}...set i 1..
55e0: 66 6f 72 65 61 63 68 20 66 69 61 20 24 66 72 61 foreach fia $fra
55f0: 67 6d 65 6e 74 73 20 7b 0a 09 20 20 20 20 66 6f gments {.. fo
5600: 72 65 61 63 68 20 66 69 62 20 5b 6c 72 61 6e 67 reach fib [lrang
5610: 65 20 24 66 72 61 67 6d 65 6e 74 73 20 24 69 20 e $fragments $i
5620: 65 6e 64 5d 20 7b 0a 09 09 69 6e 74 65 67 72 69 end] {...integri
5630: 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 20 20 ty assert {...
5640: 20 20 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 65 [struct::set e
5650: 6d 70 74 79 20 5b 73 74 72 75 63 74 3a 3a 73 65 mpty [struct::se
5660: 74 20 69 6e 74 65 72 73 65 63 74 20 24 66 69 61 t intersect $fia
5670: 20 24 66 69 62 5d 5d 0a 09 09 7d 20 7b 54 68 65 $fib]]...} {The
5680: 20 66 72 61 67 6d 65 6e 74 73 20 3c 24 66 69 61 fragments <$fia
5690: 3e 20 61 6e 64 20 3c 24 66 69 62 3e 20 6f 76 65 > and <$fib> ove
56a0: 72 6c 61 70 7d 0a 09 20 20 20 20 7d 0a 09 20 20 rlap}.. }..
56b0: 20 20 69 6e 63 72 20 69 0a 09 7d 0a 0a 09 72 65 incr i..}...re
56c0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
56d0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
56e0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
56f0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 #######. ## S
5700: 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69 61 62 tate.. variab
5710: 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20 20 7b le myid {
5720: 7d 20 3b 20 23 20 49 64 20 6f 66 20 74 68 65 20 } ; # Id of the
5730: 63 73 65 74 20 66 6f 72 20 74 68 65 20 70 65 72 cset for the per
5740: 73 69 73 74 65 6e 74 0a 09 09 09 20 20 20 20 20 sistent....
5750: 20 23 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61 # state.. va
5760: 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65 63 74 riable myproject
5770: 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 {} ; # Refere
5780: 6e 63 65 20 6f 66 20 74 68 65 20 70 72 6f 6a 65 nce of the proje
5790: 63 74 20 6f 62 6a 65 63 74 20 74 68 65 0a 09 09 ct object the...
57a0: 09 20 20 20 20 20 20 23 20 63 68 61 6e 67 65 73 . # changes
57b0: 65 74 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 et belongs to..
57c0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 79 variable myty
57d0: 70 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 57 pe {} ; # W
57e0: 68 61 74 20 74 68 65 20 63 68 61 6e 67 65 73 65 hat the changese
57f0: 74 20 69 73 20 62 61 73 65 64 20 6f 6e 0a 09 09 t is based on...
5800: 09 20 20 20 20 20 20 23 20 28 72 65 76 69 73 69 . # (revisi
5810: 6f 6e 73 2c 20 74 61 67 73 2c 20 6f 72 20 62 72 ons, tags, or br
5820: 61 6e 63 68 65 73 29 2e 0a 09 09 09 20 20 20 20 anches).....
5830: 20 20 23 20 56 61 6c 75 65 73 3a 20 53 65 65 20 # Values: See
5840: 6d 79 63 73 74 79 70 65 2e 20 4e 6f 74 65 20 74 mycstype. Note t
5850: 68 61 74 20 77 65 0a 09 09 09 20 20 20 20 20 20 hat we....
5860: 23 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 74 # have to keep t
5870: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 he names of the
5880: 68 65 6c 70 65 72 0a 09 09 09 20 20 20 20 20 20 helper....
5890: 23 20 73 69 6e 67 6c 65 74 6f 6e 73 20 69 6e 20 # singletons in
58a0: 73 79 6e 63 20 77 69 74 68 20 74 68 65 20 63 6f sync with the co
58b0: 6e 74 65 6e 74 73 0a 09 09 09 20 20 20 20 20 20 ntents....
58c0: 23 20 6f 66 20 73 74 61 74 65 20 74 61 62 6c 65 # of state table
58d0: 20 27 63 73 74 79 70 65 27 2c 20 61 6e 64 20 76 'cstype', and v
58e0: 61 72 69 6f 75 73 0a 09 09 09 20 20 20 20 20 20 arious....
58f0: 23 20 6f 74 68 65 72 20 70 6c 61 63 65 73 20 75 # other places u
5900: 73 69 6e 67 20 74 68 65 6d 20 68 61 72 64 77 69 sing them hardwi
5910: 72 65 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c red.. variabl
5920: 65 20 6d 79 74 79 70 65 6f 62 6a 20 20 20 7b 7d e mytypeobj {}
5930: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 ; # Reference t
5940: 6f 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 o the container
5950: 66 6f 72 20 74 68 65 0a 09 09 09 20 20 20 20 20 for the....
5960: 20 23 20 74 79 70 65 20 64 65 70 65 6e 64 65 6e # type dependen
5970: 74 20 63 6f 64 65 2e 20 44 65 72 69 76 65 64 20 t code. Derived
5980: 66 72 6f 6d 0a 09 09 09 20 20 20 20 20 20 23 20 from.... #
5990: 6d 79 74 79 70 65 2e 0a 20 20 20 20 76 61 72 69 mytype.. vari
59a0: 61 62 6c 65 20 6d 79 73 72 63 69 64 20 20 20 20 able mysrcid
59b0: 20 7b 7d 20 3b 20 23 20 49 64 20 6f 66 20 74 68 {} ; # Id of th
59c0: 65 20 6d 65 74 61 64 61 74 61 20 6f 72 20 73 79 e metadata or sy
59d0: 6d 62 6f 6c 20 74 68 65 20 63 73 65 74 0a 09 09 mbol the cset...
59e0: 09 20 20 20 20 20 20 23 20 69 73 20 62 61 73 65 . # is base
59f0: 64 20 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 d on.. variab
5a00: 6c 65 20 6d 79 69 74 65 6d 73 20 20 20 20 20 7b le myitems {
5a10: 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 74 68 } ; # List of th
5a20: 65 20 66 69 6c 65 20 6c 65 76 65 6c 20 72 65 76 e file level rev
5a30: 69 73 69 6f 6e 73 2c 0a 09 09 09 20 20 20 20 20 isions,....
5a40: 20 23 20 74 61 67 73 2c 20 6f 72 20 62 72 61 6e # tags, or bran
5a50: 63 68 65 73 20 69 6e 20 74 68 65 20 63 73 65 74 ches in the cset
5a60: 2c 20 61 73 0a 09 09 09 20 20 20 20 20 20 23 20 , as.... #
5a70: 69 64 73 2e 20 4e 6f 74 20 74 61 67 67 65 64 2e ids. Not tagged.
5a80: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
5a90: 74 69 74 65 6d 73 20 20 20 20 7b 7d 20 3b 20 23 titems {} ; #
5aa0: 20 41 73 20 6d 79 69 74 65 6d 73 2c 20 74 68 65 As myitems, the
5ab0: 20 74 61 67 67 65 64 20 66 6f 72 6d 2e 0a 20 20 tagged form..
5ac0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 6f 73 variable mypos
5ad0: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 43 6f {} ; # Co
5ae0: 6d 6d 69 74 20 70 6f 73 69 74 69 6f 6e 20 6f 66 mmit position of
5af0: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 2c 20 the changeset,
5b00: 69 66 0a 09 09 09 20 20 20 20 20 20 23 20 6b 6e if.... # kn
5b10: 6f 77 6e 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 own... # # ##
5b20: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
5b30: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
5b40: 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 #. ## Interna
5b50: 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 74 l methods.. t
5b60: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 63 6f ypevariable myco
5b70: 75 6e 74 65 72 20 20 20 20 20 20 20 20 30 20 3b unter 0 ;
5b80: 20 23 20 49 64 20 63 6f 75 6e 74 65 72 20 66 6f # Id counter fo
5b90: 72 20 63 73 65 74 73 2e 20 4c 61 73 74 20 69 64 r csets. Last id
5ba0: 0a 09 09 09 09 20 20 20 20 20 20 23 20 75 73 65 ..... # use
5bb0: 64 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 d.. typevaria
5bc0: 62 6c 65 20 6d 79 63 73 74 79 70 65 20 2d 61 72 ble mycstype -ar
5bd0: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 63 ray {} ; # Map c
5be0: 73 74 79 70 65 73 20 28 6e 61 6d 65 73 29 20 74 stypes (names) t
5bf0: 6f 20 70 65 72 73 69 73 74 65 6e 74 0a 09 09 09 o persistent....
5c00: 09 20 20 20 20 20 20 23 20 69 64 73 2e 20 4e 6f . # ids. No
5c10: 74 65 20 74 68 61 74 20 77 65 20 68 61 76 65 20 te that we have
5c20: 74 6f 20 6b 65 65 70 0a 09 09 09 09 20 20 20 20 to keep.....
5c30: 20 20 23 20 74 68 65 20 6e 61 6d 65 73 20 69 6e # the names in
5c40: 20 74 68 65 20 74 61 62 6c 65 20 27 63 73 74 79 the table 'csty
5c50: 70 65 27 0a 09 09 09 09 20 20 20 20 20 20 23 20 pe'..... #
5c60: 69 6e 20 73 79 6e 63 20 77 69 74 68 20 74 68 65 in sync with the
5c70: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 0a 09 09 names of the...
5c80: 09 09 20 20 20 20 20 20 23 20 68 65 6c 70 65 72 .. # helper
5c90: 20 73 69 6e 67 6c 65 74 6f 6e 73 2e 0a 0a 20 20 singletons...
5ca0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 6e 6f typemethod ino
5cb0: 72 64 65 72 20 7b 70 72 6f 6a 65 63 74 69 64 7d rder {projectid}
5cc0: 20 7b 0a 09 23 20 52 65 74 75 72 6e 20 61 6c 6c {..# Return all
5cd0: 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 revision change
5ce0: 73 65 74 73 20 66 6f 72 20 74 68 65 20 73 70 65 sets for the spe
5cf0: 63 69 66 69 65 64 20 70 72 6f 6a 65 63 74 2c 20 cified project,
5d00: 69 6e 0a 09 23 20 74 68 65 20 6f 72 64 65 72 20 in..# the order
5d10: 67 69 76 65 6e 20 74 6f 20 74 68 65 6d 20 62 79 given to them by
5d20: 20 74 68 65 20 73 6f 72 74 20 70 61 73 73 65 73 the sort passes
5d30: 2e 20 42 6f 74 68 20 74 68 65 0a 09 23 20 66 69 . Both the..# fi
5d40: 6c 74 65 72 69 6e 67 20 62 79 20 70 72 6f 6a 65 ltering by proje
5d50: 63 74 20 61 6e 64 20 73 6f 72 74 69 6e 67 20 6d ct and sorting m
5d60: 61 6b 65 20 75 73 65 20 6f 66 20 27 70 72 6f 6a ake use of 'proj
5d70: 65 63 74 3a 3a 72 65 76 0a 09 23 20 72 65 76 27 ect::rev..# rev'
5d80: 20 69 6d 70 6f 73 73 69 62 6c 65 2e 0a 0a 09 73 impossible....s
5d90: 65 74 20 72 65 73 20 7b 7d 0a 09 66 6f 72 65 61 et res {}..forea
5da0: 63 68 20 7b 63 69 64 20 63 64 61 74 65 7d 20 5b ch {cid cdate} [
5db0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 state run {..
5dc0: 20 53 45 4c 45 43 54 20 43 2e 63 69 64 2c 20 54 SELECT C.cid, T
5dd0: 2e 64 61 74 65 0a 09 20 20 20 20 46 52 4f 4d 20 .date.. FROM
5de0: 20 20 63 68 61 6e 67 65 73 65 74 20 43 2c 20 63 changeset C, c
5df0: 73 74 69 6d 65 73 74 61 6d 70 20 54 0a 09 20 20 stimestamp T..
5e00: 20 20 57 48 45 52 45 20 20 43 2e 74 79 70 65 20 WHERE C.type
5e10: 3d 20 30 20 20 20 20 20 20 20 20 20 20 2d 2d 20 = 0 --
5e20: 6c 69 6d 69 74 20 74 6f 20 72 65 76 69 73 69 6f limit to revisio
5e30: 6e 20 63 68 61 6e 67 65 73 65 74 73 0a 09 20 20 n changesets..
5e40: 20 20 41 4e 44 20 20 20 20 43 2e 70 69 64 20 20 AND C.pid
5e50: 3d 20 24 70 72 6f 6a 65 63 74 69 64 20 2d 2d 20 = $projectid --
5e60: 6c 69 6d 69 74 20 74 6f 20 63 68 61 6e 67 65 73 limit to changes
5e70: 65 74 73 20 69 6e 20 70 72 6f 6a 65 63 74 0a 09 ets in project..
5e80: 20 20 20 20 41 4e 44 20 20 20 20 54 2e 63 69 64 AND T.cid
5e90: 20 20 3d 20 43 2e 63 69 64 20 20 20 20 20 20 2d = C.cid -
5ea0: 2d 20 67 65 74 20 6f 72 64 65 72 69 6e 67 20 69 - get ordering i
5eb0: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 09 20 20 20 20 nformation..
5ec0: 4f 52 44 45 52 20 42 59 20 54 2e 64 61 74 65 20 ORDER BY T.date
5ed0: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 73 6f -- so
5ee0: 72 74 20 69 6e 74 6f 20 63 6f 6d 6d 69 74 20 6f rt into commit o
5ef0: 72 64 65 72 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 rder..}] {..
5f00: 6c 61 70 70 65 6e 64 20 72 65 73 20 24 6d 79 69 lappend res $myi
5f10: 64 6d 61 70 28 24 63 69 64 29 20 24 63 64 61 74 dmap($cid) $cdat
5f20: 65 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 72 65 e..}..return $re
5f30: 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 s. }.. typ
5f40: 65 6d 65 74 68 6f 64 20 67 65 74 63 73 74 79 70 emethod getcstyp
5f50: 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 es {} {..foreach
5f60: 20 7b 74 69 64 20 6e 61 6d 65 7d 20 5b 73 74 61 {tid name} [sta
5f70: 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 te run {.. SE
5f80: 4c 45 43 54 20 74 69 64 2c 20 6e 61 6d 65 20 46 LECT tid, name F
5f90: 52 4f 4d 20 63 73 74 79 70 65 3b 0a 09 7d 5d 20 ROM cstype;..}]
5fa0: 7b 20 73 65 74 20 6d 79 63 73 74 79 70 65 28 24 { set mycstype($
5fb0: 6e 61 6d 65 29 20 24 74 69 64 20 7d 0a 09 72 65 name) $tid }..re
5fc0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
5fd0: 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 61 64 20 typemethod load
5fe0: 7b 72 65 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 {repository} {..
5ff0: 73 65 74 20 6e 20 30 0a 09 6c 6f 67 20 77 72 69 set n 0..log wri
6000: 74 65 20 32 20 63 73 65 74 73 20 7b 4c 6f 61 64 te 2 csets {Load
6010: 69 6e 67 20 74 68 65 20 63 68 61 6e 67 65 73 65 ing the changese
6020: 74 73 7d 0a 09 66 6f 72 65 61 63 68 20 7b 69 64 ts}..foreach {id
6030: 20 70 69 64 20 63 73 74 79 70 65 20 73 72 63 69 pid cstype srci
6040: 64 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a d} [state run {.
6050: 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 . SELECT C.ci
6060: 64 2c 20 43 2e 70 69 64 2c 20 43 53 2e 6e 61 6d d, C.pid, CS.nam
6070: 65 2c 20 43 2e 73 72 63 0a 09 20 20 20 20 46 52 e, C.src.. FR
6080: 4f 4d 20 20 20 63 68 61 6e 67 65 73 65 74 20 43 OM changeset C
6090: 2c 20 63 73 74 79 70 65 20 43 53 0a 09 20 20 20 , cstype CS..
60a0: 20 57 48 45 52 45 20 20 43 2e 74 79 70 65 20 3d WHERE C.type =
60b0: 20 43 53 2e 74 69 64 0a 09 20 20 20 20 4f 52 44 CS.tid.. ORD
60c0: 45 52 20 42 59 20 43 2e 63 69 64 0a 09 7d 5d 20 ER BY C.cid..}]
60d0: 7b 0a 09 20 20 20 20 6c 6f 67 20 70 72 6f 67 72 {.. log progr
60e0: 65 73 73 20 32 20 63 73 65 74 73 20 24 6e 20 7b ess 2 csets $n {
60f0: 7d 0a 09 20 20 20 20 73 65 74 20 72 20 5b 24 74 }.. set r [$t
6100: 79 70 65 20 25 41 55 54 4f 25 20 5b 24 72 65 70 ype %AUTO% [$rep
6110: 6f 73 69 74 6f 72 79 20 70 72 6f 6a 65 63 74 6f ository projecto
6120: 66 20 24 70 69 64 5d 20 24 63 73 74 79 70 65 20 f $pid] $cstype
6130: 24 73 72 63 69 64 20 5b 73 74 61 74 65 20 72 75 $srcid [state ru
6140: 6e 20 7b 0a 09 09 53 45 4c 45 43 54 20 43 2e 69 n {...SELECT C.i
6150: 69 64 0a 09 09 46 52 4f 4d 20 20 20 63 73 69 74 id...FROM csit
6160: 65 6d 20 43 0a 09 09 57 48 45 52 45 20 20 43 2e em C...WHERE C.
6170: 63 69 64 20 3d 20 24 69 64 0a 09 09 4f 52 44 45 cid = $id...ORDE
6180: 52 20 42 59 20 43 2e 70 6f 73 0a 09 20 20 20 20 R BY C.pos..
6190: 7d 5d 20 24 69 64 5d 0a 09 20 20 20 20 69 6e 63 }] $id].. inc
61a0: 72 20 6e 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 r n..}..return.
61b0: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 }.. typeme
61c0: 74 68 6f 64 20 6c 6f 61 64 63 6f 75 6e 74 65 72 thod loadcounter
61d0: 20 7b 7d 20 7b 0a 09 23 20 49 6e 69 74 69 61 6c {} {..# Initial
61e0: 69 7a 65 20 74 68 65 20 63 6f 75 6e 74 65 72 20 ize the counter
61f0: 66 72 6f 6d 20 74 68 65 20 73 74 61 74 65 0a 09 from the state..
6200: 6c 6f 67 20 77 72 69 74 65 20 32 20 63 73 65 74 log write 2 cset
6210: 73 20 7b 4c 6f 61 64 69 6e 67 20 63 68 61 6e 67 s {Loading chang
6220: 65 73 65 74 20 63 6f 75 6e 74 65 72 7d 0a 09 73 eset counter}..s
6230: 65 74 20 6d 79 63 6f 75 6e 74 65 72 20 5b 73 74 et mycounter [st
6240: 61 74 65 20 6f 6e 65 20 7b 20 53 45 4c 45 43 54 ate one { SELECT
6250: 20 4d 41 58 28 63 69 64 29 20 46 52 4f 4d 20 63 MAX(cid) FROM c
6260: 68 61 6e 67 65 73 65 74 20 7d 5d 0a 09 72 65 74 hangeset }]..ret
6270: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 urn. }.. t
6280: 79 70 65 6d 65 74 68 6f 64 20 6e 75 6d 20 7b 7d ypemethod num {}
6290: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 63 6f 75 { return $mycou
62a0: 6e 74 65 72 20 7d 0a 0a 20 20 20 20 70 72 6f 63 nter }.. proc
62b0: 20 49 6e 69 74 69 61 6c 69 7a 65 42 72 65 61 6b InitializeBreak
62c0: 53 74 61 74 65 20 7b 72 65 76 69 73 69 6f 6e 73 State {revisions
62d0: 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 70 6f 73 } {..upvar 1 pos
62e0: 20 70 6f 73 20 63 72 6f 73 73 20 63 72 6f 73 73 pos cross cross
62f0: 20 72 61 6e 67 65 20 72 61 6e 67 65 20 64 65 70 range range dep
6300: 63 20 64 65 70 63 20 64 65 6c 74 61 20 64 65 6c c depc delta del
6310: 74 61 20 5c 0a 09 20 20 20 20 64 65 70 65 6e 64 ta \.. depend
6320: 65 6e 63 69 65 73 20 64 65 70 65 6e 64 65 6e 63 encies dependenc
6330: 69 65 73 0a 0a 09 23 20 46 69 72 73 74 20 77 65 ies...# First we
6340: 20 63 72 65 61 74 65 20 61 20 6d 61 70 20 6f 66 create a map of
6350: 20 70 6f 73 69 74 69 6f 6e 73 20 74 6f 20 6d 61 positions to ma
6360: 6b 65 20 69 74 20 65 61 73 69 65 72 20 74 6f 0a ke it easier to.
6370: 09 23 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 .# determine whe
6380: 74 68 65 72 20 61 20 64 65 70 65 6e 64 65 6e 63 ther a dependenc
6390: 79 20 63 72 6f 73 73 65 73 20 61 20 70 61 72 74 y crosses a part
63a0: 69 63 75 6c 61 72 20 69 6e 64 65 78 2e 0a 0a 09 icular index....
63b0: 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 log write 14 cse
63c0: 74 73 20 7b 49 42 53 3a 20 23 72 65 76 20 5b 6c ts {IBS: #rev [l
63d0: 6c 65 6e 67 74 68 20 24 72 65 76 69 73 69 6f 6e length $revision
63e0: 73 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 s]}..log write 1
63f0: 34 20 63 73 65 74 73 20 7b 49 42 53 3a 20 70 6f 4 csets {IBS: po
6400: 73 20 6d 61 70 2c 20 63 72 6f 73 73 20 63 6f 75 s map, cross cou
6410: 6e 74 65 72 7d 0a 0a 09 61 72 72 61 79 20 73 65 nter}...array se
6420: 74 20 70 6f 73 20 20 20 7b 7d 0a 09 61 72 72 61 t pos {}..arra
6430: 79 20 73 65 74 20 63 72 6f 73 73 20 7b 7d 0a 09 y set cross {}..
6440: 61 72 72 61 79 20 73 65 74 20 64 65 70 63 20 20 array set depc
6450: 7b 7d 0a 09 73 65 74 20 72 61 6e 67 65 20 20 20 {}..set range
6460: 20 20 20 20 7b 7d 0a 09 73 65 74 20 6e 20 30 0a {}..set n 0.
6470: 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 65 .foreach rev $re
6480: 76 69 73 69 6f 6e 73 20 7b 0a 09 20 20 20 20 6c visions {.. l
6490: 61 70 70 65 6e 64 20 72 61 6e 67 65 20 24 6e 0a append range $n.
64a0: 09 20 20 20 20 73 65 74 20 70 6f 73 28 24 72 65 . set pos($re
64b0: 76 29 20 24 6e 0a 09 20 20 20 20 73 65 74 20 63 v) $n.. set c
64c0: 72 6f 73 73 28 24 6e 29 20 30 0a 09 20 20 20 20 ross($n) 0..
64d0: 69 6e 63 72 20 6e 0a 09 7d 0a 0a 09 6c 6f 67 20 incr n..}...log
64e0: 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b write 14 csets {
64f0: 49 42 53 3a 20 70 6f 73 2f 5b 61 72 72 61 79 20 IBS: pos/[array
6500: 73 69 7a 65 20 70 6f 73 5d 2c 20 63 72 6f 73 73 size pos], cross
6510: 2f 5b 61 72 72 61 79 20 73 69 7a 65 20 63 72 6f /[array size cro
6520: 73 73 5d 7d 0a 0a 09 23 20 53 65 63 6f 6e 64 6c ss]}...# Secondl
6530: 79 20 77 65 20 63 6f 75 6e 74 20 74 68 65 20 63 y we count the c
6540: 72 6f 73 73 69 6e 67 73 20 70 65 72 20 70 6f 73 rossings per pos
6550: 69 74 69 6f 6e 2c 20 62 79 20 69 74 65 72 61 74 ition, by iterat
6560: 69 6e 67 0a 09 23 20 6f 76 65 72 20 74 68 65 20 ing..# over the
6570: 72 65 63 6f 72 64 65 64 20 69 6e 74 65 72 6e 61 recorded interna
6580: 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 0a l dependencies..
6590: 0a 09 23 20 4e 6f 74 65 3a 20 49 66 20 74 68 65 ..# Note: If the
65a0: 20 74 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20 timestamps are
65b0: 62 61 64 6c 79 20 6f 75 74 20 6f 66 20 6f 72 64 badly out of ord
65c0: 65 72 20 69 74 20 69 73 0a 09 23 20 20 20 20 20 er it is..#
65d0: 20 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 68 61 possible to ha
65e0: 76 65 20 61 20 62 61 63 6b 77 61 72 64 20 73 75 ve a backward su
65f0: 63 63 65 73 73 6f 72 20 64 65 70 65 6e 64 65 6e ccessor dependen
6600: 63 79 2c 0a 09 23 20 20 20 20 20 20 20 69 2e 65 cy,..# i.e
6610: 2e 20 77 69 74 68 20 73 74 61 72 74 20 3e 20 65 . with start > e
6620: 6e 64 2e 20 57 65 20 6d 61 79 20 68 61 76 65 20 nd. We may have
6630: 74 6f 20 73 77 61 70 20 74 68 65 20 69 6e 64 69 to swap the indi
6640: 63 65 73 0a 09 23 20 20 20 20 20 20 20 74 6f 20 ces..# to
6650: 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 ensure that the
6660: 66 6f 6c 6c 6f 77 69 6e 67 20 6c 6f 6f 70 20 72 following loop r
6670: 75 6e 73 20 63 6f 72 72 65 63 74 6c 79 2e 0a 09 uns correctly...
6680: 23 0a 09 23 20 4e 6f 74 65 20 32 3a 20 73 74 61 #..# Note 2: sta
6690: 72 74 20 3d 3d 20 65 6e 64 20 69 73 20 6e 6f 74 rt == end is not
66a0: 20 70 6f 73 73 69 62 6c 65 2e 20 49 74 20 69 6e possible. It in
66b0: 64 69 63 61 74 65 73 20 61 0a 09 23 20 20 20 20 dicates a..#
66c0: 20 20 20 20 20 73 65 6c 66 2d 64 65 70 65 6e 64 self-depend
66d0: 65 6e 63 79 20 64 75 65 20 74 6f 20 74 68 65 20 ency due to the
66e0: 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20 70 6f uniqueness of po
66f0: 73 69 74 69 6f 6e 73 2c 0a 09 23 20 20 20 20 20 sitions,..#
6700: 20 20 20 20 61 6e 64 20 74 68 61 74 20 69 73 20 and that is
6710: 73 6f 6d 65 74 68 69 6e 67 20 77 65 20 68 61 76 something we hav
6720: 65 20 72 75 6c 65 64 20 6f 75 74 20 61 6c 72 65 e ruled out alre
6730: 61 64 79 2c 20 73 65 65 0a 09 23 20 20 20 20 20 ady, see..#
6740: 20 20 20 20 27 72 65 76 20 69 6e 74 65 72 6e 61 'rev interna
6750: 6c 73 75 63 63 65 73 73 6f 72 73 27 2e 0a 0a 09 lsuccessors'....
6760: 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 log write 14 cse
6770: 74 73 20 7b 49 42 53 3a 20 63 72 6f 73 73 20 63 ts {IBS: cross c
6780: 6f 75 6e 74 65 72 20 66 69 6c 6c 69 6e 67 2c 20 ounter filling,
6790: 70 6f 73 2f 63 72 6f 73 73 20 6d 61 70 7d 0a 0a pos/cross map}..
67a0: 09 66 6f 72 65 61 63 68 20 7b 72 69 64 20 63 68 .foreach {rid ch
67b0: 69 6c 64 72 65 6e 7d 20 5b 61 72 72 61 79 20 67 ildren} [array g
67c0: 65 74 20 64 65 70 65 6e 64 65 6e 63 69 65 73 5d et dependencies]
67d0: 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 {.. foreach
67e0: 63 68 69 6c 64 20 24 63 68 69 6c 64 72 65 6e 20 child $children
67f0: 7b 0a 09 09 73 65 74 20 64 6b 65 79 20 20 20 20 {...set dkey
6800: 5b 6c 69 73 74 20 24 72 69 64 20 24 63 68 69 6c [list $rid $chil
6810: 64 5d 0a 09 09 73 65 74 20 73 74 61 72 74 20 20 d]...set start
6820: 20 24 70 6f 73 28 24 72 69 64 29 0a 09 09 73 65 $pos($rid)...se
6830: 74 20 65 6e 64 20 20 20 20 20 24 70 6f 73 28 24 t end $pos($
6840: 63 68 69 6c 64 29 0a 09 09 73 65 74 20 63 72 6f child)...set cro
6850: 73 73 65 73 20 7b 7d 0a 0a 09 09 69 66 20 7b 24 sses {}....if {$
6860: 73 74 61 72 74 20 3e 20 24 65 6e 64 7d 20 7b 0a start > $end} {.
6870: 09 09 20 20 20 20 77 68 69 6c 65 20 7b 24 65 6e .. while {$en
6880: 64 20 3c 20 24 73 74 61 72 74 7d 20 7b 0a 09 09 d < $start} {...
6890: 09 6c 61 70 70 65 6e 64 20 63 72 6f 73 73 65 73 .lappend crosses
68a0: 20 24 65 6e 64 0a 09 09 09 69 6e 63 72 20 63 72 $end....incr cr
68b0: 6f 73 73 28 24 65 6e 64 29 0a 09 09 09 69 6e 63 oss($end)....inc
68c0: 72 20 65 6e 64 0a 09 09 20 20 20 20 7d 0a 09 09 r end... }...
68d0: 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 77 } else {... w
68e0: 68 69 6c 65 20 7b 24 73 74 61 72 74 20 3c 20 24 hile {$start < $
68f0: 65 6e 64 7d 20 7b 0a 09 09 09 6c 61 70 70 65 6e end} {....lappen
6900: 64 20 63 72 6f 73 73 65 73 20 24 73 74 61 72 74 d crosses $start
6910: 0a 09 09 09 69 6e 63 72 20 63 72 6f 73 73 28 24 ....incr cross($
6920: 73 74 61 72 74 29 0a 09 09 09 69 6e 63 72 20 73 start)....incr s
6930: 74 61 72 74 0a 09 09 20 20 20 20 7d 0a 09 09 7d tart... }...}
6940: 0a 09 09 73 65 74 20 64 65 70 63 28 24 64 6b 65 ...set depc($dke
6950: 79 29 20 24 63 72 6f 73 73 65 73 0a 09 20 20 20 y) $crosses..
6960: 20 7d 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 }..}...log writ
6970: 65 20 31 34 20 63 73 65 74 73 20 7b 49 42 53 3a e 14 csets {IBS:
6980: 20 70 6f 73 2f 5b 61 72 72 61 79 20 73 69 7a 65 pos/[array size
6990: 20 70 6f 73 5d 2c 20 63 72 6f 73 73 2f 5b 61 72 pos], cross/[ar
69a0: 72 61 79 20 73 69 7a 65 20 63 72 6f 73 73 5d 2c ray size cross],
69b0: 20 64 65 70 63 2f 5b 61 72 72 61 79 20 73 69 7a depc/[array siz
69c0: 65 20 64 65 70 63 5d 20 28 66 6f 72 20 5b 6c 6c e depc] (for [ll
69d0: 65 6e 67 74 68 20 24 72 65 76 69 73 69 6f 6e 73 ength $revisions
69e0: 5d 29 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 ])}..log write 1
69f0: 34 20 63 73 65 74 73 20 7b 49 42 53 3a 20 74 69 4 csets {IBS: ti
6a00: 6d 65 73 74 61 6d 70 73 2c 20 64 65 6c 74 61 73 mestamps, deltas
6a10: 7d 0a 0a 09 49 6e 69 74 69 61 6c 69 7a 65 44 65 }...InitializeDe
6a20: 6c 74 61 73 20 24 72 65 76 69 73 69 6f 6e 73 0a ltas $revisions.
6a30: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 ..log write 14 c
6a40: 73 65 74 73 20 7b 49 42 53 3a 20 64 65 6c 74 61 sets {IBS: delta
6a50: 20 5b 61 72 72 61 79 20 73 69 7a 65 20 64 65 6c [array size del
6a60: 74 61 5d 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 ta]}..return.
6a70: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 49 6e 69 }.. proc Ini
6a80: 74 69 61 6c 69 7a 65 44 65 6c 74 61 73 20 7b 72 tializeDeltas {r
6a90: 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 evisions} {..upv
6aa0: 61 72 20 31 20 64 65 6c 74 61 20 64 65 6c 74 61 ar 1 delta delta
6ab0: 0a 0a 09 23 20 50 75 6c 6c 20 74 68 65 20 74 69 ...# Pull the ti
6ac0: 6d 65 73 74 61 6d 70 73 20 66 6f 72 20 61 6c 6c mestamps for all
6ad0: 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 74 68 revisions in th
6ae0: 65 20 63 68 61 6e 67 65 73 65 74 73 20 61 6e 64 e changesets and
6af0: 0a 09 23 20 63 6f 6d 70 75 74 65 20 74 68 65 69 ..# compute thei
6b00: 72 20 64 65 6c 74 61 73 20 66 6f 72 20 75 73 65 r deltas for use
6b10: 20 62 79 20 74 68 65 20 62 72 65 61 6b 20 66 69 by the break fi
6b20: 6e 64 65 72 2e 0a 0a 09 61 72 72 61 79 20 73 65 nder....array se
6b30: 74 20 64 65 6c 74 61 20 7b 7d 0a 09 61 72 72 61 t delta {}..arra
6b40: 79 20 73 65 74 20 73 74 61 6d 70 20 7b 7d 0a 0a y set stamp {}..
6b50: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
6b60: 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b oin $revisions {
6b70: 27 2c 27 7d 5d 27 29 0a 09 66 6f 72 65 61 63 68 ','}]')..foreach
6b80: 20 7b 72 69 64 20 74 69 6d 65 7d 20 5b 73 74 61 {rid time} [sta
6b90: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e te run [subst -n
6ba0: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 ocommands -nobac
6bb0: 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 kslashes {..
6bc0: 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 2e SELECT R.rid, R.
6bd0: 64 61 74 65 0a 09 20 20 20 20 46 52 4f 4d 20 72 date.. FROM r
6be0: 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 evision R.. W
6bf0: 48 45 52 45 20 52 2e 72 69 64 20 49 4e 20 24 74 HERE R.rid IN $t
6c00: 68 65 73 65 74 0a 09 7d 5d 5d 20 7b 0a 09 20 20 heset..}]] {..
6c10: 20 20 73 65 74 20 73 74 61 6d 70 28 24 72 69 64 set stamp($rid
6c20: 29 20 24 74 69 6d 65 0a 09 7d 0a 0a 09 6c 6f 67 ) $time..}...log
6c30: 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 write 14 csets
6c40: 7b 49 42 53 3a 20 73 74 61 6d 70 20 5b 61 72 72 {IBS: stamp [arr
6c50: 61 79 20 73 69 7a 65 20 73 74 61 6d 70 5d 7d 0a ay size stamp]}.
6c60: 0a 09 73 65 74 20 6e 20 30 0a 09 66 6f 72 65 61 ..set n 0..forea
6c70: 63 68 20 72 69 64 20 5b 6c 72 61 6e 67 65 20 24 ch rid [lrange $
6c80: 72 65 76 69 73 69 6f 6e 73 20 30 20 65 6e 64 2d revisions 0 end-
6c90: 31 5d 20 72 6e 65 78 74 20 5b 6c 72 61 6e 67 65 1] rnext [lrange
6ca0: 20 24 72 65 76 69 73 69 6f 6e 73 20 31 20 65 6e $revisions 1 en
6cb0: 64 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 64 65 d] {.. set de
6cc0: 6c 74 61 28 24 6e 29 20 5b 65 78 70 72 20 7b 24 lta($n) [expr {$
6cd0: 73 74 61 6d 70 28 24 72 6e 65 78 74 29 20 2d 20 stamp($rnext) -
6ce0: 24 73 74 61 6d 70 28 24 72 69 64 29 7d 5d 0a 09 $stamp($rid)}]..
6cf0: 20 20 20 20 69 6e 63 72 20 6e 0a 09 7d 0a 09 72 incr n..}..r
6d00: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
6d10: 20 70 72 6f 63 20 46 69 6e 64 42 65 73 74 42 72 proc FindBestBr
6d20: 65 61 6b 20 7b 72 61 6e 67 65 7d 20 7b 0a 09 75 eak {range} {..u
6d30: 70 76 61 72 20 31 20 63 72 6f 73 73 20 63 72 6f pvar 1 cross cro
6d40: 73 73 20 64 65 6c 74 61 20 64 65 6c 74 61 0a 0a ss delta delta..
6d50: 09 23 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 .# Determine the
6d60: 20 62 65 73 74 20 62 72 65 61 6b 20 6c 6f 63 61 best break loca
6d70: 74 69 6f 6e 20 69 6e 20 74 68 65 20 67 69 76 65 tion in the give
6d80: 6e 20 72 61 6e 67 65 20 6f 66 0a 09 23 20 70 6f n range of..# po
6d90: 73 69 74 69 6f 6e 73 2e 20 46 69 72 73 74 20 77 sitions. First w
6da0: 65 20 6c 6f 6f 6b 20 66 6f 72 20 74 68 65 20 6c e look for the l
6db0: 6f 63 61 74 69 6f 6e 73 20 77 69 74 68 20 74 68 ocations with th
6dc0: 65 20 6d 61 78 69 6d 61 6c 0a 09 23 20 6e 75 6d e maximal..# num
6dd0: 62 65 72 20 6f 66 20 63 72 6f 73 73 69 6e 67 73 ber of crossings
6de0: 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20 73 . If there are s
6df0: 65 76 65 72 61 6c 20 77 65 20 6c 6f 6f 6b 20 66 everal we look f
6e00: 6f 72 20 74 68 65 0a 09 23 20 73 68 6f 72 74 65 or the..# shorte
6e10: 73 74 20 74 69 6d 65 20 69 6e 74 65 72 76 61 6c st time interval
6e20: 20 61 6d 6f 6e 67 20 74 68 65 6d 2e 20 49 66 20 among them. If
6e30: 77 65 20 73 74 69 6c 6c 20 68 61 76 65 20 6d 75 we still have mu
6e40: 6c 74 69 70 6c 65 0a 09 23 20 70 6f 73 73 69 62 ltiple..# possib
6e50: 69 6c 69 74 69 65 73 20 61 66 74 65 72 20 74 68 ilities after th
6e60: 61 74 20 77 65 20 73 65 6c 65 63 74 20 74 68 65 at we select the
6e70: 20 65 61 72 6c 69 65 73 74 20 6c 6f 63 61 74 69 earliest locati
6e80: 6f 6e 0a 09 23 20 61 6d 6f 6e 67 20 74 68 65 73 on..# among thes
6e90: 65 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 49 66 20 e....# Note: If
6ea0: 74 68 65 20 6d 61 78 69 6d 61 6c 20 6e 75 6d 62 the maximal numb
6eb0: 65 72 20 6f 66 20 63 72 6f 73 73 69 6e 67 73 20 er of crossings
6ec0: 69 73 20 30 20 74 68 65 6e 20 74 68 65 20 72 61 is 0 then the ra
6ed0: 6e 67 65 0a 09 23 20 20 20 20 20 20 20 68 61 73 nge..# has
6ee0: 20 6e 6f 20 69 6e 74 65 72 6e 61 6c 20 64 65 70 no internal dep
6ef0: 65 6e 64 65 6e 63 69 65 73 2c 20 61 6e 64 20 6e endencies, and n
6f00: 6f 20 62 72 65 61 6b 20 6c 6f 63 61 74 69 6f 6e o break location
6f10: 20 61 74 0a 09 23 20 20 20 20 20 20 20 61 6c 6c at..# all
6f20: 2e 20 54 68 69 73 20 70 6f 73 73 69 62 69 6c 69 . This possibili
6f30: 74 79 20 69 73 20 73 69 67 6e 61 6c 65 64 20 76 ty is signaled v
6f40: 69 61 20 72 65 73 75 6c 74 20 2d 31 2e 0a 0a 09 ia result -1....
6f50: 23 20 4e 6f 74 65 3a 20 41 20 72 61 6e 67 65 20 # Note: A range
6f60: 6f 66 20 6c 65 6e 67 74 68 20 31 20 6f 72 20 6c of length 1 or l
6f70: 65 73 73 20 63 61 6e 6e 6f 74 20 68 61 76 65 20 ess cannot have
6f80: 69 6e 74 65 72 6e 61 6c 0a 09 23 20 20 20 20 20 internal..#
6f90: 20 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 dependencies,
6fa0: 61 73 20 74 68 61 74 20 6e 65 65 64 73 20 61 74 as that needs at
6fb0: 20 6c 65 61 73 74 20 74 77 6f 20 72 65 76 69 73 least two revis
6fc0: 69 6f 6e 73 20 69 6e 0a 09 23 20 20 20 20 20 20 ions in..#
6fd0: 20 74 68 65 20 72 61 6e 67 65 2e 0a 0a 09 69 66 the range....if
6fe0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 72 61 6e 67 {[llength $rang
6ff0: 65 5d 20 3c 20 32 7d 20 7b 20 72 65 74 75 72 6e e] < 2} { return
7000: 20 2d 31 20 7d 0a 0a 09 73 65 74 20 6d 61 78 20 -1 }...set max
7010: 2d 31 0a 09 73 65 74 20 62 65 73 74 20 7b 7d 0a -1..set best {}.
7020: 0a 09 66 6f 72 65 61 63 68 20 6c 6f 63 61 74 69 ..foreach locati
7030: 6f 6e 20 24 72 61 6e 67 65 20 7b 0a 09 20 20 20 on $range {..
7040: 20 73 65 74 20 63 72 6f 73 73 69 6e 67 73 20 24 set crossings $
7050: 63 72 6f 73 73 28 24 6c 6f 63 61 74 69 6f 6e 29 cross($location)
7060: 0a 09 20 20 20 20 69 66 20 7b 24 63 72 6f 73 73 .. if {$cross
7070: 69 6e 67 73 20 3e 20 24 6d 61 78 7d 20 7b 0a 09 ings > $max} {..
7080: 09 73 65 74 20 6d 61 78 20 20 24 63 72 6f 73 73 .set max $cross
7090: 69 6e 67 73 0a 09 09 73 65 74 20 62 65 73 74 20 ings...set best
70a0: 5b 6c 69 73 74 20 24 6c 6f 63 61 74 69 6f 6e 5d [list $location]
70b0: 0a 09 09 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 ...continue..
70c0: 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 72 6f 73 } elseif {$cros
70d0: 73 69 6e 67 73 20 3d 3d 20 24 6d 61 78 7d 20 7b sings == $max} {
70e0: 0a 09 09 6c 61 70 70 65 6e 64 20 62 65 73 74 20 ...lappend best
70f0: 24 6c 6f 63 61 74 69 6f 6e 0a 09 20 20 20 20 7d $location.. }
7100: 0a 09 7d 0a 0a 09 69 66 20 7b 24 6d 61 78 20 3d ..}...if {$max =
7110: 3d 20 30 7d 20 20 20 20 20 20 20 20 20 20 20 20 = 0}
7120: 7b 20 72 65 74 75 72 6e 20 2d 31 20 7d 0a 09 69 { return -1 }..i
7130: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 62 65 73 f {[llength $bes
7140: 74 5d 20 3d 3d 20 31 7d 20 7b 20 72 65 74 75 72 t] == 1} { retur
7150: 6e 20 5b 6c 69 6e 64 65 78 20 24 62 65 73 74 20 n [lindex $best
7160: 30 5d 20 7d 0a 0a 09 73 65 74 20 6c 6f 63 61 74 0] }...set locat
7170: 69 6f 6e 73 20 24 62 65 73 74 0a 09 73 65 74 20 ions $best..set
7180: 62 65 73 74 20 7b 7d 0a 09 73 65 74 20 6d 69 6e best {}..set min
7190: 20 2d 31 0a 0a 09 66 6f 72 65 61 63 68 20 6c 6f -1...foreach lo
71a0: 63 61 74 69 6f 6e 20 24 6c 6f 63 61 74 69 6f 6e cation $location
71b0: 73 20 7b 0a 09 20 20 20 20 73 65 74 20 69 6e 74 s {.. set int
71c0: 65 72 76 61 6c 20 24 64 65 6c 74 61 28 24 6c 6f erval $delta($lo
71d0: 63 61 74 69 6f 6e 29 0a 09 20 20 20 20 69 66 20 cation).. if
71e0: 7b 28 24 6d 69 6e 20 3c 20 30 29 20 7c 7c 20 28 {($min < 0) || (
71f0: 24 69 6e 74 65 72 76 61 6c 20 3c 20 24 6d 69 6e $interval < $min
7200: 29 7d 20 7b 0a 09 09 73 65 74 20 6d 69 6e 20 20 )} {...set min
7210: 24 69 6e 74 65 72 76 61 6c 0a 09 09 73 65 74 20 $interval...set
7220: 62 65 73 74 20 5b 6c 69 73 74 20 24 6c 6f 63 61 best [list $loca
7230: 74 69 6f 6e 5d 0a 09 20 20 20 20 7d 20 65 6c 73 tion].. } els
7240: 65 69 66 20 7b 24 69 6e 74 65 72 76 61 6c 20 3d eif {$interval =
7250: 3d 20 24 6d 69 6e 7d 20 7b 0a 09 09 6c 61 70 70 = $min} {...lapp
7260: 65 6e 64 20 62 65 73 74 20 24 6c 6f 63 61 74 69 end best $locati
7270: 6f 6e 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 69 on.. }..}...i
7280: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 62 65 73 f {[llength $bes
7290: 74 5d 20 3d 3d 20 31 7d 20 7b 20 72 65 74 75 72 t] == 1} { retur
72a0: 6e 20 5b 6c 69 6e 64 65 78 20 24 62 65 73 74 20 n [lindex $best
72b0: 30 5d 20 7d 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 0] }...return [l
72c0: 69 6e 64 65 78 20 5b 6c 73 6f 72 74 20 2d 69 6e index [lsort -in
72d0: 74 65 67 65 72 20 2d 69 6e 63 72 65 61 73 69 6e teger -increasin
72e0: 67 20 24 62 65 73 74 5d 20 30 5d 0a 20 20 20 20 g $best] 0].
72f0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 43 75 74 41 }.. proc CutA
7300: 74 20 7b 6c 6f 63 61 74 69 6f 6e 7d 20 7b 0a 09 t {location} {..
7310: 75 70 76 61 72 20 31 20 63 72 6f 73 73 20 63 72 upvar 1 cross cr
7320: 6f 73 73 20 64 65 70 63 20 64 65 70 63 0a 0a 09 oss depc depc...
7330: 23 20 49 74 20 77 61 73 20 64 65 63 69 64 65 64 # It was decided
7340: 20 74 6f 20 73 70 6c 69 74 20 74 68 65 20 63 68 to split the ch
7350: 61 6e 67 65 73 65 74 20 61 74 20 74 68 65 20 67 angeset at the g
7360: 69 76 65 6e 0a 09 23 20 6c 6f 63 61 74 69 6f 6e iven..# location
7370: 2e 20 54 68 69 73 20 63 75 74 73 20 61 20 6e 75 . This cuts a nu
7380: 6d 62 65 72 20 6f 66 20 64 65 70 65 6e 64 65 6e mber of dependen
7390: 63 69 65 73 2e 20 48 65 72 65 20 77 65 20 75 70 cies. Here we up
73a0: 64 61 74 65 0a 09 23 20 74 68 65 20 63 72 6f 73 date..# the cros
73b0: 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 6f s information so
73c0: 20 74 68 61 74 20 74 68 65 20 62 72 65 61 6b 20 that the break
73d0: 66 69 6e 64 65 72 20 68 61 73 20 61 63 63 75 72 finder has accur
73e0: 61 74 65 0a 09 23 20 64 61 74 61 20 77 68 65 6e ate..# data when
73f0: 20 77 65 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 we look at the
7400: 67 65 6e 65 72 61 74 65 64 20 66 72 61 67 6d 65 generated fragme
7410: 6e 74 73 2e 0a 0a 09 73 65 74 20 73 69 78 20 5b nts....set six [
7420: 6c 6f 67 20 76 69 73 69 62 6c 65 3f 20 36 5d 0a log visible? 6].
7430: 0a 09 66 6f 72 65 61 63 68 20 7b 64 65 70 20 72 ..foreach {dep r
7440: 61 6e 67 65 7d 20 5b 61 72 72 61 79 20 67 65 74 ange} [array get
7450: 20 64 65 70 63 5d 20 7b 0a 09 20 20 20 20 23 20 depc] {.. #
7460: 43 68 65 63 6b 20 61 6c 6c 20 64 65 70 65 6e 64 Check all depend
7470: 65 6e 63 69 65 73 20 73 74 69 6c 6c 20 6b 6e 6f encies still kno
7480: 77 6e 2c 20 74 61 6b 65 20 74 68 65 69 72 20 72 wn, take their r
7490: 61 6e 67 65 20 61 6e 64 0a 09 20 20 20 20 23 20 ange and.. #
74a0: 73 65 65 20 69 66 20 74 68 65 20 62 72 65 61 6b see if the break
74b0: 20 6c 6f 63 61 74 69 6f 6e 20 66 61 6c 6c 73 20 location falls
74c0: 77 69 74 68 69 6e 2e 0a 0a 09 20 20 20 20 42 6f within.... Bo
74d0: 72 64 65 72 20 24 72 61 6e 67 65 20 73 20 65 0a rder $range s e.
74e0: 09 20 20 20 20 69 66 20 7b 24 6c 6f 63 61 74 69 . if {$locati
74f0: 6f 6e 20 3c 20 24 73 7d 20 63 6f 6e 74 69 6e 75 on < $s} continu
7500: 65 20 3b 20 23 20 62 72 65 61 6b 20 62 65 66 6f e ; # break befo
7510: 72 65 20 72 61 6e 67 65 2c 20 69 67 6e 6f 72 65 re range, ignore
7520: 0a 09 20 20 20 20 69 66 20 7b 24 6c 6f 63 61 74 .. if {$locat
7530: 69 6f 6e 20 3e 20 24 65 7d 20 63 6f 6e 74 69 6e ion > $e} contin
7540: 75 65 20 3b 20 23 20 62 72 65 61 6b 20 61 66 74 ue ; # break aft
7550: 65 72 20 72 61 6e 67 65 2c 20 69 67 6e 6f 72 65 er range, ignore
7560: 2e 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 64 .... # This d
7570: 65 70 65 6e 64 65 6e 63 79 20 63 72 6f 73 73 65 ependency crosse
7580: 73 20 74 68 65 20 62 72 65 61 6b 20 6c 6f 63 61 s the break loca
7590: 74 69 6f 6e 2e 20 57 65 20 72 65 6d 6f 76 65 20 tion. We remove
75a0: 69 74 0a 09 20 20 20 20 23 20 66 72 6f 6d 20 74 it.. # from t
75b0: 68 65 20 63 72 6f 73 73 69 6e 67 73 20 63 6f 75 he crossings cou
75c0: 6e 74 65 72 73 2c 20 61 6e 64 20 74 68 65 6e 20 nters, and then
75d0: 61 6c 73 6f 20 66 72 6f 6d 20 74 68 65 20 73 65 also from the se
75e0: 74 0a 09 20 20 20 20 23 20 6f 66 20 6b 6e 6f 77 t.. # of know
75f0: 6e 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 n dependencies,
7600: 61 73 20 77 65 20 61 72 65 20 64 6f 6e 65 20 77 as we are done w
7610: 69 74 68 20 69 74 2e 0a 0a 09 20 20 20 20 66 6f ith it.... fo
7620: 72 65 61 63 68 20 6c 6f 63 20 24 64 65 70 63 28 reach loc $depc(
7630: 24 64 65 70 29 20 7b 20 69 6e 63 72 20 63 72 6f $dep) { incr cro
7640: 73 73 28 24 6c 6f 63 29 20 2d 31 20 7d 0a 09 20 ss($loc) -1 }..
7650: 20 20 20 75 6e 73 65 74 20 64 65 70 63 28 24 64 unset depc($d
7660: 65 70 29 0a 0a 09 20 20 20 20 69 66 20 7b 21 24 ep)... if {!$
7670: 73 69 78 7d 20 63 6f 6e 74 69 6e 75 65 0a 0a 09 six} continue...
7680: 20 20 20 20 73 74 72 75 63 74 3a 3a 6c 69 73 74 struct::list
7690: 20 61 73 73 69 67 6e 20 24 64 65 70 20 70 61 72 assign $dep par
76a0: 65 6e 74 20 63 68 69 6c 64 0a 09 20 20 20 20 6c ent child.. l
76b0: 6f 67 20 77 72 69 74 65 20 35 20 63 73 65 74 73 og write 5 csets
76c0: 20 22 42 72 6f 6b 65 20 64 65 70 65 6e 64 65 6e "Broke dependen
76d0: 63 79 20 5b 50 44 20 24 70 61 72 65 6e 74 5d 20 cy [PD $parent]
76e0: 2d 2d 3e 20 5b 50 44 20 24 63 68 69 6c 64 5d 22 --> [PD $child]"
76f0: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 ..}...return.
7700: 20 7d 0a 0a 20 20 20 20 23 20 50 72 69 6e 74 20 }.. # Print
7710: 69 64 65 6e 74 69 66 79 69 6e 67 20 64 61 74 61 identifying data
7720: 20 66 6f 72 20 61 20 72 65 76 69 73 69 6f 6e 20 for a revision
7730: 28 70 72 6f 6a 65 63 74 2c 20 66 69 6c 65 2c 20 (project, file,
7740: 64 6f 74 74 65 64 20 72 65 76 0a 20 20 20 20 23 dotted rev. #
7750: 20 6e 75 6d 62 65 72 29 2c 20 66 6f 72 20 68 69 number), for hi
7760: 67 68 20 76 65 72 62 6f 73 69 74 79 20 6c 6f 67 gh verbosity log
7770: 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 23 20 54 output.. # T
7780: 4f 44 4f 3a 20 52 65 70 6c 61 63 65 20 77 69 74 ODO: Replace wit
7790: 68 20 63 61 6c 6c 20 74 6f 20 69 74 65 6d 73 74 h call to itemst
77a0: 72 20 28 6c 69 73 74 20 72 65 76 20 24 69 64 29 r (list rev $id)
77b0: 0a 0a 20 20 20 20 70 72 6f 63 20 50 44 20 7b 69 .. proc PD {i
77c0: 64 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 70 d} {..foreach {p
77d0: 20 66 20 72 7d 20 5b 73 74 61 74 65 20 72 75 6e f r} [state run
77e0: 20 7b 0a 09 09 53 45 4c 45 43 54 20 50 2e 6e 61 {...SELECT P.na
77f0: 6d 65 20 2c 20 46 2e 6e 61 6d 65 2c 20 52 2e 72 me , F.name, R.r
7800: 65 76 0a 09 09 46 52 4f 4d 20 72 65 76 69 73 69 ev...FROM revisi
7810: 6f 6e 20 52 2c 20 66 69 6c 65 20 46 2c 20 70 72 on R, file F, pr
7820: 6f 6a 65 63 74 20 50 0a 09 09 57 48 45 52 45 20 oject P...WHERE
7830: 52 2e 72 69 64 20 3d 20 24 69 64 20 20 20 20 2d R.rid = $id -
7840: 2d 20 46 69 6e 64 20 73 70 65 63 69 66 69 65 64 - Find specified
7850: 20 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 0a 09 file revision..
7860: 09 41 4e 44 20 20 20 46 2e 66 69 64 20 3d 20 52 .AND F.fid = R
7870: 2e 66 69 64 20 20 2d 2d 20 47 65 74 20 66 69 6c .fid -- Get fil
7880: 65 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f e of the revisio
7890: 6e 0a 09 09 41 4e 44 20 20 20 50 2e 70 69 64 20 n...AND P.pid
78a0: 3d 20 46 2e 70 69 64 20 20 2d 2d 20 47 65 74 20 = F.pid -- Get
78b0: 70 72 6f 6a 65 63 74 20 6f 66 20 74 68 65 20 66 project of the f
78c0: 69 6c 65 2e 0a 09 7d 5d 20 62 72 65 61 6b 0a 09 ile...}] break..
78d0: 72 65 74 75 72 6e 20 22 27 24 70 20 3a 20 24 66 return "'$p : $f
78e0: 2f 24 72 27 22 0a 20 20 20 20 7d 0a 0a 20 20 20 /$r'". }..
78f0: 20 23 20 50 72 69 6e 74 69 6e 67 20 6f 6e 65 20 # Printing one
7900: 6f 72 20 6d 6f 72 65 20 72 61 6e 67 65 73 2c 20 or more ranges,
7910: 66 6f 72 6d 61 74 74 65 64 2c 20 61 6e 64 20 6f formatted, and o
7920: 6e 6c 79 20 74 68 65 69 72 20 62 6f 72 64 65 72 nly their border
7930: 20 74 6f 0a 20 20 20 20 23 20 6b 65 65 70 20 74 to. # keep t
7940: 68 65 20 73 74 72 69 6e 67 73 20 73 68 6f 72 74 he strings short
7950: 2e 0a 0a 20 20 20 20 70 72 6f 63 20 50 52 73 20 ... proc PRs
7960: 7b 72 61 6e 67 65 73 7d 20 7b 0a 09 72 65 74 75 {ranges} {..retu
7970: 72 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 rn [struct::list
7980: 20 6d 61 70 20 24 72 61 6e 67 65 73 20 5b 6d 79 map $ranges [my
7990: 70 72 6f 63 20 50 52 5d 5d 0a 20 20 20 20 7d 0a proc PR]]. }.
79a0: 0a 20 20 20 20 70 72 6f 63 20 50 52 20 7b 72 61 . proc PR {ra
79b0: 6e 67 65 7d 20 7b 0a 09 42 6f 72 64 65 72 20 24 nge} {..Border $
79c0: 72 61 6e 67 65 20 73 20 65 0a 09 72 65 74 75 72 range s e..retur
79d0: 6e 20 3c 24 7b 73 7d 2e 2e 2e 24 7b 65 7d 3e 0a n <${s}...${e}>.
79e0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 }.. proc
79f0: 42 6f 72 64 65 72 20 7b 72 61 6e 67 65 20 73 76 Border {range sv
7a00: 20 65 76 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 ev} {..upvar 1
7a10: 24 73 76 20 73 20 24 65 76 20 65 0a 09 73 65 74 $sv s $ev e..set
7a20: 20 73 20 5b 6c 69 6e 64 65 78 20 24 72 61 6e 67 s [lindex $rang
7a30: 65 20 30 5d 0a 09 73 65 74 20 65 20 5b 6c 69 6e e 0]..set e [lin
7a40: 64 65 78 20 24 72 61 6e 67 65 20 65 6e 64 5d 0a dex $range end].
7a50: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
7a60: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
7a70: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
7a80: 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 20 20 ##########..
7a90: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 63 typevariable myc
7aa0: 68 61 6e 67 65 73 65 74 73 20 20 20 20 20 20 20 hangesets
7ab0: 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 {} ; # List of
7ac0: 20 61 6c 6c 20 6b 6e 6f 77 6e 0a 09 09 09 09 09 all known......
7ad0: 20 20 20 23 20 63 68 61 6e 67 65 73 65 74 73 2e # changesets.
7ae0: 0a 0a 20 20 20 20 23 20 4c 69 73 74 20 6f 66 20 .. # List of
7af0: 61 6c 6c 20 6b 6e 6f 77 6e 20 63 68 61 6e 67 65 all known change
7b00: 73 65 74 73 20 6f 66 20 61 20 74 79 70 65 2e 0a sets of a type..
7b10: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 typevariable
7b20: 20 6d 79 74 63 68 61 6e 67 65 73 65 74 73 20 2d mytchangesets -
7b30: 61 72 72 61 79 20 7b 0a 09 73 79 6d 3a 3a 62 72 array {..sym::br
7b40: 61 6e 63 68 20 7b 7d 0a 09 73 79 6d 3a 3a 74 61 anch {}..sym::ta
7b50: 67 20 20 20 20 7b 7d 0a 09 72 65 76 20 20 20 20 g {}..rev
7b60: 20 20 20 20 20 7b 7d 0a 20 20 20 20 7d 0a 09 09 {}. }...
7b70: 09 09 09 0a 20 20 20 20 74 79 70 65 76 61 72 69 .... typevari
7b80: 61 62 6c 65 20 6d 79 69 74 65 6d 6d 61 70 20 20 able myitemmap
7b90: 20 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 -array {} ; #
7ba0: 20 4d 61 70 20 66 72 6f 6d 20 69 74 65 6d 73 20 Map from items
7bb0: 28 74 61 67 67 65 64 29 0a 09 09 09 09 09 20 20 (tagged)......
7bc0: 20 23 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6f # to the list o
7bd0: 66 20 63 68 61 6e 67 65 73 65 74 73 0a 09 09 09 f changesets....
7be0: 09 09 20 20 20 23 20 63 6f 6e 74 61 69 6e 69 6e .. # containin
7bf0: 67 20 69 74 2e 20 45 61 63 68 20 69 74 65 6d 0a g it. Each item.
7c00: 09 09 09 09 09 20 20 20 23 20 63 61 6e 20 62 65 ..... # can be
7c10: 20 75 73 65 64 20 62 79 20 6f 6e 6c 79 20 6f 6e used by only on
7c20: 65 0a 09 09 09 09 09 20 20 20 23 20 63 68 61 6e e...... # chan
7c30: 67 65 73 65 74 2e 0a 20 20 20 20 74 79 70 65 76 geset.. typev
7c40: 61 72 69 61 62 6c 65 20 6d 79 69 64 6d 61 70 20 ariable myidmap
7c50: 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 -array {} ; #
7c60: 4d 61 70 20 66 72 6f 6d 20 63 68 61 6e 67 65 73 Map from changes
7c70: 65 74 20 69 64 20 74 6f 0a 09 09 09 09 20 20 20 et id to.....
7c80: 20 20 20 20 23 20 63 68 61 6e 67 65 73 65 74 2e # changeset.
7c90: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
7ca0: 20 61 6c 6c 20 20 20 20 7b 7d 20 20 20 20 7b 20 all {} {
7cb0: 72 65 74 75 72 6e 20 24 6d 79 63 68 61 6e 67 65 return $mychange
7cc0: 73 65 74 73 20 7d 0a 20 20 20 20 74 79 70 65 6d sets }. typem
7cd0: 65 74 68 6f 64 20 6f 66 20 20 20 20 20 7b 63 69 ethod of {ci
7ce0: 64 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 d} { return $myi
7cf0: 64 6d 61 70 28 24 63 69 64 29 20 7d 0a 20 20 20 dmap($cid) }.
7d00: 20 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 69 74 typemethod ofit
7d10: 65 6d 20 7b 69 69 64 7d 20 7b 20 72 65 74 75 72 em {iid} { retur
7d20: 6e 20 24 6d 79 69 74 65 6d 6d 61 70 28 24 69 69 n $myitemmap($ii
7d30: 64 29 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 d) }.. typeme
7d40: 74 68 6f 64 20 72 65 76 20 20 20 20 7b 7d 20 20 thod rev {}
7d50: 20 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 74 63 { return $mytc
7d60: 68 61 6e 67 65 73 65 74 73 28 72 65 76 29 20 7d hangesets(rev) }
7d70: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
7d80: 73 79 6d 20 20 20 20 7b 7d 20 20 20 20 7b 20 72 sym {} { r
7d90: 65 74 75 72 6e 20 5b 63 6f 6e 63 61 74 20 5c 0a eturn [concat \.
7da0: 09 09 09 09 09 20 20 24 7b 6d 79 74 63 68 61 6e ..... ${mytchan
7db0: 67 65 73 65 74 73 28 73 79 6d 3a 3a 62 72 61 6e gesets(sym::bran
7dc0: 63 68 29 7d 20 5c 0a 09 09 09 09 09 20 20 24 7b ch)} \...... ${
7dd0: 6d 79 74 63 68 61 6e 67 65 73 65 74 73 28 73 79 mytchangesets(sy
7de0: 6d 3a 3a 74 61 67 29 7d 5d 20 7d 0a 0a 20 20 20 m::tag)}] }..
7df0: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
7e00: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
7e10: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
7e20: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 Configuration..
7e30: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 pragma -hasty
7e40: 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 peinfo no ;
7e50: 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 # no type intros
7e60: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 pection. prag
7e70: 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 ma -hasinfo
7e80: 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 no ; # no ob
7e90: 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 ject introspecti
7ea0: 6f 6e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 on.. # # ## #
7eb0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
7ec0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
7ed0: 7d 0a 0a 23 23 0a 23 23 20 4e 4f 54 45 3a 20 54 }..##.## NOTE: T
7ee0: 68 65 20 73 75 63 63 65 73 73 6f 72 20 61 6e 64 he successor and
7ef0: 20 70 72 65 64 65 63 65 73 73 6f 72 20 6d 65 74 predecessor met
7f00: 68 6f 64 73 20 64 65 66 69 6e 65 64 20 62 79 20 hods defined by
7f10: 74 68 65 20 63 6c 61 73 73 65 73 0a 23 23 20 20 the classes.##
7f20: 20 20 20 20 20 62 65 6c 6f 77 20 61 72 65 20 2d below are -
7f30: 2d 20 62 6f 74 74 6c 65 20 6e 65 63 6b 73 20 2d - bottle necks -
7f40: 2d 2e 20 4c 6f 6f 6b 20 66 6f 72 20 77 61 79 73 -. Look for ways
7f50: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 53 51 4c to make the SQL
7f60: 0a 23 23 20 20 20 20 20 20 20 66 61 73 74 65 72 .## faster
7f70: 2e 0a 23 23 0a 0a 23 20 23 20 23 23 20 23 23 23 ..##..# # ## ###
7f80: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
7f90: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 ############# ##
7fa0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
7fb0: 23 23 23 0a 23 23 20 48 65 6c 70 65 72 20 73 69 ###.## Helper si
7fc0: 6e 67 6c 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e 64 ngleton. Command
7fd0: 73 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 63 s for revision c
7fe0: 68 61 6e 67 65 73 65 74 73 2e 0a 0a 73 6e 69 74 hangesets...snit
7ff0: 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 ::type ::vc::fos
8000: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
8010: 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 3a 3a ::project::rev::
8020: 72 65 76 20 7b 0a 20 20 20 20 74 79 70 65 6d 65 rev {. typeme
8030: 74 68 6f 64 20 62 79 72 65 76 69 73 69 6f 6e 20 thod byrevision
8040: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 7d 0a {} { return 1 }.
8050: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 typemethod b
8060: 79 73 79 6d 62 6f 6c 20 20 20 7b 7d 20 7b 20 72 ysymbol {} { r
8070: 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 eturn 0 }. ty
8080: 70 65 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 pemethod istag
8090: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 {} { return
80a0: 30 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 0 }. typemeth
80b0: 6f 64 20 69 73 62 72 61 6e 63 68 20 20 20 7b 7d od isbranch {}
80c0: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a 20 { return 0 }..
80d0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 74 typemethod st
80e0: 72 20 7b 72 65 76 69 73 69 6f 6e 7d 20 7b 0a 09 r {revision} {..
80f0: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 struct::list ass
8100: 69 67 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 7b ign [state run {
8110: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
8120: 65 76 2c 20 46 2e 6e 61 6d 65 2c 20 50 2e 6e 61 ev, F.name, P.na
8130: 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 me.. FROM r
8140: 65 76 69 73 69 6f 6e 20 52 2c 20 66 69 6c 65 20 evision R, file
8150: 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 20 20 F, project P..
8160: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 3d WHERE R.rid =
8170: 20 24 72 65 76 69 73 69 6f 6e 20 2d 2d 20 46 69 $revision -- Fi
8180: 6e 64 20 73 70 65 63 69 66 69 65 64 20 66 69 6c nd specified fil
8190: 65 20 72 65 76 69 73 69 6f 6e 0a 09 20 20 20 20 e revision..
81a0: 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d 20 52 AND F.fid = R
81b0: 2e 66 69 64 20 20 20 20 20 2d 2d 20 47 65 74 20 .fid -- Get
81c0: 66 69 6c 65 20 6f 66 20 74 68 65 20 72 65 76 69 file of the revi
81d0: 73 69 6f 6e 0a 09 20 20 20 20 41 4e 44 20 20 20 sion.. AND
81e0: 20 50 2e 70 69 64 20 3d 20 46 2e 70 69 64 20 20 P.pid = F.pid
81f0: 20 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65 63 -- Get projec
8200: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a 09 t of the file...
8210: 7d 5d 20 72 65 76 6e 72 20 66 6e 61 6d 65 20 70 }] revnr fname p
8220: 6e 61 6d 65 0a 09 72 65 74 75 72 6e 20 22 24 70 name..return "$p
8230: 6e 61 6d 65 2f 24 7b 72 65 76 6e 72 7d 3a 3a 24 name/${revnr}::$
8240: 66 6e 61 6d 65 22 0a 20 20 20 20 7d 0a 0a 20 20 fname". }..
8250: 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 73 # result = lis
8260: 74 20 28 6d 69 6e 74 69 6d 65 2c 20 6d 61 78 74 t (mintime, maxt
8270: 69 6d 65 29 0a 20 20 20 20 74 79 70 65 6d 65 74 ime). typemet
8280: 68 6f 64 20 74 69 6d 65 72 61 6e 67 65 20 7b 69 hod timerange {i
8290: 74 65 6d 73 7d 20 7b 0a 09 73 65 74 20 74 68 65 tems} {..set the
82a0: 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 69 74 65 set ('[join $ite
82b0: 6d 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 ms {','}]')..ret
82c0: 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b urn [state run [
82d0: 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 subst -nocommand
82e0: 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 s -nobackslashes
82f0: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 4d {.. SELECT M
8300: 49 4e 28 52 2e 64 61 74 65 29 2c 20 4d 41 58 28 IN(R.date), MAX(
8310: 52 2e 64 61 74 65 29 0a 09 20 20 20 20 46 52 4f R.date).. FRO
8320: 4d 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 M revision R..
8330: 20 20 57 48 45 52 45 20 52 2e 72 69 64 20 49 4e WHERE R.rid IN
8340: 20 24 74 68 65 73 65 74 20 2d 2d 20 52 65 73 74 $theset -- Rest
8350: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e rict to revision
8360: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 7d s of interest..}
8370: 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 ]]. }.. #
8380: 76 61 72 28 64 76 29 20 3d 20 64 69 63 74 20 28 var(dv) = dict (
8390: 72 65 76 69 73 69 6f 6e 20 2d 3e 20 6c 69 73 74 revision -> list
83a0: 20 28 72 65 76 69 73 69 6f 6e 29 29 0a 20 20 20 (revision)).
83b0: 20 74 79 70 65 6d 65 74 68 6f 64 20 69 6e 74 65 typemethod inte
83c0: 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 20 7b rnalsuccessors {
83d0: 64 76 20 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a dv revisions} {.
83e0: 09 75 70 76 61 72 20 31 20 24 64 76 20 64 65 70 .upvar 1 $dv dep
83f0: 65 6e 64 65 6e 63 69 65 73 0a 09 73 65 74 20 74 endencies..set t
8400: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 heset ('[join $r
8410: 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 evisions {','}]'
8420: 29 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 )...log write 14
8430: 20 63 73 65 74 73 20 69 6e 74 65 72 6e 61 6c 73 csets internals
8440: 75 63 63 65 73 73 6f 72 73 0a 0a 09 23 20 53 65 uccessors...# Se
8450: 65 20 27 73 75 63 63 65 73 73 6f 72 73 27 20 62 e 'successors' b
8460: 65 6c 6f 77 20 66 6f 72 20 74 68 65 20 6d 61 69 elow for the mai
8470: 6e 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 n explanation of
8480: 0a 09 23 20 74 68 65 20 76 61 72 69 6f 75 73 20 ..# the various
8490: 63 61 73 65 73 2e 20 54 68 69 73 20 70 69 65 63 cases. This piec
84a0: 65 20 69 73 20 73 70 65 63 69 61 6c 20 69 6e 20 e is special in
84b0: 74 68 61 74 20 69 74 0a 09 23 20 72 65 73 74 72 that it..# restr
84c0: 69 63 74 73 20 74 68 65 20 73 75 63 63 65 73 73 icts the success
84d0: 6f 72 73 20 77 65 20 6c 6f 6f 6b 20 66 6f 72 20 ors we look for
84e0: 74 6f 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 to the same set
84f0: 6f 66 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 of..# revisions
8500: 77 65 20 73 74 61 72 74 20 66 72 6f 6d 2e 20 53 we start from. S
8510: 65 6e 73 69 62 6c 65 20 61 73 20 77 65 20 61 72 ensible as we ar
8520: 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 0a 09 23 e looking for..#
8530: 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 65 72 changeset inter
8540: 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 nal dependencies
8550: 2e 0a 0a 09 61 72 72 61 79 20 73 65 74 20 64 65 ....array set de
8560: 70 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b p {}...foreach {
8570: 72 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 rid child} [stat
8580: 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f e run [subst -no
8590: 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b commands -noback
85a0: 73 6c 61 73 68 65 73 20 7b 0a 20 20 20 20 2d 2d slashes {. --
85b0: 20 28 31 29 20 50 72 69 6d 61 72 79 20 63 68 69 (1) Primary chi
85c0: 6c 64 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 ld.. SELECT R
85d0: 2e 72 69 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 .rid, R.child..
85e0: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
85f0: 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 on R.. WHERE
8600: 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 R.rid IN $the
8610: 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 set -- Restr
8620: 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 ict to revisions
8630: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
8640: 20 20 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 AND R.child
8650: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 IS NOT NULL
8660: 2d 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 -- Has primary c
8670: 68 69 6c 64 0a 09 20 20 20 20 41 4e 44 20 20 20 hild.. AND
8680: 20 52 2e 63 68 69 6c 64 20 49 4e 20 24 74 68 65 R.child IN $the
8690: 73 65 74 20 20 20 20 20 2d 2d 20 57 68 69 63 68 set -- Which
86a0: 20 69 73 20 61 6c 73 6f 20 6f 66 20 69 6e 74 65 is also of inte
86b0: 72 65 73 74 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 rest. UNION.
86c0: 20 20 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 -- (2) Second
86d0: 61 72 79 20 28 62 72 61 6e 63 68 29 20 63 68 69 ary (branch) chi
86e0: 6c 64 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 ldren.. SELEC
86f0: 54 20 52 2e 72 69 64 2c 20 42 2e 62 72 69 64 0a T R.rid, B.brid.
8700: 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 . FROM revi
8710: 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e sion R, revision
8720: 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 42 branchchildren B
8730: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 .. WHERE R.r
8740: 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 id IN $theset
8750: 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 -- Restrict
8760: 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 to revisions of
8770: 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e interest.. AN
8780: 44 20 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 D R.rid = B.r
8790: 69 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 id -- S
87a0: 65 6c 65 63 74 20 73 75 62 73 65 74 20 6f 66 20 elect subset of
87b0: 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a branch children.
87c0: 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e 62 72 . AND B.br
87d0: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 id IN $theset
87e0: 20 20 20 2d 2d 20 57 68 69 63 68 20 69 73 20 61 -- Which is a
87f0: 6c 73 6f 20 6f 66 20 69 6e 74 65 72 65 73 74 0a lso of interest.
8800: 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d UNION. --
8810: 20 28 34 29 20 43 68 69 6c 64 20 6f 66 20 74 72 (4) Child of tr
8820: 75 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 73 unk root success
8830: 6f 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 20 or of last NTDB
8840: 6f 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53 on trunk... S
8850: 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 41 2e ELECT R.rid, RA.
8860: 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 child.. FROM
8870: 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 revision R, revi
8880: 73 69 6f 6e 20 52 41 0a 09 20 20 20 20 57 48 45 sion RA.. WHE
8890: 52 45 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 RE R.rid IN $t
88a0: 68 65 73 65 74 20 20 20 20 20 20 2d 2d 20 52 65 heset -- Re
88b0: 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 strict to revisi
88c0: 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a ons of interest.
88d0: 09 20 20 20 20 41 4e 44 20 20 20 52 2e 69 73 64 . AND R.isd
88e0: 65 66 61 75 6c 74 20 20 20 20 20 20 20 20 20 20 efault
88f0: 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 -- Restrict t
8900: 6f 20 4e 54 44 42 0a 09 20 20 20 20 41 4e 44 20 o NTDB.. AND
8910: 20 20 52 2e 64 62 63 68 69 6c 64 20 49 53 20 4e R.dbchild IS N
8920: 4f 54 20 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 OT NULL -- and
8930: 20 6c 61 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e last NTDB belon
8940: 67 69 6e 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 ging to trunk..
8950: 20 20 20 41 4e 44 20 20 20 52 41 2e 72 69 64 20 AND RA.rid
8960: 3d 20 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 = R.dbchild
8970: 20 2d 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 -- Go directly
8980: 74 6f 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 to trunk root..
8990: 20 20 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c AND RA.chil
89a0: 64 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 d IS NOT NULL
89b0: 20 2d 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 -- Has primary
89c0: 63 68 69 6c 64 2e 0a 20 20 20 20 20 20 20 20 20 child..
89d0: 20 20 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c AND RA.chil
89e0: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 d IN $theset
89f0: 20 2d 2d 20 57 68 69 63 68 20 69 73 20 61 6c 73 -- Which is als
8a00: 6f 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 7d o of interest..}
8a10: 5d 5d 20 7b 0a 09 20 20 20 20 23 20 43 6f 6e 73 ]] {.. # Cons
8a20: 69 64 65 72 20 6d 6f 76 69 6e 67 20 74 68 69 73 ider moving this
8a30: 20 74 6f 20 74 68 65 20 69 6e 74 65 67 72 69 74 to the integrit
8a40: 79 20 6d 6f 64 75 6c 65 2e 0a 09 20 20 20 20 69 y module... i
8a50: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
8a60: 7b 24 72 69 64 20 21 3d 20 24 63 68 69 6c 64 7d {$rid != $child}
8a70: 20 7b 52 65 76 69 73 69 6f 6e 20 24 72 69 64 20 {Revision $rid
8a80: 64 65 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c depends on itsel
8a90: 66 2e 7d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 f.}.. lappend
8aa0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 24 72 dependencies($r
8ab0: 69 64 29 20 24 63 68 69 6c 64 0a 09 20 20 20 20 id) $child..
8ac0: 73 65 74 20 64 65 70 28 24 72 69 64 2c 24 63 68 set dep($rid,$ch
8ad0: 69 6c 64 29 20 2e 0a 09 7d 0a 0a 09 23 20 54 68 ild) ...}...# Th
8ae0: 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 73 e sql statements
8af0: 20 61 62 6f 76 65 20 6c 6f 6f 6b 73 20 6f 6e 6c above looks onl
8b00: 79 20 66 6f 72 20 64 69 72 65 63 74 20 64 65 70 y for direct dep
8b10: 65 6e 64 65 6e 63 69 65 73 0a 09 23 20 62 65 74 endencies..# bet
8b20: 77 65 65 6e 20 72 65 76 69 73 69 6f 6e 20 69 6e ween revision in
8b30: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 2e 20 the changeset.
8b40: 48 6f 77 65 76 65 72 20 64 75 65 20 74 6f 20 74 However due to t
8b50: 68 65 0a 09 23 20 76 61 67 61 72 69 65 73 20 6f he..# vagaries o
8b60: 66 20 6d 65 74 61 20 64 61 74 61 20 69 74 20 69 f meta data it i
8b70: 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 s possible for t
8b80: 77 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 0a wo revisions of.
8b90: 09 23 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 .# the same file
8ba0: 20 74 6f 20 65 6e 64 20 75 70 20 69 6e 20 74 68 to end up in th
8bb0: 65 20 73 61 6d 65 20 63 68 61 6e 67 65 73 65 74 e same changeset
8bc0: 2c 20 77 69 74 68 6f 75 74 20 61 0a 09 23 20 64 , without a..# d
8bd0: 69 72 65 63 74 20 64 65 70 65 6e 64 65 6e 63 79 irect dependency
8be0: 20 62 65 74 77 65 65 6e 20 74 68 65 6d 2e 20 48 between them. H
8bf0: 6f 77 65 76 65 72 20 77 65 20 6b 6e 6f 77 20 74 owever we know t
8c00: 68 61 74 20 74 68 65 72 65 0a 09 23 20 68 61 73 hat there..# has
8c10: 20 74 6f 20 62 65 20 61 20 61 6e 20 69 6e 64 69 to be a an indi
8c20: 72 65 63 74 20 64 65 70 65 6e 64 65 6e 63 79 2c rect dependency,
8c30: 20 62 65 20 69 74 20 74 68 72 6f 75 67 68 20 70 be it through p
8c40: 72 69 6d 61 72 79 0a 09 23 20 63 68 69 6c 64 72 rimary..# childr
8c50: 65 6e 2c 20 62 72 61 6e 63 68 20 63 68 69 6c 64 en, branch child
8c60: 72 65 6e 2c 20 6f 72 20 61 20 63 6f 6d 62 69 6e ren, or a combin
8c70: 61 74 69 6f 6e 20 74 68 65 72 65 6f 66 2e 0a 0a ation thereof...
8c80: 09 23 20 57 65 20 6e 6f 77 20 66 69 6c 6c 20 69 .# We now fill i
8c90: 6e 20 74 68 65 73 65 20 70 73 65 75 64 6f 2d 64 n these pseudo-d
8ca0: 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 69 66 20 ependencies, if
8cb0: 6e 6f 20 73 75 63 68 0a 09 23 20 64 65 70 65 6e no such..# depen
8cc0: 64 65 6e 63 79 20 65 78 69 73 74 73 20 61 6c 72 dency exists alr
8cd0: 65 61 64 79 2e 20 54 68 65 20 64 69 72 65 63 74 eady. The direct
8ce0: 69 6f 6e 20 6f 66 20 74 68 65 20 64 65 70 65 6e ion of the depen
8cf0: 64 65 6e 63 79 0a 09 23 20 69 73 20 61 63 74 75 dency..# is actu
8d00: 61 6c 6c 79 20 69 72 72 65 6c 65 76 61 6e 74 20 ally irrelevant
8d10: 66 6f 72 20 74 68 69 73 2e 0a 0a 09 23 20 4e 4f for this....# NO
8d20: 54 45 3a 20 54 68 69 73 20 69 73 20 64 69 66 66 TE: This is diff
8d30: 65 72 65 6e 74 20 66 72 6f 6d 20 63 76 73 32 73 erent from cvs2s
8d40: 76 6e 2e 20 4f 75 72 20 73 70 69 72 69 74 75 61 vn. Our spiritua
8d50: 6c 20 61 6e 63 65 73 74 6f 72 0a 09 23 20 64 6f l ancestor..# do
8d60: 65 73 20 6e 6f 74 20 75 73 65 20 73 75 63 68 20 es not use such
8d70: 70 73 65 75 64 6f 2d 64 65 70 65 6e 64 65 6e 63 pseudo-dependenc
8d80: 69 65 73 2c 20 68 6f 77 65 76 65 72 20 69 74 20 ies, however it
8d90: 75 73 65 73 20 61 0a 09 23 20 43 4f 4d 4d 49 54 uses a..# COMMIT
8da0: 5f 54 48 52 45 53 48 4f 4c 44 2c 20 61 20 74 69 _THRESHOLD, a ti
8db0: 6d 65 20 69 6e 74 65 72 76 61 6c 20 63 6f 6d 6d me interval comm
8dc0: 69 74 73 20 73 68 6f 75 6c 64 20 66 61 6c 6c 2e its should fall.
8dd0: 20 54 68 69 73 0a 09 23 20 77 69 6c 6c 20 67 72 This..# will gr
8de0: 65 61 74 6c 79 20 72 65 64 75 63 65 73 20 74 68 eatly reduces th
8df0: 65 20 72 69 73 6b 20 6f 66 20 67 65 74 74 69 6e e risk of gettin
8e00: 67 20 66 61 72 20 73 65 70 61 72 61 74 65 64 0a g far separated.
8e10: 09 23 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 .# revisions of
8e20: 74 68 65 20 73 61 6d 65 20 66 69 6c 65 20 69 6e the same file in
8e30: 74 6f 20 6f 6e 65 20 63 68 61 6e 67 65 73 65 74 to one changeset
8e40: 2e 0a 0a 09 23 20 57 65 20 61 6c 6c 6f 77 20 72 ....# We allow r
8e50: 65 76 69 73 69 6f 6e 73 20 74 6f 20 62 65 20 66 evisions to be f
8e60: 61 72 20 61 70 61 72 74 20 69 6e 20 74 69 6d 65 ar apart in time
8e70: 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 09 23 20 in the same..#
8e80: 63 68 61 6e 67 65 73 65 74 2c 20 62 75 74 20 69 changeset, but i
8e90: 6e 20 74 75 72 6e 20 6e 65 65 64 20 74 68 65 20 n turn need the
8ea0: 70 73 65 75 64 6f 2d 64 65 70 65 6e 64 65 6e 63 pseudo-dependenc
8eb0: 69 65 73 20 74 6f 0a 09 23 20 68 61 6e 64 6c 65 ies to..# handle
8ec0: 20 74 68 69 73 2e 0a 0a 09 6c 6f 67 20 77 72 69 this....log wri
8ed0: 74 65 20 31 34 20 63 73 65 74 73 20 7b 69 6e 74 te 14 csets {int
8ee0: 65 72 6e 61 6c 20 20 5b 61 72 72 61 79 20 73 69 ernal [array si
8ef0: 7a 65 20 64 65 70 5d 7d 0a 09 6c 6f 67 20 77 72 ze dep]}..log wr
8f00: 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 63 6f ite 14 csets {co
8f10: 6c 6c 65 63 74 65 64 20 5b 61 72 72 61 79 20 73 llected [array s
8f20: 69 7a 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 ize dependencies
8f30: 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 ]}..log write 14
8f40: 20 63 73 65 74 73 20 70 73 65 75 64 6f 2d 69 6e csets pseudo-in
8f50: 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 ternalsuccessors
8f60: 0a 0a 09 61 72 72 61 79 20 73 65 74 20 66 69 64 ...array set fid
8f70: 73 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 7b 72 s {}..foreach {r
8f80: 69 64 20 66 69 64 7d 20 5b 73 74 61 74 65 20 72 id fid} [state r
8f90: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
8fa0: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
8fb0: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
8fc0: 43 54 20 52 2e 72 69 64 2c 20 52 2e 66 69 64 0a CT R.rid, R.fid.
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 46 52 4f 4d FROM
8fe0: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 0a 20 20 revision R.
8ff0: 20 20 20 20 20 20 20 20 20 20 57 48 45 52 45 20 WHERE
9000: 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 73 65 R.rid IN $these
9010: 74 0a 09 7d 5d 5d 20 7b 20 6c 61 70 70 65 6e 64 t..}]] { lappend
9020: 20 66 69 64 73 28 24 66 69 64 29 20 24 72 69 64 fids($fid) $rid
9030: 20 7d 0a 0a 09 73 65 74 20 67 72 6f 75 70 73 20 }...set groups
9040: 7b 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 69 64 {}..foreach {fid
9050: 20 72 69 64 73 7d 20 5b 61 72 72 61 79 20 67 65 rids} [array ge
9060: 74 20 66 69 64 73 5d 20 7b 0a 09 20 20 20 20 69 t fids] {.. i
9070: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 72 69 64 f {[llength $rid
9080: 73 5d 20 3c 20 32 7d 20 63 6f 6e 74 69 6e 75 65 s] < 2} continue
9090: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 61 20 .. foreach a
90a0: 24 72 69 64 73 20 7b 0a 09 09 66 6f 72 65 61 63 $rids {...foreac
90b0: 68 20 62 20 24 72 69 64 73 20 7b 0a 09 09 20 20 h b $rids {...
90c0: 20 20 69 66 20 7b 24 61 20 3d 3d 20 24 62 7d 20 if {$a == $b}
90d0: 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 69 continue... i
90e0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists
90f0: 64 65 70 28 24 61 2c 24 62 29 5d 7d 20 63 6f 6e dep($a,$b)]} con
9100: 74 69 6e 75 65 0a 09 09 20 20 20 20 69 66 20 7b tinue... if {
9110: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 65 70 [info exists dep
9120: 28 24 62 2c 24 61 29 5d 7d 20 63 6f 6e 74 69 6e ($b,$a)]} contin
9130: 75 65 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 ue... lappend
9140: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 24 61 dependencies($a
9150: 29 20 24 62 0a 09 09 20 20 20 20 73 65 74 20 64 ) $b... set d
9160: 65 70 28 24 61 2c 24 62 29 20 2e 0a 09 09 20 20 ep($a,$b) ....
9170: 20 20 73 65 74 20 64 65 70 28 24 62 2c 24 61 29 set dep($b,$a)
9180: 20 2e 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 ....}.. }..
9190: 20 20 20 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 set n [llengt
91a0: 68 20 24 72 69 64 73 5d 0a 09 20 20 20 20 6c 61 h $rids].. la
91b0: 70 70 65 6e 64 20 67 72 6f 75 70 73 20 5b 6c 69 ppend groups [li
91c0: 73 74 20 24 6e 20 5b 65 78 70 72 20 7b 28 24 6e st $n [expr {($n
91d0: 2a 24 6e 2d 24 6e 29 2f 32 7d 5d 5d 0a 09 7d 0a *$n-$n)/2}]]..}.
91e0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 ..log write 14 c
91f0: 73 65 74 73 20 7b 70 73 65 75 64 6f 20 20 20 20 sets {pseudo
9200: 5b 61 72 72 61 79 20 73 69 7a 65 20 66 69 64 73 [array size fids
9210: 5d 20 28 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 ] ([lsort -index
9220: 20 30 20 2d 64 65 63 72 65 61 73 69 6e 67 20 2d 0 -decreasing -
9230: 69 6e 74 65 67 65 72 20 24 67 72 6f 75 70 73 5d integer $groups]
9240: 29 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 )}..log write 14
9250: 20 63 73 65 74 73 20 7b 69 6e 74 65 72 6e 61 6c csets {internal
9260: 20 20 5b 61 72 72 61 79 20 73 69 7a 65 20 64 65 [array size de
9270: 70 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 p]}..log write 1
9280: 34 20 63 73 65 74 73 20 7b 63 6f 6c 6c 65 63 74 4 csets {collect
9290: 65 64 20 5b 61 72 72 61 79 20 73 69 7a 65 20 64 ed [array size d
92a0: 65 70 65 6e 64 65 6e 63 69 65 73 5d 7d 0a 09 6c ependencies]}..l
92b0: 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 og write 14 cset
92c0: 73 20 63 6f 6d 70 6c 65 74 65 0a 09 72 65 74 75 s complete..retu
92d0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
92e0: 72 65 73 75 6c 74 20 3d 20 34 2d 6c 69 73 74 20 result = 4-list
92f0: 28 69 74 65 6d 74 79 70 65 20 69 74 65 6d 69 64 (itemtype itemid
9300: 20 6e 65 78 74 69 74 65 6d 74 79 70 65 20 6e 65 nextitemtype ne
9310: 78 74 69 74 65 6d 69 64 20 2e 2e 2e 29 0a 20 20 xtitemid ...).
9320: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 6f typemethod loo
9330: 70 73 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b ps {revisions} {
9340: 0a 09 23 20 4e 6f 74 65 3a 20 54 61 67 73 20 61 ..# Note: Tags a
9350: 6e 64 20 62 72 61 6e 63 68 65 73 20 63 61 6e 6e nd branches cann
9360: 6f 74 20 63 61 75 73 65 20 74 68 65 20 6c 6f 6f ot cause the loo
9370: 70 2e 20 54 68 65 69 72 20 69 64 27 73 2c 0a 09 p. Their id's,..
9380: 23 20 62 65 69 6e 67 20 6f 66 20 61 20 66 75 6e # being of a fun
9390: 64 61 6d 65 6e 74 61 6c 6c 79 20 64 69 66 66 65 damentally diffe
93a0: 72 65 6e 74 20 74 79 70 65 20 74 68 61 6e 20 74 rent type than t
93b0: 68 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20 he revisions..#
93c0: 63 6f 6d 69 6e 67 20 69 6e 20 63 61 6e 6e 6f 74 coming in cannot
93d0: 20 62 65 20 69 6e 20 74 68 65 20 73 65 74 2e 0a be in the set..
93e0: 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b ..set theset ('[
93f0: 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 join $revisions
9400: 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e {','}]')..return
9410: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
9420: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
9430: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
9440: 09 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d . -- (1) Prim
9450: 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 ary child.. S
9460: 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 2e 63 ELECT R.rid, R.c
9470: 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 hild.. FROM
9480: 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 revision R..
9490: 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 WHERE R.rid
94a0: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
94b0: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 - Restrict to re
94c0: 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 visions of inter
94d0: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
94e0: 52 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e R.child IS NOT N
94f0: 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 ULL -- Has pr
9500: 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 imary child..
9510: 20 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 AND R.child
9520: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
9530: 2d 20 4c 6f 6f 70 0a 09 20 20 20 20 2d 2d 0a 09 - Loop.. --..
9540: 20 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 2d UNION.. -
9550: 2d 20 28 32 29 20 53 65 63 6f 6e 64 61 72 79 20 - (2) Secondary
9560: 28 62 72 61 6e 63 68 29 20 63 68 69 6c 64 72 65 (branch) childre
9570: 6e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e n.. SELECT R.
9580: 72 69 64 2c 20 42 2e 62 72 69 64 0a 09 20 20 20 rid, B.brid..
9590: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
95a0: 20 52 2c 20 72 65 76 69 73 69 6f 6e 62 72 61 6e R, revisionbran
95b0: 63 68 63 68 69 6c 64 72 65 6e 20 42 0a 09 20 20 chchildren B..
95c0: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 WHERE R.rid
95d0: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
95e0: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 -- Restrict to r
95f0: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 evisions of inte
9600: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 rest.. AND
9610: 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 64 20 20 R.rid = B.rid
9620: 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 -- Selec
9630: 74 20 73 75 62 73 65 74 20 6f 66 20 62 72 61 6e t subset of bran
9640: 63 68 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 ch children..
9650: 20 41 4e 44 20 20 20 20 42 2e 72 69 64 20 20 20 AND B.rid
9660: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
9670: 2d 20 4c 6f 6f 70 0a 09 20 20 20 20 2d 2d 0a 09 - Loop.. --..
9680: 20 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 2d UNION.. -
9690: 2d 20 28 34 29 20 43 68 69 6c 64 20 6f 66 20 74 - (4) Child of t
96a0: 72 75 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 runk root succes
96b0: 73 6f 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 sor of last NTDB
96c0: 20 6f 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 on trunk...
96d0: 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 41 SELECT R.rid, RA
96e0: 2e 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d .child.. FROM
96f0: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 revision R, r
9700: 65 76 69 73 69 6f 6e 20 52 41 0a 09 20 20 20 20 evision RA..
9710: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 20 WHERE R.rid
9720: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
9730: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 - Restrict to re
9740: 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 visions of inter
9750: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
9760: 52 2e 69 73 64 65 66 61 75 6c 74 20 20 20 20 20 R.isdefault
9770: 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 -- Restr
9780: 69 63 74 20 74 6f 20 4e 54 44 42 0a 09 20 20 20 ict to NTDB..
9790: 20 41 4e 44 20 20 20 20 52 2e 64 62 63 68 69 6c AND R.dbchil
97a0: 64 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 d IS NOT NULL
97b0: 2d 2d 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 -- and last NTDB
97c0: 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 belonging to tr
97d0: 75 6e 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 20 unk.. AND
97e0: 52 41 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 RA.rid = R.dbchi
97f0: 6c 64 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 ld -- Go di
9800: 72 65 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 rectly to trunk
9810: 72 6f 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 root.. AND
9820: 20 52 41 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 RA.child IS NOT
9830: 20 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 NULL -- Has
9840: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 2e 0a 09 primary child...
9850: 20 20 20 20 41 4e 44 20 20 20 20 52 41 2e 63 68 AND RA.ch
9860: 69 6c 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 ild IN $theset
9870: 20 20 20 2d 2d 20 4c 6f 6f 70 0a 09 7d 5d 5d 0a -- Loop..}]].
9880: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 76 61 72 }.. # var
9890: 28 64 76 29 20 3d 20 64 69 63 74 20 28 69 74 65 (dv) = dict (ite
98a0: 6d 20 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 m -> list (item)
98b0: 29 2c 20 69 74 65 6d 20 20 3d 20 6c 69 73 74 20 ), item = list
98c0: 28 74 79 70 65 20 69 64 29 0a 20 20 20 20 74 79 (type id). ty
98d0: 70 65 6d 65 74 68 6f 64 20 73 75 63 63 65 73 73 pemethod success
98e0: 6f 72 73 20 7b 64 76 20 72 65 76 69 73 69 6f 6e ors {dv revision
98f0: 73 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24 64 s} {..upvar 1 $d
9900: 76 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 v dependencies..
9910: 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f set theset ('[jo
9920: 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 in $revisions {'
9930: 2c 27 7d 5d 27 29 0a 0a 09 23 20 54 68 65 20 66 ,'}]')...# The f
9940: 6f 6c 6c 6f 77 69 6e 67 20 63 61 73 65 73 20 73 ollowing cases s
9950: 70 65 63 69 66 79 20 77 68 65 6e 20 61 20 72 65 pecify when a re
9960: 76 69 73 69 6f 6e 20 53 20 69 73 20 61 20 73 75 vision S is a su
9970: 63 63 65 73 73 6f 72 0a 09 23 20 6f 66 20 61 20 ccessor..# of a
9980: 72 65 76 69 73 69 6f 6e 20 52 2e 20 45 61 63 68 revision R. Each
9990: 20 6f 66 20 74 68 65 20 63 61 73 65 73 20 74 72 of the cases tr
99a0: 61 6e 73 6c 61 74 65 73 20 69 6e 74 6f 20 6f 6e anslates into on
99b0: 65 20 6f 66 0a 09 23 20 74 68 65 20 62 72 61 6e e of..# the bran
99c0: 63 68 65 73 20 6f 66 20 74 68 65 20 53 51 4c 20 ches of the SQL
99d0: 55 4e 49 4f 4e 20 63 6f 6d 69 6e 67 20 62 65 6c UNION coming bel
99e0: 6f 77 2e 0a 09 23 0a 09 23 20 28 31 29 20 53 20 ow...#..# (1) S
99f0: 63 61 6e 20 62 65 20 61 20 70 72 69 6d 61 72 79 can be a primary
9a00: 20 63 68 69 6c 64 20 6f 66 20 52 2c 20 69 2e 65 child of R, i.e
9a10: 2e 20 69 6e 20 74 68 65 20 73 61 6d 65 20 4c 4f . in the same LO
9a20: 44 2e 20 52 0a 09 23 20 20 20 20 20 72 65 66 65 D. R..# refe
9a30: 72 65 6e 63 65 73 20 53 20 64 69 72 65 63 74 6c rences S directl
9a40: 79 2e 20 52 2e 63 68 69 6c 64 20 3d 20 53 28 2e y. R.child = S(.
9a50: 72 69 64 29 2c 20 69 66 20 69 74 20 65 78 69 73 rid), if it exis
9a60: 74 73 2e 0a 09 23 0a 09 23 20 28 32 29 20 53 20 ts...#..# (2) S
9a70: 63 61 6e 20 62 65 20 61 20 73 65 63 6f 6e 64 61 can be a seconda
9a80: 72 79 2c 20 69 2e 65 2e 20 62 72 61 6e 63 68 2c ry, i.e. branch,
9a90: 20 63 68 69 6c 64 20 6f 66 20 52 2e 20 48 65 72 child of R. Her
9aa0: 65 20 74 68 65 0a 09 23 20 20 20 20 20 6c 69 6e e the..# lin
9ab0: 6b 20 69 73 20 6d 61 64 65 20 74 68 72 6f 75 67 k is made throug
9ac0: 68 20 74 68 65 20 68 65 6c 70 65 72 20 74 61 62 h the helper tab
9ad0: 6c 65 0a 09 23 20 20 20 20 20 52 45 56 49 53 49 le..# REVISI
9ae0: 4f 4e 42 52 41 4e 43 48 43 48 49 4c 44 52 45 4e ONBRANCHCHILDREN
9af0: 2e 20 52 2e 72 69 64 20 2d 3e 20 52 42 43 2e 72 . R.rid -> RBC.r
9b00: 69 64 2c 20 52 42 43 2e 62 72 69 64 20 3d 0a 09 id, RBC.brid =..
9b10: 23 20 20 20 20 20 53 28 2e 72 69 64 29 0a 09 23 # S(.rid)..#
9b20: 0a 09 23 20 28 33 29 20 4f 72 69 67 69 6e 61 6c ..# (3) Original
9b30: 6c 79 20 74 68 69 73 20 75 73 65 20 63 61 73 65 ly this use case
9b40: 20 64 65 66 69 6e 65 64 20 74 68 65 20 72 6f 6f defined the roo
9b50: 74 20 6f 66 20 61 20 64 65 74 61 63 68 65 64 0a t of a detached.
9b60: 09 23 20 20 20 20 20 4e 54 44 42 20 61 73 20 74 .# NTDB as t
9b70: 68 65 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 he successor of
9b80: 74 68 65 20 74 72 75 6e 6b 20 72 6f 6f 74 2e 20 the trunk root.
9b90: 54 68 69 73 20 6c 65 61 64 73 20 74 6f 20 61 0a This leads to a.
9ba0: 09 23 20 20 20 20 20 62 61 64 20 74 61 6e 67 6c .# bad tangl
9bb0: 65 20 6c 61 74 65 72 20 6f 6e 2e 20 57 69 74 68 e later on. With
9bc0: 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 44 42 a detached NTDB
9bd0: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 09 23 the original..#
9be0: 20 20 20 20 20 74 72 75 6e 6b 20 72 6f 6f 74 20 trunk root
9bf0: 72 65 76 69 73 69 6f 6e 20 77 61 73 20 72 65 6d revision was rem
9c00: 6f 76 65 64 20 61 73 20 69 72 72 65 6c 65 76 61 oved as irreleva
9c10: 6e 74 2c 20 61 6c 6c 6f 77 69 6e 67 0a 09 23 20 nt, allowing..#
9c20: 20 20 20 20 74 68 65 20 6e 6f 6d 69 6e 61 6c 20 the nominal
9c30: 72 6f 6f 74 20 74 6f 20 62 65 20 6c 61 74 65 72 root to be later
9c40: 20 69 6e 20 74 69 6d 65 20 74 68 61 6e 20 74 68 in time than th
9c50: 65 20 4e 54 44 42 0a 09 23 20 20 20 20 20 72 6f e NTDB..# ro
9c60: 6f 74 2e 20 4e 6f 77 20 73 65 74 74 69 6e 67 20 ot. Now setting
9c70: 74 68 69 73 20 64 65 70 65 6e 64 65 6e 63 79 20 this dependency
9c80: 77 69 6c 6c 20 62 65 20 62 61 63 6b 77 61 72 64 will be backward
9c90: 20 69 6e 0a 09 23 20 20 20 20 20 74 69 6d 65 2e in..# time.
9ca0: 20 52 45 4d 4f 56 45 44 2e 0a 09 23 0a 09 23 20 REMOVED...#..#
9cb0: 28 34 29 20 49 66 20 52 20 69 73 20 74 68 65 20 (4) If R is the
9cc0: 6c 61 73 74 20 6f 66 20 74 68 65 20 4e 54 44 42 last of the NTDB
9cd0: 20 72 65 76 69 73 69 6f 6e 73 20 77 68 69 63 68 revisions which
9ce0: 20 62 65 6c 6f 6e 67 20 74 6f 0a 09 23 20 20 20 belong to..#
9cf0: 20 20 74 68 65 20 74 72 75 6e 6b 2c 20 74 68 65 the trunk, the
9d00: 6e 20 74 68 65 20 70 72 69 6d 61 72 79 20 63 68 n the primary ch
9d10: 69 6c 64 20 6f 66 20 74 68 65 20 74 72 75 6e 6b ild of the trunk
9d20: 20 72 6f 6f 74 20 28 74 68 65 0a 09 23 20 20 20 root (the..#
9d30: 20 20 27 31 2e 32 27 20 72 65 76 69 73 69 6f 6e '1.2' revision
9d40: 29 20 69 73 20 61 20 73 75 63 63 65 73 73 6f 72 ) is a successor
9d50: 2c 20 69 66 20 69 74 20 65 78 69 73 74 73 2e 0a , if it exists..
9d60: 0a 09 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 ..# Note that th
9d70: 65 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e e branches spawn
9d80: 65 64 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 ed from the revi
9d90: 73 69 6f 6e 73 2c 20 61 6e 64 20 74 68 65 0a 09 sions, and the..
9da0: 23 20 74 61 67 73 20 61 73 73 6f 63 69 61 74 65 # tags associate
9db0: 64 20 77 69 74 68 20 74 68 65 6d 20 61 72 65 20 d with them are
9dc0: 73 75 63 63 65 73 73 6f 72 73 20 61 73 20 77 65 successors as we
9dd0: 6c 6c 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 ll....foreach {r
9de0: 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 id child} [state
9df0: 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 run [subst -noc
9e00: 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 ommands -nobacks
9e10: 6c 61 73 68 65 73 20 7b 0a 20 20 20 20 2d 2d 20 lashes {. --
9e20: 28 31 29 20 50 72 69 6d 61 72 79 20 63 68 69 6c (1) Primary chil
9e30: 64 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e d.. SELECT R.
9e40: 72 69 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 20 rid, R.child..
9e50: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
9e60: 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 n R.. WHERE
9e70: 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 R.rid IN $thes
9e80: 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 et -- Restri
9e90: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 ct to revisions
9ea0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
9eb0: 20 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 AND R.child
9ec0: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d IS NOT NULL -
9ed0: 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 - Has primary ch
9ee0: 69 6c 64 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 ild. UNION.
9ef0: 20 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 61 -- (2) Seconda
9f00: 72 79 20 28 62 72 61 6e 63 68 29 20 63 68 69 6c ry (branch) chil
9f10: 64 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 54 dren.. SELECT
9f20: 20 52 2e 72 69 64 2c 20 42 2e 62 72 69 64 0a 09 R.rid, B.brid..
9f30: 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 FROM revis
9f40: 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 62 ion R, revisionb
9f50: 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 42 0a ranchchildren B.
9f60: 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 . WHERE R.ri
9f70: 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 d IN $theset
9f80: 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 -- Restrict t
9f90: 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 o revisions of i
9fa0: 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 nterest.. AND
9fb0: 20 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 R.rid = B.ri
9fc0: 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 d -- Se
9fd0: 6c 65 63 74 20 73 75 62 73 65 74 20 6f 66 20 62 lect subset of b
9fe0: 72 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a 20 ranch children.
9ff0: 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 UNION. --
a000: 28 34 29 20 43 68 69 6c 64 20 6f 66 20 74 72 75 (4) Child of tru
a010: 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 73 6f nk root successo
a020: 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 20 6f r of last NTDB o
a030: 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53 45 n trunk... SE
a040: 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 41 2e 63 LECT R.rid, RA.c
a050: 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 72 hild.. FROM r
a060: 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 evision R, revis
a070: 69 6f 6e 20 52 41 0a 09 20 20 20 20 57 48 45 52 ion RA.. WHER
a080: 45 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 E R.rid IN $th
a090: 65 73 65 74 20 20 20 20 20 20 2d 2d 20 52 65 73 eset -- Res
a0a0: 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f trict to revisio
a0b0: 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 ns of interest..
a0c0: 20 20 20 20 41 4e 44 20 20 20 52 2e 69 73 64 65 AND R.isde
a0d0: 66 61 75 6c 74 20 20 20 20 20 20 20 20 20 20 20 fault
a0e0: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
a0f0: 20 4e 54 44 42 0a 09 20 20 20 20 41 4e 44 20 20 NTDB.. AND
a100: 20 52 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f R.dbchild IS NO
a110: 54 20 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 T NULL -- and
a120: 6c 61 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 last NTDB belong
a130: 69 6e 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 ing to trunk..
a140: 20 20 41 4e 44 20 20 20 52 41 2e 72 69 64 20 3d AND RA.rid =
a150: 20 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 R.dbchild
a160: 2d 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 -- Go directly t
a170: 6f 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 o trunk root..
a180: 20 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 AND RA.child
a190: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 IS NOT NULL
a1a0: 2d 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 -- Has primary c
a1b0: 68 69 6c 64 2e 0a 09 7d 5d 5d 20 7b 0a 09 20 20 hild...}]] {..
a1c0: 20 20 23 20 43 6f 6e 73 69 64 65 72 20 6d 6f 76 # Consider mov
a1d0: 69 6e 67 20 74 68 69 73 20 74 6f 20 74 68 65 20 ing this to the
a1e0: 69 6e 74 65 67 72 69 74 79 20 6d 6f 64 75 6c 65 integrity module
a1f0: 2e 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 ... integrity
a200: 20 61 73 73 65 72 74 20 7b 24 72 69 64 20 21 3d assert {$rid !=
a210: 20 24 63 68 69 6c 64 7d 20 7b 52 65 76 69 73 69 $child} {Revisi
a220: 6f 6e 20 24 72 69 64 20 64 65 70 65 6e 64 73 20 on $rid depends
a230: 6f 6e 20 69 74 73 65 6c 66 2e 7d 0a 09 20 20 20 on itself.}..
a240: 20 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 lappend depende
a250: 6e 63 69 65 73 28 5b 6c 69 73 74 20 72 65 76 20 ncies([list rev
a260: 24 72 69 64 5d 29 20 5b 6c 69 73 74 20 72 65 76 $rid]) [list rev
a270: 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 6f 72 $child]..}..for
a280: 65 61 63 68 20 7b 72 69 64 20 63 68 69 6c 64 7d each {rid child}
a290: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
a2a0: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
a2b0: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
a2c0: 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 . SELECT R.ri
a2d0: 64 2c 20 54 2e 74 69 64 0a 09 20 20 20 20 46 52 d, T.tid.. FR
a2e0: 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c OM revision R,
a2f0: 20 74 61 67 20 54 0a 09 20 20 20 20 57 48 45 52 tag T.. WHER
a300: 45 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65 E R.rid IN $the
a310: 73 65 74 20 20 20 20 20 20 20 2d 2d 20 52 65 73 set -- Res
a320: 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f trict to revisio
a330: 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 ns of interest..
a340: 20 20 20 20 41 4e 44 20 20 20 20 54 2e 72 65 76 AND T.rev
a350: 20 3d 20 52 2e 72 69 64 20 20 20 20 20 20 20 20 = R.rid
a360: 20 20 2d 2d 20 53 65 6c 65 63 74 20 74 61 67 73 -- Select tags
a370: 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 attached to the
a380: 6d 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 m..}]] {.. la
a390: 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 ppend dependenci
a3a0: 65 73 28 5b 6c 69 73 74 20 72 65 76 20 24 72 69 es([list rev $ri
a3b0: 64 5d 29 20 5b 6c 69 73 74 20 73 79 6d 3a 3a 74 d]) [list sym::t
a3c0: 61 67 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 ag $child]..}..f
a3d0: 6f 72 65 61 63 68 20 7b 72 69 64 20 63 68 69 6c oreach {rid chil
a3e0: 64 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 d} [state run [s
a3f0: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
a400: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
a410: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e {.. SELECT R.
a420: 72 69 64 2c 20 42 2e 62 69 64 0a 09 20 20 20 20 rid, B.bid..
a430: 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 FROM revision
a440: 52 2c 20 62 72 61 6e 63 68 20 42 0a 09 20 20 20 R, branch B..
a450: 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 49 4e WHERE R.rid IN
a460: 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 2d $theset -
a470: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 - Restrict to re
a480: 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 visions of inter
a490: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
a4a0: 42 2e 72 6f 6f 74 20 3d 20 52 2e 72 69 64 20 20 B.root = R.rid
a4b0: 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 -- Select
a4c0: 20 62 72 61 6e 63 68 65 73 20 61 74 74 61 63 68 branches attach
a4d0: 65 64 20 74 6f 20 74 68 65 6d 0a 09 7d 5d 5d 20 ed to them..}]]
a4e0: 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 {.. lappend d
a4f0: 65 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 ependencies([lis
a500: 74 20 72 65 76 20 24 72 69 64 5d 29 20 5b 6c 69 t rev $rid]) [li
a510: 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20 24 st sym::branch $
a520: 63 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 child]..}..retur
a530: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 n. }.. # r
a540: 65 73 75 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 esult = list (ch
a550: 61 6e 67 65 73 65 74 2d 69 64 29 0a 20 20 20 20 angeset-id).
a560: 74 79 70 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 typemethod cs_su
a570: 63 63 65 73 73 6f 72 73 20 7b 72 65 76 69 73 69 ccessors {revisi
a580: 6f 6e 73 7d 20 7b 0a 20 20 20 20 20 20 20 20 23 ons} {. #
a590: 20 54 68 69 73 20 69 73 20 61 20 76 61 72 69 61 This is a varia
a5a0: 6e 74 20 6f 66 20 27 73 75 63 63 65 73 73 6f 72 nt of 'successor
a5b0: 73 27 20 77 68 69 63 68 20 6d 61 70 73 20 74 68 s' which maps th
a5c0: 65 20 6c 6f 77 2d 6c 65 76 65 6c 0a 20 20 20 20 e low-level.
a5d0: 20 20 20 20 23 20 64 61 74 61 20 64 69 72 65 63 # data direc
a5e0: 74 6c 79 20 74 6f 20 74 68 65 20 61 73 73 6f 63 tly to the assoc
a5f0: 69 61 74 65 64 20 63 68 61 6e 67 65 73 65 74 73 iated changesets
a600: 2e 20 49 2e 65 2e 20 69 6e 73 74 65 61 64 0a 20 . I.e. instead.
a610: 20 20 20 20 20 20 20 23 20 6d 69 6c 6c 69 6f 6e # million
a620: 73 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 79 20 s of dependency
a630: 70 61 69 72 73 20 28 69 6e 20 65 78 74 72 65 6d pairs (in extrem
a640: 65 20 63 61 73 65 73 20 28 45 78 61 6d 70 6c 65 e cases (Example
a650: 3a 20 54 63 6c 0a 20 20 20 20 20 20 20 20 23 20 : Tcl. #
a660: 43 56 53 29 29 20 77 65 20 72 65 74 75 72 6e 20 CVS)) we return
a670: 61 20 76 65 72 79 20 73 68 6f 72 74 20 61 6e 64 a very short and
a680: 20 6d 75 63 68 20 6d 6f 72 65 20 6d 61 6e 61 67 much more manag
a690: 65 61 62 6c 65 20 6c 69 73 74 0a 20 20 20 20 20 eable list.
a6a0: 20 20 20 23 20 6f 66 20 63 68 61 6e 67 65 73 65 # of changese
a6b0: 74 73 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 ts....set theset
a6c0: 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 ('[join $revisi
a6d0: 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 ons {','}]')..re
a6e0: 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 turn [state run
a6f0: 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e [subst -nocomman
a700: 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 ds -nobackslashe
a710: 73 20 7b 0a 20 20 20 20 2d 2d 20 28 31 29 20 50 s {. -- (1) P
a720: 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 rimary child..
a730: 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 SELECT C.cid..
a740: 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 FROM revis
a750: 69 6f 6e 20 52 2c 20 63 73 69 74 65 6d 20 43 49 ion R, csitem CI
a760: 2c 20 63 68 61 6e 67 65 73 65 74 20 43 0a 09 20 , changeset C..
a770: 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 WHERE R.rid
a780: 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 IN $theset
a790: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
a7a0: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
a7b0: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
a7c0: 20 20 52 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 R.child IS NOT
a7d0: 20 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 NULL -- Has
a7e0: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 20 20 primary child.
a7f0: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
a800: 20 43 49 2e 69 69 64 20 3d 20 52 2e 63 68 69 6c CI.iid = R.chil
a810: 64 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 d -- Selec
a820: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 t all changesets
a830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
a840: 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 C.cid = CI.c
a850: 69 64 20 20 20 20 20 20 20 20 20 2d 2d 20 63 6f id -- co
a860: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 70 72 69 ntaining the pri
a870: 6d 61 72 79 20 63 68 69 6c 64 0a 20 20 20 20 20 mary child.
a880: 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e AND C.
a890: 74 79 70 65 20 3d 20 30 20 20 20 20 20 20 20 20 type = 0
a8a0: 20 20 20 20 20 2d 2d 20 77 68 69 63 68 20 61 72 -- which ar
a8b0: 65 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 e revision chang
a8c0: 65 73 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a esets. UNION.
a8d0: 20 20 20 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e -- (2) Secon
a8e0: 64 61 72 79 20 28 62 72 61 6e 63 68 29 20 63 68 dary (branch) ch
a8f0: 69 6c 64 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 ildren.. SELE
a900: 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 46 52 CT C.cid.. FR
a910: 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c OM revision R,
a920: 20 72 65 76 69 73 69 6f 6e 62 72 61 6e 63 68 63 revisionbranchc
a930: 68 69 6c 64 72 65 6e 20 42 2c 20 63 73 69 74 65 hildren B, csite
a940: 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 m CI, changeset
a950: 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e C.. WHERE R.
a960: 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 rid IN $theset
a970: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 -- Restrict
a980: 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 to revisions of
a990: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
a9a0: 4e 44 20 20 20 20 52 2e 72 69 64 20 3d 20 42 2e ND R.rid = B.
a9b0: 72 69 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 rid --
a9c0: 53 65 6c 65 63 74 20 73 75 62 73 65 74 20 6f 66 Select subset of
a9d0: 20 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 6e branch children
a9e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
a9f0: 20 20 20 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 CI.iid = B.b
aa00: 72 69 64 20 20 20 20 20 20 20 20 2d 2d 20 53 65 rid -- Se
aa10: 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 lect all changes
aa20: 65 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 ets.
aa30: 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 AND C.cid = C
aa40: 49 2e 63 69 64 09 20 20 2d 2d 20 63 6f 6e 74 61 I.cid. -- conta
aa50: 69 6e 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 ining the branch
aa60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
aa70: 20 20 20 20 43 2e 74 79 70 65 20 3d 20 30 09 09 C.type = 0..
aa80: 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 20 72 -- which are r
aa90: 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 evision changese
aaa0: 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 ts. UNION.
aab0: 20 2d 2d 20 28 34 29 20 43 68 69 6c 64 20 6f 66 -- (4) Child of
aac0: 20 74 72 75 6e 6b 20 72 6f 6f 74 20 73 75 63 63 trunk root succ
aad0: 65 73 73 6f 72 20 6f 66 20 6c 61 73 74 20 4e 54 essor of last NT
aae0: 44 42 20 6f 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 DB on trunk...
aaf0: 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 SELECT C.cid..
ab00: 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 FROM revis
ab10: 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 20 ion R, revision
ab20: 52 41 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 RA, csitem CI, c
ab30: 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 hangeset C..
ab40: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 WHERE R.rid I
ab50: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 2d N $theset -
ab60: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 - Restrict to re
ab70: 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 visions of inter
ab80: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
ab90: 52 2e 69 73 64 65 66 61 75 6c 74 20 20 20 20 20 R.isdefault
aba0: 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 -- Restr
abb0: 69 63 74 20 74 6f 20 4e 54 44 42 0a 09 20 20 20 ict to NTDB..
abc0: 20 41 4e 44 20 20 20 20 52 2e 64 62 63 68 69 6c AND R.dbchil
abd0: 64 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 d IS NOT NULL
abe0: 2d 2d 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 -- and last NTDB
abf0: 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 belonging to tr
ac00: 75 6e 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 20 unk.. AND
ac10: 52 41 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 RA.rid = R.dbchi
ac20: 6c 64 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 ld -- Go di
ac30: 72 65 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 rectly to trunk
ac40: 72 6f 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 root.. AND
ac50: 20 52 41 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 RA.child IS NOT
ac60: 20 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 NULL -- Has
ac70: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 2e 0a 20 primary child..
ac80: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
ac90: 20 20 43 49 2e 69 69 64 20 3d 20 52 41 2e 63 68 CI.iid = RA.ch
aca0: 69 6c 64 20 20 20 20 20 20 20 2d 2d 20 53 65 6c ild -- Sel
acb0: 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 ect all changese
acc0: 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 ts. A
acd0: 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 ND C.cid = CI
ace0: 2e 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e 74 61 .cid. -- conta
acf0: 69 6e 69 6e 67 20 74 68 65 20 70 72 69 6d 61 72 ining the primar
ad00: 79 20 63 68 69 6c 64 0a 20 20 20 20 20 20 20 20 y child.
ad10: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 AND C.typ
ad20: 65 20 3d 20 30 09 09 20 20 20 2d 2d 20 77 68 69 e = 0.. -- whi
ad30: 63 68 20 61 72 65 20 72 65 76 69 73 69 6f 6e 20 ch are revision
ad40: 63 68 61 6e 67 65 73 65 74 73 0a 20 20 20 20 55 changesets. U
ad50: 4e 49 4f 4e 0a 09 20 20 20 20 53 45 4c 45 43 54 NION.. SELECT
ad60: 20 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d C.cid.. FROM
ad70: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 74 revision R, t
ad80: 61 67 20 54 2c 20 63 73 69 74 65 6d 20 43 49 2c ag T, csitem CI,
ad90: 20 63 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 changeset C..
ada0: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 69 WHERE R.rid i
adb0: 6e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 n $theset
adc0: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
add0: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
ade0: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
adf0: 20 20 54 2e 72 65 76 20 3d 20 52 2e 72 69 64 09 T.rev = R.rid.
ae00: 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 74 61 67 -- Select tag
ae10: 73 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 s attached to th
ae20: 65 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 em. A
ae30: 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d 20 54 ND CI.iid = T
ae40: 2e 74 69 64 20 20 20 20 20 20 20 20 20 20 2d 2d .tid --
ae50: 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e Select all chan
ae60: 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 gesets.
ae70: 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 AND C.cid
ae80: 3d 20 43 49 2e 63 69 64 09 20 20 20 2d 2d 20 63 = CI.cid. -- c
ae90: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 ontaining the ta
aea0: 67 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 gs. A
aeb0: 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 31 ND C.type = 1
aec0: 09 09 20 20 20 2d 2d 20 77 68 69 63 68 20 61 72 .. -- which ar
aed0: 65 20 74 61 67 20 63 68 61 6e 67 65 73 65 74 73 e tag changesets
aee0: 0a 20 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 . UNION..
aef0: 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 SELECT C.cid..
af00: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
af10: 6e 20 52 2c 20 62 72 61 6e 63 68 20 42 2c 20 63 n R, branch B, c
af20: 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 sitem CI, change
af30: 73 65 74 20 43 0a 09 20 20 20 20 57 48 45 52 45 set C.. WHERE
af40: 20 20 52 2e 72 69 64 20 69 6e 20 24 74 68 65 73 R.rid in $thes
af50: 65 74 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 et -- Res
af60: 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f trict to revisio
af70: 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 ns of interest..
af80: 20 20 20 20 41 4e 44 20 20 20 20 42 2e 72 6f 6f AND B.roo
af90: 74 20 3d 20 52 2e 72 69 64 09 20 20 20 2d 2d 20 t = R.rid. --
afa0: 53 65 6c 65 63 74 20 62 72 61 6e 63 68 65 73 20 Select branches
afb0: 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d attached to them
afc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
afd0: 20 20 20 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 CI.iid = B.b
afe0: 69 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 id -- S
aff0: 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 elect all change
b000: 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 sets.
b010: 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 AND C.cid =
b020: 43 49 2e 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e CI.cid. -- con
b030: 74 61 69 6e 69 6e 67 20 74 68 65 20 62 72 61 6e taining the bran
b040: 63 68 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 ches.
b050: 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d AND C.type =
b060: 20 32 09 09 20 20 20 2d 2d 20 77 68 69 63 68 20 2.. -- which
b070: 61 72 65 20 62 72 61 6e 63 68 20 63 68 61 6e 67 are branch chang
b080: 65 73 65 74 73 0a 09 7d 5d 5d 0a 20 20 20 20 7d esets..}]]. }
b090: 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d .. # result =
b0a0: 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 0a 20 20 20 symbol name.
b0b0: 20 74 79 70 65 6d 65 74 68 6f 64 20 63 73 5f 6c typemethod cs_l
b0c0: 6f 64 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b od {revisions} {
b0d0: 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 73 20 74 ..# Determines t
b0e0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 he name of the s
b0f0: 79 6d 62 6f 6c 20 77 68 69 63 68 20 69 73 20 74 ymbol which is t
b100: 68 65 20 6c 69 6e 65 20 6f 66 0a 09 23 20 64 65 he line of..# de
b110: 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 velopment for th
b120: 65 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 61 e revisions in a
b130: 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a 09 73 65 changeset....se
b140: 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e t theset ('[join
b150: 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 $revisions {','
b160: 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 }]')..return [st
b170: 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d ate run [subst -
b180: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 nocommands -noba
b190: 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 ckslashes {..
b1a0: 20 53 45 4c 45 43 54 0a 09 20 20 20 20 44 49 53 SELECT.. DIS
b1b0: 54 49 4e 43 54 20 4c 2e 6e 61 6d 65 0a 09 20 20 TINCT L.name..
b1c0: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
b1d0: 6e 20 52 2c 20 73 79 6d 62 6f 6c 20 4c 0a 09 20 n R, symbol L..
b1e0: 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 WHERE R.rid
b1f0: 69 6e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 in $theset
b200: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
b210: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e revisions of in
b220: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 terest.. AND
b230: 20 20 20 4c 2e 73 69 64 20 3d 20 52 2e 6c 6f 64 L.sid = R.lod
b240: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 47 65 -- Ge
b250: 74 20 6c 6f 64 20 73 79 6d 62 6f 6c 20 6f 66 20 t lod symbol of
b260: 72 65 76 69 73 69 6f 6e 0a 09 7d 5d 5d 0a 20 20 revision..}]].
b270: 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 }.}..# # ## ##
b280: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
b290: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 ############# #
b2a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b2b0: 23 23 23 23 0a 23 23 20 48 65 6c 70 65 72 20 73 ####.## Helper s
b2c0: 69 6e 67 6c 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e ingleton. Comman
b2d0: 64 73 20 66 6f 72 20 74 61 67 20 73 79 6d 62 6f ds for tag symbo
b2e0: 6c 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a 73 l changesets...s
b2f0: 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a nit::type ::vc::
b300: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
b310: 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 cvs::project::re
b320: 76 3a 3a 73 79 6d 3a 3a 74 61 67 20 7b 0a 20 20 v::sym::tag {.
b330: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 79 72 typemethod byr
b340: 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 evision {} { ret
b350: 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 70 65 urn 0 }. type
b360: 6d 65 74 68 6f 64 20 62 79 73 79 6d 62 6f 6c 20 method bysymbol
b370: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 {} { return 1
b380: 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 }. typemethod
b390: 20 69 73 74 61 67 20 20 20 20 20 20 7b 7d 20 7b istag {} {
b3a0: 20 72 65 74 75 72 6e 20 31 20 7d 0a 20 20 20 20 return 1 }.
b3b0: 74 79 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61 typemethod isbra
b3c0: 6e 63 68 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 nch {} { retur
b3d0: 6e 20 30 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d n 0 }.. typem
b3e0: 65 74 68 6f 64 20 73 74 72 20 7b 74 61 67 7d 20 ethod str {tag}
b3f0: 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 {..struct::list
b400: 61 73 73 69 67 6e 20 5b 73 74 61 74 65 20 72 75 assign [state ru
b410: 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 n {.. SELECT
b420: 53 2e 6e 61 6d 65 2c 20 46 2e 6e 61 6d 65 2c 20 S.name, F.name,
b430: 50 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d P.name.. FROM
b440: 20 20 20 74 61 67 20 54 2c 20 73 79 6d 62 6f 6c tag T, symbol
b450: 20 53 2c 20 66 69 6c 65 20 46 2c 20 70 72 6f 6a S, file F, proj
b460: 65 63 74 20 50 0a 09 20 20 20 20 57 48 45 52 45 ect P.. WHERE
b470: 20 20 54 2e 74 69 64 20 3d 20 24 74 61 67 20 20 T.tid = $tag
b480: 20 2d 2d 20 46 69 6e 64 20 73 70 65 63 69 66 69 -- Find specifi
b490: 65 64 20 74 61 67 0a 09 20 20 20 20 41 4e 44 20 ed tag.. AND
b4a0: 20 20 20 46 2e 66 69 64 20 3d 20 54 2e 66 69 64 F.fid = T.fid
b4b0: 20 20 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 -- Get file of
b4c0: 20 74 61 67 0a 09 20 20 20 20 41 4e 44 20 20 20 tag.. AND
b4d0: 20 50 2e 70 69 64 20 3d 20 46 2e 70 69 64 20 20 P.pid = F.pid
b4e0: 2d 2d 20 47 65 74 20 70 72 6f 6a 65 63 74 20 6f -- Get project o
b4f0: 66 20 66 69 6c 65 0a 09 20 20 20 20 41 4e 44 20 f file.. AND
b500: 20 20 20 53 2e 73 69 64 20 3d 20 54 2e 73 69 64 S.sid = T.sid
b510: 20 20 2d 2d 20 47 65 74 20 73 79 6d 62 6f 6c 20 -- Get symbol
b520: 6f 66 20 74 61 67 0a 09 7d 5d 20 73 6e 61 6d 65 of tag..}] sname
b530: 20 66 6e 61 6d 65 20 70 6e 61 6d 65 0a 09 72 65 fname pname..re
b540: 74 75 72 6e 20 22 24 70 6e 61 6d 65 2f 54 27 24 turn "$pname/T'$
b550: 7b 73 6e 61 6d 65 7d 27 3a 3a 24 66 6e 61 6d 65 {sname}'::$fname
b560: 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 ". }.. # r
b570: 65 73 75 6c 74 20 3d 20 6c 69 73 74 20 28 6d 69 esult = list (mi
b580: 6e 74 69 6d 65 2c 20 6d 61 78 74 69 6d 65 29 0a ntime, maxtime).
b590: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 74 typemethod t
b5a0: 69 6d 65 72 61 6e 67 65 20 7b 74 61 67 73 7d 20 imerange {tags}
b5b0: 7b 0a 09 23 20 54 68 65 20 72 61 6e 67 65 20 69 {..# The range i
b5c0: 73 20 64 65 66 69 6e 65 64 20 61 73 20 74 68 65 s defined as the
b5d0: 20 72 61 6e 67 65 20 6f 66 20 74 68 65 20 72 65 range of the re
b5e0: 76 69 73 69 6f 6e 73 20 74 68 65 20 74 61 67 73 visions the tags
b5f0: 0a 09 23 20 61 72 65 20 61 74 74 61 63 68 65 64 ..# are attached
b600: 20 74 6f 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 to....set these
b610: 74 20 28 27 5b 6a 6f 69 6e 20 24 74 61 67 73 20 t ('[join $tags
b620: 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e {','}]')..return
b630: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
b640: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
b650: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
b660: 09 20 20 20 20 53 45 4c 45 43 54 20 4d 49 4e 28 . SELECT MIN(
b670: 52 2e 64 61 74 65 29 2c 20 4d 41 58 28 52 2e 64 R.date), MAX(R.d
b680: 61 74 65 29 0a 09 20 20 20 20 46 52 4f 4d 20 20 ate).. FROM
b690: 20 74 61 67 20 54 2c 20 72 65 76 69 73 69 6f 6e tag T, revision
b6a0: 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 54 R.. WHERE T
b6b0: 2e 74 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 .tid IN $theset
b6c0: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
b6d0: 74 61 67 73 20 6f 66 20 69 6e 74 65 72 65 73 74 tags of interest
b6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
b6f0: 20 20 20 20 52 2e 72 69 64 20 3d 20 54 2e 72 65 R.rid = T.re
b700: 76 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 v -- Select
b710: 74 61 67 20 70 61 72 65 6e 74 20 72 65 76 69 73 tag parent revis
b720: 69 6f 6e 73 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a ions..}]]. }.
b730: 0a 20 20 20 20 23 20 76 61 72 28 64 76 29 20 3d . # var(dv) =
b740: 20 64 69 63 74 20 28 69 74 65 6d 20 2d 3e 20 6c dict (item -> l
b750: 69 73 74 20 28 69 74 65 6d 29 29 2c 20 69 74 65 ist (item)), ite
b760: 6d 20 20 3d 20 6c 69 73 74 20 28 74 79 70 65 20 m = list (type
b770: 69 64 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 id). typemeth
b780: 6f 64 20 73 75 63 63 65 73 73 6f 72 73 20 7b 64 od successors {d
b790: 76 20 74 61 67 73 7d 20 7b 0a 09 23 20 54 61 67 v tags} {..# Tag
b7a0: 73 20 68 61 76 65 20 6e 6f 20 73 75 63 63 65 73 s have no succes
b7b0: 73 6f 72 73 2e 0a 09 72 65 74 75 72 6e 0a 20 20 sors...return.
b7c0: 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c }.. # resul
b7d0: 74 20 3d 20 34 2d 6c 69 73 74 20 28 69 74 65 6d t = 4-list (item
b7e0: 74 79 70 65 20 69 74 65 6d 69 64 20 6e 65 78 74 type itemid next
b7f0: 69 74 65 6d 74 79 70 65 20 6e 65 78 74 69 74 65 itemtype nextite
b800: 6d 69 64 20 2e 2e 2e 29 0a 20 20 20 20 74 79 70 mid ...). typ
b810: 65 6d 65 74 68 6f 64 20 6c 6f 6f 70 73 20 7b 74 emethod loops {t
b820: 61 67 73 7d 20 7b 0a 09 23 20 54 61 67 73 20 68 ags} {..# Tags h
b830: 61 76 65 20 6e 6f 20 73 75 63 63 65 73 73 6f 72 ave no successor
b840: 73 2c 20 74 68 65 72 65 66 6f 72 65 20 63 61 6e s, therefore can
b850: 6e 6f 74 20 63 61 75 73 65 20 6c 6f 6f 70 73 0a not cause loops.
b860: 09 72 65 74 75 72 6e 20 7b 7d 0a 20 20 20 20 7d .return {}. }
b870: 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d .. # result =
b880: 20 6c 69 73 74 20 28 63 68 61 6e 67 65 73 65 74 list (changeset
b890: 2d 69 64 29 0a 20 20 20 20 74 79 70 65 6d 65 74 -id). typemet
b8a0: 68 6f 64 20 63 73 5f 73 75 63 63 65 73 73 6f 72 hod cs_successor
b8b0: 73 20 7b 74 61 67 73 7d 20 7b 0a 09 23 20 54 61 s {tags} {..# Ta
b8c0: 67 73 20 68 61 76 65 20 6e 6f 20 73 75 63 63 65 gs have no succe
b8d0: 73 73 6f 72 73 2e 0a 09 72 65 74 75 72 6e 0a 20 ssors...return.
b8e0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 }.. # resu
b8f0: 6c 74 20 3d 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 lt = symbol name
b900: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
b910: 63 73 5f 6c 6f 64 20 7b 74 61 67 73 7d 20 7b 0a cs_lod {tags} {.
b920: 09 23 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 .# Determines th
b930: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 79 e name of the sy
b940: 6d 62 6f 6c 20 77 68 69 63 68 20 69 73 20 74 68 mbol which is th
b950: 65 20 6c 69 6e 65 20 6f 66 0a 09 23 20 64 65 76 e line of..# dev
b960: 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 elopment for the
b970: 20 74 61 67 73 20 69 6e 20 61 20 63 68 61 6e 67 tags in a chang
b980: 65 73 65 74 2e 0a 0a 09 73 65 74 20 74 68 65 73 eset....set thes
b990: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 74 61 67 73 et ('[join $tags
b9a0: 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 {','}]')..retur
b9b0: 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 n [state run [su
b9c0: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
b9d0: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
b9e0: 0a 09 20 20 20 20 53 45 4c 45 43 54 0a 09 20 20 .. SELECT..
b9f0: 20 20 44 49 53 54 49 4e 43 54 20 4c 2e 6e 61 6d DISTINCT L.nam
ba00: 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 74 61 e.. FROM ta
ba10: 67 20 54 2c 20 73 79 6d 62 6f 6c 20 4c 0a 09 20 g T, symbol L..
ba20: 20 20 20 57 48 45 52 45 20 20 54 2e 74 69 64 20 WHERE T.tid
ba30: 69 6e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 in $theset
ba40: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
ba50: 20 74 61 67 73 20 6f 66 20 69 6e 74 65 72 65 73 tags of interes
ba60: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 4c 2e t.. AND L.
ba70: 73 69 64 20 3d 20 54 2e 6c 6f 64 20 20 20 20 20 sid = T.lod
ba80: 20 20 20 20 20 20 2d 2d 20 47 65 74 20 6c 6f 64 -- Get lod
ba90: 20 73 79 6d 62 6f 6c 20 6f 66 20 74 61 67 0a 09 symbol of tag..
baa0: 7d 5d 5d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 }]]. }.}..# #
bab0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
bac0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
bad0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
bae0: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 48 65 ##########.## He
baf0: 6c 70 65 72 20 73 69 6e 67 6c 65 74 6f 6e 2e 20 lper singleton.
bb00: 43 6f 6d 6d 61 6e 64 73 20 66 6f 72 20 62 72 61 Commands for bra
bb10: 6e 63 68 20 73 79 6d 62 6f 6c 20 63 68 61 6e 67 nch symbol chang
bb20: 65 73 65 74 73 2e 0a 0a 73 6e 69 74 3a 3a 74 79 esets...snit::ty
bb30: 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a pe ::vc::fossil:
bb40: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 :import::cvs::pr
bb50: 6f 6a 65 63 74 3a 3a 72 65 76 3a 3a 73 79 6d 3a oject::rev::sym:
bb60: 3a 62 72 61 6e 63 68 20 7b 0a 20 20 20 20 74 79 :branch {. ty
bb70: 70 65 6d 65 74 68 6f 64 20 62 79 72 65 76 69 73 pemethod byrevis
bb80: 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 ion {} { return
bb90: 30 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 0 }. typemeth
bba0: 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 7b 7d od bysymbol {}
bbb0: 20 7b 20 72 65 74 75 72 6e 20 31 20 7d 0a 20 20 { return 1 }.
bbc0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74 typemethod ist
bbd0: 61 67 20 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 ag {} { ret
bbe0: 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 70 65 urn 0 }. type
bbf0: 6d 65 74 68 6f 64 20 69 73 62 72 61 6e 63 68 20 method isbranch
bc00: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 {} { return 1
bc10: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }.. typemetho
bc20: 64 20 73 74 72 20 7b 62 72 61 6e 63 68 7d 20 7b d str {branch} {
bc30: 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 ..struct::list a
bc40: 73 73 69 67 6e 20 5b 73 74 61 74 65 20 72 75 6e ssign [state run
bc50: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53 {.. SELECT S
bc60: 2e 6e 61 6d 65 2c 20 46 2e 6e 61 6d 65 2c 20 50 .name, F.name, P
bc70: 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 .name.. FROM
bc80: 20 20 62 72 61 6e 63 68 20 42 2c 20 73 79 6d 62 branch B, symb
bc90: 6f 6c 20 53 2c 20 66 69 6c 65 20 46 2c 20 70 72 ol S, file F, pr
bca0: 6f 6a 65 63 74 20 50 0a 09 20 20 20 20 57 48 45 oject P.. WHE
bcb0: 52 45 20 20 42 2e 62 69 64 20 3d 20 24 62 72 61 RE B.bid = $bra
bcc0: 6e 63 68 20 20 2d 2d 20 46 69 6e 64 20 73 70 65 nch -- Find spe
bcd0: 63 69 66 69 65 64 20 62 72 61 6e 63 68 0a 09 20 cified branch..
bce0: 20 20 20 41 4e 44 20 20 20 20 46 2e 66 69 64 20 AND F.fid
bcf0: 3d 20 42 2e 66 69 64 20 20 20 20 2d 2d 20 47 65 = B.fid -- Ge
bd00: 74 20 66 69 6c 65 20 6f 66 20 62 72 61 6e 63 68 t file of branch
bd10: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 50 2e 70 .. AND P.p
bd20: 69 64 20 3d 20 46 2e 70 69 64 20 20 20 20 2d 2d id = F.pid --
bd30: 20 47 65 74 20 70 72 6f 6a 65 63 74 20 6f 66 20 Get project of
bd40: 66 69 6c 65 0a 09 20 20 20 20 41 4e 44 20 20 20 file.. AND
bd50: 20 53 2e 73 69 64 20 3d 20 42 2e 73 69 64 20 20 S.sid = B.sid
bd60: 20 20 2d 2d 20 47 65 74 20 73 79 6d 62 6f 6c 20 -- Get symbol
bd70: 6f 66 20 62 72 61 6e 63 68 0a 09 7d 5d 20 73 6e of branch..}] sn
bd80: 61 6d 65 20 66 6e 61 6d 65 20 70 6e 61 6d 65 0a ame fname pname.
bd90: 09 72 65 74 75 72 6e 20 22 24 70 6e 61 6d 65 2f .return "$pname/
bda0: 42 27 24 7b 73 6e 61 6d 65 7d 27 3a 3a 24 66 6e B'${sname}'::$fn
bdb0: 61 6d 65 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ame". }..
bdc0: 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 73 74 20 # result = list
bdd0: 28 6d 69 6e 74 69 6d 65 2c 20 6d 61 78 74 69 6d (mintime, maxtim
bde0: 65 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f e). typemetho
bdf0: 64 20 74 69 6d 65 72 61 6e 67 65 20 7b 62 72 61 d timerange {bra
be00: 6e 63 68 65 73 7d 20 7b 0a 09 23 20 54 68 65 20 nches} {..# The
be10: 72 61 6e 67 65 20 6f 66 20 61 20 62 72 61 6e 63 range of a branc
be20: 68 20 69 73 20 64 65 66 69 6e 65 64 20 61 73 20 h is defined as
be30: 74 68 65 20 72 61 6e 67 65 20 6f 66 20 74 68 65 the range of the
be40: 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 74 68 ..# revisions th
be50: 65 20 62 72 61 6e 63 68 65 73 20 61 72 65 20 73 e branches are s
be60: 70 61 77 6e 65 64 20 62 79 2e 20 4e 4f 54 45 20 pawned by. NOTE
be70: 68 6f 77 65 76 65 72 20 74 68 61 74 20 74 68 65 however that the
be80: 0a 09 23 20 62 72 61 6e 63 68 65 73 20 61 73 73 ..# branches ass
be90: 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20 64 ociated with a d
bea0: 65 74 61 63 68 65 64 20 4e 54 44 42 20 77 69 6c etached NTDB wil
beb0: 6c 20 68 61 76 65 20 6e 6f 20 72 6f 6f 74 0a 09 l have no root..
bec0: 23 20 73 70 61 77 6e 69 6e 67 20 74 68 65 6d 2c # spawning them,
bed0: 20 68 65 6e 63 65 20 74 68 65 79 20 68 61 76 65 hence they have
bee0: 20 6e 6f 20 72 65 61 6c 20 74 69 6d 65 72 61 6e no real timeran
bef0: 67 65 20 61 6e 79 0a 09 23 20 6c 6f 6e 67 65 72 ge any..# longer
bf00: 2e 20 42 79 20 75 73 69 6e 67 20 30 20 77 65 20 . By using 0 we
bf10: 70 75 74 20 74 68 65 6d 20 69 6e 20 66 72 6f 6e put them in fron
bf20: 74 20 6f 66 20 65 76 65 72 79 74 68 69 6e 67 20 t of everything
bf30: 65 6c 73 65 2c 0a 09 23 20 61 73 20 74 68 65 79 else,..# as they
bf40: 20 6c 6f 67 69 63 61 6c 6c 79 20 61 72 65 2e 0a logically are..
bf50: 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b ..set theset ('[
bf60: 6a 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b join $branches {
bf70: 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 ','}]')..return
bf80: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
bf90: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
bfa0: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
bfb0: 20 20 20 20 53 45 4c 45 43 54 20 49 46 4e 55 4c SELECT IFNUL
bfc0: 4c 28 4d 49 4e 28 52 2e 64 61 74 65 29 2c 30 29 L(MIN(R.date),0)
bfd0: 2c 20 49 46 4e 55 4c 4c 28 4d 41 58 28 52 2e 64 , IFNULL(MAX(R.d
bfe0: 61 74 65 29 2c 30 29 0a 09 20 20 20 20 46 52 4f ate),0).. FRO
bff0: 4d 20 20 62 72 61 6e 63 68 20 42 2c 20 72 65 76 M branch B, rev
c000: 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 ision R.. WHE
c010: 52 45 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 RE B.bid IN $the
c020: 73 65 74 20 20 20 2d 2d 20 52 65 73 74 72 69 63 set -- Restric
c030: 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 t to branches of
c040: 20 69 6e 74 65 72 65 73 74 0a 20 20 20 20 20 20 interest.
c050: 20 20 20 20 20 20 41 4e 44 20 20 20 52 2e 72 69 AND R.ri
c060: 64 20 3d 20 42 2e 72 6f 6f 74 20 20 20 20 20 2d d = B.root -
c070: 2d 20 53 65 6c 65 63 74 20 62 72 61 6e 63 68 20 - Select branch
c080: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 73 parent revisions
c090: 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 ..}]]. }..
c0a0: 20 23 20 72 65 73 75 6c 74 20 3d 20 34 2d 6c 69 # result = 4-li
c0b0: 73 74 20 28 69 74 65 6d 74 79 70 65 20 69 74 65 st (itemtype ite
c0c0: 6d 69 64 20 6e 65 78 74 69 74 65 6d 74 79 70 65 mid nextitemtype
c0d0: 20 6e 65 78 74 69 74 65 6d 69 64 20 2e 2e 2e 29 nextitemid ...)
c0e0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
c0f0: 6c 6f 6f 70 73 20 7b 62 72 61 6e 63 68 65 73 7d loops {branches}
c100: 20 7b 0a 09 23 20 4e 6f 74 65 3a 20 52 65 76 69 {..# Note: Revi
c110: 73 69 6f 6e 73 20 61 6e 64 20 74 61 67 73 20 63 sions and tags c
c120: 61 6e 6e 6f 74 20 63 61 75 73 65 20 74 68 65 20 annot cause the
c130: 6c 6f 6f 70 2e 20 42 65 69 6e 67 20 6f 66 20 61 loop. Being of a
c140: 0a 09 23 20 66 75 6e 64 61 6d 65 6e 74 61 6c 6c ..# fundamentall
c150: 79 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 y different type
c160: 20 74 68 65 79 20 63 61 6e 6e 6f 74 20 62 65 20 they cannot be
c170: 69 6e 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 0a in the incoming.
c180: 09 23 20 73 65 74 20 6f 66 20 69 64 73 2e 0a 0a .# set of ids...
c190: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a .set theset ('[j
c1a0: 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 oin $branches {'
c1b0: 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b ,'}]')..return [
c1c0: 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 state run [subst
c1d0: 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f -nocommands -no
c1e0: 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 backslashes {..
c1f0: 20 20 20 53 45 4c 45 43 54 20 42 2e 62 69 64 2c SELECT B.bid,
c200: 20 42 58 2e 62 69 64 0a 09 20 20 20 20 46 52 4f BX.bid.. FRO
c210: 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 70 72 M branch B, pr
c220: 65 66 65 72 65 64 70 61 72 65 6e 74 20 50 2c 20 eferedparent P,
c230: 62 72 61 6e 63 68 20 42 58 0a 09 20 20 20 20 57 branch BX.. W
c240: 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 HERE B.bid IN $
c250: 74 68 65 73 65 74 20 20 20 2d 2d 20 52 65 73 74 theset -- Rest
c260: 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 rict to branches
c270: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
c280: 20 20 41 4e 44 20 20 20 20 42 2e 73 69 64 20 3d AND B.sid =
c290: 20 50 2e 70 69 64 20 20 20 20 20 20 2d 2d 20 47 P.pid -- G
c2a0: 65 74 20 74 68 65 20 70 72 65 66 65 72 65 64 20 et the prefered
c2b0: 62 72 61 6e 63 68 65 73 20 76 69 61 0a 09 20 20 branches via..
c2c0: 20 20 41 4e 44 20 20 20 20 42 58 2e 73 69 64 20 AND BX.sid
c2d0: 3d 20 50 2e 73 69 64 20 20 20 20 20 2d 2d 20 74 = P.sid -- t
c2e0: 68 65 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c he branch symbol
c2f0: 73 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 58 s.. AND BX
c300: 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 .bid IN $theset
c310: 20 2d 2d 20 4c 6f 6f 70 0a 09 7d 5d 5d 0a 20 20 -- Loop..}]].
c320: 20 20 7d 0a 0a 20 20 20 20 23 20 76 61 72 28 64 }.. # var(d
c330: 76 29 20 3d 20 64 69 63 74 20 28 69 74 65 6d 20 v) = dict (item
c340: 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 29 2c -> list (item)),
c350: 20 69 74 65 6d 20 20 3d 20 6c 69 73 74 20 28 74 item = list (t
c360: 79 70 65 20 69 64 29 0a 20 20 20 20 74 79 70 65 ype id). type
c370: 6d 65 74 68 6f 64 20 73 75 63 63 65 73 73 6f 72 method successor
c380: 73 20 7b 64 76 20 62 72 61 6e 63 68 65 73 7d 20 s {dv branches}
c390: 7b 0a 09 75 70 76 61 72 20 31 20 24 64 76 20 64 {..upvar 1 $dv d
c3a0: 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 23 20 54 ependencies..# T
c3b0: 68 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f he first revisio
c3c0: 6e 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 61 n committed on a
c3d0: 20 62 72 61 6e 63 68 2c 20 61 6e 64 20 61 6c 6c branch, and all
c3e0: 20 62 72 61 6e 63 68 65 73 0a 09 23 20 61 6e 64 branches..# and
c3f0: 20 74 61 67 73 20 77 68 69 63 68 20 68 61 76 65 tags which have
c400: 20 69 74 20 61 73 20 74 68 65 69 72 20 70 72 65 it as their pre
c410: 66 65 72 65 64 20 70 61 72 65 6e 74 20 61 72 65 fered parent are
c420: 20 74 68 65 0a 09 23 20 73 75 63 63 65 73 73 6f the..# successo
c430: 72 73 20 6f 66 20 61 20 62 72 61 6e 63 68 2e 0a rs of a branch..
c440: 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b ..set theset ('[
c450: 6a 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b join $branches {
c460: 27 2c 27 7d 5d 27 29 0a 09 66 6f 72 65 61 63 68 ','}]')..foreach
c470: 20 7b 62 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 {bid child} [st
c480: 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d ate run [subst -
c490: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 nocommands -noba
c4a0: 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 ckslashes {..
c4b0: 20 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 52 SELECT B.bid, R
c4c0: 2e 72 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 .rid.. FROM
c4d0: 20 62 72 61 6e 63 68 20 42 2c 20 72 65 76 69 73 branch B, revis
c4e0: 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 ion R.. WHERE
c4f0: 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 B.bid IN $thes
c500: 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 et -- Restri
c510: 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f ct to branches o
c520: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
c530: 41 4e 44 20 20 20 20 42 2e 66 69 72 73 74 20 3d AND B.first =
c540: 20 52 2e 72 69 64 20 20 20 20 20 20 2d 2d 20 47 R.rid -- G
c550: 65 74 20 66 69 72 73 74 20 72 65 76 69 73 69 6f et first revisio
c560: 6e 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a n on the branch.
c570: 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 .}]] {.. lapp
c580: 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73 end dependencies
c590: 28 5b 6c 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e ([list sym::bran
c5a0: 63 68 20 24 62 69 64 5d 29 20 5b 6c 69 73 74 20 ch $bid]) [list
c5b0: 72 65 76 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 rev $child]..}..
c5c0: 66 6f 72 65 61 63 68 20 7b 62 69 64 20 63 68 69 foreach {bid chi
c5d0: 6c 64 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b ld} [state run [
c5e0: 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 subst -nocommand
c5f0: 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 s -nobackslashes
c600: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 {.. SELECT B
c610: 2e 62 69 64 2c 20 42 58 2e 62 69 64 0a 09 20 20 .bid, BX.bid..
c620: 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 FROM branch
c630: 42 2c 20 70 72 65 66 65 72 65 64 70 61 72 65 6e B, preferedparen
c640: 74 20 50 2c 20 62 72 61 6e 63 68 20 42 58 0a 09 t P, branch BX..
c650: 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 WHERE B.bid
c660: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
c670: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 -- Restrict to b
c680: 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 ranches of inter
c690: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
c6a0: 42 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 B.sid = P.pid
c6b0: 20 20 20 20 20 2d 2d 20 47 65 74 20 73 75 62 6f -- Get subo
c6c0: 72 64 69 6e 61 74 65 20 62 72 61 6e 63 68 65 73 rdinate branches
c6d0: 20 76 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e via the.. AN
c6e0: 44 20 20 20 20 42 58 2e 73 69 64 20 3d 20 50 2e D BX.sid = P.
c6f0: 73 69 64 20 20 20 20 20 20 20 2d 2d 20 70 72 65 sid -- pre
c700: 66 65 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 fered parents of
c710: 20 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 09 their symbols..
c720: 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 }]] {.. lappe
c730: 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 nd dependencies(
c740: 5b 6c 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 [list sym::branc
c750: 68 20 24 62 69 64 5d 29 20 5b 6c 69 73 74 20 73 h $bid]) [list s
c760: 79 6d 3a 3a 62 72 61 6e 63 68 20 24 63 68 69 6c ym::branch $chil
c770: 64 5d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 7b d]..}..foreach {
c780: 62 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 bid child} [stat
c790: 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f e run [subst -no
c7a0: 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b commands -noback
c7b0: 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 slashes {.. S
c7c0: 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 54 2e 74 ELECT B.bid, T.t
c7d0: 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 id.. FROM b
c7e0: 72 61 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 ranch B, prefere
c7f0: 64 70 61 72 65 6e 74 20 50 2c 20 74 61 67 20 54 dparent P, tag T
c800: 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 .. WHERE B.b
c810: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 id IN $theset
c820: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
c830: 20 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 branches of int
c840: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
c850: 20 20 42 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 B.sid = P.pid
c860: 20 20 20 20 20 20 20 2d 2d 20 47 65 74 20 73 75 -- Get su
c870: 62 6f 72 64 69 6e 61 74 65 20 74 61 67 73 20 76 bordinate tags v
c880: 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 ia the.. AND
c890: 20 20 20 54 2e 73 69 64 20 3d 20 50 2e 73 69 64 T.sid = P.sid
c8a0: 20 20 20 20 20 20 20 20 2d 2d 20 70 72 65 66 65 -- prefe
c8b0: 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20 74 red parents of t
c8c0: 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 09 7d 5d heir symbols..}]
c8d0: 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 ] {.. lappend
c8e0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c dependencies([l
c8f0: 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20 ist sym::branch
c900: 24 62 69 64 5d 29 20 5b 6c 69 73 74 20 73 79 6d $bid]) [list sym
c910: 3a 3a 74 61 67 20 24 63 68 69 6c 64 5d 0a 09 7d ::tag $child]..}
c920: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
c930: 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c # result = l
c940: 69 73 74 20 28 63 68 61 6e 67 65 73 65 74 2d 69 ist (changeset-i
c950: 64 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f d). typemetho
c960: 64 20 63 73 5f 73 75 63 63 65 73 73 6f 72 73 20 d cs_successors
c970: 7b 62 72 61 6e 63 68 65 73 7d 20 7b 0a 20 20 20 {branches} {.
c980: 20 20 20 20 20 23 20 54 68 69 73 20 69 73 20 61 # This is a
c990: 20 76 61 72 69 61 6e 74 20 6f 66 20 27 73 75 63 variant of 'suc
c9a0: 63 65 73 73 6f 72 73 27 20 77 68 69 63 68 20 6d cessors' which m
c9b0: 61 70 73 20 74 68 65 20 6c 6f 77 2d 6c 65 76 65 aps the low-leve
c9c0: 6c 0a 20 20 20 20 20 20 20 20 23 20 64 61 74 61 l. # data
c9d0: 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74 68 65 directly to the
c9e0: 20 61 73 73 6f 63 69 61 74 65 64 20 63 68 61 6e associated chan
c9f0: 67 65 73 65 74 73 2e 20 49 2e 65 2e 20 69 6e 73 gesets. I.e. ins
ca00: 74 65 61 64 0a 20 20 20 20 20 20 20 20 23 20 6d tead. # m
ca10: 69 6c 6c 69 6f 6e 73 20 6f 66 20 64 65 70 65 6e illions of depen
ca20: 64 65 6e 63 79 20 70 61 69 72 73 20 28 69 6e 20 dency pairs (in
ca30: 65 78 74 72 65 6d 65 20 63 61 73 65 73 20 28 45 extreme cases (E
ca40: 78 61 6d 70 6c 65 3a 20 54 63 6c 0a 20 20 20 20 xample: Tcl.
ca50: 20 20 20 20 23 20 43 56 53 29 29 20 77 65 20 72 # CVS)) we r
ca60: 65 74 75 72 6e 20 61 20 76 65 72 79 20 73 68 6f eturn a very sho
ca70: 72 74 20 61 6e 64 20 6d 75 63 68 20 6d 6f 72 65 rt and much more
ca80: 20 6d 61 6e 61 67 65 61 62 6c 65 20 6c 69 73 74 manageable list
ca90: 0a 20 20 20 20 20 20 20 20 23 20 6f 66 20 63 68 . # of ch
caa0: 61 6e 67 65 73 65 74 73 2e 0a 0a 09 73 65 74 20 angesets....set
cab0: 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 theset ('[join $
cac0: 62 72 61 6e 63 68 65 73 20 7b 27 2c 27 7d 5d 27 branches {','}]'
cad0: 29 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e ). return
cae0: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
caf0: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
cb00: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
cb10: 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 . SELECT C.ci
cb20: 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 d.. FROM br
cb30: 61 6e 63 68 20 42 2c 20 72 65 76 69 73 69 6f 6e anch B, revision
cb40: 20 52 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 R, csitem CI, c
cb50: 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 hangeset C..
cb60: 57 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 WHERE B.bid IN
cb70: 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 $theset -- R
cb80: 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 estrict to branc
cb90: 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a hes of interest.
cba0: 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e 66 69 . AND B.fi
cbb0: 72 73 74 20 3d 20 52 2e 72 69 64 09 2d 2d 20 47 rst = R.rid.-- G
cbc0: 65 74 20 66 69 72 73 74 20 72 65 76 69 73 69 6f et first revisio
cbd0: 6e 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a n on the branch.
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
cbf0: 20 20 20 43 49 2e 69 69 64 20 3d 20 52 2e 72 69 CI.iid = R.ri
cc00: 64 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 d -- Selec
cc10: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 t all changesets
cc20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
cc30: 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 C.cid = CI.c
cc40: 69 64 09 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 id.-- containing
cc50: 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 0a 20 this revision.
cc60: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
cc70: 20 20 43 2e 74 79 70 65 20 3d 20 30 09 09 2d 2d C.type = 0..--
cc80: 20 77 68 69 63 68 20 61 72 65 20 72 65 76 69 73 which are revis
cc90: 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 0a 20 ion changesets.
cca0: 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 45 UNION.. SE
ccb0: 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 LECT C.cid..
ccc0: 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c FROM branch B,
ccd0: 20 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 preferedparent
cce0: 50 2c 20 62 72 61 6e 63 68 20 42 58 2c 20 63 73 P, branch BX, cs
ccf0: 69 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 item CI, changes
cd00: 65 74 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 et C.. WHERE
cd10: 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 B.bid IN $these
cd20: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
cd30: 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 t to branches of
cd40: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 interest.. A
cd50: 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20 50 2e ND B.sid = P.
cd60: 70 69 64 09 2d 2d 20 47 65 74 20 73 75 62 6f 72 pid.-- Get subor
cd70: 64 69 6e 61 74 65 20 62 72 61 6e 63 68 65 73 20 dinate branches
cd80: 76 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 via the.. AND
cd90: 20 20 20 20 42 58 2e 73 69 64 20 3d 20 50 2e 73 BX.sid = P.s
cda0: 69 64 09 2d 2d 20 70 72 65 66 65 72 65 64 20 70 id.-- prefered p
cdb0: 61 72 65 6e 74 73 20 6f 66 20 74 68 65 69 72 20 arents of their
cdc0: 73 79 6d 62 6f 6c 73 0a 20 20 20 20 20 20 20 20 symbols.
cdd0: 20 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 AND CI.ii
cde0: 64 20 3d 20 42 58 2e 62 69 64 20 20 20 20 20 20 d = BX.bid
cdf0: 2d 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 -- Select all ch
ce00: 61 6e 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 angesets.
ce10: 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 AND C.ci
ce20: 64 20 3d 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f d = CI.cid.-- co
ce30: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 75 62 ntaining the sub
ce40: 6f 72 64 69 6e 61 74 65 20 62 72 61 6e 63 68 65 ordinate branche
ce50: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e s. AN
ce60: 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 32 09 D C.type = 2.
ce70: 09 2d 2d 20 77 68 69 63 68 20 61 72 65 20 62 72 .-- which are br
ce80: 61 6e 63 68 20 63 68 61 6e 67 65 73 65 74 73 0a anch changesets.
ce90: 20 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 UNION.. S
cea0: 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 ELECT C.cid..
ceb0: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 FROM branch B
cec0: 2c 20 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 , preferedparent
ced0: 20 50 2c 20 74 61 67 20 54 2c 20 63 73 69 74 65 P, tag T, csite
cee0: 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 m CI, changeset
cef0: 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 2e C.. WHERE B.
cf00: 62 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 bid IN $theset
cf10: 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 -- Restrict t
cf20: 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e o branches of in
cf30: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 terest.. AND
cf40: 20 20 20 42 2e 73 69 64 20 3d 20 50 2e 70 69 64 B.sid = P.pid
cf50: 09 2d 2d 20 47 65 74 20 73 75 62 6f 72 64 69 6e .-- Get subordin
cf60: 61 74 65 20 74 61 67 73 20 76 69 61 20 74 68 65 ate tags via the
cf70: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 54 2e 73 .. AND T.s
cf80: 69 64 20 3d 20 50 2e 73 69 64 09 2d 2d 20 70 72 id = P.sid.-- pr
cf90: 65 66 65 72 65 64 20 70 61 72 65 6e 74 73 20 6f efered parents o
cfa0: 66 20 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a f their symbols.
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
cfc0: 20 20 20 43 49 2e 69 69 64 20 3d 20 54 2e 74 69 CI.iid = T.ti
cfd0: 64 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 d -- Selec
cfe0: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 t all changesets
cff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
d000: 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 C.cid = CI.c
d010: 69 64 09 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 id.-- containing
d020: 20 74 68 65 20 73 75 62 6f 72 64 69 6e 61 74 65 the subordinate
d030: 20 74 61 67 73 0a 20 20 20 20 20 20 20 20 20 20 tags.
d040: 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 AND C.type
d050: 3d 20 31 09 09 2d 2d 20 77 68 69 63 68 20 61 72 = 1..-- which ar
d060: 65 20 74 61 67 20 63 68 61 6e 67 65 73 65 74 73 e tag changesets
d070: 0a 09 7d 5d 5d 0a 09 72 65 74 75 72 6e 0a 20 20 ..}]]..return.
d080: 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c }.. # resul
d090: 74 20 3d 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 0a t = symbol name.
d0a0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 63 typemethod c
d0b0: 73 5f 6c 6f 64 20 7b 62 72 61 6e 63 68 65 73 7d s_lod {branches}
d0c0: 20 7b 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 73 {..# Determines
d0d0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 the name of the
d0e0: 20 73 79 6d 62 6f 6c 20 77 68 69 63 68 20 69 73 symbol which is
d0f0: 20 74 68 65 20 6c 69 6e 65 20 6f 66 0a 09 23 20 the line of..#
d100: 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 development for
d110: 74 68 65 20 62 72 61 6e 63 68 65 73 20 69 6e 20 the branches in
d120: 61 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a 09 73 a changeset....s
d130: 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 et theset ('[joi
d140: 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27 2c 27 n $branches {','
d150: 7d 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 }]')..return [st
d160: 61 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d ate run [subst -
d170: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 nocommands -noba
d180: 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 ckslashes {..
d190: 20 53 45 4c 45 43 54 0a 09 20 20 20 20 44 49 53 SELECT.. DIS
d1a0: 54 49 4e 43 54 20 4c 2e 6e 61 6d 65 0a 09 20 20 TINCT L.name..
d1b0: 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 FROM branch
d1c0: 42 2c 20 73 79 6d 62 6f 6c 20 4c 0a 09 20 20 20 B, symbol L..
d1d0: 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 69 6e WHERE B.bid in
d1e0: 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 20 $theset
d1f0: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 -- Restrict to b
d200: 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 ranches of inter
d210: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
d220: 4c 2e 73 69 64 20 3d 20 42 2e 6c 6f 64 20 20 20 L.sid = B.lod
d230: 20 20 20 20 20 20 20 20 2d 2d 20 47 65 74 20 6c -- Get l
d240: 6f 64 20 73 79 6d 62 6f 6c 20 6f 66 20 62 72 61 od symbol of bra
d250: 6e 63 68 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a nch..}]]. }..
d260: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c typemethod l
d270: 69 6d 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d imits {branches}
d280: 20 7b 0a 09 23 20 4e 6f 74 65 73 2e 20 54 68 69 {..# Notes. Thi
d290: 73 20 6d 65 74 68 6f 64 20 65 78 69 73 74 73 20 s method exists
d2a0: 6f 6e 6c 79 20 66 6f 72 20 62 72 61 6e 63 68 65 only for branche
d2b0: 73 2e 20 49 74 20 69 73 20 6e 65 65 64 65 64 20 s. It is needed
d2c0: 74 6f 0a 09 23 20 67 65 74 20 64 65 74 61 69 6c to..# get detail
d2d0: 65 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 ed information a
d2e0: 62 6f 75 74 20 61 20 62 61 63 6b 77 61 72 64 20 bout a backward
d2f0: 62 72 61 6e 63 68 2e 20 49 74 20 64 6f 65 73 0a branch. It does.
d300: 09 23 20 6e 6f 74 20 61 70 70 6c 79 20 74 6f 20 .# not apply to
d310: 74 61 67 73 2c 20 6e 6f 72 20 72 65 76 69 73 69 tags, nor revisi
d320: 6f 6e 73 2e 20 54 68 65 20 71 75 65 72 69 65 73 ons. The queries
d330: 20 63 61 6e 20 61 6c 73 6f 0a 09 23 20 72 65 73 can also..# res
d340: 74 72 69 63 74 20 74 68 65 6d 73 65 6c 76 65 73 trict themselves
d350: 20 74 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e to the revision
d360: 20 73 75 63 65 73 73 6f 72 73 2f 70 72 65 64 65 sucessors/prede
d370: 63 65 73 73 6f 72 73 0a 09 23 20 6f 66 20 62 72 cessors..# of br
d380: 61 6e 63 68 65 73 2c 20 61 73 20 6f 6e 6c 79 20 anches, as only
d390: 74 68 65 79 20 68 61 76 65 20 6f 72 64 65 72 69 they have orderi
d3a0: 6e 67 20 64 61 74 61 20 61 6e 64 20 74 68 75 73 ng data and thus
d3b0: 20 63 61 6e 0a 09 23 20 63 61 75 73 65 20 74 68 can..# cause th
d3c0: 65 20 62 61 63 6b 77 61 72 64 6e 65 73 73 2e 0a e backwardness..
d3d0: 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b ..set theset ('[
d3e0: 6a 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b join $branches {
d3f0: 27 2c 27 7d 5d 27 29 0a 0a 09 73 65 74 20 6d 61 ','}]')...set ma
d400: 78 70 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 xp [state run [s
d410: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 ubst -nocommands
d420: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 -nobackslashes
d430: 7b 0a 09 20 20 20 20 2d 2d 20 6d 61 78 69 6d 61 {.. -- maxima
d440: 6c 20 70 72 65 64 65 63 65 73 73 6f 72 20 70 6f l predecessor po
d450: 73 69 74 69 6f 6e 20 70 65 72 20 62 72 61 6e 63 sition per branc
d460: 68 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e h.. SELECT B.
d470: 62 69 64 2c 20 4d 41 58 20 28 43 4f 2e 70 6f 73 bid, MAX (CO.pos
d480: 29 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 ).. FROM br
d490: 61 6e 63 68 20 42 2c 20 72 65 76 69 73 69 6f 6e anch B, revision
d4a0: 20 52 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 R, csitem CI, c
d4b0: 68 61 6e 67 65 73 65 74 20 43 2c 20 63 73 6f 72 hangeset C, csor
d4c0: 64 65 72 20 43 4f 0a 09 20 20 20 20 57 48 45 52 der CO.. WHER
d4d0: 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 E B.bid IN $the
d4e0: 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 set -- Restr
d4f0: 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 ict to branches
d500: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
d510: 20 41 4e 44 20 20 20 20 42 2e 72 6f 6f 74 20 3d AND B.root =
d520: 20 52 2e 72 69 64 20 20 20 20 20 20 20 2d 2d 20 R.rid --
d530: 47 65 74 20 62 72 61 6e 63 68 20 72 6f 6f 74 20 Get branch root
d540: 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 20 41 revisions.. A
d550: 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d 20 52 ND CI.iid = R
d560: 2e 72 69 64 20 20 20 20 20 20 20 2d 2d 20 47 65 .rid -- Ge
d570: 74 20 63 68 61 6e 67 65 73 65 74 73 20 63 6f 6e t changesets con
d580: 74 61 69 6e 69 6e 67 20 74 68 65 0a 09 20 20 20 taining the..
d590: 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 AND C.cid =
d5a0: 43 49 2e 63 69 64 20 20 20 20 20 20 20 2d 2d 20 CI.cid --
d5b0: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 2c 20 root revisions,
d5c0: 77 68 69 63 68 20 61 72 65 0a 09 20 20 20 20 41 which are.. A
d5d0: 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 30 ND C.type = 0
d5e0: 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 72 65 -- re
d5f0: 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 vision changeset
d600: 73 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 4f s.. AND CO
d610: 2e 63 69 64 20 3d 20 43 2e 63 69 64 20 20 20 20 .cid = C.cid
d620: 20 20 20 2d 2d 20 47 65 74 20 74 68 65 69 72 20 -- Get their
d630: 74 6f 70 6f 6c 6f 67 69 63 61 6c 20 6f 72 64 65 topological orde
d640: 72 69 6e 67 0a 09 20 20 20 20 47 52 4f 55 50 20 ring.. GROUP
d650: 42 59 20 42 2e 62 69 64 0a 09 7d 5d 5d 0a 0a 09 BY B.bid..}]]...
d660: 73 65 74 20 6d 69 6e 73 20 5b 73 74 61 74 65 20 set mins [state
d670: 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f run [subst -noco
d680: 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c mmands -nobacksl
d690: 61 73 68 65 73 20 7b 0a 09 20 20 20 20 2d 2d 20 ashes {.. --
d6a0: 6d 69 6e 69 6d 61 6c 20 73 75 63 63 65 73 73 6f minimal successo
d6b0: 72 20 70 6f 73 69 74 69 6f 6e 20 70 65 72 20 62 r position per b
d6c0: 72 61 6e 63 68 0a 09 20 20 20 20 53 45 4c 45 43 ranch.. SELEC
d6d0: 54 20 42 2e 62 69 64 2c 20 4d 49 4e 20 28 43 4f T B.bid, MIN (CO
d6e0: 2e 70 6f 73 29 0a 09 20 20 20 20 46 52 4f 4d 20 .pos).. FROM
d6f0: 20 20 62 72 61 6e 63 68 20 42 2c 20 72 65 76 69 branch B, revi
d700: 73 69 6f 6e 20 52 2c 20 63 73 69 74 65 6d 20 43 sion R, csitem C
d710: 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 2c 20 I, changeset C,
d720: 63 73 6f 72 64 65 72 20 43 4f 0a 09 20 20 20 20 csorder CO..
d730: 57 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 WHERE B.bid IN
d740: 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 $theset -- R
d750: 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 estrict to branc
d760: 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a hes of interest.
d770: 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e 66 69 . AND B.fi
d780: 72 73 74 20 3d 20 52 2e 72 69 64 20 20 20 20 20 rst = R.rid
d790: 20 2d 2d 20 47 65 74 20 74 68 65 20 66 69 72 73 -- Get the firs
d7a0: 74 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 t revisions on t
d7b0: 68 65 20 62 72 61 6e 63 68 65 73 0a 09 20 20 20 he branches..
d7c0: 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d AND CI.iid =
d7d0: 20 52 2e 72 69 64 20 20 20 20 20 20 20 2d 2d 20 R.rid --
d7e0: 47 65 74 20 63 68 61 6e 67 65 73 65 74 73 20 63 Get changesets c
d7f0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 0a 09 20 ontaining the..
d800: 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 AND C.cid
d810: 3d 20 43 49 2e 63 69 64 09 2d 2d 20 66 69 72 73 = CI.cid.-- firs
d820: 74 20 72 65 76 69 73 69 6f 6e 73 2c 20 77 68 69 t revisions, whi
d830: 63 68 20 61 72 65 0a 09 20 20 20 20 41 4e 44 20 ch are.. AND
d840: 20 20 20 43 2e 74 79 70 65 20 3d 20 30 09 09 2d C.type = 0..-
d850: 2d 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 - revision chang
d860: 65 73 65 74 73 0a 09 20 20 20 20 41 4e 44 20 20 esets.. AND
d870: 20 20 43 4f 2e 63 69 64 20 3d 20 43 2e 63 69 64 CO.cid = C.cid
d880: 09 2d 2d 20 47 65 74 20 74 68 65 69 72 20 74 6f .-- Get their to
d890: 70 6f 6c 6f 67 69 63 61 6c 20 6f 72 64 65 72 69 pological orderi
d8a0: 6e 67 0a 09 20 20 20 20 47 52 4f 55 50 20 42 59 ng.. GROUP BY
d8b0: 20 42 2e 62 69 64 0a 09 7d 5d 5d 0a 0a 20 20 20 B.bid..}]]..
d8c0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis
d8d0: 74 20 24 6d 61 78 70 20 24 6d 69 6e 73 5d 0a 20 t $maxp $mins].
d8e0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 }.. # # ##
d8f0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
d900: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
d910: 23 0a 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 #. ## Configu
d920: 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 ration.. prag
d930: 6d 61 20 2d 68 61 73 69 6e 73 74 61 6e 63 65 73 ma -hasinstances
d940: 20 20 20 6e 6f 20 3b 20 23 20 73 69 6e 67 6c 65 no ; # single
d950: 74 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d ton. pragma -
d960: 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e hastypeinfo n
d970: 6f 20 3b 20 23 20 6e 6f 20 69 6e 74 72 6f 73 70 o ; # no introsp
d980: 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d ection. pragm
d990: 61 20 2d 68 61 73 74 79 70 65 64 65 73 74 72 6f a -hastypedestro
d9a0: 79 20 6e 6f 20 3b 20 23 20 69 6d 6d 6f 72 74 61 y no ; # immorta
d9b0: 6c 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 l.}..# # ## ###
d9c0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
d9d0: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 ############ ###
d9e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
d9f0: 23 23 0a 23 23 0a 0a 6e 61 6d 65 73 70 61 63 65 ##.##..namespace
da00: 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 eval ::vc::foss
da10: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
da20: 3a 70 72 6f 6a 65 63 74 20 7b 0a 20 20 20 20 6e :project {. n
da30: 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 amespace export
da40: 72 65 76 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 rev. namespac
da50: 65 20 65 76 61 6c 20 72 65 76 20 7b 0a 09 6e 61 e eval rev {..na
da60: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
da70: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
da80: 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a ort::cvs::state.
da90: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 .namespace impor
daa0: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a t ::vc::fossil::
dab0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 import::cvs::int
dac0: 65 67 72 69 74 79 0a 09 6e 61 6d 65 73 70 61 63 egrity..namespac
dad0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
dae0: 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e ools::misc::*..n
daf0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
db00: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f ::vc::tools::tro
db10: 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 uble..namespace
db20: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f import ::vc::too
db30: 6c 73 3a 3a 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 ls::log..log reg
db40: 69 73 74 65 72 20 63 73 65 74 73 0a 0a 09 23 20 ister csets...#
db50: 53 65 74 20 75 70 20 74 68 65 20 68 65 6c 70 65 Set up the helpe
db60: 72 20 73 69 6e 67 6c 65 74 6f 6e 73 0a 09 6e 61 r singletons..na
db70: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 72 65 76 mespace eval rev
db80: 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 {.. namespac
db90: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
dba0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
dbb0: 76 73 3a 3a 73 74 61 74 65 0a 09 20 20 20 20 6e vs::state.. n
dbc0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
dbd0: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
dbe0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 port::cvs::integ
dbf0: 72 69 74 79 0a 09 20 20 20 20 6e 61 6d 65 73 70 rity.. namesp
dc00: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
dc10: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a 09 :tools::log..}..
dc20: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 73 namespace eval s
dc30: 79 6d 3a 3a 74 61 67 20 7b 0a 09 20 20 20 20 6e ym::tag {.. n
dc40: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
dc50: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
dc60: 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 port::cvs::state
dc70: 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 .. namespace
dc80: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 import ::vc::fos
dc90: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
dca0: 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 20 20 20 ::integrity..
dcb0: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 namespace impor
dcc0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c t ::vc::tools::l
dcd0: 6f 67 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65 og..}..namespace
dce0: 20 65 76 61 6c 20 73 79 6d 3a 3a 62 72 61 6e 63 eval sym::branc
dcf0: 68 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 h {.. namespa
dd00: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
dd10: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
dd20: 63 76 73 3a 3a 73 74 61 74 65 0a 09 20 20 20 20 cvs::state..
dd30: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
dd40: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
dd50: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 mport::cvs::inte
dd60: 67 72 69 74 79 0a 09 20 20 20 20 6e 61 6d 65 73 grity.. names
dd70: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 pace import ::vc
dd80: 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a ::tools::log..}.
dd90: 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 }.}..# # ##
dda0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
ddb0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
ddc0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ###############
ddd0: 23 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a ######.## Ready.
dde0: 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 .package provide
ddf0: 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 vc::fossil::imp
de00: 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 ort::cvs::projec
de10: 74 3a 3a 72 65 76 20 31 2e 30 0a 72 65 74 75 72 t::rev 1.0.retur
de20: 6e 0a n.