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 23 tems to them...#
0810: 6c 61 70 70 65 6e 64 20 6d 79 63 68 61 6e 67 65 lappend mychange
0820: 73 65 74 73 20 20 20 24 73 65 6c 66 0a 09 23 6c sets $self..#l
0830: 61 70 70 65 6e 64 20 6d 79 74 63 68 61 6e 67 65 append mytchange
0840: 73 65 74 73 28 24 63 73 74 79 70 65 29 20 24 73 sets($cstype) $s
0850: 65 6c 66 0a 09 73 65 74 20 20 20 20 20 6d 79 69 elf..set myi
0860: 64 6d 61 70 28 24 6d 79 69 64 29 20 24 73 65 6c dmap($myid) $sel
0870: 66 0a 09 66 6f 72 65 61 63 68 20 69 69 64 20 24 f..foreach iid $
0880: 69 74 65 6d 73 20 7b 0a 09 20 20 20 20 73 65 74 items {.. set
0890: 20 6b 65 79 20 5b 6c 69 73 74 20 24 63 73 74 79 key [list $csty
08a0: 70 65 20 24 69 69 64 5d 0a 09 20 20 20 20 23 73 pe $iid].. #s
08b0: 65 74 20 6d 79 69 74 65 6d 6d 61 70 28 24 6b 65 et myitemmap($ke
08c0: 79 29 20 24 73 65 6c 66 0a 09 20 20 20 20 6c 61 y) $self.. la
08d0: 70 70 65 6e 64 20 6d 79 74 69 74 65 6d 73 20 24 ppend mytitems $
08e0: 6b 65 79 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 key.. log wri
08f0: 74 65 20 38 20 63 73 65 74 73 20 7b 4d 41 50 2b te 8 csets {MAP+
0900: 20 69 74 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 item <$key> $se
0910: 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d lf = [$self str]
0920: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 }..}..return.
0930: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6c }.. method l
0940: 6f 61 64 6d 61 70 73 20 7b 7d 20 7b 0a 09 23 20 oadmaps {} {..#
0950: 4b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68 Keep track of th
0960: 65 20 67 65 6e 65 72 61 74 65 64 20 63 68 61 6e e generated chan
0970: 67 65 73 65 74 73 20 61 6e 64 20 6f 66 20 74 68 gesets and of th
0980: 65 20 69 6e 76 65 72 73 65 0a 09 23 20 6d 61 70 e inverse..# map
0990: 70 69 6e 67 20 66 72 6f 6d 20 69 74 65 6d 73 20 ping from items
09a0: 74 6f 20 74 68 65 6d 2e 0a 09 6c 61 70 70 65 6e to them...lappen
09b0: 64 20 6d 79 63 68 61 6e 67 65 73 65 74 73 20 20 d mychangesets
09c0: 20 24 73 65 6c 66 0a 09 6c 61 70 70 65 6e 64 20 $self..lappend
09d0: 6d 79 74 63 68 61 6e 67 65 73 65 74 73 28 24 6d mytchangesets($m
09e0: 79 74 79 70 65 29 20 24 73 65 6c 66 0a 09 73 65 ytype) $self..se
09f0: 74 20 20 20 20 20 6d 79 69 64 6d 61 70 28 24 6d t myidmap($m
0a00: 79 69 64 29 20 24 73 65 6c 66 0a 09 66 6f 72 65 yid) $self..fore
0a10: 61 63 68 20 69 69 64 20 24 6d 79 69 74 65 6d 73 ach iid $myitems
0a20: 20 7b 0a 09 20 20 20 20 73 65 74 20 6b 65 79 20 {.. set key
0a30: 5b 6c 69 73 74 20 24 6d 79 74 79 70 65 20 24 69 [list $mytype $i
0a40: 69 64 5d 0a 09 20 20 20 20 73 65 74 20 6d 79 69 id].. set myi
0a50: 74 65 6d 6d 61 70 28 24 6b 65 79 29 20 24 73 65 temmap($key) $se
0a60: 6c 66 0a 09 20 20 20 20 23 6c 6f 67 20 77 72 69 lf.. #log wri
0a70: 74 65 20 38 20 63 73 65 74 73 20 7b 4d 41 50 2b te 8 csets {MAP+
0a80: 20 69 74 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 item <$key> $se
0a90: 6c 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d lf = [$self str]
0aa0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 }..}..return.
0ab0: 20 7d 0a 0a 20 20 20 20 64 65 73 74 72 75 63 74 }.. destruct
0ac0: 6f 72 20 7b 0a 09 23 20 54 68 65 20 6d 61 69 6e or {..# The main
0ad0: 20 74 68 69 6e 67 20 69 73 20 74 6f 20 6b 65 65 thing is to kee
0ae0: 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20 69 p track of the i
0af0: 74 65 6d 6d 61 70 20 61 6e 64 20 72 65 6d 6f 76 temmap and remov
0b00: 65 0a 09 23 20 74 68 65 20 6f 62 6a 65 63 74 20 e..# the object
0b10: 66 72 6f 6d 20 69 74 2e 20 54 68 65 20 6c 69 73 from it. The lis
0b20: 74 73 20 6f 66 20 63 68 61 6e 67 65 73 65 74 73 ts of changesets
0b30: 20 28 6d 79 63 68 61 6e 67 65 73 65 74 73 2c 0a (mychangesets,.
0b40: 09 23 20 6d 79 74 63 68 61 6e 67 65 73 65 74 73 .# mytchangesets
0b50: 29 20 61 72 65 20 6e 6f 74 20 6d 61 69 6e 74 61 ) are not mainta
0b60: 69 6e 65 64 20 28 3d 20 72 65 64 75 63 65 64 29 ined (= reduced)
0b70: 2c 20 66 6f 72 20 74 68 65 0a 09 23 20 6d 6f 6d , for the..# mom
0b80: 65 6e 74 2e 20 57 65 20 6d 61 79 20 62 65 20 61 ent. We may be a
0b90: 62 6c 65 20 74 6f 20 67 65 74 20 72 69 64 20 6f ble to get rid o
0ba0: 66 20 74 68 69 73 20 65 6e 74 69 72 65 6c 79 2c f this entirely,
0bb0: 20 61 74 20 6c 65 61 73 74 0a 09 23 20 66 6f 72 at least..# for
0bc0: 20 28 64 65 29 63 6f 6e 73 74 72 75 63 74 69 6f (de)constructio
0bd0: 6e 20 61 6e 64 20 70 61 73 73 20 49 6e 69 74 43 n and pass InitC
0be0: 53 65 74 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 Sets....foreach
0bf0: 69 69 64 20 24 6d 79 69 74 65 6d 73 20 7b 0a 09 iid $myitems {..
0c00: 20 20 20 20 73 65 74 20 6b 65 79 20 5b 6c 69 73 set key [lis
0c10: 74 20 24 6d 79 74 79 70 65 20 24 69 69 64 5d 0a t $mytype $iid].
0c20: 09 20 20 20 20 23 75 6e 73 65 74 20 6d 79 69 74 . #unset myit
0c30: 65 6d 6d 61 70 28 24 6b 65 79 29 0a 09 20 20 20 emmap($key)..
0c40: 20 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 log write 8 cse
0c50: 74 73 20 7b 4d 41 50 2d 20 69 74 65 6d 20 3c 24 ts {MAP- item <$
0c60: 6b 65 79 3e 20 24 73 65 6c 66 20 3d 20 5b 24 73 key> $self = [$s
0c70: 65 6c 66 20 73 74 72 5d 7d 0a 09 7d 0a 09 72 65 elf str]}..}..re
0c80: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
0c90: 6d 65 74 68 6f 64 20 73 74 72 20 7b 7d 20 7b 0a method str {} {.
0ca0: 09 73 65 74 20 73 74 72 20 20 20 20 22 3c 22 0a .set str "<".
0cb0: 09 73 65 74 20 64 65 74 61 69 6c 20 22 22 0a 09 .set detail ""..
0cc0: 69 66 20 7b 5b 24 6d 79 74 79 70 65 6f 62 6a 20 if {[$mytypeobj
0cd0: 62 79 73 79 6d 62 6f 6c 5d 7d 20 7b 0a 09 20 20 bysymbol]} {..
0ce0: 20 20 73 65 74 20 64 65 74 61 69 6c 20 22 20 27 set detail " '
0cf0: 5b 73 74 61 74 65 20 6f 6e 65 20 7b 0a 09 09 53 [state one {...S
0d00: 45 4c 45 43 54 20 53 2e 6e 61 6d 65 0a 09 09 46 ELECT S.name...F
0d10: 52 4f 4d 20 20 20 73 79 6d 62 6f 6c 20 53 0a 09 ROM symbol S..
0d20: 09 57 48 45 52 45 20 20 53 2e 73 69 64 20 3d 20 .WHERE S.sid =
0d30: 24 6d 79 73 72 63 69 64 0a 09 20 20 20 20 7d 5d $mysrcid.. }]
0d40: 27 22 0a 09 7d 0a 09 61 70 70 65 6e 64 20 73 74 '"..}..append st
0d50: 72 20 22 24 6d 79 74 79 70 65 20 24 7b 6d 79 69 r "$mytype ${myi
0d60: 64 7d 24 7b 64 65 74 61 69 6c 7d 3e 22 0a 09 72 d}${detail}>"..r
0d70: 65 74 75 72 6e 20 24 73 74 72 0a 20 20 20 20 7d eturn $str. }
0d80: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6c 6f 64 .. method lod
0d90: 20 7b 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 {} {..return [$
0da0: 6d 79 74 79 70 65 6f 62 6a 20 63 73 5f 6c 6f 64 mytypeobj cs_lod
0db0: 20 24 6d 79 69 74 65 6d 73 5d 0a 20 20 20 20 7d $myitems]. }
0dc0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 64 20 .. method id
0dd0: 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 {} { return $
0de0: 6d 79 69 64 20 7d 0a 20 20 20 20 6d 65 74 68 6f myid }. metho
0df0: 64 20 69 74 65 6d 73 20 7b 7d 20 7b 20 72 65 74 d items {} { ret
0e00: 75 72 6e 20 24 6d 79 74 69 74 65 6d 73 20 7d 0a urn $mytitems }.
0e10: 20 20 20 20 6d 65 74 68 6f 64 20 64 61 74 61 20 method data
0e20: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 5b 6c 69 {} { return [li
0e30: 73 74 20 24 6d 79 70 72 6f 6a 65 63 74 20 24 6d st $myproject $m
0e40: 79 74 79 70 65 20 24 6d 79 73 72 63 69 64 5d 20 ytype $mysrcid]
0e50: 7d 0a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 20 }.. delegate
0e60: 6d 65 74 68 6f 64 20 62 79 73 79 6d 62 6f 6c 20 method bysymbol
0e70: 20 20 74 6f 20 6d 79 74 79 70 65 6f 62 6a 0a 20 to mytypeobj.
0e80: 20 20 20 64 65 6c 65 67 61 74 65 20 6d 65 74 68 delegate meth
0e90: 6f 64 20 62 79 72 65 76 69 73 69 6f 6e 20 74 6f od byrevision to
0ea0: 20 6d 79 74 79 70 65 6f 62 6a 0a 20 20 20 20 64 mytypeobj. d
0eb0: 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 69 elegate method i
0ec0: 73 62 72 61 6e 63 68 20 20 20 74 6f 20 6d 79 74 sbranch to myt
0ed0: 79 70 65 6f 62 6a 0a 20 20 20 20 64 65 6c 65 67 ypeobj. deleg
0ee0: 61 74 65 20 6d 65 74 68 6f 64 20 69 73 74 61 67 ate method istag
0ef0: 20 20 20 20 20 20 74 6f 20 6d 79 74 79 70 65 6f to mytypeo
0f00: 62 6a 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 bj.. method s
0f10: 65 74 70 6f 73 20 7b 70 7d 20 7b 20 73 65 74 20 etpos {p} { set
0f20: 6d 79 70 6f 73 20 24 70 20 3b 20 72 65 74 75 72 mypos $p ; retur
0f30: 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 n }. method p
0f40: 6f 73 20 20 20 20 7b 7d 20 20 7b 20 72 65 74 75 os {} { retu
0f50: 72 6e 20 24 6d 79 70 6f 73 20 7d 0a 0a 20 20 20 rn $mypos }..
0f60: 20 6d 65 74 68 6f 64 20 64 65 74 65 72 6d 69 6e method determin
0f70: 65 73 75 63 63 65 73 73 6f 72 73 20 7b 7d 20 7b esuccessors {} {
0f80: 0a 09 23 20 50 61 73 73 20 36 20 6f 70 65 72 61 ..# Pass 6 opera
0f90: 74 69 6f 6e 2e 20 43 6f 6d 70 75 74 65 20 70 72 tion. Compute pr
0fa0: 6f 6a 65 63 74 2d 6c 65 76 65 6c 20 64 65 70 65 oject-level depe
0fb0: 6e 64 65 6e 63 69 65 73 20 66 72 6f 6d 0a 09 23 ndencies from..#
0fc0: 20 74 68 65 20 66 69 6c 65 2d 6c 65 76 65 6c 20 the file-level
0fd0: 64 61 74 61 20 61 6e 64 20 73 61 76 65 20 69 74 data and save it
0fe0: 20 62 61 63 6b 20 74 6f 20 74 68 65 20 73 74 61 back to the sta
0ff0: 74 65 2e 20 54 68 69 73 20 6d 61 79 0a 09 23 20 te. This may..#
1000: 62 65 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 be called during
1010: 20 74 68 65 20 63 79 63 6c 65 20 62 72 65 61 6b the cycle break
1020: 65 72 20 70 61 73 73 65 73 20 61 73 20 77 65 6c er passes as wel
1030: 6c 2c 20 74 6f 20 61 64 6a 75 73 74 0a 09 23 20 l, to adjust..#
1040: 74 68 65 20 73 75 63 63 65 73 73 6f 72 20 69 6e the successor in
1050: 66 6f 72 6d 61 74 69 6f 6e 20 6f 66 20 63 68 61 formation of cha
1060: 6e 67 65 73 65 74 73 20 77 68 69 63 68 20 61 72 ngesets which ar
1070: 65 20 74 68 65 0a 09 23 20 70 72 65 64 65 63 65 e the..# predece
1080: 73 73 6f 72 73 20 6f 66 20 64 72 6f 70 70 65 64 ssors of dropped
1090: 20 63 68 61 6e 67 65 73 65 74 73 2e 20 46 6f 72 changesets. For
10a0: 20 74 68 65 6d 20 77 65 20 68 61 76 65 20 74 6f them we have to
10b0: 0a 09 23 20 72 65 6d 6f 76 65 20 74 68 65 69 72 ..# remove their
10c0: 20 65 78 69 73 74 69 6e 67 20 69 6e 66 6f 72 6d existing inform
10d0: 61 74 69 6f 6e 20 66 69 72 73 74 20 62 65 66 6f ation first befo
10e0: 72 65 20 69 6e 73 65 72 74 69 6e 67 20 74 68 65 re inserting the
10f0: 0a 09 23 20 6e 65 77 20 64 61 74 61 2e 0a 09 73 ..# new data...s
1100: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 tate run {..
1110: 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 73 73 75 DELETE FROM cssu
1120: 63 63 65 73 73 6f 72 20 57 48 45 52 45 20 63 69 ccessor WHERE ci
1130: 64 20 3d 20 24 6d 79 69 64 3b 0a 09 7d 0a 09 73 d = $myid;..}..s
1140: 65 74 20 6c 6f 6f 70 20 30 0a 09 66 6f 72 65 61 et loop 0..forea
1150: 63 68 20 6e 69 64 20 5b 24 6d 79 74 79 70 65 6f ch nid [$mytypeo
1160: 62 6a 20 63 73 5f 73 75 63 63 65 73 73 6f 72 73 bj cs_successors
1170: 20 24 6d 79 69 74 65 6d 73 5d 20 7b 0a 09 20 20 $myitems] {..
1180: 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 state run {...
1190: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 73 73 75 INSERT INTO cssu
11a0: 63 63 65 73 73 6f 72 20 28 63 69 64 2c 20 20 6e ccessor (cid, n
11b0: 69 64 29 0a 09 09 56 41 4c 55 45 53 20 20 20 20 id)...VALUES
11c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 24 ($
11d0: 6d 79 69 64 2c 24 6e 69 64 29 0a 09 20 20 20 20 myid,$nid)..
11e0: 7d 0a 09 20 20 20 20 69 66 20 7b 24 6e 69 64 20 }.. if {$nid
11f0: 3d 3d 20 24 6d 79 69 64 7d 20 7b 20 73 65 74 20 == $myid} { set
1200: 6c 6f 6f 70 20 31 20 7d 0a 09 7d 0a 09 23 20 52 loop 1 }..}..# R
1210: 65 70 6f 72 74 20 61 66 74 65 72 20 74 68 65 20 eport after the
1220: 63 6f 6d 70 6c 65 74 65 20 73 74 72 75 63 74 75 complete structu
1230: 72 65 20 68 61 73 20 62 65 65 6e 20 73 61 76 65 re has been save
1240: 64 2e 0a 09 69 66 20 7b 24 6c 6f 6f 70 7d 20 7b d...if {$loop} {
1250: 20 24 73 65 6c 66 20 72 65 70 6f 72 74 6c 6f 6f $self reportloo
1260: 70 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 p }..return.
1270: 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 }.. # result
1280: 3d 20 6c 69 73 74 20 28 63 68 61 6e 67 65 73 65 = list (changese
1290: 74 29 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 75 t). method su
12a0: 63 63 65 73 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 ccessors {} {..#
12b0: 20 55 73 65 20 74 68 65 20 64 61 74 61 20 73 61 Use the data sa
12c0: 76 65 64 20 62 79 20 70 61 73 73 20 36 2e 0a 09 ved by pass 6...
12d0: 72 65 74 75 72 6e 20 5b 73 74 72 75 63 74 3a 3a return [struct::
12e0: 6c 69 73 74 20 6d 61 70 20 5b 73 74 61 74 65 20 list map [state
12f0: 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 run {.. SELEC
1300: 54 20 53 2e 6e 69 64 0a 09 20 20 20 20 46 52 4f T S.nid.. FRO
1310: 4d 20 20 20 63 73 73 75 63 63 65 73 73 6f 72 20 M cssuccessor
1320: 53 0a 09 20 20 20 20 57 48 45 52 45 20 20 53 2e S.. WHERE S.
1330: 63 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 cid = $myid..}]
1340: 5b 6d 79 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 [mytypemethod of
1350: 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 ]]. }.. #
1360: 69 74 65 6d 20 2d 3e 20 6c 69 73 74 20 28 69 74 item -> list (it
1370: 65 6d 29 0a 20 20 20 20 6d 65 74 68 6f 64 20 6e em). method n
1380: 65 78 74 6d 61 70 20 7b 7d 20 7b 0a 09 24 6d 79 extmap {} {..$my
1390: 74 79 70 65 6f 62 6a 20 73 75 63 63 65 73 73 6f typeobj successo
13a0: 72 73 20 74 6d 70 20 24 6d 79 69 74 65 6d 73 0a rs tmp $myitems.
13b0: 09 72 65 74 75 72 6e 20 5b 61 72 72 61 79 20 67 .return [array g
13c0: 65 74 20 74 6d 70 5d 0a 20 20 20 20 7d 0a 0a 20 et tmp]. }..
13d0: 20 20 20 6d 65 74 68 6f 64 20 62 72 65 61 6b 69 method breaki
13e0: 6e 74 65 72 6e 61 6c 64 65 70 65 6e 64 65 6e 63 nternaldependenc
13f0: 69 65 73 20 7b 63 76 7d 20 7b 0a 09 75 70 76 61 ies {cv} {..upva
1400: 72 20 31 20 24 63 76 20 63 6f 75 6e 74 65 72 0a r 1 $cv counter.
1410: 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 .log write 14 cs
1420: 65 74 73 20 7b 5b 24 73 65 6c 66 20 73 74 72 5d ets {[$self str]
1430: 20 42 49 44 7d 0a 09 76 63 3a 3a 74 6f 6f 6c 73 BID}..vc::tools
1440: 3a 3a 6d 65 6d 3a 3a 6d 61 72 6b 0a 09 23 23 0a ::mem::mark..##.
1450: 09 23 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 6d .## NOTE: This m
1460: 65 74 68 6f 64 2c 20 6d 61 79 62 65 20 69 6e 20 ethod, maybe in
1470: 63 6f 6e 6a 75 6e 63 74 69 6f 6e 20 77 69 74 68 conjunction with
1480: 20 69 74 73 20 63 61 6c 6c 65 72 0a 09 23 23 20 its caller..##
1490: 20 20 20 20 20 20 73 65 65 6d 73 20 74 6f 20 62 seems to b
14a0: 65 20 61 20 6d 65 6d 6f 72 79 20 68 6f 67 2c 20 e a memory hog,
14b0: 65 73 70 65 63 69 61 6c 6c 79 20 66 6f 72 20 6c especially for l
14c0: 61 72 67 65 0a 09 23 23 20 20 20 20 20 20 20 63 arge..## c
14d0: 68 61 6e 67 65 73 65 74 73 2c 20 77 69 74 68 20 hangesets, with
14e0: 27 6c 61 72 67 65 27 20 6d 65 61 6e 69 6e 67 20 'large' meaning
14f0: 74 6f 20 68 61 76 65 20 61 20 27 6c 6f 6e 67 20 to have a 'long
1500: 6c 69 73 74 0a 09 23 23 20 20 20 20 20 20 20 6f list..## o
1510: 66 20 69 74 65 6d 73 2c 20 73 65 76 65 72 61 6c f items, several
1520: 20 74 68 6f 75 73 61 6e 64 27 2e 20 49 6e 76 65 thousand'. Inve
1530: 73 74 69 67 61 74 65 20 77 68 65 72 65 20 74 68 stigate where th
1540: 65 0a 09 23 23 20 20 20 20 20 20 20 6d 65 6d 6f e..## memo
1550: 72 79 20 69 73 20 73 70 65 6e 74 20 61 6e 64 20 ry is spent and
1560: 74 68 65 6e 20 6c 6f 6f 6b 20 66 6f 72 20 77 61 then look for wa
1570: 79 73 20 6f 66 20 72 65 63 74 69 66 79 69 6e 67 ys of rectifying
1580: 0a 09 23 23 20 20 20 20 20 20 20 74 68 65 20 70 ..## the p
1590: 72 6f 62 6c 65 6d 2e 0a 09 23 23 0a 0a 09 23 20 roblem...##...#
15a0: 54 68 69 73 20 6d 65 74 68 6f 64 20 69 6e 73 70 This method insp
15b0: 65 63 74 73 20 74 68 65 20 63 68 61 6e 67 65 73 ects the changes
15c0: 65 74 73 20 66 6f 72 20 69 6e 74 65 72 6e 61 6c ets for internal
15d0: 0a 09 23 20 64 65 70 65 6e 64 65 6e 63 69 65 73 ..# dependencies
15e0: 2e 20 4e 6f 74 68 69 6e 67 20 69 73 20 64 6f 6e . Nothing is don
15f0: 65 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6e e if there are n
1600: 6f 0a 09 23 20 73 75 63 68 2e 20 4f 74 68 65 72 o..# such. Other
1610: 77 69 73 65 20 74 68 65 20 63 68 61 6e 67 65 73 wise the changes
1620: 65 74 20 69 73 20 73 70 6c 69 74 20 69 6e 74 6f et is split into
1630: 20 61 20 73 65 74 20 6f 66 0a 09 23 20 66 72 61 a set of..# fra
1640: 67 6d 65 6e 74 73 20 77 69 74 68 6f 75 74 20 69 gments without i
1650: 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e nternal dependen
1660: 63 69 65 73 2c 20 74 72 61 6e 73 66 6f 72 6d 69 cies, transformi
1670: 6e 67 20 74 68 65 0a 09 23 20 69 6e 74 65 72 6e ng the..# intern
1680: 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 al dependencies
1690: 69 6e 74 6f 20 65 78 74 65 72 6e 61 6c 20 6f 6e into external on
16a0: 65 73 2e 20 54 68 65 20 6e 65 77 20 63 68 61 6e es. The new chan
16b0: 67 65 73 65 74 73 0a 09 23 20 61 72 65 20 61 64 gesets..# are ad
16c0: 64 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 ded to the list
16d0: 6f 66 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 of all changeset
16e0: 73 2e 0a 0a 09 23 20 57 65 20 70 65 72 66 6f 72 s....# We perfor
16f0: 6d 20 61 6c 6c 20 6e 65 63 65 73 73 61 72 79 20 m all necessary
1700: 73 70 6c 69 74 73 20 69 6e 20 6f 6e 65 20 67 6f splits in one go
1710: 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 6c , instead of onl
1720: 79 0a 09 23 20 6f 6e 65 2e 20 54 68 65 20 70 72 y..# one. The pr
1730: 65 76 69 6f 75 73 20 61 6c 67 6f 72 69 74 68 6d evious algorithm
1740: 2c 20 61 64 61 70 74 65 64 20 66 72 6f 6d 20 63 , adapted from c
1750: 76 73 32 73 76 6e 2c 20 63 6f 6d 70 75 74 65 64 vs2svn, computed
1760: 0a 09 23 20 61 20 6c 6f 74 20 6f 66 20 73 74 61 ..# a lot of sta
1770: 74 65 20 77 68 69 63 68 20 77 61 73 20 74 68 72 te which was thr
1780: 6f 77 6e 20 61 77 61 79 20 61 6e 64 20 74 68 65 own away and the
1790: 6e 20 63 6f 6d 70 75 74 65 64 20 61 67 61 69 6e n computed again
17a0: 0a 09 23 20 66 6f 72 20 65 61 63 68 20 6f 66 20 ..# for each of
17b0: 74 68 65 20 66 72 61 67 6d 65 6e 74 73 2e 20 49 the fragments. I
17c0: 74 20 73 68 6f 75 6c 64 20 62 65 20 65 61 73 69 t should be easi
17d0: 65 72 20 74 6f 20 75 70 64 61 74 65 20 61 6e 64 er to update and
17e0: 0a 09 23 20 72 65 75 73 65 20 74 68 61 74 20 73 ..# reuse that s
17f0: 74 61 74 65 2e 0a 0a 09 23 20 54 68 65 20 63 6f tate....# The co
1800: 64 65 20 63 68 65 63 6b 73 20 6f 6e 6c 79 20 73 de checks only s
1810: 75 63 63 65 73 73 6f 72 20 64 65 70 65 6e 64 65 uccessor depende
1820: 6e 63 69 65 73 2c 20 61 73 20 74 68 69 73 0a 09 ncies, as this..
1830: 23 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 # automatically
1840: 63 6f 76 65 72 73 20 74 68 65 20 70 72 65 64 65 covers the prede
1850: 63 65 73 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 cessor dependenc
1860: 69 65 73 20 61 73 20 77 65 6c 6c 20 28 41 0a 09 ies as well (A..
1870: 23 20 73 75 63 63 65 73 73 6f 72 20 64 65 70 65 # successor depe
1880: 6e 64 65 6e 63 79 20 61 20 2d 3e 20 62 20 69 73 ndency a -> b is
1890: 20 61 6c 73 6f 20 61 20 70 72 65 64 65 63 65 73 also a predeces
18a0: 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 79 0a 09 sor dependency..
18b0: 23 20 62 20 2d 3e 20 61 29 2e 0a 0a 09 23 20 41 # b -> a)....# A
18c0: 72 72 61 79 20 6f 66 20 64 65 70 65 6e 64 65 6e rray of dependen
18d0: 63 69 65 73 20 28 70 61 72 65 6e 74 20 2d 3e 20 cies (parent ->
18e0: 63 68 69 6c 64 29 2e 20 54 68 69 73 20 69 73 20 child). This is
18f0: 70 75 6c 6c 65 64 20 66 72 6f 6d 0a 09 23 20 74 pulled from..# t
1900: 68 65 20 73 74 61 74 65 2c 20 61 6e 64 20 6c 69 he state, and li
1910: 6d 69 74 65 64 20 74 6f 20 73 75 63 63 65 73 73 mited to success
1920: 6f 72 73 20 77 69 74 68 69 6e 20 74 68 65 20 63 ors within the c
1930: 68 61 6e 67 65 73 65 74 2e 0a 0a 09 61 72 72 61 hangeset....arra
1940: 79 20 73 65 74 20 64 65 70 65 6e 64 65 6e 63 69 y set dependenci
1950: 65 73 20 7b 7d 0a 09 24 6d 79 74 79 70 65 6f 62 es {}..$mytypeob
1960: 6a 20 69 6e 74 65 72 6e 61 6c 73 75 63 63 65 73 j internalsucces
1970: 73 6f 72 73 20 64 65 70 65 6e 64 65 6e 63 69 65 sors dependencie
1980: 73 20 24 6d 79 69 74 65 6d 73 0a 09 69 66 20 7b s $myitems..if {
1990: 21 5b 61 72 72 61 79 20 73 69 7a 65 20 64 65 70 ![array size dep
19a0: 65 6e 64 65 6e 63 69 65 73 5d 7d 20 7b 0a 09 20 endencies]} {..
19b0: 20 20 20 72 65 74 75 72 6e 20 30 0a 09 7d 20 3b return 0..} ;
19c0: 20 23 20 4e 6f 74 68 69 6e 67 20 74 6f 20 62 72 # Nothing to br
19d0: 65 61 6b 2e 0a 0a 09 6c 6f 67 20 77 72 69 74 65 eak....log write
19e0: 20 35 20 63 73 65 74 73 20 2e 2e 2e 5b 24 73 65 5 csets ...[$se
19f0: 6c 66 20 73 74 72 5d 2e 2e 2e 2e 2e 2e 2e 2e 2e lf str].........
1a00: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
1a10: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e ................
1a20: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 0a 09 ................
1a30: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 65 6d 3a 3a vc::tools::mem::
1a40: 6d 61 72 6b 0a 0a 09 23 20 57 65 20 68 61 76 65 mark...# We have
1a50: 20 69 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e 64 internal depend
1a60: 65 6e 63 69 65 73 20 74 6f 20 62 72 65 61 6b 2e encies to break.
1a70: 20 57 65 20 6e 6f 77 20 69 74 65 72 61 74 65 20 We now iterate
1a80: 6f 76 65 72 0a 09 23 20 61 6c 6c 20 70 6f 73 69 over..# all posi
1a90: 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 73 tions in the lis
1aa0: 74 20 28 77 68 69 63 68 20 69 73 20 63 68 72 6f t (which is chro
1ab0: 6e 6f 6c 6f 67 69 63 61 6c 2c 20 61 74 20 6c 65 nological, at le
1ac0: 61 73 74 0a 09 23 20 61 73 20 66 61 72 20 61 73 ast..# as far as
1ad0: 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70 73 20 the timestamps
1ae0: 61 72 65 20 63 6f 72 72 65 63 74 20 61 6e 64 20 are correct and
1af0: 75 6e 69 71 75 65 29 20 61 6e 64 0a 09 23 20 64 unique) and..# d
1b00: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 62 65 73 etermine the bes
1b10: 74 20 70 6f 73 69 74 69 6f 6e 20 66 6f 72 20 74 t position for t
1b20: 68 65 20 62 72 65 61 6b 2c 20 62 79 20 74 72 79 he break, by try
1b30: 69 6e 67 20 74 6f 0a 09 23 20 62 72 65 61 6b 20 ing to..# break
1b40: 61 73 20 6d 61 6e 79 20 64 65 70 65 6e 64 65 6e as many dependen
1b50: 63 69 65 73 20 61 73 20 70 6f 73 73 69 62 6c 65 cies as possible
1b60: 20 69 6e 20 6f 6e 65 20 67 6f 2e 20 57 68 65 6e in one go. When
1b70: 20 61 0a 09 23 20 62 72 65 61 6b 20 77 61 73 20 a..# break was
1b80: 66 6f 75 6e 64 20 74 68 69 73 20 69 73 20 72 65 found this is re
1b90: 64 6f 6e 65 20 66 6f 72 20 74 68 65 20 66 72 61 done for the fra
1ba0: 67 6d 65 6e 74 73 20 63 6f 6d 69 6e 67 20 61 6e gments coming an
1bb0: 64 0a 09 23 20 61 66 74 65 72 2c 20 61 66 74 65 d..# after, afte
1bc0: 72 20 75 70 64 69 6e 67 20 74 68 65 20 63 72 6f r upding the cro
1bd0: 73 73 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f ssing informatio
1be0: 6e 2e 0a 0a 09 23 20 44 61 74 61 20 73 74 72 75 n....# Data stru
1bf0: 63 74 75 72 65 73 3a 0a 09 23 20 4d 61 70 3a 20 ctures:..# Map:
1c00: 20 50 4f 53 20 20 20 72 65 76 69 73 69 6f 6e 20 POS revision
1c10: 69 64 20 20 20 20 20 20 2d 3e 20 70 6f 73 69 74 id -> posit
1c20: 69 6f 6e 20 69 6e 20 6c 69 73 74 2e 0a 09 23 20 ion in list...#
1c30: 20 20 20 20 20 20 43 52 4f 53 53 20 70 6f 73 69 CROSS posi
1c40: 74 69 6f 6e 20 69 6e 20 6c 69 73 74 20 2d 3e 20 tion in list ->
1c50: 6e 75 6d 62 65 72 20 6f 66 20 64 65 70 65 6e 64 number of depend
1c60: 65 6e 63 69 65 73 20 63 72 6f 73 73 69 6e 67 20 encies crossing
1c70: 69 74 0a 09 23 20 20 20 20 20 20 20 44 45 50 43 it..# DEPC
1c80: 20 20 64 65 70 65 6e 64 65 6e 63 79 20 20 20 20 dependency
1c90: 20 20 20 2d 3e 20 70 6f 73 69 74 69 6f 6e 73 20 -> positions
1ca0: 69 74 20 63 72 6f 73 73 65 73 0a 09 23 20 4c 69 it crosses..# Li
1cb0: 73 74 3a 20 52 41 4e 47 45 20 4f 66 20 74 68 65 st: RANGE Of the
1cc0: 20 70 6f 73 69 74 69 6f 6e 73 20 69 74 73 65 6c positions itsel
1cd0: 66 2e 0a 09 23 20 41 20 64 65 70 65 6e 64 65 6e f...# A dependen
1ce0: 63 79 20 69 73 20 61 20 73 69 6e 67 6c 65 2d 65 cy is a single-e
1cf0: 6c 65 6d 65 6e 74 20 6d 61 70 20 70 61 72 65 6e lement map paren
1d00: 74 20 2d 3e 20 63 68 69 6c 64 0a 0a 09 49 6e 69 t -> child...Ini
1d10: 74 69 61 6c 69 7a 65 42 72 65 61 6b 53 74 61 74 tializeBreakStat
1d20: 65 20 24 6d 79 69 74 65 6d 73 0a 0a 09 73 65 74 e $myitems...set
1d30: 20 66 72 61 67 6d 65 6e 74 73 20 7b 7d 0a 09 73 fragments {}..s
1d40: 65 74 20 6e 65 77 20 20 20 20 20 20 20 5b 6c 69 et new [li
1d50: 73 74 20 24 72 61 6e 67 65 5d 0a 09 61 72 72 61 st $range]..arra
1d60: 79 20 73 65 74 20 62 72 65 61 6b 73 20 7b 7d 0a y set breaks {}.
1d70: 0a 09 23 20 49 6e 73 74 65 61 64 20 6f 66 20 6f ..# Instead of o
1d80: 6e 65 20 6c 69 73 74 20 68 6f 6c 64 69 6e 67 20 ne list holding
1d90: 62 6f 74 68 20 70 72 6f 63 65 73 73 65 64 20 61 both processed a
1da0: 6e 64 20 70 65 6e 64 69 6e 67 0a 09 23 20 66 72 nd pending..# fr
1db0: 61 67 6d 65 6e 74 73 20 77 65 20 75 73 65 20 74 agments we use t
1dc0: 77 6f 2c 20 6f 6e 65 20 66 6f 72 20 74 68 65 20 wo, one for the
1dd0: 66 72 61 6d 65 6e 74 73 20 74 6f 20 70 72 6f 63 framents to proc
1de0: 65 73 73 2c 20 6f 6e 65 0a 09 23 20 74 6f 20 68 ess, one..# to h
1df0: 6f 6c 64 20 74 68 65 20 6e 65 77 20 66 72 61 67 old the new frag
1e00: 6d 65 6e 74 73 2c 20 61 6e 64 20 74 68 65 20 6c ments, and the l
1e10: 61 74 74 65 72 20 69 73 20 63 6f 70 69 65 64 20 atter is copied
1e20: 74 6f 20 74 68 65 0a 09 23 20 66 6f 72 6d 65 72 to the..# former
1e30: 20 77 68 65 6e 20 74 68 65 79 20 72 75 6e 20 6f when they run o
1e40: 75 74 2e 20 54 68 69 73 20 6b 65 65 70 73 20 74 ut. This keeps t
1e50: 68 65 20 6c 69 73 74 20 6f 66 20 70 65 6e 64 69 he list of pendi
1e60: 6e 67 0a 09 23 20 66 72 61 67 6d 65 6e 74 73 20 ng..# fragments
1e70: 73 68 6f 72 74 20 77 69 74 68 6f 75 74 20 73 61 short without sa
1e80: 63 72 69 66 69 63 69 6e 67 20 73 70 65 65 64 20 crificing speed
1e90: 62 79 20 73 68 69 66 74 69 6e 67 20 73 74 75 66 by shifting stuf
1ea0: 66 0a 09 23 20 64 6f 77 6e 2e 20 57 65 20 65 73 f..# down. We es
1eb0: 70 65 63 69 61 6c 6c 79 20 64 72 6f 70 20 74 68 pecially drop th
1ec0: 65 20 6d 65 6d 6f 72 79 20 6f 66 20 66 72 61 67 e memory of frag
1ed0: 6d 65 6e 74 73 20 62 72 6f 6b 65 6e 0a 09 23 20 ments broken..#
1ee0: 64 75 72 69 6e 67 20 70 72 6f 63 65 73 73 69 6e during processin
1ef0: 67 20 61 66 74 65 72 20 61 20 73 68 6f 72 74 20 g after a short
1f00: 74 69 6d 65 2c 20 69 6e 73 74 65 61 64 20 6f 66 time, instead of
1f10: 20 6c 65 74 74 69 6e 67 20 69 74 0a 09 23 20 63 letting it..# c
1f20: 6f 6e 73 75 6d 65 20 6d 65 6d 6f 72 79 2e 0a 0a onsume memory...
1f30: 09 77 68 69 6c 65 20 7b 5b 6c 6c 65 6e 67 74 68 .while {[llength
1f40: 20 24 6e 65 77 5d 7d 20 7b 0a 0a 09 20 20 20 20 $new]} {...
1f50: 73 65 74 20 70 65 6e 64 69 6e 67 20 24 6e 65 77 set pending $new
1f60: 0a 09 20 20 20 20 73 65 74 20 6e 65 77 20 20 20 .. set new
1f70: 20 20 7b 7d 0a 09 20 20 20 20 73 65 74 20 61 74 {}.. set at
1f80: 20 20 20 20 20 20 30 0a 0a 09 20 20 20 20 77 68 0... wh
1f90: 69 6c 65 20 7b 24 61 74 20 3c 20 5b 6c 6c 65 6e ile {$at < [llen
1fa0: 67 74 68 20 24 70 65 6e 64 69 6e 67 5d 7d 20 7b gth $pending]} {
1fb0: 0a 09 09 73 65 74 20 63 75 72 72 65 6e 74 20 5b ...set current [
1fc0: 6c 69 6e 64 65 78 20 24 70 65 6e 64 69 6e 67 20 lindex $pending
1fd0: 24 61 74 5d 0a 0a 09 09 6c 6f 67 20 77 72 69 74 $at]....log writ
1fe0: 65 20 36 20 63 73 65 74 73 20 7b 2e 20 2e 20 2e e 6 csets {. . .
1ff0: 2e 20 2e 2e 2e 20 2e 2e 2e 2e 2e 20 2e 2e 2e 2e . ... ..... ....
2000: 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e .... ...........
2010: 2e 2e 7d 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 ..}...log write
2020: 36 20 63 73 65 74 73 20 7b 53 63 68 65 64 75 6c 6 csets {Schedul
2030: 65 64 20 20 20 5b 6a 6f 69 6e 20 5b 50 52 73 20 ed [join [PRs
2040: 5b 6c 72 61 6e 67 65 20 24 70 65 6e 64 69 6e 67 [lrange $pending
2050: 20 24 61 74 20 65 6e 64 5d 5d 20 7b 20 7d 5d 7d $at end]] { }]}
2060: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 36 20 63 ...log write 6 c
2070: 73 65 74 73 20 7b 43 6f 6e 73 69 64 65 72 69 6e sets {Considerin
2080: 67 20 5b 50 52 20 24 63 75 72 72 65 6e 74 5d 20 g [PR $current]
2090: 5c 5b 24 61 74 2f 5b 6c 6c 65 6e 67 74 68 20 24 \[$at/[llength $
20a0: 70 65 6e 64 69 6e 67 5d 5c 5d 7d 0a 0a 09 09 73 pending]\]}....s
20b0: 65 74 20 62 65 73 74 20 5b 46 69 6e 64 42 65 73 et best [FindBes
20c0: 74 42 72 65 61 6b 20 24 63 75 72 72 65 6e 74 5d tBreak $current]
20d0: 0a 0a 09 09 69 66 20 7b 24 62 65 73 74 20 3c 20 ....if {$best <
20e0: 30 7d 20 7b 0a 09 09 20 20 20 20 23 20 54 68 65 0} {... # The
20f0: 20 69 6e 73 70 65 63 74 65 64 20 72 61 6e 67 65 inspected range
2100: 20 68 61 73 20 6e 6f 20 69 6e 74 65 72 6e 61 6c has no internal
2110: 0a 09 09 20 20 20 20 23 20 64 65 70 65 6e 64 65 ... # depende
2120: 6e 63 69 65 73 2e 20 54 68 69 73 20 69 73 20 61 ncies. This is a
2130: 20 63 6f 6d 70 6c 65 74 65 20 66 72 61 67 6d 65 complete fragme
2140: 6e 74 2e 0a 09 09 20 20 20 20 6c 61 70 70 65 6e nt.... lappen
2150: 64 20 66 72 61 67 6d 65 6e 74 73 20 24 63 75 72 d fragments $cur
2160: 72 65 6e 74 0a 0a 09 09 20 20 20 20 6c 6f 67 20 rent.... log
2170: 77 72 69 74 65 20 36 20 63 73 65 74 73 20 22 4e write 6 csets "N
2180: 6f 20 62 72 65 61 6b 73 2c 20 66 69 6e 61 6c 22 o breaks, final"
2190: 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 ...} else {...
21a0: 20 20 23 20 53 70 6c 69 74 20 74 68 65 20 72 61 # Split the ra
21b0: 6e 67 65 20 61 6e 64 20 73 63 68 65 64 75 6c 65 nge and schedule
21c0: 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 0a 09 the resulting..
21d0: 09 20 20 20 20 23 20 66 72 61 67 6d 65 6e 74 73 . # fragments
21e0: 20 66 6f 72 20 66 75 72 74 68 65 72 20 69 6e 73 for further ins
21f0: 70 65 63 74 69 6f 6e 2e 20 52 65 6d 65 6d 62 65 pection. Remembe
2200: 72 20 74 68 65 0a 09 09 20 20 20 20 23 20 6e 75 r the... # nu
2210: 6d 62 65 72 20 6f 66 20 64 65 70 65 6e 64 65 6e mber of dependen
2220: 63 69 65 73 20 63 75 74 20 62 65 66 6f 72 65 20 cies cut before
2230: 77 65 20 72 65 6d 6f 76 65 20 74 68 65 6d 0a 09 we remove them..
2240: 09 20 20 20 20 23 20 66 72 6f 6d 20 63 6f 6e 73 . # from cons
2250: 69 64 65 72 61 74 69 6f 6e 2c 20 66 6f 72 20 64 ideration, for d
2260: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6c 61 74 ocumentation lat
2270: 65 72 2e 0a 0a 09 09 20 20 20 20 73 65 74 20 62 er..... set b
2280: 72 65 61 6b 73 28 24 62 65 73 74 29 20 24 63 72 reaks($best) $cr
2290: 6f 73 73 28 24 62 65 73 74 29 0a 0a 09 09 20 20 oss($best)....
22a0: 20 20 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 log write 6 cs
22b0: 65 74 73 20 22 42 65 73 74 20 62 72 65 61 6b 20 ets "Best break
22c0: 40 20 24 62 65 73 74 2c 20 63 75 74 74 69 6e 67 @ $best, cutting
22d0: 20 5b 6e 73 70 20 24 63 72 6f 73 73 28 24 62 65 [nsp $cross($be
22e0: 73 74 29 20 64 65 70 65 6e 64 65 6e 63 79 20 64 st) dependency d
22f0: 65 70 65 6e 64 65 6e 63 69 65 73 5d 22 0a 0a 09 ependencies]"...
2300: 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 54 68 65 . # Note: The
2310: 20 76 61 6c 75 65 20 6f 66 20 62 65 73 74 20 69 value of best i
2320: 73 20 61 6e 20 61 62 6f 6c 75 74 65 20 6c 6f 63 s an abolute loc
2330: 61 74 69 6f 6e 0a 09 09 20 20 20 20 23 20 69 6e ation... # in
2340: 20 6d 79 69 74 65 6d 73 2e 20 55 73 65 20 74 68 myitems. Use th
2350: 65 20 73 74 61 72 74 20 6f 66 20 63 75 72 72 65 e start of curre
2360: 6e 74 20 74 6f 20 6d 61 6b 65 20 69 74 0a 09 09 nt to make it...
2370: 20 20 20 20 23 20 61 6e 20 69 6e 64 65 78 20 61 # an index a
2380: 62 73 6f 6c 75 74 65 20 74 6f 20 63 75 72 72 65 bsolute to curre
2390: 6e 74 2e 0a 0a 09 09 20 20 20 20 73 65 74 20 62 nt..... set b
23a0: 72 65 6c 20 5b 65 78 70 72 20 7b 24 62 65 73 74 rel [expr {$best
23b0: 20 2d 20 5b 6c 69 6e 64 65 78 20 24 63 75 72 72 - [lindex $curr
23c0: 65 6e 74 20 30 5d 7d 5d 0a 09 09 20 20 20 20 73 ent 0]}]... s
23d0: 65 74 20 62 6e 65 78 74 20 24 62 72 65 6c 20 3b et bnext $brel ;
23e0: 20 69 6e 63 72 20 62 6e 65 78 74 0a 09 09 20 20 incr bnext...
23f0: 20 20 73 65 74 20 66 72 61 67 62 65 66 6f 72 65 set fragbefore
2400: 20 5b 6c 72 61 6e 67 65 20 24 63 75 72 72 65 6e [lrange $curren
2410: 74 20 30 20 24 62 72 65 6c 5d 0a 09 09 20 20 20 t 0 $brel]...
2420: 20 73 65 74 20 66 72 61 67 61 66 74 65 72 20 20 set fragafter
2430: 5b 6c 72 61 6e 67 65 20 24 63 75 72 72 65 6e 74 [lrange $current
2440: 20 24 62 6e 65 78 74 20 65 6e 64 5d 0a 0a 09 09 $bnext end]....
2450: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 36 20 log write 6
2460: 63 73 65 74 73 20 22 4e 65 77 20 70 69 65 63 65 csets "New piece
2470: 73 20 20 5b 50 52 20 24 66 72 61 67 62 65 66 6f s [PR $fragbefo
2480: 72 65 5d 20 5b 50 52 20 24 66 72 61 67 61 66 74 re] [PR $fragaft
2490: 65 72 5d 22 0a 0a 09 09 20 20 20 20 69 6e 74 65 er]".... inte
24a0: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 5b 6c grity assert {[l
24b0: 6c 65 6e 67 74 68 20 24 66 72 61 67 62 65 66 6f length $fragbefo
24c0: 72 65 5d 7d 20 7b 46 6f 75 6e 64 20 7a 65 72 6f re]} {Found zero
24d0: 2d 6c 65 6e 67 74 68 20 66 72 61 67 6d 65 6e 74 -length fragment
24e0: 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e at the beginnin
24f0: 67 7d 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 g}... integri
2500: 74 79 20 61 73 73 65 72 74 20 7b 5b 6c 6c 65 6e ty assert {[llen
2510: 67 74 68 20 24 66 72 61 67 61 66 74 65 72 5d 7d gth $fragafter]}
2520: 20 20 7b 46 6f 75 6e 64 20 7a 65 72 6f 2d 6c 65 {Found zero-le
2530: 6e 67 74 68 20 66 72 61 67 6d 65 6e 74 20 61 74 ngth fragment at
2540: 20 74 68 65 20 65 6e 64 7d 0a 0a 09 09 20 20 20 the end}....
2550: 20 6c 61 70 70 65 6e 64 20 6e 65 77 20 24 66 72 lappend new $fr
2560: 61 67 62 65 66 6f 72 65 20 24 66 72 61 67 61 66 agbefore $fragaf
2570: 74 65 72 0a 09 09 20 20 20 20 43 75 74 41 74 20 ter... CutAt
2580: 24 62 65 73 74 0a 09 09 7d 0a 0a 09 09 69 6e 63 $best...}....inc
2590: 72 20 61 74 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a r at.. }..}..
25a0: 09 6c 6f 67 20 77 72 69 74 65 20 36 20 63 73 65 .log write 6 cse
25b0: 74 73 20 22 2e 20 2e 20 2e 2e 20 2e 2e 2e 20 2e ts ". . .. ... .
25c0: 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 20 2e 2e .... ........ ..
25d0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 22 0a 0a 09 23 ..........."...#
25e0: 20 28 2a 29 20 57 65 20 63 6c 65 61 72 20 6f 75 (*) We clear ou
25f0: 74 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 t the associated
2600: 20 70 61 72 74 20 6f 66 20 74 68 65 20 6d 79 69 part of the myi
2610: 74 65 6d 6d 61 70 0a 09 23 20 69 6e 2d 6d 65 6d temmap..# in-mem
2620: 6f 72 79 20 69 6e 64 65 78 20 69 6e 20 70 72 65 ory index in pre
2630: 70 61 72 61 74 69 6f 6e 20 66 6f 72 20 6e 65 77 paration for new
2640: 20 64 61 74 61 2e 20 41 20 73 69 6d 70 6c 65 20 data. A simple
2650: 75 6e 73 65 74 0a 09 23 20 69 73 20 65 6e 6f 75 unset..# is enou
2660: 67 68 2c 20 77 65 20 68 61 76 65 20 6e 6f 20 73 gh, we have no s
2670: 79 6d 62 6f 6c 20 63 68 61 6e 67 65 73 65 74 73 ymbol changesets
2680: 20 61 74 20 74 68 69 73 20 74 69 6d 65 2c 20 61 at this time, a
2690: 6e 64 0a 09 23 20 74 68 75 73 20 6e 65 76 65 72 nd..# thus never
26a0: 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 more than one r
26b0: 65 66 65 72 65 6e 63 65 20 69 6e 20 74 68 65 20 eference in the
26c0: 6c 69 73 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20 list....foreach
26d0: 69 69 64 20 24 6d 79 69 74 65 6d 73 20 7b 0a 09 iid $myitems {..
26e0: 20 20 20 20 73 65 74 20 6b 65 79 20 5b 6c 69 73 set key [lis
26f0: 74 20 24 6d 79 74 79 70 65 20 24 69 69 64 5d 0a t $mytype $iid].
2700: 09 20 20 20 20 23 75 6e 73 65 74 20 6d 79 69 74 . #unset myit
2710: 65 6d 6d 61 70 28 24 6b 65 79 29 0a 09 20 20 20 emmap($key)..
2720: 20 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 log write 8 cse
2730: 74 73 20 7b 4d 41 50 2d 20 69 74 65 6d 20 3c 24 ts {MAP- item <$
2740: 6b 65 79 3e 20 24 73 65 6c 66 20 3d 20 5b 24 73 key> $self = [$s
2750: 65 6c 66 20 73 74 72 5d 7d 0a 09 7d 0a 0a 09 23 elf str]}..}...#
2760: 20 43 72 65 61 74 65 20 63 68 61 6e 67 65 73 65 Create changese
2770: 74 73 20 66 6f 72 20 74 68 65 20 66 72 61 67 6d ts for the fragm
2780: 65 6e 74 73 2c 20 72 65 75 73 69 6e 67 20 74 68 ents, reusing th
2790: 65 20 63 75 72 72 65 6e 74 20 6f 6e 65 0a 09 23 e current one..#
27a0: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 66 for the first f
27b0: 72 61 67 6d 65 6e 74 2e 20 57 65 20 73 6f 72 74 ragment. We sort
27c0: 20 74 68 65 6d 20 69 6e 20 6f 72 64 65 72 20 74 them in order t
27d0: 6f 20 61 6c 6c 6f 77 0a 09 23 20 63 68 65 63 6b o allow..# check
27e0: 69 6e 67 20 66 6f 72 20 67 61 70 73 20 61 6e 64 ing for gaps and
27f0: 20 6e 69 63 65 20 6d 65 73 73 61 67 65 73 2e 0a nice messages..
2800: 0a 09 73 65 74 20 66 72 61 67 6d 65 6e 74 73 20 ..set fragments
2810: 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 [lsort -index 0
2820: 2d 69 6e 74 65 67 65 72 20 24 66 72 61 67 6d 65 -integer $fragme
2830: 6e 74 73 5d 0a 0a 09 23 70 75 74 73 20 5c 74 2e nts]...#puts \t.
2840: 5b 6a 6f 69 6e 20 5b 50 52 73 20 24 66 72 61 67 [join [PRs $frag
2850: 6d 65 6e 74 73 5d 20 2e 5c 6e 5c 74 2e 5d 2e 0a ments] .\n\t.]..
2860: 0a 09 42 6f 72 64 65 72 20 5b 6c 69 6e 64 65 78 ..Border [lindex
2870: 20 24 66 72 61 67 6d 65 6e 74 73 20 30 5d 20 66 $fragments 0] f
2880: 69 72 73 74 73 20 66 69 72 73 74 65 0a 0a 09 69 irsts firste...i
2890: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
28a0: 7b 24 66 69 72 73 74 73 20 3d 3d 20 30 7d 20 7b {$firsts == 0} {
28b0: 42 61 64 20 66 72 61 67 6d 65 6e 74 20 73 74 61 Bad fragment sta
28c0: 72 74 20 40 20 24 66 69 72 73 74 73 2c 20 67 61 rt @ $firsts, ga
28d0: 70 2c 20 6f 72 20 62 65 66 6f 72 65 20 62 65 67 p, or before beg
28e0: 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 72 61 inning of the ra
28f0: 6e 67 65 7d 0a 0a 09 73 65 74 20 6c 61 73 74 65 nge}...set laste
2900: 20 24 66 69 72 73 74 65 0a 09 66 6f 72 65 61 63 $firste..foreac
2910: 68 20 66 72 61 67 6d 65 6e 74 20 5b 6c 72 61 6e h fragment [lran
2920: 67 65 20 24 66 72 61 67 6d 65 6e 74 73 20 31 20 ge $fragments 1
2930: 65 6e 64 5d 20 7b 0a 09 20 20 20 20 42 6f 72 64 end] {.. Bord
2940: 65 72 20 24 66 72 61 67 6d 65 6e 74 20 73 20 65 er $fragment s e
2950: 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 .. integrity
2960: 61 73 73 65 72 74 20 7b 24 6c 61 73 74 65 20 3d assert {$laste =
2970: 3d 20 28 24 73 20 2d 20 31 29 7d 20 7b 42 61 64 = ($s - 1)} {Bad
2980: 20 66 72 61 67 6d 65 6e 74 20 62 6f 72 64 65 72 fragment border
2990: 20 3c 24 6c 61 73 74 65 20 7c 20 24 73 3e 2c 20 <$laste | $s>,
29a0: 67 61 70 20 6f 72 20 6f 76 65 72 6c 61 70 7d 0a gap or overlap}.
29b0: 0a 09 20 20 20 20 73 65 74 20 6e 65 77 20 5b 24 .. set new [$
29c0: 74 79 70 65 20 25 41 55 54 4f 25 20 24 6d 79 70 type %AUTO% $myp
29d0: 72 6f 6a 65 63 74 20 24 6d 79 74 79 70 65 20 24 roject $mytype $
29e0: 6d 79 73 72 63 69 64 20 5b 6c 72 61 6e 67 65 20 mysrcid [lrange
29f0: 24 6d 79 69 74 65 6d 73 20 24 73 20 24 65 5d 5d $myitems $s $e]]
2a00: 0a 09 20 20 20 20 69 6e 63 72 20 63 6f 75 6e 74 .. incr count
2a10: 65 72 0a 0a 20 20 20 20 20 20 20 20 20 20 20 20 er..
2a20: 6c 6f 67 20 77 72 69 74 65 20 34 20 63 73 65 74 log write 4 cset
2a30: 73 20 22 42 72 65 61 6b 69 6e 67 20 5b 24 73 65 s "Breaking [$se
2a40: 6c 66 20 73 74 72 20 5d 20 40 20 24 6c 61 73 74 lf str ] @ $last
2a50: 65 2c 20 6e 65 77 20 5b 24 6e 65 77 20 73 74 72 e, new [$new str
2a60: 5d 2c 20 63 75 74 74 69 6e 67 20 24 62 72 65 61 ], cutting $brea
2a70: 6b 73 28 24 6c 61 73 74 65 29 22 0a 0a 09 20 20 ks($laste)"...
2a80: 20 20 73 65 74 20 6c 61 73 74 65 20 24 65 0a 09 set laste $e..
2a90: 7d 0a 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 }...integrity as
2aa0: 73 65 72 74 20 7b 0a 09 20 20 20 20 24 6c 61 73 sert {.. $las
2ab0: 74 65 20 3d 3d 20 28 5b 6c 6c 65 6e 67 74 68 20 te == ([llength
2ac0: 24 6d 79 69 74 65 6d 73 5d 2d 31 29 0a 09 7d 20 $myitems]-1)..}
2ad0: 7b 42 61 64 20 66 72 61 67 6d 65 6e 74 20 65 6e {Bad fragment en
2ae0: 64 20 40 20 24 6c 61 73 74 65 2c 20 67 61 70 2c d @ $laste, gap,
2af0: 20 6f 72 20 62 65 79 6f 6e 64 20 65 6e 64 20 6f or beyond end o
2b00: 66 20 74 68 65 20 72 61 6e 67 65 7d 0a 0a 09 23 f the range}...#
2b10: 20 50 75 74 20 74 68 65 20 66 69 72 73 74 20 66 Put the first f
2b20: 72 61 67 6d 65 6e 74 20 69 6e 74 6f 20 74 68 65 ragment into the
2b30: 20 63 75 72 72 65 6e 74 20 63 68 61 6e 67 65 73 current changes
2b40: 65 74 2c 20 61 6e 64 0a 09 23 20 75 70 64 61 74 et, and..# updat
2b50: 65 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 e the in-memory
2b60: 69 6e 64 65 78 2e 20 57 65 20 63 61 6e 20 73 69 index. We can si
2b70: 6d 70 6c 79 20 28 72 65 29 61 64 64 20 74 68 65 mply (re)add the
2b80: 20 69 74 65 6d 73 0a 09 23 20 62 65 63 61 75 73 items..# becaus
2b90: 65 20 77 65 20 63 6c 65 61 72 65 64 20 74 68 65 e we cleared the
2ba0: 20 70 72 65 76 69 6f 75 73 6c 79 20 65 78 69 73 previously exis
2bb0: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e ting information
2bc0: 2c 20 73 65 65 0a 09 23 20 28 2a 29 20 61 62 6f , see..# (*) abo
2bd0: 76 65 2e 20 50 65 72 73 69 73 74 65 6e 63 65 20 ve. Persistence
2be0: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 does not matter
2bf0: 68 65 72 65 2c 20 6e 6f 6e 65 20 6f 66 20 74 68 here, none of th
2c00: 65 0a 09 23 20 63 68 61 6e 67 65 73 65 74 73 20 e..# changesets
2c10: 68 61 73 20 62 65 65 6e 20 73 61 76 65 64 20 74 has been saved t
2c20: 6f 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 o the persistent
2c30: 20 73 74 61 74 65 20 79 65 74 2e 0a 0a 09 73 65 state yet....se
2c40: 74 20 6d 79 69 74 65 6d 73 20 20 5b 6c 72 61 6e t myitems [lran
2c50: 67 65 20 24 6d 79 69 74 65 6d 73 20 20 30 20 24 ge $myitems 0 $
2c60: 66 69 72 73 74 65 5d 0a 09 73 65 74 20 6d 79 74 firste]..set myt
2c70: 69 74 65 6d 73 20 5b 6c 72 61 6e 67 65 20 24 6d items [lrange $m
2c80: 79 74 69 74 65 6d 73 20 30 20 24 66 69 72 73 74 ytitems 0 $first
2c90: 65 5d 0a 09 66 6f 72 65 61 63 68 20 69 69 64 20 e]..foreach iid
2ca0: 24 6d 79 69 74 65 6d 73 20 7b 0a 09 20 20 20 20 $myitems {..
2cb0: 73 65 74 20 6b 65 79 20 5b 6c 69 73 74 20 24 6d set key [list $m
2cc0: 79 74 79 70 65 20 24 69 69 64 5d 0a 09 20 20 20 ytype $iid]..
2cd0: 20 23 73 65 74 20 6d 79 69 74 65 6d 6d 61 70 28 #set myitemmap(
2ce0: 24 6b 65 79 29 20 24 73 65 6c 66 0a 09 20 20 20 $key) $self..
2cf0: 20 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 log write 8 cse
2d00: 74 73 20 7b 4d 41 50 2b 20 69 74 65 6d 20 3c 24 ts {MAP+ item <$
2d10: 6b 65 79 3e 20 24 73 65 6c 66 20 3d 20 5b 24 73 key> $self = [$s
2d20: 65 6c 66 20 73 74 72 5d 7d 0a 09 7d 0a 0a 09 72 elf str]}..}...r
2d30: 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a 0a 20 eturn 1. }..
2d40: 20 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73 method persis
2d50: 74 20 7b 7d 20 7b 0a 09 73 65 74 20 74 69 64 20 t {} {..set tid
2d60: 24 6d 79 63 73 74 79 70 65 28 24 6d 79 74 79 70 $mycstype($mytyp
2d70: 65 29 0a 09 73 65 74 20 70 69 64 20 5b 24 6d 79 e)..set pid [$my
2d80: 70 72 6f 6a 65 63 74 20 69 64 5d 0a 09 73 65 74 project id]..set
2d90: 20 70 6f 73 20 30 0a 0a 09 73 74 61 74 65 20 74 pos 0...state t
2da0: 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 ransaction {..
2db0: 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 state run {...
2dc0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 68 61 6e INSERT INTO chan
2dd0: 67 65 73 65 74 20 28 63 69 64 2c 20 20 20 70 69 geset (cid, pi
2de0: 64 2c 20 20 74 79 70 65 2c 20 73 72 63 29 0a 09 d, type, src)..
2df0: 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 .VALUES
2e00: 20 20 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24 ($myid, $
2e10: 70 69 64 2c 20 24 74 69 64 2c 20 24 6d 79 73 72 pid, $tid, $mysr
2e20: 63 69 64 29 3b 0a 09 20 20 20 20 7d 0a 0a 09 20 cid);.. }...
2e30: 20 20 20 66 6f 72 65 61 63 68 20 69 69 64 20 24 foreach iid $
2e40: 6d 79 69 74 65 6d 73 20 7b 0a 09 09 73 74 61 74 myitems {...stat
2e50: 65 20 72 75 6e 20 7b 0a 09 09 20 20 20 20 49 4e e run {... IN
2e60: 53 45 52 54 20 49 4e 54 4f 20 63 73 69 74 65 6d SERT INTO csitem
2e70: 20 28 63 69 64 2c 20 20 20 70 6f 73 2c 20 20 69 (cid, pos, i
2e80: 69 64 29 0a 09 09 20 20 20 20 56 41 4c 55 45 53 id)... VALUES
2e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 24 6d ($m
2ea0: 79 69 64 2c 20 24 70 6f 73 2c 20 24 69 69 64 29 yid, $pos, $iid)
2eb0: 3b 0a 09 09 7d 0a 09 09 69 6e 63 72 20 70 6f 73 ;...}...incr pos
2ec0: 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 .. }..}..retu
2ed0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
2ee0: 74 68 6f 64 20 74 69 6d 65 72 61 6e 67 65 20 7b thod timerange {
2ef0: 7d 20 7b 20 72 65 74 75 72 6e 20 5b 24 6d 79 74 } { return [$myt
2f00: 79 70 65 6f 62 6a 20 74 69 6d 65 72 61 6e 67 65 ypeobj timerange
2f10: 20 24 6d 79 69 74 65 6d 73 5d 20 7d 0a 0a 20 20 $myitems] }..
2f20: 20 20 6d 65 74 68 6f 64 20 6c 69 6d 69 74 73 20 method limits
2f30: 7b 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 {} {..struct::li
2f40: 73 74 20 61 73 73 69 67 6e 20 5b 24 6d 79 74 79 st assign [$myty
2f50: 70 65 6f 62 6a 20 6c 69 6d 69 74 73 20 24 6d 79 peobj limits $my
2f60: 69 74 65 6d 73 5d 20 6d 61 78 70 20 6d 69 6e 73 items] maxp mins
2f70: 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b ..return [list [
2f80: 54 61 67 49 74 65 6d 44 69 63 74 20 24 6d 61 78 TagItemDict $max
2f90: 70 20 24 6d 79 74 79 70 65 5d 20 5b 54 61 67 49 p $mytype] [TagI
2fa0: 74 65 6d 44 69 63 74 20 24 6d 69 6e 73 20 24 6d temDict $mins $m
2fb0: 79 74 79 70 65 5d 5d 0a 20 20 20 20 7d 0a 0a 20 ytype]]. }..
2fc0: 20 20 20 6d 65 74 68 6f 64 20 64 72 6f 70 20 7b method drop {
2fd0: 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 } {..log write 8
2fe0: 20 63 73 65 74 73 20 7b 44 72 6f 70 70 69 6e 67 csets {Dropping
2ff0: 20 24 73 65 6c 66 20 3d 20 5b 24 73 65 6c 66 20 $self = [$self
3000: 73 74 72 5d 7d 0a 0a 09 73 74 61 74 65 20 74 72 str]}...state tr
3010: 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 ansaction {..
3020: 20 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 44 state run {...D
3030: 45 4c 45 54 45 20 46 52 4f 4d 20 63 68 61 6e 67 ELETE FROM chang
3040: 65 73 65 74 20 20 20 57 48 45 52 45 20 63 69 64 eset WHERE cid
3050: 20 3d 20 24 6d 79 69 64 3b 0a 09 09 44 45 4c 45 = $myid;...DELE
3060: 54 45 20 46 52 4f 4d 20 63 73 69 74 65 6d 20 20 TE FROM csitem
3070: 20 20 20 20 57 48 45 52 45 20 63 69 64 20 3d 20 WHERE cid =
3080: 24 6d 79 69 64 3b 0a 09 09 44 45 4c 45 54 45 20 $myid;...DELETE
3090: 46 52 4f 4d 20 63 73 73 75 63 63 65 73 73 6f 72 FROM cssuccessor
30a0: 20 57 48 45 52 45 20 63 69 64 20 3d 20 24 6d 79 WHERE cid = $my
30b0: 69 64 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 66 id;.. }..}..f
30c0: 6f 72 65 61 63 68 20 69 69 64 20 24 6d 79 69 74 oreach iid $myit
30d0: 65 6d 73 20 7b 0a 09 20 20 20 20 73 65 74 20 6b ems {.. set k
30e0: 65 79 20 5b 6c 69 73 74 20 24 6d 79 74 79 70 65 ey [list $mytype
30f0: 20 24 69 69 64 5d 0a 09 20 20 20 20 75 6e 73 65 $iid].. unse
3100: 74 20 6d 79 69 74 65 6d 6d 61 70 28 24 6b 65 79 t myitemmap($key
3110: 29 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 ).. log write
3120: 20 38 20 63 73 65 74 73 20 7b 4d 41 50 2d 20 69 8 csets {MAP- i
3130: 74 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 6c 66 tem <$key> $self
3140: 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d 0a = [$self str]}.
3150: 09 7d 0a 09 73 65 74 20 70 6f 73 20 20 20 20 20 .}..set pos
3160: 20 20 20 20 20 5b 6c 73 65 61 72 63 68 20 2d 65 [lsearch -e
3170: 78 61 63 74 20 24 6d 79 63 68 61 6e 67 65 73 65 xact $mychangese
3180: 74 73 20 24 73 65 6c 66 5d 0a 09 73 65 74 20 6d ts $self]..set m
3190: 79 63 68 61 6e 67 65 73 65 74 73 20 5b 6c 72 65 ychangesets [lre
31a0: 70 6c 61 63 65 20 24 6d 79 63 68 61 6e 67 65 73 place $mychanges
31b0: 65 74 73 20 24 70 6f 73 20 24 70 6f 73 5d 0a 09 ets $pos $pos]..
31c0: 73 65 74 20 70 6f 73 20 20 20 20 20 20 20 20 20 set pos
31d0: 20 20 20 20 20 20 20 20 20 20 20 5b 6c 73 65 61 [lsea
31e0: 72 63 68 20 2d 65 78 61 63 74 20 24 6d 79 74 63 rch -exact $mytc
31f0: 68 61 6e 67 65 73 65 74 73 28 24 6d 79 74 79 70 hangesets($mytyp
3200: 65 29 20 24 73 65 6c 66 5d 0a 09 73 65 74 20 6d e) $self]..set m
3210: 79 74 63 68 61 6e 67 65 73 65 74 73 28 24 6d 79 ytchangesets($my
3220: 74 79 70 65 29 20 5b 6c 72 65 70 6c 61 63 65 20 type) [lreplace
3230: 24 6d 79 74 63 68 61 6e 67 65 73 65 74 73 28 24 $mytchangesets($
3240: 6d 79 74 79 70 65 29 20 24 70 6f 73 20 24 70 6f mytype) $pos $po
3250: 73 5d 0a 0a 09 23 20 52 65 74 75 72 6e 20 74 68 s]...# Return th
3260: 65 20 6c 69 73 74 20 6f 66 20 70 72 65 64 65 63 e list of predec
3270: 65 73 73 6f 72 73 20 73 6f 20 74 68 61 74 20 74 essors so that t
3280: 68 65 79 20 63 61 6e 20 62 65 20 61 64 6a 75 73 hey can be adjus
3290: 74 65 64 2e 0a 09 72 65 74 75 72 6e 20 5b 73 74 ted...return [st
32a0: 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 5b ruct::list map [
32b0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 state run {..
32c0: 20 53 45 4c 45 43 54 20 63 69 64 0a 09 20 20 20 SELECT cid..
32d0: 20 46 52 4f 4d 20 20 20 63 73 73 75 63 63 65 73 FROM cssucces
32e0: 73 6f 72 0a 09 20 20 20 20 57 48 45 52 45 20 20 sor.. WHERE
32f0: 6e 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 nid = $myid..}]
3300: 5b 6d 79 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 [mytypemethod of
3310: 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 ]]. }.. me
3320: 74 68 6f 64 20 72 65 70 6f 72 74 6c 6f 6f 70 20 thod reportloop
3330: 7b 7b 6b 69 6c 6c 20 31 7d 7d 20 7b 0a 09 23 20 {{kill 1}} {..#
3340: 57 65 20 70 72 69 6e 74 20 74 68 65 20 69 74 65 We print the ite
3350: 6d 73 20 77 68 69 63 68 20 61 72 65 20 70 72 6f ms which are pro
3360: 64 75 63 69 6e 67 20 74 68 65 20 6c 6f 6f 70 2c ducing the loop,
3370: 20 61 6e 64 20 68 6f 77 2e 0a 0a 09 73 65 74 20 and how....set
3380: 68 64 72 20 22 53 65 6c 66 2d 72 65 66 65 72 65 hdr "Self-refere
3390: 6e 74 69 61 6c 20 63 68 61 6e 67 65 73 65 74 20 ntial changeset
33a0: 5b 24 73 65 6c 66 20 73 74 72 5d 20 5f 5f 5f 5f [$self str] ____
33b0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 22 0a ______________".
33c0: 09 73 65 74 20 66 74 72 20 5b 72 65 67 73 75 62 .set ftr [regsub
33d0: 20 2d 61 6c 6c 20 7b 5b 5e 20 09 5d 7d 20 24 68 -all {[^ .]} $h
33e0: 64 72 20 7b 5f 7d 5d 0a 0a 09 6c 6f 67 20 77 72 dr {_}]...log wr
33f0: 69 74 65 20 30 20 63 73 65 74 73 20 24 68 64 72 ite 0 csets $hdr
3400: 0a 09 66 6f 72 65 61 63 68 20 7b 69 74 65 6d 20 ..foreach {item
3410: 6e 65 78 74 69 74 65 6d 7d 20 5b 24 6d 79 74 79 nextitem} [$myty
3420: 70 65 6f 62 6a 20 6c 6f 6f 70 73 20 24 6d 79 69 peobj loops $myi
3430: 74 65 6d 73 5d 20 7b 0a 09 20 20 20 20 23 20 43 tems] {.. # C
3440: 72 65 61 74 65 20 74 61 67 67 65 64 20 69 74 65 reate tagged ite
3450: 6d 73 20 66 72 6f 6d 20 74 68 65 20 69 64 20 61 ms from the id a
3460: 6e 64 20 6f 75 72 20 74 79 70 65 2e 0a 09 20 20 nd our type...
3470: 20 20 73 65 74 20 69 74 65 6d 20 20 20 20 20 5b set item [
3480: 6c 69 73 74 20 24 6d 79 74 79 70 65 20 20 24 69 list $mytype $i
3490: 74 65 6d 5d 0a 09 20 20 20 20 73 65 74 20 6e 65 tem].. set ne
34a0: 78 74 69 74 65 6d 20 5b 6c 69 73 74 20 24 6d 79 xtitem [list $my
34b0: 74 79 70 65 20 24 6e 65 78 74 69 74 65 6d 5d 0a type $nextitem].
34c0: 09 20 20 20 20 23 20 50 72 69 6e 74 61 62 6c 65 . # Printable
34d0: 20 6c 61 62 65 6c 73 2e 0a 09 20 20 20 20 73 65 labels... se
34e0: 74 20 69 20 20 22 3c 5b 24 74 79 70 65 20 69 74 t i "<[$type it
34f0: 65 6d 73 74 72 20 24 69 74 65 6d 5d 3e 22 0a 09 emstr $item]>"..
3500: 20 20 20 20 73 65 74 20 6e 20 20 22 3c 5b 24 74 set n "<[$t
3510: 79 70 65 20 69 74 65 6d 73 74 72 20 24 6e 65 78 ype itemstr $nex
3520: 74 69 74 65 6d 5d 3e 22 0a 09 20 20 20 20 73 65 titem]>".. se
3530: 74 20 6e 63 73 20 24 6d 79 69 74 65 6d 6d 61 70 t ncs $myitemmap
3540: 28 24 6e 65 78 74 69 74 65 6d 29 0a 09 20 20 20 ($nextitem)..
3550: 20 23 20 50 72 69 6e 74 0a 09 20 20 20 20 6c 6f # Print.. lo
3560: 67 20 77 72 69 74 65 20 30 20 63 73 65 74 73 20 g write 0 csets
3570: 7b 2a 20 24 69 20 2d 2d 3e 20 24 6e 20 2d 2d 3e {* $i --> $n -->
3580: 20 63 73 20 5b 24 6e 63 73 20 73 74 72 5d 7d 0a cs [$ncs str]}.
3590: 09 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 30 20 .}..log write 0
35a0: 63 73 65 74 73 20 24 66 74 72 0a 0a 09 69 66 20 csets $ftr...if
35b0: 7b 21 24 6b 69 6c 6c 7d 20 72 65 74 75 72 6e 0a {!$kill} return.
35c0: 09 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 .trouble interna
35d0: 6c 20 22 5b 24 73 65 6c 66 20 73 74 72 5d 20 64 l "[$self str] d
35e0: 65 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66 epends on itself
35f0: 22 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a "..return. }.
3600: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 75 73 68 . method push
3610: 74 6f 20 7b 72 65 70 6f 73 69 74 6f 72 79 20 64 to {repository d
3620: 61 74 65 20 72 73 74 61 74 65 7d 20 7b 0a 09 23 ate rstate} {..#
3630: 20 47 65 6e 65 72 61 74 65 20 61 6e 64 20 69 6d Generate and im
3640: 70 6f 72 74 20 74 68 65 20 6d 61 6e 69 66 65 73 port the manifes
3650: 74 20 66 6f 72 20 74 68 69 73 20 63 68 61 6e 67 t for this chang
3660: 65 73 65 74 2e 0a 09 23 0a 09 23 20 44 61 74 61 eset...#..# Data
3670: 20 6e 65 65 64 65 64 3a 0a 09 23 20 2d 20 43 6f needed:..# - Co
3680: 6d 6d 69 74 20 6d 65 73 73 61 67 65 20 20 20 20 mmit message
3690: 20 20 20 20 20 20 20 20 20 20 20 28 2d 2d 20 6d (-- m
36a0: 79 73 72 63 69 64 20 2d 3e 20 72 65 70 6f 73 69 ysrcid -> reposi
36b0: 74 6f 72 79 20 6d 65 74 61 29 0a 09 23 20 2d 20 tory meta)..# -
36c0: 55 73 65 72 20 64 6f 69 6e 67 20 74 68 65 20 63 User doing the c
36d0: 6f 6d 6d 69 74 20 20 20 20 20 20 20 20 28 73 2e ommit (s.
36e0: 61 2e 29 0a 09 23 0a 09 23 20 2d 20 54 69 6d 65 a.)..#..# - Time
36f0: 73 74 61 6d 70 20 6f 66 20 77 68 65 6e 20 63 6f stamp of when co
3700: 6d 6d 69 74 74 65 64 20 20 28 63 6f 6d 6d 61 6e mmitted (comman
3710: 64 20 61 72 67 75 6d 65 6e 74 29 0a 09 23 0a 09 d argument)..#..
3720: 23 20 2d 20 54 68 65 20 70 61 72 65 6e 74 20 63 # - The parent c
3730: 68 61 6e 67 65 73 65 74 2c 20 69 66 20 61 6e 79 hangeset, if any
3740: 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f . If there is no
3750: 20 70 61 72 65 6e 74 20 66 6f 73 73 69 6c 0a 09 parent fossil..
3760: 23 20 20 20 77 69 6c 6c 20 75 73 65 20 74 68 65 # will use the
3770: 20 65 6d 70 74 79 20 62 61 73 65 20 72 65 76 69 empty base revi
3780: 73 69 6f 6e 20 61 73 20 70 61 72 65 6e 74 2e 0a sion as parent..
3790: 09 23 0a 09 23 20 2d 20 4c 69 73 74 20 6f 66 20 .#..# - List of
37a0: 74 68 65 20 66 69 6c 65 20 72 65 76 69 73 69 6f the file revisio
37b0: 6e 73 20 69 6e 20 74 68 65 20 63 68 61 6e 67 65 ns in the change
37c0: 73 65 74 2e 0a 0a 09 73 74 72 75 63 74 3a 3a 6c set....struct::l
37d0: 69 73 74 20 61 73 73 69 67 6e 20 5b 24 6d 79 70 ist assign [$myp
37e0: 72 6f 6a 65 63 74 20 67 65 74 6d 65 74 61 20 24 roject getmeta $
37f0: 6d 79 73 72 63 69 64 5d 20 5f 5f 20 5f 5f 20 75 mysrcid] __ __ u
3800: 73 65 72 20 6d 65 73 73 61 67 65 0a 0a 09 23 20 ser message...#
3810: 57 65 20 64 65 72 69 76 65 20 74 68 65 20 6c 6f We derive the lo
3820: 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 64 69 d information di
3830: 72 65 63 74 6c 79 20 66 72 6f 6d 20 74 68 65 20 rectly from the
3840: 72 65 76 69 73 69 6f 6e 73 20 6f 66 0a 09 23 20 revisions of..#
3850: 74 68 65 20 63 68 61 6e 67 65 73 65 74 2c 20 61 the changeset, a
3860: 73 20 74 68 65 20 62 72 61 6e 63 68 20 70 61 72 s the branch par
3870: 74 20 6f 66 20 74 68 65 20 6d 65 74 61 20 64 61 t of the meta da
3880: 74 61 20 28 73 2e 61 2e 29 20 69 73 0a 09 23 20 ta (s.a.) is..#
3890: 6f 75 74 64 61 74 65 64 20 73 69 6e 63 65 20 70 outdated since p
38a0: 61 73 73 20 46 69 6c 74 65 72 53 79 6d 62 6f 6c ass FilterSymbol
38b0: 73 2e 0a 0a 09 73 65 74 20 6c 6f 64 6e 61 6d 65 s....set lodname
38c0: 20 5b 24 73 65 6c 66 20 6c 6f 64 5d 0a 0a 09 6c [$self lod]...l
38d0: 6f 67 20 77 72 69 74 65 20 32 20 63 73 65 74 73 og write 2 csets
38e0: 20 7b 49 6d 70 6f 72 74 69 6e 67 20 72 65 76 69 {Importing revi
38f0: 73 69 6f 6e 20 5b 24 73 65 6c 66 20 73 74 72 5d sion [$self str]
3900: 20 6f 6e 20 24 6c 6f 64 6e 61 6d 65 7d 0a 0a 09 on $lodname}...
3910: 23 20 50 65 72 66 6f 72 6d 20 74 68 65 20 69 6d # Perform the im
3920: 70 6f 72 74 2e 20 41 73 20 70 61 72 74 20 6f 66 port. As part of
3930: 20 74 68 61 74 20 77 65 20 64 65 74 65 72 6d 69 that we determi
3940: 6e 65 20 74 68 65 20 70 61 72 65 6e 74 0a 09 23 ne the parent..#
3950: 20 77 65 20 6e 65 65 64 2c 20 61 6e 64 20 63 6f we need, and co
3960: 6e 76 65 72 74 20 74 68 65 20 6c 69 73 74 20 6f nvert the list o
3970: 66 20 69 74 65 6d 73 20 69 6e 20 74 68 65 20 63 f items in the c
3980: 68 61 6e 67 65 73 65 74 20 69 6e 74 6f 0a 09 23 hangeset into..#
3990: 20 75 75 69 64 73 20 61 6e 64 20 70 72 69 6e 74 uuids and print
39a0: 61 62 6c 65 20 64 61 74 61 2e 0a 0a 09 73 74 72 able data....str
39b0: 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e uct::list assign
39c0: 20 5b 47 65 74 69 73 64 65 66 61 75 6c 74 20 24 [Getisdefault $
39d0: 6d 79 69 74 65 6d 73 5d 20 69 73 64 65 66 61 75 myitems] isdefau
39e0: 6c 74 20 6c 61 73 74 64 65 66 61 75 6c 74 6f 6e lt lastdefaulton
39f0: 74 72 75 6e 6b 0a 0a 09 6c 6f 67 20 77 72 69 74 trunk...log writ
3a00: 65 20 38 20 63 73 65 74 73 20 7b 4c 4f 44 20 20 e 8 csets {LOD
3a10: 20 20 27 24 6c 6f 64 6e 61 6d 65 27 7d 0a 09 6c '$lodname'}..l
3a20: 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 og write 8 csets
3a30: 20 7b 20 64 65 66 3f 20 20 24 69 73 64 65 66 61 { def? $isdefa
3a40: 75 6c 74 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 ult}..log write
3a50: 38 20 63 73 65 74 73 20 7b 20 6c 61 73 74 3f 20 8 csets { last?
3a60: 24 6c 61 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 $lastdefaultontr
3a70: 75 6e 6b 7d 0a 0a 09 73 65 74 20 6c 77 73 20 20 unk}...set lws
3a80: 5b 47 65 74 77 6f 72 6b 73 70 61 63 65 20 20 20 [Getworkspace
3a90: 20 24 72 73 74 61 74 65 20 24 6c 6f 64 6e 61 6d $rstate $lodnam
3aa0: 65 20 24 6d 79 70 72 6f 6a 65 63 74 20 24 69 73 e $myproject $is
3ab0: 64 65 66 61 75 6c 74 5d 0a 09 24 6c 77 73 20 61 default]..$lws a
3ac0: 64 64 20 5b 47 65 74 72 65 76 69 73 69 6f 6e 69 dd [Getrevisioni
3ad0: 6e 66 6f 20 24 6d 79 69 74 65 6d 73 5d 0a 0a 09 nfo $myitems]...
3ae0: 73 65 74 20 75 75 69 64 20 5b 24 72 65 70 6f 73 set uuid [$repos
3af0: 69 74 6f 72 79 20 69 6d 70 6f 72 74 72 65 76 69 itory importrevi
3b00: 73 69 6f 6e 20 5b 24 73 65 6c 66 20 73 74 72 5d sion [$self str]
3b10: 20 5c 0a 09 09 20 20 20 20 20 20 24 75 73 65 72 \... $user
3b20: 20 24 6d 65 73 73 61 67 65 20 24 64 61 74 65 20 $message $date
3b30: 5c 0a 09 09 20 20 20 20 20 20 5b 24 6c 77 73 20 \... [$lws
3b40: 67 65 74 69 64 5d 20 5b 24 6c 77 73 20 67 65 74 getid] [$lws get
3b50: 5d 5d 0a 0a 09 23 20 52 65 6d 65 6d 62 65 72 20 ]]...# Remember
3b60: 74 68 65 20 69 6d 70 6f 72 74 65 64 20 63 68 61 the imported cha
3b70: 6e 67 65 73 65 74 20 69 6e 20 74 68 65 20 73 74 ngeset in the st
3b80: 61 74 65 2c 20 75 6e 64 65 72 20 6f 75 72 0a 09 ate, under our..
3b90: 23 20 4c 4f 44 2e 20 41 6e 64 20 69 66 20 69 74 # LOD. And if it
3ba0: 20 69 73 20 74 68 65 20 6c 61 73 74 20 74 72 75 is the last tru
3bb0: 6e 6b 20 63 68 61 6e 67 65 73 65 74 20 6f 6e 20 nk changeset on
3bc0: 74 68 65 20 76 65 6e 64 6f 72 0a 09 23 20 62 72 the vendor..# br
3bd0: 61 6e 63 68 20 74 68 65 6e 20 74 68 65 20 72 65 anch then the re
3be0: 76 69 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 74 vision is also t
3bf0: 68 65 20 61 63 74 75 61 6c 20 72 6f 6f 74 20 6f he actual root o
3c00: 66 20 74 68 65 0a 09 23 20 3a 74 72 75 6e 6b 3a f the..# :trunk:
3c10: 2c 20 73 6f 20 77 65 20 72 65 6d 65 6d 62 65 72 , so we remember
3c20: 20 69 74 20 61 73 20 73 75 63 68 20 69 6e 20 74 it as such in t
3c30: 68 65 20 73 74 61 74 65 2e 20 48 6f 77 65 76 65 he state. Howeve
3c40: 72 20 69 66 0a 09 23 20 74 68 65 20 74 72 75 6e r if..# the trun
3c50: 6b 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 k already exists
3c60: 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 then the change
3c70: 73 65 74 20 63 61 6e 6e 6f 74 20 62 65 20 6f 6e set cannot be on
3c80: 20 69 74 0a 09 23 20 61 6e 79 20 6d 6f 72 65 2e it..# any more.
3c90: 20 54 68 69 73 20 69 6e 64 69 63 61 74 65 73 20 This indicates
3ca0: 77 65 69 72 64 6e 65 73 73 20 69 6e 20 74 68 65 weirdness in the
3cb0: 20 73 65 74 75 70 20 6f 66 20 74 68 65 0a 09 23 setup of the..#
3cc0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20 vendor branch,
3cd0: 62 75 74 20 6f 6e 65 20 77 65 20 63 61 6e 20 77 but one we can w
3ce0: 6f 72 6b 20 61 72 6f 75 6e 64 2e 0a 0a 09 24 6c ork around....$l
3cf0: 77 73 20 64 65 66 69 64 20 24 75 75 69 64 0a 09 ws defid $uuid..
3d00: 69 66 20 7b 24 6c 61 73 74 64 65 66 61 75 6c 74 if {$lastdefault
3d10: 6f 6e 74 72 75 6e 6b 7d 20 7b 0a 09 20 20 20 20 ontrunk} {..
3d20: 69 66 20 7b 5b 24 72 73 74 61 74 65 20 68 61 73 if {[$rstate has
3d30: 20 3a 74 72 75 6e 6b 3a 5d 7d 20 7b 0a 09 09 6c :trunk:]} {...l
3d40: 6f 67 20 77 72 69 74 65 20 32 20 63 73 65 74 73 og write 2 csets
3d50: 20 7b 4d 75 6c 74 69 70 6c 65 20 63 68 61 6e 67 {Multiple chang
3d60: 65 73 65 74 73 20 64 65 63 6c 61 72 65 64 20 74 esets declared t
3d70: 6f 20 62 65 20 74 68 65 20 6c 61 73 74 20 74 72 o be the last tr
3d80: 75 6e 6b 20 63 68 61 6e 67 65 73 65 74 20 6f 6e unk changeset on
3d90: 20 74 68 65 20 76 65 6e 64 6f 72 2d 62 72 61 6e the vendor-bran
3da0: 63 68 7d 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 ch}.. } else
3db0: 7b 0a 09 09 24 72 73 74 61 74 65 20 6e 65 77 20 {...$rstate new
3dc0: 3a 74 72 75 6e 6b 3a 20 5b 24 6c 77 73 20 6e 61 :trunk: [$lws na
3dd0: 6d 65 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 me].. }..}...
3de0: 23 20 52 65 6d 65 6d 62 65 72 20 74 68 65 20 77 # Remember the w
3df0: 68 6f 6c 65 20 63 68 61 6e 67 65 73 65 74 20 2f hole changeset /
3e00: 20 75 75 69 64 20 6d 61 70 70 69 6e 67 2c 20 66 uuid mapping, f
3e10: 6f 72 20 74 68 65 20 74 61 67 73 2e 0a 0a 09 73 or the tags....s
3e20: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 tate run {..
3e30: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 73 75 75 INSERT INTO csuu
3e40: 69 64 20 28 63 69 64 2c 20 20 20 75 75 69 64 29 id (cid, uuid)
3e50: 0a 09 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 .. VALUES
3e60: 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64 2c ($myid,
3e70: 20 24 75 75 69 64 29 0a 09 7d 0a 09 72 65 74 75 $uuid)..}..retu
3e80: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 rn. }.. pr
3e90: 6f 63 20 47 65 74 72 65 76 69 73 69 6f 6e 69 6e oc Getrevisionin
3ea0: 66 6f 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b fo {revisions} {
3eb0: 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b ..set theset ('[
3ec0: 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 join $revisions
3ed0: 7b 27 2c 27 7d 5d 27 29 0a 09 73 65 74 20 72 65 {','}]')..set re
3ee0: 76 69 73 69 6f 6e 73 20 7b 7d 0a 09 66 6f 72 65 visions {}..fore
3ef0: 61 63 68 20 7b 66 72 69 64 20 70 61 74 68 20 66 ach {frid path f
3f00: 6e 61 6d 65 20 72 65 76 6e 72 20 72 6f 70 7d 20 name revnr rop}
3f10: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
3f20: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
3f30: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
3f40: 20 20 20 20 53 45 4c 45 43 54 20 55 2e 75 75 69 SELECT U.uui
3f50: 64 2c 20 46 2e 76 69 73 69 62 6c 65 2c 20 46 2e d, F.visible, F.
3f60: 6e 61 6d 65 2c 20 52 2e 72 65 76 2c 20 52 2e 6f name, R.rev, R.o
3f70: 70 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 p.. FROM re
3f80: 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 75 75 69 vision R, revuui
3f90: 64 20 55 2c 20 66 69 6c 65 20 46 0a 09 20 20 20 d U, file F..
3fa0: 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 49 4e WHERE R.rid IN
3fb0: 20 24 74 68 65 73 65 74 20 20 2d 2d 20 41 6c 6c $theset -- All
3fc0: 20 73 70 65 63 69 66 69 65 64 20 72 65 76 69 73 specified revis
3fd0: 69 6f 6e 73 0a 09 20 20 20 20 41 4e 44 20 20 20 ions.. AND
3fe0: 20 55 2e 72 69 64 20 3d 20 52 2e 72 69 64 20 20 U.rid = R.rid
3ff0: 20 20 20 2d 2d 20 67 65 74 20 66 6f 73 73 69 6c -- get fossil
4000: 20 75 75 69 64 20 6f 66 20 72 65 76 69 73 69 6f uuid of revisio
4010: 6e 0a 09 20 20 20 20 41 4e 44 20 20 20 20 46 2e n.. AND F.
4020: 66 69 64 20 3d 20 52 2e 66 69 64 20 20 20 20 20 fid = R.fid
4030: 2d 2d 20 67 65 74 20 66 69 6c 65 20 6f 66 20 72 -- get file of r
4040: 65 76 69 73 69 6f 6e 0a 09 7d 5d 5d 20 7b 0a 09 evision..}]] {..
4050: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 76 69 lappend revi
4060: 73 69 6f 6e 73 20 24 66 72 69 64 20 24 70 61 74 sions $frid $pat
4070: 68 20 24 66 6e 61 6d 65 2f 24 72 65 76 6e 72 20 h $fname/$revnr
4080: 24 72 6f 70 0a 09 7d 0a 09 72 65 74 75 72 6e 20 $rop..}..return
4090: 24 72 65 76 69 73 69 6f 6e 73 0a 20 20 20 20 7d $revisions. }
40a0: 0a 0a 20 20 20 20 70 72 6f 63 20 47 65 74 77 6f .. proc Getwo
40b0: 72 6b 73 70 61 63 65 20 7b 72 73 74 61 74 65 20 rkspace {rstate
40c0: 6c 6f 64 6e 61 6d 65 20 70 72 6f 6a 65 63 74 20 lodname project
40d0: 69 73 64 65 66 61 75 6c 74 7d 20 7b 0a 0a 09 23 isdefault} {...#
40e0: 20 54 68 65 20 73 74 61 74 65 20 6f 62 6a 65 63 The state objec
40f0: 74 20 68 6f 6c 64 73 20 74 68 65 20 77 6f 72 6b t holds the work
4100: 73 70 61 63 65 20 73 74 61 74 65 20 6f 66 20 65 space state of e
4110: 61 63 68 20 6b 6e 6f 77 6e 0a 09 23 20 6c 69 6e ach known..# lin
4120: 65 2d 6f 66 2d 64 65 76 65 6c 6f 70 6d 65 6e 74 e-of-development
4130: 20 28 4c 4f 44 29 2c 20 75 70 20 74 6f 20 74 68 (LOD), up to th
4140: 65 20 6c 61 73 74 20 63 6f 6d 6d 69 74 74 65 64 e last committed
4150: 0a 09 23 20 63 68 61 6e 67 65 73 65 74 20 62 65 ..# changeset be
4160: 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 68 61 74 20 longing to that
4170: 4c 4f 44 2e 0a 0a 09 23 20 28 2a 29 20 53 74 61 LOD....# (*) Sta
4180: 6e 64 61 72 64 20 68 61 6e 64 6c 69 6e 67 20 69 ndard handling i
4190: 66 20 69 6e 2d 4c 4f 44 20 63 68 61 6e 67 65 73 f in-LOD changes
41a0: 65 74 73 2e 20 49 66 20 74 68 65 20 4c 4f 44 20 ets. If the LOD
41b0: 6f 66 0a 09 23 20 20 20 20 20 74 68 65 20 63 75 of..# the cu
41c0: 72 72 65 6e 74 20 63 68 61 6e 67 65 73 65 74 20 rrent changeset
41d0: 65 78 69 73 74 73 20 69 6e 20 74 68 65 20 73 74 exists in the st
41e0: 61 74 65 20 28 3d 20 68 61 73 20 62 65 65 6e 0a ate (= has been.
41f0: 09 23 20 20 20 20 20 63 6f 6d 6d 69 74 74 65 64 .# committed
4200: 20 74 6f 29 20 74 68 65 6e 20 74 68 69 73 20 69 to) then this i
4210: 74 20 68 61 73 20 74 68 65 20 77 6f 72 6b 73 70 t has the worksp
4220: 61 63 65 20 77 65 20 61 72 65 0a 09 23 20 20 20 ace we are..#
4230: 20 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 2e 0a 0a looking for...
4240: 09 69 66 20 7b 5b 24 72 73 74 61 74 65 20 68 61 .if {[$rstate ha
4250: 73 20 24 6c 6f 64 6e 61 6d 65 5d 7d 20 7b 0a 09 s $lodname]} {..
4260: 20 20 20 20 72 65 74 75 72 6e 20 5b 24 72 73 74 return [$rst
4270: 61 74 65 20 67 65 74 20 24 6c 6f 64 6e 61 6d 65 ate get $lodname
4280: 5d 0a 09 7d 0a 0a 09 23 20 49 66 20 74 68 65 20 ]..}...# If the
4290: 4c 4f 44 20 69 73 20 68 6f 77 65 76 65 72 20 6e LOD is however n
42a0: 6f 74 20 79 65 74 20 6b 6e 6f 77 6e 2c 20 74 68 ot yet known, th
42b0: 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 0a 09 en the current..
42c0: 23 20 63 68 61 6e 67 65 73 65 74 20 63 61 6e 20 # changeset can
42d0: 62 65 20 65 69 74 68 65 72 20 6f 66 0a 09 23 20 be either of..#
42e0: 28 61 29 20 72 6f 6f 74 20 6f 66 20 61 20 76 65 (a) root of a ve
42f0: 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 20 ndor branch,..#
4300: 28 62 29 20 72 6f 6f 74 20 6f 66 20 74 68 65 20 (b) root of the
4310: 74 72 75 6e 6b 20 4c 4f 44 2c 20 6f 72 0a 09 23 trunk LOD, or..#
4320: 20 28 63 29 20 74 68 65 20 66 69 72 73 74 20 63 (c) the first c
4330: 68 61 6e 67 65 73 65 74 20 69 6e 20 61 20 6e 65 hangeset in a ne
4340: 77 20 4c 4f 44 20 77 68 69 63 68 20 77 61 73 20 w LOD which was
4350: 73 70 61 77 6e 65 64 20 66 72 6f 6d 0a 09 23 20 spawned from..#
4360: 20 20 20 20 61 6e 20 65 78 69 73 74 69 6e 67 20 an existing
4370: 4c 4f 44 2e 0a 0a 09 23 20 46 6f 72 20 62 6f 74 LOD....# For bot
4380: 68 20 28 61 29 20 61 6e 64 20 28 62 29 20 77 65 h (a) and (b) we
4390: 20 68 61 76 65 20 74 6f 20 63 72 65 61 74 65 20 have to create
43a0: 61 20 6e 65 77 20 77 6f 72 6b 73 70 61 63 65 20 a new workspace
43b0: 66 6f 72 0a 09 23 20 74 68 65 20 6c 6f 64 2c 20 for..# the lod,
43c0: 61 6e 64 20 69 74 20 64 6f 65 73 6e 27 74 20 69 and it doesn't i
43d0: 6e 68 65 72 69 74 20 66 72 6f 6d 20 61 6e 79 74 nherit from anyt
43e0: 68 69 6e 67 2e 0a 0a 09 23 20 4f 6e 65 20 65 78 hing....# One ex
43f0: 63 65 70 74 69 6f 6e 20 66 6f 72 20 28 61 29 2e ception for (a).
4400: 20 49 66 20 77 65 20 61 6c 72 65 61 64 79 20 68 If we already h
4410: 61 76 65 20 61 20 3a 76 65 6e 64 6f 72 3a 20 62 ave a :vendor: b
4420: 72 61 6e 63 68 0a 09 23 20 74 68 65 6e 20 6d 75 ranch..# then mu
4430: 6c 74 69 70 6c 65 20 73 79 6d 62 6f 6c 73 20 77 ltiple symbols w
4440: 65 72 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 ere used for the
4450: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 62 vendor branch b
4460: 79 0a 09 23 20 64 69 66 66 65 72 65 6e 74 20 66 y..# different f
4470: 69 6c 65 73 2e 20 49 6e 20 74 68 61 74 20 63 61 iles. In that ca
4480: 73 65 20 74 68 65 20 27 6e 65 77 27 20 62 72 61 se the 'new' bra
4490: 6e 63 68 20 69 73 20 6d 61 64 65 20 61 6e 0a 09 nch is made an..
44a0: 23 20 61 6c 69 61 73 20 6f 66 20 74 68 65 20 3a # alias of the :
44b0: 76 65 6e 64 6f 72 3a 2c 20 65 66 66 65 63 74 69 vendor:, effecti
44c0: 76 65 6c 79 20 6d 65 72 67 69 6e 67 20 74 68 65 vely merging the
44d0: 20 73 79 6d 62 6f 6c 73 0a 09 23 20 74 6f 67 65 symbols..# toge
44e0: 74 68 65 72 2e 0a 0a 09 23 20 4e 6f 74 65 20 74 ther....# Note t
44f0: 68 61 74 20 63 61 73 65 20 28 62 29 20 6d 61 79 hat case (b) may
4500: 20 6e 65 76 65 72 20 6f 63 63 75 72 2e 20 53 65 never occur. Se
4510: 65 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 09 e the variable..
4520: 23 20 27 6c 61 73 74 64 65 66 61 75 6c 74 6f 6e # 'lastdefaulton
4530: 74 72 75 6e 6b 27 20 69 6e 20 74 68 65 20 63 61 trunk' in the ca
4540: 6c 6c 65 72 20 28 6d 65 74 68 6f 64 20 70 75 73 ller (method pus
4550: 68 74 6f 29 2e 20 54 68 69 73 0a 09 23 20 66 6c hto). This..# fl
4560: 61 67 20 63 61 6e 20 74 68 65 20 67 65 6e 65 72 ag can the gener
4570: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 77 6f 72 ation of the wor
4580: 6b 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 3a kspace for the :
4590: 74 72 75 6e 6b 3a 20 4c 4f 44 0a 09 23 20 61 73 trunk: LOD..# as
45a0: 20 77 65 6c 6c 2c 20 6d 61 6b 69 6e 67 20 69 74 well, making it
45b0: 20 69 6e 68 65 72 69 74 20 74 68 65 20 73 74 61 inherit the sta
45c0: 74 65 20 6f 66 20 74 68 65 20 6c 61 73 74 0a 09 te of the last..
45d0: 23 20 74 72 75 6e 6b 2d 63 68 61 6e 67 65 73 65 # trunk-changese
45e0: 74 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 2d t on the vendor-
45f0: 62 72 61 6e 63 68 2e 0a 0a 09 69 66 20 7b 24 69 branch....if {$i
4600: 73 64 65 66 61 75 6c 74 7d 20 7b 0a 09 20 20 20 sdefault} {..
4610: 20 69 66 20 7b 21 5b 24 72 73 74 61 74 65 20 68 if {![$rstate h
4620: 61 73 20 22 3a 76 65 6e 64 6f 72 3a 22 5d 7d 20 as ":vendor:"]}
4630: 7b 0a 09 09 23 20 43 72 65 61 74 65 20 74 68 65 {...# Create the
4640: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 69 vendor branch i
4650: 66 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 61 6c f not present al
4660: 72 65 61 64 79 2e 0a 09 09 24 72 73 74 61 74 65 ready....$rstate
4670: 20 6e 65 77 20 3a 76 65 6e 64 6f 72 3a 0a 09 20 new :vendor:..
4680: 20 20 20 7d 0a 09 20 20 20 20 23 20 4d 65 72 67 }.. # Merg
4690: 65 20 74 68 65 20 6e 65 77 20 73 79 6d 62 6f 6c e the new symbol
46a0: 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 62 to the vendor b
46b0: 72 61 6e 63 68 0a 09 20 20 20 20 24 72 73 74 61 ranch.. $rsta
46c0: 74 65 20 64 75 70 20 24 6c 6f 64 6e 61 6d 65 20 te dup $lodname
46d0: 3c 2d 2d 20 3a 76 65 6e 64 6f 72 3a 0a 09 20 20 <-- :vendor:..
46e0: 20 20 72 65 74 75 72 6e 20 5b 24 72 73 74 61 74 return [$rstat
46f0: 65 20 67 65 74 20 24 6c 6f 64 6e 61 6d 65 5d 0a e get $lodname].
4700: 09 7d 0a 0a 09 69 66 20 7b 24 6c 6f 64 6e 61 6d .}...if {$lodnam
4710: 65 20 65 71 20 22 3a 74 72 75 6e 6b 3a 22 7d 20 e eq ":trunk:"}
4720: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 5b 24 {.. return [$
4730: 72 73 74 61 74 65 20 6e 65 77 20 24 6c 6f 64 6e rstate new $lodn
4740: 61 6d 65 5d 0a 09 7d 0a 0a 09 23 20 43 61 73 65 ame]..}...# Case
4750: 20 28 63 29 2e 20 57 65 20 66 69 6e 64 20 74 68 (c). We find th
4760: 65 20 70 61 72 65 6e 74 20 4c 4f 44 20 6f 66 20 e parent LOD of
4770: 6f 75 72 20 4c 4f 44 20 61 6e 64 20 6c 65 74 20 our LOD and let
4780: 74 68 65 20 6e 65 77 0a 09 23 20 77 6f 72 6b 73 the new..# works
4790: 70 61 63 65 20 69 6e 68 65 72 69 74 20 66 72 6f pace inherit fro
47a0: 6d 20 74 68 65 20 70 61 72 65 6e 74 27 73 20 77 m the parent's w
47b0: 6f 72 6b 73 70 61 63 65 2e 0a 0a 09 73 65 74 20 orkspace....set
47c0: 70 6c 6f 64 6e 61 6d 65 20 5b 5b 5b 24 70 72 6f plodname [[[$pro
47d0: 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 ject getsymbol $
47e0: 6c 6f 64 6e 61 6d 65 5d 20 70 61 72 65 6e 74 5d lodname] parent]
47f0: 20 6e 61 6d 65 5d 0a 0a 09 6c 6f 67 20 77 72 69 name]...log wri
4800: 74 65 20 38 20 63 73 65 74 73 20 7b 70 4c 4f 44 te 8 csets {pLOD
4810: 20 20 20 27 24 70 6c 6f 64 6e 61 6d 65 27 7d 0a '$plodname'}.
4820: 0a 09 69 66 20 7b 5b 24 72 73 74 61 74 65 20 68 ..if {[$rstate h
4830: 61 73 20 24 70 6c 6f 64 6e 61 6d 65 5d 7d 20 7b as $plodname]} {
4840: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 5b 24 72 .. return [$r
4850: 73 74 61 74 65 20 6e 65 77 20 24 6c 6f 64 6e 61 state new $lodna
4860: 6d 65 20 24 70 6c 6f 64 6e 61 6d 65 5d 0a 09 7d me $plodname]..}
4870: 0a 0a 09 66 6f 72 65 61 63 68 20 6b 20 5b 6c 73 ...foreach k [ls
4880: 6f 72 74 20 5b 24 72 73 74 61 74 65 20 6e 61 6d ort [$rstate nam
4890: 65 73 5d 5d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 es]] {.. log
48a0: 77 72 69 74 65 20 38 20 63 73 65 74 73 20 7b 20 write 8 csets {
48b0: 20 20 20 24 6b 20 3d 20 5b 5b 24 72 73 74 61 74 $k = [[$rstat
48c0: 65 20 67 65 74 20 24 6b 5d 20 67 65 74 69 64 5d e get $k] getid]
48d0: 7d 0a 09 7d 0a 0a 09 74 72 6f 75 62 6c 65 20 69 }..}...trouble i
48e0: 6e 74 65 72 6e 61 6c 20 7b 55 6e 61 62 6c 65 20 nternal {Unable
48f0: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 63 68 61 to determine cha
4900: 6e 67 65 73 65 74 20 70 61 72 65 6e 74 7d 0a 09 ngeset parent}..
4910: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
4920: 20 20 70 72 6f 63 20 47 65 74 69 73 64 65 66 61 proc Getisdefa
4930: 75 6c 74 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 ult {revisions}
4940: 7b 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 {..set theset ('
4950: 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 [join $revisions
4960: 20 7b 27 2c 27 7d 5d 27 29 0a 0a 09 73 74 72 75 {','}]')...stru
4970: 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 ct::list assign
4980: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
4990: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
49a0: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
49b0: 20 20 20 20 53 45 4c 45 43 54 20 52 2e 69 73 64 SELECT R.isd
49c0: 65 66 61 75 6c 74 2c 20 52 2e 64 62 63 68 69 6c efault, R.dbchil
49d0: 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 d.. FROM re
49e0: 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 vision R.. WH
49f0: 45 52 45 20 20 52 2e 72 69 64 20 49 4e 20 24 74 ERE R.rid IN $t
4a00: 68 65 73 65 74 20 20 2d 2d 20 41 6c 6c 20 73 70 heset -- All sp
4a10: 65 63 69 66 69 65 64 20 72 65 76 69 73 69 6f 6e ecified revision
4a20: 73 0a 09 20 20 20 20 4c 49 4d 49 54 20 31 0a 09 s.. LIMIT 1..
4a30: 7d 5d 5d 20 64 65 66 20 6c 61 73 74 0a 0a 09 23 }]] def last...#
4a40: 20 54 4f 44 4f 2f 43 48 45 43 4b 3a 20 6c 6f 6f TODO/CHECK: loo
4a50: 6b 20 66 6f 72 20 63 68 61 6e 67 65 73 65 74 73 k for changesets
4a60: 20 77 68 65 72 65 20 69 73 64 65 66 61 75 6c 74 where isdefault
4a70: 2f 64 62 63 68 69 6c 64 20 69 73 0a 09 23 20 61 /dbchild is..# a
4a80: 6d 62 69 67 6f 75 73 2e 0a 0a 09 72 65 74 75 72 mbigous....retur
4a90: 6e 20 5b 6c 69 73 74 20 24 64 65 66 20 5b 65 78 n [list $def [ex
4aa0: 70 72 20 7b 24 6c 61 73 74 20 6e 65 20 22 22 7d pr {$last ne ""}
4ab0: 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 ]]. }.. ty
4ac0: 70 65 6d 65 74 68 6f 64 20 73 70 6c 69 74 20 7b pemethod split {
4ad0: 63 73 65 74 20 61 72 67 73 7d 20 7b 0a 09 23 20 cset args} {..#
4ae0: 41 73 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 As part of the c
4af0: 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6e reation of the n
4b00: 65 77 20 63 68 61 6e 67 65 73 65 74 73 20 73 70 ew changesets sp
4b10: 65 63 69 66 69 65 64 20 69 6e 0a 09 23 20 41 52 ecified in..# AR
4b20: 47 53 20 61 73 20 73 65 74 73 20 6f 66 20 69 74 GS as sets of it
4b30: 65 6d 73 2c 20 61 6c 6c 20 73 75 62 73 65 74 73 ems, all subsets
4b40: 20 6f 66 20 43 53 45 54 27 73 20 69 74 65 6d 20 of CSET's item
4b50: 73 65 74 2c 20 43 53 45 54 0a 09 23 20 77 69 6c set, CSET..# wil
4b60: 6c 20 62 65 20 64 72 6f 70 70 65 64 20 66 72 6f l be dropped fro
4b70: 6d 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 2c m all databases,
4b80: 20 69 6e 20 61 6e 64 20 6f 75 74 20 6f 66 20 6d in and out of m
4b90: 65 6d 6f 72 79 2c 0a 09 23 20 61 6e 64 20 74 68 emory,..# and th
4ba0: 65 6e 20 64 65 73 74 72 6f 79 65 64 2e 0a 09 23 en destroyed...#
4bb0: 0a 09 23 20 4e 6f 74 65 3a 20 54 68 65 20 69 74 ..# Note: The it
4bc0: 65 6d 20 6c 69 73 74 73 20 66 6f 75 6e 64 20 69 em lists found i
4bd0: 6e 20 61 72 67 73 20 61 72 65 20 74 61 67 67 65 n args are tagge
4be0: 64 20 69 74 65 6d 73 2e 20 54 68 65 79 0a 09 23 d items. They..#
4bf0: 20 68 61 76 65 20 74 6f 20 68 61 76 65 20 74 68 have to have th
4c00: 65 20 73 61 6d 65 20 74 79 70 65 20 61 73 20 74 e same type as t
4c10: 68 65 20 63 68 61 6e 67 65 73 65 74 2c 20 62 65 he changeset, be
4c20: 69 6e 67 20 73 75 62 73 65 74 73 0a 09 23 20 6f ing subsets..# o
4c30: 66 20 69 74 73 20 69 74 65 6d 73 2e 20 54 68 69 f its items. Thi
4c40: 73 20 69 73 20 63 68 65 63 6b 65 64 20 69 6e 20 s is checked in
4c50: 55 6e 74 61 67 31 2e 0a 0a 09 6c 6f 67 20 77 72 Untag1....log wr
4c60: 69 74 65 20 38 20 63 73 65 74 73 20 7b 4f 4c 44 ite 8 csets {OLD
4c70: 3a 20 5b 6c 73 6f 72 74 20 5b 24 63 73 65 74 20 : [lsort [$cset
4c80: 69 74 65 6d 73 5d 5d 7d 0a 09 56 61 6c 69 64 61 items]]}..Valida
4c90: 74 65 46 72 61 67 6d 65 6e 74 73 20 24 63 73 65 teFragments $cse
4ca0: 74 20 24 61 72 67 73 0a 0a 09 23 20 41 6c 6c 20 t $args...# All
4cb0: 63 68 65 63 6b 73 20 70 61 73 73 2c 20 61 63 74 checks pass, act
4cc0: 75 61 6c 6c 79 20 70 65 72 66 6f 72 6d 20 74 68 ually perform th
4cd0: 65 20 73 70 6c 69 74 2e 0a 0a 09 73 74 72 75 63 e split....struc
4ce0: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b t::list assign [
4cf0: 24 63 73 65 74 20 64 61 74 61 5d 20 70 72 6f 6a $cset data] proj
4d00: 65 63 74 20 63 73 74 79 70 65 20 63 73 73 72 63 ect cstype cssrc
4d10: 0a 0a 09 73 65 74 20 70 72 65 64 65 63 65 73 73 ...set predecess
4d20: 6f 72 73 20 5b 24 63 73 65 74 20 64 72 6f 70 5d ors [$cset drop]
4d30: 0a 09 24 63 73 65 74 20 64 65 73 74 72 6f 79 0a ..$cset destroy.
4d40: 0a 09 73 65 74 20 6e 65 77 63 73 65 74 73 20 7b ..set newcsets {
4d50: 7d 0a 09 66 6f 72 65 61 63 68 20 66 72 61 67 6d }..foreach fragm
4d60: 65 6e 74 69 74 65 6d 73 20 24 61 72 67 73 20 7b entitems $args {
4d70: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
4d80: 38 20 63 73 65 74 73 20 7b 4d 41 4b 45 3a 20 5b 8 csets {MAKE: [
4d90: 6c 73 6f 72 74 20 24 66 72 61 67 6d 65 6e 74 69 lsort $fragmenti
4da0: 74 65 6d 73 5d 7d 0a 0a 09 20 20 20 20 73 65 74 tems]}... set
4db0: 20 66 72 61 67 6d 65 6e 74 20 5b 24 74 79 70 65 fragment [$type
4dc0: 20 25 41 55 54 4f 25 20 24 70 72 6f 6a 65 63 74 %AUTO% $project
4dd0: 20 24 63 73 74 79 70 65 20 24 63 73 73 72 63 20 $cstype $cssrc
4de0: 5c 0a 09 09 09 20 20 20 20 20 20 5b 55 6e 74 61 \.... [Unta
4df0: 67 20 24 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 g $fragmentitems
4e00: 20 24 63 73 74 79 70 65 5d 5d 0a 09 20 20 20 20 $cstype]]..
4e10: 6c 61 70 70 65 6e 64 20 6e 65 77 63 73 65 74 73 lappend newcsets
4e20: 20 24 66 72 61 67 6d 65 6e 74 0a 0a 09 20 20 20 $fragment...
4e30: 20 24 66 72 61 67 6d 65 6e 74 20 70 65 72 73 69 $fragment persi
4e40: 73 74 0a 09 20 20 20 20 24 66 72 61 67 6d 65 6e st.. $fragmen
4e50: 74 20 64 65 74 65 72 6d 69 6e 65 73 75 63 63 65 t determinesucce
4e60: 73 73 6f 72 73 0a 09 7d 0a 0a 09 23 20 54 68 65 ssors..}...# The
4e70: 20 70 72 65 64 65 63 65 73 73 6f 72 73 20 68 61 predecessors ha
4e80: 76 65 20 74 6f 20 72 65 63 6f 6d 70 75 74 65 20 ve to recompute
4e90: 74 68 65 69 72 20 73 75 63 63 65 73 73 6f 72 73 their successors
4ea0: 2c 20 69 2e 65 2e 0a 09 23 20 72 65 6d 6f 76 65 , i.e...# remove
4eb0: 20 74 68 65 20 64 72 6f 70 70 65 64 20 63 68 61 the dropped cha
4ec0: 6e 67 65 73 65 74 20 61 6e 64 20 70 75 74 20 6f ngeset and put o
4ed0: 6e 65 20 6f 66 20 74 68 65 20 66 72 61 67 6d 65 ne of the fragme
4ee0: 6e 74 73 0a 09 23 20 69 6e 74 6f 20 69 74 73 20 nts..# into its
4ef0: 70 6c 61 63 65 2e 0a 09 66 6f 72 65 61 63 68 20 place...foreach
4f00: 70 20 24 70 72 65 64 65 63 65 73 73 6f 72 73 20 p $predecessors
4f10: 7b 0a 09 20 20 20 20 24 70 20 64 65 74 65 72 6d {.. $p determ
4f20: 69 6e 65 73 75 63 63 65 73 73 6f 72 73 0a 09 7d inesuccessors..}
4f30: 0a 0a 09 72 65 74 75 72 6e 20 24 6e 65 77 63 73 ...return $newcs
4f40: 65 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 ets. }.. t
4f50: 79 70 65 6d 65 74 68 6f 64 20 69 74 65 6d 73 74 ypemethod itemst
4f60: 72 20 7b 69 74 65 6d 7d 20 7b 0a 09 73 74 72 75 r {item} {..stru
4f70: 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 ct::list assign
4f80: 24 69 74 65 6d 20 69 74 79 70 65 20 69 69 64 0a $item itype iid.
4f90: 09 72 65 74 75 72 6e 20 5b 24 69 74 79 70 65 20 .return [$itype
4fa0: 73 74 72 20 24 69 69 64 5d 0a 20 20 20 20 7d 0a str $iid]. }.
4fb0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
4fc0: 73 74 72 6c 69 73 74 20 7b 63 68 61 6e 67 65 73 strlist {changes
4fd0: 65 74 73 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b ets} {..return [
4fe0: 6a 6f 69 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 join [struct::li
4ff0: 73 74 20 6d 61 70 20 24 63 68 61 6e 67 65 73 65 st map $changese
5000: 74 73 20 5b 6d 79 70 72 6f 63 20 49 44 5d 5d 5d ts [myproc ID]]]
5010: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 . }.. proc
5020: 20 49 44 20 7b 63 73 65 74 7d 20 7b 20 24 63 73 ID {cset} { $cs
5030: 65 74 20 73 74 72 20 7d 0a 0a 20 20 20 20 70 72 et str }.. pr
5040: 6f 63 20 55 6e 74 61 67 20 7b 74 61 67 67 65 64 oc Untag {tagged
5050: 69 74 65 6d 73 20 63 73 74 79 70 65 7d 20 7b 0a items cstype} {.
5060: 09 72 65 74 75 72 6e 20 5b 73 74 72 75 63 74 3a .return [struct:
5070: 3a 6c 69 73 74 20 6d 61 70 20 24 74 61 67 67 65 :list map $tagge
5080: 64 69 74 65 6d 73 20 5b 6d 79 70 72 6f 63 20 55 ditems [myproc U
5090: 6e 74 61 67 31 20 24 63 73 74 79 70 65 5d 5d 0a ntag1 $cstype]].
50a0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 }.. proc
50b0: 55 6e 74 61 67 31 20 7b 63 73 74 79 70 65 20 74 Untag1 {cstype t
50c0: 68 65 69 74 65 6d 7d 20 7b 0a 09 73 74 72 75 63 heitem} {..struc
50d0: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 t::list assign $
50e0: 74 68 65 69 74 65 6d 20 74 20 69 0a 09 69 6e 74 theitem t i..int
50f0: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 egrity assert {$
5100: 63 73 74 79 70 65 20 65 71 20 24 74 7d 20 7b 49 cstype eq $t} {I
5110: 74 65 6d 20 24 69 27 73 20 74 79 70 65 20 69 73 tem $i's type is
5120: 20 27 24 74 27 2c 20 65 78 70 65 63 74 65 64 20 '$t', expected
5130: 27 24 63 73 74 79 70 65 27 7d 0a 09 72 65 74 75 '$cstype'}..retu
5140: 72 6e 20 24 69 0a 20 20 20 20 7d 0a 0a 20 20 20 rn $i. }..
5150: 20 70 72 6f 63 20 54 61 67 49 74 65 6d 44 69 63 proc TagItemDic
5160: 74 20 7b 69 74 65 6d 64 69 63 74 20 63 73 74 79 t {itemdict csty
5170: 70 65 7d 20 7b 0a 09 73 65 74 20 72 65 73 20 7b pe} {..set res {
5180: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 69 20 76 7d }..foreach {i v}
5190: 20 24 69 74 65 6d 64 69 63 74 20 7b 20 6c 61 70 $itemdict { lap
51a0: 70 65 6e 64 20 72 65 73 20 5b 6c 69 73 74 20 24 pend res [list $
51b0: 63 73 74 79 70 65 20 24 69 5d 20 24 76 20 7d 0a cstype $i] $v }.
51c0: 09 72 65 74 75 72 6e 20 24 72 65 73 0a 20 20 20 .return $res.
51d0: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 56 61 6c }.. proc Val
51e0: 69 64 61 74 65 46 72 61 67 6d 65 6e 74 73 20 7b idateFragments {
51f0: 63 73 65 74 20 66 72 61 67 6d 65 6e 74 73 7d 20 cset fragments}
5200: 7b 0a 09 23 20 43 68 65 63 6b 20 74 68 65 20 76 {..# Check the v
5210: 61 72 69 6f 75 73 20 69 6e 74 65 67 72 69 74 79 arious integrity
5220: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 constraints for
5230: 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 0a 09 the fragments..
5240: 23 20 73 70 65 63 69 66 79 69 6e 67 20 68 6f 77 # specifying how
5250: 20 74 6f 20 73 70 6c 69 74 20 74 68 65 20 63 68 to split the ch
5260: 61 6e 67 65 73 65 74 3a 0a 09 23 0a 09 23 20 2a angeset:..#..# *
5270: 20 57 65 20 6d 75 73 74 20 68 61 76 65 20 74 77 We must have tw
5280: 6f 20 6f 72 20 6d 6f 72 65 20 66 72 61 67 6d 65 o or more fragme
5290: 6e 74 73 2c 20 61 73 20 73 70 6c 69 74 74 69 6e nts, as splittin
52a0: 67 20 61 0a 09 23 20 20 20 63 68 61 6e 67 65 73 g a..# changes
52b0: 65 74 20 69 6e 74 6f 20 6f 6e 65 20 6d 61 6b 65 et into one make
52c0: 73 20 6e 6f 20 73 65 6e 73 65 2e 0a 09 23 20 2a s no sense...# *
52d0: 20 4e 6f 20 66 72 61 67 6d 65 6e 74 20 6d 61 79 No fragment may
52e0: 20 62 65 20 65 6d 70 74 79 2e 0a 09 23 20 2a 20 be empty...# *
52f0: 41 6c 6c 20 66 72 61 67 6d 65 6e 74 73 20 68 61 All fragments ha
5300: 76 65 20 74 6f 20 62 65 20 74 72 75 65 20 73 75 ve to be true su
5310: 62 73 65 74 73 20 6f 66 20 74 68 65 20 69 74 65 bsets of the ite
5320: 6d 73 20 69 6e 20 74 68 65 0a 09 23 20 20 20 63 ms in the..# c
5330: 68 61 6e 67 65 73 65 74 20 74 6f 20 73 70 6c 69 hangeset to spli
5340: 74 2e 20 54 68 65 20 27 74 72 75 65 27 20 69 73 t. The 'true' is
5350: 20 69 6d 70 6c 69 65 64 20 62 65 63 61 75 73 65 implied because
5360: 20 6e 6f 6e 65 20 61 72 65 0a 09 23 20 20 20 61 none are..# a
5370: 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 65 6d 70 llowed to be emp
5380: 74 79 2c 20 73 6f 20 65 61 63 68 20 68 61 73 20 ty, so each has
5390: 74 6f 20 62 65 20 73 6d 61 6c 6c 65 72 20 74 68 to be smaller th
53a0: 61 6e 20 74 68 65 0a 09 23 20 20 20 74 6f 74 61 an the..# tota
53b0: 6c 2e 0a 09 23 20 2a 20 54 68 65 20 75 6e 69 6f l...# * The unio
53c0: 6e 20 6f 66 20 74 68 65 20 66 72 61 67 6d 65 6e n of the fragmen
53d0: 74 73 20 68 61 73 20 74 6f 20 62 65 20 74 68 65 ts has to be the
53e0: 20 69 74 65 6d 20 73 65 74 20 6f 66 20 74 68 65 item set of the
53f0: 0a 09 23 20 20 20 63 68 61 6e 67 65 73 65 74 2e ..# changeset.
5400: 0a 09 23 20 2a 20 54 68 65 20 66 72 61 67 6d 65 ..# * The fragme
5410: 6e 74 20 6d 75 73 74 20 6e 6f 74 20 6f 76 65 72 nt must not over
5420: 6c 61 70 2c 20 69 2e 65 2e 20 74 68 65 69 72 20 lap, i.e. their
5430: 70 61 69 72 77 69 73 65 0a 09 23 20 20 20 69 6e pairwise..# in
5440: 74 65 72 73 65 63 74 69 6f 6e 73 20 68 61 76 65 tersections have
5450: 20 74 6f 20 62 65 20 65 6d 70 74 79 2e 0a 0a 09 to be empty....
5460: 73 65 74 20 63 6f 76 65 72 20 7b 7d 0a 09 66 6f set cover {}..fo
5470: 72 65 61 63 68 20 66 72 61 67 6d 65 6e 74 69 74 reach fragmentit
5480: 65 6d 73 20 24 66 72 61 67 6d 65 6e 74 73 20 7b ems $fragments {
5490: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
54a0: 38 20 63 73 65 74 73 20 7b 4e 45 57 3a 20 5b 6c 8 csets {NEW: [l
54b0: 73 6f 72 74 20 24 66 72 61 67 6d 65 6e 74 69 74 sort $fragmentit
54c0: 65 6d 73 5d 7d 0a 0a 09 20 20 20 20 69 6e 74 65 ems]}... inte
54d0: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 grity assert {..
54e0: 09 21 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 65 .![struct::set e
54f0: 6d 70 74 79 20 24 66 72 61 67 6d 65 6e 74 69 74 mpty $fragmentit
5500: 65 6d 73 5d 0a 09 20 20 20 20 7d 20 7b 63 68 61 ems].. } {cha
5510: 6e 67 65 73 65 74 20 66 72 61 67 6d 65 6e 74 20 ngeset fragment
5520: 69 73 20 65 6d 70 74 79 7d 0a 0a 09 20 20 20 20 is empty}...
5530: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 integrity assert
5540: 20 7b 0a 09 09 5b 73 74 72 75 63 74 3a 3a 73 65 {...[struct::se
5550: 74 20 73 75 62 73 65 74 6f 66 20 24 66 72 61 67 t subsetof $frag
5560: 6d 65 6e 74 69 74 65 6d 73 20 5b 24 63 73 65 74 mentitems [$cset
5570: 20 69 74 65 6d 73 5d 5d 0a 09 20 20 20 20 7d 20 items]].. }
5580: 7b 63 68 61 6e 67 65 73 65 74 20 66 72 61 67 6d {changeset fragm
5590: 65 6e 74 20 69 73 20 6e 6f 74 20 61 20 73 75 62 ent is not a sub
55a0: 73 65 74 7d 0a 09 20 20 20 20 73 74 72 75 63 74 set}.. struct
55b0: 3a 3a 73 65 74 20 61 64 64 20 63 6f 76 65 72 20 ::set add cover
55c0: 24 66 72 61 67 6d 65 6e 74 69 74 65 6d 73 0a 09 $fragmentitems..
55d0: 7d 0a 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 }...integrity as
55e0: 73 65 72 74 20 7b 0a 09 20 20 20 20 5b 73 74 72 sert {.. [str
55f0: 75 63 74 3a 3a 73 65 74 20 65 71 75 61 6c 20 24 uct::set equal $
5600: 63 6f 76 65 72 20 5b 24 63 73 65 74 20 69 74 65 cover [$cset ite
5610: 6d 73 5d 5d 0a 09 20 7d 20 7b 54 68 65 20 66 72 ms]].. } {The fr
5620: 61 67 6d 65 6e 74 73 20 64 6f 20 6e 6f 74 20 63 agments do not c
5630: 6f 76 65 72 20 74 68 65 20 6f 72 69 67 69 6e 61 over the origina
5640: 6c 20 63 68 61 6e 67 65 73 65 74 7d 0a 0a 09 73 l changeset}...s
5650: 65 74 20 69 20 31 0a 09 66 6f 72 65 61 63 68 20 et i 1..foreach
5660: 66 69 61 20 24 66 72 61 67 6d 65 6e 74 73 20 7b fia $fragments {
5670: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 .. foreach fi
5680: 62 20 5b 6c 72 61 6e 67 65 20 24 66 72 61 67 6d b [lrange $fragm
5690: 65 6e 74 73 20 24 69 20 65 6e 64 5d 20 7b 0a 09 ents $i end] {..
56a0: 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 .integrity asser
56b0: 74 20 7b 0a 09 09 20 20 20 20 5b 73 74 72 75 63 t {... [struc
56c0: 74 3a 3a 73 65 74 20 65 6d 70 74 79 20 5b 73 74 t::set empty [st
56d0: 72 75 63 74 3a 3a 73 65 74 20 69 6e 74 65 72 73 ruct::set inters
56e0: 65 63 74 20 24 66 69 61 20 24 66 69 62 5d 5d 0a ect $fia $fib]].
56f0: 09 09 7d 20 7b 54 68 65 20 66 72 61 67 6d 65 6e ..} {The fragmen
5700: 74 73 20 3c 24 66 69 61 3e 20 61 6e 64 20 3c 24 ts <$fia> and <$
5710: 66 69 62 3e 20 6f 76 65 72 6c 61 70 7d 0a 09 20 fib> overlap}..
5720: 20 20 20 7d 0a 09 20 20 20 20 69 6e 63 72 20 69 }.. incr i
5730: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 ..}...return.
5740: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 }.. # # ## #
5750: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
5760: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
5770: 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 20 ## State..
5780: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 64 20 variable myid
5790: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 49 64 {} ; # Id
57a0: 20 6f 66 20 74 68 65 20 63 73 65 74 20 66 6f 72 of the cset for
57b0: 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 0a the persistent.
57c0: 09 09 09 20 20 20 20 20 20 23 20 73 74 61 74 65 ... # state
57d0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
57e0: 79 70 72 6f 6a 65 63 74 20 20 20 7b 7d 20 3b 20 yproject {} ;
57f0: 23 20 52 65 66 65 72 65 6e 63 65 20 6f 66 20 74 # Reference of t
5800: 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 he project objec
5810: 74 20 74 68 65 0a 09 09 09 20 20 20 20 20 20 23 t the.... #
5820: 20 63 68 61 6e 67 65 73 65 74 20 62 65 6c 6f 6e changeset belon
5830: 67 73 20 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 gs to.. varia
5840: 62 6c 65 20 6d 79 74 79 70 65 20 20 20 20 20 20 ble mytype
5850: 7b 7d 20 3b 20 23 20 57 68 61 74 20 74 68 65 20 {} ; # What the
5860: 63 68 61 6e 67 65 73 65 74 20 69 73 20 62 61 73 changeset is bas
5870: 65 64 20 6f 6e 0a 09 09 09 20 20 20 20 20 20 23 ed on.... #
5880: 20 28 72 65 76 69 73 69 6f 6e 73 2c 20 74 61 67 (revisions, tag
5890: 73 2c 20 6f 72 20 62 72 61 6e 63 68 65 73 29 2e s, or branches).
58a0: 0a 09 09 09 20 20 20 20 20 20 23 20 56 61 6c 75 .... # Valu
58b0: 65 73 3a 20 53 65 65 20 6d 79 63 73 74 79 70 65 es: See mycstype
58c0: 2e 20 4e 6f 74 65 20 74 68 61 74 20 77 65 0a 09 . Note that we..
58d0: 09 09 20 20 20 20 20 20 23 20 68 61 76 65 20 74 .. # have t
58e0: 6f 20 6b 65 65 70 20 74 68 65 20 6e 61 6d 65 73 o keep the names
58f0: 20 6f 66 20 74 68 65 20 68 65 6c 70 65 72 0a 09 of the helper..
5900: 09 09 20 20 20 20 20 20 23 20 73 69 6e 67 6c 65 .. # single
5910: 74 6f 6e 73 20 69 6e 20 73 79 6e 63 20 77 69 74 tons in sync wit
5920: 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 0a 09 h the contents..
5930: 09 09 20 20 20 20 20 20 23 20 6f 66 20 73 74 61 .. # of sta
5940: 74 65 20 74 61 62 6c 65 20 27 63 73 74 79 70 65 te table 'cstype
5950: 27 2c 20 61 6e 64 20 76 61 72 69 6f 75 73 0a 09 ', and various..
5960: 09 09 20 20 20 20 20 20 23 20 6f 74 68 65 72 20 .. # other
5970: 70 6c 61 63 65 73 20 75 73 69 6e 67 20 74 68 65 places using the
5980: 6d 20 68 61 72 64 77 69 72 65 64 2e 0a 20 20 20 m hardwired..
5990: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 79 70 65 variable mytype
59a0: 6f 62 6a 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 obj {} ; # Ref
59b0: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 63 6f erence to the co
59c0: 6e 74 61 69 6e 65 72 20 66 6f 72 20 74 68 65 0a ntainer for the.
59d0: 09 09 09 20 20 20 20 20 20 23 20 74 79 70 65 20 ... # type
59e0: 64 65 70 65 6e 64 65 6e 74 20 63 6f 64 65 2e 20 dependent code.
59f0: 44 65 72 69 76 65 64 20 66 72 6f 6d 0a 09 09 09 Derived from....
5a00: 20 20 20 20 20 20 23 20 6d 79 74 79 70 65 2e 0a # mytype..
5a10: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 73 variable mys
5a20: 72 63 69 64 20 20 20 20 20 7b 7d 20 3b 20 23 20 rcid {} ; #
5a30: 49 64 20 6f 66 20 74 68 65 20 6d 65 74 61 64 61 Id of the metada
5a40: 74 61 20 6f 72 20 73 79 6d 62 6f 6c 20 74 68 65 ta or symbol the
5a50: 20 63 73 65 74 0a 09 09 09 20 20 20 20 20 20 23 cset.... #
5a60: 20 69 73 20 62 61 73 65 64 20 6f 6e 2e 0a 20 20 is based on..
5a70: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 74 65 variable myite
5a80: 6d 73 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 ms {} ; # Li
5a90: 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 6c st of the file l
5aa0: 65 76 65 6c 20 72 65 76 69 73 69 6f 6e 73 2c 0a evel revisions,.
5ab0: 09 09 09 20 20 20 20 20 20 23 20 74 61 67 73 2c ... # tags,
5ac0: 20 6f 72 20 62 72 61 6e 63 68 65 73 20 69 6e 20 or branches in
5ad0: 74 68 65 20 63 73 65 74 2c 20 61 73 0a 09 09 09 the cset, as....
5ae0: 20 20 20 20 20 20 23 20 69 64 73 2e 20 4e 6f 74 # ids. Not
5af0: 20 74 61 67 67 65 64 2e 0a 20 20 20 20 76 61 72 tagged.. var
5b00: 69 61 62 6c 65 20 6d 79 74 69 74 65 6d 73 20 20 iable mytitems
5b10: 20 20 7b 7d 20 3b 20 23 20 41 73 20 6d 79 69 74 {} ; # As myit
5b20: 65 6d 73 2c 20 74 68 65 20 74 61 67 67 65 64 20 ems, the tagged
5b30: 66 6f 72 6d 2e 0a 20 20 20 20 76 61 72 69 61 62 form.. variab
5b40: 6c 65 20 6d 79 70 6f 73 20 20 20 20 20 20 20 7b le mypos {
5b50: 7d 20 3b 20 23 20 43 6f 6d 6d 69 74 20 70 6f 73 } ; # Commit pos
5b60: 69 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 68 61 ition of the cha
5b70: 6e 67 65 73 65 74 2c 20 69 66 0a 09 09 09 20 20 ngeset, if....
5b80: 20 20 20 20 23 20 6b 6e 6f 77 6e 2e 0a 0a 20 20 # known...
5b90: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
5ba0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
5bb0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
5bc0: 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 Internal method
5bd0: 73 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 s.. typevaria
5be0: 62 6c 65 20 6d 79 63 6f 75 6e 74 65 72 20 20 20 ble mycounter
5bf0: 20 20 20 20 20 30 20 3b 20 23 20 49 64 20 63 6f 0 ; # Id co
5c00: 75 6e 74 65 72 20 66 6f 72 20 63 73 65 74 73 2e unter for csets.
5c10: 20 4c 61 73 74 20 69 64 0a 09 09 09 09 20 20 20 Last id.....
5c20: 20 20 20 23 20 75 73 65 64 2e 0a 20 20 20 20 74 # used.. t
5c30: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 63 73 ypevariable mycs
5c40: 74 79 70 65 20 2d 61 72 72 61 79 20 7b 7d 20 3b type -array {} ;
5c50: 20 23 20 4d 61 70 20 63 73 74 79 70 65 73 20 28 # Map cstypes (
5c60: 6e 61 6d 65 73 29 20 74 6f 20 70 65 72 73 69 73 names) to persis
5c70: 74 65 6e 74 0a 09 09 09 09 20 20 20 20 20 20 23 tent..... #
5c80: 20 69 64 73 2e 20 4e 6f 74 65 20 74 68 61 74 20 ids. Note that
5c90: 77 65 20 68 61 76 65 20 74 6f 20 6b 65 65 70 0a we have to keep.
5ca0: 09 09 09 09 20 20 20 20 20 20 23 20 74 68 65 20 .... # the
5cb0: 6e 61 6d 65 73 20 69 6e 20 74 68 65 20 74 61 62 names in the tab
5cc0: 6c 65 20 27 63 73 74 79 70 65 27 0a 09 09 09 09 le 'cstype'.....
5cd0: 20 20 20 20 20 20 23 20 69 6e 20 73 79 6e 63 20 # in sync
5ce0: 77 69 74 68 20 74 68 65 20 6e 61 6d 65 73 20 6f with the names o
5cf0: 66 20 74 68 65 0a 09 09 09 09 20 20 20 20 20 20 f the.....
5d00: 23 20 68 65 6c 70 65 72 20 73 69 6e 67 6c 65 74 # helper singlet
5d10: 6f 6e 73 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 ons... typeme
5d20: 74 68 6f 64 20 69 6e 6f 72 64 65 72 20 7b 70 72 thod inorder {pr
5d30: 6f 6a 65 63 74 69 64 7d 20 7b 0a 09 23 20 52 65 ojectid} {..# Re
5d40: 74 75 72 6e 20 61 6c 6c 20 72 65 76 69 73 69 6f turn all revisio
5d50: 6e 20 63 68 61 6e 67 65 73 65 74 73 20 66 6f 72 n changesets for
5d60: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70 the specified p
5d70: 72 6f 6a 65 63 74 2c 20 69 6e 0a 09 23 20 74 68 roject, in..# th
5d80: 65 20 6f 72 64 65 72 20 67 69 76 65 6e 20 74 6f e order given to
5d90: 20 74 68 65 6d 20 62 79 20 74 68 65 20 73 6f 72 them by the sor
5da0: 74 20 70 61 73 73 65 73 2e 20 42 6f 74 68 20 74 t passes. Both t
5db0: 68 65 0a 09 23 20 66 69 6c 74 65 72 69 6e 67 20 he..# filtering
5dc0: 62 79 20 70 72 6f 6a 65 63 74 20 61 6e 64 20 73 by project and s
5dd0: 6f 72 74 69 6e 67 20 6d 61 6b 65 20 75 73 65 20 orting make use
5de0: 6f 66 20 27 70 72 6f 6a 65 63 74 3a 3a 72 65 76 of 'project::rev
5df0: 0a 09 23 20 72 65 76 27 20 69 6d 70 6f 73 73 69 ..# rev' impossi
5e00: 62 6c 65 2e 0a 0a 09 73 65 74 20 72 65 73 20 7b ble....set res {
5e10: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 63 69 64 20 }..foreach {cid
5e20: 63 64 61 74 65 7d 20 5b 73 74 61 74 65 20 72 75 cdate} [state ru
5e30: 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 n {.. SELECT
5e40: 43 2e 63 69 64 2c 20 54 2e 64 61 74 65 0a 09 20 C.cid, T.date..
5e50: 20 20 20 46 52 4f 4d 20 20 20 63 68 61 6e 67 65 FROM change
5e60: 73 65 74 20 43 2c 20 63 73 74 69 6d 65 73 74 61 set C, cstimesta
5e70: 6d 70 20 54 0a 09 20 20 20 20 57 48 45 52 45 20 mp T.. WHERE
5e80: 20 43 2e 74 79 70 65 20 3d 20 30 20 20 20 20 20 C.type = 0
5e90: 20 20 20 20 20 2d 2d 20 6c 69 6d 69 74 20 74 6f -- limit to
5ea0: 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 revision change
5eb0: 73 65 74 73 0a 09 20 20 20 20 41 4e 44 20 20 20 sets.. AND
5ec0: 20 43 2e 70 69 64 20 20 3d 20 24 70 72 6f 6a 65 C.pid = $proje
5ed0: 63 74 69 64 20 2d 2d 20 6c 69 6d 69 74 20 74 6f ctid -- limit to
5ee0: 20 63 68 61 6e 67 65 73 65 74 73 20 69 6e 20 70 changesets in p
5ef0: 72 6f 6a 65 63 74 0a 09 20 20 20 20 41 4e 44 20 roject.. AND
5f00: 20 20 20 54 2e 63 69 64 20 20 3d 20 43 2e 63 69 T.cid = C.ci
5f10: 64 20 20 20 20 20 20 2d 2d 20 67 65 74 20 6f 72 d -- get or
5f20: 64 65 72 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 dering informati
5f30: 6f 6e 0a 09 20 20 20 20 4f 52 44 45 52 20 42 59 on.. ORDER BY
5f40: 20 54 2e 64 61 74 65 20 20 20 20 20 20 20 20 20 T.date
5f50: 20 20 20 2d 2d 20 73 6f 72 74 20 69 6e 74 6f 20 -- sort into
5f60: 63 6f 6d 6d 69 74 20 6f 72 64 65 72 0a 09 7d 5d commit order..}]
5f70: 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 {.. lappend
5f80: 72 65 73 20 24 6d 79 69 64 6d 61 70 28 24 63 69 res $myidmap($ci
5f90: 64 29 20 24 63 64 61 74 65 0a 09 7d 0a 09 72 65 d) $cdate..}..re
5fa0: 74 75 72 6e 20 24 72 65 73 0a 20 20 20 20 7d 0a turn $res. }.
5fb0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
5fc0: 67 65 74 63 73 74 79 70 65 73 20 7b 7d 20 7b 0a getcstypes {} {.
5fd0: 09 66 6f 72 65 61 63 68 20 7b 74 69 64 20 6e 61 .foreach {tid na
5fe0: 6d 65 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b me} [state run {
5ff0: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 74 69 64 .. SELECT tid
6000: 2c 20 6e 61 6d 65 20 46 52 4f 4d 20 63 73 74 79 , name FROM csty
6010: 70 65 3b 0a 09 7d 5d 20 7b 20 73 65 74 20 6d 79 pe;..}] { set my
6020: 63 73 74 79 70 65 28 24 6e 61 6d 65 29 20 24 74 cstype($name) $t
6030: 69 64 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 id }..return.
6040: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 }.. typemeth
6050: 6f 64 20 6c 6f 61 64 20 7b 72 65 70 6f 73 69 74 od load {reposit
6060: 6f 72 79 7d 20 7b 0a 09 73 65 74 20 6e 20 30 0a ory} {..set n 0.
6070: 09 6c 6f 67 20 77 72 69 74 65 20 32 20 63 73 65 .log write 2 cse
6080: 74 73 20 7b 4c 6f 61 64 69 6e 67 20 74 68 65 20 ts {Loading the
6090: 63 68 61 6e 67 65 73 65 74 73 7d 0a 09 66 6f 72 changesets}..for
60a0: 65 61 63 68 20 7b 69 64 20 70 69 64 20 63 73 74 each {id pid cst
60b0: 79 70 65 20 73 72 63 69 64 7d 20 5b 73 74 61 74 ype srcid} [stat
60c0: 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c e run {.. SEL
60d0: 45 43 54 20 43 2e 63 69 64 2c 20 43 2e 70 69 64 ECT C.cid, C.pid
60e0: 2c 20 43 53 2e 6e 61 6d 65 2c 20 43 2e 73 72 63 , CS.name, C.src
60f0: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 63 68 61 .. FROM cha
6100: 6e 67 65 73 65 74 20 43 2c 20 63 73 74 79 70 65 ngeset C, cstype
6110: 20 43 53 0a 09 20 20 20 20 57 48 45 52 45 20 20 CS.. WHERE
6120: 43 2e 74 79 70 65 20 3d 20 43 53 2e 74 69 64 0a C.type = CS.tid.
6130: 09 20 20 20 20 4f 52 44 45 52 20 42 59 20 43 2e . ORDER BY C.
6140: 63 69 64 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 6c cid..}] {.. l
6150: 6f 67 20 70 72 6f 67 72 65 73 73 20 32 20 63 73 og progress 2 cs
6160: 65 74 73 20 24 6e 20 7b 7d 0a 09 20 20 20 20 73 ets $n {}.. s
6170: 65 74 20 72 20 5b 24 74 79 70 65 20 25 41 55 54 et r [$type %AUT
6180: 4f 25 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 O% [$repository
6190: 70 72 6f 6a 65 63 74 6f 66 20 24 70 69 64 5d 20 projectof $pid]
61a0: 24 63 73 74 79 70 65 20 24 73 72 63 69 64 20 5b $cstype $srcid [
61b0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 53 45 state run {...SE
61c0: 4c 45 43 54 20 43 2e 69 69 64 0a 09 09 46 52 4f LECT C.iid...FRO
61d0: 4d 20 20 20 63 73 69 74 65 6d 20 43 0a 09 09 57 M csitem C...W
61e0: 48 45 52 45 20 20 43 2e 63 69 64 20 3d 20 24 69 HERE C.cid = $i
61f0: 64 0a 09 09 4f 52 44 45 52 20 42 59 20 43 2e 70 d...ORDER BY C.p
6200: 6f 73 0a 09 20 20 20 20 7d 5d 20 24 69 64 5d 0a os.. }] $id].
6210: 09 20 20 20 20 24 72 20 6c 6f 61 64 6d 61 70 73 . $r loadmaps
6220: 0a 09 20 20 20 20 69 6e 63 72 20 6e 0a 09 7d 0a .. incr n..}.
6230: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
6240: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f typemethod lo
6250: 61 64 63 6f 75 6e 74 65 72 20 7b 7d 20 7b 0a 09 adcounter {} {..
6260: 23 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 # Initialize the
6270: 20 63 6f 75 6e 74 65 72 20 66 72 6f 6d 20 74 68 counter from th
6280: 65 20 73 74 61 74 65 0a 09 6c 6f 67 20 77 72 69 e state..log wri
6290: 74 65 20 32 20 63 73 65 74 73 20 7b 4c 6f 61 64 te 2 csets {Load
62a0: 69 6e 67 20 63 68 61 6e 67 65 73 65 74 20 63 6f ing changeset co
62b0: 75 6e 74 65 72 7d 0a 09 73 65 74 20 6d 79 63 6f unter}..set myco
62c0: 75 6e 74 65 72 20 5b 73 74 61 74 65 20 6f 6e 65 unter [state one
62d0: 20 7b 20 53 45 4c 45 43 54 20 4d 41 58 28 63 69 { SELECT MAX(ci
62e0: 64 29 20 46 52 4f 4d 20 63 68 61 6e 67 65 73 65 d) FROM changese
62f0: 74 20 7d 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 t }]..return.
6300: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 }.. typemeth
6310: 6f 64 20 6e 75 6d 20 7b 7d 20 7b 20 72 65 74 75 od num {} { retu
6320: 72 6e 20 24 6d 79 63 6f 75 6e 74 65 72 20 7d 0a rn $mycounter }.
6330: 0a 20 20 20 20 70 72 6f 63 20 49 6e 69 74 69 61 . proc Initia
6340: 6c 69 7a 65 42 72 65 61 6b 53 74 61 74 65 20 7b lizeBreakState {
6350: 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 revisions} {..up
6360: 76 61 72 20 31 20 70 6f 73 20 70 6f 73 20 63 72 var 1 pos pos cr
6370: 6f 73 73 20 63 72 6f 73 73 20 72 61 6e 67 65 20 oss cross range
6380: 72 61 6e 67 65 20 64 65 70 63 20 64 65 70 63 20 range depc depc
6390: 64 65 6c 74 61 20 64 65 6c 74 61 20 5c 0a 09 20 delta delta \..
63a0: 20 20 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 dependencies
63b0: 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09 23 dependencies...#
63c0: 20 46 69 72 73 74 20 77 65 20 63 72 65 61 74 65 First we create
63d0: 20 61 20 6d 61 70 20 6f 66 20 70 6f 73 69 74 69 a map of positi
63e0: 6f 6e 73 20 74 6f 20 6d 61 6b 65 20 69 74 20 65 ons to make it e
63f0: 61 73 69 65 72 20 74 6f 0a 09 23 20 64 65 74 65 asier to..# dete
6400: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 61 20 rmine whether a
6410: 64 65 70 65 6e 64 65 6e 63 79 20 63 72 6f 73 73 dependency cross
6420: 65 73 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 es a particular
6430: 69 6e 64 65 78 2e 0a 0a 09 61 72 72 61 79 20 73 index....array s
6440: 65 74 20 70 6f 73 20 20 20 7b 7d 0a 09 61 72 72 et pos {}..arr
6450: 61 79 20 73 65 74 20 63 72 6f 73 73 20 7b 7d 0a ay set cross {}.
6460: 09 61 72 72 61 79 20 73 65 74 20 64 65 70 63 20 .array set depc
6470: 20 7b 7d 0a 09 73 65 74 20 72 61 6e 67 65 20 20 {}..set range
6480: 20 20 20 20 20 7b 7d 0a 09 73 65 74 20 6e 20 30 {}..set n 0
6490: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 ..foreach rev $r
64a0: 65 76 69 73 69 6f 6e 73 20 7b 0a 09 20 20 20 20 evisions {..
64b0: 6c 61 70 70 65 6e 64 20 72 61 6e 67 65 20 24 6e lappend range $n
64c0: 0a 09 20 20 20 20 73 65 74 20 70 6f 73 28 24 72 .. set pos($r
64d0: 65 76 29 20 24 6e 0a 09 20 20 20 20 73 65 74 20 ev) $n.. set
64e0: 63 72 6f 73 73 28 24 6e 29 20 30 0a 09 20 20 20 cross($n) 0..
64f0: 20 69 6e 63 72 20 6e 0a 09 7d 0a 0a 09 23 20 53 incr n..}...# S
6500: 65 63 6f 6e 64 6c 79 20 77 65 20 63 6f 75 6e 74 econdly we count
6510: 20 74 68 65 20 63 72 6f 73 73 69 6e 67 73 20 70 the crossings p
6520: 65 72 20 70 6f 73 69 74 69 6f 6e 2c 20 62 79 20 er position, by
6530: 69 74 65 72 61 74 69 6e 67 0a 09 23 20 6f 76 65 iterating..# ove
6540: 72 20 74 68 65 20 72 65 63 6f 72 64 65 64 20 69 r the recorded i
6550: 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e nternal dependen
6560: 63 69 65 73 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 cies....# Note:
6570: 49 66 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70 If the timestamp
6580: 73 20 61 72 65 20 62 61 64 6c 79 20 6f 75 74 20 s are badly out
6590: 6f 66 20 6f 72 64 65 72 20 69 74 20 69 73 0a 09 of order it is..
65a0: 23 20 20 20 20 20 20 20 70 6f 73 73 69 62 6c 65 # possible
65b0: 20 74 6f 20 68 61 76 65 20 61 20 62 61 63 6b 77 to have a backw
65c0: 61 72 64 20 73 75 63 63 65 73 73 6f 72 20 64 65 ard successor de
65d0: 70 65 6e 64 65 6e 63 79 2c 0a 09 23 20 20 20 20 pendency,..#
65e0: 20 20 20 69 2e 65 2e 20 77 69 74 68 20 73 74 61 i.e. with sta
65f0: 72 74 20 3e 20 65 6e 64 2e 20 57 65 20 6d 61 79 rt > end. We may
6600: 20 68 61 76 65 20 74 6f 20 73 77 61 70 20 74 68 have to swap th
6610: 65 20 69 6e 64 69 63 65 73 0a 09 23 20 20 20 20 e indices..#
6620: 20 20 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 to ensure tha
6630: 74 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 t the following
6640: 6c 6f 6f 70 20 72 75 6e 73 20 63 6f 72 72 65 63 loop runs correc
6650: 74 6c 79 2e 0a 09 23 0a 09 23 20 4e 6f 74 65 20 tly...#..# Note
6660: 32 3a 20 73 74 61 72 74 20 3d 3d 20 65 6e 64 20 2: start == end
6670: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e is not possible.
6680: 20 49 74 20 69 6e 64 69 63 61 74 65 73 20 61 0a It indicates a.
6690: 09 23 20 20 20 20 20 20 20 20 20 73 65 6c 66 2d .# self-
66a0: 64 65 70 65 6e 64 65 6e 63 79 20 64 75 65 20 74 dependency due t
66b0: 6f 20 74 68 65 20 75 6e 69 71 75 65 6e 65 73 73 o the uniqueness
66c0: 20 6f 66 20 70 6f 73 69 74 69 6f 6e 73 2c 0a 09 of positions,..
66d0: 23 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 # and th
66e0: 61 74 20 69 73 20 73 6f 6d 65 74 68 69 6e 67 20 at is something
66f0: 77 65 20 68 61 76 65 20 72 75 6c 65 64 20 6f 75 we have ruled ou
6700: 74 20 61 6c 72 65 61 64 79 2c 20 73 65 65 0a 09 t already, see..
6710: 23 20 20 20 20 20 20 20 20 20 27 72 65 76 20 69 # 'rev i
6720: 6e 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 nternalsuccessor
6730: 73 27 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 s'....foreach {r
6740: 69 64 20 63 68 69 6c 64 72 65 6e 7d 20 5b 61 72 id children} [ar
6750: 72 61 79 20 67 65 74 20 64 65 70 65 6e 64 65 6e ray get dependen
6760: 63 69 65 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 cies] {.. for
6770: 65 61 63 68 20 63 68 69 6c 64 20 24 63 68 69 6c each child $chil
6780: 64 72 65 6e 20 7b 0a 09 09 73 65 74 20 64 6b 65 dren {...set dke
6790: 79 20 20 20 20 5b 6c 69 73 74 20 24 72 69 64 20 y [list $rid
67a0: 24 63 68 69 6c 64 5d 0a 09 09 73 65 74 20 73 74 $child]...set st
67b0: 61 72 74 20 20 20 24 70 6f 73 28 24 72 69 64 29 art $pos($rid)
67c0: 0a 09 09 73 65 74 20 65 6e 64 20 20 20 20 20 24 ...set end $
67d0: 70 6f 73 28 24 63 68 69 6c 64 29 0a 09 09 73 65 pos($child)...se
67e0: 74 20 63 72 6f 73 73 65 73 20 7b 7d 0a 0a 09 09 t crosses {}....
67f0: 69 66 20 7b 24 73 74 61 72 74 20 3e 20 24 65 6e if {$start > $en
6800: 64 7d 20 7b 0a 09 09 20 20 20 20 77 68 69 6c 65 d} {... while
6810: 20 7b 24 65 6e 64 20 3c 20 24 73 74 61 72 74 7d {$end < $start}
6820: 20 7b 0a 09 09 09 6c 61 70 70 65 6e 64 20 63 72 {....lappend cr
6830: 6f 73 73 65 73 20 24 65 6e 64 0a 09 09 09 69 6e osses $end....in
6840: 63 72 20 63 72 6f 73 73 28 24 65 6e 64 29 0a 09 cr cross($end)..
6850: 09 09 69 6e 63 72 20 65 6e 64 0a 09 09 20 20 20 ..incr end...
6860: 20 7d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 }...} else {...
6870: 20 20 20 20 77 68 69 6c 65 20 7b 24 73 74 61 72 while {$star
6880: 74 20 3c 20 24 65 6e 64 7d 20 7b 0a 09 09 09 6c t < $end} {....l
6890: 61 70 70 65 6e 64 20 63 72 6f 73 73 65 73 20 24 append crosses $
68a0: 73 74 61 72 74 0a 09 09 09 69 6e 63 72 20 63 72 start....incr cr
68b0: 6f 73 73 28 24 73 74 61 72 74 29 0a 09 09 09 69 oss($start)....i
68c0: 6e 63 72 20 73 74 61 72 74 0a 09 09 20 20 20 20 ncr start...
68d0: 7d 0a 09 09 7d 0a 09 09 73 65 74 20 64 65 70 63 }...}...set depc
68e0: 28 24 64 6b 65 79 29 20 24 63 72 6f 73 73 65 73 ($dkey) $crosses
68f0: 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 49 6e 69 .. }..}...Ini
6900: 74 69 61 6c 69 7a 65 44 65 6c 74 61 73 20 24 72 tializeDeltas $r
6910: 65 76 69 73 69 6f 6e 73 0a 09 72 65 74 75 72 6e evisions..return
6920: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 . }.. proc
6930: 20 49 6e 69 74 69 61 6c 69 7a 65 44 65 6c 74 61 InitializeDelta
6940: 73 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a s {revisions} {.
6950: 09 75 70 76 61 72 20 31 20 64 65 6c 74 61 20 64 .upvar 1 delta d
6960: 65 6c 74 61 0a 0a 09 23 20 50 75 6c 6c 20 74 68 elta...# Pull th
6970: 65 20 74 69 6d 65 73 74 61 6d 70 73 20 66 6f 72 e timestamps for
6980: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 69 all revisions i
6990: 6e 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 73 n the changesets
69a0: 20 61 6e 64 0a 09 23 20 63 6f 6d 70 75 74 65 20 and..# compute
69b0: 74 68 65 69 72 20 64 65 6c 74 61 73 20 66 6f 72 their deltas for
69c0: 20 75 73 65 20 62 79 20 74 68 65 20 62 72 65 61 use by the brea
69d0: 6b 20 66 69 6e 64 65 72 2e 0a 0a 09 61 72 72 61 k finder....arra
69e0: 79 20 73 65 74 20 64 65 6c 74 61 20 7b 7d 0a 09 y set delta {}..
69f0: 61 72 72 61 79 20 73 65 74 20 73 74 61 6d 70 20 array set stamp
6a00: 7b 7d 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 {}...set theset
6a10: 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f ('[join $revisio
6a20: 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 66 6f 72 ns {','}]')..for
6a30: 65 61 63 68 20 7b 72 69 64 20 74 69 6d 65 7d 20 each {rid time}
6a40: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
6a50: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
6a60: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
6a70: 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 SELECT R.rid
6a80: 2c 20 52 2e 64 61 74 65 0a 09 20 20 20 20 46 52 , R.date.. FR
6a90: 4f 4d 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 OM revision R..
6aa0: 20 20 20 57 48 45 52 45 20 52 2e 72 69 64 20 49 WHERE R.rid I
6ab0: 4e 20 24 74 68 65 73 65 74 0a 09 7d 5d 5d 20 7b N $theset..}]] {
6ac0: 0a 09 20 20 20 20 73 65 74 20 73 74 61 6d 70 28 .. set stamp(
6ad0: 24 72 69 64 29 20 24 74 69 6d 65 0a 09 7d 0a 0a $rid) $time..}..
6ae0: 09 73 65 74 20 6e 20 30 0a 09 66 6f 72 65 61 63 .set n 0..foreac
6af0: 68 20 72 69 64 20 5b 6c 72 61 6e 67 65 20 24 72 h rid [lrange $r
6b00: 65 76 69 73 69 6f 6e 73 20 30 20 65 6e 64 2d 31 evisions 0 end-1
6b10: 5d 20 72 6e 65 78 74 20 5b 6c 72 61 6e 67 65 20 ] rnext [lrange
6b20: 24 72 65 76 69 73 69 6f 6e 73 20 31 20 65 6e 64 $revisions 1 end
6b30: 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 64 65 6c ] {.. set del
6b40: 74 61 28 24 6e 29 20 5b 65 78 70 72 20 7b 24 73 ta($n) [expr {$s
6b50: 74 61 6d 70 28 24 72 6e 65 78 74 29 20 2d 20 24 tamp($rnext) - $
6b60: 73 74 61 6d 70 28 24 72 69 64 29 7d 5d 0a 09 20 stamp($rid)}]..
6b70: 20 20 20 69 6e 63 72 20 6e 0a 09 7d 0a 09 72 65 incr n..}..re
6b80: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
6b90: 70 72 6f 63 20 46 69 6e 64 42 65 73 74 42 72 65 proc FindBestBre
6ba0: 61 6b 20 7b 72 61 6e 67 65 7d 20 7b 0a 09 75 70 ak {range} {..up
6bb0: 76 61 72 20 31 20 63 72 6f 73 73 20 63 72 6f 73 var 1 cross cros
6bc0: 73 20 64 65 6c 74 61 20 64 65 6c 74 61 0a 0a 09 s delta delta...
6bd0: 23 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 # Determine the
6be0: 62 65 73 74 20 62 72 65 61 6b 20 6c 6f 63 61 74 best break locat
6bf0: 69 6f 6e 20 69 6e 20 74 68 65 20 67 69 76 65 6e ion in the given
6c00: 20 72 61 6e 67 65 20 6f 66 0a 09 23 20 70 6f 73 range of..# pos
6c10: 69 74 69 6f 6e 73 2e 20 46 69 72 73 74 20 77 65 itions. First we
6c20: 20 6c 6f 6f 6b 20 66 6f 72 20 74 68 65 20 6c 6f look for the lo
6c30: 63 61 74 69 6f 6e 73 20 77 69 74 68 20 74 68 65 cations with the
6c40: 20 6d 61 78 69 6d 61 6c 0a 09 23 20 6e 75 6d 62 maximal..# numb
6c50: 65 72 20 6f 66 20 63 72 6f 73 73 69 6e 67 73 2e er of crossings.
6c60: 20 49 66 20 74 68 65 72 65 20 61 72 65 20 73 65 If there are se
6c70: 76 65 72 61 6c 20 77 65 20 6c 6f 6f 6b 20 66 6f veral we look fo
6c80: 72 20 74 68 65 0a 09 23 20 73 68 6f 72 74 65 73 r the..# shortes
6c90: 74 20 74 69 6d 65 20 69 6e 74 65 72 76 61 6c 20 t time interval
6ca0: 61 6d 6f 6e 67 20 74 68 65 6d 2e 20 49 66 20 77 among them. If w
6cb0: 65 20 73 74 69 6c 6c 20 68 61 76 65 20 6d 75 6c e still have mul
6cc0: 74 69 70 6c 65 0a 09 23 20 70 6f 73 73 69 62 69 tiple..# possibi
6cd0: 6c 69 74 69 65 73 20 61 66 74 65 72 20 74 68 61 lities after tha
6ce0: 74 20 77 65 20 73 65 6c 65 63 74 20 74 68 65 20 t we select the
6cf0: 65 61 72 6c 69 65 73 74 20 6c 6f 63 61 74 69 6f earliest locatio
6d00: 6e 0a 09 23 20 61 6d 6f 6e 67 20 74 68 65 73 65 n..# among these
6d10: 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 49 66 20 74 ....# Note: If t
6d20: 68 65 20 6d 61 78 69 6d 61 6c 20 6e 75 6d 62 65 he maximal numbe
6d30: 72 20 6f 66 20 63 72 6f 73 73 69 6e 67 73 20 69 r of crossings i
6d40: 73 20 30 20 74 68 65 6e 20 74 68 65 20 72 61 6e s 0 then the ran
6d50: 67 65 0a 09 23 20 20 20 20 20 20 20 68 61 73 20 ge..# has
6d60: 6e 6f 20 69 6e 74 65 72 6e 61 6c 20 64 65 70 65 no internal depe
6d70: 6e 64 65 6e 63 69 65 73 2c 20 61 6e 64 20 6e 6f ndencies, and no
6d80: 20 62 72 65 61 6b 20 6c 6f 63 61 74 69 6f 6e 20 break location
6d90: 61 74 0a 09 23 20 20 20 20 20 20 20 61 6c 6c 2e at..# all.
6da0: 20 54 68 69 73 20 70 6f 73 73 69 62 69 6c 69 74 This possibilit
6db0: 79 20 69 73 20 73 69 67 6e 61 6c 65 64 20 76 69 y is signaled vi
6dc0: 61 20 72 65 73 75 6c 74 20 2d 31 2e 0a 0a 09 23 a result -1....#
6dd0: 20 4e 6f 74 65 3a 20 41 20 72 61 6e 67 65 20 6f Note: A range o
6de0: 66 20 6c 65 6e 67 74 68 20 31 20 6f 72 20 6c 65 f length 1 or le
6df0: 73 73 20 63 61 6e 6e 6f 74 20 68 61 76 65 20 69 ss cannot have i
6e00: 6e 74 65 72 6e 61 6c 0a 09 23 20 20 20 20 20 20 nternal..#
6e10: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 61 dependencies, a
6e20: 73 20 74 68 61 74 20 6e 65 65 64 73 20 61 74 20 s that needs at
6e30: 6c 65 61 73 74 20 74 77 6f 20 72 65 76 69 73 69 least two revisi
6e40: 6f 6e 73 20 69 6e 0a 09 23 20 20 20 20 20 20 20 ons in..#
6e50: 74 68 65 20 72 61 6e 67 65 2e 0a 0a 09 69 66 20 the range....if
6e60: 7b 5b 6c 6c 65 6e 67 74 68 20 24 72 61 6e 67 65 {[llength $range
6e70: 5d 20 3c 20 32 7d 20 7b 20 72 65 74 75 72 6e 20 ] < 2} { return
6e80: 2d 31 20 7d 0a 0a 09 73 65 74 20 6d 61 78 20 2d -1 }...set max -
6e90: 31 0a 09 73 65 74 20 62 65 73 74 20 7b 7d 0a 0a 1..set best {}..
6ea0: 09 66 6f 72 65 61 63 68 20 6c 6f 63 61 74 69 6f .foreach locatio
6eb0: 6e 20 24 72 61 6e 67 65 20 7b 0a 09 20 20 20 20 n $range {..
6ec0: 73 65 74 20 63 72 6f 73 73 69 6e 67 73 20 24 63 set crossings $c
6ed0: 72 6f 73 73 28 24 6c 6f 63 61 74 69 6f 6e 29 0a ross($location).
6ee0: 09 20 20 20 20 69 66 20 7b 24 63 72 6f 73 73 69 . if {$crossi
6ef0: 6e 67 73 20 3e 20 24 6d 61 78 7d 20 7b 0a 09 09 ngs > $max} {...
6f00: 73 65 74 20 6d 61 78 20 20 24 63 72 6f 73 73 69 set max $crossi
6f10: 6e 67 73 0a 09 09 73 65 74 20 62 65 73 74 20 5b ngs...set best [
6f20: 6c 69 73 74 20 24 6c 6f 63 61 74 69 6f 6e 5d 0a list $location].
6f30: 09 09 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 ..continue..
6f40: 7d 20 65 6c 73 65 69 66 20 7b 24 63 72 6f 73 73 } elseif {$cross
6f50: 69 6e 67 73 20 3d 3d 20 24 6d 61 78 7d 20 7b 0a ings == $max} {.
6f60: 09 09 6c 61 70 70 65 6e 64 20 62 65 73 74 20 24 ..lappend best $
6f70: 6c 6f 63 61 74 69 6f 6e 0a 09 20 20 20 20 7d 0a location.. }.
6f80: 09 7d 0a 0a 09 69 66 20 7b 24 6d 61 78 20 3d 3d .}...if {$max ==
6f90: 20 30 7d 20 20 20 20 20 20 20 20 20 20 20 20 7b 0} {
6fa0: 20 72 65 74 75 72 6e 20 2d 31 20 7d 0a 09 69 66 return -1 }..if
6fb0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 62 65 73 74 {[llength $best
6fc0: 5d 20 3d 3d 20 31 7d 20 7b 20 72 65 74 75 72 6e ] == 1} { return
6fd0: 20 5b 6c 69 6e 64 65 78 20 24 62 65 73 74 20 30 [lindex $best 0
6fe0: 5d 20 7d 0a 0a 09 73 65 74 20 6c 6f 63 61 74 69 ] }...set locati
6ff0: 6f 6e 73 20 24 62 65 73 74 0a 09 73 65 74 20 62 ons $best..set b
7000: 65 73 74 20 7b 7d 0a 09 73 65 74 20 6d 69 6e 20 est {}..set min
7010: 2d 31 0a 0a 09 66 6f 72 65 61 63 68 20 6c 6f 63 -1...foreach loc
7020: 61 74 69 6f 6e 20 24 6c 6f 63 61 74 69 6f 6e 73 ation $locations
7030: 20 7b 0a 09 20 20 20 20 73 65 74 20 69 6e 74 65 {.. set inte
7040: 72 76 61 6c 20 24 64 65 6c 74 61 28 24 6c 6f 63 rval $delta($loc
7050: 61 74 69 6f 6e 29 0a 09 20 20 20 20 69 66 20 7b ation).. if {
7060: 28 24 6d 69 6e 20 3c 20 30 29 20 7c 7c 20 28 24 ($min < 0) || ($
7070: 69 6e 74 65 72 76 61 6c 20 3c 20 24 6d 69 6e 29 interval < $min)
7080: 7d 20 7b 0a 09 09 73 65 74 20 6d 69 6e 20 20 24 } {...set min $
7090: 69 6e 74 65 72 76 61 6c 0a 09 09 73 65 74 20 62 interval...set b
70a0: 65 73 74 20 5b 6c 69 73 74 20 24 6c 6f 63 61 74 est [list $locat
70b0: 69 6f 6e 5d 0a 09 20 20 20 20 7d 20 65 6c 73 65 ion].. } else
70c0: 69 66 20 7b 24 69 6e 74 65 72 76 61 6c 20 3d 3d if {$interval ==
70d0: 20 24 6d 69 6e 7d 20 7b 0a 09 09 6c 61 70 70 65 $min} {...lappe
70e0: 6e 64 20 62 65 73 74 20 24 6c 6f 63 61 74 69 6f nd best $locatio
70f0: 6e 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 69 66 n.. }..}...if
7100: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 62 65 73 74 {[llength $best
7110: 5d 20 3d 3d 20 31 7d 20 7b 20 72 65 74 75 72 6e ] == 1} { return
7120: 20 5b 6c 69 6e 64 65 78 20 24 62 65 73 74 20 30 [lindex $best 0
7130: 5d 20 7d 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 ] }...return [li
7140: 6e 64 65 78 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 ndex [lsort -int
7150: 65 67 65 72 20 2d 69 6e 63 72 65 61 73 69 6e 67 eger -increasing
7160: 20 24 62 65 73 74 5d 20 30 5d 0a 20 20 20 20 7d $best] 0]. }
7170: 0a 0a 20 20 20 20 70 72 6f 63 20 43 75 74 41 74 .. proc CutAt
7180: 20 7b 6c 6f 63 61 74 69 6f 6e 7d 20 7b 0a 09 75 {location} {..u
7190: 70 76 61 72 20 31 20 63 72 6f 73 73 20 63 72 6f pvar 1 cross cro
71a0: 73 73 20 64 65 70 63 20 64 65 70 63 0a 0a 09 23 ss depc depc...#
71b0: 20 49 74 20 77 61 73 20 64 65 63 69 64 65 64 20 It was decided
71c0: 74 6f 20 73 70 6c 69 74 20 74 68 65 20 63 68 61 to split the cha
71d0: 6e 67 65 73 65 74 20 61 74 20 74 68 65 20 67 69 ngeset at the gi
71e0: 76 65 6e 0a 09 23 20 6c 6f 63 61 74 69 6f 6e 2e ven..# location.
71f0: 20 54 68 69 73 20 63 75 74 73 20 61 20 6e 75 6d This cuts a num
7200: 62 65 72 20 6f 66 20 64 65 70 65 6e 64 65 6e 63 ber of dependenc
7210: 69 65 73 2e 20 48 65 72 65 20 77 65 20 75 70 64 ies. Here we upd
7220: 61 74 65 0a 09 23 20 74 68 65 20 63 72 6f 73 73 ate..# the cross
7230: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 73 6f 20 information so
7240: 74 68 61 74 20 74 68 65 20 62 72 65 61 6b 20 66 that the break f
7250: 69 6e 64 65 72 20 68 61 73 20 61 63 63 75 72 61 inder has accura
7260: 74 65 0a 09 23 20 64 61 74 61 20 77 68 65 6e 20 te..# data when
7270: 77 65 20 6c 6f 6f 6b 20 61 74 20 74 68 65 20 67 we look at the g
7280: 65 6e 65 72 61 74 65 64 20 66 72 61 67 6d 65 6e enerated fragmen
7290: 74 73 2e 0a 0a 09 73 65 74 20 73 69 78 20 5b 6c ts....set six [l
72a0: 6f 67 20 76 69 73 69 62 6c 65 3f 20 36 5d 0a 0a og visible? 6]..
72b0: 09 66 6f 72 65 61 63 68 20 7b 64 65 70 20 72 61 .foreach {dep ra
72c0: 6e 67 65 7d 20 5b 61 72 72 61 79 20 67 65 74 20 nge} [array get
72d0: 64 65 70 63 5d 20 7b 0a 09 20 20 20 20 23 20 43 depc] {.. # C
72e0: 68 65 63 6b 20 61 6c 6c 20 64 65 70 65 6e 64 65 heck all depende
72f0: 6e 63 69 65 73 20 73 74 69 6c 6c 20 6b 6e 6f 77 ncies still know
7300: 6e 2c 20 74 61 6b 65 20 74 68 65 69 72 20 72 61 n, take their ra
7310: 6e 67 65 20 61 6e 64 0a 09 20 20 20 20 23 20 73 nge and.. # s
7320: 65 65 20 69 66 20 74 68 65 20 62 72 65 61 6b 20 ee if the break
7330: 6c 6f 63 61 74 69 6f 6e 20 66 61 6c 6c 73 20 77 location falls w
7340: 69 74 68 69 6e 2e 0a 0a 09 20 20 20 20 42 6f 72 ithin.... Bor
7350: 64 65 72 20 24 72 61 6e 67 65 20 73 20 65 0a 09 der $range s e..
7360: 20 20 20 20 69 66 20 7b 24 6c 6f 63 61 74 69 6f if {$locatio
7370: 6e 20 3c 20 24 73 7d 20 63 6f 6e 74 69 6e 75 65 n < $s} continue
7380: 20 3b 20 23 20 62 72 65 61 6b 20 62 65 66 6f 72 ; # break befor
7390: 65 20 72 61 6e 67 65 2c 20 69 67 6e 6f 72 65 0a e range, ignore.
73a0: 09 20 20 20 20 69 66 20 7b 24 6c 6f 63 61 74 69 . if {$locati
73b0: 6f 6e 20 3e 20 24 65 7d 20 63 6f 6e 74 69 6e 75 on > $e} continu
73c0: 65 20 3b 20 23 20 62 72 65 61 6b 20 61 66 74 65 e ; # break afte
73d0: 72 20 72 61 6e 67 65 2c 20 69 67 6e 6f 72 65 2e r range, ignore.
73e0: 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 64 65 ... # This de
73f0: 70 65 6e 64 65 6e 63 79 20 63 72 6f 73 73 65 73 pendency crosses
7400: 20 74 68 65 20 62 72 65 61 6b 20 6c 6f 63 61 74 the break locat
7410: 69 6f 6e 2e 20 57 65 20 72 65 6d 6f 76 65 20 69 ion. We remove i
7420: 74 0a 09 20 20 20 20 23 20 66 72 6f 6d 20 74 68 t.. # from th
7430: 65 20 63 72 6f 73 73 69 6e 67 73 20 63 6f 75 6e e crossings coun
7440: 74 65 72 73 2c 20 61 6e 64 20 74 68 65 6e 20 61 ters, and then a
7450: 6c 73 6f 20 66 72 6f 6d 20 74 68 65 20 73 65 74 lso from the set
7460: 0a 09 20 20 20 20 23 20 6f 66 20 6b 6e 6f 77 6e .. # of known
7470: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 61 dependencies, a
7480: 73 20 77 65 20 61 72 65 20 64 6f 6e 65 20 77 69 s we are done wi
7490: 74 68 20 69 74 2e 0a 0a 09 20 20 20 20 66 6f 72 th it.... for
74a0: 65 61 63 68 20 6c 6f 63 20 24 64 65 70 63 28 24 each loc $depc($
74b0: 64 65 70 29 20 7b 20 69 6e 63 72 20 63 72 6f 73 dep) { incr cros
74c0: 73 28 24 6c 6f 63 29 20 2d 31 20 7d 0a 09 20 20 s($loc) -1 }..
74d0: 20 20 75 6e 73 65 74 20 64 65 70 63 28 24 64 65 unset depc($de
74e0: 70 29 0a 0a 09 20 20 20 20 69 66 20 7b 21 24 73 p)... if {!$s
74f0: 69 78 7d 20 63 6f 6e 74 69 6e 75 65 0a 0a 09 20 ix} continue...
7500: 20 20 20 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 struct::list
7510: 61 73 73 69 67 6e 20 24 64 65 70 20 70 61 72 65 assign $dep pare
7520: 6e 74 20 63 68 69 6c 64 0a 09 20 20 20 20 6c 6f nt child.. lo
7530: 67 20 77 72 69 74 65 20 35 20 63 73 65 74 73 20 g write 5 csets
7540: 22 42 72 6f 6b 65 20 64 65 70 65 6e 64 65 6e 63 "Broke dependenc
7550: 79 20 5b 50 44 20 24 70 61 72 65 6e 74 5d 20 2d y [PD $parent] -
7560: 2d 3e 20 5b 50 44 20 24 63 68 69 6c 64 5d 22 0a -> [PD $child]".
7570: 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 .}...return.
7580: 7d 0a 0a 20 20 20 20 23 20 50 72 69 6e 74 20 69 }.. # Print i
7590: 64 65 6e 74 69 66 79 69 6e 67 20 64 61 74 61 20 dentifying data
75a0: 66 6f 72 20 61 20 72 65 76 69 73 69 6f 6e 20 28 for a revision (
75b0: 70 72 6f 6a 65 63 74 2c 20 66 69 6c 65 2c 20 64 project, file, d
75c0: 6f 74 74 65 64 20 72 65 76 0a 20 20 20 20 23 20 otted rev. #
75d0: 6e 75 6d 62 65 72 29 2c 20 66 6f 72 20 68 69 67 number), for hig
75e0: 68 20 76 65 72 62 6f 73 69 74 79 20 6c 6f 67 20 h verbosity log
75f0: 6f 75 74 70 75 74 2e 0a 20 20 20 20 23 20 54 4f output.. # TO
7600: 44 4f 3a 20 52 65 70 6c 61 63 65 20 77 69 74 68 DO: Replace with
7610: 20 63 61 6c 6c 20 74 6f 20 69 74 65 6d 73 74 72 call to itemstr
7620: 20 28 6c 69 73 74 20 72 65 76 20 24 69 64 29 0a (list rev $id).
7630: 0a 20 20 20 20 70 72 6f 63 20 50 44 20 7b 69 64 . proc PD {id
7640: 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 70 20 } {..foreach {p
7650: 66 20 72 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 f r} [state run
7660: 7b 0a 09 09 53 45 4c 45 43 54 20 50 2e 6e 61 6d {...SELECT P.nam
7670: 65 20 2c 20 46 2e 6e 61 6d 65 2c 20 52 2e 72 65 e , F.name, R.re
7680: 76 0a 09 09 46 52 4f 4d 20 72 65 76 69 73 69 6f v...FROM revisio
7690: 6e 20 52 2c 20 66 69 6c 65 20 46 2c 20 70 72 6f n R, file F, pro
76a0: 6a 65 63 74 20 50 0a 09 09 57 48 45 52 45 20 52 ject P...WHERE R
76b0: 2e 72 69 64 20 3d 20 24 69 64 20 20 20 20 2d 2d .rid = $id --
76c0: 20 46 69 6e 64 20 73 70 65 63 69 66 69 65 64 20 Find specified
76d0: 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 0a 09 09 file revision...
76e0: 41 4e 44 20 20 20 46 2e 66 69 64 20 3d 20 52 2e AND F.fid = R.
76f0: 66 69 64 20 20 2d 2d 20 47 65 74 20 66 69 6c 65 fid -- Get file
7700: 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e of the revision
7710: 0a 09 09 41 4e 44 20 20 20 50 2e 70 69 64 20 3d ...AND P.pid =
7720: 20 46 2e 70 69 64 20 20 2d 2d 20 47 65 74 20 70 F.pid -- Get p
7730: 72 6f 6a 65 63 74 20 6f 66 20 74 68 65 20 66 69 roject of the fi
7740: 6c 65 2e 0a 09 7d 5d 20 62 72 65 61 6b 0a 09 72 le...}] break..r
7750: 65 74 75 72 6e 20 22 27 24 70 20 3a 20 24 66 2f eturn "'$p : $f/
7760: 24 72 27 22 0a 20 20 20 20 7d 0a 0a 20 20 20 20 $r'". }..
7770: 23 20 50 72 69 6e 74 69 6e 67 20 6f 6e 65 20 6f # Printing one o
7780: 72 20 6d 6f 72 65 20 72 61 6e 67 65 73 2c 20 66 r more ranges, f
7790: 6f 72 6d 61 74 74 65 64 2c 20 61 6e 64 20 6f 6e ormatted, and on
77a0: 6c 79 20 74 68 65 69 72 20 62 6f 72 64 65 72 20 ly their border
77b0: 74 6f 0a 20 20 20 20 23 20 6b 65 65 70 20 74 68 to. # keep th
77c0: 65 20 73 74 72 69 6e 67 73 20 73 68 6f 72 74 2e e strings short.
77d0: 0a 0a 20 20 20 20 70 72 6f 63 20 50 52 73 20 7b .. proc PRs {
77e0: 72 61 6e 67 65 73 7d 20 7b 0a 09 72 65 74 75 72 ranges} {..retur
77f0: 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 n [struct::list
7800: 6d 61 70 20 24 72 61 6e 67 65 73 20 5b 6d 79 70 map $ranges [myp
7810: 72 6f 63 20 50 52 5d 5d 0a 20 20 20 20 7d 0a 0a roc PR]]. }..
7820: 20 20 20 20 70 72 6f 63 20 50 52 20 7b 72 61 6e proc PR {ran
7830: 67 65 7d 20 7b 0a 09 42 6f 72 64 65 72 20 24 72 ge} {..Border $r
7840: 61 6e 67 65 20 73 20 65 0a 09 72 65 74 75 72 6e ange s e..return
7850: 20 3c 24 7b 73 7d 2e 2e 2e 24 7b 65 7d 3e 0a 20 <${s}...${e}>.
7860: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 42 }.. proc B
7870: 6f 72 64 65 72 20 7b 72 61 6e 67 65 20 73 76 20 order {range sv
7880: 65 76 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24 ev} {..upvar 1 $
7890: 73 76 20 73 20 24 65 76 20 65 0a 09 73 65 74 20 sv s $ev e..set
78a0: 73 20 5b 6c 69 6e 64 65 78 20 24 72 61 6e 67 65 s [lindex $range
78b0: 20 30 5d 0a 09 73 65 74 20 65 20 5b 6c 69 6e 64 0]..set e [lind
78c0: 65 78 20 24 72 61 6e 67 65 20 65 6e 64 5d 0a 09 ex $range end]..
78d0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
78e0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
78f0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
7900: 23 23 23 23 23 23 23 23 23 0a 0a 20 20 20 20 74 #########.. t
7910: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 63 68 ypevariable mych
7920: 61 6e 67 65 73 65 74 73 20 20 20 20 20 20 20 20 angesets
7930: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 {} ; # List of
7940: 61 6c 6c 20 6b 6e 6f 77 6e 0a 09 09 09 09 09 20 all known......
7950: 20 20 23 20 63 68 61 6e 67 65 73 65 74 73 2e 0a # changesets..
7960: 0a 20 20 20 20 23 20 4c 69 73 74 20 6f 66 20 61 . # List of a
7970: 6c 6c 20 6b 6e 6f 77 6e 20 63 68 61 6e 67 65 73 ll known changes
7980: 65 74 73 20 6f 66 20 61 20 74 79 70 65 2e 0a 20 ets of a type..
7990: 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 typevariable
79a0: 6d 79 74 63 68 61 6e 67 65 73 65 74 73 20 2d 61 mytchangesets -a
79b0: 72 72 61 79 20 7b 0a 09 73 79 6d 3a 3a 62 72 61 rray {..sym::bra
79c0: 6e 63 68 20 7b 7d 0a 09 73 79 6d 3a 3a 74 61 67 nch {}..sym::tag
79d0: 20 20 20 20 7b 7d 0a 09 72 65 76 20 20 20 20 20 {}..rev
79e0: 20 20 20 20 7b 7d 0a 20 20 20 20 7d 0a 09 09 09 {}. }....
79f0: 09 09 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 ... typevaria
7a00: 62 6c 65 20 6d 79 69 74 65 6d 6d 61 70 20 20 20 ble myitemmap
7a10: 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 -array {} ; #
7a20: 4d 61 70 20 66 72 6f 6d 20 69 74 65 6d 73 20 28 Map from items (
7a30: 74 61 67 67 65 64 29 0a 09 09 09 09 09 20 20 20 tagged)......
7a40: 23 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6f 66 # to the list of
7a50: 20 63 68 61 6e 67 65 73 65 74 73 0a 09 09 09 09 changesets.....
7a60: 09 20 20 20 23 20 63 6f 6e 74 61 69 6e 69 6e 67 . # containing
7a70: 20 69 74 2e 20 45 61 63 68 20 69 74 65 6d 0a 09 it. Each item..
7a80: 09 09 09 09 20 20 20 23 20 63 61 6e 20 62 65 20 .... # can be
7a90: 75 73 65 64 20 62 79 20 6f 6e 6c 79 20 6f 6e 65 used by only one
7aa0: 0a 09 09 09 09 09 20 20 20 23 20 63 68 61 6e 67 ...... # chang
7ab0: 65 73 65 74 2e 0a 20 20 20 20 74 79 70 65 76 61 eset.. typeva
7ac0: 72 69 61 62 6c 65 20 6d 79 69 64 6d 61 70 20 20 riable myidmap
7ad0: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d -array {} ; # M
7ae0: 61 70 20 66 72 6f 6d 20 63 68 61 6e 67 65 73 65 ap from changese
7af0: 74 20 69 64 20 74 6f 0a 09 09 09 09 20 20 20 20 t id to.....
7b00: 20 20 20 23 20 63 68 61 6e 67 65 73 65 74 2e 0a # changeset..
7b10: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
7b20: 61 6c 6c 20 20 20 20 7b 7d 20 20 20 20 7b 20 72 all {} { r
7b30: 65 74 75 72 6e 20 24 6d 79 63 68 61 6e 67 65 73 eturn $mychanges
7b40: 65 74 73 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 ets }. typeme
7b50: 74 68 6f 64 20 6f 66 20 20 20 20 20 7b 63 69 64 thod of {cid
7b60: 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 64 } { return $myid
7b70: 6d 61 70 28 24 63 69 64 29 20 7d 0a 20 20 20 20 map($cid) }.
7b80: 23 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 69 74 #typemethod ofit
7b90: 65 6d 20 7b 69 69 64 7d 20 7b 20 72 65 74 75 72 em {iid} { retur
7ba0: 6e 20 24 6d 79 69 74 65 6d 6d 61 70 28 24 69 69 n $myitemmap($ii
7bb0: 64 29 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 d) }.. typeme
7bc0: 74 68 6f 64 20 72 65 76 20 20 20 20 7b 7d 20 20 thod rev {}
7bd0: 20 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 74 63 { return $mytc
7be0: 68 61 6e 67 65 73 65 74 73 28 72 65 76 29 20 7d hangesets(rev) }
7bf0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
7c00: 73 79 6d 20 20 20 20 7b 7d 20 20 20 20 7b 20 72 sym {} { r
7c10: 65 74 75 72 6e 20 5b 63 6f 6e 63 61 74 20 5c 0a eturn [concat \.
7c20: 09 09 09 09 09 20 20 24 7b 6d 79 74 63 68 61 6e ..... ${mytchan
7c30: 67 65 73 65 74 73 28 73 79 6d 3a 3a 62 72 61 6e gesets(sym::bran
7c40: 63 68 29 7d 20 5c 0a 09 09 09 09 09 20 20 24 7b ch)} \...... ${
7c50: 6d 79 74 63 68 61 6e 67 65 73 65 74 73 28 73 79 mytchangesets(sy
7c60: 6d 3a 3a 74 61 67 29 7d 5d 20 7d 0a 0a 20 20 20 m::tag)}] }..
7c70: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
7c80: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
7c90: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
7ca0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 Configuration..
7cb0: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 pragma -hasty
7cc0: 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 peinfo no ;
7cd0: 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 # no type intros
7ce0: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 pection. prag
7cf0: 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 ma -hasinfo
7d00: 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 no ; # no ob
7d10: 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 ject introspecti
7d20: 6f 6e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 on.. # # ## #
7d30: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
7d40: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
7d50: 7d 0a 0a 23 23 0a 23 23 20 4e 4f 54 45 3a 20 54 }..##.## NOTE: T
7d60: 68 65 20 73 75 63 63 65 73 73 6f 72 20 61 6e 64 he successor and
7d70: 20 70 72 65 64 65 63 65 73 73 6f 72 20 6d 65 74 predecessor met
7d80: 68 6f 64 73 20 64 65 66 69 6e 65 64 20 62 79 20 hods defined by
7d90: 74 68 65 20 63 6c 61 73 73 65 73 0a 23 23 20 20 the classes.##
7da0: 20 20 20 20 20 62 65 6c 6f 77 20 61 72 65 20 2d below are -
7db0: 2d 20 62 6f 74 74 6c 65 20 6e 65 63 6b 73 20 2d - bottle necks -
7dc0: 2d 2e 20 4c 6f 6f 6b 20 66 6f 72 20 77 61 79 73 -. Look for ways
7dd0: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 53 51 4c to make the SQL
7de0: 0a 23 23 20 20 20 20 20 20 20 66 61 73 74 65 72 .## faster
7df0: 2e 0a 23 23 0a 0a 23 20 23 20 23 23 20 23 23 23 ..##..# # ## ###
7e00: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
7e10: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 ############# ##
7e20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
7e30: 23 23 23 0a 23 23 20 48 65 6c 70 65 72 20 73 69 ###.## Helper si
7e40: 6e 67 6c 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e 64 ngleton. Command
7e50: 73 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 63 s for revision c
7e60: 68 61 6e 67 65 73 65 74 73 2e 0a 0a 73 6e 69 74 hangesets...snit
7e70: 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 ::type ::vc::fos
7e80: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
7e90: 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 3a 3a ::project::rev::
7ea0: 72 65 76 20 7b 0a 20 20 20 20 74 79 70 65 6d 65 rev {. typeme
7eb0: 74 68 6f 64 20 62 79 72 65 76 69 73 69 6f 6e 20 thod byrevision
7ec0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 7d 0a {} { return 1 }.
7ed0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 typemethod b
7ee0: 79 73 79 6d 62 6f 6c 20 20 20 7b 7d 20 7b 20 72 ysymbol {} { r
7ef0: 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 eturn 0 }. ty
7f00: 70 65 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 pemethod istag
7f10: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 {} { return
7f20: 30 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 0 }. typemeth
7f30: 6f 64 20 69 73 62 72 61 6e 63 68 20 20 20 7b 7d od isbranch {}
7f40: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a 20 { return 0 }..
7f50: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 74 typemethod st
7f60: 72 20 7b 72 65 76 69 73 69 6f 6e 7d 20 7b 0a 09 r {revision} {..
7f70: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 struct::list ass
7f80: 69 67 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 7b ign [state run {
7f90: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
7fa0: 65 76 2c 20 46 2e 6e 61 6d 65 2c 20 50 2e 6e 61 ev, F.name, P.na
7fb0: 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 me.. FROM r
7fc0: 65 76 69 73 69 6f 6e 20 52 2c 20 66 69 6c 65 20 evision R, file
7fd0: 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 20 20 F, project P..
7fe0: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 3d WHERE R.rid =
7ff0: 20 24 72 65 76 69 73 69 6f 6e 20 2d 2d 20 46 69 $revision -- Fi
8000: 6e 64 20 73 70 65 63 69 66 69 65 64 20 66 69 6c nd specified fil
8010: 65 20 72 65 76 69 73 69 6f 6e 0a 09 20 20 20 20 e revision..
8020: 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d 20 52 AND F.fid = R
8030: 2e 66 69 64 20 20 20 20 20 2d 2d 20 47 65 74 20 .fid -- Get
8040: 66 69 6c 65 20 6f 66 20 74 68 65 20 72 65 76 69 file of the revi
8050: 73 69 6f 6e 0a 09 20 20 20 20 41 4e 44 20 20 20 sion.. AND
8060: 20 50 2e 70 69 64 20 3d 20 46 2e 70 69 64 20 20 P.pid = F.pid
8070: 20 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65 63 -- Get projec
8080: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a 09 t of the file...
8090: 7d 5d 20 72 65 76 6e 72 20 66 6e 61 6d 65 20 70 }] revnr fname p
80a0: 6e 61 6d 65 0a 09 72 65 74 75 72 6e 20 22 24 70 name..return "$p
80b0: 6e 61 6d 65 2f 24 7b 72 65 76 6e 72 7d 3a 3a 24 name/${revnr}::$
80c0: 66 6e 61 6d 65 22 0a 20 20 20 20 7d 0a 0a 20 20 fname". }..
80d0: 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 73 # result = lis
80e0: 74 20 28 6d 69 6e 74 69 6d 65 2c 20 6d 61 78 74 t (mintime, maxt
80f0: 69 6d 65 29 0a 20 20 20 20 74 79 70 65 6d 65 74 ime). typemet
8100: 68 6f 64 20 74 69 6d 65 72 61 6e 67 65 20 7b 69 hod timerange {i
8110: 74 65 6d 73 7d 20 7b 0a 09 73 65 74 20 74 68 65 tems} {..set the
8120: 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 69 74 65 set ('[join $ite
8130: 6d 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 ms {','}]')..ret
8140: 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b urn [state run [
8150: 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 subst -nocommand
8160: 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 s -nobackslashes
8170: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 4d {.. SELECT M
8180: 49 4e 28 52 2e 64 61 74 65 29 2c 20 4d 41 58 28 IN(R.date), MAX(
8190: 52 2e 64 61 74 65 29 0a 09 20 20 20 20 46 52 4f R.date).. FRO
81a0: 4d 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 M revision R..
81b0: 20 20 57 48 45 52 45 20 52 2e 72 69 64 20 49 4e WHERE R.rid IN
81c0: 20 24 74 68 65 73 65 74 20 2d 2d 20 52 65 73 74 $theset -- Rest
81d0: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e rict to revision
81e0: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 7d s of interest..}
81f0: 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 ]]. }.. #
8200: 76 61 72 28 64 76 29 20 3d 20 64 69 63 74 20 28 var(dv) = dict (
8210: 72 65 76 69 73 69 6f 6e 20 2d 3e 20 6c 69 73 74 revision -> list
8220: 20 28 72 65 76 69 73 69 6f 6e 29 29 0a 20 20 20 (revision)).
8230: 20 74 79 70 65 6d 65 74 68 6f 64 20 69 6e 74 65 typemethod inte
8240: 72 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 20 7b rnalsuccessors {
8250: 64 76 20 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a dv revisions} {.
8260: 09 75 70 76 61 72 20 31 20 24 64 76 20 64 65 70 .upvar 1 $dv dep
8270: 65 6e 64 65 6e 63 69 65 73 0a 09 73 65 74 20 74 endencies..set t
8280: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 heset ('[join $r
8290: 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 evisions {','}]'
82a0: 29 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 )...log write 14
82b0: 20 63 73 65 74 20 69 6e 74 65 72 6e 61 6c 73 75 cset internalsu
82c0: 63 63 65 73 73 6f 72 73 0a 0a 09 23 20 53 65 65 ccessors...# See
82d0: 20 27 73 75 63 63 65 73 73 6f 72 73 27 20 62 65 'successors' be
82e0: 6c 6f 77 20 66 6f 72 20 74 68 65 20 6d 61 69 6e low for the main
82f0: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 6f 66 0a explanation of.
8300: 09 23 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 .# the various c
8310: 61 73 65 73 2e 20 54 68 69 73 20 70 69 65 63 65 ases. This piece
8320: 20 69 73 20 73 70 65 63 69 61 6c 20 69 6e 20 74 is special in t
8330: 68 61 74 20 69 74 0a 09 23 20 72 65 73 74 72 69 hat it..# restri
8340: 63 74 73 20 74 68 65 20 73 75 63 63 65 73 73 6f cts the successo
8350: 72 73 20 77 65 20 6c 6f 6f 6b 20 66 6f 72 20 74 rs we look for t
8360: 6f 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f o the same set o
8370: 66 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 77 f..# revisions w
8380: 65 20 73 74 61 72 74 20 66 72 6f 6d 2e 20 53 65 e start from. Se
8390: 6e 73 69 62 6c 65 20 61 73 20 77 65 20 61 72 65 nsible as we are
83a0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 0a 09 23 20 looking for..#
83b0: 63 68 61 6e 67 65 73 65 74 20 69 6e 74 65 72 6e changeset intern
83c0: 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e al dependencies.
83d0: 0a 0a 09 61 72 72 61 79 20 73 65 74 20 64 65 70 ...array set dep
83e0: 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 {}...foreach {r
83f0: 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 id child} [state
8400: 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 run [subst -noc
8410: 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 ommands -nobacks
8420: 6c 61 73 68 65 73 20 7b 0a 20 20 20 20 2d 2d 20 lashes {. --
8430: 28 31 29 20 50 72 69 6d 61 72 79 20 63 68 69 6c (1) Primary chil
8440: 64 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e d.. SELECT R.
8450: 72 69 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 20 rid, R.child..
8460: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f FROM revisio
8470: 6e 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 n R.. WHERE
8480: 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 R.rid IN $thes
8490: 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 et -- Restri
84a0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 ct to revisions
84b0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
84c0: 20 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 AND R.child
84d0: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d IS NOT NULL -
84e0: 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 - Has primary ch
84f0: 69 6c 64 0a 09 20 20 20 20 41 4e 44 20 20 20 20 ild.. AND
8500: 52 2e 63 68 69 6c 64 20 49 4e 20 24 74 68 65 73 R.child IN $thes
8510: 65 74 20 20 20 20 20 2d 2d 20 57 68 69 63 68 20 et -- Which
8520: 69 73 20 61 6c 73 6f 20 6f 66 20 69 6e 74 65 72 is also of inter
8530: 65 73 74 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 est. UNION.
8540: 20 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 61 -- (2) Seconda
8550: 72 79 20 28 62 72 61 6e 63 68 29 20 63 68 69 6c ry (branch) chil
8560: 64 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 54 dren.. SELECT
8570: 20 52 2e 72 69 64 2c 20 42 2e 62 72 69 64 0a 09 R.rid, B.brid..
8580: 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 FROM revis
8590: 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 62 ion R, revisionb
85a0: 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 42 0a ranchchildren B.
85b0: 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 . WHERE R.ri
85c0: 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 d IN $theset
85d0: 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 -- Restrict t
85e0: 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 o revisions of i
85f0: 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 nterest.. AND
8600: 20 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 R.rid = B.ri
8610: 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 d -- Se
8620: 6c 65 63 74 20 73 75 62 73 65 74 20 6f 66 20 62 lect subset of b
8630: 72 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a 09 ranch children..
8640: 20 20 20 20 41 4e 44 20 20 20 20 42 2e 62 72 69 AND B.bri
8650: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 d IN $theset
8660: 20 20 2d 2d 20 57 68 69 63 68 20 69 73 20 61 6c -- Which is al
8670: 73 6f 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 20 so of interest.
8680: 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 UNION. --
8690: 28 34 29 20 43 68 69 6c 64 20 6f 66 20 74 72 75 (4) Child of tru
86a0: 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 73 6f nk root successo
86b0: 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 20 6f r of last NTDB o
86c0: 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53 45 n trunk... SE
86d0: 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 41 2e 63 LECT R.rid, RA.c
86e0: 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 72 hild.. FROM r
86f0: 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 evision R, revis
8700: 69 6f 6e 20 52 41 0a 09 20 20 20 20 57 48 45 52 ion RA.. WHER
8710: 45 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 E R.rid IN $th
8720: 65 73 65 74 20 20 20 20 20 20 2d 2d 20 52 65 73 eset -- Res
8730: 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f trict to revisio
8740: 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 ns of interest..
8750: 20 20 20 20 41 4e 44 20 20 20 52 2e 69 73 64 65 AND R.isde
8760: 66 61 75 6c 74 20 20 20 20 20 20 20 20 20 20 20 fault
8770: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f -- Restrict to
8780: 20 4e 54 44 42 0a 09 20 20 20 20 41 4e 44 20 20 NTDB.. AND
8790: 20 52 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f R.dbchild IS NO
87a0: 54 20 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 T NULL -- and
87b0: 6c 61 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 last NTDB belong
87c0: 69 6e 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 ing to trunk..
87d0: 20 20 41 4e 44 20 20 20 52 41 2e 72 69 64 20 3d AND RA.rid =
87e0: 20 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 R.dbchild
87f0: 2d 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 -- Go directly t
8800: 6f 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 o trunk root..
8810: 20 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 AND RA.child
8820: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 IS NOT NULL
8830: 2d 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 -- Has primary c
8840: 68 69 6c 64 2e 0a 20 20 20 20 20 20 20 20 20 20 hild..
8850: 20 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 AND RA.child
8860: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
8870: 2d 2d 20 57 68 69 63 68 20 69 73 20 61 6c 73 6f -- Which is also
8880: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 7d 5d of interest..}]
8890: 5d 20 7b 0a 09 20 20 20 20 23 20 43 6f 6e 73 69 ] {.. # Consi
88a0: 64 65 72 20 6d 6f 76 69 6e 67 20 74 68 69 73 20 der moving this
88b0: 74 6f 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 to the integrity
88c0: 20 6d 6f 64 75 6c 65 2e 0a 09 20 20 20 20 69 6e module... in
88d0: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
88e0: 24 72 69 64 20 21 3d 20 24 63 68 69 6c 64 7d 20 $rid != $child}
88f0: 7b 52 65 76 69 73 69 6f 6e 20 24 72 69 64 20 64 {Revision $rid d
8900: 65 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66 epends on itself
8910: 2e 7d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 .}.. lappend
8920: 64 65 70 65 6e 64 65 6e 63 69 65 73 28 24 72 69 dependencies($ri
8930: 64 29 20 24 63 68 69 6c 64 0a 09 20 20 20 20 73 d) $child.. s
8940: 65 74 20 64 65 70 28 24 72 69 64 2c 24 63 68 69 et dep($rid,$chi
8950: 6c 64 29 20 2e 0a 09 7d 0a 0a 09 23 20 54 68 65 ld) ...}...# The
8960: 20 73 71 6c 20 73 74 61 74 65 6d 65 6e 74 73 20 sql statements
8970: 61 62 6f 76 65 20 6c 6f 6f 6b 73 20 6f 6e 6c 79 above looks only
8980: 20 66 6f 72 20 64 69 72 65 63 74 20 64 65 70 65 for direct depe
8990: 6e 64 65 6e 63 69 65 73 0a 09 23 20 62 65 74 77 ndencies..# betw
89a0: 65 65 6e 20 72 65 76 69 73 69 6f 6e 20 69 6e 20 een revision in
89b0: 74 68 65 20 63 68 61 6e 67 65 73 65 74 2e 20 48 the changeset. H
89c0: 6f 77 65 76 65 72 20 64 75 65 20 74 6f 20 74 68 owever due to th
89d0: 65 0a 09 23 20 76 61 67 61 72 69 65 73 20 6f 66 e..# vagaries of
89e0: 20 6d 65 74 61 20 64 61 74 61 20 69 74 20 69 73 meta data it is
89f0: 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 77 possible for tw
8a00: 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 0a 09 o revisions of..
8a10: 23 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 20 # the same file
8a20: 74 6f 20 65 6e 64 20 75 70 20 69 6e 20 74 68 65 to end up in the
8a30: 20 73 61 6d 65 20 63 68 61 6e 67 65 73 65 74 2c same changeset,
8a40: 20 77 69 74 68 6f 75 74 20 61 0a 09 23 20 64 69 without a..# di
8a50: 72 65 63 74 20 64 65 70 65 6e 64 65 6e 63 79 20 rect dependency
8a60: 62 65 74 77 65 65 6e 20 74 68 65 6d 2e 20 48 6f between them. Ho
8a70: 77 65 76 65 72 20 77 65 20 6b 6e 6f 77 20 74 68 wever we know th
8a80: 61 74 20 74 68 65 72 65 0a 09 23 20 68 61 73 20 at there..# has
8a90: 74 6f 20 62 65 20 61 20 61 6e 20 69 6e 64 69 72 to be a an indir
8aa0: 65 63 74 20 64 65 70 65 6e 64 65 6e 63 79 2c 20 ect dependency,
8ab0: 62 65 20 69 74 20 74 68 72 6f 75 67 68 20 70 72 be it through pr
8ac0: 69 6d 61 72 79 0a 09 23 20 63 68 69 6c 64 72 65 imary..# childre
8ad0: 6e 2c 20 62 72 61 6e 63 68 20 63 68 69 6c 64 72 n, branch childr
8ae0: 65 6e 2c 20 6f 72 20 61 20 63 6f 6d 62 69 6e 61 en, or a combina
8af0: 74 69 6f 6e 20 74 68 65 72 65 6f 66 2e 0a 0a 09 tion thereof....
8b00: 23 20 57 65 20 6e 6f 77 20 66 69 6c 6c 20 69 6e # We now fill in
8b10: 20 74 68 65 73 65 20 70 73 65 75 64 6f 2d 64 65 these pseudo-de
8b20: 70 65 6e 64 65 6e 63 69 65 73 2c 20 69 66 20 6e pendencies, if n
8b30: 6f 20 73 75 63 68 0a 09 23 20 64 65 70 65 6e 64 o such..# depend
8b40: 65 6e 63 79 20 65 78 69 73 74 73 20 61 6c 72 65 ency exists alre
8b50: 61 64 79 2e 20 54 68 65 20 64 69 72 65 63 74 69 ady. The directi
8b60: 6f 6e 20 6f 66 20 74 68 65 20 64 65 70 65 6e 64 on of the depend
8b70: 65 6e 63 79 0a 09 23 20 69 73 20 61 63 74 75 61 ency..# is actua
8b80: 6c 6c 79 20 69 72 72 65 6c 65 76 61 6e 74 20 66 lly irrelevant f
8b90: 6f 72 20 74 68 69 73 2e 0a 0a 09 23 20 4e 4f 54 or this....# NOT
8ba0: 45 3a 20 54 68 69 73 20 69 73 20 64 69 66 66 65 E: This is diffe
8bb0: 72 65 6e 74 20 66 72 6f 6d 20 63 76 73 32 73 76 rent from cvs2sv
8bc0: 6e 2e 20 4f 75 72 20 73 70 69 72 69 74 75 61 6c n. Our spiritual
8bd0: 20 61 6e 63 65 73 74 6f 72 0a 09 23 20 64 6f 65 ancestor..# doe
8be0: 73 20 6e 6f 74 20 75 73 65 20 73 75 63 68 20 70 s not use such p
8bf0: 73 65 75 64 6f 2d 64 65 70 65 6e 64 65 6e 63 69 seudo-dependenci
8c00: 65 73 2c 20 68 6f 77 65 76 65 72 20 69 74 20 75 es, however it u
8c10: 73 65 73 20 61 0a 09 23 20 43 4f 4d 4d 49 54 5f ses a..# COMMIT_
8c20: 54 48 52 45 53 48 4f 4c 44 2c 20 61 20 74 69 6d THRESHOLD, a tim
8c30: 65 20 69 6e 74 65 72 76 61 6c 20 63 6f 6d 6d 69 e interval commi
8c40: 74 73 20 73 68 6f 75 6c 64 20 66 61 6c 6c 2e 20 ts should fall.
8c50: 54 68 69 73 0a 09 23 20 77 69 6c 6c 20 67 72 65 This..# will gre
8c60: 61 74 6c 79 20 72 65 64 75 63 65 73 20 74 68 65 atly reduces the
8c70: 20 72 69 73 6b 20 6f 66 20 67 65 74 74 69 6e 67 risk of getting
8c80: 20 66 61 72 20 73 65 70 61 72 61 74 65 64 0a 09 far separated..
8c90: 23 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 74 # revisions of t
8ca0: 68 65 20 73 61 6d 65 20 66 69 6c 65 20 69 6e 74 he same file int
8cb0: 6f 20 6f 6e 65 20 63 68 61 6e 67 65 73 65 74 2e o one changeset.
8cc0: 0a 0a 09 23 20 57 65 20 61 6c 6c 6f 77 20 72 65 ...# We allow re
8cd0: 76 69 73 69 6f 6e 73 20 74 6f 20 62 65 20 66 61 visions to be fa
8ce0: 72 20 61 70 61 72 74 20 69 6e 20 74 69 6d 65 20 r apart in time
8cf0: 69 6e 20 74 68 65 20 73 61 6d 65 0a 09 23 20 63 in the same..# c
8d00: 68 61 6e 67 65 73 65 74 2c 20 62 75 74 20 69 6e hangeset, but in
8d10: 20 74 75 72 6e 20 6e 65 65 64 20 74 68 65 20 70 turn need the p
8d20: 73 65 75 64 6f 2d 64 65 70 65 6e 64 65 6e 63 69 seudo-dependenci
8d30: 65 73 20 74 6f 0a 09 23 20 68 61 6e 64 6c 65 20 es to..# handle
8d40: 74 68 69 73 2e 0a 0a 09 6c 6f 67 20 77 72 69 74 this....log writ
8d50: 65 20 31 34 20 63 73 65 74 20 70 73 65 75 64 6f e 14 cset pseudo
8d60: 2d 69 6e 74 65 72 6e 61 6c 73 75 63 63 65 73 73 -internalsuccess
8d70: 6f 72 73 0a 0a 09 61 72 72 61 79 20 73 65 74 20 ors...array set
8d80: 66 69 64 73 20 7b 7d 0a 09 66 6f 72 65 61 63 68 fids {}..foreach
8d90: 20 7b 72 69 64 20 66 69 64 7d 20 5b 73 74 61 74 {rid fid} [stat
8da0: 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f e run [subst -no
8db0: 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b commands -noback
8dc0: 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 slashes {.. S
8dd0: 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 2e 66 ELECT R.rid, R.f
8de0: 69 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 id. F
8df0: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R
8e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45 . WHE
8e10: 52 45 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68 RE R.rid IN $th
8e20: 65 73 65 74 0a 09 7d 5d 5d 20 7b 20 6c 61 70 70 eset..}]] { lapp
8e30: 65 6e 64 20 66 69 64 73 28 24 66 69 64 29 20 24 end fids($fid) $
8e40: 72 69 64 20 7d 0a 0a 09 66 6f 72 65 61 63 68 20 rid }...foreach
8e50: 7b 66 69 64 20 72 69 64 73 7d 20 5b 61 72 72 61 {fid rids} [arra
8e60: 79 20 67 65 74 20 66 69 64 73 5d 20 7b 0a 09 20 y get fids] {..
8e70: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength
8e80: 24 72 69 64 73 5d 20 3c 20 32 7d 20 63 6f 6e 74 $rids] < 2} cont
8e90: 69 6e 75 65 0a 09 20 20 20 20 66 6f 72 65 61 63 inue.. foreac
8ea0: 68 20 61 20 24 72 69 64 73 20 7b 0a 09 09 66 6f h a $rids {...fo
8eb0: 72 65 61 63 68 20 62 20 24 72 69 64 73 20 7b 0a reach b $rids {.
8ec0: 09 09 20 20 20 20 69 66 20 7b 24 61 20 3d 3d 20 .. if {$a ==
8ed0: 24 62 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 $b} continue...
8ee0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi
8ef0: 73 74 73 20 64 65 70 28 24 61 2c 24 62 29 5d 7d sts dep($a,$b)]}
8f00: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 continue...
8f10: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists
8f20: 20 64 65 70 28 24 62 2c 24 61 29 5d 7d 20 63 6f dep($b,$a)]} co
8f30: 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 6c 61 70 ntinue... lap
8f40: 70 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 65 pend dependencie
8f50: 73 28 24 61 29 20 24 62 0a 09 09 20 20 20 20 73 s($a) $b... s
8f60: 65 74 20 64 65 70 28 24 61 2c 24 62 29 20 2e 0a et dep($a,$b) ..
8f70: 09 09 20 20 20 20 73 65 74 20 64 65 70 28 24 62 .. set dep($b
8f80: 2c 24 61 29 20 2e 0a 09 09 7d 0a 09 20 20 20 20 ,$a) ....}..
8f90: 7d 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 }..}...log write
8fa0: 20 31 34 20 63 73 65 74 20 63 6f 6d 70 6c 65 74 14 cset complet
8fb0: 65 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a e..return. }.
8fc0: 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 . # result =
8fd0: 34 2d 6c 69 73 74 20 28 69 74 65 6d 74 79 70 65 4-list (itemtype
8fe0: 20 69 74 65 6d 69 64 20 6e 65 78 74 69 74 65 6d itemid nextitem
8ff0: 74 79 70 65 20 6e 65 78 74 69 74 65 6d 69 64 20 type nextitemid
9000: 2e 2e 2e 29 0a 20 20 20 20 74 79 70 65 6d 65 74 ...). typemet
9010: 68 6f 64 20 6c 6f 6f 70 73 20 7b 72 65 76 69 73 hod loops {revis
9020: 69 6f 6e 73 7d 20 7b 0a 09 23 20 4e 6f 74 65 3a ions} {..# Note:
9030: 20 54 61 67 73 20 61 6e 64 20 62 72 61 6e 63 68 Tags and branch
9040: 65 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 es cannot cause
9050: 74 68 65 20 6c 6f 6f 70 2e 20 54 68 65 69 72 20 the loop. Their
9060: 69 64 27 73 2c 0a 09 23 20 62 65 69 6e 67 20 6f id's,..# being o
9070: 66 20 61 20 66 75 6e 64 61 6d 65 6e 74 61 6c 6c f a fundamentall
9080: 79 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 y different type
9090: 20 74 68 61 6e 20 74 68 65 20 72 65 76 69 73 69 than the revisi
90a0: 6f 6e 73 0a 09 23 20 63 6f 6d 69 6e 67 20 69 6e ons..# coming in
90b0: 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 74 68 cannot be in th
90c0: 65 20 73 65 74 2e 0a 0a 09 73 65 74 20 74 68 65 e set....set the
90d0: 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 set ('[join $rev
90e0: 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a isions {','}]').
90f0: 09 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 .return [state r
9100: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
9110: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
9120: 73 68 65 73 20 7b 0a 09 20 20 20 20 2d 2d 20 28 shes {.. -- (
9130: 31 29 20 50 72 69 6d 61 72 79 20 63 68 69 6c 64 1) Primary child
9140: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 .. SELECT R.r
9150: 69 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 20 20 id, R.child..
9160: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e FROM revision
9170: 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 R.. WHERE R
9180: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 .rid IN $these
9190: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
91a0: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
91b0: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
91c0: 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49 AND R.child I
91d0: 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d S NOT NULL --
91e0: 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69 Has primary chi
91f0: 6c 64 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 ld.. AND R
9200: 2e 63 68 69 6c 64 20 49 4e 20 24 74 68 65 73 65 .child IN $these
9210: 74 20 20 20 20 20 2d 2d 20 4c 6f 6f 70 0a 09 20 t -- Loop..
9220: 20 20 20 2d 2d 0a 09 20 20 20 20 55 4e 49 4f 4e --.. UNION
9230: 0a 09 20 20 20 20 2d 2d 20 28 32 29 20 53 65 63 .. -- (2) Sec
9240: 6f 6e 64 61 72 79 20 28 62 72 61 6e 63 68 29 20 ondary (branch)
9250: 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 53 45 children.. SE
9260: 4c 45 43 54 20 52 2e 72 69 64 2c 20 42 2e 62 72 LECT R.rid, B.br
9270: 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 id.. FROM r
9280: 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 evision R, revis
9290: 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c 64 72 65 ionbranchchildre
92a0: 6e 20 42 0a 09 20 20 20 20 57 48 45 52 45 20 20 n B.. WHERE
92b0: 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 R.rid IN $thes
92c0: 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 et -- Restri
92d0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 ct to revisions
92e0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 of interest..
92f0: 20 41 4e 44 20 20 20 20 52 2e 72 69 64 20 3d 20 AND R.rid =
9300: 42 2e 72 69 64 20 20 20 20 20 20 20 20 20 20 2d B.rid -
9310: 2d 20 53 65 6c 65 63 74 20 73 75 62 73 65 74 20 - Select subset
9320: 6f 66 20 62 72 61 6e 63 68 20 63 68 69 6c 64 72 of branch childr
9330: 65 6e 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 en.. AND B
9340: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 .rid IN $these
9350: 74 20 20 20 20 20 2d 2d 20 4c 6f 6f 70 0a 09 20 t -- Loop..
9360: 20 20 20 2d 2d 0a 09 20 20 20 20 55 4e 49 4f 4e --.. UNION
9370: 0a 09 20 20 20 20 2d 2d 20 28 34 29 20 43 68 69 .. -- (4) Chi
9380: 6c 64 20 6f 66 20 74 72 75 6e 6b 20 72 6f 6f 74 ld of trunk root
9390: 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 6c 61 successor of la
93a0: 73 74 20 4e 54 44 42 20 6f 6e 20 74 72 75 6e 6b st NTDB on trunk
93b0: 2e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e ... SELECT R.
93c0: 72 69 64 2c 20 52 41 2e 63 68 69 6c 64 0a 09 20 rid, RA.child..
93d0: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
93e0: 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 20 52 on R, revision R
93f0: 41 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e A.. WHERE R.
9400: 72 69 64 20 20 20 20 49 4e 20 24 74 68 65 73 65 rid IN $these
9410: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 t -- Restric
9420: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
9430: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
9440: 41 4e 44 20 20 20 20 52 2e 69 73 64 65 66 61 75 AND R.isdefau
9450: 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d lt -
9460: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 4e 54 - Restrict to NT
9470: 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 DB.. AND R
9480: 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 .dbchild IS NOT
9490: 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c 61 NULL -- and la
94a0: 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 6e st NTDB belongin
94b0: 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 20 g to trunk..
94c0: 41 4e 44 20 20 20 20 52 41 2e 72 69 64 20 3d 20 AND RA.rid =
94d0: 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d R.dbchild -
94e0: 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f - Go directly to
94f0: 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 trunk root..
9500: 20 41 4e 44 20 20 20 20 52 41 2e 63 68 69 6c 64 AND RA.child
9510: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 IS NOT NULL
9520: 2d 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 -- Has primary c
9530: 68 69 6c 64 2e 0a 09 20 20 20 20 41 4e 44 20 20 hild... AND
9540: 20 20 52 41 2e 63 68 69 6c 64 20 49 4e 20 24 74 RA.child IN $t
9550: 68 65 73 65 74 20 20 20 20 20 2d 2d 20 4c 6f 6f heset -- Loo
9560: 70 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 p..}]]. }..
9570: 20 20 23 20 76 61 72 28 64 76 29 20 3d 20 64 69 # var(dv) = di
9580: 63 74 20 28 69 74 65 6d 20 2d 3e 20 6c 69 73 74 ct (item -> list
9590: 20 28 69 74 65 6d 29 29 2c 20 69 74 65 6d 20 20 (item)), item
95a0: 3d 20 6c 69 73 74 20 28 74 79 70 65 20 69 64 29 = list (type id)
95b0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
95c0: 73 75 63 63 65 73 73 6f 72 73 20 7b 64 76 20 72 successors {dv r
95d0: 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 evisions} {..upv
95e0: 61 72 20 31 20 24 64 76 20 64 65 70 65 6e 64 65 ar 1 $dv depende
95f0: 6e 63 69 65 73 0a 09 73 65 74 20 74 68 65 73 65 ncies..set these
9600: 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 t ('[join $revis
9610: 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 0a 09 ions {','}]')...
9620: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 # The following
9630: 63 61 73 65 73 20 73 70 65 63 69 66 79 20 77 68 cases specify wh
9640: 65 6e 20 61 20 72 65 76 69 73 69 6f 6e 20 53 20 en a revision S
9650: 69 73 20 61 20 73 75 63 63 65 73 73 6f 72 0a 09 is a successor..
9660: 23 20 6f 66 20 61 20 72 65 76 69 73 69 6f 6e 20 # of a revision
9670: 52 2e 20 45 61 63 68 20 6f 66 20 74 68 65 20 63 R. Each of the c
9680: 61 73 65 73 20 74 72 61 6e 73 6c 61 74 65 73 20 ases translates
9690: 69 6e 74 6f 20 6f 6e 65 20 6f 66 0a 09 23 20 74 into one of..# t
96a0: 68 65 20 62 72 61 6e 63 68 65 73 20 6f 66 20 74 he branches of t
96b0: 68 65 20 53 51 4c 20 55 4e 49 4f 4e 20 63 6f 6d he SQL UNION com
96c0: 69 6e 67 20 62 65 6c 6f 77 2e 0a 09 23 0a 09 23 ing below...#..#
96d0: 20 28 31 29 20 53 20 63 61 6e 20 62 65 20 61 20 (1) S can be a
96e0: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 primary child of
96f0: 20 52 2c 20 69 2e 65 2e 20 69 6e 20 74 68 65 20 R, i.e. in the
9700: 73 61 6d 65 20 4c 4f 44 2e 20 52 0a 09 23 20 20 same LOD. R..#
9710: 20 20 20 72 65 66 65 72 65 6e 63 65 73 20 53 20 references S
9720: 64 69 72 65 63 74 6c 79 2e 20 52 2e 63 68 69 6c directly. R.chil
9730: 64 20 3d 20 53 28 2e 72 69 64 29 2c 20 69 66 20 d = S(.rid), if
9740: 69 74 20 65 78 69 73 74 73 2e 0a 09 23 0a 09 23 it exists...#..#
9750: 20 28 32 29 20 53 20 63 61 6e 20 62 65 20 61 20 (2) S can be a
9760: 73 65 63 6f 6e 64 61 72 79 2c 20 69 2e 65 2e 20 secondary, i.e.
9770: 62 72 61 6e 63 68 2c 20 63 68 69 6c 64 20 6f 66 branch, child of
9780: 20 52 2e 20 48 65 72 65 20 74 68 65 0a 09 23 20 R. Here the..#
9790: 20 20 20 20 6c 69 6e 6b 20 69 73 20 6d 61 64 65 link is made
97a0: 20 74 68 72 6f 75 67 68 20 74 68 65 20 68 65 6c through the hel
97b0: 70 65 72 20 74 61 62 6c 65 0a 09 23 20 20 20 20 per table..#
97c0: 20 52 45 56 49 53 49 4f 4e 42 52 41 4e 43 48 43 REVISIONBRANCHC
97d0: 48 49 4c 44 52 45 4e 2e 20 52 2e 72 69 64 20 2d HILDREN. R.rid -
97e0: 3e 20 52 42 43 2e 72 69 64 2c 20 52 42 43 2e 62 > RBC.rid, RBC.b
97f0: 72 69 64 20 3d 0a 09 23 20 20 20 20 20 53 28 2e rid =..# S(.
9800: 72 69 64 29 0a 09 23 0a 09 23 20 28 33 29 20 4f rid)..#..# (3) O
9810: 72 69 67 69 6e 61 6c 6c 79 20 74 68 69 73 20 75 riginally this u
9820: 73 65 20 63 61 73 65 20 64 65 66 69 6e 65 64 20 se case defined
9830: 74 68 65 20 72 6f 6f 74 20 6f 66 20 61 20 64 65 the root of a de
9840: 74 61 63 68 65 64 0a 09 23 20 20 20 20 20 4e 54 tached..# NT
9850: 44 42 20 61 73 20 74 68 65 20 73 75 63 63 65 73 DB as the succes
9860: 73 6f 72 20 6f 66 20 74 68 65 20 74 72 75 6e 6b sor of the trunk
9870: 20 72 6f 6f 74 2e 20 54 68 69 73 20 6c 65 61 64 root. This lead
9880: 73 20 74 6f 20 61 0a 09 23 20 20 20 20 20 62 61 s to a..# ba
9890: 64 20 74 61 6e 67 6c 65 20 6c 61 74 65 72 20 6f d tangle later o
98a0: 6e 2e 20 57 69 74 68 20 61 20 64 65 74 61 63 68 n. With a detach
98b0: 65 64 20 4e 54 44 42 20 74 68 65 20 6f 72 69 67 ed NTDB the orig
98c0: 69 6e 61 6c 0a 09 23 20 20 20 20 20 74 72 75 6e inal..# trun
98d0: 6b 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 k root revision
98e0: 77 61 73 20 72 65 6d 6f 76 65 64 20 61 73 20 69 was removed as i
98f0: 72 72 65 6c 65 76 61 6e 74 2c 20 61 6c 6c 6f 77 rrelevant, allow
9900: 69 6e 67 0a 09 23 20 20 20 20 20 74 68 65 20 6e ing..# the n
9910: 6f 6d 69 6e 61 6c 20 72 6f 6f 74 20 74 6f 20 62 ominal root to b
9920: 65 20 6c 61 74 65 72 20 69 6e 20 74 69 6d 65 20 e later in time
9930: 74 68 61 6e 20 74 68 65 20 4e 54 44 42 0a 09 23 than the NTDB..#
9940: 20 20 20 20 20 72 6f 6f 74 2e 20 4e 6f 77 20 73 root. Now s
9950: 65 74 74 69 6e 67 20 74 68 69 73 20 64 65 70 65 etting this depe
9960: 6e 64 65 6e 63 79 20 77 69 6c 6c 20 62 65 20 62 ndency will be b
9970: 61 63 6b 77 61 72 64 20 69 6e 0a 09 23 20 20 20 ackward in..#
9980: 20 20 74 69 6d 65 2e 20 52 45 4d 4f 56 45 44 2e time. REMOVED.
9990: 0a 09 23 0a 09 23 20 28 34 29 20 49 66 20 52 20 ..#..# (4) If R
99a0: 69 73 20 74 68 65 20 6c 61 73 74 20 6f 66 20 74 is the last of t
99b0: 68 65 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e he NTDB revision
99c0: 73 20 77 68 69 63 68 20 62 65 6c 6f 6e 67 20 74 s which belong t
99d0: 6f 0a 09 23 20 20 20 20 20 74 68 65 20 74 72 75 o..# the tru
99e0: 6e 6b 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69 nk, then the pri
99f0: 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 20 74 68 mary child of th
9a00: 65 20 74 72 75 6e 6b 20 72 6f 6f 74 20 28 74 68 e trunk root (th
9a10: 65 0a 09 23 20 20 20 20 20 27 31 2e 32 27 20 72 e..# '1.2' r
9a20: 65 76 69 73 69 6f 6e 29 20 69 73 20 61 20 73 75 evision) is a su
9a30: 63 63 65 73 73 6f 72 2c 20 69 66 20 69 74 20 65 ccessor, if it e
9a40: 78 69 73 74 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 xists....# Note
9a50: 74 68 61 74 20 74 68 65 20 62 72 61 6e 63 68 65 that the branche
9a60: 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 74 s spawned from t
9a70: 68 65 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e he revisions, an
9a80: 64 20 74 68 65 0a 09 23 20 74 61 67 73 20 61 73 d the..# tags as
9a90: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 sociated with th
9aa0: 65 6d 20 61 72 65 20 73 75 63 63 65 73 73 6f 72 em are successor
9ab0: 73 20 61 73 20 77 65 6c 6c 2e 0a 0a 09 66 6f 72 s as well....for
9ac0: 65 61 63 68 20 7b 72 69 64 20 63 68 69 6c 64 7d each {rid child}
9ad0: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 [state run [sub
9ae0: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d st -nocommands -
9af0: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a nobackslashes {.
9b00: 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d 61 -- (1) Prima
9b10: 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 45 ry child.. SE
9b20: 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 2e 63 68 LECT R.rid, R.ch
9b30: 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 ild.. FROM
9b40: 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 revision R..
9b50: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 WHERE R.rid I
9b60: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
9b70: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 Restrict to rev
9b80: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 isions of intere
9b90: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 st.. AND R
9ba0: 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55 .child IS NOT NU
9bb0: 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69 LL -- Has pri
9bc0: 6d 61 72 79 20 63 68 69 6c 64 0a 20 20 20 20 55 mary child. U
9bd0: 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 32 29 20 NION. -- (2)
9be0: 53 65 63 6f 6e 64 61 72 79 20 28 62 72 61 6e 63 Secondary (branc
9bf0: 68 29 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 h) children..
9c00: 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 42 SELECT R.rid, B
9c10: 2e 62 72 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 .brid.. FROM
9c20: 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 revision R, re
9c30: 76 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c visionbranchchil
9c40: 64 72 65 6e 20 42 0a 09 20 20 20 20 57 48 45 52 dren B.. WHER
9c50: 45 20 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 E R.rid IN $t
9c60: 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 heset -- Res
9c70: 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f trict to revisio
9c80: 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 ns of interest..
9c90: 20 20 20 20 41 4e 44 20 20 20 20 52 2e 72 69 64 AND R.rid
9ca0: 20 3d 20 42 2e 72 69 64 20 20 20 20 20 20 20 20 = B.rid
9cb0: 20 20 2d 2d 20 53 65 6c 65 63 74 20 73 75 62 73 -- Select subs
9cc0: 65 74 20 6f 66 20 62 72 61 6e 63 68 20 63 68 69 et of branch chi
9cd0: 6c 64 72 65 6e 0a 20 20 20 20 55 4e 49 4f 4e 0a ldren. UNION.
9ce0: 20 20 20 20 2d 2d 20 28 34 29 20 43 68 69 6c 64 -- (4) Child
9cf0: 20 6f 66 20 74 72 75 6e 6b 20 72 6f 6f 74 20 73 of trunk root s
9d00: 75 63 63 65 73 73 6f 72 20 6f 66 20 6c 61 73 74 uccessor of last
9d10: 20 4e 54 44 42 20 6f 6e 20 74 72 75 6e 6b 2e 0a NTDB on trunk..
9d20: 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 . SELECT R.ri
9d30: 64 2c 20 52 41 2e 63 68 69 6c 64 0a 09 20 20 20 d, RA.child..
9d40: 20 46 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20 52 FROM revision R
9d50: 2c 20 72 65 76 69 73 69 6f 6e 20 52 41 0a 09 20 , revision RA..
9d60: 20 20 20 57 48 45 52 45 20 52 2e 72 69 64 20 20 WHERE R.rid
9d70: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 IN $theset
9d80: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
9d90: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
9da0: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
9db0: 20 52 2e 69 73 64 65 66 61 75 6c 74 20 20 20 20 R.isdefault
9dc0: 20 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 -- Rest
9dd0: 72 69 63 74 20 74 6f 20 4e 54 44 42 0a 09 20 20 rict to NTDB..
9de0: 20 20 41 4e 44 20 20 20 52 2e 64 62 63 68 69 6c AND R.dbchil
9df0: 64 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 d IS NOT NULL
9e00: 2d 2d 20 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 -- and last NTDB
9e10: 20 62 65 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 belonging to tr
9e20: 75 6e 6b 0a 09 20 20 20 20 41 4e 44 20 20 20 52 unk.. AND R
9e30: 41 2e 72 69 64 20 3d 20 52 2e 64 62 63 68 69 6c A.rid = R.dbchil
9e40: 64 20 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 72 d -- Go dir
9e50: 65 63 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 72 ectly to trunk r
9e60: 6f 6f 74 0a 09 20 20 20 20 41 4e 44 20 20 20 52 oot.. AND R
9e70: 41 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e A.child IS NOT N
9e80: 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 ULL -- Has pr
9e90: 69 6d 61 72 79 20 63 68 69 6c 64 2e 0a 09 7d 5d imary child...}]
9ea0: 5d 20 7b 0a 09 20 20 20 20 23 20 43 6f 6e 73 69 ] {.. # Consi
9eb0: 64 65 72 20 6d 6f 76 69 6e 67 20 74 68 69 73 20 der moving this
9ec0: 74 6f 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 to the integrity
9ed0: 20 6d 6f 64 75 6c 65 2e 0a 09 20 20 20 20 69 6e module... in
9ee0: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
9ef0: 24 72 69 64 20 21 3d 20 24 63 68 69 6c 64 7d 20 $rid != $child}
9f00: 7b 52 65 76 69 73 69 6f 6e 20 24 72 69 64 20 64 {Revision $rid d
9f10: 65 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66 epends on itself
9f20: 2e 7d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 .}.. lappend
9f30: 64 65 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 dependencies([li
9f40: 73 74 20 72 65 76 20 24 72 69 64 5d 29 20 5b 6c st rev $rid]) [l
9f50: 69 73 74 20 72 65 76 20 24 63 68 69 6c 64 5d 0a ist rev $child].
9f60: 09 7d 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 64 .}..foreach {rid
9f70: 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 20 72 child} [state r
9f80: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
9f90: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
9fa0: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
9fb0: 43 54 20 52 2e 72 69 64 2c 20 54 2e 74 69 64 0a CT R.rid, T.tid.
9fc0: 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 . FROM revi
9fd0: 73 69 6f 6e 20 52 2c 20 74 61 67 20 54 0a 09 20 sion R, tag T..
9fe0: 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 WHERE R.rid
9ff0: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 IN $theset
a000: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
a010: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
a020: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
a030: 20 20 54 2e 72 65 76 20 3d 20 52 2e 72 69 64 20 T.rev = R.rid
a040: 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 -- Sele
a050: 63 74 20 74 61 67 73 20 61 74 74 61 63 68 65 64 ct tags attached
a060: 20 74 6f 20 74 68 65 6d 0a 09 7d 5d 5d 20 7b 0a to them..}]] {.
a070: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 70 . lappend dep
a080: 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 endencies([list
a090: 72 65 76 20 24 72 69 64 5d 29 20 5b 6c 69 73 74 rev $rid]) [list
a0a0: 20 73 79 6d 3a 3a 74 61 67 20 24 63 68 69 6c 64 sym::tag $child
a0b0: 5d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 7b 72 ]..}..foreach {r
a0c0: 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 65 id child} [state
a0d0: 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 run [subst -noc
a0e0: 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 ommands -nobacks
a0f0: 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 lashes {.. SE
a100: 4c 45 43 54 20 52 2e 72 69 64 2c 20 42 2e 62 69 LECT R.rid, B.bi
a110: 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 d.. FROM re
a120: 76 69 73 69 6f 6e 20 52 2c 20 62 72 61 6e 63 68 vision R, branch
a130: 20 42 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 B.. WHERE R
a140: 2e 72 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 .rid IN $theset
a150: 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 -- Restric
a160: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
a170: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
a180: 41 4e 44 20 20 20 20 42 2e 72 6f 6f 74 20 3d 20 AND B.root =
a190: 52 2e 72 69 64 20 20 20 20 20 20 20 20 20 2d 2d R.rid --
a1a0: 20 53 65 6c 65 63 74 20 62 72 61 6e 63 68 65 73 Select branches
a1b0: 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 attached to the
a1c0: 6d 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 6c 61 m..}]] {.. la
a1d0: 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 ppend dependenci
a1e0: 65 73 28 5b 6c 69 73 74 20 72 65 76 20 24 72 69 es([list rev $ri
a1f0: 64 5d 29 20 5b 6c 69 73 74 20 73 79 6d 3a 3a 62 d]) [list sym::b
a200: 72 61 6e 63 68 20 24 63 68 69 6c 64 5d 0a 09 7d ranch $child]..}
a210: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
a220: 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c # result = l
a230: 69 73 74 20 28 63 68 61 6e 67 65 73 65 74 2d 69 ist (changeset-i
a240: 64 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f d). typemetho
a250: 64 20 63 73 5f 73 75 63 63 65 73 73 6f 72 73 20 d cs_successors
a260: 7b 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 20 20 {revisions} {.
a270: 20 20 20 20 20 20 23 20 54 68 69 73 20 69 73 20 # This is
a280: 61 20 76 61 72 69 61 6e 74 20 6f 66 20 27 73 75 a variant of 'su
a290: 63 63 65 73 73 6f 72 73 27 20 77 68 69 63 68 20 ccessors' which
a2a0: 6d 61 70 73 20 74 68 65 20 6c 6f 77 2d 6c 65 76 maps the low-lev
a2b0: 65 6c 0a 20 20 20 20 20 20 20 20 23 20 64 61 74 el. # dat
a2c0: 61 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74 68 a directly to th
a2d0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 63 68 61 e associated cha
a2e0: 6e 67 65 73 65 74 73 2e 20 49 2e 65 2e 20 69 6e ngesets. I.e. in
a2f0: 73 74 65 61 64 0a 20 20 20 20 20 20 20 20 23 20 stead. #
a300: 6d 69 6c 6c 69 6f 6e 73 20 6f 66 20 64 65 70 65 millions of depe
a310: 6e 64 65 6e 63 79 20 70 61 69 72 73 20 28 69 6e ndency pairs (in
a320: 20 65 78 74 72 65 6d 65 20 63 61 73 65 73 20 28 extreme cases (
a330: 45 78 61 6d 70 6c 65 3a 20 54 63 6c 0a 20 20 20 Example: Tcl.
a340: 20 20 20 20 20 23 20 43 56 53 29 29 20 77 65 20 # CVS)) we
a350: 72 65 74 75 72 6e 20 61 20 76 65 72 79 20 73 68 return a very sh
a360: 6f 72 74 20 61 6e 64 20 6d 75 63 68 20 6d 6f 72 ort and much mor
a370: 65 20 6d 61 6e 61 67 65 61 62 6c 65 20 6c 69 73 e manageable lis
a380: 74 0a 20 20 20 20 20 20 20 20 23 20 6f 66 20 63 t. # of c
a390: 68 61 6e 67 65 73 65 74 73 2e 0a 0a 09 73 65 74 hangesets....set
a3a0: 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 theset ('[join
a3b0: 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d $revisions {','}
a3c0: 5d 27 29 0a 09 72 65 74 75 72 6e 20 5b 73 74 61 ]')..return [sta
a3d0: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e te run [subst -n
a3e0: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 ocommands -nobac
a3f0: 6b 73 6c 61 73 68 65 73 20 7b 0a 20 20 20 20 2d kslashes {. -
a400: 2d 20 28 31 29 20 50 72 69 6d 61 72 79 20 63 68 - (1) Primary ch
a410: 69 6c 64 0a 09 20 20 20 20 53 45 4c 45 43 54 20 ild.. SELECT
a420: 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 C.cid.. FROM
a430: 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 63 73 revision R, cs
a440: 69 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 item CI, changes
a450: 65 74 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 et C.. WHERE
a460: 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 R.rid IN $the
a470: 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 set -- Restr
a480: 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 ict to revisions
a490: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
a4a0: 20 20 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 AND R.child
a4b0: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 IS NOT NULL
a4c0: 2d 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 -- Has primary c
a4d0: 68 69 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 hild.
a4e0: 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d AND CI.iid =
a4f0: 20 52 2e 63 68 69 6c 64 20 20 20 20 20 20 20 2d R.child -
a500: 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 - Select all cha
a510: 6e 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 ngesets.
a520: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 AND C.cid
a530: 20 3d 20 43 49 2e 63 69 64 20 20 20 20 20 20 20 = CI.cid
a540: 20 20 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 -- containing
a550: 74 68 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c the primary chil
a560: 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e d. AN
a570: 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 30 20 D C.type = 0
a580: 20 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 77 -- w
a590: 68 69 63 68 20 61 72 65 20 72 65 76 69 73 69 6f hich are revisio
a5a0: 6e 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 20 n changesets.
a5b0: 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 32 UNION. -- (2
a5c0: 29 20 53 65 63 6f 6e 64 61 72 79 20 28 62 72 61 ) Secondary (bra
a5d0: 6e 63 68 29 20 63 68 69 6c 64 72 65 6e 0a 09 20 nch) children..
a5e0: 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a SELECT C.cid.
a5f0: 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 . FROM revi
a600: 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e sion R, revision
a610: 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 42 branchchildren B
a620: 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 , csitem CI, cha
a630: 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 ngeset C.. WH
a640: 45 52 45 20 20 52 2e 72 69 64 20 20 20 49 4e 20 ERE R.rid IN
a650: 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 $theset -- R
a660: 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 estrict to revis
a670: 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 ions of interest
a680: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e 72 .. AND R.r
a690: 69 64 20 3d 20 42 2e 72 69 64 20 20 20 20 20 20 id = B.rid
a6a0: 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 73 75 -- Select su
a6b0: 62 73 65 74 20 6f 66 20 62 72 61 6e 63 68 20 63 bset of branch c
a6c0: 68 69 6c 64 72 65 6e 0a 20 20 20 20 20 20 20 20 hildren.
a6d0: 20 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 AND CI.ii
a6e0: 64 20 3d 20 42 2e 62 72 69 64 20 20 20 20 20 20 d = B.brid
a6f0: 20 20 2d 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 -- Select all
a700: 63 68 61 6e 67 65 73 65 74 73 0a 20 20 20 20 20 changesets.
a710: 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e AND C.
a720: 63 69 64 20 3d 20 43 49 2e 63 69 64 09 20 20 2d cid = CI.cid. -
a730: 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 - containing the
a740: 20 62 72 61 6e 63 68 0a 20 20 20 20 20 20 20 20 branch.
a750: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 AND C.typ
a760: 65 20 3d 20 30 09 09 20 20 2d 2d 20 77 68 69 63 e = 0.. -- whic
a770: 68 20 61 72 65 20 72 65 76 69 73 69 6f 6e 20 63 h are revision c
a780: 68 61 6e 67 65 73 65 74 73 0a 20 20 20 20 55 4e hangesets. UN
a790: 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 34 29 20 43 ION. -- (4) C
a7a0: 68 69 6c 64 20 6f 66 20 74 72 75 6e 6b 20 72 6f hild of trunk ro
a7b0: 6f 74 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 ot successor of
a7c0: 6c 61 73 74 20 4e 54 44 42 20 6f 6e 20 74 72 75 last NTDB on tru
a7d0: 6e 6b 2e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 nk... SELECT
a7e0: 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 C.cid.. FROM
a7f0: 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 revision R, re
a800: 76 69 73 69 6f 6e 20 52 41 2c 20 63 73 69 74 65 vision RA, csite
a810: 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 m CI, changeset
a820: 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e C.. WHERE R.
a830: 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65 74 rid IN $theset
a840: 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 -- Restric
a850: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f t to revisions o
a860: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
a870: 41 4e 44 20 20 20 20 52 2e 69 73 64 65 66 61 75 AND R.isdefau
a880: 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d lt -
a890: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 4e 54 - Restrict to NT
a8a0: 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 DB.. AND R
a8b0: 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 .dbchild IS NOT
a8c0: 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c 61 NULL -- and la
a8d0: 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 6e st NTDB belongin
a8e0: 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 20 g to trunk..
a8f0: 41 4e 44 20 20 20 20 52 41 2e 72 69 64 20 3d 20 AND RA.rid =
a900: 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d R.dbchild -
a910: 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f - Go directly to
a920: 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 trunk root..
a930: 20 41 4e 44 20 20 20 20 52 41 2e 63 68 69 6c 64 AND RA.child
a940: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 IS NOT NULL
a950: 2d 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 -- Has primary c
a960: 68 69 6c 64 2e 0a 20 20 20 20 20 20 20 20 20 20 hild..
a970: 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 AND CI.iid
a980: 3d 20 52 41 2e 63 68 69 6c 64 20 20 20 20 20 20 = RA.child
a990: 20 2d 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 -- Select all c
a9a0: 68 61 6e 67 65 73 65 74 73 0a 20 20 20 20 20 20 hangesets.
a9b0: 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e 63 AND C.c
a9c0: 69 64 20 3d 20 43 49 2e 63 69 64 09 20 20 20 2d id = CI.cid. -
a9d0: 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 - containing the
a9e0: 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 20 primary child.
a9f0: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
aa00: 20 20 43 2e 74 79 70 65 20 3d 20 30 09 09 20 20 C.type = 0..
aa10: 20 2d 2d 20 77 68 69 63 68 20 61 72 65 20 72 65 -- which are re
aa20: 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 vision changeset
aa30: 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 09 20 20 20 s. UNION..
aa40: 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 SELECT C.cid..
aa50: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 FROM revisi
aa60: 6f 6e 20 52 2c 20 74 61 67 20 54 2c 20 63 73 69 on R, tag T, csi
aa70: 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 tem CI, changese
aa80: 74 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 t C.. WHERE
aa90: 52 2e 72 69 64 20 69 6e 20 24 74 68 65 73 65 74 R.rid in $theset
aaa0: 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 -- Restr
aab0: 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 ict to revisions
aac0: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
aad0: 20 20 41 4e 44 20 20 20 20 54 2e 72 65 76 20 3d AND T.rev =
aae0: 20 52 2e 72 69 64 09 20 20 20 2d 2d 20 53 65 6c R.rid. -- Sel
aaf0: 65 63 74 20 74 61 67 73 20 61 74 74 61 63 68 65 ect tags attache
ab00: 64 20 74 6f 20 74 68 65 6d 0a 20 20 20 20 20 20 d to them.
ab10: 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 49 2e AND CI.
ab20: 69 69 64 20 3d 20 54 2e 74 69 64 20 20 20 20 20 iid = T.tid
ab30: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 61 -- Select a
ab40: 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 ll changesets.
ab50: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 AND
ab60: 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 09 C.cid = CI.cid.
ab70: 20 20 20 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 -- containing
ab80: 20 74 68 65 20 74 61 67 73 0a 20 20 20 20 20 20 the tags.
ab90: 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 AND C.t
aba0: 79 70 65 20 3d 20 31 09 09 20 20 20 2d 2d 20 77 ype = 1.. -- w
abb0: 68 69 63 68 20 61 72 65 20 74 61 67 20 63 68 61 hich are tag cha
abc0: 6e 67 65 73 65 74 73 0a 20 20 20 20 55 4e 49 4f ngesets. UNIO
abd0: 4e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e N.. SELECT C.
abe0: 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 cid.. FROM
abf0: 72 65 76 69 73 69 6f 6e 20 52 2c 20 62 72 61 6e revision R, bran
ac00: 63 68 20 42 2c 20 63 73 69 74 65 6d 20 43 49 2c ch B, csitem CI,
ac10: 20 63 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 changeset C..
ac20: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 69 WHERE R.rid i
ac30: 6e 20 24 74 68 65 73 65 74 20 20 20 20 20 20 20 n $theset
ac40: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 -- Restrict to
ac50: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 revisions of int
ac60: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 erest.. AND
ac70: 20 20 42 2e 72 6f 6f 74 20 3d 20 52 2e 72 69 64 B.root = R.rid
ac80: 09 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 62 72 . -- Select br
ac90: 61 6e 63 68 65 73 20 61 74 74 61 63 68 65 64 20 anches attached
aca0: 74 6f 20 74 68 65 6d 0a 20 20 20 20 20 20 20 20 to them.
acb0: 20 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 AND CI.ii
acc0: 64 20 3d 20 42 2e 62 69 64 20 20 20 20 20 20 20 d = B.bid
acd0: 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 61 6c 6c -- Select all
ace0: 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20 20 20 changesets.
acf0: 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 AND C
ad00: 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 09 20 20 .cid = CI.cid.
ad10: 20 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 -- containing t
ad20: 68 65 20 62 72 61 6e 63 68 65 73 0a 20 20 20 20 he branches.
ad30: 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 AND C
ad40: 2e 74 79 70 65 20 3d 20 32 09 09 20 20 20 2d 2d .type = 2.. --
ad50: 20 77 68 69 63 68 20 61 72 65 20 62 72 61 6e 63 which are branc
ad60: 68 20 63 68 61 6e 67 65 73 65 74 73 0a 09 7d 5d h changesets..}]
ad70: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 ]. }.. # r
ad80: 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f 6c 20 6e esult = symbol n
ad90: 61 6d 65 0a 20 20 20 20 74 79 70 65 6d 65 74 68 ame. typemeth
ada0: 6f 64 20 63 73 5f 6c 6f 64 20 7b 72 65 76 69 73 od cs_lod {revis
adb0: 69 6f 6e 73 7d 20 7b 0a 09 23 20 44 65 74 65 72 ions} {..# Deter
adc0: 6d 69 6e 65 73 20 74 68 65 20 6e 61 6d 65 20 6f mines the name o
add0: 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 77 68 69 f the symbol whi
ade0: 63 68 20 69 73 20 74 68 65 20 6c 69 6e 65 20 6f ch is the line o
adf0: 66 0a 09 23 20 64 65 76 65 6c 6f 70 6d 65 6e 74 f..# development
ae00: 20 66 6f 72 20 74 68 65 20 72 65 76 69 73 69 6f for the revisio
ae10: 6e 73 20 69 6e 20 61 20 63 68 61 6e 67 65 73 65 ns in a changese
ae20: 74 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 t....set theset
ae30: 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f ('[join $revisio
ae40: 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 ns {','}]')..ret
ae50: 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b urn [state run [
ae60: 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 subst -nocommand
ae70: 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 s -nobackslashes
ae80: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 0a 09 {.. SELECT..
ae90: 20 20 20 20 44 49 53 54 49 4e 43 54 20 4c 2e 6e DISTINCT L.n
aea0: 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 ame.. FROM
aeb0: 72 65 76 69 73 69 6f 6e 20 52 2c 20 73 79 6d 62 revision R, symb
aec0: 6f 6c 20 4c 0a 09 20 20 20 20 57 48 45 52 45 20 ol L.. WHERE
aed0: 20 52 2e 72 69 64 20 69 6e 20 24 74 68 65 73 65 R.rid in $these
aee0: 74 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 t -- Rest
aef0: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e rict to revision
af00: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
af10: 20 20 20 41 4e 44 20 20 20 20 4c 2e 73 69 64 20 AND L.sid
af20: 3d 20 52 2e 6c 6f 64 20 20 20 20 20 20 20 20 20 = R.lod
af30: 20 20 2d 2d 20 47 65 74 20 6c 6f 64 20 73 79 6d -- Get lod sym
af40: 62 6f 6c 20 6f 66 20 72 65 76 69 73 69 6f 6e 0a bol of revision.
af50: 09 7d 5d 5d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 .}]]. }.}..#
af60: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
af70: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
af80: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
af90: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 48 ###########.## H
afa0: 65 6c 70 65 72 20 73 69 6e 67 6c 65 74 6f 6e 2e elper singleton.
afb0: 20 43 6f 6d 6d 61 6e 64 73 20 66 6f 72 20 74 61 Commands for ta
afc0: 67 20 73 79 6d 62 6f 6c 20 63 68 61 6e 67 65 73 g symbol changes
afd0: 65 74 73 2e 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 ets...snit::type
afe0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
aff0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a mport::cvs::proj
b000: 65 63 74 3a 3a 72 65 76 3a 3a 73 79 6d 3a 3a 74 ect::rev::sym::t
b010: 61 67 20 7b 0a 20 20 20 20 74 79 70 65 6d 65 74 ag {. typemet
b020: 68 6f 64 20 62 79 72 65 76 69 73 69 6f 6e 20 7b hod byrevision {
b030: 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 } { return 0 }.
b040: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 79 typemethod by
b050: 73 79 6d 62 6f 6c 20 20 20 7b 7d 20 7b 20 72 65 symbol {} { re
b060: 74 75 72 6e 20 31 20 7d 0a 20 20 20 20 74 79 70 turn 1 }. typ
b070: 65 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 20 emethod istag
b080: 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 {} { return 1
b090: 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }. typemetho
b0a0: 64 20 69 73 62 72 61 6e 63 68 20 20 20 7b 7d 20 d isbranch {}
b0b0: 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a 20 20 { return 0 }..
b0c0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 74 72 typemethod str
b0d0: 20 7b 74 61 67 7d 20 7b 0a 09 73 74 72 75 63 74 {tag} {..struct
b0e0: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 73 ::list assign [s
b0f0: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 tate run {..
b100: 53 45 4c 45 43 54 20 53 2e 6e 61 6d 65 2c 20 46 SELECT S.name, F
b110: 2e 6e 61 6d 65 2c 20 50 2e 6e 61 6d 65 0a 09 20 .name, P.name..
b120: 20 20 20 46 52 4f 4d 20 20 20 74 61 67 20 54 2c FROM tag T,
b130: 20 73 79 6d 62 6f 6c 20 53 2c 20 66 69 6c 65 20 symbol S, file
b140: 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 20 20 F, project P..
b150: 20 20 57 48 45 52 45 20 20 54 2e 74 69 64 20 3d WHERE T.tid =
b160: 20 24 74 61 67 20 20 20 2d 2d 20 46 69 6e 64 20 $tag -- Find
b170: 73 70 65 63 69 66 69 65 64 20 74 61 67 0a 09 20 specified tag..
b180: 20 20 20 41 4e 44 20 20 20 20 46 2e 66 69 64 20 AND F.fid
b190: 3d 20 54 2e 66 69 64 20 20 2d 2d 20 47 65 74 20 = T.fid -- Get
b1a0: 66 69 6c 65 20 6f 66 20 74 61 67 0a 09 20 20 20 file of tag..
b1b0: 20 41 4e 44 20 20 20 20 50 2e 70 69 64 20 3d 20 AND P.pid =
b1c0: 46 2e 70 69 64 20 20 2d 2d 20 47 65 74 20 70 72 F.pid -- Get pr
b1d0: 6f 6a 65 63 74 20 6f 66 20 66 69 6c 65 0a 09 20 oject of file..
b1e0: 20 20 20 41 4e 44 20 20 20 20 53 2e 73 69 64 20 AND S.sid
b1f0: 3d 20 54 2e 73 69 64 20 20 2d 2d 20 47 65 74 20 = T.sid -- Get
b200: 73 79 6d 62 6f 6c 20 6f 66 20 74 61 67 0a 09 7d symbol of tag..}
b210: 5d 20 73 6e 61 6d 65 20 66 6e 61 6d 65 20 70 6e ] sname fname pn
b220: 61 6d 65 0a 09 72 65 74 75 72 6e 20 22 24 70 6e ame..return "$pn
b230: 61 6d 65 2f 54 27 24 7b 73 6e 61 6d 65 7d 27 3a ame/T'${sname}':
b240: 3a 24 66 6e 61 6d 65 22 0a 20 20 20 20 7d 0a 0a :$fname". }..
b250: 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c # result = l
b260: 69 73 74 20 28 6d 69 6e 74 69 6d 65 2c 20 6d 61 ist (mintime, ma
b270: 78 74 69 6d 65 29 0a 20 20 20 20 74 79 70 65 6d xtime). typem
b280: 65 74 68 6f 64 20 74 69 6d 65 72 61 6e 67 65 20 ethod timerange
b290: 7b 74 61 67 73 7d 20 7b 0a 09 23 20 54 68 65 20 {tags} {..# The
b2a0: 72 61 6e 67 65 20 69 73 20 64 65 66 69 6e 65 64 range is defined
b2b0: 20 61 73 20 74 68 65 20 72 61 6e 67 65 20 6f 66 as the range of
b2c0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 74 the revisions t
b2d0: 68 65 20 74 61 67 73 0a 09 23 20 61 72 65 20 61 he tags..# are a
b2e0: 74 74 61 63 68 65 64 20 74 6f 2e 0a 0a 09 73 65 ttached to....se
b2f0: 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e t theset ('[join
b300: 20 24 74 61 67 73 20 7b 27 2c 27 7d 5d 27 29 0a $tags {','}]').
b310: 09 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 .return [state r
b320: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
b330: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
b340: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
b350: 43 54 20 4d 49 4e 28 52 2e 64 61 74 65 29 2c 20 CT MIN(R.date),
b360: 4d 41 58 28 52 2e 64 61 74 65 29 0a 09 20 20 20 MAX(R.date)..
b370: 20 46 52 4f 4d 20 20 20 74 61 67 20 54 2c 20 72 FROM tag T, r
b380: 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 evision R.. W
b390: 48 45 52 45 20 20 54 2e 74 69 64 20 49 4e 20 24 HERE T.tid IN $
b3a0: 74 68 65 73 65 74 20 20 2d 2d 20 52 65 73 74 72 theset -- Restr
b3b0: 69 63 74 20 74 6f 20 74 61 67 73 20 6f 66 20 69 ict to tags of i
b3c0: 6e 74 65 72 65 73 74 0a 20 20 20 20 20 20 20 20 nterest.
b3d0: 20 20 20 20 41 4e 44 20 20 20 20 52 2e 72 69 64 AND R.rid
b3e0: 20 3d 20 54 2e 72 65 76 20 20 20 20 20 2d 2d 20 = T.rev --
b3f0: 53 65 6c 65 63 74 20 74 61 67 20 70 61 72 65 6e Select tag paren
b400: 74 20 72 65 76 69 73 69 6f 6e 73 0a 09 7d 5d 5d t revisions..}]]
b410: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 76 61 . }.. # va
b420: 72 28 64 76 29 20 3d 20 64 69 63 74 20 28 69 74 r(dv) = dict (it
b430: 65 6d 20 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d em -> list (item
b440: 29 29 2c 20 69 74 65 6d 20 20 3d 20 6c 69 73 74 )), item = list
b450: 20 28 74 79 70 65 20 69 64 29 0a 20 20 20 20 74 (type id). t
b460: 79 70 65 6d 65 74 68 6f 64 20 73 75 63 63 65 73 ypemethod succes
b470: 73 6f 72 73 20 7b 64 76 20 74 61 67 73 7d 20 7b sors {dv tags} {
b480: 0a 09 23 20 54 61 67 73 20 68 61 76 65 20 6e 6f ..# Tags have no
b490: 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 09 72 65 successors...re
b4a0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
b4b0: 23 20 72 65 73 75 6c 74 20 3d 20 34 2d 6c 69 73 # result = 4-lis
b4c0: 74 20 28 69 74 65 6d 74 79 70 65 20 69 74 65 6d t (itemtype item
b4d0: 69 64 20 6e 65 78 74 69 74 65 6d 74 79 70 65 20 id nextitemtype
b4e0: 6e 65 78 74 69 74 65 6d 69 64 20 2e 2e 2e 29 0a nextitemid ...).
b4f0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c typemethod l
b500: 6f 6f 70 73 20 7b 74 61 67 73 7d 20 7b 0a 09 23 oops {tags} {..#
b510: 20 54 61 67 73 20 68 61 76 65 20 6e 6f 20 73 75 Tags have no su
b520: 63 63 65 73 73 6f 72 73 2c 20 74 68 65 72 65 66 ccessors, theref
b530: 6f 72 65 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 ore cannot cause
b540: 20 6c 6f 6f 70 73 0a 09 72 65 74 75 72 6e 20 7b loops..return {
b550: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 }. }.. # r
b560: 65 73 75 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 esult = list (ch
b570: 61 6e 67 65 73 65 74 2d 69 64 29 0a 20 20 20 20 angeset-id).
b580: 74 79 70 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 typemethod cs_su
b590: 63 63 65 73 73 6f 72 73 20 7b 74 61 67 73 7d 20 ccessors {tags}
b5a0: 7b 0a 09 23 20 54 61 67 73 20 68 61 76 65 20 6e {..# Tags have n
b5b0: 6f 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 09 72 o successors...r
b5c0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
b5d0: 20 23 20 72 65 73 75 6c 74 20 3d 20 73 79 6d 62 # result = symb
b5e0: 6f 6c 20 6e 61 6d 65 0a 20 20 20 20 74 79 70 65 ol name. type
b5f0: 6d 65 74 68 6f 64 20 63 73 5f 6c 6f 64 20 7b 74 method cs_lod {t
b600: 61 67 73 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d ags} {..# Determ
b610: 69 6e 65 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 ines the name of
b620: 20 74 68 65 20 73 79 6d 62 6f 6c 20 77 68 69 63 the symbol whic
b630: 68 20 69 73 20 74 68 65 20 6c 69 6e 65 20 6f 66 h is the line of
b640: 0a 09 23 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 ..# development
b650: 66 6f 72 20 74 68 65 20 74 61 67 73 20 69 6e 20 for the tags in
b660: 61 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a 09 73 a changeset....s
b670: 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 et theset ('[joi
b680: 6e 20 24 74 61 67 73 20 7b 27 2c 27 7d 5d 27 29 n $tags {','}]')
b690: 0a 09 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 ..return [state
b6a0: 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f run [subst -noco
b6b0: 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c mmands -nobacksl
b6c0: 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c ashes {.. SEL
b6d0: 45 43 54 0a 09 20 20 20 20 44 49 53 54 49 4e 43 ECT.. DISTINC
b6e0: 54 20 4c 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 T L.name.. FR
b6f0: 4f 4d 20 20 20 74 61 67 20 54 2c 20 73 79 6d 62 OM tag T, symb
b700: 6f 6c 20 4c 0a 09 20 20 20 20 57 48 45 52 45 20 ol L.. WHERE
b710: 20 54 2e 74 69 64 20 69 6e 20 24 74 68 65 73 65 T.tid in $these
b720: 74 20 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 t -- Rest
b730: 72 69 63 74 20 74 6f 20 74 61 67 73 20 6f 66 20 rict to tags of
b740: 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e interest.. AN
b750: 44 20 20 20 20 4c 2e 73 69 64 20 3d 20 54 2e 6c D L.sid = T.l
b760: 6f 64 20 20 20 20 20 20 20 20 20 20 20 2d 2d 20 od --
b770: 47 65 74 20 6c 6f 64 20 73 79 6d 62 6f 6c 20 6f Get lod symbol o
b780: 66 20 74 61 67 0a 09 7d 5d 5d 0a 20 20 20 20 7d f tag..}]]. }
b790: 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 .}..# # ## ### #
b7a0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
b7b0: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 ########### ####
b7c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
b7d0: 23 0a 23 23 20 48 65 6c 70 65 72 20 73 69 6e 67 #.## Helper sing
b7e0: 6c 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e 64 73 20 leton. Commands
b7f0: 66 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f for branch symbo
b800: 6c 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a 73 l changesets...s
b810: 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a nit::type ::vc::
b820: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
b830: 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 cvs::project::re
b840: 76 3a 3a 73 79 6d 3a 3a 62 72 61 6e 63 68 20 7b v::sym::branch {
b850: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
b860: 62 79 72 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 20 byrevision {} {
b870: 72 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 return 0 }. t
b880: 79 70 65 6d 65 74 68 6f 64 20 62 79 73 79 6d 62 ypemethod bysymb
b890: 6f 6c 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e ol {} { return
b8a0: 20 31 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 1 }. typemet
b8b0: 68 6f 64 20 69 73 74 61 67 20 20 20 20 20 20 7b hod istag {
b8c0: 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 } { return 0 }.
b8d0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 typemethod is
b8e0: 62 72 61 6e 63 68 20 20 20 7b 7d 20 7b 20 72 65 branch {} { re
b8f0: 74 75 72 6e 20 31 20 7d 0a 0a 20 20 20 20 74 79 turn 1 }.. ty
b900: 70 65 6d 65 74 68 6f 64 20 73 74 72 20 7b 62 72 pemethod str {br
b910: 61 6e 63 68 7d 20 7b 0a 09 73 74 72 75 63 74 3a anch} {..struct:
b920: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 73 74 :list assign [st
b930: 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 ate run {.. S
b940: 45 4c 45 43 54 20 53 2e 6e 61 6d 65 2c 20 46 2e ELECT S.name, F.
b950: 6e 61 6d 65 2c 20 50 2e 6e 61 6d 65 0a 09 20 20 name, P.name..
b960: 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 FROM branch
b970: 42 2c 20 73 79 6d 62 6f 6c 20 53 2c 20 66 69 6c B, symbol S, fil
b980: 65 20 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 e F, project P..
b990: 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 WHERE B.bid
b9a0: 20 3d 20 24 62 72 61 6e 63 68 20 20 2d 2d 20 46 = $branch -- F
b9b0: 69 6e 64 20 73 70 65 63 69 66 69 65 64 20 62 72 ind specified br
b9c0: 61 6e 63 68 0a 09 20 20 20 20 41 4e 44 20 20 20 anch.. AND
b9d0: 20 46 2e 66 69 64 20 3d 20 42 2e 66 69 64 20 20 F.fid = B.fid
b9e0: 20 20 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 -- Get file of
b9f0: 20 62 72 61 6e 63 68 0a 09 20 20 20 20 41 4e 44 branch.. AND
ba00: 20 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70 69 P.pid = F.pi
ba10: 64 20 20 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a d -- Get proj
ba20: 65 63 74 20 6f 66 20 66 69 6c 65 0a 09 20 20 20 ect of file..
ba30: 20 41 4e 44 20 20 20 20 53 2e 73 69 64 20 3d 20 AND S.sid =
ba40: 42 2e 73 69 64 20 20 20 20 2d 2d 20 47 65 74 20 B.sid -- Get
ba50: 73 79 6d 62 6f 6c 20 6f 66 20 62 72 61 6e 63 68 symbol of branch
ba60: 0a 09 7d 5d 20 73 6e 61 6d 65 20 66 6e 61 6d 65 ..}] sname fname
ba70: 20 70 6e 61 6d 65 0a 09 72 65 74 75 72 6e 20 22 pname..return "
ba80: 24 70 6e 61 6d 65 2f 42 27 24 7b 73 6e 61 6d 65 $pname/B'${sname
ba90: 7d 27 3a 3a 24 66 6e 61 6d 65 22 0a 20 20 20 20 }'::$fname".
baa0: 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 }.. # result
bab0: 3d 20 6c 69 73 74 20 28 6d 69 6e 74 69 6d 65 2c = list (mintime,
bac0: 20 6d 61 78 74 69 6d 65 29 0a 20 20 20 20 74 79 maxtime). ty
bad0: 70 65 6d 65 74 68 6f 64 20 74 69 6d 65 72 61 6e pemethod timeran
bae0: 67 65 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b 0a ge {branches} {.
baf0: 09 23 20 54 68 65 20 72 61 6e 67 65 20 6f 66 20 .# The range of
bb00: 61 20 62 72 61 6e 63 68 20 69 73 20 64 65 66 69 a branch is defi
bb10: 6e 65 64 20 61 73 20 74 68 65 20 72 61 6e 67 65 ned as the range
bb20: 20 6f 66 20 74 68 65 0a 09 23 20 72 65 76 69 73 of the..# revis
bb30: 69 6f 6e 73 20 74 68 65 20 62 72 61 6e 63 68 65 ions the branche
bb40: 73 20 61 72 65 20 73 70 61 77 6e 65 64 20 62 79 s are spawned by
bb50: 2e 20 4e 4f 54 45 20 68 6f 77 65 76 65 72 20 74 . NOTE however t
bb60: 68 61 74 20 74 68 65 0a 09 23 20 62 72 61 6e 63 hat the..# branc
bb70: 68 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 hes associated w
bb80: 69 74 68 20 61 20 64 65 74 61 63 68 65 64 20 4e ith a detached N
bb90: 54 44 42 20 77 69 6c 6c 20 68 61 76 65 20 6e 6f TDB will have no
bba0: 20 72 6f 6f 74 0a 09 23 20 73 70 61 77 6e 69 6e root..# spawnin
bbb0: 67 20 74 68 65 6d 2c 20 68 65 6e 63 65 20 74 68 g them, hence th
bbc0: 65 79 20 68 61 76 65 20 6e 6f 20 72 65 61 6c 20 ey have no real
bbd0: 74 69 6d 65 72 61 6e 67 65 20 61 6e 79 0a 09 23 timerange any..#
bbe0: 20 6c 6f 6e 67 65 72 2e 20 42 79 20 75 73 69 6e longer. By usin
bbf0: 67 20 30 20 77 65 20 70 75 74 20 74 68 65 6d 20 g 0 we put them
bc00: 69 6e 20 66 72 6f 6e 74 20 6f 66 20 65 76 65 72 in front of ever
bc10: 79 74 68 69 6e 67 20 65 6c 73 65 2c 0a 09 23 20 ything else,..#
bc20: 61 73 20 74 68 65 79 20 6c 6f 67 69 63 61 6c 6c as they logicall
bc30: 79 20 61 72 65 2e 0a 0a 09 73 65 74 20 74 68 65 y are....set the
bc40: 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 set ('[join $bra
bc50: 6e 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 nches {','}]')..
bc60: 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 return [state ru
bc70: 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d n [subst -nocomm
bc80: 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 ands -nobackslas
bc90: 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 hes {.. SELEC
bca0: 54 20 49 46 4e 55 4c 4c 28 4d 49 4e 28 52 2e 64 T IFNULL(MIN(R.d
bcb0: 61 74 65 29 2c 30 29 2c 20 49 46 4e 55 4c 4c 28 ate),0), IFNULL(
bcc0: 4d 41 58 28 52 2e 64 61 74 65 29 2c 30 29 0a 09 MAX(R.date),0)..
bcd0: 20 20 20 20 46 52 4f 4d 20 20 62 72 61 6e 63 68 FROM branch
bce0: 20 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 B, revision R..
bcf0: 20 20 20 20 57 48 45 52 45 20 42 2e 62 69 64 20 WHERE B.bid
bd00: 49 4e 20 24 74 68 65 73 65 74 20 20 20 2d 2d 20 IN $theset --
bd10: 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e Restrict to bran
bd20: 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 ches of interest
bd30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 . AND
bd40: 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 6f 6f R.rid = B.roo
bd50: 74 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 t -- Select
bd60: 62 72 61 6e 63 68 20 70 61 72 65 6e 74 20 72 65 branch parent re
bd70: 76 69 73 69 6f 6e 73 0a 09 7d 5d 5d 0a 20 20 20 visions..}]].
bd80: 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 }.. # result
bd90: 20 3d 20 34 2d 6c 69 73 74 20 28 69 74 65 6d 74 = 4-list (itemt
bda0: 79 70 65 20 69 74 65 6d 69 64 20 6e 65 78 74 69 ype itemid nexti
bdb0: 74 65 6d 74 79 70 65 20 6e 65 78 74 69 74 65 6d temtype nextitem
bdc0: 69 64 20 2e 2e 2e 29 0a 20 20 20 20 74 79 70 65 id ...). type
bdd0: 6d 65 74 68 6f 64 20 6c 6f 6f 70 73 20 7b 62 72 method loops {br
bde0: 61 6e 63 68 65 73 7d 20 7b 0a 09 23 20 4e 6f 74 anches} {..# Not
bdf0: 65 3a 20 52 65 76 69 73 69 6f 6e 73 20 61 6e 64 e: Revisions and
be00: 20 74 61 67 73 20 63 61 6e 6e 6f 74 20 63 61 75 tags cannot cau
be10: 73 65 20 74 68 65 20 6c 6f 6f 70 2e 20 42 65 69 se the loop. Bei
be20: 6e 67 20 6f 66 20 61 0a 09 23 20 66 75 6e 64 61 ng of a..# funda
be30: 6d 65 6e 74 61 6c 6c 79 20 64 69 66 66 65 72 65 mentally differe
be40: 6e 74 20 74 79 70 65 20 74 68 65 79 20 63 61 6e nt type they can
be50: 6e 6f 74 20 62 65 20 69 6e 20 74 68 65 20 69 6e not be in the in
be60: 63 6f 6d 69 6e 67 0a 09 23 20 73 65 74 20 6f 66 coming..# set of
be70: 20 69 64 73 2e 0a 0a 09 73 65 74 20 74 68 65 73 ids....set thes
be80: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e et ('[join $bran
be90: 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 ches {','}]')..r
bea0: 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e eturn [state run
beb0: 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 [subst -nocomma
bec0: 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 nds -nobackslash
bed0: 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 es {.. SELECT
bee0: 20 42 2e 62 69 64 2c 20 42 58 2e 62 69 64 0a 09 B.bid, BX.bid..
bef0: 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 FROM branc
bf00: 68 20 42 2c 20 70 72 65 66 65 72 65 64 70 61 72 h B, preferedpar
bf10: 65 6e 74 20 50 2c 20 62 72 61 6e 63 68 20 42 58 ent P, branch BX
bf20: 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 .. WHERE B.b
bf30: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 id IN $theset
bf40: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 -- Restrict to b
bf50: 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 ranches of inter
bf60: 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 est.. AND
bf70: 42 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 B.sid = P.pid
bf80: 20 20 20 2d 2d 20 47 65 74 20 74 68 65 20 70 72 -- Get the pr
bf90: 65 66 65 72 65 64 20 62 72 61 6e 63 68 65 73 20 efered branches
bfa0: 76 69 61 0a 09 20 20 20 20 41 4e 44 20 20 20 20 via.. AND
bfb0: 42 58 2e 73 69 64 20 3d 20 50 2e 73 69 64 20 20 BX.sid = P.sid
bfc0: 20 20 20 2d 2d 20 74 68 65 20 62 72 61 6e 63 68 -- the branch
bfd0: 20 73 79 6d 62 6f 6c 73 0a 09 20 20 20 20 41 4e symbols.. AN
bfe0: 44 20 20 20 20 42 58 2e 62 69 64 20 49 4e 20 24 D BX.bid IN $
bff0: 74 68 65 73 65 74 20 20 2d 2d 20 4c 6f 6f 70 0a theset -- Loop.
c000: 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 .}]]. }..
c010: 23 20 76 61 72 28 64 76 29 20 3d 20 64 69 63 74 # var(dv) = dict
c020: 20 28 69 74 65 6d 20 2d 3e 20 6c 69 73 74 20 28 (item -> list (
c030: 69 74 65 6d 29 29 2c 20 69 74 65 6d 20 20 3d 20 item)), item =
c040: 6c 69 73 74 20 28 74 79 70 65 20 69 64 29 0a 20 list (type id).
c050: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 75 typemethod su
c060: 63 63 65 73 73 6f 72 73 20 7b 64 76 20 62 72 61 ccessors {dv bra
c070: 6e 63 68 65 73 7d 20 7b 0a 09 75 70 76 61 72 20 nches} {..upvar
c080: 31 20 24 64 76 20 64 65 70 65 6e 64 65 6e 63 69 1 $dv dependenci
c090: 65 73 0a 09 23 20 54 68 65 20 66 69 72 73 74 20 es..# The first
c0a0: 72 65 76 69 73 69 6f 6e 20 63 6f 6d 6d 69 74 74 revision committ
c0b0: 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20 ed on a branch,
c0c0: 61 6e 64 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 and all branches
c0d0: 0a 09 23 20 61 6e 64 20 74 61 67 73 20 77 68 69 ..# and tags whi
c0e0: 63 68 20 68 61 76 65 20 69 74 20 61 73 20 74 68 ch have it as th
c0f0: 65 69 72 20 70 72 65 66 65 72 65 64 20 70 61 72 eir prefered par
c100: 65 6e 74 20 61 72 65 20 74 68 65 0a 09 23 20 73 ent are the..# s
c110: 75 63 63 65 73 73 6f 72 73 20 6f 66 20 61 20 62 uccessors of a b
c120: 72 61 6e 63 68 2e 0a 0a 09 73 65 74 20 74 68 65 ranch....set the
c130: 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 set ('[join $bra
c140: 6e 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 nches {','}]')..
c150: 66 6f 72 65 61 63 68 20 7b 62 69 64 20 63 68 69 foreach {bid chi
c160: 6c 64 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b ld} [state run [
c170: 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 subst -nocommand
c180: 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 s -nobackslashes
c190: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 {.. SELECT B
c1a0: 2e 62 69 64 2c 20 52 2e 72 69 64 0a 09 20 20 20 .bid, R.rid..
c1b0: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 FROM branch B
c1c0: 2c 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 , revision R..
c1d0: 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 49 WHERE B.bid I
c1e0: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d N $theset --
c1f0: 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 Restrict to bra
c200: 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 nches of interes
c210: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e t.. AND B.
c220: 66 69 72 73 74 20 3d 20 52 2e 72 69 64 20 20 20 first = R.rid
c230: 20 20 20 2d 2d 20 47 65 74 20 66 69 72 73 74 20 -- Get first
c240: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 revision on the
c250: 62 72 61 6e 63 68 0a 09 7d 5d 5d 20 7b 0a 09 20 branch..}]] {..
c260: 20 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65 6e lappend depen
c270: 64 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 73 79 dencies([list sy
c280: 6d 3a 3a 62 72 61 6e 63 68 20 24 62 69 64 5d 29 m::branch $bid])
c290: 20 5b 6c 69 73 74 20 72 65 76 20 24 63 68 69 6c [list rev $chil
c2a0: 64 5d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 7b d]..}..foreach {
c2b0: 62 69 64 20 63 68 69 6c 64 7d 20 5b 73 74 61 74 bid child} [stat
c2c0: 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f e run [subst -no
c2d0: 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b commands -noback
c2e0: 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 53 slashes {.. S
c2f0: 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 42 58 2e ELECT B.bid, BX.
c300: 62 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 bid.. FROM
c310: 62 72 61 6e 63 68 20 42 2c 20 70 72 65 66 65 72 branch B, prefer
c320: 65 64 70 61 72 65 6e 74 20 50 2c 20 62 72 61 6e edparent P, bran
c330: 63 68 20 42 58 0a 09 20 20 20 20 57 48 45 52 45 ch BX.. WHERE
c340: 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 B.bid IN $thes
c350: 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 et -- Restri
c360: 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f ct to branches o
c370: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
c380: 41 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20 50 AND B.sid = P
c390: 2e 70 69 64 20 20 20 20 20 20 20 20 2d 2d 20 47 .pid -- G
c3a0: 65 74 20 73 75 62 6f 72 64 69 6e 61 74 65 20 62 et subordinate b
c3b0: 72 61 6e 63 68 65 73 20 76 69 61 20 74 68 65 0a ranches via the.
c3c0: 09 20 20 20 20 41 4e 44 20 20 20 20 42 58 2e 73 . AND BX.s
c3d0: 69 64 20 3d 20 50 2e 73 69 64 20 20 20 20 20 20 id = P.sid
c3e0: 20 2d 2d 20 70 72 65 66 65 72 65 64 20 70 61 72 -- prefered par
c3f0: 65 6e 74 73 20 6f 66 20 74 68 65 69 72 20 73 79 ents of their sy
c400: 6d 62 6f 6c 73 0a 09 7d 5d 5d 20 7b 0a 09 20 20 mbols..}]] {..
c410: 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 lappend depend
c420: 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 73 79 6d encies([list sym
c430: 3a 3a 62 72 61 6e 63 68 20 24 62 69 64 5d 29 20 ::branch $bid])
c440: 5b 6c 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 [list sym::branc
c450: 68 20 24 63 68 69 6c 64 5d 0a 09 7d 0a 09 66 6f h $child]..}..fo
c460: 72 65 61 63 68 20 7b 62 69 64 20 63 68 69 6c 64 reach {bid child
c470: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 } [state run [su
c480: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 bst -nocommands
c490: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b -nobackslashes {
c4a0: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e 62 .. SELECT B.b
c4b0: 69 64 2c 20 54 2e 74 69 64 0a 09 20 20 20 20 46 id, T.tid.. F
c4c0: 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 ROM branch B,
c4d0: 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 50 preferedparent P
c4e0: 2c 20 74 61 67 20 54 0a 09 20 20 20 20 57 48 45 , tag T.. WHE
c4f0: 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 RE B.bid IN $th
c500: 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 eset -- Rest
c510: 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 rict to branches
c520: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 of interest..
c530: 20 20 41 4e 44 20 20 20 20 42 2e 73 69 64 20 3d AND B.sid =
c540: 20 50 2e 70 69 64 20 20 20 20 20 20 20 20 2d 2d P.pid --
c550: 20 47 65 74 20 73 75 62 6f 72 64 69 6e 61 74 65 Get subordinate
c560: 20 74 61 67 73 20 76 69 61 20 74 68 65 0a 09 20 tags via the..
c570: 20 20 20 41 4e 44 20 20 20 20 54 2e 73 69 64 20 AND T.sid
c580: 3d 20 50 2e 73 69 64 20 20 20 20 20 20 20 20 2d = P.sid -
c590: 2d 20 70 72 65 66 65 72 65 64 20 70 61 72 65 6e - prefered paren
c5a0: 74 73 20 6f 66 20 74 68 65 69 72 20 73 79 6d 62 ts of their symb
c5b0: 6f 6c 73 0a 09 7d 5d 5d 20 7b 0a 09 20 20 20 20 ols..}]] {..
c5c0: 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e lappend dependen
c5d0: 63 69 65 73 28 5b 6c 69 73 74 20 73 79 6d 3a 3a cies([list sym::
c5e0: 62 72 61 6e 63 68 20 24 62 69 64 5d 29 20 5b 6c branch $bid]) [l
c5f0: 69 73 74 20 73 79 6d 3a 3a 74 61 67 20 24 63 68 ist sym::tag $ch
c600: 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a ild]..}..return.
c610: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 }.. # res
c620: 75 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e ult = list (chan
c630: 67 65 73 65 74 2d 69 64 29 0a 20 20 20 20 74 79 geset-id). ty
c640: 70 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 63 pemethod cs_succ
c650: 65 73 73 6f 72 73 20 7b 62 72 61 6e 63 68 65 73 essors {branches
c660: 7d 20 7b 0a 20 20 20 20 20 20 20 20 23 20 54 68 } {. # Th
c670: 69 73 20 69 73 20 61 20 76 61 72 69 61 6e 74 20 is is a variant
c680: 6f 66 20 27 73 75 63 63 65 73 73 6f 72 73 27 20 of 'successors'
c690: 77 68 69 63 68 20 6d 61 70 73 20 74 68 65 20 6c which maps the l
c6a0: 6f 77 2d 6c 65 76 65 6c 0a 20 20 20 20 20 20 20 ow-level.
c6b0: 20 23 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 # data directly
c6c0: 20 74 6f 20 74 68 65 20 61 73 73 6f 63 69 61 74 to the associat
c6d0: 65 64 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49 ed changesets. I
c6e0: 2e 65 2e 20 69 6e 73 74 65 61 64 0a 20 20 20 20 .e. instead.
c6f0: 20 20 20 20 23 20 6d 69 6c 6c 69 6f 6e 73 20 6f # millions o
c700: 66 20 64 65 70 65 6e 64 65 6e 63 79 20 70 61 69 f dependency pai
c710: 72 73 20 28 69 6e 20 65 78 74 72 65 6d 65 20 63 rs (in extreme c
c720: 61 73 65 73 20 28 45 78 61 6d 70 6c 65 3a 20 54 ases (Example: T
c730: 63 6c 0a 20 20 20 20 20 20 20 20 23 20 43 56 53 cl. # CVS
c740: 29 29 20 77 65 20 72 65 74 75 72 6e 20 61 20 76 )) we return a v
c750: 65 72 79 20 73 68 6f 72 74 20 61 6e 64 20 6d 75 ery short and mu
c760: 63 68 20 6d 6f 72 65 20 6d 61 6e 61 67 65 61 62 ch more manageab
c770: 6c 65 20 6c 69 73 74 0a 20 20 20 20 20 20 20 20 le list.
c780: 23 20 6f 66 20 63 68 61 6e 67 65 73 65 74 73 2e # of changesets.
c790: 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 ...set theset ('
c7a0: 5b 6a 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 [join $branches
c7b0: 7b 27 2c 27 7d 5d 27 29 0a 20 20 20 20 20 20 20 {','}]').
c7c0: 20 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 return [state r
c7d0: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d un [subst -nocom
c7e0: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 mands -nobacksla
c7f0: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 shes {.. SELE
c800: 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 46 52 CT C.cid.. FR
c810: 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 72 OM branch B, r
c820: 65 76 69 73 69 6f 6e 20 52 2c 20 63 73 69 74 65 evision R, csite
c830: 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 m CI, changeset
c840: 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 2e C.. WHERE B.
c850: 62 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 bid IN $theset
c860: 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 -- Restrict t
c870: 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e o branches of in
c880: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 terest.. AND
c890: 20 20 20 42 2e 66 69 72 73 74 20 3d 20 52 2e 72 B.first = R.r
c8a0: 69 64 09 2d 2d 20 47 65 74 20 66 69 72 73 74 20 id.-- Get first
c8b0: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 revision on the
c8c0: 62 72 61 6e 63 68 0a 20 20 20 20 20 20 20 20 20 branch.
c8d0: 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 AND CI.iid
c8e0: 20 3d 20 52 2e 72 69 64 20 20 20 20 20 20 20 2d = R.rid -
c8f0: 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 - Select all cha
c900: 6e 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 ngesets.
c910: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 AND C.cid
c920: 20 3d 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e = CI.cid.-- con
c930: 74 61 69 6e 69 6e 67 20 74 68 69 73 20 72 65 76 taining this rev
c940: 69 73 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 ision.
c950: 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 AND C.type
c960: 3d 20 30 09 09 2d 2d 20 77 68 69 63 68 20 61 72 = 0..-- which ar
c970: 65 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 e revision chang
c980: 65 73 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a esets. UNION.
c990: 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 . SELECT C.ci
c9a0: 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 d.. FROM br
c9b0: 61 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 64 anch B, prefered
c9c0: 70 61 72 65 6e 74 20 50 2c 20 62 72 61 6e 63 68 parent P, branch
c9d0: 20 42 58 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 BX, csitem CI,
c9e0: 63 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 changeset C..
c9f0: 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e WHERE B.bid IN
ca00: 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 $theset --
ca10: 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e Restrict to bran
ca20: 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 ches of interest
ca30: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e 73 .. AND B.s
ca40: 69 64 20 3d 20 50 2e 70 69 64 09 2d 2d 20 47 65 id = P.pid.-- Ge
ca50: 74 20 73 75 62 6f 72 64 69 6e 61 74 65 20 62 72 t subordinate br
ca60: 61 6e 63 68 65 73 20 76 69 61 20 74 68 65 0a 09 anches via the..
ca70: 20 20 20 20 41 4e 44 20 20 20 20 42 58 2e 73 69 AND BX.si
ca80: 64 20 3d 20 50 2e 73 69 64 09 2d 2d 20 70 72 65 d = P.sid.-- pre
ca90: 66 65 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 fered parents of
caa0: 20 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 20 their symbols.
cab0: 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 AND
cac0: 20 20 43 49 2e 69 69 64 20 3d 20 42 58 2e 62 69 CI.iid = BX.bi
cad0: 64 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 d -- Select
cae0: 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a all changesets.
caf0: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 AND
cb00: 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 C.cid = CI.ci
cb10: 64 09 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 d.-- containing
cb20: 74 68 65 20 73 75 62 6f 72 64 69 6e 61 74 65 20 the subordinate
cb30: 62 72 61 6e 63 68 65 73 0a 20 20 20 20 20 20 20 branches.
cb40: 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 AND C.ty
cb50: 70 65 20 3d 20 32 09 09 2d 2d 20 77 68 69 63 68 pe = 2..-- which
cb60: 20 61 72 65 20 62 72 61 6e 63 68 20 63 68 61 6e are branch chan
cb70: 67 65 73 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e gesets. UNION
cb80: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 .. SELECT C.c
cb90: 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 id.. FROM b
cba0: 72 61 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 ranch B, prefere
cbb0: 64 70 61 72 65 6e 74 20 50 2c 20 74 61 67 20 54 dparent P, tag T
cbc0: 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 , csitem CI, cha
cbd0: 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 ngeset C.. WH
cbe0: 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 ERE B.bid IN $t
cbf0: 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 heset -- Res
cc00: 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 trict to branche
cc10: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 s of interest..
cc20: 20 20 20 41 4e 44 20 20 20 20 42 2e 73 69 64 20 AND B.sid
cc30: 3d 20 50 2e 70 69 64 09 2d 2d 20 47 65 74 20 73 = P.pid.-- Get s
cc40: 75 62 6f 72 64 69 6e 61 74 65 20 74 61 67 73 20 ubordinate tags
cc50: 76 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 via the.. AND
cc60: 20 20 20 20 54 2e 73 69 64 20 3d 20 50 2e 73 69 T.sid = P.si
cc70: 64 09 2d 2d 20 70 72 65 66 65 72 65 64 20 70 61 d.-- prefered pa
cc80: 72 65 6e 74 73 20 6f 66 20 74 68 65 69 72 20 73 rents of their s
cc90: 79 6d 62 6f 6c 73 0a 20 20 20 20 20 20 20 20 20 ymbols.
cca0: 20 20 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 AND CI.iid
ccb0: 20 3d 20 54 2e 74 69 64 20 20 20 20 20 20 20 2d = T.tid -
ccc0: 2d 20 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 - Select all cha
ccd0: 6e 67 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 ngesets.
cce0: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 AND C.cid
ccf0: 20 3d 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e = CI.cid.-- con
cd00: 74 61 69 6e 69 6e 67 20 74 68 65 20 73 75 62 6f taining the subo
cd10: 72 64 69 6e 61 74 65 20 74 61 67 73 0a 20 20 20 rdinate tags.
cd20: 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 AND
cd30: 43 2e 74 79 70 65 20 3d 20 31 09 09 2d 2d 20 77 C.type = 1..-- w
cd40: 68 69 63 68 20 61 72 65 20 74 61 67 20 63 68 61 hich are tag cha
cd50: 6e 67 65 73 65 74 73 0a 09 7d 5d 5d 0a 09 72 65 ngesets..}]]..re
cd60: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
cd70: 23 20 72 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f # result = symbo
cd80: 6c 20 6e 61 6d 65 0a 20 20 20 20 74 79 70 65 6d l name. typem
cd90: 65 74 68 6f 64 20 63 73 5f 6c 6f 64 20 7b 62 72 ethod cs_lod {br
cda0: 61 6e 63 68 65 73 7d 20 7b 0a 09 23 20 44 65 74 anches} {..# Det
cdb0: 65 72 6d 69 6e 65 73 20 74 68 65 20 6e 61 6d 65 ermines the name
cdc0: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 77 of the symbol w
cdd0: 68 69 63 68 20 69 73 20 74 68 65 20 6c 69 6e 65 hich is the line
cde0: 20 6f 66 0a 09 23 20 64 65 76 65 6c 6f 70 6d 65 of..# developme
cdf0: 6e 74 20 66 6f 72 20 74 68 65 20 62 72 61 6e 63 nt for the branc
ce00: 68 65 73 20 69 6e 20 61 20 63 68 61 6e 67 65 73 hes in a changes
ce10: 65 74 2e 0a 0a 09 73 65 74 20 74 68 65 73 65 74 et....set theset
ce20: 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e 63 68 ('[join $branch
ce30: 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 es {','}]')..ret
ce40: 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b urn [state run [
ce50: 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 subst -nocommand
ce60: 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 s -nobackslashes
ce70: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 0a 09 {.. SELECT..
ce80: 20 20 20 20 44 49 53 54 49 4e 43 54 20 4c 2e 6e DISTINCT L.n
ce90: 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 ame.. FROM
cea0: 62 72 61 6e 63 68 20 42 2c 20 73 79 6d 62 6f 6c branch B, symbol
ceb0: 20 4c 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 L.. WHERE B
cec0: 2e 62 69 64 20 69 6e 20 24 74 68 65 73 65 74 20 .bid in $theset
ced0: 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 -- Restri
cee0: 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f ct to branches o
cef0: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 f interest..
cf00: 41 4e 44 20 20 20 20 4c 2e 73 69 64 20 3d 20 42 AND L.sid = B
cf10: 2e 6c 6f 64 20 20 20 20 20 20 20 20 20 20 20 2d .lod -
cf20: 2d 20 47 65 74 20 6c 6f 64 20 73 79 6d 62 6f 6c - Get lod symbol
cf30: 20 6f 66 20 62 72 61 6e 63 68 0a 09 7d 5d 5d 0a of branch..}]].
cf40: 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d }.. typem
cf50: 65 74 68 6f 64 20 6c 69 6d 69 74 73 20 7b 62 72 ethod limits {br
cf60: 61 6e 63 68 65 73 7d 20 7b 0a 09 23 20 4e 6f 74 anches} {..# Not
cf70: 65 73 2e 20 54 68 69 73 20 6d 65 74 68 6f 64 20 es. This method
cf80: 65 78 69 73 74 73 20 6f 6e 6c 79 20 66 6f 72 20 exists only for
cf90: 62 72 61 6e 63 68 65 73 2e 20 49 74 20 69 73 20 branches. It is
cfa0: 6e 65 65 64 65 64 20 74 6f 0a 09 23 20 67 65 74 needed to..# get
cfb0: 20 64 65 74 61 69 6c 65 64 20 69 6e 66 6f 72 6d detailed inform
cfc0: 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 20 62 61 ation about a ba
cfd0: 63 6b 77 61 72 64 20 62 72 61 6e 63 68 2e 20 49 ckward branch. I
cfe0: 74 20 64 6f 65 73 0a 09 23 20 6e 6f 74 20 61 70 t does..# not ap
cff0: 70 6c 79 20 74 6f 20 74 61 67 73 2c 20 6e 6f 72 ply to tags, nor
d000: 20 72 65 76 69 73 69 6f 6e 73 2e 20 54 68 65 20 revisions. The
d010: 71 75 65 72 69 65 73 20 63 61 6e 20 61 6c 73 6f queries can also
d020: 0a 09 23 20 72 65 73 74 72 69 63 74 20 74 68 65 ..# restrict the
d030: 6d 73 65 6c 76 65 73 20 74 6f 20 74 68 65 20 72 mselves to the r
d040: 65 76 69 73 69 6f 6e 20 73 75 63 65 73 73 6f 72 evision sucessor
d050: 73 2f 70 72 65 64 65 63 65 73 73 6f 72 73 0a 09 s/predecessors..
d060: 23 20 6f 66 20 62 72 61 6e 63 68 65 73 2c 20 61 # of branches, a
d070: 73 20 6f 6e 6c 79 20 74 68 65 79 20 68 61 76 65 s only they have
d080: 20 6f 72 64 65 72 69 6e 67 20 64 61 74 61 20 61 ordering data a
d090: 6e 64 20 74 68 75 73 20 63 61 6e 0a 09 23 20 63 nd thus can..# c
d0a0: 61 75 73 65 20 74 68 65 20 62 61 63 6b 77 61 72 ause the backwar
d0b0: 64 6e 65 73 73 2e 0a 0a 09 73 65 74 20 74 68 65 dness....set the
d0c0: 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 set ('[join $bra
d0d0: 6e 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 0a nches {','}]')..
d0e0: 09 73 65 74 20 6d 61 78 70 20 5b 73 74 61 74 65 .set maxp [state
d0f0: 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 run [subst -noc
d100: 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 ommands -nobacks
d110: 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20 2d 2d lashes {.. --
d120: 20 6d 61 78 69 6d 61 6c 20 70 72 65 64 65 63 65 maximal predece
d130: 73 73 6f 72 20 70 6f 73 69 74 69 6f 6e 20 70 65 ssor position pe
d140: 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20 53 45 r branch.. SE
d150: 4c 45 43 54 20 42 2e 62 69 64 2c 20 4d 41 58 20 LECT B.bid, MAX
d160: 28 43 4f 2e 70 6f 73 29 0a 09 20 20 20 20 46 52 (CO.pos).. FR
d170: 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c 20 72 OM branch B, r
d180: 65 76 69 73 69 6f 6e 20 52 2c 20 63 73 69 74 65 evision R, csite
d190: 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 m CI, changeset
d1a0: 43 2c 20 63 73 6f 72 64 65 72 20 43 4f 0a 09 20 C, csorder CO..
d1b0: 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20 WHERE B.bid
d1c0: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d IN $theset -
d1d0: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72 - Restrict to br
d1e0: 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65 anches of intere
d1f0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42 st.. AND B
d200: 2e 72 6f 6f 74 20 3d 20 52 2e 72 69 64 20 20 20 .root = R.rid
d210: 20 20 20 20 2d 2d 20 47 65 74 20 62 72 61 6e 63 -- Get branc
d220: 68 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 h root revisions
d230: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 49 2e .. AND CI.
d240: 69 69 64 20 3d 20 52 2e 72 69 64 20 20 20 20 20 iid = R.rid
d250: 20 20 2d 2d 20 47 65 74 20 63 68 61 6e 67 65 73 -- Get changes
d260: 65 74 73 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ets containing t
d270: 68 65 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 he.. AND C
d280: 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 20 20 20 .cid = CI.cid
d290: 20 20 20 20 2d 2d 20 72 6f 6f 74 20 72 65 76 69 -- root revi
d2a0: 73 69 6f 6e 73 2c 20 77 68 69 63 68 20 61 72 65 sions, which are
d2b0: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 .. AND C.t
d2c0: 79 70 65 20 3d 20 30 20 20 20 20 20 20 20 20 20 ype = 0
d2d0: 20 20 2d 2d 20 72 65 76 69 73 69 6f 6e 20 63 68 -- revision ch
d2e0: 61 6e 67 65 73 65 74 73 0a 09 20 20 20 20 41 4e angesets.. AN
d2f0: 44 20 20 20 20 43 4f 2e 63 69 64 20 3d 20 43 2e D CO.cid = C.
d300: 63 69 64 20 20 20 20 20 20 20 2d 2d 20 47 65 74 cid -- Get
d310: 20 74 68 65 69 72 20 74 6f 70 6f 6c 6f 67 69 63 their topologic
d320: 61 6c 20 6f 72 64 65 72 69 6e 67 0a 09 20 20 20 al ordering..
d330: 20 47 52 4f 55 50 20 42 59 20 42 2e 62 69 64 0a GROUP BY B.bid.
d340: 09 7d 5d 5d 0a 0a 09 73 65 74 20 6d 69 6e 73 20 .}]]...set mins
d350: 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62 73 [state run [subs
d360: 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e t -nocommands -n
d370: 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 obackslashes {..
d380: 20 20 20 20 2d 2d 20 6d 69 6e 69 6d 61 6c 20 73 -- minimal s
d390: 75 63 63 65 73 73 6f 72 20 70 6f 73 69 74 69 6f uccessor positio
d3a0: 6e 20 70 65 72 20 62 72 61 6e 63 68 0a 09 20 20 n per branch..
d3b0: 20 20 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 SELECT B.bid,
d3c0: 4d 49 4e 20 28 43 4f 2e 70 6f 73 29 0a 09 20 20 MIN (CO.pos)..
d3d0: 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 FROM branch
d3e0: 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 63 B, revision R, c
d3f0: 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 sitem CI, change
d400: 73 65 74 20 43 2c 20 63 73 6f 72 64 65 72 20 43 set C, csorder C
d410: 4f 0a 09 20 20 20 20 57 48 45 52 45 20 20 42 2e O.. WHERE B.
d420: 62 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 bid IN $theset
d430: 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 -- Restrict t
d440: 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e o branches of in
d450: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 terest.. AND
d460: 20 20 20 42 2e 66 69 72 73 74 20 3d 20 52 2e 72 B.first = R.r
d470: 69 64 20 20 20 20 20 20 2d 2d 20 47 65 74 20 74 id -- Get t
d480: 68 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f he first revisio
d490: 6e 73 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 ns on the branch
d4a0: 65 73 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43 es.. AND C
d4b0: 49 2e 69 69 64 20 3d 20 52 2e 72 69 64 20 20 20 I.iid = R.rid
d4c0: 20 20 20 20 2d 2d 20 47 65 74 20 63 68 61 6e 67 -- Get chang
d4d0: 65 73 65 74 73 20 63 6f 6e 74 61 69 6e 69 6e 67 esets containing
d4e0: 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 20 20 the.. AND
d4f0: 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 09 C.cid = CI.cid.
d500: 2d 2d 20 66 69 72 73 74 20 72 65 76 69 73 69 6f -- first revisio
d510: 6e 73 2c 20 77 68 69 63 68 20 61 72 65 0a 09 20 ns, which are..
d520: 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 AND C.type
d530: 20 3d 20 30 09 09 2d 2d 20 72 65 76 69 73 69 6f = 0..-- revisio
d540: 6e 20 63 68 61 6e 67 65 73 65 74 73 0a 09 20 20 n changesets..
d550: 20 20 41 4e 44 20 20 20 20 43 4f 2e 63 69 64 20 AND CO.cid
d560: 3d 20 43 2e 63 69 64 09 2d 2d 20 47 65 74 20 74 = C.cid.-- Get t
d570: 68 65 69 72 20 74 6f 70 6f 6c 6f 67 69 63 61 6c heir topological
d580: 20 6f 72 64 65 72 69 6e 67 0a 09 20 20 20 20 47 ordering.. G
d590: 52 4f 55 50 20 42 59 20 42 2e 62 69 64 0a 09 7d ROUP BY B.bid..}
d5a0: 5d 5d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 ]].. retu
d5b0: 72 6e 20 5b 6c 69 73 74 20 24 6d 61 78 70 20 24 rn [list $maxp $
d5c0: 6d 69 6e 73 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 mins]. }..
d5d0: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
d5e0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
d5f0: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
d600: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 Configuration..
d610: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e pragma -hasin
d620: 73 74 61 6e 63 65 73 20 20 20 6e 6f 20 3b 20 23 stances no ; #
d630: 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 20 20 20 70 singleton. p
d640: 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69 6e ragma -hastypein
d650: 66 6f 20 20 20 20 6e 6f 20 3b 20 23 20 6e 6f 20 fo no ; # no
d660: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 introspection.
d670: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 pragma -hastyp
d680: 65 64 65 73 74 72 6f 79 20 6e 6f 20 3b 20 23 20 edestroy no ; #
d690: 69 6d 6d 6f 72 74 61 6c 0a 7d 0a 0a 23 20 23 20 immortal.}..# #
d6a0: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
d6b0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
d6c0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
d6d0: 23 23 23 23 23 23 23 23 23 0a 23 23 0a 0a 6e 61 #########.##..na
d6e0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 mespace eval ::v
d6f0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
d700: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 20 t::cvs::project
d710: 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 {. namespace
d720: 65 78 70 6f 72 74 20 72 65 76 0a 20 20 20 20 6e export rev. n
d730: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 72 65 amespace eval re
d740: 76 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 v {..namespace i
d750: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 mport ::vc::foss
d760: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
d770: 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 :state..namespac
d780: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
d790: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
d7a0: 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 6e vs::integrity..n
d7b0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
d7c0: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 ::vc::tools::mis
d7d0: 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20 c::*..namespace
d7e0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f import ::vc::too
d7f0: 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d ls::trouble..nam
d800: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import ::
d810: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 vc::tools::log..
d820: 6c 6f 67 20 72 65 67 69 73 74 65 72 20 63 73 65 log register cse
d830: 74 73 0a 0a 09 23 20 53 65 74 20 75 70 20 74 68 ts...# Set up th
d840: 65 20 68 65 6c 70 65 72 20 73 69 6e 67 6c 65 74 e helper singlet
d850: 6f 6e 73 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 ons..namespace e
d860: 76 61 6c 20 72 65 76 20 7b 0a 09 20 20 20 20 6e val rev {.. n
d870: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
d880: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
d890: 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 port::cvs::state
d8a0: 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 .. namespace
d8b0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 import ::vc::fos
d8c0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
d8d0: 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 20 20 20 ::integrity..
d8e0: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 namespace impor
d8f0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c t ::vc::tools::l
d900: 6f 67 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65 og..}..namespace
d910: 20 65 76 61 6c 20 73 79 6d 3a 3a 74 61 67 20 7b eval sym::tag {
d920: 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 .. namespace
d930: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 import ::vc::fos
d940: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
d950: 3a 3a 73 74 61 74 65 0a 09 20 20 20 20 6e 61 6d ::state.. nam
d960: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import ::
d970: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
d980: 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 rt::cvs::integri
d990: 74 79 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 ty.. namespac
d9a0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
d9b0: 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a 09 6e 61 ools::log..}..na
d9c0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 73 79 6d mespace eval sym
d9d0: 3a 3a 62 72 61 6e 63 68 20 7b 0a 09 20 20 20 20 ::branch {..
d9e0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
d9f0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
da00: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 mport::cvs::stat
da10: 65 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 e.. namespace
da20: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
da30: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
da40: 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 20 20 s::integrity..
da50: 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f namespace impo
da60: 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a rt ::vc::tools::
da70: 6c 6f 67 0a 09 7d 0a 20 20 20 20 7d 0a 7d 0a 0a log..}. }.}..
da80: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
da90: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
daa0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
dab0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 #############.##
dac0: 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 Ready..package
dad0: 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 provide vc::foss
dae0: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
daf0: 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 20 31 2e :project::rev 1.
db00: 30 0a 72 65 74 75 72 6e 0a 0.return.