Hex Artifact Content
Not logged in

Artifact b2c7314519b34cfc9be5d8a8a85dbf56f48caf84:

File tools/cvs2fossil/lib/c2f_prev.tcl part of check-in [983090a343] - Extended main import method (pushto) to handle all types of changesets, not only revisions. Tag changesets lead to tagging of imported revisions, branch changesets reflect the proper location where branches start, and make it possible to handle tagging of branches without revisions as well. Modified code returning changesets for a projects to return all, not only revision, in sync with the previous. Changed the code determining tag/branch lod's to use table 'preferedparent'. by aku on 2008-03-05 03:42:02.

0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0060: 30 37 2d 32 30 30 38 20 41 6e 64 72 65 61 73 20  07-2008 Andreas 
0070: 4b 75 70 72 69 65 73 2e 0a 23 0a 23 20 54 68 69  Kupries..#.# Thi
0080: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6c 69  s software is li
0090: 63 65 6e 73 65 64 20 61 73 20 64 65 73 63 72 69  censed as descri
00a0: 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20  bed in the file 
00b0: 4c 49 43 45 4e 53 45 2c 20 77 68 69 63 68 0a 23  LICENSE, which.#
00c0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65   you should have
00d0: 20 72 65 63 65 69 76 65 64 20 61 73 20 70 61 72   received as par
00e0: 74 20 6f 66 20 74 68 69 73 20 64 69 73 74 72 69  t of this distri
00f0: 62 75 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73  bution..#.# This
0100: 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 73 69 73   software consis
0110: 74 73 20 6f 66 20 76 6f 6c 75 6e 74 61 72 79 20  ts of voluntary 
0120: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 6d 61  contributions ma
0130: 64 65 20 62 79 20 6d 61 6e 79 0a 23 20 69 6e 64  de by many.# ind
0140: 69 76 69 64 75 61 6c 73 2e 20 20 46 6f 72 20 65  ividuals.  For e
0150: 78 61 63 74 20 63 6f 6e 74 72 69 62 75 74 69 6f  xact contributio
0160: 6e 20 68 69 73 74 6f 72 79 2c 20 73 65 65 20 74  n history, see t
0170: 68 65 20 72 65 76 69 73 69 6f 6e 0a 23 20 68 69  he revision.# hi
0180: 73 74 6f 72 79 20 61 6e 64 20 6c 6f 67 73 2c 20  story and logs, 
0190: 61 76 61 69 6c 61 62 6c 65 20 61 74 20 68 74 74  available at htt
01a0: 70 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 68  p://fossil-scm.h
01b0: 77 61 63 69 2e 63 6f 6d 2f 66 6f 73 73 69 6c 0a  waci.com/fossil.
01c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
01d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
01e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23  #############..#
0200: 23 20 52 65 76 69 73 69 6f 6e 73 20 70 65 72 20  # Revisions per 
0210: 70 72 6f 6a 65 63 74 2c 20 61 6b 61 20 43 68 61  project, aka Cha
0220: 6e 67 65 73 65 74 73 2e 20 54 68 65 73 65 20 6f  ngesets. These o
0230: 62 6a 65 63 74 73 20 61 72 65 20 66 69 72 73 74  bjects are first
0240: 20 75 73 65 64 0a 23 23 20 69 6e 20 70 61 73 73   used.## in pass
0250: 20 35 2c 20 77 68 69 63 68 20 63 72 65 61 74 65   5, which create
0260: 73 20 74 68 65 20 69 6e 69 74 69 61 6c 20 73 65  s the initial se
0270: 74 20 63 6f 76 65 72 69 6e 67 20 74 68 65 20 72  t covering the r
0280: 65 70 6f 73 69 74 6f 72 79 2e 0a 0a 23 20 23 20  epository...# # 
0290: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
02a0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
02b0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
02c0: 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 71  #########.## Req
02d0: 75 69 72 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61  uirements..packa
02e0: 67 65 20 72 65 71 75 69 72 65 20 54 63 6c 20 38  ge require Tcl 8
02f0: 2e 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .4              
0300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0310: 20 3b 20 23 20 52 65 71 75 69 72 65 64 20 72 75   ; # Required ru
0320: 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 67 65 20 72  ntime..package r
0330: 65 71 75 69 72 65 20 73 6e 69 74 20 20 20 20 20  equire snit     
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
0360: 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b   OO system..pack
0370: 61 67 65 20 72 65 71 75 69 72 65 20 73 74 72 75  age require stru
0380: 63 74 3a 3a 73 65 74 20 20 20 20 20 20 20 20 20  ct::set         
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03a0: 20 20 3b 20 23 20 53 65 74 20 6f 70 65 72 61 74    ; # Set operat
03b0: 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65  ions..package re
03c0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a  quire vc::tools:
03d0: 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20 20 20  :misc           
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
03f0: 54 65 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a  Text formatting.
0400: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0410: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62  vc::tools::troub
0420: 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  le              
0430: 20 20 20 20 20 20 3b 20 23 20 45 72 72 6f 72 20        ; # Error 
0440: 72 65 70 6f 72 74 69 6e 67 2e 0a 70 61 63 6b 61  reporting..packa
0450: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74  ge require vc::t
0460: 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20 20 20 20 20  ools::log       
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 61   ; # User feedba
0490: 63 6b 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ck..package requ
04a0: 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  ire vc::fossil::
04b0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61  import::cvs::sta
04c0: 74 65 20 20 20 20 20 20 20 20 3b 20 23 20 53 74  te        ; # St
04d0: 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63  ate storage..pac
04e0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a  kage require vc:
04f0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
0500: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 20  :cvs::integrity 
0510: 20 20 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74     ; # State int
0520: 65 67 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 0a  egrity checks...
0530: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
0540: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
0550: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0560: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
0570: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76  ..snit::type ::v
0580: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0590: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a  t::cvs::project:
05a0: 3a 72 65 76 20 7b 0a 20 20 20 20 23 20 23 20 23  :rev {.    # # #
05b0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
05c0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
05d0: 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63  ##.    ## Public
05e0: 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72   API..    constr
05f0: 75 63 74 6f 72 20 7b 70 72 6f 6a 65 63 74 20 63  uctor {project c
0600: 73 74 79 70 65 20 73 72 63 69 64 20 69 74 65 6d  stype srcid item
0610: 73 20 7b 74 68 65 69 64 20 7b 7d 7d 7d 20 7b 0a  s {theid {}}} {.
0620: 09 69 66 20 7b 24 74 68 65 69 64 20 6e 65 20 22  .if {$theid ne "
0630: 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79  "} {..    set my
0640: 69 64 20 24 74 68 65 69 64 0a 09 7d 20 65 6c 73  id $theid..} els
0650: 65 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69  e {..    set myi
0660: 64 20 5b 69 6e 63 72 20 6d 79 63 6f 75 6e 74 65  d [incr mycounte
0670: 72 5d 0a 09 7d 0a 0a 09 69 6e 74 65 67 72 69 74  r]..}...integrit
0680: 79 20 61 73 73 65 72 74 20 7b 0a 09 20 20 20 20  y assert {..    
0690: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 63  [info exists myc
06a0: 73 74 79 70 65 28 24 63 73 74 79 70 65 29 5d 0a  stype($cstype)].
06b0: 09 7d 20 7b 42 61 64 20 63 68 61 6e 67 65 73 65  .} {Bad changese
06c0: 74 20 74 79 70 65 20 27 24 63 73 74 79 70 65 27  t type '$cstype'
06d0: 2e 7d 0a 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65  .}...set myproje
06e0: 63 74 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73  ct   $project..s
06f0: 65 74 20 6d 79 74 79 70 65 20 20 20 20 20 20 24  et mytype      $
0700: 63 73 74 79 70 65 0a 09 73 65 74 20 6d 79 74 79  cstype..set myty
0710: 70 65 6f 62 6a 20 20 20 3a 3a 76 63 3a 3a 66 6f  peobj   ::vc::fo
0720: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
0730: 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 3a  s::project::rev:
0740: 3a 24 7b 63 73 74 79 70 65 7d 0a 09 73 65 74 20  :${cstype}..set 
0750: 6d 79 73 72 63 69 64 09 24 73 72 63 69 64 0a 09  mysrcid.$srcid..
0760: 73 65 74 20 6d 79 69 74 65 6d 73 20 20 20 20 20  set myitems     
0770: 24 69 74 65 6d 73 0a 09 73 65 74 20 6d 79 70 6f  $items..set mypo
0780: 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 43  s       {} ; # C
0790: 6f 6d 6d 69 74 20 6c 6f 63 61 74 69 6f 6e 20 69  ommit location i
07a0: 73 20 6e 6f 74 20 6b 6e 6f 77 6e 20 79 65 74 2e  s not known yet.
07b0: 0a 0a 09 66 6f 72 65 61 63 68 20 69 69 64 20 24  ...foreach iid $
07c0: 69 74 65 6d 73 20 7b 20 6c 61 70 70 65 6e 64 20  items { lappend 
07d0: 6d 79 74 69 74 65 6d 73 20 5b 6c 69 73 74 20 24  mytitems [list $
07e0: 63 73 74 79 70 65 20 24 69 69 64 5d 20 7d 0a 0a  cstype $iid] }..
07f0: 09 23 20 4b 65 65 70 20 74 72 61 63 6b 20 6f 66  .# Keep track of
0800: 20 74 68 65 20 67 65 6e 65 72 61 74 65 64 20 63   the generated c
0810: 68 61 6e 67 65 73 65 74 73 20 61 6e 64 20 6f 66  hangesets and of
0820: 20 74 68 65 20 69 6e 76 65 72 73 65 0a 09 23 20   the inverse..# 
0830: 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 69 74 65  mapping from ite
0840: 6d 73 20 74 6f 20 74 68 65 6d 2e 0a 09 6c 61 70  ms to them...lap
0850: 70 65 6e 64 20 6d 79 63 68 61 6e 67 65 73 65 74  pend mychangeset
0860: 73 20 20 20 24 73 65 6c 66 0a 09 6c 61 70 70 65  s   $self..lappe
0870: 6e 64 20 6d 79 74 63 68 61 6e 67 65 73 65 74 73  nd mytchangesets
0880: 28 24 63 73 74 79 70 65 29 20 24 73 65 6c 66 0a  ($cstype) $self.
0890: 09 73 65 74 20 20 20 20 20 6d 79 69 64 6d 61 70  .set     myidmap
08a0: 28 24 6d 79 69 64 29 20 24 73 65 6c 66 0a 0a 09  ($myid) $self...
08b0: 4d 61 70 49 74 65 6d 73 20 24 63 73 74 79 70 65  MapItems $cstype
08c0: 20 24 69 74 65 6d 73 0a 09 72 65 74 75 72 6e 0a   $items..return.
08d0: 20 20 20 20 7d 0a 0a 20 20 20 20 64 65 73 74 72      }..    destr
08e0: 75 63 74 6f 72 20 7b 0a 09 23 20 57 65 20 6d 61  uctor {..# We ma
08f0: 79 20 62 65 20 61 62 6c 65 20 74 6f 20 67 65 74  y be able to get
0900: 20 72 69 64 20 6f 66 20 74 68 69 73 20 65 6e 74   rid of this ent
0910: 69 72 65 6c 79 2c 20 61 74 20 6c 65 61 73 74 20  irely, at least 
0920: 66 6f 72 0a 09 23 20 28 64 65 29 63 6f 6e 73 74  for..# (de)const
0930: 72 75 63 74 69 6f 6e 20 61 6e 64 20 70 61 73 73  ruction and pass
0940: 20 49 6e 69 74 43 53 65 74 73 2e 0a 0a 09 55 6e   InitCSets....Un
0950: 6d 61 70 49 74 65 6d 73 20 24 6d 79 74 79 70 65  mapItems $mytype
0960: 20 24 6d 79 69 74 65 6d 73 0a 09 75 6e 73 65 74   $myitems..unset
0970: 20 6d 79 69 64 6d 61 70 28 24 6d 79 69 64 29 0a   myidmap($myid).
0980: 0a 09 73 65 74 20 70 6f 73 20 20 20 20 20 20 20  ..set pos       
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 73               [ls
09a0: 65 61 72 63 68 20 2d 65 78 61 63 74 20 24 6d 79  earch -exact $my
09b0: 63 68 61 6e 67 65 73 65 74 73 20 24 73 65 6c 66  changesets $self
09c0: 5d 0a 09 73 65 74 20 6d 79 63 68 61 6e 67 65 73  ]..set mychanges
09d0: 65 74 73 20 20 20 20 20 20 20 20 20 20 20 5b 6c  ets           [l
09e0: 72 65 70 6c 61 63 65 20 20 20 20 20 20 20 24 6d  replace       $m
09f0: 79 63 68 61 6e 67 65 73 65 74 73 20 24 70 6f 73  ychangesets $pos
0a00: 20 24 70 6f 73 5d 0a 09 73 65 74 20 70 6f 73 20   $pos]..set pos 
0a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a20: 20 20 20 5b 6c 73 65 61 72 63 68 20 2d 65 78 61     [lsearch -exa
0a30: 63 74 20 24 6d 79 74 63 68 61 6e 67 65 73 65 74  ct $mytchangeset
0a40: 73 28 24 6d 79 74 79 70 65 29 20 24 73 65 6c 66  s($mytype) $self
0a50: 5d 0a 09 73 65 74 20 6d 79 74 63 68 61 6e 67 65  ]..set mytchange
0a60: 73 65 74 73 28 24 6d 79 74 79 70 65 29 20 5b 6c  sets($mytype) [l
0a70: 72 65 70 6c 61 63 65 20 20 20 20 20 20 20 24 6d  replace       $m
0a80: 79 74 63 68 61 6e 67 65 73 65 74 73 28 24 6d 79  ytchangesets($my
0a90: 74 79 70 65 29 20 24 70 6f 73 20 24 70 6f 73 5d  type) $pos $pos]
0aa0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0ab0: 20 20 20 20 6d 65 74 68 6f 64 20 73 74 72 20 7b      method str {
0ac0: 7d 20 7b 0a 09 73 65 74 20 73 74 72 20 20 20 20  } {..set str    
0ad0: 22 3c 22 0a 09 73 65 74 20 64 65 74 61 69 6c 20  "<"..set detail 
0ae0: 22 22 0a 09 69 66 20 7b 5b 24 6d 79 74 79 70 65  ""..if {[$mytype
0af0: 6f 62 6a 20 62 79 73 79 6d 62 6f 6c 5d 7d 20 7b  obj bysymbol]} {
0b00: 0a 09 20 20 20 20 73 65 74 20 64 65 74 61 69 6c  ..    set detail
0b10: 20 22 20 27 5b 73 74 61 74 65 20 6f 6e 65 20 7b   " '[state one {
0b20: 0a 09 09 53 45 4c 45 43 54 20 53 2e 6e 61 6d 65  ...SELECT S.name
0b30: 0a 09 09 46 52 4f 4d 20 20 20 73 79 6d 62 6f 6c  ...FROM   symbol
0b40: 20 53 0a 09 09 57 48 45 52 45 20 20 53 2e 73 69   S...WHERE  S.si
0b50: 64 20 3d 20 24 6d 79 73 72 63 69 64 0a 09 20 20  d = $mysrcid..  
0b60: 20 20 7d 5d 27 22 0a 09 7d 0a 09 61 70 70 65 6e    }]'"..}..appen
0b70: 64 20 73 74 72 20 22 24 6d 79 74 79 70 65 20 24  d str "$mytype $
0b80: 7b 6d 79 69 64 7d 24 7b 64 65 74 61 69 6c 7d 3e  {myid}${detail}>
0b90: 22 0a 09 72 65 74 75 72 6e 20 24 73 74 72 0a 20  "..return $str. 
0ba0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
0bb0: 20 6c 6f 64 20 7b 7d 20 7b 0a 09 72 65 74 75 72   lod {} {..retur
0bc0: 6e 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20 63 73  n [$mytypeobj cs
0bd0: 5f 6c 6f 64 20 24 6d 79 73 72 63 69 64 20 24 6d  _lod $mysrcid $m
0be0: 79 69 74 65 6d 73 5d 0a 20 20 20 20 7d 0a 0a 20  yitems].    }.. 
0bf0: 20 20 20 6d 65 74 68 6f 64 20 69 64 20 20 20 20     method id    
0c00: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69  {} { return $myi
0c10: 64 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 69  d }.    method i
0c20: 74 65 6d 73 20 7b 7d 20 7b 20 72 65 74 75 72 6e  tems {} { return
0c30: 20 24 6d 79 74 69 74 65 6d 73 20 7d 0a 20 20 20   $mytitems }.   
0c40: 20 6d 65 74 68 6f 64 20 64 61 74 61 20 20 7b 7d   method data  {}
0c50: 20 7b 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20   { return [list 
0c60: 24 6d 79 70 72 6f 6a 65 63 74 20 24 6d 79 74 79  $myproject $myty
0c70: 70 65 20 24 6d 79 73 72 63 69 64 5d 20 7d 0a 0a  pe $mysrcid] }..
0c80: 20 20 20 20 64 65 6c 65 67 61 74 65 20 6d 65 74      delegate met
0c90: 68 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 74  hod bysymbol   t
0ca0: 6f 20 6d 79 74 79 70 65 6f 62 6a 0a 20 20 20 20  o mytypeobj.    
0cb0: 64 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20  delegate method 
0cc0: 62 79 72 65 76 69 73 69 6f 6e 20 74 6f 20 6d 79  byrevision to my
0cd0: 74 79 70 65 6f 62 6a 0a 20 20 20 20 64 65 6c 65  typeobj.    dele
0ce0: 67 61 74 65 20 6d 65 74 68 6f 64 20 69 73 62 72  gate method isbr
0cf0: 61 6e 63 68 20 20 20 74 6f 20 6d 79 74 79 70 65  anch   to mytype
0d00: 6f 62 6a 0a 20 20 20 20 64 65 6c 65 67 61 74 65  obj.    delegate
0d10: 20 6d 65 74 68 6f 64 20 69 73 74 61 67 20 20 20   method istag   
0d20: 20 20 20 74 6f 20 6d 79 74 79 70 65 6f 62 6a 0a     to mytypeobj.
0d30: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 70  .    method setp
0d40: 6f 73 20 7b 70 7d 20 7b 20 73 65 74 20 6d 79 70  os {p} { set myp
0d50: 6f 73 20 24 70 20 3b 20 72 65 74 75 72 6e 20 7d  os $p ; return }
0d60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 6f 73 20  .    method pos 
0d70: 20 20 20 7b 7d 20 20 7b 20 72 65 74 75 72 6e 20     {}  { return 
0d80: 24 6d 79 70 6f 73 20 7d 0a 0a 20 20 20 20 6d 65  $mypos }..    me
0d90: 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73 75  thod determinesu
0da0: 63 63 65 73 73 6f 72 73 20 7b 7d 20 7b 0a 09 23  ccessors {} {..#
0db0: 20 50 61 73 73 20 36 20 6f 70 65 72 61 74 69 6f   Pass 6 operatio
0dc0: 6e 2e 20 43 6f 6d 70 75 74 65 20 70 72 6f 6a 65  n. Compute proje
0dd0: 63 74 2d 6c 65 76 65 6c 20 64 65 70 65 6e 64 65  ct-level depende
0de0: 6e 63 69 65 73 20 66 72 6f 6d 0a 09 23 20 74 68  ncies from..# th
0df0: 65 20 66 69 6c 65 2d 6c 65 76 65 6c 20 64 61 74  e file-level dat
0e00: 61 20 61 6e 64 20 73 61 76 65 20 69 74 20 62 61  a and save it ba
0e10: 63 6b 20 74 6f 20 74 68 65 20 73 74 61 74 65 2e  ck to the state.
0e20: 20 54 68 69 73 20 6d 61 79 0a 09 23 20 62 65 20   This may..# be 
0e30: 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20 74 68  called during th
0e40: 65 20 63 79 63 6c 65 20 62 72 65 61 6b 65 72 20  e cycle breaker 
0e50: 70 61 73 73 65 73 20 61 73 20 77 65 6c 6c 2c 20  passes as well, 
0e60: 74 6f 20 61 64 6a 75 73 74 0a 09 23 20 74 68 65  to adjust..# the
0e70: 20 73 75 63 63 65 73 73 6f 72 20 69 6e 66 6f 72   successor infor
0e80: 6d 61 74 69 6f 6e 20 6f 66 20 63 68 61 6e 67 65  mation of change
0e90: 73 65 74 73 20 77 68 69 63 68 20 61 72 65 20 74  sets which are t
0ea0: 68 65 0a 09 23 20 70 72 65 64 65 63 65 73 73 6f  he..# predecesso
0eb0: 72 73 20 6f 66 20 64 72 6f 70 70 65 64 20 63 68  rs of dropped ch
0ec0: 61 6e 67 65 73 65 74 73 2e 20 46 6f 72 20 74 68  angesets. For th
0ed0: 65 6d 20 77 65 20 68 61 76 65 20 74 6f 0a 09 23  em we have to..#
0ee0: 20 72 65 6d 6f 76 65 20 74 68 65 69 72 20 65 78   remove their ex
0ef0: 69 73 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  isting informati
0f00: 6f 6e 20 66 69 72 73 74 20 62 65 66 6f 72 65 20  on first before 
0f10: 69 6e 73 65 72 74 69 6e 67 20 74 68 65 0a 09 23  inserting the..#
0f20: 20 6e 65 77 20 64 61 74 61 2e 0a 09 73 74 61 74   new data...stat
0f30: 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 44 45 4c  e run {..    DEL
0f40: 45 54 45 20 46 52 4f 4d 20 63 73 73 75 63 63 65  ETE FROM cssucce
0f50: 73 73 6f 72 20 57 48 45 52 45 20 63 69 64 20 3d  ssor WHERE cid =
0f60: 20 24 6d 79 69 64 3b 0a 09 7d 0a 09 73 65 74 20   $myid;..}..set 
0f70: 6c 6f 6f 70 20 30 0a 09 23 20 54 4f 44 4f 3a 20  loop 0..# TODO: 
0f80: 43 68 65 63 6b 20 6f 74 68 65 72 20 75 73 65 73  Check other uses
0f90: 20 6f 66 20 63 73 5f 73 75 63 65 73 73 6f 72 73   of cs_sucessors
0fa0: 2e 0a 09 23 20 54 4f 44 4f 3a 20 43 6f 6e 73 69  ...# TODO: Consi
0fb0: 64 65 72 20 6d 65 72 67 69 6e 67 20 63 73 5f 73  der merging cs_s
0fc0: 75 63 65 73 73 6f 72 27 73 20 53 45 4c 45 43 54  ucessor's SELECT
0fd0: 20 77 69 74 68 20 74 68 65 20 49 4e 53 45 52 54   with the INSERT
0fe0: 20 68 65 72 65 2e 0a 09 66 6f 72 65 61 63 68 20   here...foreach 
0ff0: 6e 69 64 20 5b 24 6d 79 74 79 70 65 6f 62 6a 20  nid [$mytypeobj 
1000: 63 73 5f 73 75 63 63 65 73 73 6f 72 73 20 24 6d  cs_successors $m
1010: 79 69 74 65 6d 73 5d 20 7b 0a 09 20 20 20 20 73  yitems] {..    s
1020: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53  tate run {...INS
1030: 45 52 54 20 49 4e 54 4f 20 63 73 73 75 63 63 65  ERT INTO cssucce
1040: 73 73 6f 72 20 28 63 69 64 2c 20 20 6e 69 64 29  ssor (cid,  nid)
1050: 0a 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 20  ...VALUES       
1060: 20 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69             ($myi
1070: 64 2c 24 6e 69 64 29 0a 09 20 20 20 20 7d 0a 09  d,$nid)..    }..
1080: 20 20 20 20 69 66 20 7b 24 6e 69 64 20 3d 3d 20      if {$nid == 
1090: 24 6d 79 69 64 7d 20 7b 20 73 65 74 20 6c 6f 6f  $myid} { set loo
10a0: 70 20 31 20 7d 0a 09 7d 0a 09 23 20 52 65 70 6f  p 1 }..}..# Repo
10b0: 72 74 20 61 66 74 65 72 20 74 68 65 20 63 6f 6d  rt after the com
10c0: 70 6c 65 74 65 20 73 74 72 75 63 74 75 72 65 20  plete structure 
10d0: 68 61 73 20 62 65 65 6e 20 73 61 76 65 64 2e 0a  has been saved..
10e0: 09 69 66 20 7b 24 6c 6f 6f 70 7d 20 7b 20 24 73  .if {$loop} { $s
10f0: 65 6c 66 20 72 65 70 6f 72 74 6c 6f 6f 70 20 7d  elf reportloop }
1100: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
1110: 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20 6c      # result = l
1120: 69 73 74 20 28 63 68 61 6e 67 65 73 65 74 29 0a  ist (changeset).
1130: 20 20 20 20 6d 65 74 68 6f 64 20 73 75 63 63 65      method succe
1140: 73 73 6f 72 73 20 7b 7d 20 7b 0a 09 23 20 55 73  ssors {} {..# Us
1150: 65 20 74 68 65 20 64 61 74 61 20 73 61 76 65 64  e the data saved
1160: 20 62 79 20 70 61 73 73 20 36 2e 0a 09 72 65 74   by pass 6...ret
1170: 75 72 6e 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73  urn [struct::lis
1180: 74 20 6d 61 70 20 5b 73 74 61 74 65 20 72 75 6e  t map [state run
1190: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 53   {..    SELECT S
11a0: 2e 6e 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20  .nid..    FROM  
11b0: 20 63 73 73 75 63 63 65 73 73 6f 72 20 53 0a 09   cssuccessor S..
11c0: 20 20 20 20 57 48 45 52 45 20 20 53 2e 63 69 64      WHERE  S.cid
11d0: 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 5b 6d 79   = $myid..}] [my
11e0: 74 79 70 65 6d 65 74 68 6f 64 20 6f 66 5d 5d 0a  typemethod of]].
11f0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 69 74 65      }..    # ite
1200: 6d 20 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29  m -> list (item)
1210: 0a 20 20 20 20 6d 65 74 68 6f 64 20 6e 65 78 74  .    method next
1220: 6d 61 70 20 7b 7d 20 7b 0a 09 24 6d 79 74 79 70  map {} {..$mytyp
1230: 65 6f 62 6a 20 73 75 63 63 65 73 73 6f 72 73 20  eobj successors 
1240: 74 6d 70 20 24 6d 79 69 74 65 6d 73 0a 09 72 65  tmp $myitems..re
1250: 74 75 72 6e 20 5b 61 72 72 61 79 20 67 65 74 20  turn [array get 
1260: 74 6d 70 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  tmp].    }..    
1270: 6d 65 74 68 6f 64 20 62 72 65 61 6b 69 6e 74 65  method breakinte
1280: 72 6e 61 6c 64 65 70 65 6e 64 65 6e 63 69 65 73  rnaldependencies
1290: 20 7b 63 76 7d 20 7b 0a 09 75 70 76 61 72 20 31   {cv} {..upvar 1
12a0: 20 24 63 76 20 63 6f 75 6e 74 65 72 0a 09 6c 6f   $cv counter..lo
12b0: 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73  g write 14 csets
12c0: 20 7b 5b 24 73 65 6c 66 20 73 74 72 5d 20 42 49   {[$self str] BI
12d0: 44 7d 0a 09 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d  D}..vc::tools::m
12e0: 65 6d 3a 3a 6d 61 72 6b 0a 0a 09 23 20 54 68 69  em::mark...# Thi
12f0: 73 20 6d 65 74 68 6f 64 20 69 6e 73 70 65 63 74  s method inspect
1300: 73 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 2c  s the changeset,
1310: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 69 6e 74   looking for int
1320: 65 72 6e 61 6c 0a 09 23 20 64 65 70 65 6e 64 65  ernal..# depende
1330: 6e 63 69 65 73 2e 20 4e 6f 74 68 69 6e 67 20 69  ncies. Nothing i
1340: 73 20 64 6f 6e 65 20 69 66 20 74 68 65 72 65 20  s done if there 
1350: 61 72 65 20 6e 6f 20 73 75 63 68 2e 0a 0a 09 23  are no such....#
1360: 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20 63   Otherwise the c
1370: 68 61 6e 67 65 73 65 74 20 69 73 20 73 70 6c 69  hangeset is spli
1380: 74 20 69 6e 74 6f 20 61 20 73 65 74 20 6f 66 20  t into a set of 
1390: 66 72 61 67 6d 65 6e 74 73 0a 09 23 20 77 68 69  fragments..# whi
13a0: 63 68 20 68 61 76 65 20 6e 6f 20 69 6e 74 65 72  ch have no inter
13b0: 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73  nal dependencies
13c0: 2c 20 74 72 61 6e 73 66 6f 72 6d 69 6e 67 20 74  , transforming t
13d0: 68 65 0a 09 23 20 69 6e 74 65 72 6e 61 6c 20 64  he..# internal d
13e0: 65 70 65 6e 64 65 6e 63 69 65 73 20 69 6e 74 6f  ependencies into
13f0: 20 65 78 74 65 72 6e 61 6c 20 6f 6e 65 73 2e 20   external ones. 
1400: 54 68 65 20 6e 65 77 20 63 68 61 6e 67 65 73 65  The new changese
1410: 74 73 0a 09 23 20 67 65 6e 65 72 61 74 65 64 20  ts..# generated 
1420: 66 72 6f 6d 20 74 68 65 20 66 72 61 67 6d 65 6e  from the fragmen
1430: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 72  t information ar
1440: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 0a 09  e added to the..
1450: 23 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  # list of all ch
1460: 61 6e 67 65 73 65 74 73 20 28 62 79 20 74 68 65  angesets (by the
1470: 20 63 61 6c 6c 65 72 29 2e 0a 0a 09 23 20 54 68   caller)....# Th
1480: 65 20 63 6f 64 65 20 63 68 65 63 6b 73 20 6f 6e  e code checks on
1490: 6c 79 20 73 75 63 63 65 73 73 6f 72 20 64 65 70  ly successor dep
14a0: 65 6e 64 65 6e 63 69 65 73 2c 20 61 73 20 74 68  endencies, as th
14b0: 69 73 20 61 75 74 6f 2d 0a 09 23 20 6d 61 74 69  is auto-..# mati
14c0: 63 61 6c 6c 79 20 63 6f 76 65 72 73 20 74 68 65  cally covers the
14d0: 20 70 72 65 64 65 63 65 73 73 6f 72 20 64 65 70   predecessor dep
14e0: 65 6e 64 65 6e 63 69 65 73 20 61 73 20 77 65 6c  endencies as wel
14f0: 6c 20 28 41 6e 79 0a 09 23 20 73 75 63 63 65 73  l (Any..# succes
1500: 73 6f 72 20 64 65 70 65 6e 64 65 6e 63 79 20 61  sor dependency a
1510: 20 2d 3e 20 62 20 69 73 20 61 6c 73 6f 20 61 20   -> b is also a 
1520: 70 72 65 64 65 63 65 73 73 6f 72 20 64 65 70 65  predecessor depe
1530: 6e 64 65 6e 63 79 0a 09 23 20 62 20 2d 3e 20 61  ndency..# b -> a
1540: 29 2e 0a 0a 09 61 72 72 61 79 20 73 65 74 20 62  )....array set b
1550: 72 65 61 6b 73 20 7b 7d 0a 0a 09 73 65 74 20 66  reaks {}...set f
1560: 72 61 67 6d 65 6e 74 73 20 5b 42 72 65 61 6b 44  ragments [BreakD
1570: 69 72 65 63 74 44 65 70 65 6e 64 65 6e 63 69 65  irectDependencie
1580: 73 20 24 6d 79 69 74 65 6d 73 20 62 72 65 61 6b  s $myitems break
1590: 73 5d 0a 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67  s]...if {![lleng
15a0: 74 68 20 24 66 72 61 67 6d 65 6e 74 73 5d 7d 20  th $fragments]} 
15b0: 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 0a 09  { return {} }...
15c0: 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 43 72  return [$self Cr
15d0: 65 61 74 65 46 72 6f 6d 46 72 61 67 6d 65 6e 74  eateFromFragment
15e0: 73 20 24 66 72 61 67 6d 65 6e 74 73 20 63 6f 75  s $fragments cou
15f0: 6e 74 65 72 20 62 72 65 61 6b 73 5d 0a 20 20 20  nter breaks].   
1600: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70   }..    method p
1610: 65 72 73 69 73 74 20 7b 7d 20 7b 0a 09 73 65 74  ersist {} {..set
1620: 20 74 69 64 20 24 6d 79 63 73 74 79 70 65 28 24   tid $mycstype($
1630: 6d 79 74 79 70 65 29 0a 09 73 65 74 20 70 69 64  mytype)..set pid
1640: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 69 64 5d   [$myproject id]
1650: 0a 09 73 65 74 20 70 6f 73 20 30 0a 0a 09 73 74  ..set pos 0...st
1660: 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ate transaction 
1670: 7b 0a 09 20 20 20 20 73 74 61 74 65 20 72 75 6e  {..    state run
1680: 20 7b 0a 09 09 49 4e 53 45 52 54 20 49 4e 54 4f   {...INSERT INTO
1690: 20 63 68 61 6e 67 65 73 65 74 20 28 63 69 64 2c   changeset (cid,
16a0: 20 20 20 70 69 64 2c 20 20 74 79 70 65 2c 20 73     pid,  type, s
16b0: 72 63 29 0a 09 09 56 41 4c 55 45 53 20 20 20 20  rc)...VALUES    
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 28 24 6d 79              ($my
16d0: 69 64 2c 20 24 70 69 64 2c 20 24 74 69 64 2c 20  id, $pid, $tid, 
16e0: 24 6d 79 73 72 63 69 64 29 3b 0a 09 20 20 20 20  $mysrcid);..    
16f0: 7d 0a 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20  }...    foreach 
1700: 69 69 64 20 24 6d 79 69 74 65 6d 73 20 7b 0a 09  iid $myitems {..
1710: 09 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 20  .state run {... 
1720: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
1730: 73 69 74 65 6d 20 28 63 69 64 2c 20 20 20 70 6f  sitem (cid,   po
1740: 73 2c 20 20 69 69 64 29 0a 09 09 20 20 20 20 56  s,  iid)...    V
1750: 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20  ALUES           
1760: 20 20 28 24 6d 79 69 64 2c 20 24 70 6f 73 2c 20    ($myid, $pos, 
1770: 24 69 69 64 29 3b 0a 09 09 7d 0a 09 09 69 6e 63  $iid);...}...inc
1780: 72 20 70 6f 73 0a 09 20 20 20 20 7d 0a 09 7d 0a  r pos..    }..}.
1790: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
17a0: 20 20 20 6d 65 74 68 6f 64 20 74 69 6d 65 72 61     method timera
17b0: 6e 67 65 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  nge {} { return 
17c0: 5b 24 6d 79 74 79 70 65 6f 62 6a 20 74 69 6d 65  [$mytypeobj time
17d0: 72 61 6e 67 65 20 24 6d 79 69 74 65 6d 73 5d 20  range $myitems] 
17e0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6c 69  }..    method li
17f0: 6d 69 74 73 20 7b 7d 20 7b 0a 09 73 74 72 75 63  mits {} {..struc
1800: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b  t::list assign [
1810: 24 6d 79 74 79 70 65 6f 62 6a 20 6c 69 6d 69 74  $mytypeobj limit
1820: 73 20 24 6d 79 69 74 65 6d 73 5d 20 6d 61 78 70  s $myitems] maxp
1830: 20 6d 69 6e 73 0a 09 72 65 74 75 72 6e 20 5b 6c   mins..return [l
1840: 69 73 74 20 5b 54 61 67 49 74 65 6d 44 69 63 74  ist [TagItemDict
1850: 20 24 6d 61 78 70 20 24 6d 79 74 79 70 65 5d 20   $maxp $mytype] 
1860: 5b 54 61 67 49 74 65 6d 44 69 63 74 20 24 6d 69  [TagItemDict $mi
1870: 6e 73 20 24 6d 79 74 79 70 65 5d 5d 0a 20 20 20  ns $mytype]].   
1880: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64   }..    method d
1890: 72 6f 70 20 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72  rop {} {..log wr
18a0: 69 74 65 20 38 20 63 73 65 74 73 20 7b 44 72 6f  ite 8 csets {Dro
18b0: 70 70 69 6e 67 20 24 73 65 6c 66 20 3d 20 5b 24  pping $self = [$
18c0: 73 65 6c 66 20 73 74 72 5d 7d 0a 0a 09 73 74 61  self str]}...sta
18d0: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b  te transaction {
18e0: 0a 09 20 20 20 20 73 74 61 74 65 20 72 75 6e 20  ..    state run 
18f0: 7b 0a 09 09 44 45 4c 45 54 45 20 46 52 4f 4d 20  {...DELETE FROM 
1900: 63 68 61 6e 67 65 73 65 74 20 20 20 57 48 45 52  changeset   WHER
1910: 45 20 63 69 64 20 3d 20 24 6d 79 69 64 3b 0a 09  E cid = $myid;..
1920: 09 44 45 4c 45 54 45 20 46 52 4f 4d 20 63 73 69  .DELETE FROM csi
1930: 74 65 6d 20 20 20 20 20 20 57 48 45 52 45 20 63  tem      WHERE c
1940: 69 64 20 3d 20 24 6d 79 69 64 3b 0a 09 09 44 45  id = $myid;...DE
1950: 4c 45 54 45 20 46 52 4f 4d 20 63 73 73 75 63 63  LETE FROM cssucc
1960: 65 73 73 6f 72 20 57 48 45 52 45 20 63 69 64 20  essor WHERE cid 
1970: 3d 20 24 6d 79 69 64 3b 0a 09 20 20 20 20 7d 0a  = $myid;..    }.
1980: 09 7d 0a 0a 09 23 20 52 65 74 75 72 6e 20 74 68  .}...# Return th
1990: 65 20 6c 69 73 74 20 6f 66 20 70 72 65 64 65 63  e list of predec
19a0: 65 73 73 6f 72 73 20 73 6f 20 74 68 61 74 20 74  essors so that t
19b0: 68 65 79 20 63 61 6e 20 62 65 20 61 64 6a 75 73  hey can be adjus
19c0: 74 65 64 2e 0a 09 72 65 74 75 72 6e 20 5b 73 74  ted...return [st
19d0: 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 5b  ruct::list map [
19e0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20  state run {..   
19f0: 20 53 45 4c 45 43 54 20 63 69 64 0a 09 20 20 20   SELECT cid..   
1a00: 20 46 52 4f 4d 20 20 20 63 73 73 75 63 63 65 73   FROM   cssucces
1a10: 73 6f 72 0a 09 20 20 20 20 57 48 45 52 45 20 20  sor..    WHERE  
1a20: 6e 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20  nid = $myid..}] 
1a30: 5b 6d 79 74 79 70 65 6d 65 74 68 6f 64 20 6f 66  [mytypemethod of
1a40: 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ]].    }..    me
1a50: 74 68 6f 64 20 72 65 70 6f 72 74 6c 6f 6f 70 20  thod reportloop 
1a60: 7b 7b 6b 69 6c 6c 20 31 7d 7d 20 7b 0a 09 23 20  {{kill 1}} {..# 
1a70: 57 65 20 70 72 69 6e 74 20 74 68 65 20 69 74 65  We print the ite
1a80: 6d 73 20 77 68 69 63 68 20 61 72 65 20 70 72 6f  ms which are pro
1a90: 64 75 63 69 6e 67 20 74 68 65 20 6c 6f 6f 70 2c  ducing the loop,
1aa0: 20 61 6e 64 20 68 6f 77 2e 0a 0a 09 73 65 74 20   and how....set 
1ab0: 68 64 72 20 22 53 65 6c 66 2d 72 65 66 65 72 65  hdr "Self-refere
1ac0: 6e 74 69 61 6c 20 63 68 61 6e 67 65 73 65 74 20  ntial changeset 
1ad0: 5b 24 73 65 6c 66 20 73 74 72 5d 20 5f 5f 5f 5f  [$self str] ____
1ae0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 22 0a  ______________".
1af0: 09 73 65 74 20 66 74 72 20 5b 72 65 67 73 75 62  .set ftr [regsub
1b00: 20 2d 61 6c 6c 20 7b 5b 5e 20 09 5d 7d 20 24 68   -all {[^ .]} $h
1b10: 64 72 20 7b 5f 7d 5d 0a 0a 09 6c 6f 67 20 77 72  dr {_}]...log wr
1b20: 69 74 65 20 30 20 63 73 65 74 73 20 24 68 64 72  ite 0 csets $hdr
1b30: 0a 09 66 6f 72 65 61 63 68 20 7b 69 74 65 6d 20  ..foreach {item 
1b40: 6e 65 78 74 69 74 65 6d 7d 20 5b 24 6d 79 74 79  nextitem} [$myty
1b50: 70 65 6f 62 6a 20 6c 6f 6f 70 73 20 24 6d 79 69  peobj loops $myi
1b60: 74 65 6d 73 5d 20 7b 0a 09 20 20 20 20 23 20 43  tems] {..    # C
1b70: 72 65 61 74 65 20 74 61 67 67 65 64 20 69 74 65  reate tagged ite
1b80: 6d 73 20 66 72 6f 6d 20 74 68 65 20 69 64 20 61  ms from the id a
1b90: 6e 64 20 6f 75 72 20 74 79 70 65 2e 0a 09 20 20  nd our type...  
1ba0: 20 20 73 65 74 20 69 74 65 6d 20 20 20 20 20 5b    set item     [
1bb0: 6c 69 73 74 20 24 6d 79 74 79 70 65 20 20 24 69  list $mytype  $i
1bc0: 74 65 6d 5d 0a 09 20 20 20 20 73 65 74 20 6e 65  tem]..    set ne
1bd0: 78 74 69 74 65 6d 20 5b 6c 69 73 74 20 24 6d 79  xtitem [list $my
1be0: 74 79 70 65 20 24 6e 65 78 74 69 74 65 6d 5d 0a  type $nextitem].
1bf0: 09 20 20 20 20 23 20 50 72 69 6e 74 61 62 6c 65  .    # Printable
1c00: 20 6c 61 62 65 6c 73 2e 0a 09 20 20 20 20 73 65   labels...    se
1c10: 74 20 69 20 20 22 3c 5b 24 74 79 70 65 20 69 74  t i  "<[$type it
1c20: 65 6d 73 74 72 20 24 69 74 65 6d 5d 3e 22 0a 09  emstr $item]>"..
1c30: 20 20 20 20 73 65 74 20 6e 20 20 22 3c 5b 24 74      set n  "<[$t
1c40: 79 70 65 20 69 74 65 6d 73 74 72 20 24 6e 65 78  ype itemstr $nex
1c50: 74 69 74 65 6d 5d 3e 22 0a 09 20 20 20 20 73 65  titem]>"..    se
1c60: 74 20 6e 63 73 20 24 6d 79 69 74 65 6d 6d 61 70  t ncs $myitemmap
1c70: 28 24 6e 65 78 74 69 74 65 6d 29 0a 09 20 20 20  ($nextitem)..   
1c80: 20 23 20 50 72 69 6e 74 0a 09 20 20 20 20 6c 6f   # Print..    lo
1c90: 67 20 77 72 69 74 65 20 30 20 63 73 65 74 73 20  g write 0 csets 
1ca0: 7b 2a 20 24 69 20 2d 2d 3e 20 24 6e 20 2d 2d 3e  {* $i --> $n -->
1cb0: 20 63 73 20 5b 24 6e 63 73 20 73 74 72 5d 7d 0a   cs [$ncs str]}.
1cc0: 09 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 30 20  .}..log write 0 
1cd0: 63 73 65 74 73 20 24 66 74 72 0a 0a 09 69 66 20  csets $ftr...if 
1ce0: 7b 21 24 6b 69 6c 6c 7d 20 72 65 74 75 72 6e 0a  {!$kill} return.
1cf0: 09 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61  .trouble interna
1d00: 6c 20 22 5b 24 73 65 6c 66 20 73 74 72 5d 20 64  l "[$self str] d
1d10: 65 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66  epends on itself
1d20: 22 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  "..return.    }.
1d30: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 75 73 68  .    method push
1d40: 74 6f 20 7b 72 65 70 6f 73 69 74 6f 72 79 20 64  to {repository d
1d50: 61 74 65 20 72 73 74 61 74 65 7d 20 7b 0a 09 23  ate rstate} {..#
1d60: 20 47 65 6e 65 72 61 74 65 20 61 6e 64 20 69 6d   Generate and im
1d70: 70 6f 72 74 20 74 68 65 20 6d 61 6e 69 66 65 73  port the manifes
1d80: 74 20 66 6f 72 20 74 68 69 73 20 63 68 61 6e 67  t for this chang
1d90: 65 73 65 74 2e 0a 09 23 0a 09 23 20 44 61 74 61  eset...#..# Data
1da0: 20 6e 65 65 64 65 64 3a 0a 09 23 20 2d 20 43 6f   needed:..# - Co
1db0: 6d 6d 69 74 20 6d 65 73 73 61 67 65 20 20 20 20  mmit message    
1dc0: 20 20 20 20 20 20 20 20 20 20 20 28 2d 2d 20 6d             (-- m
1dd0: 79 73 72 63 69 64 20 2d 3e 20 72 65 70 6f 73 69  ysrcid -> reposi
1de0: 74 6f 72 79 20 6d 65 74 61 29 0a 09 23 20 2d 20  tory meta)..# - 
1df0: 55 73 65 72 20 64 6f 69 6e 67 20 74 68 65 20 63  User doing the c
1e00: 6f 6d 6d 69 74 20 20 20 20 20 20 20 20 28 73 2e  ommit        (s.
1e10: 61 2e 29 0a 09 23 0a 09 23 20 2d 20 54 69 6d 65  a.)..#..# - Time
1e20: 73 74 61 6d 70 20 6f 66 20 77 68 65 6e 20 63 6f  stamp of when co
1e30: 6d 6d 69 74 74 65 64 20 20 28 63 6f 6d 6d 61 6e  mmitted  (comman
1e40: 64 20 61 72 67 75 6d 65 6e 74 29 0a 09 23 0a 09  d argument)..#..
1e50: 23 20 2d 20 54 68 65 20 70 61 72 65 6e 74 20 63  # - The parent c
1e60: 68 61 6e 67 65 73 65 74 2c 20 69 66 20 61 6e 79  hangeset, if any
1e70: 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  . If there is no
1e80: 20 70 61 72 65 6e 74 20 66 6f 73 73 69 6c 0a 09   parent fossil..
1e90: 23 20 20 20 77 69 6c 6c 20 75 73 65 20 74 68 65  #   will use the
1ea0: 20 65 6d 70 74 79 20 62 61 73 65 20 72 65 76 69   empty base revi
1eb0: 73 69 6f 6e 20 61 73 20 70 61 72 65 6e 74 2e 0a  sion as parent..
1ec0: 09 23 0a 09 23 20 2d 20 4c 69 73 74 20 6f 66 20  .#..# - List of 
1ed0: 74 68 65 20 66 69 6c 65 20 72 65 76 69 73 69 6f  the file revisio
1ee0: 6e 73 20 69 6e 20 74 68 65 20 63 68 61 6e 67 65  ns in the change
1ef0: 73 65 74 2e 0a 0a 09 23 20 57 65 20 64 65 72 69  set....# We deri
1f00: 76 65 20 74 68 65 20 6c 6f 64 20 69 6e 66 6f 72  ve the lod infor
1f10: 6d 61 74 69 6f 6e 20 64 69 72 65 63 74 6c 79 20  mation directly 
1f20: 66 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69 6f  from the revisio
1f30: 6e 73 20 6f 66 0a 09 23 20 74 68 65 20 63 68 61  ns of..# the cha
1f40: 6e 67 65 73 65 74 2c 20 61 73 20 74 68 65 20 62  ngeset, as the b
1f50: 72 61 6e 63 68 20 70 61 72 74 20 6f 66 20 74 68  ranch part of th
1f60: 65 20 6d 65 74 61 20 64 61 74 61 20 28 73 2e 61  e meta data (s.a
1f70: 2e 29 20 69 73 0a 09 23 20 6f 75 74 64 61 74 65  .) is..# outdate
1f80: 64 20 73 69 6e 63 65 20 70 61 73 73 20 46 69 6c  d since pass Fil
1f90: 74 65 72 53 79 6d 62 6f 6c 73 2e 20 53 65 65 20  terSymbols. See 
1fa0: 74 68 65 20 6d 65 74 68 6f 64 20 27 72 75 6e 27  the method 'run'
1fb0: 20 69 6e 0a 09 23 20 66 69 6c 65 20 22 63 32 66   in..# file "c2f
1fc0: 5f 70 66 69 6c 74 65 72 73 79 6d 2e 74 63 6c 22  _pfiltersym.tcl"
1fd0: 20 66 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d 65 6e   for more commen
1fe0: 74 61 72 79 20 6f 6e 20 74 68 69 73 2e 0a 0a 09  tary on this....
1ff0: 73 65 74 20 6c 6f 64 6e 61 6d 65 20 5b 24 73 65  set lodname [$se
2000: 6c 66 20 6c 6f 64 5d 0a 0a 09 6c 6f 67 20 77 72  lf lod]...log wr
2010: 69 74 65 20 32 20 63 73 65 74 73 20 7b 49 6d 70  ite 2 csets {Imp
2020: 6f 72 74 69 6e 67 20 63 68 61 6e 67 65 73 65 74  orting changeset
2030: 20 5b 24 73 65 6c 66 20 73 74 72 5d 20 6f 6e 20   [$self str] on 
2040: 24 6c 6f 64 6e 61 6d 65 7d 0a 0a 09 69 66 20 7b  $lodname}...if {
2050: 5b 24 6d 79 74 79 70 65 6f 62 6a 20 69 73 74 61  [$mytypeobj ista
2060: 67 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e  g]} {..    # Han
2070: 64 6c 65 20 74 61 67 73 2e 20 54 68 65 79 20 61  dle tags. They a
2080: 70 70 65 61 72 20 69 6d 6d 65 64 69 61 74 65 6c  ppear immediatel
2090: 79 20 61 66 74 65 72 20 74 68 65 20 72 65 76 69  y after the revi
20a0: 73 69 6f 6e 0a 09 20 20 20 20 23 20 74 68 65 79  sion..    # they
20b0: 20 61 72 65 20 61 74 74 61 63 68 65 64 20 74 6f   are attached to
20c0: 20 28 2a 29 2e 20 57 65 20 63 61 6e 20 61 73 73   (*). We can ass
20d0: 75 6d 65 20 74 68 61 74 20 74 68 65 0a 09 20 20  ume that the..  
20e0: 20 20 23 20 77 6f 72 6b 73 70 61 63 65 20 66 6f    # workspace fo
20f0: 72 20 74 68 65 20 72 65 6c 65 76 61 6e 74 20 6c  r the relevant l
2100: 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65  ine of developme
2110: 6e 74 0a 09 20 20 20 20 23 20 65 78 69 73 74 73  nt..    # exists
2120: 2e 20 57 65 20 72 65 74 72 69 65 76 65 20 69 74  . We retrieve it
2130: 2c 20 74 68 65 6e 20 74 68 65 20 75 75 69 64 20  , then the uuid 
2140: 6f 66 20 74 68 65 20 6c 61 73 74 0a 09 20 20 20  of the last..   
2150: 20 23 20 72 65 76 69 73 69 6f 6e 20 65 6e 74 65   # revision ente
2160: 72 65 64 20 69 6e 74 6f 20 69 74 2c 20 74 68 65  red into it, the
2170: 6e 20 74 61 67 20 74 68 69 73 20 72 65 76 69 73  n tag this revis
2180: 69 6f 6e 2e 0a 0a 09 20 20 20 20 23 20 28 2a 29  ion....    # (*)
2190: 20 49 6d 6d 65 64 69 61 74 65 6c 79 20 69 6e 20   Immediately in 
21a0: 74 65 72 6d 73 20 6f 66 20 74 68 65 20 72 65 6c  terms of the rel
21b0: 65 76 61 6e 74 20 6c 69 6e 65 20 6f 66 0a 09 20  evant line of.. 
21c0: 20 20 20 23 20 20 20 20 20 64 65 76 65 6c 6f 70     #     develop
21d0: 6d 65 6e 74 2e 20 52 65 76 69 73 69 6f 6e 73 20  ment. Revisions 
21e0: 6f 6e 20 6f 74 68 65 72 20 6c 69 6e 65 73 20 6d  on other lines m
21f0: 61 79 20 63 6f 6d 65 20 69 6e 0a 09 20 20 20 20  ay come in..    
2200: 23 20 20 20 20 20 62 65 74 77 65 65 6e 2c 20 62  #     between, b
2210: 75 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 6d  ut they do not m
2220: 61 74 74 65 72 20 74 6f 20 74 68 61 74 2e 0a 0a  atter to that...
2230: 09 20 20 20 20 73 65 74 20 6c 77 73 20 20 5b 47  .    set lws  [G
2240: 65 74 77 6f 72 6b 73 70 61 63 65 20 24 72 73 74  etworkspace $rst
2250: 61 74 65 20 24 6c 6f 64 6e 61 6d 65 20 24 6d 79  ate $lodname $my
2260: 70 72 6f 6a 65 63 74 20 30 5d 0a 09 20 20 20 20  project 0]..    
2270: 73 65 74 20 75 75 69 64 20 5b 6c 69 6e 64 65 78  set uuid [lindex
2280: 20 5b 24 6c 77 73 20 67 65 74 69 64 5d 20 31 5d   [$lws getid] 1]
2290: 0a 0a 09 20 20 20 20 24 72 65 70 6f 73 69 74 6f  ...    $reposito
22a0: 72 79 20 74 61 67 20 24 75 75 69 64 20 5b 73 74  ry tag $uuid [st
22b0: 61 74 65 20 6f 6e 65 20 7b 0a 09 09 53 45 4c 45  ate one {...SELE
22c0: 43 54 20 53 2e 6e 61 6d 65 0a 09 09 46 52 4f 4d  CT S.name...FROM
22d0: 20 20 20 73 79 6d 62 6f 6c 20 53 0a 09 09 57 48     symbol S...WH
22e0: 45 52 45 20 20 53 2e 73 69 64 20 3d 20 24 6d 79  ERE  S.sid = $my
22f0: 73 72 63 69 64 0a 09 20 20 20 20 7d 5d 0a 0a 09  srcid..    }]...
2300: 7d 20 65 6c 73 65 69 66 20 7b 5b 24 6d 79 74 79  } elseif {[$myty
2310: 70 65 6f 62 6a 20 69 73 62 72 61 6e 63 68 5d 7d  peobj isbranch]}
2320: 20 7b 0a 0a 09 20 20 20 20 23 20 48 61 6e 64 6c   {...    # Handl
2330: 65 20 62 72 61 6e 63 68 65 73 2e 20 54 68 65 79  e branches. They
2340: 20 61 70 70 65 61 72 20 69 6d 6d 65 64 69 61 74   appear immediat
2350: 65 6c 79 20 61 66 74 65 72 20 74 68 65 0a 09 20  ely after the.. 
2360: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 74 68     # revision th
2370: 65 79 20 61 72 65 20 73 70 61 77 6e 65 64 20 66  ey are spawned f
2380: 72 6f 6d 20 28 2a 29 2e 20 57 65 20 63 61 6e 20  rom (*). We can 
2390: 61 73 73 75 6d 65 20 74 68 61 74 0a 09 20 20 20  assume that..   
23a0: 20 23 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65   # the workspace
23b0: 20 66 6f 72 20 74 68 65 20 72 65 6c 65 76 61 6e   for the relevan
23c0: 74 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f  t line of develo
23d0: 70 6d 65 6e 74 0a 09 20 20 20 20 23 20 65 78 69  pment..    # exi
23e0: 73 74 73 2e 0a 0a 09 20 20 20 20 23 20 57 65 20  sts....    # We 
23f0: 72 65 74 72 69 65 76 65 20 69 74 2c 20 74 68 65  retrieve it, the
2400: 6e 20 74 68 65 20 75 75 69 64 20 6f 66 20 74 68  n the uuid of th
2410: 65 20 6c 61 73 74 20 72 65 76 69 73 69 6f 6e 0a  e last revision.
2420: 09 20 20 20 20 23 20 65 6e 74 65 72 65 64 20 69  .    # entered i
2430: 6e 74 6f 20 69 74 2e 20 54 68 61 74 20 72 65 76  nto it. That rev
2440: 69 73 69 6f 6e 20 69 73 20 74 61 67 67 65 64 20  ision is tagged 
2450: 61 73 20 74 68 65 20 72 6f 6f 74 20 6f 66 0a 09  as the root of..
2460: 20 20 20 20 23 20 74 68 65 20 62 72 61 6e 63 68      # the branch
2470: 20 28 2a 2a 29 2e 20 41 20 6e 65 77 20 77 6f 72   (**). A new wor
2480: 6b 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 62  kspace for the b
2490: 72 61 6e 63 68 20 69 73 0a 09 20 20 20 20 23 20  ranch is..    # 
24a0: 63 72 65 61 74 65 64 20 61 73 20 77 65 6c 6c 2c  created as well,
24b0: 20 66 6f 72 20 74 68 65 20 66 75 74 75 72 65 20   for the future 
24c0: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 74 68 65  revisions of the
24d0: 20 6e 65 77 0a 09 20 20 20 20 23 20 6c 69 6e 65   new..    # line
24e0: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e   of development.
24f0: 0a 0a 09 20 20 20 20 23 20 41 6e 20 65 78 63 65  ...    # An exce
2500: 70 74 69 6f 6e 20 69 73 20 6d 61 64 65 20 6f 66  ption is made of
2510: 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64   the non-trunk d
2520: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 0a 09  efault branch,..
2530: 20 20 20 20 23 20 61 6b 61 20 76 65 6e 64 6f 72      # aka vendor
2540: 20 62 72 61 6e 63 68 2e 20 54 68 69 73 20 6c 6f   branch. This lo
2550: 64 20 68 61 73 20 74 6f 20 68 61 76 65 20 61 20  d has to have a 
2560: 77 6f 72 6b 73 70 61 63 65 20 6e 6f 74 0a 09 20  workspace not.. 
2570: 20 20 20 23 20 69 6e 68 65 72 69 74 65 64 20 66     # inherited f
2580: 72 6f 6d 20 61 6e 79 74 68 69 6e 67 20 65 6c 73  rom anything els
2590: 65 2e 20 49 74 20 68 61 73 20 6e 6f 20 72 6f 6f  e. It has no roo
25a0: 74 20 65 69 74 68 65 72 2c 20 73 6f 0a 09 20 20  t either, so..  
25b0: 20 20 23 20 74 61 67 67 69 6e 67 20 69 73 20 6f    # tagging is o
25c0: 75 74 20 61 73 20 77 65 6c 6c 2e 0a 0a 09 20 20  ut as well....  
25d0: 20 20 23 20 28 2a 29 20 49 6d 6d 65 64 69 61 74    # (*) Immediat
25e0: 65 6c 79 20 69 6e 20 74 65 72 6d 73 20 6f 66 20  ely in terms of 
25f0: 74 68 65 20 72 65 6c 65 76 61 6e 74 20 6c 69 6e  the relevant lin
2600: 65 20 6f 66 0a 09 20 20 20 20 23 20 20 20 20 20  e of..    #     
2610: 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 20 52 65 76  development. Rev
2620: 69 73 69 6f 6e 73 20 6f 6e 20 6f 74 68 65 72 20  isions on other 
2630: 6c 69 6e 65 73 20 6d 61 79 20 63 6f 6d 65 20 69  lines may come i
2640: 6e 0a 09 20 20 20 20 23 20 20 20 20 20 62 65 74  n..    #     bet
2650: 77 65 65 6e 2c 20 62 75 74 20 74 68 65 79 20 64  ween, but they d
2660: 6f 20 6e 6f 74 20 6d 61 74 74 65 72 20 74 6f 20  o not matter to 
2670: 74 68 61 74 2e 0a 0a 09 20 20 20 20 23 20 28 2a  that....    # (*
2680: 2a 29 20 54 61 67 67 69 6e 67 20 74 68 65 20 70  *) Tagging the p
2690: 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 20 6f  arent revision o
26a0: 66 20 74 68 65 20 62 72 61 6e 63 68 20 61 73 20  f the branch as 
26b0: 69 74 73 0a 09 20 20 20 20 23 20 20 20 20 20 20  its..    #      
26c0: 72 6f 6f 74 20 69 73 20 64 6f 6e 65 20 74 6f 20  root is done to 
26d0: 6c 65 74 20 75 73 20 6b 6e 6f 77 20 61 62 6f 75  let us know abou
26e0: 74 20 74 68 65 20 65 78 69 73 74 65 6e 63 65 20  t the existence 
26f0: 6f 66 0a 09 20 20 20 20 23 20 20 20 20 20 20 74  of..    #      t
2700: 68 65 20 62 72 61 6e 63 68 20 65 76 65 6e 20 69  he branch even i
2710: 66 20 69 74 20 68 61 73 20 6e 6f 20 72 65 76 69  f it has no revi
2720: 73 69 6f 6e 73 20 63 6f 6d 6d 69 74 74 65 64 20  sions committed 
2730: 74 6f 0a 09 20 20 20 20 23 20 20 20 20 20 20 69  to..    #      i
2740: 74 2c 20 61 6e 64 20 74 68 75 73 20 6e 6f 20 72  t, and thus no r
2750: 65 67 75 6c 61 72 20 62 72 61 6e 63 68 20 74 61  egular branch ta
2760: 67 20 61 6e 79 77 68 65 72 65 20 65 6c 73 65 2e  g anywhere else.
2770: 0a 09 20 20 20 20 23 20 20 20 20 20 20 54 68 65  ..    #      The
2780: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 67   name of the tag
2790: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 66 6f 72   is the name for
27a0: 20 74 68 65 20 6c 6f 64 2c 20 77 69 74 68 0a 09   the lod, with..
27b0: 20 20 20 20 23 20 20 20 20 20 20 74 68 65 20 73      #      the s
27c0: 75 66 66 69 78 20 27 2d 72 6f 6f 74 27 20 61 70  uffix '-root' ap
27d0: 70 65 6e 64 65 64 20 74 6f 20 69 74 2e 0a 0a 09  pended to it....
27e0: 20 20 20 20 23 20 4c 4f 44 20 69 73 20 73 65 6c      # LOD is sel
27f0: 66 20 73 79 6d 62 6f 6c 20 6f 66 20 62 72 61 6e  f symbol of bran
2800: 63 68 2c 20 6e 6f 74 20 70 61 72 65 6e 74 0a 09  ch, not parent..
2810: 20 20 20 20 73 65 74 20 6c 6f 64 6e 61 6d 65 20      set lodname 
2820: 5b 73 74 61 74 65 20 6f 6e 65 20 7b 0a 09 09 53  [state one {...S
2830: 45 4c 45 43 54 20 53 2e 6e 61 6d 65 0a 09 09 46  ELECT S.name...F
2840: 52 4f 4d 20 20 20 73 79 6d 62 6f 6c 20 53 0a 09  ROM   symbol S..
2850: 09 57 48 45 52 45 20 20 53 2e 73 69 64 20 3d 20  .WHERE  S.sid = 
2860: 24 6d 79 73 72 63 69 64 0a 09 20 20 20 20 7d 5d  $mysrcid..    }]
2870: 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b 24 72 73  ...    if {![$rs
2880: 74 61 74 65 20 68 61 73 20 3a 74 72 75 6e 6b 3a  tate has :trunk:
2890: 5d 7d 20 7b 0a 09 09 23 20 4e 6f 20 74 72 75 6e  ]} {...# No trun
28a0: 6b 20 69 6d 70 6c 69 65 73 20 64 65 66 61 75 6c  k implies defaul
28b0: 74 20 62 72 61 6e 63 68 2e 20 4a 75 73 74 20 63  t branch. Just c
28c0: 72 65 61 74 65 20 74 68 65 0a 09 09 23 20 70 72  reate the...# pr
28d0: 6f 70 65 72 20 77 6f 72 6b 73 70 61 63 65 2e 0a  oper workspace..
28e0: 09 09 47 65 74 77 6f 72 6b 73 70 61 63 65 20 24  ..Getworkspace $
28f0: 72 73 74 61 74 65 20 24 6c 6f 64 6e 61 6d 65 20  rstate $lodname 
2900: 24 6d 79 70 72 6f 6a 65 63 74 20 31 0a 09 20 20  $myproject 1..  
2910: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 4e    } else {...# N
2920: 6f 6e 2d 64 65 66 61 75 6c 74 20 62 72 61 6e 63  on-default branc
2930: 68 2e 20 4e 65 65 64 20 77 6f 72 6b 73 70 61 63  h. Need workspac
2940: 65 2c 20 61 6e 64 20 74 61 67 20 70 61 72 65 6e  e, and tag paren
2950: 74 0a 09 09 23 20 72 65 76 69 73 69 6f 6e 2e 0a  t...# revision..
2960: 0a 09 09 73 65 74 20 6c 77 73 20 5b 47 65 74 77  ...set lws [Getw
2970: 6f 72 6b 73 70 61 63 65 20 24 72 73 74 61 74 65  orkspace $rstate
2980: 20 24 6c 6f 64 6e 61 6d 65 20 24 6d 79 70 72 6f   $lodname $mypro
2990: 6a 65 63 74 20 30 5d 0a 09 09 73 65 74 20 75 75  ject 0]...set uu
29a0: 69 64 20 5b 6c 69 6e 64 65 78 20 5b 24 6c 77 73  id [lindex [$lws
29b0: 20 67 65 74 69 64 5d 20 31 5d 0a 0a 09 09 24 72   getid] 1]....$r
29c0: 65 70 6f 73 69 74 6f 72 79 20 74 61 67 20 24 75  epository tag $u
29d0: 75 69 64 20 24 7b 6c 6f 64 6e 61 6d 65 7d 2d 72  uid ${lodname}-r
29e0: 6f 6f 74 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c  oot..    }..} el
29f0: 73 65 20 7b 0a 09 20 20 20 20 23 20 52 65 76 69  se {..    # Revi
2a00: 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 2e 0a  sion changeset..
2a10: 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a 6c 69  ..    struct::li
2a20: 73 74 20 61 73 73 69 67 6e 20 5b 24 6d 79 70 72  st assign [$mypr
2a30: 6f 6a 65 63 74 20 67 65 74 6d 65 74 61 20 24 6d  oject getmeta $m
2a40: 79 73 72 63 69 64 5d 20 5f 5f 20 5f 5f 20 75 73  ysrcid] __ __ us
2a50: 65 72 20 6d 65 73 73 61 67 65 0a 0a 09 20 20 20  er message...   
2a60: 20 23 20 50 65 72 66 6f 72 6d 20 74 68 65 20 69   # Perform the i
2a70: 6d 70 6f 72 74 2e 20 41 73 20 70 61 72 74 20 6f  mport. As part o
2a80: 66 20 74 68 61 74 20 77 65 20 64 65 74 65 72 6d  f that we determ
2a90: 69 6e 65 20 74 68 65 0a 09 20 20 20 20 23 20 70  ine the..    # p
2aa0: 61 72 65 6e 74 20 77 65 20 6e 65 65 64 2c 20 61  arent we need, a
2ab0: 6e 64 20 63 6f 6e 76 65 72 74 20 74 68 65 20 6c  nd convert the l
2ac0: 69 73 74 20 6f 66 20 69 74 65 6d 73 20 69 6e 20  ist of items in 
2ad0: 74 68 65 0a 09 20 20 20 20 23 20 63 68 61 6e 67  the..    # chang
2ae0: 65 73 65 74 20 69 6e 74 6f 20 75 75 69 64 73 20  eset into uuids 
2af0: 61 6e 64 20 70 72 69 6e 74 61 62 6c 65 20 64 61  and printable da
2b00: 74 61 2e 0a 0a 09 20 20 20 20 73 74 72 75 63 74  ta....    struct
2b10: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 47  ::list assign [G
2b20: 65 74 69 73 64 65 66 61 75 6c 74 20 24 6d 79 69  etisdefault $myi
2b30: 74 65 6d 73 5d 20 5c 0a 09 09 69 73 64 65 66 61  tems] \...isdefa
2b40: 75 6c 74 20 6c 61 73 74 64 65 66 61 75 6c 74 6f  ult lastdefaulto
2b50: 6e 74 72 75 6e 6b 0a 0a 09 20 20 20 20 6c 6f 67  ntrunk...    log
2b60: 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20 7b   write 8 csets {
2b70: 4c 4f 44 20 20 20 20 27 24 6c 6f 64 6e 61 6d 65  LOD    '$lodname
2b80: 27 7d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  '}..    log writ
2b90: 65 20 38 20 63 73 65 74 73 20 7b 20 64 65 66 3f  e 8 csets { def?
2ba0: 20 20 24 69 73 64 65 66 61 75 6c 74 7d 0a 09 20    $isdefault}.. 
2bb0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 63     log write 8 c
2bc0: 73 65 74 73 20 7b 20 6c 61 73 74 3f 20 24 6c 61  sets { last? $la
2bd0: 73 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b  stdefaultontrunk
2be0: 7d 0a 0a 09 20 20 20 20 73 65 74 20 6c 77 73 20  }...    set lws 
2bf0: 20 5b 47 65 74 77 6f 72 6b 73 70 61 63 65 20 20   [Getworkspace  
2c00: 20 20 24 72 73 74 61 74 65 20 24 6c 6f 64 6e 61    $rstate $lodna
2c10: 6d 65 20 24 6d 79 70 72 6f 6a 65 63 74 20 24 69  me $myproject $i
2c20: 73 64 65 66 61 75 6c 74 5d 0a 09 20 20 20 20 24  sdefault]..    $
2c30: 6c 77 73 20 61 64 64 20 5b 47 65 74 72 65 76 69  lws add [Getrevi
2c40: 73 69 6f 6e 69 6e 66 6f 20 24 6d 79 69 74 65 6d  sioninfo $myitem
2c50: 73 5d 0a 0a 09 20 20 20 20 73 74 72 75 63 74 3a  s]...    struct:
2c60: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5c 0a 09  :list assign \..
2c70: 09 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 69 6d  .[$repository im
2c80: 70 6f 72 74 72 65 76 69 73 69 6f 6e 20 5b 24 73  portrevision [$s
2c90: 65 6c 66 20 73 74 72 5d 20 5c 0a 09 09 20 20 20  elf str] \...   
2ca0: 20 20 24 75 73 65 72 20 24 6d 65 73 73 61 67 65    $user $message
2cb0: 20 24 64 61 74 65 20 5c 0a 09 09 20 20 20 20 20   $date \...     
2cc0: 5b 6c 69 6e 64 65 78 20 5b 24 6c 77 73 20 67 65  [lindex [$lws ge
2cd0: 74 69 64 5d 20 30 5d 20 5b 24 6c 77 73 20 67 65  tid] 0] [$lws ge
2ce0: 74 5d 5d 20 5c 0a 09 09 72 69 64 20 75 75 69 64  t]] \...rid uuid
2cf0: 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 6c 77 73  ...    if {[$lws
2d00: 20 74 69 63 6b 73 5d 20 3d 3d 20 31 7d 20 7b 0a   ticks] == 1} {.
2d10: 09 09 23 20 46 69 72 73 74 20 63 6f 6d 6d 69 74  ..# First commit
2d20: 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 6f 66   on this line of
2d30: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 20 53 65   development. Se
2d40: 74 20 6f 75 72 0a 09 09 23 20 6f 77 6e 20 6e 61  t our...# own na
2d50: 6d 65 20 61 73 20 61 20 70 72 6f 70 61 67 61 74  me as a propagat
2d60: 69 6e 67 20 74 61 67 2e 20 41 6e 64 20 69 66 20  ing tag. And if 
2d70: 74 68 65 20 4c 4f 44 20 68 61 73 20 61 0a 09 09  the LOD has a...
2d80: 23 20 70 61 72 65 6e 74 20 77 65 20 68 61 76 65  # parent we have
2d90: 20 74 6f 20 70 72 65 76 65 6e 74 20 74 68 65 20   to prevent the 
2da0: 70 72 6f 70 61 67 61 74 69 6f 6e 20 6f 66 20 74  propagation of t
2db0: 68 61 74 0a 09 09 23 20 74 61 67 20 69 6e 74 6f  hat...# tag into
2dc0: 20 74 68 69 73 20 6e 65 77 20 6c 69 6e 65 2e 0a   this new line..
2dd0: 0a 09 09 73 65 74 20 70 6c 77 73 20 5b 24 6c 77  ...set plws [$lw
2de0: 73 20 70 61 72 65 6e 74 5d 0a 09 09 69 66 20 7b  s parent]...if {
2df0: 24 70 6c 77 73 20 6e 65 20 22 22 7d 20 7b 0a 09  $plws ne ""} {..
2e00: 09 20 20 20 20 24 72 65 70 6f 73 69 74 6f 72 79  .    $repository
2e10: 20 62 72 61 6e 63 68 63 61 6e 63 65 6c 20 24 75   branchcancel $u
2e20: 75 69 64 20 5b 24 70 6c 77 73 20 6e 61 6d 65 5d  uid [$plws name]
2e30: 0a 09 09 7d 0a 09 09 24 72 65 70 6f 73 69 74 6f  ...}...$reposito
2e40: 72 79 20 62 72 61 6e 63 68 6d 61 72 6b 20 24 75  ry branchmark $u
2e50: 75 69 64 20 5b 24 6c 77 73 20 6e 61 6d 65 5d 0a  uid [$lws name].
2e60: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 52  .    }...    # R
2e70: 65 6d 65 6d 62 65 72 20 74 68 65 20 69 6d 70 6f  emember the impo
2e80: 72 74 65 64 20 63 68 61 6e 67 65 73 65 74 20 69  rted changeset i
2e90: 6e 20 74 68 65 20 73 74 61 74 65 2c 20 75 6e 64  n the state, und
2ea0: 65 72 20 6f 75 72 0a 09 20 20 20 20 23 20 4c 4f  er our..    # LO
2eb0: 44 2e 20 41 6e 64 20 69 66 20 69 74 20 69 73 20  D. And if it is 
2ec0: 74 68 65 20 6c 61 73 74 20 74 72 75 6e 6b 20 63  the last trunk c
2ed0: 68 61 6e 67 65 73 65 74 20 6f 6e 20 74 68 65 20  hangeset on the 
2ee0: 76 65 6e 64 6f 72 0a 09 20 20 20 20 23 20 62 72  vendor..    # br
2ef0: 61 6e 63 68 20 74 68 65 6e 20 74 68 65 20 72 65  anch then the re
2f00: 76 69 73 69 6f 6e 20 69 73 20 61 6c 73 6f 20 74  vision is also t
2f10: 68 65 20 61 63 74 75 61 6c 20 72 6f 6f 74 20 6f  he actual root o
2f20: 66 20 74 68 65 0a 09 20 20 20 20 23 20 3a 74 72  f the..    # :tr
2f30: 75 6e 6b 3a 2c 20 73 6f 20 77 65 20 72 65 6d 65  unk:, so we reme
2f40: 6d 62 65 72 20 69 74 20 61 73 20 73 75 63 68 20  mber it as such 
2f50: 69 6e 20 74 68 65 20 73 74 61 74 65 2e 20 48 6f  in the state. Ho
2f60: 77 65 76 65 72 0a 09 20 20 20 20 23 20 69 66 20  wever..    # if 
2f70: 74 68 65 20 74 72 75 6e 6b 20 61 6c 72 65 61 64  the trunk alread
2f80: 79 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  y exists then th
2f90: 65 20 63 68 61 6e 67 65 73 65 74 20 63 61 6e 6e  e changeset cann
2fa0: 6f 74 20 62 65 0a 09 20 20 20 20 23 20 6f 6e 20  ot be..    # on 
2fb0: 69 74 20 61 6e 79 20 6d 6f 72 65 2e 20 54 68 69  it any more. Thi
2fc0: 73 20 69 6e 64 69 63 61 74 65 73 20 77 65 69 72  s indicates weir
2fd0: 64 6e 65 73 73 20 69 6e 20 74 68 65 20 73 65 74  dness in the set
2fe0: 75 70 20 6f 66 0a 09 20 20 20 20 23 20 74 68 65  up of..    # the
2ff0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20   vendor branch, 
3000: 62 75 74 20 6f 6e 65 20 77 65 20 63 61 6e 20 77  but one we can w
3010: 6f 72 6b 20 61 72 6f 75 6e 64 2e 0a 0a 09 20 20  ork around....  
3020: 20 20 24 6c 77 73 20 64 65 66 69 64 20 5b 6c 69    $lws defid [li
3030: 73 74 20 24 72 69 64 20 24 75 75 69 64 5d 0a 09  st $rid $uuid]..
3040: 20 20 20 20 69 66 20 7b 24 6c 61 73 74 64 65 66      if {$lastdef
3050: 61 75 6c 74 6f 6e 74 72 75 6e 6b 7d 20 7b 0a 09  aultontrunk} {..
3060: 09 6c 6f 67 20 77 72 69 74 65 20 32 20 63 73 65  .log write 2 cse
3070: 74 73 20 7b 54 68 69 73 20 63 73 65 74 20 69 73  ts {This cset is
3080: 20 74 68 65 20 6c 61 73 74 20 6f 6e 20 74 68 65   the last on the
3090: 20 4e 54 44 42 2c 20 73 65 74 20 74 68 65 20 74   NTDB, set the t
30a0: 72 75 6e 6b 20 77 6f 72 6b 73 70 61 63 65 20 75  runk workspace u
30b0: 70 7d 0a 0a 09 09 69 66 20 7b 5b 24 72 73 74 61  p}....if {[$rsta
30c0: 74 65 20 68 61 73 20 3a 74 72 75 6e 6b 3a 5d 7d  te has :trunk:]}
30d0: 20 7b 0a 09 09 20 20 20 20 6c 6f 67 20 77 72 69   {...    log wri
30e0: 74 65 20 32 20 63 73 65 74 73 20 7b 4d 75 6c 74  te 2 csets {Mult
30f0: 69 70 6c 65 20 63 68 61 6e 67 65 73 65 74 73 20  iple changesets 
3100: 64 65 63 6c 61 72 65 64 20 74 6f 20 62 65 20 74  declared to be t
3110: 68 65 20 6c 61 73 74 20 74 72 75 6e 6b 20 63 68  he last trunk ch
3120: 61 6e 67 65 73 65 74 20 6f 6e 20 74 68 65 20 76  angeset on the v
3130: 65 6e 64 6f 72 2d 62 72 61 6e 63 68 7d 0a 09 09  endor-branch}...
3140: 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 24  } else {...    $
3150: 72 73 74 61 74 65 20 6e 65 77 20 3a 74 72 75 6e  rstate new :trun
3160: 6b 3a 20 5b 24 6c 77 73 20 6e 61 6d 65 5d 0a 09  k: [$lws name]..
3170: 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 6c  .}..    }..}...l
3180: 6f 67 20 77 72 69 74 65 20 32 20 63 73 65 74 73  og write 2 csets
3190: 20 7b 20 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20   { }..log write 
31a0: 32 20 63 73 65 74 73 20 7b 20 7d 0a 09 72 65 74  2 csets { }..ret
31b0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  urn.    }..    p
31c0: 72 6f 63 20 47 65 74 72 65 76 69 73 69 6f 6e 69  roc Getrevisioni
31d0: 6e 66 6f 20 7b 72 65 76 69 73 69 6f 6e 73 7d 20  nfo {revisions} 
31e0: 7b 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27  {..set theset ('
31f0: 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73  [join $revisions
3200: 20 7b 27 2c 27 7d 5d 27 29 0a 09 73 65 74 20 72   {','}]')..set r
3210: 65 76 69 73 69 6f 6e 73 20 7b 7d 0a 09 73 74 61  evisions {}..sta
3220: 74 65 20 66 6f 72 65 61 63 68 72 6f 77 20 5b 73  te foreachrow [s
3230: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73  ubst -nocommands
3240: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20   -nobackslashes 
3250: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 55 2e  {..    SELECT U.
3260: 75 75 69 64 20 20 20 20 41 53 20 66 72 69 64 2c  uuid    AS frid,
3270: 0a 09 20 20 20 20 20 20 20 20 20 20 20 46 2e 76  ..           F.v
3280: 69 73 69 62 6c 65 20 41 53 20 70 61 74 68 2c 0a  isible AS path,.
3290: 09 20 20 20 20 20 20 20 20 20 20 20 46 2e 6e 61  .           F.na
32a0: 6d 65 20 20 20 20 41 53 20 66 6e 61 6d 65 2c 0a  me    AS fname,.
32b0: 09 20 20 20 20 20 20 20 20 20 20 20 52 2e 72 65  .           R.re
32c0: 76 20 20 20 20 20 41 53 20 72 65 76 6e 72 2c 0a  v     AS revnr,.
32d0: 09 20 20 20 20 20 20 20 20 20 20 20 52 2e 6f 70  .           R.op
32e0: 20 20 20 20 20 20 41 53 20 72 6f 70 0a 09 20 20        AS rop..  
32f0: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f    FROM   revisio
3300: 6e 20 52 2c 20 72 65 76 75 75 69 64 20 55 2c 20  n R, revuuid U, 
3310: 66 69 6c 65 20 46 0a 09 20 20 20 20 57 48 45 52  file F..    WHER
3320: 45 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68 65  E  R.rid IN $the
3330: 73 65 74 20 20 2d 2d 20 41 6c 6c 20 73 70 65 63  set  -- All spec
3340: 69 66 69 65 64 20 72 65 76 69 73 69 6f 6e 73 0a  ified revisions.
3350: 09 20 20 20 20 41 4e 44 20 20 20 20 55 2e 72 69  .    AND    U.ri
3360: 64 20 3d 20 52 2e 72 69 64 20 20 20 20 20 2d 2d  d = R.rid     --
3370: 20 67 65 74 20 66 6f 73 73 69 6c 20 75 75 69 64   get fossil uuid
3380: 20 6f 66 20 72 65 76 69 73 69 6f 6e 0a 09 20 20   of revision..  
3390: 20 20 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d    AND    F.fid =
33a0: 20 52 2e 66 69 64 20 20 20 20 20 2d 2d 20 67 65   R.fid     -- ge
33b0: 74 20 66 69 6c 65 20 6f 66 20 72 65 76 69 73 69  t file of revisi
33c0: 6f 6e 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 6c 61  on..}] {..    la
33d0: 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e 73 20  ppend revisions 
33e0: 24 66 72 69 64 20 24 70 61 74 68 20 24 66 6e 61  $frid $path $fna
33f0: 6d 65 2f 24 72 65 76 6e 72 20 24 72 6f 70 0a 09  me/$revnr $rop..
3400: 7d 0a 09 72 65 74 75 72 6e 20 24 72 65 76 69 73  }..return $revis
3410: 69 6f 6e 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ions.    }..    
3420: 70 72 6f 63 20 47 65 74 77 6f 72 6b 73 70 61 63  proc Getworkspac
3430: 65 20 7b 72 73 74 61 74 65 20 6c 6f 64 6e 61 6d  e {rstate lodnam
3440: 65 20 70 72 6f 6a 65 63 74 20 69 73 64 65 66 61  e project isdefa
3450: 75 6c 74 7d 20 7b 0a 0a 09 23 20 54 68 65 20 73  ult} {...# The s
3460: 74 61 74 65 20 6f 62 6a 65 63 74 20 68 6f 6c 64  tate object hold
3470: 73 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65 20  s the workspace 
3480: 73 74 61 74 65 20 6f 66 20 65 61 63 68 20 6b 6e  state of each kn
3490: 6f 77 6e 0a 09 23 20 6c 69 6e 65 2d 6f 66 2d 64  own..# line-of-d
34a0: 65 76 65 6c 6f 70 6d 65 6e 74 20 28 4c 4f 44 29  evelopment (LOD)
34b0: 2c 20 75 70 20 74 6f 20 74 68 65 20 6c 61 73 74  , up to the last
34c0: 20 63 6f 6d 6d 69 74 74 65 64 0a 09 23 20 63 68   committed..# ch
34d0: 61 6e 67 65 73 65 74 20 62 65 6c 6f 6e 67 69 6e  angeset belongin
34e0: 67 20 74 6f 20 74 68 61 74 20 4c 4f 44 2e 0a 0a  g to that LOD...
34f0: 09 23 20 28 2a 29 20 53 74 61 6e 64 61 72 64 20  .# (*) Standard 
3500: 68 61 6e 64 6c 69 6e 67 20 69 66 20 69 6e 2d 4c  handling if in-L
3510: 4f 44 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49  OD changesets. I
3520: 66 20 74 68 65 20 4c 4f 44 20 6f 66 0a 09 23 20  f the LOD of..# 
3530: 20 20 20 20 74 68 65 20 63 75 72 72 65 6e 74 20      the current 
3540: 63 68 61 6e 67 65 73 65 74 20 65 78 69 73 74 73  changeset exists
3550: 20 69 6e 20 74 68 65 20 73 74 61 74 65 20 28 3d   in the state (=
3560: 20 68 61 73 20 62 65 65 6e 0a 09 23 20 20 20 20   has been..#    
3570: 20 63 6f 6d 6d 69 74 74 65 64 20 74 6f 29 20 74   committed to) t
3580: 68 65 6e 20 74 68 69 73 20 69 74 20 68 61 73 20  hen this it has 
3590: 74 68 65 20 77 6f 72 6b 73 70 61 63 65 20 77 65  the workspace we
35a0: 20 61 72 65 0a 09 23 20 20 20 20 20 6c 6f 6f 6b   are..#     look
35b0: 69 6e 67 20 66 6f 72 2e 0a 0a 09 69 66 20 7b 5b  ing for....if {[
35c0: 24 72 73 74 61 74 65 20 68 61 73 20 24 6c 6f 64  $rstate has $lod
35d0: 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 72 65  name]} {..    re
35e0: 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 67 65  turn [$rstate ge
35f0: 74 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a  t $lodname]..}..
3600: 09 23 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73  .# If the LOD is
3610: 20 68 6f 77 65 76 65 72 20 6e 6f 74 20 79 65 74   however not yet
3620: 20 6b 6e 6f 77 6e 2c 20 74 68 65 6e 20 74 68 65   known, then the
3630: 20 63 75 72 72 65 6e 74 0a 09 23 20 63 68 61 6e   current..# chan
3640: 67 65 73 65 74 20 63 61 6e 20 62 65 20 65 69 74  geset can be eit
3650: 68 65 72 20 6f 66 0a 09 23 20 28 61 29 20 72 6f  her of..# (a) ro
3660: 6f 74 20 6f 66 20 61 20 76 65 6e 64 6f 72 20 62  ot of a vendor b
3670: 72 61 6e 63 68 2c 0a 09 23 20 28 62 29 20 72 6f  ranch,..# (b) ro
3680: 6f 74 20 6f 66 20 74 68 65 20 74 72 75 6e 6b 20  ot of the trunk 
3690: 4c 4f 44 2c 20 6f 72 0a 09 23 20 28 63 29 20 74  LOD, or..# (c) t
36a0: 68 65 20 66 69 72 73 74 20 63 68 61 6e 67 65 73  he first changes
36b0: 65 74 20 69 6e 20 61 20 6e 65 77 20 4c 4f 44 20  et in a new LOD 
36c0: 77 68 69 63 68 20 77 61 73 20 73 70 61 77 6e 65  which was spawne
36d0: 64 20 66 72 6f 6d 0a 09 23 20 20 20 20 20 61 6e  d from..#     an
36e0: 20 65 78 69 73 74 69 6e 67 20 4c 4f 44 2e 0a 0a   existing LOD...
36f0: 09 23 20 46 6f 72 20 62 6f 74 68 20 28 61 29 20  .# For both (a) 
3700: 61 6e 64 20 28 62 29 20 77 65 20 68 61 76 65 20  and (b) we have 
3710: 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20  to create a new 
3720: 77 6f 72 6b 73 70 61 63 65 20 66 6f 72 0a 09 23  workspace for..#
3730: 20 74 68 65 20 6c 6f 64 2c 20 61 6e 64 20 69 74   the lod, and it
3740: 20 64 6f 65 73 6e 27 74 20 69 6e 68 65 72 69 74   doesn't inherit
3750: 20 66 72 6f 6d 20 61 6e 79 74 68 69 6e 67 2e 0a   from anything..
3760: 0a 09 23 20 4f 6e 65 20 65 78 63 65 70 74 69 6f  ..# One exceptio
3770: 6e 20 66 6f 72 20 28 61 29 2e 20 49 66 20 77 65  n for (a). If we
3780: 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61 20   already have a 
3790: 3a 76 65 6e 64 6f 72 3a 20 62 72 61 6e 63 68 0a  :vendor: branch.
37a0: 09 23 20 74 68 65 6e 20 6d 75 6c 74 69 70 6c 65  .# then multiple
37b0: 20 73 79 6d 62 6f 6c 73 20 77 65 72 65 20 75 73   symbols were us
37c0: 65 64 20 66 6f 72 20 74 68 65 20 76 65 6e 64 6f  ed for the vendo
37d0: 72 20 62 72 61 6e 63 68 20 62 79 0a 09 23 20 64  r branch by..# d
37e0: 69 66 66 65 72 65 6e 74 20 66 69 6c 65 73 2e 20  ifferent files. 
37f0: 49 6e 20 74 68 61 74 20 63 61 73 65 20 74 68 65  In that case the
3800: 20 27 6e 65 77 27 20 62 72 61 6e 63 68 20 69 73   'new' branch is
3810: 20 6d 61 64 65 20 61 6e 0a 09 23 20 61 6c 69 61   made an..# alia
3820: 73 20 6f 66 20 74 68 65 20 3a 76 65 6e 64 6f 72  s of the :vendor
3830: 3a 2c 20 65 66 66 65 63 74 69 76 65 6c 79 20 6d  :, effectively m
3840: 65 72 67 69 6e 67 20 74 68 65 20 73 79 6d 62 6f  erging the symbo
3850: 6c 73 0a 09 23 20 74 6f 67 65 74 68 65 72 2e 0a  ls..# together..
3860: 0a 09 23 20 4e 6f 74 65 20 74 68 61 74 20 63 61  ..# Note that ca
3870: 73 65 20 28 62 29 20 6d 61 79 20 6e 65 76 65 72  se (b) may never
3880: 20 6f 63 63 75 72 2e 20 53 65 65 20 74 68 65 20   occur. See the 
3890: 76 61 72 69 61 62 6c 65 0a 09 23 20 27 6c 61 73  variable..# 'las
38a0: 74 64 65 66 61 75 6c 74 6f 6e 74 72 75 6e 6b 27  tdefaultontrunk'
38b0: 20 69 6e 20 74 68 65 20 63 61 6c 6c 65 72 20 28   in the caller (
38c0: 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 29 2e 20  method pushto). 
38d0: 54 68 69 73 0a 09 23 20 66 6c 61 67 20 63 61 6e  This..# flag can
38e0: 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20   the generation 
38f0: 6f 66 20 74 68 65 20 77 6f 72 6b 73 70 61 63 65  of the workspace
3900: 20 66 6f 72 20 74 68 65 20 3a 74 72 75 6e 6b 3a   for the :trunk:
3910: 20 4c 4f 44 0a 09 23 20 61 73 20 77 65 6c 6c 2c   LOD..# as well,
3920: 20 6d 61 6b 69 6e 67 20 69 74 20 69 6e 68 65 72   making it inher
3930: 69 74 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  it the state of 
3940: 74 68 65 20 6c 61 73 74 0a 09 23 20 74 72 75 6e  the last..# trun
3950: 6b 2d 63 68 61 6e 67 65 73 65 74 20 6f 6e 20 74  k-changeset on t
3960: 68 65 20 76 65 6e 64 6f 72 2d 62 72 61 6e 63 68  he vendor-branch
3970: 2e 0a 0a 09 69 66 20 7b 24 69 73 64 65 66 61 75  ....if {$isdefau
3980: 6c 74 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21  lt} {..    if {!
3990: 5b 24 72 73 74 61 74 65 20 68 61 73 20 22 3a 76  [$rstate has ":v
39a0: 65 6e 64 6f 72 3a 22 5d 7d 20 7b 0a 09 09 23 20  endor:"]} {...# 
39b0: 43 72 65 61 74 65 20 74 68 65 20 76 65 6e 64 6f  Create the vendo
39c0: 72 20 62 72 61 6e 63 68 20 69 66 20 6e 6f 74 20  r branch if not 
39d0: 70 72 65 73 65 6e 74 20 61 6c 72 65 61 64 79 2e  present already.
39e0: 20 57 65 0a 09 09 23 20 75 73 65 20 74 68 65 20   We...# use the 
39f0: 61 63 74 75 61 6c 20 6e 61 6d 65 20 66 6f 72 20  actual name for 
3a00: 74 68 65 20 6c 6f 64 2c 20 61 6e 64 20 61 64 64  the lod, and add
3a10: 69 74 69 6f 6e 61 6c 20 6d 61 6b 65 0a 09 09 23  itional make...#
3a20: 20 69 74 20 61 63 63 65 73 73 69 62 6c 65 20 75   it accessible u
3a30: 6e 64 65 72 20 61 6e 20 69 6e 74 65 72 6e 61 6c  nder an internal
3a40: 20 6e 61 6d 65 20 28 3a 76 65 6e 64 6f 72 3a 29   name (:vendor:)
3a50: 20 73 6f 0a 09 09 23 20 74 68 61 74 20 77 65 20   so...# that we 
3a60: 63 61 6e 20 6d 65 72 67 65 20 74 6f 20 69 74 20  can merge to it 
3a70: 6c 61 74 65 72 2c 20 73 68 6f 75 6c 64 20 69 74  later, should it
3a80: 20 62 65 63 6f 6d 65 0a 09 09 23 20 6e 65 63 65   become...# nece
3a90: 73 73 61 72 79 2e 20 53 65 65 20 74 68 65 20 6f  ssary. See the o
3aa0: 74 68 65 72 20 62 72 61 6e 63 68 20 62 65 6c 6f  ther branch belo
3ab0: 77 2e 0a 09 09 24 72 73 74 61 74 65 20 6e 65 77  w....$rstate new
3ac0: 20 24 6c 6f 64 6e 61 6d 65 0a 09 09 24 72 73 74   $lodname...$rst
3ad0: 61 74 65 20 64 75 70 20 3a 76 65 6e 64 6f 72 3a  ate dup :vendor:
3ae0: 20 3c 2d 2d 20 24 6c 6f 64 6e 61 6d 65 0a 09 20   <-- $lodname.. 
3af0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20     } else {...# 
3b00: 4d 65 72 67 65 20 74 68 65 20 6e 65 77 20 73 79  Merge the new sy
3b10: 6d 62 6f 6c 20 74 6f 20 74 68 65 20 76 65 6e 64  mbol to the vend
3b20: 6f 72 20 62 72 61 6e 63 68 0a 09 09 24 72 73 74  or branch...$rst
3b30: 61 74 65 20 64 75 70 20 24 6c 6f 64 6e 61 6d 65  ate dup $lodname
3b40: 20 3c 2d 2d 20 3a 76 65 6e 64 6f 72 3a 0a 09 20   <-- :vendor:.. 
3b50: 20 20 20 7d 0a 09 20 20 20 20 72 65 74 75 72 6e     }..    return
3b60: 20 5b 24 72 73 74 61 74 65 20 67 65 74 20 24 6c   [$rstate get $l
3b70: 6f 64 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 69 66 20  odname]..}...if 
3b80: 7b 24 6c 6f 64 6e 61 6d 65 20 65 71 20 22 3a 74  {$lodname eq ":t
3b90: 72 75 6e 6b 3a 22 7d 20 7b 0a 09 20 20 20 20 72  runk:"} {..    r
3ba0: 65 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 6e  eturn [$rstate n
3bb0: 65 77 20 24 6c 6f 64 6e 61 6d 65 5d 0a 09 7d 0a  ew $lodname]..}.
3bc0: 0a 09 23 20 43 61 73 65 20 28 63 29 2e 20 57 65  ..# Case (c). We
3bd0: 20 66 69 6e 64 20 74 68 65 20 70 61 72 65 6e 74   find the parent
3be0: 20 4c 4f 44 20 6f 66 20 6f 75 72 20 4c 4f 44 20   LOD of our LOD 
3bf0: 61 6e 64 20 6c 65 74 20 74 68 65 20 6e 65 77 0a  and let the new.
3c00: 09 23 20 77 6f 72 6b 73 70 61 63 65 20 69 6e 68  .# workspace inh
3c10: 65 72 69 74 20 66 72 6f 6d 20 74 68 65 20 70 61  erit from the pa
3c20: 72 65 6e 74 27 73 20 77 6f 72 6b 73 70 61 63 65  rent's workspace
3c30: 2e 0a 0a 09 73 65 74 20 70 6c 6f 64 6e 61 6d 65  ....set plodname
3c40: 20 5b 5b 5b 24 70 72 6f 6a 65 63 74 20 67 65 74   [[[$project get
3c50: 73 79 6d 62 6f 6c 20 24 6c 6f 64 6e 61 6d 65 5d  symbol $lodname]
3c60: 20 70 61 72 65 6e 74 5d 20 6e 61 6d 65 5d 0a 0a   parent] name]..
3c70: 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73 65  .log write 8 cse
3c80: 74 73 20 7b 70 4c 4f 44 20 20 20 27 24 70 6c 6f  ts {pLOD   '$plo
3c90: 64 6e 61 6d 65 27 7d 0a 0a 09 69 66 20 7b 5b 24  dname'}...if {[$
3ca0: 72 73 74 61 74 65 20 68 61 73 20 24 70 6c 6f 64  rstate has $plod
3cb0: 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 72 65  name]} {..    re
3cc0: 74 75 72 6e 20 5b 24 72 73 74 61 74 65 20 6e 65  turn [$rstate ne
3cd0: 77 20 24 6c 6f 64 6e 61 6d 65 20 24 70 6c 6f 64  w $lodname $plod
3ce0: 6e 61 6d 65 5d 0a 09 7d 0a 0a 09 66 6f 72 65 61  name]..}...forea
3cf0: 63 68 20 6b 20 5b 6c 73 6f 72 74 20 5b 24 72 73  ch k [lsort [$rs
3d00: 74 61 74 65 20 6e 61 6d 65 73 5d 5d 20 7b 0a 09  tate names]] {..
3d10: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20      log write 8 
3d20: 63 73 65 74 73 20 7b 20 20 20 20 24 6b 20 3d 20  csets {    $k = 
3d30: 5b 5b 24 72 73 74 61 74 65 20 67 65 74 20 24 6b  [[$rstate get $k
3d40: 5d 20 67 65 74 69 64 5d 7d 0a 09 7d 0a 0a 09 74  ] getid]}..}...t
3d50: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20  rouble internal 
3d60: 7b 55 6e 61 62 6c 65 20 74 6f 20 64 65 74 65 72  {Unable to deter
3d70: 6d 69 6e 65 20 63 68 61 6e 67 65 73 65 74 20 70  mine changeset p
3d80: 61 72 65 6e 74 7d 0a 09 72 65 74 75 72 6e 0a 20  arent}..return. 
3d90: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 47     }..    proc G
3da0: 65 74 69 73 64 65 66 61 75 6c 74 20 7b 72 65 76  etisdefault {rev
3db0: 69 73 69 6f 6e 73 7d 20 7b 0a 09 73 65 74 20 74  isions} {..set t
3dc0: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72  heset ('[join $r
3dd0: 65 76 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27  evisions {','}]'
3de0: 29 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74  )...struct::list
3df0: 20 61 73 73 69 67 6e 20 5b 73 74 61 74 65 20 72   assign [state r
3e00: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d  un [subst -nocom
3e10: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61  mands -nobacksla
3e20: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45  shes {..    SELE
3e30: 43 54 20 52 2e 69 73 64 65 66 61 75 6c 74 2c 20  CT R.isdefault, 
3e40: 52 2e 64 62 63 68 69 6c 64 0a 09 20 20 20 20 46  R.dbchild..    F
3e50: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52  ROM   revision R
3e60: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72  ..    WHERE  R.r
3e70: 69 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 2d  id IN $theset  -
3e80: 2d 20 41 6c 6c 20 73 70 65 63 69 66 69 65 64 20  - All specified 
3e90: 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 20 4c  revisions..    L
3ea0: 49 4d 49 54 20 31 0a 09 7d 5d 5d 20 64 65 66 20  IMIT 1..}]] def 
3eb0: 6c 61 73 74 0a 0a 09 23 20 54 4f 44 4f 2f 43 48  last...# TODO/CH
3ec0: 45 43 4b 3a 20 6c 6f 6f 6b 20 66 6f 72 20 63 68  ECK: look for ch
3ed0: 61 6e 67 65 73 65 74 73 20 77 68 65 72 65 20 69  angesets where i
3ee0: 73 64 65 66 61 75 6c 74 2f 64 62 63 68 69 6c 64  sdefault/dbchild
3ef0: 20 69 73 0a 09 23 20 61 6d 62 69 67 6f 75 73 2e   is..# ambigous.
3f00: 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20  ...return [list 
3f10: 24 64 65 66 20 5b 65 78 70 72 20 7b 24 6c 61 73  $def [expr {$las
3f20: 74 20 6e 65 20 22 22 7d 5d 5d 0a 20 20 20 20 7d  t ne ""}]].    }
3f30: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64  ..    typemethod
3f40: 20 73 70 6c 69 74 20 7b 63 73 65 74 20 61 72 67   split {cset arg
3f50: 73 7d 20 7b 0a 09 23 20 41 73 20 70 61 72 74 20  s} {..# As part 
3f60: 6f 66 20 74 68 65 20 63 72 65 61 74 69 6f 6e 20  of the creation 
3f70: 6f 66 20 74 68 65 20 6e 65 77 20 63 68 61 6e 67  of the new chang
3f80: 65 73 65 74 73 20 73 70 65 63 69 66 69 65 64 20  esets specified 
3f90: 69 6e 0a 09 23 20 41 52 47 53 20 61 73 20 73 65  in..# ARGS as se
3fa0: 74 73 20 6f 66 20 69 74 65 6d 73 2c 20 61 6c 6c  ts of items, all
3fb0: 20 73 75 62 73 65 74 73 20 6f 66 20 43 53 45 54   subsets of CSET
3fc0: 27 73 20 69 74 65 6d 20 73 65 74 2c 20 43 53 45  's item set, CSE
3fd0: 54 0a 09 23 20 77 69 6c 6c 20 62 65 20 64 72 6f  T..# will be dro
3fe0: 70 70 65 64 20 66 72 6f 6d 20 61 6c 6c 20 64 61  pped from all da
3ff0: 74 61 62 61 73 65 73 2c 20 69 6e 20 61 6e 64 20  tabases, in and 
4000: 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2c 0a 09  out of memory,..
4010: 23 20 61 6e 64 20 74 68 65 6e 20 64 65 73 74 72  # and then destr
4020: 6f 79 65 64 2e 0a 09 23 0a 09 23 20 4e 6f 74 65  oyed...#..# Note
4030: 3a 20 54 68 65 20 69 74 65 6d 20 6c 69 73 74 73  : The item lists
4040: 20 66 6f 75 6e 64 20 69 6e 20 61 72 67 73 20 61   found in args a
4050: 72 65 20 74 61 67 67 65 64 20 69 74 65 6d 73 2e  re tagged items.
4060: 20 54 68 65 79 0a 09 23 20 68 61 76 65 20 74 6f   They..# have to
4070: 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 74   have the same t
4080: 79 70 65 20 61 73 20 74 68 65 20 63 68 61 6e 67  ype as the chang
4090: 65 73 65 74 2c 20 62 65 69 6e 67 20 73 75 62 73  eset, being subs
40a0: 65 74 73 0a 09 23 20 6f 66 20 69 74 73 20 69 74  ets..# of its it
40b0: 65 6d 73 2e 20 54 68 69 73 20 69 73 20 63 68 65  ems. This is che
40c0: 63 6b 65 64 20 69 6e 20 55 6e 74 61 67 31 2e 0a  cked in Untag1..
40d0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 38 20 63 73  ..log write 8 cs
40e0: 65 74 73 20 7b 4f 4c 44 3a 20 5b 6c 73 6f 72 74  ets {OLD: [lsort
40f0: 20 5b 24 63 73 65 74 20 69 74 65 6d 73 5d 5d 7d   [$cset items]]}
4100: 0a 09 56 61 6c 69 64 61 74 65 46 72 61 67 6d 65  ..ValidateFragme
4110: 6e 74 73 20 24 63 73 65 74 20 24 61 72 67 73 0a  nts $cset $args.
4120: 0a 09 23 20 41 6c 6c 20 63 68 65 63 6b 73 20 70  ..# All checks p
4130: 61 73 73 2c 20 61 63 74 75 61 6c 6c 79 20 70 65  ass, actually pe
4140: 72 66 6f 72 6d 20 74 68 65 20 73 70 6c 69 74 2e  rform the split.
4150: 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20  ...struct::list 
4160: 61 73 73 69 67 6e 20 5b 24 63 73 65 74 20 64 61  assign [$cset da
4170: 74 61 5d 20 70 72 6f 6a 65 63 74 20 63 73 74 79  ta] project csty
4180: 70 65 20 63 73 73 72 63 0a 0a 09 73 65 74 20 70  pe cssrc...set p
4190: 72 65 64 65 63 65 73 73 6f 72 73 20 5b 24 63 73  redecessors [$cs
41a0: 65 74 20 64 72 6f 70 5d 0a 09 24 63 73 65 74 20  et drop]..$cset 
41b0: 64 65 73 74 72 6f 79 0a 0a 09 73 65 74 20 6e 65  destroy...set ne
41c0: 77 63 73 65 74 73 20 7b 7d 0a 09 66 6f 72 65 61  wcsets {}..forea
41d0: 63 68 20 66 72 61 67 6d 65 6e 74 69 74 65 6d 73  ch fragmentitems
41e0: 20 24 61 72 67 73 20 7b 0a 09 20 20 20 20 6c 6f   $args {..    lo
41f0: 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20  g write 8 csets 
4200: 7b 4d 41 4b 45 3a 20 5b 6c 73 6f 72 74 20 24 66  {MAKE: [lsort $f
4210: 72 61 67 6d 65 6e 74 69 74 65 6d 73 5d 7d 0a 0a  ragmentitems]}..
4220: 09 20 20 20 20 73 65 74 20 66 72 61 67 6d 65 6e  .    set fragmen
4230: 74 20 5b 24 74 79 70 65 20 25 41 55 54 4f 25 20  t [$type %AUTO% 
4240: 24 70 72 6f 6a 65 63 74 20 24 63 73 74 79 70 65  $project $cstype
4250: 20 24 63 73 73 72 63 20 5c 0a 09 09 09 20 20 20   $cssrc \....   
4260: 20 20 20 5b 55 6e 74 61 67 20 24 66 72 61 67 6d     [Untag $fragm
4270: 65 6e 74 69 74 65 6d 73 20 24 63 73 74 79 70 65  entitems $cstype
4280: 5d 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  ]]..    lappend 
4290: 6e 65 77 63 73 65 74 73 20 24 66 72 61 67 6d 65  newcsets $fragme
42a0: 6e 74 0a 0a 09 20 20 20 20 24 66 72 61 67 6d 65  nt...    $fragme
42b0: 6e 74 20 70 65 72 73 69 73 74 0a 09 20 20 20 20  nt persist..    
42c0: 24 66 72 61 67 6d 65 6e 74 20 64 65 74 65 72 6d  $fragment determ
42d0: 69 6e 65 73 75 63 63 65 73 73 6f 72 73 0a 09 7d  inesuccessors..}
42e0: 0a 0a 09 23 20 54 68 65 20 70 72 65 64 65 63 65  ...# The predece
42f0: 73 73 6f 72 73 20 68 61 76 65 20 74 6f 20 72 65  ssors have to re
4300: 63 6f 6d 70 75 74 65 20 74 68 65 69 72 20 73 75  compute their su
4310: 63 63 65 73 73 6f 72 73 2c 20 69 2e 65 2e 0a 09  ccessors, i.e...
4320: 23 20 72 65 6d 6f 76 65 20 74 68 65 20 64 72 6f  # remove the dro
4330: 70 70 65 64 20 63 68 61 6e 67 65 73 65 74 20 61  pped changeset a
4340: 6e 64 20 70 75 74 20 6f 6e 65 20 6f 66 20 74 68  nd put one of th
4350: 65 20 66 72 61 67 6d 65 6e 74 73 0a 09 23 20 69  e fragments..# i
4360: 6e 74 6f 20 69 74 73 20 70 6c 61 63 65 2e 0a 09  nto its place...
4370: 66 6f 72 65 61 63 68 20 70 20 24 70 72 65 64 65  foreach p $prede
4380: 63 65 73 73 6f 72 73 20 7b 0a 09 20 20 20 20 24  cessors {..    $
4390: 70 20 64 65 74 65 72 6d 69 6e 65 73 75 63 63 65  p determinesucce
43a0: 73 73 6f 72 73 0a 09 7d 0a 0a 09 72 65 74 75 72  ssors..}...retur
43b0: 6e 20 24 6e 65 77 63 73 65 74 73 0a 20 20 20 20  n $newcsets.    
43c0: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f  }..    typemetho
43d0: 64 20 69 74 65 6d 73 74 72 20 7b 69 74 65 6d 7d  d itemstr {item}
43e0: 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74   {..struct::list
43f0: 20 61 73 73 69 67 6e 20 24 69 74 65 6d 20 69 74   assign $item it
4400: 79 70 65 20 69 69 64 0a 09 72 65 74 75 72 6e 20  ype iid..return 
4410: 5b 24 69 74 79 70 65 20 73 74 72 20 24 69 69 64  [$itype str $iid
4420: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  ].    }..    typ
4430: 65 6d 65 74 68 6f 64 20 73 74 72 6c 69 73 74 20  emethod strlist 
4440: 7b 63 68 61 6e 67 65 73 65 74 73 7d 20 7b 0a 09  {changesets} {..
4450: 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b 73 74  return [join [st
4460: 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 24  ruct::list map $
4470: 63 68 61 6e 67 65 73 65 74 73 20 5b 6d 79 70 72  changesets [mypr
4480: 6f 63 20 49 44 5d 5d 5d 0a 20 20 20 20 7d 0a 0a  oc ID]]].    }..
4490: 20 20 20 20 70 72 6f 63 20 49 44 20 7b 63 73 65      proc ID {cse
44a0: 74 7d 20 7b 20 24 63 73 65 74 20 73 74 72 20 7d  t} { $cset str }
44b0: 0a 0a 20 20 20 20 70 72 6f 63 20 55 6e 74 61 67  ..    proc Untag
44c0: 20 7b 74 61 67 67 65 64 69 74 65 6d 73 20 63 73   {taggeditems cs
44d0: 74 79 70 65 7d 20 7b 0a 09 72 65 74 75 72 6e 20  type} {..return 
44e0: 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61  [struct::list ma
44f0: 70 20 24 74 61 67 67 65 64 69 74 65 6d 73 20 5b  p $taggeditems [
4500: 6d 79 70 72 6f 63 20 55 6e 74 61 67 31 20 24 63  myproc Untag1 $c
4510: 73 74 79 70 65 5d 5d 0a 20 20 20 20 7d 0a 0a 20  stype]].    }.. 
4520: 20 20 20 70 72 6f 63 20 55 6e 74 61 67 31 20 7b     proc Untag1 {
4530: 63 73 74 79 70 65 20 74 68 65 69 74 65 6d 7d 20  cstype theitem} 
4540: 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20  {..struct::list 
4550: 61 73 73 69 67 6e 20 24 74 68 65 69 74 65 6d 20  assign $theitem 
4560: 74 20 69 0a 09 69 6e 74 65 67 72 69 74 79 20 61  t i..integrity a
4570: 73 73 65 72 74 20 7b 24 63 73 74 79 70 65 20 65  ssert {$cstype e
4580: 71 20 24 74 7d 20 7b 49 74 65 6d 20 24 69 27 73  q $t} {Item $i's
4590: 20 74 79 70 65 20 69 73 20 27 24 74 27 2c 20 65   type is '$t', e
45a0: 78 70 65 63 74 65 64 20 27 24 63 73 74 79 70 65  xpected '$cstype
45b0: 27 7d 0a 09 72 65 74 75 72 6e 20 24 69 0a 20 20  '}..return $i.  
45c0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 54 61    }..    proc Ta
45d0: 67 49 74 65 6d 44 69 63 74 20 7b 69 74 65 6d 64  gItemDict {itemd
45e0: 69 63 74 20 63 73 74 79 70 65 7d 20 7b 0a 09 73  ict cstype} {..s
45f0: 65 74 20 72 65 73 20 7b 7d 0a 09 66 6f 72 65 61  et res {}..forea
4600: 63 68 20 7b 69 20 76 7d 20 24 69 74 65 6d 64 69  ch {i v} $itemdi
4610: 63 74 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73  ct { lappend res
4620: 20 5b 6c 69 73 74 20 24 63 73 74 79 70 65 20 24   [list $cstype $
4630: 69 5d 20 24 76 20 7d 0a 09 72 65 74 75 72 6e 20  i] $v }..return 
4640: 24 72 65 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20  $res.    }..    
4650: 70 72 6f 63 20 56 61 6c 69 64 61 74 65 46 72 61  proc ValidateFra
4660: 67 6d 65 6e 74 73 20 7b 63 73 65 74 20 66 72 61  gments {cset fra
4670: 67 6d 65 6e 74 73 7d 20 7b 0a 09 23 20 43 68 65  gments} {..# Che
4680: 63 6b 20 74 68 65 20 76 61 72 69 6f 75 73 20 69  ck the various i
4690: 6e 74 65 67 72 69 74 79 20 63 6f 6e 73 74 72 61  ntegrity constra
46a0: 69 6e 74 73 20 66 6f 72 20 74 68 65 20 66 72 61  ints for the fra
46b0: 67 6d 65 6e 74 73 0a 09 23 20 73 70 65 63 69 66  gments..# specif
46c0: 79 69 6e 67 20 68 6f 77 20 74 6f 20 73 70 6c 69  ying how to spli
46d0: 74 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 3a  t the changeset:
46e0: 0a 09 23 0a 09 23 20 2a 20 57 65 20 6d 75 73 74  ..#..# * We must
46f0: 20 68 61 76 65 20 74 77 6f 20 6f 72 20 6d 6f 72   have two or mor
4700: 65 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 73 20  e fragments, as 
4710: 73 70 6c 69 74 74 69 6e 67 20 61 0a 09 23 20 20  splitting a..#  
4720: 20 63 68 61 6e 67 65 73 65 74 20 69 6e 74 6f 20   changeset into 
4730: 6f 6e 65 20 6d 61 6b 65 73 20 6e 6f 20 73 65 6e  one makes no sen
4740: 73 65 2e 0a 09 23 20 2a 20 4e 6f 20 66 72 61 67  se...# * No frag
4750: 6d 65 6e 74 20 6d 61 79 20 62 65 20 65 6d 70 74  ment may be empt
4760: 79 2e 0a 09 23 20 2a 20 41 6c 6c 20 66 72 61 67  y...# * All frag
4770: 6d 65 6e 74 73 20 68 61 76 65 20 74 6f 20 62 65  ments have to be
4780: 20 74 72 75 65 20 73 75 62 73 65 74 73 20 6f 66   true subsets of
4790: 20 74 68 65 20 69 74 65 6d 73 20 69 6e 20 74 68   the items in th
47a0: 65 0a 09 23 20 20 20 63 68 61 6e 67 65 73 65 74  e..#   changeset
47b0: 20 74 6f 20 73 70 6c 69 74 2e 20 54 68 65 20 27   to split. The '
47c0: 74 72 75 65 27 20 69 73 20 69 6d 70 6c 69 65 64  true' is implied
47d0: 20 62 65 63 61 75 73 65 20 6e 6f 6e 65 20 61 72   because none ar
47e0: 65 0a 09 23 20 20 20 61 6c 6c 6f 77 65 64 20 74  e..#   allowed t
47f0: 6f 20 62 65 20 65 6d 70 74 79 2c 20 73 6f 20 65  o be empty, so e
4800: 61 63 68 20 68 61 73 20 74 6f 20 62 65 20 73 6d  ach has to be sm
4810: 61 6c 6c 65 72 20 74 68 61 6e 20 74 68 65 0a 09  aller than the..
4820: 23 20 20 20 74 6f 74 61 6c 2e 0a 09 23 20 2a 20  #   total...# * 
4830: 54 68 65 20 75 6e 69 6f 6e 20 6f 66 20 74 68 65  The union of the
4840: 20 66 72 61 67 6d 65 6e 74 73 20 68 61 73 20 74   fragments has t
4850: 6f 20 62 65 20 74 68 65 20 69 74 65 6d 20 73 65  o be the item se
4860: 74 20 6f 66 20 74 68 65 0a 09 23 20 20 20 63 68  t of the..#   ch
4870: 61 6e 67 65 73 65 74 2e 0a 09 23 20 2a 20 54 68  angeset...# * Th
4880: 65 20 66 72 61 67 6d 65 6e 74 20 6d 75 73 74 20  e fragment must 
4890: 6e 6f 74 20 6f 76 65 72 6c 61 70 2c 20 69 2e 65  not overlap, i.e
48a0: 2e 20 74 68 65 69 72 20 70 61 69 72 77 69 73 65  . their pairwise
48b0: 0a 09 23 20 20 20 69 6e 74 65 72 73 65 63 74 69  ..#   intersecti
48c0: 6f 6e 73 20 68 61 76 65 20 74 6f 20 62 65 20 65  ons have to be e
48d0: 6d 70 74 79 2e 0a 0a 09 73 65 74 20 63 6f 76 65  mpty....set cove
48e0: 72 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 66 72  r {}..foreach fr
48f0: 61 67 6d 65 6e 74 69 74 65 6d 73 20 24 66 72 61  agmentitems $fra
4900: 67 6d 65 6e 74 73 20 7b 0a 09 20 20 20 20 6c 6f  gments {..    lo
4910: 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73 20  g write 8 csets 
4920: 7b 4e 45 57 3a 20 5b 6c 73 6f 72 74 20 24 66 72  {NEW: [lsort $fr
4930: 61 67 6d 65 6e 74 69 74 65 6d 73 5d 7d 0a 0a 09  agmentitems]}...
4940: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73      integrity as
4950: 73 65 72 74 20 7b 0a 09 09 21 5b 73 74 72 75 63  sert {...![struc
4960: 74 3a 3a 73 65 74 20 65 6d 70 74 79 20 24 66 72  t::set empty $fr
4970: 61 67 6d 65 6e 74 69 74 65 6d 73 5d 0a 09 20 20  agmentitems]..  
4980: 20 20 7d 20 7b 63 68 61 6e 67 65 73 65 74 20 66    } {changeset f
4990: 72 61 67 6d 65 6e 74 20 69 73 20 65 6d 70 74 79  ragment is empty
49a0: 7d 0a 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74  }...    integrit
49b0: 79 20 61 73 73 65 72 74 20 7b 0a 09 09 5b 73 74  y assert {...[st
49c0: 72 75 63 74 3a 3a 73 65 74 20 73 75 62 73 65 74  ruct::set subset
49d0: 6f 66 20 24 66 72 61 67 6d 65 6e 74 69 74 65 6d  of $fragmentitem
49e0: 73 20 5b 24 63 73 65 74 20 69 74 65 6d 73 5d 5d  s [$cset items]]
49f0: 0a 09 20 20 20 20 7d 20 7b 63 68 61 6e 67 65 73  ..    } {changes
4a00: 65 74 20 66 72 61 67 6d 65 6e 74 20 69 73 20 6e  et fragment is n
4a10: 6f 74 20 61 20 73 75 62 73 65 74 7d 0a 09 20 20  ot a subset}..  
4a20: 20 20 73 74 72 75 63 74 3a 3a 73 65 74 20 61 64    struct::set ad
4a30: 64 20 63 6f 76 65 72 20 24 66 72 61 67 6d 65 6e  d cover $fragmen
4a40: 74 69 74 65 6d 73 0a 09 7d 0a 0a 09 69 6e 74 65  titems..}...inte
4a50: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09  grity assert {..
4a60: 20 20 20 20 5b 73 74 72 75 63 74 3a 3a 73 65 74      [struct::set
4a70: 20 65 71 75 61 6c 20 24 63 6f 76 65 72 20 5b 24   equal $cover [$
4a80: 63 73 65 74 20 69 74 65 6d 73 5d 5d 0a 09 20 7d  cset items]].. }
4a90: 20 7b 54 68 65 20 66 72 61 67 6d 65 6e 74 73 20   {The fragments 
4aa0: 64 6f 20 6e 6f 74 20 63 6f 76 65 72 20 74 68 65  do not cover the
4ab0: 20 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65   original change
4ac0: 73 65 74 7d 0a 0a 09 73 65 74 20 69 20 31 0a 09  set}...set i 1..
4ad0: 66 6f 72 65 61 63 68 20 66 69 61 20 24 66 72 61  foreach fia $fra
4ae0: 67 6d 65 6e 74 73 20 7b 0a 09 20 20 20 20 66 6f  gments {..    fo
4af0: 72 65 61 63 68 20 66 69 62 20 5b 6c 72 61 6e 67  reach fib [lrang
4b00: 65 20 24 66 72 61 67 6d 65 6e 74 73 20 24 69 20  e $fragments $i 
4b10: 65 6e 64 5d 20 7b 0a 09 09 69 6e 74 65 67 72 69  end] {...integri
4b20: 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 20 20  ty assert {...  
4b30: 20 20 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 65    [struct::set e
4b40: 6d 70 74 79 20 5b 73 74 72 75 63 74 3a 3a 73 65  mpty [struct::se
4b50: 74 20 69 6e 74 65 72 73 65 63 74 20 24 66 69 61  t intersect $fia
4b60: 20 24 66 69 62 5d 5d 0a 09 09 7d 20 7b 54 68 65   $fib]]...} {The
4b70: 20 66 72 61 67 6d 65 6e 74 73 20 3c 24 66 69 61   fragments <$fia
4b80: 3e 20 61 6e 64 20 3c 24 66 69 62 3e 20 6f 76 65  > and <$fib> ove
4b90: 72 6c 61 70 7d 0a 09 20 20 20 20 7d 0a 09 20 20  rlap}..    }..  
4ba0: 20 20 69 6e 63 72 20 69 0a 09 7d 0a 0a 09 72 65    incr i..}...re
4bb0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
4bc0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
4bd0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
4be0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53  #######.    ## S
4bf0: 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69 61 62  tate..    variab
4c00: 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20 20 7b  le myid        {
4c10: 7d 20 3b 20 23 20 49 64 20 6f 66 20 74 68 65 20  } ; # Id of the 
4c20: 63 73 65 74 20 66 6f 72 20 74 68 65 20 70 65 72  cset for the per
4c30: 73 69 73 74 65 6e 74 0a 09 09 09 20 20 20 20 20  sistent....     
4c40: 20 23 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61   # state..    va
4c50: 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65 63 74  riable myproject
4c60: 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65     {} ; # Refere
4c70: 6e 63 65 20 6f 66 20 74 68 65 20 70 72 6f 6a 65  nce of the proje
4c80: 63 74 20 6f 62 6a 65 63 74 20 74 68 65 0a 09 09  ct object the...
4c90: 09 20 20 20 20 20 20 23 20 63 68 61 6e 67 65 73  .      # changes
4ca0: 65 74 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20  et belongs to.. 
4cb0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 79     variable myty
4cc0: 70 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 57  pe      {} ; # W
4cd0: 68 61 74 20 74 68 65 20 63 68 61 6e 67 65 73 65  hat the changese
4ce0: 74 20 69 73 20 62 61 73 65 64 20 6f 6e 0a 09 09  t is based on...
4cf0: 09 20 20 20 20 20 20 23 20 28 72 65 76 69 73 69  .      # (revisi
4d00: 6f 6e 73 2c 20 74 61 67 73 2c 20 6f 72 20 62 72  ons, tags, or br
4d10: 61 6e 63 68 65 73 29 2e 0a 09 09 09 20 20 20 20  anches).....    
4d20: 20 20 23 20 56 61 6c 75 65 73 3a 20 53 65 65 20    # Values: See 
4d30: 6d 79 63 73 74 79 70 65 2e 20 4e 6f 74 65 20 74  mycstype. Note t
4d40: 68 61 74 20 77 65 0a 09 09 09 20 20 20 20 20 20  hat we....      
4d50: 23 20 68 61 76 65 20 74 6f 20 6b 65 65 70 20 74  # have to keep t
4d60: 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20  he names of the 
4d70: 68 65 6c 70 65 72 0a 09 09 09 20 20 20 20 20 20  helper....      
4d80: 23 20 73 69 6e 67 6c 65 74 6f 6e 73 20 69 6e 20  # singletons in 
4d90: 73 79 6e 63 20 77 69 74 68 20 74 68 65 20 63 6f  sync with the co
4da0: 6e 74 65 6e 74 73 0a 09 09 09 20 20 20 20 20 20  ntents....      
4db0: 23 20 6f 66 20 73 74 61 74 65 20 74 61 62 6c 65  # of state table
4dc0: 20 27 63 73 74 79 70 65 27 2c 20 61 6e 64 20 76   'cstype', and v
4dd0: 61 72 69 6f 75 73 0a 09 09 09 20 20 20 20 20 20  arious....      
4de0: 23 20 6f 74 68 65 72 20 70 6c 61 63 65 73 20 75  # other places u
4df0: 73 69 6e 67 20 74 68 65 6d 20 68 61 72 64 77 69  sing them hardwi
4e00: 72 65 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  red..    variabl
4e10: 65 20 6d 79 74 79 70 65 6f 62 6a 20 20 20 7b 7d  e mytypeobj   {}
4e20: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74   ; # Reference t
4e30: 6f 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  o the container 
4e40: 66 6f 72 20 74 68 65 0a 09 09 09 20 20 20 20 20  for the....     
4e50: 20 23 20 74 79 70 65 20 64 65 70 65 6e 64 65 6e   # type dependen
4e60: 74 20 63 6f 64 65 2e 20 44 65 72 69 76 65 64 20  t code. Derived 
4e70: 66 72 6f 6d 0a 09 09 09 20 20 20 20 20 20 23 20  from....      # 
4e80: 6d 79 74 79 70 65 2e 0a 20 20 20 20 76 61 72 69  mytype..    vari
4e90: 61 62 6c 65 20 6d 79 73 72 63 69 64 20 20 20 20  able mysrcid    
4ea0: 20 7b 7d 20 3b 20 23 20 49 64 20 6f 66 20 74 68   {} ; # Id of th
4eb0: 65 20 6d 65 74 61 64 61 74 61 20 6f 72 20 73 79  e metadata or sy
4ec0: 6d 62 6f 6c 20 74 68 65 20 63 73 65 74 0a 09 09  mbol the cset...
4ed0: 09 20 20 20 20 20 20 23 20 69 73 20 62 61 73 65  .      # is base
4ee0: 64 20 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62  d on..    variab
4ef0: 6c 65 20 6d 79 69 74 65 6d 73 20 20 20 20 20 7b  le myitems     {
4f00: 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 74 68  } ; # List of th
4f10: 65 20 66 69 6c 65 20 6c 65 76 65 6c 20 72 65 76  e file level rev
4f20: 69 73 69 6f 6e 73 2c 0a 09 09 09 20 20 20 20 20  isions,....     
4f30: 20 23 20 74 61 67 73 2c 20 6f 72 20 62 72 61 6e   # tags, or bran
4f40: 63 68 65 73 20 69 6e 20 74 68 65 20 63 73 65 74  ches in the cset
4f50: 2c 20 61 73 0a 09 09 09 20 20 20 20 20 20 23 20  , as....      # 
4f60: 69 64 73 2e 20 4e 6f 74 20 74 61 67 67 65 64 2e  ids. Not tagged.
4f70: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
4f80: 74 69 74 65 6d 73 20 20 20 20 7b 7d 20 3b 20 23  titems    {} ; #
4f90: 20 41 73 20 6d 79 69 74 65 6d 73 2c 20 74 68 65   As myitems, the
4fa0: 20 74 61 67 67 65 64 20 66 6f 72 6d 2e 0a 20 20   tagged form..  
4fb0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 6f 73    variable mypos
4fc0: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 43 6f         {} ; # Co
4fd0: 6d 6d 69 74 20 70 6f 73 69 74 69 6f 6e 20 6f 66  mmit position of
4fe0: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 2c 20   the changeset, 
4ff0: 69 66 0a 09 09 09 20 20 20 20 20 20 23 20 6b 6e  if....      # kn
5000: 6f 77 6e 2e 0a 0a 20 20 20 20 23 20 23 20 23 23  own...    # # ##
5010: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
5020: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
5030: 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61  #.    ## Interna
5040: 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 74  l methods..    t
5050: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 63 6f  ypevariable myco
5060: 75 6e 74 65 72 20 20 20 20 20 20 20 20 30 20 3b  unter        0 ;
5070: 20 23 20 49 64 20 63 6f 75 6e 74 65 72 20 66 6f   # Id counter fo
5080: 72 20 63 73 65 74 73 2e 20 4c 61 73 74 20 69 64  r csets. Last id
5090: 0a 09 09 09 09 20 20 20 20 20 20 23 20 75 73 65  .....      # use
50a0: 64 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61  d..    typevaria
50b0: 62 6c 65 20 6d 79 63 73 74 79 70 65 20 2d 61 72  ble mycstype -ar
50c0: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 63  ray {} ; # Map c
50d0: 73 74 79 70 65 73 20 28 6e 61 6d 65 73 29 20 74  stypes (names) t
50e0: 6f 20 70 65 72 73 69 73 74 65 6e 74 0a 09 09 09  o persistent....
50f0: 09 20 20 20 20 20 20 23 20 69 64 73 2e 20 4e 6f  .      # ids. No
5100: 74 65 20 74 68 61 74 20 77 65 20 68 61 76 65 20  te that we have 
5110: 74 6f 20 6b 65 65 70 0a 09 09 09 09 20 20 20 20  to keep.....    
5120: 20 20 23 20 74 68 65 20 6e 61 6d 65 73 20 69 6e    # the names in
5130: 20 74 68 65 20 74 61 62 6c 65 20 27 63 73 74 79   the table 'csty
5140: 70 65 27 0a 09 09 09 09 20 20 20 20 20 20 23 20  pe'.....      # 
5150: 69 6e 20 73 79 6e 63 20 77 69 74 68 20 74 68 65  in sync with the
5160: 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 0a 09 09   names of the...
5170: 09 09 20 20 20 20 20 20 23 20 68 65 6c 70 65 72  ..      # helper
5180: 20 73 69 6e 67 6c 65 74 6f 6e 73 2e 0a 0a 20 20   singletons...  
5190: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 6e 6f    typemethod ino
51a0: 72 64 65 72 20 7b 70 72 6f 6a 65 63 74 69 64 7d  rder {projectid}
51b0: 20 7b 0a 09 23 20 52 65 74 75 72 6e 20 61 6c 6c   {..# Return all
51c0: 20 63 68 61 6e 67 65 73 65 74 73 20 28 6f 62 6a   changesets (obj
51d0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 29 20  ect references) 
51e0: 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65  for the specifie
51f0: 64 0a 09 23 20 70 72 6f 6a 65 63 74 2c 20 69 6e  d..# project, in
5200: 20 74 68 65 20 6f 72 64 65 72 20 67 69 76 65 6e   the order given
5210: 20 74 6f 20 74 68 65 6d 20 62 79 20 74 68 65 20   to them by the 
5220: 73 6f 72 74 20 70 61 73 73 65 73 2e 20 42 6f 74  sort passes. Bot
5230: 68 0a 09 23 20 74 68 65 20 66 69 6c 74 65 72 69  h..# the filteri
5240: 6e 67 20 62 79 20 70 72 6f 6a 65 63 74 20 61 6e  ng by project an
5250: 64 20 74 68 65 20 73 6f 72 74 69 6e 67 20 62 79  d the sorting by
5260: 20 74 69 6d 65 20 6d 61 6b 65 20 74 68 65 0a 09   time make the..
5270: 23 20 75 73 65 20 6f 66 20 27 70 72 6f 6a 65 63  # use of 'projec
5280: 74 3a 3a 72 65 76 20 72 65 76 27 20 69 6d 70 6f  t::rev rev' impo
5290: 73 73 69 62 6c 65 2e 0a 0a 09 73 65 74 20 72 65  ssible....set re
52a0: 73 20 7b 7d 0a 09 73 74 61 74 65 20 66 6f 72 65  s {}..state fore
52b0: 61 63 68 72 6f 77 20 7b 0a 09 20 20 20 20 53 45  achrow {..    SE
52c0: 4c 45 43 54 20 43 2e 63 69 64 20 20 41 53 20 78  LECT C.cid  AS x
52d0: 63 69 64 2c 0a 09 20 20 20 20 20 20 20 20 20 20  cid,..          
52e0: 20 54 2e 64 61 74 65 20 41 53 20 63 64 61 74 65   T.date AS cdate
52f0: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 63 68 61  ..    FROM   cha
5300: 6e 67 65 73 65 74 20 43 2c 20 63 73 74 69 6d 65  ngeset C, cstime
5310: 73 74 61 6d 70 20 54 0a 09 20 20 20 20 57 48 45  stamp T..    WHE
5320: 52 45 20 20 43 2e 70 69 64 20 20 3d 20 24 70 72  RE  C.pid  = $pr
5330: 6f 6a 65 63 74 69 64 20 2d 2d 20 6c 69 6d 69 74  ojectid -- limit
5340: 20 74 6f 20 63 68 61 6e 67 65 73 65 74 73 20 69   to changesets i
5350: 6e 20 70 72 6f 6a 65 63 74 0a 09 20 20 20 20 41  n project..    A
5360: 4e 44 20 20 20 20 54 2e 63 69 64 20 20 3d 20 43  ND    T.cid  = C
5370: 2e 63 69 64 20 20 20 20 20 20 2d 2d 20 67 65 74  .cid      -- get
5380: 20 6f 72 64 65 72 69 6e 67 20 69 6e 66 6f 72 6d   ordering inform
5390: 61 74 69 6f 6e 0a 09 20 20 20 20 4f 52 44 45 52  ation..    ORDER
53a0: 20 42 59 20 54 2e 64 61 74 65 20 20 20 20 20 20   BY T.date      
53b0: 20 20 20 20 20 20 2d 2d 20 73 6f 72 74 20 69 6e        -- sort in
53c0: 74 6f 20 63 6f 6d 6d 69 74 20 6f 72 64 65 72 0a  to commit order.
53d0: 09 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e  .} {..    lappen
53e0: 64 20 72 65 73 20 24 6d 79 69 64 6d 61 70 28 24  d res $myidmap($
53f0: 78 63 69 64 29 20 24 63 64 61 74 65 0a 09 7d 0a  xcid) $cdate..}.
5400: 09 72 65 74 75 72 6e 20 24 72 65 73 0a 20 20 20  .return $res.   
5410: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68   }..    typemeth
5420: 6f 64 20 67 65 74 63 73 74 79 70 65 73 20 7b 7d  od getcstypes {}
5430: 20 7b 0a 09 73 74 61 74 65 20 66 6f 72 65 61 63   {..state foreac
5440: 68 72 6f 77 20 7b 0a 09 20 20 20 20 53 45 4c 45  hrow {..    SELE
5450: 43 54 20 74 69 64 2c 20 6e 61 6d 65 20 46 52 4f  CT tid, name FRO
5460: 4d 20 63 73 74 79 70 65 3b 0a 09 7d 20 7b 20 73  M cstype;..} { s
5470: 65 74 20 6d 79 63 73 74 79 70 65 28 24 6e 61 6d  et mycstype($nam
5480: 65 29 20 24 74 69 64 20 7d 0a 09 72 65 74 75 72  e) $tid }..retur
5490: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  n.    }..    typ
54a0: 65 6d 65 74 68 6f 64 20 6c 6f 61 64 20 7b 72 65  emethod load {re
54b0: 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 73 65 74  pository} {..set
54c0: 20 6e 20 30 0a 09 6c 6f 67 20 77 72 69 74 65 20   n 0..log write 
54d0: 32 20 63 73 65 74 73 20 7b 4c 6f 61 64 69 6e 67  2 csets {Loading
54e0: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 73 7d   the changesets}
54f0: 0a 09 73 74 61 74 65 20 66 6f 72 65 61 63 68 72  ..state foreachr
5500: 6f 77 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54  ow {..    SELECT
5510: 20 43 2e 63 69 64 20 20 20 41 53 20 69 64 2c 0a   C.cid   AS id,.
5520: 09 20 20 20 20 20 20 20 20 20 20 20 43 2e 70 69  .           C.pi
5530: 64 20 20 20 41 53 20 78 70 69 64 2c 0a 20 20 20  d   AS xpid,.   
5540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5550: 43 53 2e 6e 61 6d 65 20 41 53 20 63 73 74 79 70  CS.name AS cstyp
5560: 65 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 43  e,..           C
5570: 2e 73 72 63 20 20 20 41 53 20 73 72 63 69 64 0a  .src   AS srcid.
5580: 09 20 20 20 20 46 52 4f 4d 20 20 20 63 68 61 6e  .    FROM   chan
5590: 67 65 73 65 74 20 43 2c 20 63 73 74 79 70 65 20  geset C, cstype 
55a0: 43 53 0a 09 20 20 20 20 57 48 45 52 45 20 20 43  CS..    WHERE  C
55b0: 2e 74 79 70 65 20 3d 20 43 53 2e 74 69 64 0a 09  .type = CS.tid..
55c0: 20 20 20 20 4f 52 44 45 52 20 42 59 20 43 2e 63      ORDER BY C.c
55d0: 69 64 0a 09 7d 20 7b 0a 09 20 20 20 20 6c 6f 67  id..} {..    log
55e0: 20 70 72 6f 67 72 65 73 73 20 32 20 63 73 65 74   progress 2 cset
55f0: 73 20 24 6e 20 7b 7d 0a 09 20 20 20 20 73 65 74  s $n {}..    set
5600: 20 72 20 5b 24 74 79 70 65 20 25 41 55 54 4f 25   r [$type %AUTO%
5610: 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 70 72   [$repository pr
5620: 6f 6a 65 63 74 6f 66 20 24 78 70 69 64 5d 20 24  ojectof $xpid] $
5630: 63 73 74 79 70 65 20 24 73 72 63 69 64 20 5b 73  cstype $srcid [s
5640: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c  tate run {...SEL
5650: 45 43 54 20 43 2e 69 69 64 0a 09 09 46 52 4f 4d  ECT C.iid...FROM
5660: 20 20 20 63 73 69 74 65 6d 20 43 0a 09 09 57 48     csitem C...WH
5670: 45 52 45 20 20 43 2e 63 69 64 20 3d 20 24 69 64  ERE  C.cid = $id
5680: 0a 09 09 4f 52 44 45 52 20 42 59 20 43 2e 70 6f  ...ORDER BY C.po
5690: 73 0a 09 20 20 20 20 7d 5d 20 24 69 64 5d 0a 09  s..    }] $id]..
56a0: 20 20 20 20 69 6e 63 72 20 6e 0a 09 7d 0a 09 72      incr n..}..r
56b0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
56c0: 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 61 64   typemethod load
56d0: 63 6f 75 6e 74 65 72 20 7b 7d 20 7b 0a 09 23 20  counter {} {..# 
56e0: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 63  Initialize the c
56f0: 6f 75 6e 74 65 72 20 66 72 6f 6d 20 74 68 65 20  ounter from the 
5700: 73 74 61 74 65 0a 09 6c 6f 67 20 77 72 69 74 65  state..log write
5710: 20 32 20 63 73 65 74 73 20 7b 4c 6f 61 64 69 6e   2 csets {Loadin
5720: 67 20 63 68 61 6e 67 65 73 65 74 20 63 6f 75 6e  g changeset coun
5730: 74 65 72 7d 0a 09 73 65 74 20 6d 79 63 6f 75 6e  ter}..set mycoun
5740: 74 65 72 20 5b 73 74 61 74 65 20 6f 6e 65 20 7b  ter [state one {
5750: 20 53 45 4c 45 43 54 20 4d 41 58 28 63 69 64 29   SELECT MAX(cid)
5760: 20 46 52 4f 4d 20 63 68 61 6e 67 65 73 65 74 20   FROM changeset 
5770: 7d 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  }]..return.    }
5780: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64  ..    typemethod
5790: 20 6e 75 6d 20 7b 7d 20 7b 20 72 65 74 75 72 6e   num {} { return
57a0: 20 24 6d 79 63 6f 75 6e 74 65 72 20 7d 0a 0a 20   $mycounter }.. 
57b0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
57c0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
57d0: 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 20 20  ##########..    
57e0: 6d 65 74 68 6f 64 20 43 72 65 61 74 65 46 72 6f  method CreateFro
57f0: 6d 46 72 61 67 6d 65 6e 74 73 20 7b 66 72 61 67  mFragments {frag
5800: 6d 65 6e 74 73 20 63 76 20 62 76 7d 20 7b 0a 09  ments cv bv} {..
5810: 75 70 76 61 72 20 31 20 24 63 76 20 63 6f 75 6e  upvar 1 $cv coun
5820: 74 65 72 20 24 62 76 20 62 72 65 61 6b 73 0a 09  ter $bv breaks..
5830: 55 6e 6d 61 70 49 74 65 6d 73 20 24 6d 79 74 79  UnmapItems $myty
5840: 70 65 20 24 6d 79 69 74 65 6d 73 0a 0a 09 23 20  pe $myitems...# 
5850: 43 72 65 61 74 65 20 63 68 61 6e 67 65 73 65 74  Create changeset
5860: 73 20 66 6f 72 20 74 68 65 20 66 72 61 67 6d 65  s for the fragme
5870: 6e 74 73 2c 20 72 65 75 73 69 6e 67 20 74 68 65  nts, reusing the
5880: 20 63 75 72 72 65 6e 74 20 6f 6e 65 0a 09 23 20   current one..# 
5890: 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 66 72  for the first fr
58a0: 61 67 6d 65 6e 74 2e 20 57 65 20 73 6f 72 74 20  agment. We sort 
58b0: 74 68 65 6d 20 69 6e 20 6f 72 64 65 72 20 74 6f  them in order to
58c0: 20 61 6c 6c 6f 77 0a 09 23 20 63 68 65 63 6b 69   allow..# checki
58d0: 6e 67 20 66 6f 72 20 67 61 70 73 20 61 6e 64 20  ng for gaps and 
58e0: 6e 69 63 65 20 6d 65 73 73 61 67 65 73 2e 0a 0a  nice messages...
58f0: 09 73 65 74 20 6e 65 77 63 73 65 74 73 20 20 7b  .set newcsets  {
5900: 7d 0a 09 73 65 74 20 66 72 61 67 6d 65 6e 74 73  }..set fragments
5910: 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 30   [lsort -index 0
5920: 20 2d 69 6e 74 65 67 65 72 20 24 66 72 61 67 6d   -integer $fragm
5930: 65 6e 74 73 5d 0a 0a 09 23 70 75 74 73 20 5c 74  ents]...#puts \t
5940: 2e 5b 6a 6f 69 6e 20 5b 50 52 73 20 24 66 72 61  .[join [PRs $fra
5950: 67 6d 65 6e 74 73 5d 20 2e 5c 6e 5c 74 2e 5d 2e  gments] .\n\t.].
5960: 0a 0a 09 42 6f 72 64 65 72 20 5b 6c 69 6e 64 65  ...Border [linde
5970: 78 20 24 66 72 61 67 6d 65 6e 74 73 20 30 5d 20  x $fragments 0] 
5980: 66 69 72 73 74 73 20 66 69 72 73 74 65 0a 0a 09  firsts firste...
5990: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74  integrity assert
59a0: 20 7b 0a 09 20 20 20 20 24 66 69 72 73 74 73 20   {..    $firsts 
59b0: 3d 3d 20 30 0a 09 7d 20 7b 42 61 64 20 66 72 61  == 0..} {Bad fra
59c0: 67 6d 65 6e 74 20 73 74 61 72 74 20 40 20 24 66  gment start @ $f
59d0: 69 72 73 74 73 2c 20 67 61 70 2c 20 6f 72 20 62  irsts, gap, or b
59e0: 65 66 6f 72 65 20 62 65 67 69 6e 6e 69 6e 67 20  efore beginning 
59f0: 6f 66 20 74 68 65 20 72 61 6e 67 65 7d 0a 0a 09  of the range}...
5a00: 73 65 74 20 6c 61 73 74 65 20 24 66 69 72 73 74  set laste $first
5a10: 65 0a 09 66 6f 72 65 61 63 68 20 66 72 61 67 6d  e..foreach fragm
5a20: 65 6e 74 20 5b 6c 72 61 6e 67 65 20 24 66 72 61  ent [lrange $fra
5a30: 67 6d 65 6e 74 73 20 31 20 65 6e 64 5d 20 7b 0a  gments 1 end] {.
5a40: 09 20 20 20 20 42 6f 72 64 65 72 20 24 66 72 61  .    Border $fra
5a50: 67 6d 65 6e 74 20 73 20 65 0a 09 20 20 20 20 69  gment s e..    i
5a60: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20  ntegrity assert 
5a70: 7b 0a 09 09 24 6c 61 73 74 65 20 3d 3d 20 28 24  {...$laste == ($
5a80: 73 20 2d 20 31 29 0a 09 20 20 20 20 7d 20 7b 42  s - 1)..    } {B
5a90: 61 64 20 66 72 61 67 6d 65 6e 74 20 62 6f 72 64  ad fragment bord
5aa0: 65 72 20 3c 24 6c 61 73 74 65 20 7c 20 24 73 3e  er <$laste | $s>
5ab0: 2c 20 67 61 70 20 6f 72 20 6f 76 65 72 6c 61 70  , gap or overlap
5ac0: 7d 0a 0a 09 20 20 20 20 73 65 74 20 6e 65 77 20  }...    set new 
5ad0: 5b 24 74 79 70 65 20 25 41 55 54 4f 25 20 24 6d  [$type %AUTO% $m
5ae0: 79 70 72 6f 6a 65 63 74 20 24 6d 79 74 79 70 65  yproject $mytype
5af0: 20 24 6d 79 73 72 63 69 64 20 5b 6c 72 61 6e 67   $mysrcid [lrang
5b00: 65 20 24 6d 79 69 74 65 6d 73 20 24 73 20 24 65  e $myitems $s $e
5b10: 5d 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  ]]..    lappend 
5b20: 6e 65 77 63 73 65 74 73 20 24 6e 65 77 0a 09 20  newcsets $new.. 
5b30: 20 20 20 69 6e 63 72 20 63 6f 75 6e 74 65 72 0a     incr counter.
5b40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 67  .            log
5b50: 20 77 72 69 74 65 20 34 20 63 73 65 74 73 20 7b   write 4 csets {
5b60: 42 72 65 61 6b 69 6e 67 20 5b 24 73 65 6c 66 20  Breaking [$self 
5b70: 73 74 72 20 5d 20 40 20 24 6c 61 73 74 65 2c 20  str ] @ $laste, 
5b80: 6e 65 77 20 5b 24 6e 65 77 20 73 74 72 5d 2c 20  new [$new str], 
5b90: 63 75 74 74 69 6e 67 20 24 62 72 65 61 6b 73 28  cutting $breaks(
5ba0: 24 6c 61 73 74 65 29 7d 0a 0a 09 20 20 20 20 73  $laste)}...    s
5bb0: 65 74 20 6c 61 73 74 65 20 24 65 0a 09 7d 0a 0a  et laste $e..}..
5bc0: 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72  .integrity asser
5bd0: 74 20 7b 0a 09 20 20 20 20 24 6c 61 73 74 65 20  t {..    $laste 
5be0: 3d 3d 20 28 5b 6c 6c 65 6e 67 74 68 20 24 6d 79  == ([llength $my
5bf0: 69 74 65 6d 73 5d 2d 31 29 0a 09 7d 20 7b 42 61  items]-1)..} {Ba
5c00: 64 20 66 72 61 67 6d 65 6e 74 20 65 6e 64 20 40  d fragment end @
5c10: 20 24 6c 61 73 74 65 2c 20 67 61 70 2c 20 6f 72   $laste, gap, or
5c20: 20 62 65 79 6f 6e 64 20 65 6e 64 20 6f 66 20 74   beyond end of t
5c30: 68 65 20 72 61 6e 67 65 7d 0a 0a 09 23 20 50 75  he range}...# Pu
5c40: 74 20 74 68 65 20 66 69 72 73 74 20 66 72 61 67  t the first frag
5c50: 6d 65 6e 74 20 69 6e 74 6f 20 74 68 65 20 63 75  ment into the cu
5c60: 72 72 65 6e 74 20 63 68 61 6e 67 65 73 65 74 2c  rrent changeset,
5c70: 20 61 6e 64 0a 09 23 20 75 70 64 61 74 65 20 74   and..# update t
5c80: 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 69 6e 64  he in-memory ind
5c90: 65 78 2e 20 57 65 20 63 61 6e 20 73 69 6d 70 6c  ex. We can simpl
5ca0: 79 20 28 72 65 29 61 64 64 20 74 68 65 20 69 74  y (re)add the it
5cb0: 65 6d 73 0a 09 23 20 62 65 63 61 75 73 65 20 77  ems..# because w
5cc0: 65 20 63 6c 65 61 72 65 64 20 74 68 65 20 70 72  e cleared the pr
5cd0: 65 76 69 6f 75 73 6c 79 20 65 78 69 73 74 69 6e  eviously existin
5ce0: 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 73  g information, s
5cf0: 65 65 0a 09 23 20 27 55 6e 6d 61 70 49 74 65 6d  ee..# 'UnmapItem
5d00: 73 27 20 61 62 6f 76 65 2e 20 50 65 72 73 69 73  s' above. Persis
5d10: 74 65 6e 63 65 20 64 6f 65 73 20 6e 6f 74 20 6d  tence does not m
5d20: 61 74 74 65 72 20 68 65 72 65 2c 20 6e 6f 6e 65  atter here, none
5d30: 0a 09 23 20 6f 66 20 74 68 65 20 63 68 61 6e 67  ..# of the chang
5d40: 65 73 65 74 73 20 68 61 73 20 62 65 65 6e 20 73  esets has been s
5d50: 61 76 65 64 20 74 6f 20 74 68 65 20 70 65 72 73  aved to the pers
5d60: 69 73 74 65 6e 74 20 73 74 61 74 65 0a 09 23 20  istent state..# 
5d70: 79 65 74 2e 0a 0a 09 73 65 74 20 6d 79 69 74 65  yet....set myite
5d80: 6d 73 20 20 5b 6c 72 61 6e 67 65 20 24 6d 79 69  ms  [lrange $myi
5d90: 74 65 6d 73 20 20 30 20 24 66 69 72 73 74 65 5d  tems  0 $firste]
5da0: 0a 09 73 65 74 20 6d 79 74 69 74 65 6d 73 20 5b  ..set mytitems [
5db0: 6c 72 61 6e 67 65 20 24 6d 79 74 69 74 65 6d 73  lrange $mytitems
5dc0: 20 30 20 24 66 69 72 73 74 65 5d 0a 09 4d 61 70   0 $firste]..Map
5dd0: 49 74 65 6d 73 20 24 6d 79 74 79 70 65 20 24 6d  Items $mytype $m
5de0: 79 69 74 65 6d 73 0a 09 72 65 74 75 72 6e 20 24  yitems..return $
5df0: 6e 65 77 63 73 65 74 73 0a 20 20 20 20 7d 0a 0a  newcsets.    }..
5e00: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
5e10: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
5e20: 23 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 20  ###########..   
5e30: 20 70 72 6f 63 20 42 72 65 61 6b 44 69 72 65 63   proc BreakDirec
5e40: 74 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 74  tDependencies {t
5e50: 68 65 69 74 65 6d 73 20 62 76 7d 20 7b 0a 09 75  heitems bv} {..u
5e60: 70 76 61 72 20 31 20 6d 79 74 79 70 65 6f 62 6a  pvar 1 mytypeobj
5e70: 20 6d 79 74 79 70 65 6f 62 6a 20 73 65 6c 66 20   mytypeobj self 
5e80: 73 65 6c 66 20 24 62 76 20 62 72 65 61 6b 73 0a  self $bv breaks.
5e90: 0a 09 23 20 41 72 72 61 79 20 6f 66 20 64 65 70  ..# Array of dep
5ea0: 65 6e 64 65 6e 63 69 65 73 20 28 70 61 72 65 6e  endencies (paren
5eb0: 74 20 2d 3e 20 63 68 69 6c 64 29 2e 20 54 68 69  t -> child). Thi
5ec0: 73 20 69 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d  s is pulled from
5ed0: 0a 09 23 20 74 68 65 20 73 74 61 74 65 2c 20 61  ..# the state, a
5ee0: 6e 64 20 6c 69 6d 69 74 65 64 20 74 6f 20 73 75  nd limited to su
5ef0: 63 63 65 73 73 6f 72 73 20 77 69 74 68 69 6e 20  ccessors within 
5f00: 74 68 65 20 63 68 61 6e 67 65 73 65 74 2e 0a 0a  the changeset...
5f10: 09 61 72 72 61 79 20 73 65 74 20 64 65 70 65 6e  .array set depen
5f20: 64 65 6e 63 69 65 73 20 7b 7d 0a 0a 09 24 6d 79  dencies {}...$my
5f30: 74 79 70 65 6f 62 6a 20 69 6e 74 65 72 6e 61 6c  typeobj internal
5f40: 73 75 63 63 65 73 73 6f 72 73 20 64 65 70 65 6e  successors depen
5f50: 64 65 6e 63 69 65 73 20 24 74 68 65 69 74 65 6d  dencies $theitem
5f60: 73 0a 09 69 66 20 7b 21 5b 61 72 72 61 79 20 73  s..if {![array s
5f70: 69 7a 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73  ize dependencies
5f80: 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e  ]} {..    return
5f90: 20 7b 7d 0a 09 7d 20 3b 20 23 20 4e 6f 74 68 69   {}..} ; # Nothi
5fa0: 6e 67 20 74 6f 20 62 72 65 61 6b 2e 0a 0a 09 6c  ng to break....l
5fb0: 6f 67 20 77 72 69 74 65 20 35 20 63 73 65 74 73  og write 5 csets
5fc0: 20 2e 2e 2e 5b 24 73 65 6c 66 20 73 74 72 5d 2e   ...[$self str].
5fd0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
5fe0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
5ff0: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e  ................
6000: 2e 2e 2e 2e 2e 2e 0a 09 76 63 3a 3a 74 6f 6f 6c  ........vc::tool
6010: 73 3a 3a 6d 65 6d 3a 3a 6d 61 72 6b 0a 0a 09 72  s::mem::mark...r
6020: 65 74 75 72 6e 20 5b 42 72 65 61 6b 65 72 43 6f  eturn [BreakerCo
6030: 72 65 20 24 74 68 65 69 74 65 6d 73 20 64 65 70  re $theitems dep
6040: 65 6e 64 65 6e 63 69 65 73 20 62 72 65 61 6b 73  endencies breaks
6050: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  ].    }..    pro
6060: 63 20 42 72 65 61 6b 65 72 43 6f 72 65 20 7b 74  c BreakerCore {t
6070: 68 65 69 74 65 6d 73 20 64 76 20 62 76 7d 20 7b  heitems dv bv} {
6080: 0a 09 23 20 42 72 65 61 6b 20 61 20 73 65 74 20  ..# Break a set 
6090: 6f 66 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 74  of revisions int
60a0: 6f 20 66 72 61 67 6d 65 6e 74 73 20 77 68 69 63  o fragments whic
60b0: 68 20 68 61 76 65 20 6e 6f 0a 09 23 20 69 6e 74  h have no..# int
60c0: 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69  ernal dependenci
60d0: 65 73 2e 0a 0a 09 23 20 57 65 20 70 65 72 66 6f  es....# We perfo
60e0: 72 6d 20 61 6c 6c 20 6e 65 63 65 73 73 61 72 79  rm all necessary
60f0: 20 73 70 6c 69 74 73 20 69 6e 20 6f 6e 65 20 67   splits in one g
6100: 6f 2c 20 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e  o, instead of on
6110: 6c 79 0a 09 23 20 6f 6e 65 2e 20 54 68 65 20 70  ly..# one. The p
6120: 72 65 76 69 6f 75 73 20 61 6c 67 6f 72 69 74 68  revious algorith
6130: 6d 2c 20 61 64 61 70 74 65 64 20 66 72 6f 6d 20  m, adapted from 
6140: 63 76 73 32 73 76 6e 2c 20 63 6f 6d 70 75 74 65  cvs2svn, compute
6150: 64 0a 09 23 20 61 20 6c 6f 74 20 6f 66 20 73 74  d..# a lot of st
6160: 61 74 65 20 77 68 69 63 68 20 77 61 73 20 74 68  ate which was th
6170: 72 6f 77 6e 20 61 77 61 79 20 61 6e 64 20 74 68  rown away and th
6180: 65 6e 20 63 6f 6d 70 75 74 65 64 20 61 67 61 69  en computed agai
6190: 6e 0a 09 23 20 66 6f 72 20 65 61 63 68 20 6f 66  n..# for each of
61a0: 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 2e 20   the fragments. 
61b0: 49 74 20 73 68 6f 75 6c 64 20 62 65 20 65 61 73  It should be eas
61c0: 69 65 72 20 74 6f 20 75 70 64 61 74 65 20 61 6e  ier to update an
61d0: 64 0a 09 23 20 72 65 75 73 65 20 74 68 61 74 20  d..# reuse that 
61e0: 73 74 61 74 65 2e 0a 0a 09 75 70 76 61 72 20 31  state....upvar 1
61f0: 20 24 64 76 20 64 65 70 65 6e 64 65 6e 63 69 65   $dv dependencie
6200: 73 20 24 62 76 20 62 72 65 61 6b 73 0a 0a 09 23  s $bv breaks...#
6210: 20 57 65 20 68 61 76 65 20 69 6e 74 65 72 6e 61   We have interna
6220: 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74  l dependencies t
6230: 6f 20 62 72 65 61 6b 2e 20 57 65 20 6e 6f 77 20  o break. We now 
6240: 69 74 65 72 61 74 65 20 6f 76 65 72 0a 09 23 20  iterate over..# 
6250: 61 6c 6c 20 70 6f 73 69 74 69 6f 6e 73 20 69 6e  all positions in
6260: 20 74 68 65 20 6c 69 73 74 20 28 77 68 69 63 68   the list (which
6270: 20 69 73 20 63 68 72 6f 6e 6f 6c 6f 67 69 63 61   is chronologica
6280: 6c 2c 20 61 74 20 6c 65 61 73 74 0a 09 23 20 61  l, at least..# a
6290: 73 20 66 61 72 20 61 73 20 74 68 65 20 74 69 6d  s far as the tim
62a0: 65 73 74 61 6d 70 73 20 61 72 65 20 63 6f 72 72  estamps are corr
62b0: 65 63 74 20 61 6e 64 20 75 6e 69 71 75 65 29 20  ect and unique) 
62c0: 61 6e 64 0a 09 23 20 64 65 74 65 72 6d 69 6e 65  and..# determine
62d0: 20 74 68 65 20 62 65 73 74 20 70 6f 73 69 74 69   the best positi
62e0: 6f 6e 20 66 6f 72 20 74 68 65 20 62 72 65 61 6b  on for the break
62f0: 2c 20 62 79 20 74 72 79 69 6e 67 20 74 6f 0a 09  , by trying to..
6300: 23 20 62 72 65 61 6b 20 61 73 20 6d 61 6e 79 20  # break as many 
6310: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 61 73 20  dependencies as 
6320: 70 6f 73 73 69 62 6c 65 20 69 6e 20 6f 6e 65 20  possible in one 
6330: 67 6f 2e 20 57 68 65 6e 20 61 0a 09 23 20 62 72  go. When a..# br
6340: 65 61 6b 20 77 61 73 20 66 6f 75 6e 64 20 74 68  eak was found th
6350: 69 73 20 69 73 20 72 65 64 6f 6e 65 20 66 6f 72  is is redone for
6360: 20 74 68 65 20 66 72 61 67 6d 65 6e 74 73 20 63   the fragments c
6370: 6f 6d 69 6e 67 20 61 6e 64 0a 09 23 20 61 66 74  oming and..# aft
6380: 65 72 2c 20 61 66 74 65 72 20 75 70 64 69 6e 67  er, after upding
6390: 20 74 68 65 20 63 72 6f 73 73 69 6e 67 20 69 6e   the crossing in
63a0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 09 23 20 44  formation....# D
63b0: 61 74 61 20 73 74 72 75 63 74 75 72 65 73 3a 0a  ata structures:.
63c0: 09 23 20 4d 61 70 3a 20 20 50 4f 53 20 20 20 72  .# Map:  POS   r
63d0: 65 76 69 73 69 6f 6e 20 69 64 20 20 20 20 20 20  evision id      
63e0: 2d 3e 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20 6c  -> position in l
63f0: 69 73 74 2e 0a 09 23 20 20 20 20 20 20 20 43 52  ist...#       CR
6400: 4f 53 53 20 70 6f 73 69 74 69 6f 6e 20 69 6e 20  OSS position in 
6410: 6c 69 73 74 20 2d 3e 20 6e 75 6d 62 65 72 20 6f  list -> number o
6420: 66 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 63  f dependencies c
6430: 72 6f 73 73 69 6e 67 20 69 74 0a 09 23 20 20 20  rossing it..#   
6440: 20 20 20 20 44 45 50 43 20 20 64 65 70 65 6e 64      DEPC  depend
6450: 65 6e 63 79 20 20 20 20 20 20 20 2d 3e 20 70 6f  ency       -> po
6460: 73 69 74 69 6f 6e 73 20 69 74 20 63 72 6f 73 73  sitions it cross
6470: 65 73 0a 09 23 20 4c 69 73 74 3a 20 52 41 4e 47  es..# List: RANG
6480: 45 20 4f 66 20 74 68 65 20 70 6f 73 69 74 69 6f  E Of the positio
6490: 6e 73 20 69 74 73 65 6c 66 2e 0a 09 23 20 4d 61  ns itself...# Ma
64a0: 70 3a 20 20 44 45 4c 54 41 20 70 6f 73 69 74 69  p:  DELTA positi
64b0: 6f 6e 20 69 6e 20 6c 69 73 74 20 2d 3e 20 74 69  on in list -> ti
64c0: 6d 65 20 64 65 6c 74 61 20 62 65 74 77 65 65 6e  me delta between
64d0: 20 69 74 73 20 72 65 76 69 73 69 6f 6e 0a 09 23   its revision..#
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
64f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6500: 20 61 6e 64 20 74 68 65 20 6e 65 78 74 2c 20 69   and the next, i
6510: 66 20 61 6e 79 2e 0a 09 23 20 41 20 64 65 70 65  f any...# A depe
6520: 6e 64 65 6e 63 79 20 69 73 20 61 20 73 69 6e 67  ndency is a sing
6530: 6c 65 2d 65 6c 65 6d 65 6e 74 20 6d 61 70 20 70  le-element map p
6540: 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 0a  arent -> child..
6550: 09 23 20 49 6e 69 74 69 61 6c 69 7a 65 42 72 65  .# InitializeBre
6560: 61 6b 53 74 61 74 65 20 69 6e 69 74 69 61 6c 69  akState initiali
6570: 7a 65 73 20 74 68 65 69 72 20 63 6f 6e 74 65 6e  zes their conten
6580: 74 73 20 61 66 74 65 72 0a 09 23 20 75 70 76 61  ts after..# upva
6590: 72 27 69 6e 67 20 74 68 65 6d 20 66 72 6f 6d 20  r'ing them from 
65a0: 74 68 69 73 20 73 63 6f 70 65 2e 20 49 74 20 75  this scope. It u
65b0: 73 65 73 20 74 68 65 20 69 6e 66 6f 72 6d 61 74  ses the informat
65c0: 69 6f 6e 20 69 6e 0a 09 23 20 44 45 50 45 4e 44  ion in..# DEPEND
65d0: 45 4e 43 49 45 53 20 74 6f 20 64 6f 20 73 6f 2e  ENCIES to do so.
65e0: 0a 0a 09 49 6e 69 74 69 61 6c 69 7a 65 42 72 65  ...InitializeBre
65f0: 61 6b 53 74 61 74 65 20 24 74 68 65 69 74 65 6d  akState $theitem
6600: 73 0a 0a 09 73 65 74 20 66 72 61 67 6d 65 6e 74  s...set fragment
6610: 73 20 7b 7d 0a 09 73 65 74 20 6e 65 77 20 20 20  s {}..set new   
6620: 20 20 20 20 5b 6c 69 73 74 20 24 72 61 6e 67 65      [list $range
6630: 5d 0a 0a 09 23 20 49 6e 73 74 65 61 64 20 6f 66  ]...# Instead of
6640: 20 6f 6e 65 20 6c 69 73 74 20 68 6f 6c 64 69 6e   one list holdin
6650: 67 20 62 6f 74 68 20 70 72 6f 63 65 73 73 65 64  g both processed
6660: 20 61 6e 64 20 70 65 6e 64 69 6e 67 0a 09 23 20   and pending..# 
6670: 66 72 61 67 6d 65 6e 74 73 20 77 65 20 75 73 65  fragments we use
6680: 20 74 77 6f 2c 20 6f 6e 65 20 66 6f 72 20 74 68   two, one for th
6690: 65 20 66 72 61 6d 65 6e 74 73 20 74 6f 20 70 72  e framents to pr
66a0: 6f 63 65 73 73 2c 20 6f 6e 65 0a 09 23 20 74 6f  ocess, one..# to
66b0: 20 68 6f 6c 64 20 74 68 65 20 6e 65 77 20 66 72   hold the new fr
66c0: 61 67 6d 65 6e 74 73 2c 20 61 6e 64 20 74 68 65  agments, and the
66d0: 20 6c 61 74 74 65 72 20 69 73 20 63 6f 70 69 65   latter is copie
66e0: 64 20 74 6f 20 74 68 65 0a 09 23 20 66 6f 72 6d  d to the..# form
66f0: 65 72 20 77 68 65 6e 20 74 68 65 79 20 72 75 6e  er when they run
6700: 20 6f 75 74 2e 20 54 68 69 73 20 6b 65 65 70 73   out. This keeps
6710: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 70 65 6e   the list of pen
6720: 64 69 6e 67 0a 09 23 20 66 72 61 67 6d 65 6e 74  ding..# fragment
6730: 73 20 73 68 6f 72 74 20 77 69 74 68 6f 75 74 20  s short without 
6740: 73 61 63 72 69 66 69 63 69 6e 67 20 73 70 65 65  sacrificing spee
6750: 64 20 62 79 20 73 68 69 66 74 69 6e 67 20 73 74  d by shifting st
6760: 75 66 66 0a 09 23 20 64 6f 77 6e 2e 20 57 65 20  uff..# down. We 
6770: 65 73 70 65 63 69 61 6c 6c 79 20 64 72 6f 70 20  especially drop 
6780: 74 68 65 20 6d 65 6d 6f 72 79 20 6f 66 20 66 72  the memory of fr
6790: 61 67 6d 65 6e 74 73 20 62 72 6f 6b 65 6e 0a 09  agments broken..
67a0: 23 20 64 75 72 69 6e 67 20 70 72 6f 63 65 73 73  # during process
67b0: 69 6e 67 20 61 66 74 65 72 20 61 20 73 68 6f 72  ing after a shor
67c0: 74 20 74 69 6d 65 2c 20 69 6e 73 74 65 61 64 20  t time, instead 
67d0: 6f 66 20 6c 65 74 74 69 6e 67 20 69 74 0a 09 23  of letting it..#
67e0: 20 63 6f 6e 73 75 6d 65 20 6d 65 6d 6f 72 79 2e   consume memory.
67f0: 0a 0a 09 77 68 69 6c 65 20 7b 5b 6c 6c 65 6e 67  ...while {[lleng
6800: 74 68 20 24 6e 65 77 5d 7d 20 7b 0a 0a 09 20 20  th $new]} {...  
6810: 20 20 73 65 74 20 70 65 6e 64 69 6e 67 20 24 6e    set pending $n
6820: 65 77 0a 09 20 20 20 20 73 65 74 20 6e 65 77 20  ew..    set new 
6830: 20 20 20 20 7b 7d 0a 09 20 20 20 20 73 65 74 20      {}..    set 
6840: 61 74 20 20 20 20 20 20 30 0a 0a 09 20 20 20 20  at      0...    
6850: 77 68 69 6c 65 20 7b 24 61 74 20 3c 20 5b 6c 6c  while {$at < [ll
6860: 65 6e 67 74 68 20 24 70 65 6e 64 69 6e 67 5d 7d  ength $pending]}
6870: 20 7b 0a 09 09 73 65 74 20 63 75 72 72 65 6e 74   {...set current
6880: 20 5b 6c 69 6e 64 65 78 20 24 70 65 6e 64 69 6e   [lindex $pendin
6890: 67 20 24 61 74 5d 0a 0a 09 09 6c 6f 67 20 77 72  g $at]....log wr
68a0: 69 74 65 20 36 20 63 73 65 74 73 20 7b 2e 20 2e  ite 6 csets {. .
68b0: 20 2e 2e 20 2e 2e 2e 20 2e 2e 2e 2e 2e 20 2e 2e   .. ... ..... ..
68c0: 2e 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 2e  ...... .........
68d0: 2e 2e 2e 2e 7d 0a 09 09 6c 6f 67 20 77 72 69 74  ....}...log writ
68e0: 65 20 36 20 63 73 65 74 73 20 7b 53 63 68 65 64  e 6 csets {Sched
68f0: 75 6c 65 64 20 20 20 5b 6a 6f 69 6e 20 5b 50 52  uled   [join [PR
6900: 73 20 5b 6c 72 61 6e 67 65 20 24 70 65 6e 64 69  s [lrange $pendi
6910: 6e 67 20 24 61 74 20 65 6e 64 5d 5d 20 7b 20 7d  ng $at end]] { }
6920: 5d 7d 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 36  ]}...log write 6
6930: 20 63 73 65 74 73 20 7b 43 6f 6e 73 69 64 65 72   csets {Consider
6940: 69 6e 67 20 5b 50 52 20 24 63 75 72 72 65 6e 74  ing [PR $current
6950: 5d 20 5c 5b 24 61 74 2f 5b 6c 6c 65 6e 67 74 68  ] \[$at/[llength
6960: 20 24 70 65 6e 64 69 6e 67 5d 5c 5d 7d 0a 0a 09   $pending]\]}...
6970: 09 73 65 74 20 62 65 73 74 20 5b 46 69 6e 64 42  .set best [FindB
6980: 65 73 74 42 72 65 61 6b 20 24 63 75 72 72 65 6e  estBreak $curren
6990: 74 5d 0a 0a 09 09 69 66 20 7b 24 62 65 73 74 20  t]....if {$best 
69a0: 3c 20 30 7d 20 7b 0a 09 09 20 20 20 20 23 20 54  < 0} {...    # T
69b0: 68 65 20 69 6e 73 70 65 63 74 65 64 20 72 61 6e  he inspected ran
69c0: 67 65 20 68 61 73 20 6e 6f 20 69 6e 74 65 72 6e  ge has no intern
69d0: 61 6c 0a 09 09 20 20 20 20 23 20 64 65 70 65 6e  al...    # depen
69e0: 64 65 6e 63 69 65 73 2e 20 54 68 69 73 20 69 73  dencies. This is
69f0: 20 61 20 63 6f 6d 70 6c 65 74 65 20 66 72 61 67   a complete frag
6a00: 6d 65 6e 74 2e 0a 09 09 20 20 20 20 6c 61 70 70  ment....    lapp
6a10: 65 6e 64 20 66 72 61 67 6d 65 6e 74 73 20 24 63  end fragments $c
6a20: 75 72 72 65 6e 74 0a 0a 09 09 20 20 20 20 6c 6f  urrent....    lo
6a30: 67 20 77 72 69 74 65 20 36 20 63 73 65 74 73 20  g write 6 csets 
6a40: 22 4e 6f 20 62 72 65 61 6b 73 2c 20 66 69 6e 61  "No breaks, fina
6a50: 6c 22 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  l"...} else {...
6a60: 20 20 20 20 23 20 53 70 6c 69 74 20 74 68 65 20      # Split the 
6a70: 72 61 6e 67 65 20 61 6e 64 20 73 63 68 65 64 75  range and schedu
6a80: 6c 65 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67  le the resulting
6a90: 0a 09 09 20 20 20 20 23 20 66 72 61 67 6d 65 6e  ...    # fragmen
6aa0: 74 73 20 66 6f 72 20 66 75 72 74 68 65 72 20 69  ts for further i
6ab0: 6e 73 70 65 63 74 69 6f 6e 2e 20 52 65 6d 65 6d  nspection. Remem
6ac0: 62 65 72 20 74 68 65 0a 09 09 20 20 20 20 23 20  ber the...    # 
6ad0: 6e 75 6d 62 65 72 20 6f 66 20 64 65 70 65 6e 64  number of depend
6ae0: 65 6e 63 69 65 73 20 63 75 74 20 62 65 66 6f 72  encies cut befor
6af0: 65 20 77 65 20 72 65 6d 6f 76 65 20 74 68 65 6d  e we remove them
6b00: 0a 09 09 20 20 20 20 23 20 66 72 6f 6d 20 63 6f  ...    # from co
6b10: 6e 73 69 64 65 72 61 74 69 6f 6e 2c 20 66 6f 72  nsideration, for
6b20: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6c   documentation l
6b30: 61 74 65 72 2e 0a 0a 09 09 20 20 20 20 73 65 74  ater.....    set
6b40: 20 62 72 65 61 6b 73 28 24 62 65 73 74 29 20 24   breaks($best) $
6b50: 63 72 6f 73 73 28 24 62 65 73 74 29 0a 0a 09 09  cross($best)....
6b60: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 36 20      log write 6 
6b70: 63 73 65 74 73 20 22 42 65 73 74 20 62 72 65 61  csets "Best brea
6b80: 6b 20 40 20 24 62 65 73 74 2c 20 63 75 74 74 69  k @ $best, cutti
6b90: 6e 67 20 5b 6e 73 70 20 24 63 72 6f 73 73 28 24  ng [nsp $cross($
6ba0: 62 65 73 74 29 20 64 65 70 65 6e 64 65 6e 63 79  best) dependency
6bb0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 5d 22 0a   dependencies]".
6bc0: 0a 09 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 54  ...    # Note: T
6bd0: 68 65 20 76 61 6c 75 65 20 6f 66 20 62 65 73 74  he value of best
6be0: 20 69 73 20 61 6e 20 61 62 6f 6c 75 74 65 20 6c   is an abolute l
6bf0: 6f 63 61 74 69 6f 6e 0a 09 09 20 20 20 20 23 20  ocation...    # 
6c00: 69 6e 20 6d 79 69 74 65 6d 73 2e 20 55 73 65 20  in myitems. Use 
6c10: 74 68 65 20 73 74 61 72 74 20 6f 66 20 63 75 72  the start of cur
6c20: 72 65 6e 74 20 74 6f 20 6d 61 6b 65 20 69 74 0a  rent to make it.
6c30: 09 09 20 20 20 20 23 20 61 6e 20 69 6e 64 65 78  ..    # an index
6c40: 20 61 62 73 6f 6c 75 74 65 20 74 6f 20 63 75 72   absolute to cur
6c50: 72 65 6e 74 2e 0a 0a 09 09 20 20 20 20 73 65 74  rent.....    set
6c60: 20 62 72 65 6c 20 5b 65 78 70 72 20 7b 24 62 65   brel [expr {$be
6c70: 73 74 20 2d 20 5b 6c 69 6e 64 65 78 20 24 63 75  st - [lindex $cu
6c80: 72 72 65 6e 74 20 30 5d 7d 5d 0a 09 09 20 20 20  rrent 0]}]...   
6c90: 20 73 65 74 20 62 6e 65 78 74 20 24 62 72 65 6c   set bnext $brel
6ca0: 20 3b 20 69 6e 63 72 20 62 6e 65 78 74 0a 09 09   ; incr bnext...
6cb0: 20 20 20 20 73 65 74 20 66 72 61 67 62 65 66 6f      set fragbefo
6cc0: 72 65 20 5b 6c 72 61 6e 67 65 20 24 63 75 72 72  re [lrange $curr
6cd0: 65 6e 74 20 30 20 24 62 72 65 6c 5d 0a 09 09 20  ent 0 $brel]... 
6ce0: 20 20 20 73 65 74 20 66 72 61 67 61 66 74 65 72     set fragafter
6cf0: 20 20 5b 6c 72 61 6e 67 65 20 24 63 75 72 72 65    [lrange $curre
6d00: 6e 74 20 24 62 6e 65 78 74 20 65 6e 64 5d 0a 0a  nt $bnext end]..
6d10: 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
6d20: 36 20 63 73 65 74 73 20 22 4e 65 77 20 70 69 65  6 csets "New pie
6d30: 63 65 73 20 20 5b 50 52 20 24 66 72 61 67 62 65  ces  [PR $fragbe
6d40: 66 6f 72 65 5d 20 5b 50 52 20 24 66 72 61 67 61  fore] [PR $fraga
6d50: 66 74 65 72 5d 22 0a 0a 09 09 20 20 20 20 69 6e  fter]"....    in
6d60: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b  tegrity assert {
6d70: 5b 6c 6c 65 6e 67 74 68 20 24 66 72 61 67 62 65  [llength $fragbe
6d80: 66 6f 72 65 5d 7d 20 7b 46 6f 75 6e 64 20 7a 65  fore]} {Found ze
6d90: 72 6f 2d 6c 65 6e 67 74 68 20 66 72 61 67 6d 65  ro-length fragme
6da0: 6e 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e  nt at the beginn
6db0: 69 6e 67 7d 0a 09 09 20 20 20 20 69 6e 74 65 67  ing}...    integ
6dc0: 72 69 74 79 20 61 73 73 65 72 74 20 7b 5b 6c 6c  rity assert {[ll
6dd0: 65 6e 67 74 68 20 24 66 72 61 67 61 66 74 65 72  ength $fragafter
6de0: 5d 7d 20 20 7b 46 6f 75 6e 64 20 7a 65 72 6f 2d  ]}  {Found zero-
6df0: 6c 65 6e 67 74 68 20 66 72 61 67 6d 65 6e 74 20  length fragment 
6e00: 61 74 20 74 68 65 20 65 6e 64 7d 0a 0a 09 09 20  at the end}.... 
6e10: 20 20 20 6c 61 70 70 65 6e 64 20 6e 65 77 20 24     lappend new $
6e20: 66 72 61 67 62 65 66 6f 72 65 20 24 66 72 61 67  fragbefore $frag
6e30: 61 66 74 65 72 0a 09 09 20 20 20 20 43 75 74 41  after...    CutA
6e40: 74 20 24 62 65 73 74 0a 09 09 7d 0a 0a 09 09 69  t $best...}....i
6e50: 6e 63 72 20 61 74 0a 09 20 20 20 20 7d 0a 09 7d  ncr at..    }..}
6e60: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 36 20 63  ...log write 6 c
6e70: 73 65 74 73 20 22 2e 20 2e 20 2e 2e 20 2e 2e 2e  sets ". . .. ...
6e80: 20 2e 2e 2e 2e 2e 20 2e 2e 2e 2e 2e 2e 2e 2e 20   ..... ........ 
6e90: 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 2e 22 0a 0a  ............."..
6ea0: 09 72 65 74 75 72 6e 20 24 66 72 61 67 6d 65 6e  .return $fragmen
6eb0: 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  ts.    }..    pr
6ec0: 6f 63 20 49 6e 69 74 69 61 6c 69 7a 65 42 72 65  oc InitializeBre
6ed0: 61 6b 53 74 61 74 65 20 7b 72 65 76 69 73 69 6f  akState {revisio
6ee0: 6e 73 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 70  ns} {..upvar 1 p
6ef0: 6f 73 20 70 6f 73 20 63 72 6f 73 73 20 63 72 6f  os pos cross cro
6f00: 73 73 20 72 61 6e 67 65 20 72 61 6e 67 65 20 64  ss range range d
6f10: 65 70 63 20 64 65 70 63 20 64 65 6c 74 61 20 64  epc depc delta d
6f20: 65 6c 74 61 20 5c 0a 09 20 20 20 20 64 65 70 65  elta \..    depe
6f30: 6e 64 65 6e 63 69 65 73 20 64 65 70 65 6e 64 65  ndencies depende
6f40: 6e 63 69 65 73 0a 0a 09 23 20 46 69 72 73 74 20  ncies...# First 
6f50: 77 65 20 63 72 65 61 74 65 20 61 20 6d 61 70 20  we create a map 
6f60: 6f 66 20 70 6f 73 69 74 69 6f 6e 73 20 74 6f 20  of positions to 
6f70: 6d 61 6b 65 20 69 74 20 65 61 73 69 65 72 20 74  make it easier t
6f80: 6f 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 20 77  o..# determine w
6f90: 68 65 74 68 65 72 20 61 20 64 65 70 65 6e 64 65  hether a depende
6fa0: 6e 63 79 20 63 72 6f 73 73 65 73 20 61 20 70 61  ncy crosses a pa
6fb0: 72 74 69 63 75 6c 61 72 20 69 6e 64 65 78 2e 0a  rticular index..
6fc0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63  ..log write 14 c
6fd0: 73 65 74 73 20 7b 49 42 53 3a 20 23 72 65 76 20  sets {IBS: #rev 
6fe0: 5b 6c 6c 65 6e 67 74 68 20 24 72 65 76 69 73 69  [llength $revisi
6ff0: 6f 6e 73 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65  ons]}..log write
7000: 20 31 34 20 63 73 65 74 73 20 7b 49 42 53 3a 20   14 csets {IBS: 
7010: 70 6f 73 20 6d 61 70 2c 20 63 72 6f 73 73 20 63  pos map, cross c
7020: 6f 75 6e 74 65 72 7d 0a 0a 09 61 72 72 61 79 20  ounter}...array 
7030: 73 65 74 20 70 6f 73 20 20 20 7b 7d 0a 09 61 72  set pos   {}..ar
7040: 72 61 79 20 73 65 74 20 63 72 6f 73 73 20 7b 7d  ray set cross {}
7050: 0a 09 61 72 72 61 79 20 73 65 74 20 64 65 70 63  ..array set depc
7060: 20 20 7b 7d 0a 09 73 65 74 20 72 61 6e 67 65 20    {}..set range 
7070: 20 20 20 20 20 20 7b 7d 0a 09 73 65 74 20 6e 20        {}..set n 
7080: 30 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24  0..foreach rev $
7090: 72 65 76 69 73 69 6f 6e 73 20 7b 0a 09 20 20 20  revisions {..   
70a0: 20 6c 61 70 70 65 6e 64 20 72 61 6e 67 65 20 24   lappend range $
70b0: 6e 0a 09 20 20 20 20 73 65 74 20 70 6f 73 28 24  n..    set pos($
70c0: 72 65 76 29 20 24 6e 0a 09 20 20 20 20 73 65 74  rev) $n..    set
70d0: 20 63 72 6f 73 73 28 24 6e 29 20 30 0a 09 20 20   cross($n) 0..  
70e0: 20 20 69 6e 63 72 20 6e 0a 09 7d 0a 0a 09 6c 6f    incr n..}...lo
70f0: 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74 73  g write 14 csets
7100: 20 7b 49 42 53 3a 20 70 6f 73 2f 5b 61 72 72 61   {IBS: pos/[arra
7110: 79 20 73 69 7a 65 20 70 6f 73 5d 2c 20 63 72 6f  y size pos], cro
7120: 73 73 2f 5b 61 72 72 61 79 20 73 69 7a 65 20 63  ss/[array size c
7130: 72 6f 73 73 5d 7d 0a 0a 09 23 20 53 65 63 6f 6e  ross]}...# Secon
7140: 64 6c 79 20 77 65 20 63 6f 75 6e 74 20 74 68 65  dly we count the
7150: 20 63 72 6f 73 73 69 6e 67 73 20 70 65 72 20 70   crossings per p
7160: 6f 73 69 74 69 6f 6e 2c 20 62 79 20 69 74 65 72  osition, by iter
7170: 61 74 69 6e 67 0a 09 23 20 6f 76 65 72 20 74 68  ating..# over th
7180: 65 20 72 65 63 6f 72 64 65 64 20 69 6e 74 65 72  e recorded inter
7190: 6e 61 6c 20 64 65 70 65 6e 64 65 6e 63 69 65 73  nal dependencies
71a0: 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 49 66 20 74  ....# Note: If t
71b0: 68 65 20 74 69 6d 65 73 74 61 6d 70 73 20 61 72  he timestamps ar
71c0: 65 20 62 61 64 6c 79 20 6f 75 74 20 6f 66 20 6f  e badly out of o
71d0: 72 64 65 72 20 69 74 20 69 73 0a 09 23 20 20 20  rder it is..#   
71e0: 20 20 20 20 70 6f 73 73 69 62 6c 65 20 74 6f 20      possible to 
71f0: 68 61 76 65 20 61 20 62 61 63 6b 77 61 72 64 20  have a backward 
7200: 73 75 63 63 65 73 73 6f 72 20 64 65 70 65 6e 64  successor depend
7210: 65 6e 63 79 2c 0a 09 23 20 20 20 20 20 20 20 69  ency,..#       i
7220: 2e 65 2e 20 77 69 74 68 20 73 74 61 72 74 20 3e  .e. with start >
7230: 20 65 6e 64 2e 20 57 65 20 6d 61 79 20 68 61 76   end. We may hav
7240: 65 20 74 6f 20 73 77 61 70 20 74 68 65 20 69 6e  e to swap the in
7250: 64 69 63 65 73 0a 09 23 20 20 20 20 20 20 20 74  dices..#       t
7260: 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74 68  o ensure that th
7270: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6c 6f 6f 70  e following loop
7280: 20 72 75 6e 73 20 63 6f 72 72 65 63 74 6c 79 2e   runs correctly.
7290: 0a 09 23 0a 09 23 20 4e 6f 74 65 20 32 3a 20 73  ..#..# Note 2: s
72a0: 74 61 72 74 20 3d 3d 20 65 6e 64 20 69 73 20 6e  tart == end is n
72b0: 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 49 74 20  ot possible. It 
72c0: 69 6e 64 69 63 61 74 65 73 20 61 0a 09 23 20 20  indicates a..#  
72d0: 20 20 20 20 20 20 20 73 65 6c 66 2d 64 65 70 65         self-depe
72e0: 6e 64 65 6e 63 79 20 64 75 65 20 74 6f 20 74 68  ndency due to th
72f0: 65 20 75 6e 69 71 75 65 6e 65 73 73 20 6f 66 20  e uniqueness of 
7300: 70 6f 73 69 74 69 6f 6e 73 2c 0a 09 23 20 20 20  positions,..#   
7310: 20 20 20 20 20 20 61 6e 64 20 74 68 61 74 20 69        and that i
7320: 73 20 73 6f 6d 65 74 68 69 6e 67 20 77 65 20 68  s something we h
7330: 61 76 65 20 72 75 6c 65 64 20 6f 75 74 20 61 6c  ave ruled out al
7340: 72 65 61 64 79 2c 20 73 65 65 0a 09 23 20 20 20  ready, see..#   
7350: 20 20 20 20 20 20 27 72 65 76 20 69 6e 74 65 72        'rev inter
7360: 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 27 2e 0a  nalsuccessors'..
7370: 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63  ..log write 14 c
7380: 73 65 74 73 20 7b 49 42 53 3a 20 63 72 6f 73 73  sets {IBS: cross
7390: 20 63 6f 75 6e 74 65 72 20 66 69 6c 6c 69 6e 67   counter filling
73a0: 2c 20 70 6f 73 2f 63 72 6f 73 73 20 6d 61 70 7d  , pos/cross map}
73b0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 64 20  ...foreach {rid 
73c0: 63 68 69 6c 64 72 65 6e 7d 20 5b 61 72 72 61 79  children} [array
73d0: 20 67 65 74 20 64 65 70 65 6e 64 65 6e 63 69 65   get dependencie
73e0: 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63  s] {..    foreac
73f0: 68 20 63 68 69 6c 64 20 24 63 68 69 6c 64 72 65  h child $childre
7400: 6e 20 7b 0a 09 09 73 65 74 20 64 6b 65 79 20 20  n {...set dkey  
7410: 20 20 5b 6c 69 73 74 20 24 72 69 64 20 24 63 68    [list $rid $ch
7420: 69 6c 64 5d 0a 09 09 73 65 74 20 73 74 61 72 74  ild]...set start
7430: 20 20 20 24 70 6f 73 28 24 72 69 64 29 0a 09 09     $pos($rid)...
7440: 73 65 74 20 65 6e 64 20 20 20 20 20 24 70 6f 73  set end     $pos
7450: 28 24 63 68 69 6c 64 29 0a 0a 09 09 69 66 20 7b  ($child)....if {
7460: 24 73 74 61 72 74 20 3e 20 24 65 6e 64 7d 20 7b  $start > $end} {
7470: 0a 09 09 20 20 20 20 73 65 74 20 63 72 6f 73 73  ...    set cross
7480: 65 73 20 5b 6c 69 73 74 20 24 65 6e 64 20 5b 65  es [list $end [e
7490: 78 70 72 20 7b 24 73 74 61 72 74 2d 31 7d 5d 5d  xpr {$start-1}]]
74a0: 0a 09 09 20 20 20 20 77 68 69 6c 65 20 7b 24 65  ...    while {$e
74b0: 6e 64 20 3c 20 24 73 74 61 72 74 7d 20 7b 0a 09  nd < $start} {..
74c0: 09 09 69 6e 63 72 20 63 72 6f 73 73 28 24 65 6e  ..incr cross($en
74d0: 64 29 0a 09 09 09 69 6e 63 72 20 65 6e 64 0a 09  d)....incr end..
74e0: 09 20 20 20 20 7d 0a 09 09 7d 20 65 6c 73 65 20  .    }...} else 
74f0: 7b 0a 09 09 20 20 20 20 73 65 74 20 63 72 6f 73  {...    set cros
7500: 73 65 73 20 5b 6c 69 73 74 20 24 73 74 61 72 74  ses [list $start
7510: 20 5b 65 78 70 72 20 7b 24 65 6e 64 2d 31 7d 5d   [expr {$end-1}]
7520: 5d 0a 09 09 20 20 20 20 77 68 69 6c 65 20 7b 24  ]...    while {$
7530: 73 74 61 72 74 20 3c 20 24 65 6e 64 7d 20 7b 0a  start < $end} {.
7540: 09 09 09 69 6e 63 72 20 63 72 6f 73 73 28 24 73  ...incr cross($s
7550: 74 61 72 74 29 0a 09 09 09 69 6e 63 72 20 73 74  tart)....incr st
7560: 61 72 74 0a 09 09 20 20 20 20 7d 0a 09 09 7d 0a  art...    }...}.
7570: 09 09 73 65 74 20 64 65 70 63 28 24 64 6b 65 79  ..set depc($dkey
7580: 29 20 24 63 72 6f 73 73 65 73 0a 09 20 20 20 20  ) $crosses..    
7590: 7d 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 65  }..}...log write
75a0: 20 31 34 20 63 73 65 74 73 20 7b 49 42 53 3a 20   14 csets {IBS: 
75b0: 70 6f 73 2f 5b 61 72 72 61 79 20 73 69 7a 65 20  pos/[array size 
75c0: 70 6f 73 5d 2c 20 63 72 6f 73 73 2f 5b 61 72 72  pos], cross/[arr
75d0: 61 79 20 73 69 7a 65 20 63 72 6f 73 73 5d 2c 20  ay size cross], 
75e0: 64 65 70 63 2f 5b 61 72 72 61 79 20 73 69 7a 65  depc/[array size
75f0: 20 64 65 70 63 5d 20 28 66 6f 72 20 5b 6c 6c 65   depc] (for [lle
7600: 6e 67 74 68 20 24 72 65 76 69 73 69 6f 6e 73 5d  ngth $revisions]
7610: 29 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 34  )}..log write 14
7620: 20 63 73 65 74 73 20 7b 49 42 53 3a 20 74 69 6d   csets {IBS: tim
7630: 65 73 74 61 6d 70 73 2c 20 64 65 6c 74 61 73 7d  estamps, deltas}
7640: 0a 0a 09 49 6e 69 74 69 61 6c 69 7a 65 44 65 6c  ...InitializeDel
7650: 74 61 73 20 24 72 65 76 69 73 69 6f 6e 73 0a 0a  tas $revisions..
7660: 09 6c 6f 67 20 77 72 69 74 65 20 31 34 20 63 73  .log write 14 cs
7670: 65 74 73 20 7b 49 42 53 3a 20 64 65 6c 74 61 20  ets {IBS: delta 
7680: 5b 61 72 72 61 79 20 73 69 7a 65 20 64 65 6c 74  [array size delt
7690: 61 5d 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  a]}..return.    
76a0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 49 6e 69 74  }..    proc Init
76b0: 69 61 6c 69 7a 65 44 65 6c 74 61 73 20 7b 72 65  ializeDeltas {re
76c0: 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 76 61  visions} {..upva
76d0: 72 20 31 20 64 65 6c 74 61 20 64 65 6c 74 61 0a  r 1 delta delta.
76e0: 0a 09 23 20 50 75 6c 6c 20 74 68 65 20 74 69 6d  ..# Pull the tim
76f0: 65 73 74 61 6d 70 73 20 66 6f 72 20 61 6c 6c 20  estamps for all 
7700: 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 74 68 65  revisions in the
7710: 20 63 68 61 6e 67 65 73 65 74 73 20 61 6e 64 0a   changesets and.
7720: 09 23 20 63 6f 6d 70 75 74 65 20 74 68 65 69 72  .# compute their
7730: 20 64 65 6c 74 61 73 20 66 6f 72 20 75 73 65 20   deltas for use 
7740: 62 79 20 74 68 65 20 62 72 65 61 6b 20 66 69 6e  by the break fin
7750: 64 65 72 2e 0a 0a 09 61 72 72 61 79 20 73 65 74  der....array set
7760: 20 64 65 6c 74 61 20 7b 7d 0a 09 61 72 72 61 79   delta {}..array
7770: 20 73 65 74 20 73 74 61 6d 70 20 7b 7d 0a 0a 09   set stamp {}...
7780: 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f  set theset ('[jo
7790: 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27  in $revisions {'
77a0: 2c 27 7d 5d 27 29 0a 09 73 74 61 74 65 20 66 6f  ,'}]')..state fo
77b0: 72 65 61 63 68 72 6f 77 20 5b 73 75 62 73 74 20  reachrow [subst 
77c0: 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62  -nocommands -nob
77d0: 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20  ackslashes {..  
77e0: 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 20 41    SELECT R.rid A
77f0: 53 20 78 72 69 64 2c 20 52 2e 64 61 74 65 20 41  S xrid, R.date A
7800: 53 20 74 69 6d 65 0a 09 20 20 20 20 46 52 4f 4d  S time..    FROM
7810: 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20   revision R..   
7820: 20 57 48 45 52 45 20 52 2e 72 69 64 20 49 4e 20   WHERE R.rid IN 
7830: 24 74 68 65 73 65 74 0a 09 7d 5d 20 7b 0a 09 20  $theset..}] {.. 
7840: 20 20 20 73 65 74 20 73 74 61 6d 70 28 24 78 72     set stamp($xr
7850: 69 64 29 20 24 74 69 6d 65 0a 09 7d 0a 0a 09 6c  id) $time..}...l
7860: 6f 67 20 77 72 69 74 65 20 31 34 20 63 73 65 74  og write 14 cset
7870: 73 20 7b 49 42 53 3a 20 73 74 61 6d 70 20 5b 61  s {IBS: stamp [a
7880: 72 72 61 79 20 73 69 7a 65 20 73 74 61 6d 70 5d  rray size stamp]
7890: 7d 0a 0a 09 73 65 74 20 6e 20 30 0a 09 66 6f 72  }...set n 0..for
78a0: 65 61 63 68 20 72 69 64 20 5b 6c 72 61 6e 67 65  each rid [lrange
78b0: 20 24 72 65 76 69 73 69 6f 6e 73 20 30 20 65 6e   $revisions 0 en
78c0: 64 2d 31 5d 20 72 6e 65 78 74 20 5b 6c 72 61 6e  d-1] rnext [lran
78d0: 67 65 20 24 72 65 76 69 73 69 6f 6e 73 20 31 20  ge $revisions 1 
78e0: 65 6e 64 5d 20 7b 0a 09 20 20 20 20 73 65 74 20  end] {..    set 
78f0: 64 65 6c 74 61 28 24 6e 29 20 5b 65 78 70 72 20  delta($n) [expr 
7900: 7b 24 73 74 61 6d 70 28 24 72 6e 65 78 74 29 20  {$stamp($rnext) 
7910: 2d 20 24 73 74 61 6d 70 28 24 72 69 64 29 7d 5d  - $stamp($rid)}]
7920: 0a 09 20 20 20 20 69 6e 63 72 20 6e 0a 09 7d 0a  ..    incr n..}.
7930: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
7940: 20 20 20 70 72 6f 63 20 46 69 6e 64 42 65 73 74     proc FindBest
7950: 42 72 65 61 6b 20 7b 72 61 6e 67 65 7d 20 7b 0a  Break {range} {.
7960: 09 75 70 76 61 72 20 31 20 63 72 6f 73 73 20 63  .upvar 1 cross c
7970: 72 6f 73 73 20 64 65 6c 74 61 20 64 65 6c 74 61  ross delta delta
7980: 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 74  ...# Determine t
7990: 68 65 20 62 65 73 74 20 62 72 65 61 6b 20 6c 6f  he best break lo
79a0: 63 61 74 69 6f 6e 20 69 6e 20 74 68 65 20 67 69  cation in the gi
79b0: 76 65 6e 20 72 61 6e 67 65 20 6f 66 0a 09 23 20  ven range of..# 
79c0: 70 6f 73 69 74 69 6f 6e 73 2e 20 46 69 72 73 74  positions. First
79d0: 20 77 65 20 6c 6f 6f 6b 20 66 6f 72 20 74 68 65   we look for the
79e0: 20 6c 6f 63 61 74 69 6f 6e 73 20 77 69 74 68 20   locations with 
79f0: 74 68 65 20 6d 61 78 69 6d 61 6c 0a 09 23 20 6e  the maximal..# n
7a00: 75 6d 62 65 72 20 6f 66 20 63 72 6f 73 73 69 6e  umber of crossin
7a10: 67 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  gs. If there are
7a20: 20 73 65 76 65 72 61 6c 20 77 65 20 6c 6f 6f 6b   several we look
7a30: 20 66 6f 72 20 74 68 65 0a 09 23 20 73 68 6f 72   for the..# shor
7a40: 74 65 73 74 20 74 69 6d 65 20 69 6e 74 65 72 76  test time interv
7a50: 61 6c 20 61 6d 6f 6e 67 20 74 68 65 6d 2e 20 49  al among them. I
7a60: 66 20 77 65 20 73 74 69 6c 6c 20 68 61 76 65 20  f we still have 
7a70: 6d 75 6c 74 69 70 6c 65 0a 09 23 20 70 6f 73 73  multiple..# poss
7a80: 69 62 69 6c 69 74 69 65 73 20 61 66 74 65 72 20  ibilities after 
7a90: 74 68 61 74 20 77 65 20 73 65 6c 65 63 74 20 74  that we select t
7aa0: 68 65 20 65 61 72 6c 69 65 73 74 20 6c 6f 63 61  he earliest loca
7ab0: 74 69 6f 6e 0a 09 23 20 61 6d 6f 6e 67 20 74 68  tion..# among th
7ac0: 65 73 65 2e 0a 0a 09 23 20 4e 6f 74 65 3a 20 49  ese....# Note: I
7ad0: 66 20 74 68 65 20 6d 61 78 69 6d 61 6c 20 6e 75  f the maximal nu
7ae0: 6d 62 65 72 20 6f 66 20 63 72 6f 73 73 69 6e 67  mber of crossing
7af0: 73 20 69 73 20 30 20 74 68 65 6e 20 74 68 65 20  s is 0 then the 
7b00: 72 61 6e 67 65 0a 09 23 20 20 20 20 20 20 20 68  range..#       h
7b10: 61 73 20 6e 6f 20 69 6e 74 65 72 6e 61 6c 20 64  as no internal d
7b20: 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 61 6e 64  ependencies, and
7b30: 20 6e 6f 20 62 72 65 61 6b 20 6c 6f 63 61 74 69   no break locati
7b40: 6f 6e 20 61 74 0a 09 23 20 20 20 20 20 20 20 61  on at..#       a
7b50: 6c 6c 2e 20 54 68 69 73 20 70 6f 73 73 69 62 69  ll. This possibi
7b60: 6c 69 74 79 20 69 73 20 73 69 67 6e 61 6c 65 64  lity is signaled
7b70: 20 76 69 61 20 72 65 73 75 6c 74 20 2d 31 2e 0a   via result -1..
7b80: 0a 09 23 20 4e 6f 74 65 3a 20 41 20 72 61 6e 67  ..# Note: A rang
7b90: 65 20 6f 66 20 6c 65 6e 67 74 68 20 31 20 6f 72  e of length 1 or
7ba0: 20 6c 65 73 73 20 63 61 6e 6e 6f 74 20 68 61 76   less cannot hav
7bb0: 65 20 69 6e 74 65 72 6e 61 6c 0a 09 23 20 20 20  e internal..#   
7bc0: 20 20 20 20 64 65 70 65 6e 64 65 6e 63 69 65 73      dependencies
7bd0: 2c 20 61 73 20 74 68 61 74 20 6e 65 65 64 73 20  , as that needs 
7be0: 61 74 20 6c 65 61 73 74 20 74 77 6f 20 72 65 76  at least two rev
7bf0: 69 73 69 6f 6e 73 20 69 6e 0a 09 23 20 20 20 20  isions in..#    
7c00: 20 20 20 74 68 65 20 72 61 6e 67 65 2e 0a 0a 09     the range....
7c10: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 72 61  if {[llength $ra
7c20: 6e 67 65 5d 20 3c 20 32 7d 20 7b 20 72 65 74 75  nge] < 2} { retu
7c30: 72 6e 20 2d 31 20 7d 0a 0a 09 73 65 74 20 6d 61  rn -1 }...set ma
7c40: 78 20 2d 31 0a 09 73 65 74 20 62 65 73 74 20 7b  x -1..set best {
7c50: 7d 0a 0a 09 66 6f 72 65 61 63 68 20 6c 6f 63 61  }...foreach loca
7c60: 74 69 6f 6e 20 24 72 61 6e 67 65 20 7b 0a 09 20  tion $range {.. 
7c70: 20 20 20 73 65 74 20 63 72 6f 73 73 69 6e 67 73     set crossings
7c80: 20 24 63 72 6f 73 73 28 24 6c 6f 63 61 74 69 6f   $cross($locatio
7c90: 6e 29 0a 09 20 20 20 20 69 66 20 7b 24 63 72 6f  n)..    if {$cro
7ca0: 73 73 69 6e 67 73 20 3e 20 24 6d 61 78 7d 20 7b  ssings > $max} {
7cb0: 0a 09 09 73 65 74 20 6d 61 78 20 20 24 63 72 6f  ...set max  $cro
7cc0: 73 73 69 6e 67 73 0a 09 09 73 65 74 20 62 65 73  ssings...set bes
7cd0: 74 20 5b 6c 69 73 74 20 24 6c 6f 63 61 74 69 6f  t [list $locatio
7ce0: 6e 5d 0a 09 09 63 6f 6e 74 69 6e 75 65 0a 09 20  n]...continue.. 
7cf0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 72     } elseif {$cr
7d00: 6f 73 73 69 6e 67 73 20 3d 3d 20 24 6d 61 78 7d  ossings == $max}
7d10: 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 62 65 73   {...lappend bes
7d20: 74 20 24 6c 6f 63 61 74 69 6f 6e 0a 09 20 20 20  t $location..   
7d30: 20 7d 0a 09 7d 0a 0a 09 69 66 20 7b 24 6d 61 78   }..}...if {$max
7d40: 20 3d 3d 20 30 7d 20 20 20 20 20 20 20 20 20 20   == 0}          
7d50: 20 20 7b 20 72 65 74 75 72 6e 20 2d 31 20 7d 0a    { return -1 }.
7d60: 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 62  .if {[llength $b
7d70: 65 73 74 5d 20 3d 3d 20 31 7d 20 7b 20 72 65 74  est] == 1} { ret
7d80: 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 62 65 73  urn [lindex $bes
7d90: 74 20 30 5d 20 7d 0a 0a 09 73 65 74 20 6c 6f 63  t 0] }...set loc
7da0: 61 74 69 6f 6e 73 20 24 62 65 73 74 0a 09 73 65  ations $best..se
7db0: 74 20 62 65 73 74 20 7b 7d 0a 09 73 65 74 20 6d  t best {}..set m
7dc0: 69 6e 20 2d 31 0a 0a 09 66 6f 72 65 61 63 68 20  in -1...foreach 
7dd0: 6c 6f 63 61 74 69 6f 6e 20 24 6c 6f 63 61 74 69  location $locati
7de0: 6f 6e 73 20 7b 0a 09 20 20 20 20 73 65 74 20 69  ons {..    set i
7df0: 6e 74 65 72 76 61 6c 20 24 64 65 6c 74 61 28 24  nterval $delta($
7e00: 6c 6f 63 61 74 69 6f 6e 29 0a 09 20 20 20 20 69  location)..    i
7e10: 66 20 7b 28 24 6d 69 6e 20 3c 20 30 29 20 7c 7c  f {($min < 0) ||
7e20: 20 28 24 69 6e 74 65 72 76 61 6c 20 3c 20 24 6d   ($interval < $m
7e30: 69 6e 29 7d 20 7b 0a 09 09 73 65 74 20 6d 69 6e  in)} {...set min
7e40: 20 20 24 69 6e 74 65 72 76 61 6c 0a 09 09 73 65    $interval...se
7e50: 74 20 62 65 73 74 20 5b 6c 69 73 74 20 24 6c 6f  t best [list $lo
7e60: 63 61 74 69 6f 6e 5d 0a 09 20 20 20 20 7d 20 65  cation]..    } e
7e70: 6c 73 65 69 66 20 7b 24 69 6e 74 65 72 76 61 6c  lseif {$interval
7e80: 20 3d 3d 20 24 6d 69 6e 7d 20 7b 0a 09 09 6c 61   == $min} {...la
7e90: 70 70 65 6e 64 20 62 65 73 74 20 24 6c 6f 63 61  ppend best $loca
7ea0: 74 69 6f 6e 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a  tion..    }..}..
7eb0: 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 62  .if {[llength $b
7ec0: 65 73 74 5d 20 3d 3d 20 31 7d 20 7b 20 72 65 74  est] == 1} { ret
7ed0: 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 62 65 73  urn [lindex $bes
7ee0: 74 20 30 5d 20 7d 0a 0a 09 72 65 74 75 72 6e 20  t 0] }...return 
7ef0: 5b 6c 69 6e 64 65 78 20 5b 6c 73 6f 72 74 20 2d  [lindex [lsort -
7f00: 69 6e 74 65 67 65 72 20 2d 69 6e 63 72 65 61 73  integer -increas
7f10: 69 6e 67 20 24 62 65 73 74 5d 20 30 5d 0a 20 20  ing $best] 0].  
7f20: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 43 75    }..    proc Cu
7f30: 74 41 74 20 7b 6c 6f 63 61 74 69 6f 6e 7d 20 7b  tAt {location} {
7f40: 0a 09 75 70 76 61 72 20 31 20 63 72 6f 73 73 20  ..upvar 1 cross 
7f50: 63 72 6f 73 73 20 64 65 70 63 20 64 65 70 63 0a  cross depc depc.
7f60: 0a 09 23 20 49 74 20 77 61 73 20 64 65 63 69 64  ..# It was decid
7f70: 65 64 20 74 6f 20 73 70 6c 69 74 20 74 68 65 20  ed to split the 
7f80: 63 68 61 6e 67 65 73 65 74 20 61 74 20 74 68 65  changeset at the
7f90: 20 67 69 76 65 6e 0a 09 23 20 6c 6f 63 61 74 69   given..# locati
7fa0: 6f 6e 2e 20 54 68 69 73 20 63 75 74 73 20 61 20  on. This cuts a 
7fb0: 6e 75 6d 62 65 72 20 6f 66 20 64 65 70 65 6e 64  number of depend
7fc0: 65 6e 63 69 65 73 2e 20 48 65 72 65 20 77 65 20  encies. Here we 
7fd0: 75 70 64 61 74 65 0a 09 23 20 74 68 65 20 63 72  update..# the cr
7fe0: 6f 73 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  oss information 
7ff0: 73 6f 20 74 68 61 74 20 74 68 65 20 62 72 65 61  so that the brea
8000: 6b 20 66 69 6e 64 65 72 20 68 61 73 20 61 63 63  k finder has acc
8010: 75 72 61 74 65 0a 09 23 20 64 61 74 61 20 77 68  urate..# data wh
8020: 65 6e 20 77 65 20 6c 6f 6f 6b 20 61 74 20 74 68  en we look at th
8030: 65 20 67 65 6e 65 72 61 74 65 64 20 66 72 61 67  e generated frag
8040: 6d 65 6e 74 73 2e 0a 0a 09 73 65 74 20 73 69 78  ments....set six
8050: 20 5b 6c 6f 67 20 76 69 73 69 62 6c 65 3f 20 36   [log visible? 6
8060: 5d 0a 0a 09 23 20 4e 6f 74 65 3a 20 54 68 65 20  ]...# Note: The 
8070: 6c 6f 6f 70 20 62 65 6c 6f 77 20 63 6f 75 6c 64  loop below could
8080: 20 62 65 20 6d 61 64 65 20 66 61 73 74 65 72 20   be made faster 
8090: 62 79 20 6b 65 65 70 69 6e 67 20 61 20 6d 61 70  by keeping a map
80a0: 0a 09 23 20 66 72 6f 6d 20 70 6f 73 69 74 69 6f  ..# from positio
80b0: 6e 73 20 74 6f 20 74 68 65 20 64 65 70 65 6e 64  ns to the depend
80c0: 65 6e 63 69 65 73 20 63 72 6f 73 73 69 6e 67 2e  encies crossing.
80d0: 20 41 6e 20 65 78 74 65 6e 73 69 6f 6e 20 6f 66   An extension of
80e0: 0a 09 23 20 43 52 4f 53 53 2c 20 69 2e 65 2e 20  ..# CROSS, i.e. 
80f0: 6c 69 73 74 20 6f 66 20 64 65 70 65 6e 64 65 6e  list of dependen
8100: 63 69 65 73 2c 20 63 6f 75 6e 74 65 72 20 69 73  cies, counter is
8110: 20 69 6d 70 6c 69 65 64 2e 20 54 61 6b 65 73 0a   implied. Takes.
8120: 09 23 20 61 20 6c 6f 74 20 6d 6f 72 65 20 6d 65  .# a lot more me
8130: 6d 6f 72 79 20 68 6f 77 65 76 65 72 2c 20 61 6e  mory however, an
8140: 64 20 74 61 6b 65 73 20 74 69 6d 65 20 74 6f 20  d takes time to 
8150: 75 70 64 61 74 65 20 68 65 72 65 0a 09 23 20 28  update here..# (
8160: 54 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 69  The inner loop i
8170: 73 20 6e 6f 74 20 69 6e 63 72 20 2d 31 2c 20 62  s not incr -1, b
8180: 75 74 20 6c 64 65 6c 65 74 65 29 2e 0a 0a 09 66  ut ldelete)....f
8190: 6f 72 65 61 63 68 20 64 65 70 20 5b 61 72 72 61  oreach dep [arra
81a0: 79 20 6e 61 6d 65 73 20 64 65 70 63 5d 20 7b 0a  y names depc] {.
81b0: 09 20 20 20 20 73 65 74 20 72 61 6e 67 65 20 24  .    set range $
81c0: 64 65 70 63 28 24 64 65 70 29 0a 09 20 20 20 20  depc($dep)..    
81d0: 23 20 43 68 65 63 6b 20 61 6c 6c 20 64 65 70 65  # Check all depe
81e0: 6e 64 65 6e 63 69 65 73 20 73 74 69 6c 6c 20 6b  ndencies still k
81f0: 6e 6f 77 6e 2c 20 74 61 6b 65 20 74 68 65 69 72  nown, take their
8200: 20 72 61 6e 67 65 20 61 6e 64 0a 09 20 20 20 20   range and..    
8210: 23 20 73 65 65 20 69 66 20 74 68 65 20 62 72 65  # see if the bre
8220: 61 6b 20 6c 6f 63 61 74 69 6f 6e 20 66 61 6c 6c  ak location fall
8230: 73 20 77 69 74 68 69 6e 2e 0a 0a 09 20 20 20 20  s within....    
8240: 42 6f 72 64 65 72 20 24 72 61 6e 67 65 20 73 20  Border $range s 
8250: 65 0a 09 20 20 20 20 69 66 20 7b 24 6c 6f 63 61  e..    if {$loca
8260: 74 69 6f 6e 20 3c 20 24 73 7d 20 63 6f 6e 74 69  tion < $s} conti
8270: 6e 75 65 20 3b 20 23 20 62 72 65 61 6b 20 62 65  nue ; # break be
8280: 66 6f 72 65 20 72 61 6e 67 65 2c 20 69 67 6e 6f  fore range, igno
8290: 72 65 0a 09 20 20 20 20 69 66 20 7b 24 6c 6f 63  re..    if {$loc
82a0: 61 74 69 6f 6e 20 3e 20 24 65 7d 20 63 6f 6e 74  ation > $e} cont
82b0: 69 6e 75 65 20 3b 20 23 20 62 72 65 61 6b 20 61  inue ; # break a
82c0: 66 74 65 72 20 72 61 6e 67 65 2c 20 69 67 6e 6f  fter range, igno
82d0: 72 65 2e 0a 0a 09 20 20 20 20 23 20 54 68 69 73  re....    # This
82e0: 20 64 65 70 65 6e 64 65 6e 63 79 20 63 72 6f 73   dependency cros
82f0: 73 65 73 20 74 68 65 20 62 72 65 61 6b 20 6c 6f  ses the break lo
8300: 63 61 74 69 6f 6e 2e 20 57 65 20 72 65 6d 6f 76  cation. We remov
8310: 65 20 69 74 0a 09 20 20 20 20 23 20 66 72 6f 6d  e it..    # from
8320: 20 74 68 65 20 63 72 6f 73 73 69 6e 67 73 20 63   the crossings c
8330: 6f 75 6e 74 65 72 73 2c 20 61 6e 64 20 74 68 65  ounters, and the
8340: 6e 20 61 6c 73 6f 20 66 72 6f 6d 20 74 68 65 20  n also from the 
8350: 73 65 74 0a 09 20 20 20 20 23 20 6f 66 20 6b 6e  set..    # of kn
8360: 6f 77 6e 20 64 65 70 65 6e 64 65 6e 63 69 65 73  own dependencies
8370: 2c 20 61 73 20 77 65 20 61 72 65 20 64 6f 6e 65  , as we are done
8380: 20 77 69 74 68 20 69 74 2e 0a 0a 09 20 20 20 20   with it....    
8390: 42 6f 72 64 65 72 20 24 64 65 70 63 28 24 64 65  Border $depc($de
83a0: 70 29 20 64 73 20 64 65 0a 09 20 20 20 20 66 6f  p) ds de..    fo
83b0: 72 20 7b 73 65 74 20 6c 6f 63 20 24 64 73 7d 20  r {set loc $ds} 
83c0: 7b 24 6c 6f 63 20 3c 3d 20 24 64 65 7d 20 7b 69  {$loc <= $de} {i
83d0: 6e 63 72 20 6c 6f 63 7d 20 7b 0a 09 09 69 6e 63  ncr loc} {...inc
83e0: 72 20 63 72 6f 73 73 28 24 6c 6f 63 29 20 2d 31  r cross($loc) -1
83f0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 75 6e 73  ..    }..    uns
8400: 65 74 20 64 65 70 63 28 24 64 65 70 29 0a 0a 09  et depc($dep)...
8410: 20 20 20 20 69 66 20 7b 21 24 73 69 78 7d 20 63      if {!$six} c
8420: 6f 6e 74 69 6e 75 65 0a 0a 09 20 20 20 20 73 74  ontinue...    st
8430: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67  ruct::list assig
8440: 6e 20 24 64 65 70 20 70 61 72 65 6e 74 20 63 68  n $dep parent ch
8450: 69 6c 64 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  ild..    log wri
8460: 74 65 20 35 20 63 73 65 74 73 20 22 42 72 6f 6b  te 5 csets "Brok
8470: 65 20 64 65 70 65 6e 64 65 6e 63 79 20 5b 50 44  e dependency [PD
8480: 20 24 70 61 72 65 6e 74 5d 20 2d 2d 3e 20 5b 50   $parent] --> [P
8490: 44 20 24 63 68 69 6c 64 5d 22 0a 09 7d 0a 0a 09  D $child]"..}...
84a0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
84b0: 20 20 23 20 50 72 69 6e 74 20 69 64 65 6e 74 69    # Print identi
84c0: 66 79 69 6e 67 20 64 61 74 61 20 66 6f 72 20 61  fying data for a
84d0: 20 72 65 76 69 73 69 6f 6e 20 28 70 72 6f 6a 65   revision (proje
84e0: 63 74 2c 20 66 69 6c 65 2c 20 64 6f 74 74 65 64  ct, file, dotted
84f0: 20 72 65 76 0a 20 20 20 20 23 20 6e 75 6d 62 65   rev.    # numbe
8500: 72 29 2c 20 66 6f 72 20 68 69 67 68 20 76 65 72  r), for high ver
8510: 62 6f 73 69 74 79 20 6c 6f 67 20 6f 75 74 70 75  bosity log outpu
8520: 74 2e 0a 20 20 20 20 23 20 54 4f 44 4f 3a 20 52  t..    # TODO: R
8530: 65 70 6c 61 63 65 20 77 69 74 68 20 63 61 6c 6c  eplace with call
8540: 20 74 6f 20 69 74 65 6d 73 74 72 20 28 6c 69 73   to itemstr (lis
8550: 74 20 72 65 76 20 24 69 64 29 0a 0a 20 20 20 20  t rev $id)..    
8560: 70 72 6f 63 20 50 44 20 7b 69 64 7d 20 7b 0a 09  proc PD {id} {..
8570: 66 6f 72 65 61 63 68 20 7b 70 20 66 20 72 7d 20  foreach {p f r} 
8580: 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 53  [state run {...S
8590: 45 4c 45 43 54 20 50 2e 6e 61 6d 65 20 2c 20 46  ELECT P.name , F
85a0: 2e 6e 61 6d 65 2c 20 52 2e 72 65 76 0a 09 09 46  .name, R.rev...F
85b0: 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20 52 2c 20  ROM revision R, 
85c0: 66 69 6c 65 20 46 2c 20 70 72 6f 6a 65 63 74 20  file F, project 
85d0: 50 0a 09 09 57 48 45 52 45 20 52 2e 72 69 64 20  P...WHERE R.rid 
85e0: 3d 20 24 69 64 20 20 20 20 2d 2d 20 46 69 6e 64  = $id    -- Find
85f0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20   specified file 
8600: 72 65 76 69 73 69 6f 6e 0a 09 09 41 4e 44 20 20  revision...AND  
8610: 20 46 2e 66 69 64 20 3d 20 52 2e 66 69 64 20 20   F.fid = R.fid  
8620: 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 20 74  -- Get file of t
8630: 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 09 41 4e  he revision...AN
8640: 44 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70 69  D   P.pid = F.pi
8650: 64 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65 63  d  -- Get projec
8660: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 2e 0a 09  t of the file...
8670: 7d 5d 20 62 72 65 61 6b 0a 09 72 65 74 75 72 6e  }] break..return
8680: 20 22 27 24 70 20 3a 20 24 66 2f 24 72 27 22 0a   "'$p : $f/$r'".
8690: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 50 72 69      }..    # Pri
86a0: 6e 74 69 6e 67 20 6f 6e 65 20 6f 72 20 6d 6f 72  nting one or mor
86b0: 65 20 72 61 6e 67 65 73 2c 20 66 6f 72 6d 61 74  e ranges, format
86c0: 74 65 64 2c 20 61 6e 64 20 6f 6e 6c 79 20 74 68  ted, and only th
86d0: 65 69 72 20 62 6f 72 64 65 72 20 74 6f 0a 20 20  eir border to.  
86e0: 20 20 23 20 6b 65 65 70 20 74 68 65 20 73 74 72    # keep the str
86f0: 69 6e 67 73 20 73 68 6f 72 74 2e 0a 0a 20 20 20  ings short...   
8700: 20 70 72 6f 63 20 50 52 73 20 7b 72 61 6e 67 65   proc PRs {range
8710: 73 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 73 74  s} {..return [st
8720: 72 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 24  ruct::list map $
8730: 72 61 6e 67 65 73 20 5b 6d 79 70 72 6f 63 20 50  ranges [myproc P
8740: 52 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  R]].    }..    p
8750: 72 6f 63 20 50 52 20 7b 72 61 6e 67 65 7d 20 7b  roc PR {range} {
8760: 0a 09 42 6f 72 64 65 72 20 24 72 61 6e 67 65 20  ..Border $range 
8770: 73 20 65 0a 09 72 65 74 75 72 6e 20 3c 24 7b 73  s e..return <${s
8780: 7d 2e 2e 2e 24 7b 65 7d 3e 0a 20 20 20 20 7d 0a  }...${e}>.    }.
8790: 0a 20 20 20 20 70 72 6f 63 20 42 6f 72 64 65 72  .    proc Border
87a0: 20 7b 72 61 6e 67 65 20 73 76 20 65 76 7d 20 7b   {range sv ev} {
87b0: 0a 09 75 70 76 61 72 20 31 20 24 73 76 20 73 20  ..upvar 1 $sv s 
87c0: 24 65 76 20 65 0a 09 73 65 74 20 73 20 5b 6c 69  $ev e..set s [li
87d0: 6e 64 65 78 20 24 72 61 6e 67 65 20 30 5d 0a 09  ndex $range 0]..
87e0: 73 65 74 20 65 20 5b 6c 69 6e 64 65 78 20 24 72  set e [lindex $r
87f0: 61 6e 67 65 20 65 6e 64 5d 0a 09 72 65 74 75 72  ange end]..retur
8800: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23  n.    }..    # #
8810: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
8820: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
8830: 23 23 23 23 0a 0a 20 20 20 20 70 72 6f 63 20 55  ####..    proc U
8840: 6e 6d 61 70 49 74 65 6d 73 20 7b 74 68 65 74 79  nmapItems {thety
8850: 70 65 20 74 68 65 69 74 65 6d 73 7d 20 7b 0a 09  pe theitems} {..
8860: 23 20 28 2a 29 20 57 65 20 63 6c 65 61 72 20 6f  # (*) We clear o
8870: 75 74 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  ut the associate
8880: 64 20 70 61 72 74 20 6f 66 20 74 68 65 20 6d 79  d part of the my
8890: 69 74 65 6d 6d 61 70 0a 09 23 20 69 6e 2d 6d 65  itemmap..# in-me
88a0: 6d 6f 72 79 20 69 6e 64 65 78 20 69 6e 20 70 72  mory index in pr
88b0: 65 70 61 72 61 74 69 6f 6e 20 66 6f 72 20 6e 65  eparation for ne
88c0: 77 20 64 61 74 61 2c 20 6f 72 20 61 73 20 70 61  w data, or as pa
88d0: 72 74 20 6f 66 0a 09 23 20 6f 62 6a 65 63 74 20  rt of..# object 
88e0: 64 65 73 74 72 75 63 74 69 6f 6e 2e 20 41 20 73  destruction. A s
88f0: 69 6d 70 6c 65 20 75 6e 73 65 74 20 69 73 20 65  imple unset is e
8900: 6e 6f 75 67 68 2c 20 77 65 20 68 61 76 65 20 6e  nough, we have n
8910: 6f 0a 09 23 20 73 79 6d 62 6f 6c 20 63 68 61 6e  o..# symbol chan
8920: 67 65 73 65 74 73 20 61 74 20 74 68 69 73 20 74  gesets at this t
8930: 69 6d 65 2c 20 61 6e 64 20 74 68 75 73 20 6e 65  ime, and thus ne
8940: 76 65 72 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  ver more than on
8950: 65 0a 09 23 20 72 65 66 65 72 65 6e 63 65 20 69  e..# reference i
8960: 6e 20 74 68 65 20 6c 69 73 74 2e 0a 0a 09 75 70  n the list....up
8970: 76 61 72 20 31 20 6d 79 69 74 65 6d 6d 61 70 20  var 1 myitemmap 
8980: 6d 79 69 74 65 6d 6d 61 70 20 73 65 6c 66 20 73  myitemmap self s
8990: 65 6c 66 0a 09 66 6f 72 65 61 63 68 20 69 69 64  elf..foreach iid
89a0: 20 24 74 68 65 69 74 65 6d 73 20 7b 0a 09 20 20   $theitems {..  
89b0: 20 20 73 65 74 20 6b 65 79 20 5b 6c 69 73 74 20    set key [list 
89c0: 24 74 68 65 74 79 70 65 20 24 69 69 64 5d 0a 09  $thetype $iid]..
89d0: 20 20 20 20 75 6e 73 65 74 20 6d 79 69 74 65 6d      unset myitem
89e0: 6d 61 70 28 24 6b 65 79 29 0a 09 20 20 20 20 6c  map($key)..    l
89f0: 6f 67 20 77 72 69 74 65 20 38 20 63 73 65 74 73  og write 8 csets
8a00: 20 7b 4d 41 50 2d 20 69 74 65 6d 20 3c 24 6b 65   {MAP- item <$ke
8a10: 79 3e 20 24 73 65 6c 66 20 3d 20 5b 24 73 65 6c  y> $self = [$sel
8a20: 66 20 73 74 72 5d 7d 0a 09 7d 0a 09 72 65 74 75  f str]}..}..retu
8a30: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  rn.    }..    pr
8a40: 6f 63 20 4d 61 70 49 74 65 6d 73 20 7b 74 68 65  oc MapItems {the
8a50: 74 79 70 65 20 74 68 65 69 74 65 6d 73 7d 20 7b  type theitems} {
8a60: 0a 09 75 70 76 61 72 20 31 20 6d 79 69 74 65 6d  ..upvar 1 myitem
8a70: 6d 61 70 20 6d 79 69 74 65 6d 6d 61 70 20 73 65  map myitemmap se
8a80: 6c 66 20 73 65 6c 66 0a 0a 09 66 6f 72 65 61 63  lf self...foreac
8a90: 68 20 69 69 64 20 24 74 68 65 69 74 65 6d 73 20  h iid $theitems 
8aa0: 7b 0a 09 20 20 20 20 73 65 74 20 6b 65 79 20 5b  {..    set key [
8ab0: 6c 69 73 74 20 24 74 68 65 74 79 70 65 20 24 69  list $thetype $i
8ac0: 69 64 5d 0a 09 20 20 20 20 73 65 74 20 6d 79 69  id]..    set myi
8ad0: 74 65 6d 6d 61 70 28 24 6b 65 79 29 20 24 73 65  temmap($key) $se
8ae0: 6c 66 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  lf..    log writ
8af0: 65 20 38 20 63 73 65 74 73 20 7b 4d 41 50 2b 20  e 8 csets {MAP+ 
8b00: 69 74 65 6d 20 3c 24 6b 65 79 3e 20 24 73 65 6c  item <$key> $sel
8b10: 66 20 3d 20 5b 24 73 65 6c 66 20 73 74 72 5d 7d  f = [$self str]}
8b20: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
8b30: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  }..    # # ## ##
8b40: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
8b50: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a   #############..
8b60: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65      typevariable
8b70: 20 6d 79 63 68 61 6e 67 65 73 65 74 73 20 20 20   mychangesets   
8b80: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73        {} ; # Lis
8b90: 74 20 6f 66 20 61 6c 6c 20 6b 6e 6f 77 6e 0a 09  t of all known..
8ba0: 09 09 09 09 20 20 20 23 20 63 68 61 6e 67 65 73  ....   # changes
8bb0: 65 74 73 2e 0a 0a 20 20 20 20 23 20 4c 69 73 74  ets...    # List
8bc0: 20 6f 66 20 61 6c 6c 20 6b 6e 6f 77 6e 20 63 68   of all known ch
8bd0: 61 6e 67 65 73 65 74 73 20 6f 66 20 61 20 74 79  angesets of a ty
8be0: 70 65 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69  pe..    typevari
8bf0: 61 62 6c 65 20 6d 79 74 63 68 61 6e 67 65 73 65  able mytchangese
8c00: 74 73 20 2d 61 72 72 61 79 20 7b 0a 09 73 79 6d  ts -array {..sym
8c10: 3a 3a 62 72 61 6e 63 68 20 7b 7d 0a 09 73 79 6d  ::branch {}..sym
8c20: 3a 3a 74 61 67 20 20 20 20 7b 7d 0a 09 72 65 76  ::tag    {}..rev
8c30: 20 20 20 20 20 20 20 20 20 7b 7d 0a 20 20 20 20           {}.    
8c40: 7d 0a 09 09 09 09 09 0a 20 20 20 20 74 79 70 65  }.......    type
8c50: 76 61 72 69 61 62 6c 65 20 6d 79 69 74 65 6d 6d  variable myitemm
8c60: 61 70 20 20 20 20 20 2d 61 72 72 61 79 20 7b 7d  ap     -array {}
8c70: 20 3b 20 23 20 4d 61 70 20 66 72 6f 6d 20 69 74   ; # Map from it
8c80: 65 6d 73 20 28 74 61 67 67 65 64 29 0a 09 09 09  ems (tagged)....
8c90: 09 09 20 20 20 23 20 74 6f 20 74 68 65 20 6c 69  ..   # to the li
8ca0: 73 74 20 6f 66 20 63 68 61 6e 67 65 73 65 74 73  st of changesets
8cb0: 0a 09 09 09 09 09 20 20 20 23 20 63 6f 6e 74 61  ......   # conta
8cc0: 69 6e 69 6e 67 20 69 74 2e 20 45 61 63 68 20 69  ining it. Each i
8cd0: 74 65 6d 0a 09 09 09 09 09 20 20 20 23 20 63 61  tem......   # ca
8ce0: 6e 20 62 65 20 75 73 65 64 20 62 79 20 6f 6e 6c  n be used by onl
8cf0: 79 20 6f 6e 65 0a 09 09 09 09 09 20 20 20 23 20  y one......   # 
8d00: 63 68 61 6e 67 65 73 65 74 2e 0a 20 20 20 20 74  changeset..    t
8d10: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 69 64  ypevariable myid
8d20: 6d 61 70 20 20 20 2d 61 72 72 61 79 20 7b 7d 20  map   -array {} 
8d30: 3b 20 23 20 4d 61 70 20 66 72 6f 6d 20 63 68 61  ; # Map from cha
8d40: 6e 67 65 73 65 74 20 69 64 20 74 6f 0a 09 09 09  ngeset id to....
8d50: 09 20 20 20 20 20 20 20 23 20 63 68 61 6e 67 65  .       # change
8d60: 73 65 74 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65  set...    typeme
8d70: 74 68 6f 64 20 61 6c 6c 20 20 20 20 7b 7d 20 20  thod all    {}  
8d80: 20 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 63 68    { return $mych
8d90: 61 6e 67 65 73 65 74 73 20 7d 0a 20 20 20 20 74  angesets }.    t
8da0: 79 70 65 6d 65 74 68 6f 64 20 6f 66 20 20 20 20  ypemethod of    
8db0: 20 7b 63 69 64 7d 20 7b 20 72 65 74 75 72 6e 20   {cid} { return 
8dc0: 24 6d 79 69 64 6d 61 70 28 24 63 69 64 29 20 7d  $myidmap($cid) }
8dd0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
8de0: 6f 66 69 74 65 6d 20 7b 69 69 64 7d 20 7b 20 72  ofitem {iid} { r
8df0: 65 74 75 72 6e 20 24 6d 79 69 74 65 6d 6d 61 70  eturn $myitemmap
8e00: 28 24 69 69 64 29 20 7d 0a 0a 20 20 20 20 74 79  ($iid) }..    ty
8e10: 70 65 6d 65 74 68 6f 64 20 72 65 76 20 20 20 20  pemethod rev    
8e20: 7b 7d 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24  {}    { return $
8e30: 6d 79 74 63 68 61 6e 67 65 73 65 74 73 28 72 65  mytchangesets(re
8e40: 76 29 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74  v) }.    typemet
8e50: 68 6f 64 20 73 79 6d 20 20 20 20 7b 7d 20 20 20  hod sym    {}   
8e60: 20 7b 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63 61   { return [conca
8e70: 74 20 5c 0a 09 09 09 09 09 20 20 24 7b 6d 79 74  t \......  ${myt
8e80: 63 68 61 6e 67 65 73 65 74 73 28 73 79 6d 3a 3a  changesets(sym::
8e90: 62 72 61 6e 63 68 29 7d 20 5c 0a 09 09 09 09 09  branch)} \......
8ea0: 20 20 24 7b 6d 79 74 63 68 61 6e 67 65 73 65 74    ${mytchangeset
8eb0: 73 28 73 79 6d 3a 3a 74 61 67 29 7d 5d 20 7d 0a  s(sym::tag)}] }.
8ec0: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
8ed0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
8ee0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
8ef0: 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f   ## Configuratio
8f00: 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68  n..    pragma -h
8f10: 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f  astypeinfo    no
8f20: 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 6e    ; # no type in
8f30: 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20  trospection.    
8f40: 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20  pragma -hasinfo 
8f50: 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e         no  ; # n
8f60: 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70  o object introsp
8f70: 65 63 74 69 6f 6e 0a 0a 20 20 20 20 23 20 23 20  ection..    # # 
8f80: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
8f90: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
8fa0: 23 23 23 0a 7d 0a 0a 23 23 0a 23 23 20 4e 4f 54  ###.}..##.## NOT
8fb0: 45 3a 20 54 68 65 20 73 75 63 63 65 73 73 6f 72  E: The successor
8fc0: 20 61 6e 64 20 70 72 65 64 65 63 65 73 73 6f 72   and predecessor
8fd0: 20 6d 65 74 68 6f 64 73 20 64 65 66 69 6e 65 64   methods defined
8fe0: 20 62 79 20 74 68 65 20 63 6c 61 73 73 65 73 0a   by the classes.
8ff0: 23 23 20 20 20 20 20 20 20 62 65 6c 6f 77 20 61  ##       below a
9000: 72 65 20 2d 2d 20 62 6f 74 74 6c 65 20 6e 65 63  re -- bottle nec
9010: 6b 73 20 2d 2d 2e 20 4c 6f 6f 6b 20 66 6f 72 20  ks --. Look for 
9020: 77 61 79 73 20 74 6f 20 6d 61 6b 65 20 74 68 65  ways to make the
9030: 20 53 51 4c 0a 23 23 20 20 20 20 20 20 20 66 61   SQL.##       fa
9040: 73 74 65 72 2e 0a 23 23 0a 0a 23 20 23 20 23 23  ster..##..# # ##
9050: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
9060: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
9070: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
9080: 23 23 23 23 23 23 23 0a 23 23 20 48 65 6c 70 65  #######.## Helpe
9090: 72 20 73 69 6e 67 6c 65 74 6f 6e 2e 20 43 6f 6d  r singleton. Com
90a0: 6d 61 6e 64 73 20 66 6f 72 20 72 65 76 69 73 69  mands for revisi
90b0: 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a  on changesets...
90c0: 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a  snit::type ::vc:
90d0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
90e0: 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72  :cvs::project::r
90f0: 65 76 3a 3a 72 65 76 20 7b 0a 20 20 20 20 74 79  ev::rev {.    ty
9100: 70 65 6d 65 74 68 6f 64 20 62 79 72 65 76 69 73  pemethod byrevis
9110: 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  ion {} { return 
9120: 31 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68  1 }.    typemeth
9130: 6f 64 20 62 79 73 79 6d 62 6f 6c 20 20 20 7b 7d  od bysymbol   {}
9140: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20   { return 0 }.  
9150: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74    typemethod ist
9160: 61 67 20 20 20 20 20 20 7b 7d 20 7b 20 72 65 74  ag      {} { ret
9170: 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79 70 65  urn 0 }.    type
9180: 6d 65 74 68 6f 64 20 69 73 62 72 61 6e 63 68 20  method isbranch 
9190: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 30 20    {} { return 0 
91a0: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f  }..    typemetho
91b0: 64 20 73 74 72 20 7b 72 65 76 69 73 69 6f 6e 7d  d str {revision}
91c0: 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74   {..struct::list
91d0: 20 61 73 73 69 67 6e 20 5b 73 74 61 74 65 20 72   assign [state r
91e0: 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54  un {..    SELECT
91f0: 20 52 2e 72 65 76 2c 20 46 2e 6e 61 6d 65 2c 20   R.rev, F.name, 
9200: 50 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d  P.name..    FROM
9210: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 66     revision R, f
9220: 69 6c 65 20 46 2c 20 70 72 6f 6a 65 63 74 20 50  ile F, project P
9230: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 72  ..    WHERE  R.r
9240: 69 64 20 3d 20 24 72 65 76 69 73 69 6f 6e 20 2d  id = $revision -
9250: 2d 20 46 69 6e 64 20 73 70 65 63 69 66 69 65 64  - Find specified
9260: 20 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 0a 09   file revision..
9270: 20 20 20 20 41 4e 44 20 20 20 20 46 2e 66 69 64      AND    F.fid
9280: 20 3d 20 52 2e 66 69 64 20 20 20 20 20 2d 2d 20   = R.fid     -- 
9290: 47 65 74 20 66 69 6c 65 20 6f 66 20 74 68 65 20  Get file of the 
92a0: 72 65 76 69 73 69 6f 6e 0a 09 20 20 20 20 41 4e  revision..    AN
92b0: 44 20 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70  D    P.pid = F.p
92c0: 69 64 20 20 20 20 20 2d 2d 20 47 65 74 20 70 72  id     -- Get pr
92d0: 6f 6a 65 63 74 20 6f 66 20 74 68 65 20 66 69 6c  oject of the fil
92e0: 65 2e 0a 09 7d 5d 20 72 65 76 6e 72 20 66 6e 61  e...}] revnr fna
92f0: 6d 65 20 70 6e 61 6d 65 0a 09 72 65 74 75 72 6e  me pname..return
9300: 20 22 24 70 6e 61 6d 65 2f 24 7b 72 65 76 6e 72   "$pname/${revnr
9310: 7d 3a 3a 24 66 6e 61 6d 65 22 0a 20 20 20 20 7d  }::$fname".    }
9320: 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d  ..    # result =
9330: 20 6c 69 73 74 20 28 6d 69 6e 74 69 6d 65 2c 20   list (mintime, 
9340: 6d 61 78 74 69 6d 65 29 0a 20 20 20 20 74 79 70  maxtime).    typ
9350: 65 6d 65 74 68 6f 64 20 74 69 6d 65 72 61 6e 67  emethod timerang
9360: 65 20 7b 69 74 65 6d 73 7d 20 7b 0a 09 73 65 74  e {items} {..set
9370: 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20   theset ('[join 
9380: 24 69 74 65 6d 73 20 7b 27 2c 27 7d 5d 27 29 0a  $items {','}]').
9390: 09 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72  .return [state r
93a0: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d  un [subst -nocom
93b0: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61  mands -nobacksla
93c0: 73 68 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45  shes {..    SELE
93d0: 43 54 20 4d 49 4e 28 52 2e 64 61 74 65 29 2c 20  CT MIN(R.date), 
93e0: 4d 41 58 28 52 2e 64 61 74 65 29 0a 09 20 20 20  MAX(R.date)..   
93f0: 20 46 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20 52   FROM revision R
9400: 0a 09 20 20 20 20 57 48 45 52 45 20 52 2e 72 69  ..    WHERE R.ri
9410: 64 20 49 4e 20 24 74 68 65 73 65 74 20 2d 2d 20  d IN $theset -- 
9420: 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69  Restrict to revi
9430: 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73  sions of interes
9440: 74 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20  t..}]].    }..  
9450: 20 20 23 20 76 61 72 28 64 76 29 20 3d 20 64 69    # var(dv) = di
9460: 63 74 20 28 72 65 76 69 73 69 6f 6e 20 2d 3e 20  ct (revision -> 
9470: 6c 69 73 74 20 28 72 65 76 69 73 69 6f 6e 29 29  list (revision))
9480: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
9490: 69 6e 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f  internalsuccesso
94a0: 72 73 20 7b 64 76 20 72 65 76 69 73 69 6f 6e 73  rs {dv revisions
94b0: 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24 64 76  } {..upvar 1 $dv
94c0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 73   dependencies..s
94d0: 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a 6f 69  et theset ('[joi
94e0: 6e 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 27 2c  n $revisions {',
94f0: 27 7d 5d 27 29 0a 0a 09 6c 6f 67 20 77 72 69 74  '}]')...log writ
9500: 65 20 31 34 20 63 73 65 74 73 20 69 6e 74 65 72  e 14 csets inter
9510: 6e 61 6c 73 75 63 63 65 73 73 6f 72 73 0a 0a 09  nalsuccessors...
9520: 23 20 53 65 65 20 27 73 75 63 63 65 73 73 6f 72  # See 'successor
9530: 73 27 20 62 65 6c 6f 77 20 66 6f 72 20 74 68 65  s' below for the
9540: 20 6d 61 69 6e 20 65 78 70 6c 61 6e 61 74 69 6f   main explanatio
9550: 6e 20 6f 66 0a 09 23 20 74 68 65 20 76 61 72 69  n of..# the vari
9560: 6f 75 73 20 63 61 73 65 73 2e 20 54 68 69 73 20  ous cases. This 
9570: 70 69 65 63 65 20 69 73 20 73 70 65 63 69 61 6c  piece is special
9580: 20 69 6e 20 74 68 61 74 20 69 74 0a 09 23 20 72   in that it..# r
9590: 65 73 74 72 69 63 74 73 20 74 68 65 20 73 75 63  estricts the suc
95a0: 63 65 73 73 6f 72 73 20 77 65 20 6c 6f 6f 6b 20  cessors we look 
95b0: 66 6f 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20  for to the same 
95c0: 73 65 74 20 6f 66 0a 09 23 20 72 65 76 69 73 69  set of..# revisi
95d0: 6f 6e 73 20 77 65 20 73 74 61 72 74 20 66 72 6f  ons we start fro
95e0: 6d 2e 20 53 65 6e 73 69 62 6c 65 20 61 73 20 77  m. Sensible as w
95f0: 65 20 61 72 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f  e are looking fo
9600: 72 0a 09 23 20 63 68 61 6e 67 65 73 65 74 20 69  r..# changeset i
9610: 6e 74 65 72 6e 61 6c 20 64 65 70 65 6e 64 65 6e  nternal dependen
9620: 63 69 65 73 2e 0a 0a 09 61 72 72 61 79 20 73 65  cies....array se
9630: 74 20 64 65 70 20 7b 7d 0a 0a 09 73 74 61 74 65  t dep {}...state
9640: 20 66 6f 72 65 61 63 68 72 6f 77 20 5b 73 75 62   foreachrow [sub
9650: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d  st -nocommands -
9660: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a  nobackslashes {.
9670: 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d 61      -- (1) Prima
9680: 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53 45  ry child..    SE
9690: 4c 45 43 54 20 52 2e 72 69 64 20 41 53 20 78 72  LECT R.rid AS xr
96a0: 69 64 2c 20 52 2e 63 68 69 6c 64 20 41 53 20 78  id, R.child AS x
96b0: 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20  child..    FROM 
96c0: 20 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20    revision R..  
96d0: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20    WHERE  R.rid  
96e0: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20   IN $theset     
96f0: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72  -- Restrict to r
9700: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65  evisions of inte
9710: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20  rest..    AND   
9720: 20 52 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20   R.child IS NOT 
9730: 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70  NULL    -- Has p
9740: 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20  rimary child..  
9750: 20 20 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64    AND    R.child
9760: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20   IN $theset     
9770: 2d 2d 20 57 68 69 63 68 20 69 73 20 61 6c 73 6f  -- Which is also
9780: 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 20 20 20   of interest.   
9790: 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 32   UNION.    -- (2
97a0: 29 20 53 65 63 6f 6e 64 61 72 79 20 28 62 72 61  ) Secondary (bra
97b0: 6e 63 68 29 20 63 68 69 6c 64 72 65 6e 0a 09 20  nch) children.. 
97c0: 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 20     SELECT R.rid 
97d0: 41 53 20 78 72 69 64 2c 20 42 2e 62 72 69 64 20  AS xrid, B.brid 
97e0: 41 53 20 78 63 68 69 6c 64 0a 09 20 20 20 20 46  AS xchild..    F
97f0: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52  ROM   revision R
9800: 2c 20 72 65 76 69 73 69 6f 6e 62 72 61 6e 63 68  , revisionbranch
9810: 63 68 69 6c 64 72 65 6e 20 42 0a 09 20 20 20 20  children B..    
9820: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49  WHERE  R.rid   I
9830: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d  N $theset     --
9840: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76   Restrict to rev
9850: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65  isions of intere
9860: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52  st..    AND    R
9870: 2e 72 69 64 20 3d 20 42 2e 72 69 64 20 20 20 20  .rid = B.rid    
9880: 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20        -- Select 
9890: 73 75 62 73 65 74 20 6f 66 20 62 72 61 6e 63 68  subset of branch
98a0: 20 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 41   children..    A
98b0: 4e 44 20 20 20 20 42 2e 62 72 69 64 20 49 4e 20  ND    B.brid IN 
98c0: 24 74 68 65 73 65 74 20 20 20 20 20 20 2d 2d 20  $theset      -- 
98d0: 57 68 69 63 68 20 69 73 20 61 6c 73 6f 20 6f 66  Which is also of
98e0: 20 69 6e 74 65 72 65 73 74 0a 20 20 20 20 55 4e   interest.    UN
98f0: 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 34 29 20 43  ION.    -- (4) C
9900: 68 69 6c 64 20 6f 66 20 74 72 75 6e 6b 20 72 6f  hild of trunk ro
9910: 6f 74 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20  ot successor of 
9920: 6c 61 73 74 20 4e 54 44 42 20 6f 6e 20 74 72 75  last NTDB on tru
9930: 6e 6b 2e 0a 09 20 20 20 20 53 45 4c 45 43 54 20  nk...    SELECT 
9940: 52 2e 72 69 64 20 41 53 20 78 72 69 64 2c 20 52  R.rid AS xrid, R
9950: 41 2e 63 68 69 6c 64 20 41 53 20 78 63 68 69 6c  A.child AS xchil
9960: 64 0a 09 20 20 20 20 46 52 4f 4d 20 72 65 76 69  d..    FROM revi
9970: 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e  sion R, revision
9980: 20 52 41 0a 09 20 20 20 20 57 48 45 52 45 20 52   RA..    WHERE R
9990: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65  .rid   IN $these
99a0: 74 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69  t      -- Restri
99b0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20  ct to revisions 
99c0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20  of interest..   
99d0: 20 41 4e 44 20 20 20 52 2e 69 73 64 65 66 61 75   AND   R.isdefau
99e0: 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d  lt             -
99f0: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 4e 54  - Restrict to NT
9a00: 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 52 2e  DB..    AND   R.
9a10: 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e  dbchild IS NOT N
9a20: 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c 61 73  ULL   -- and las
9a30: 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 6e 67  t NTDB belonging
9a40: 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 20 41   to trunk..    A
9a50: 4e 44 20 20 20 52 41 2e 72 69 64 20 3d 20 52 2e  ND   RA.rid = R.
9a60: 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d 2d 20  dbchild      -- 
9a70: 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74  Go directly to t
9a80: 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20 20 41  runk root..    A
9a90: 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20 49 53  ND   RA.child IS
9aa0: 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d 20   NOT NULL    -- 
9ab0: 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69 6c  Has primary chil
9ac0: 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  d..            A
9ad0: 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20 49 4e  ND   RA.child IN
9ae0: 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20   $theset     -- 
9af0: 57 68 69 63 68 20 69 73 20 61 6c 73 6f 20 6f 66  Which is also of
9b00: 20 69 6e 74 65 72 65 73 74 0a 09 7d 5d 20 7b 0a   interest..}] {.
9b10: 09 20 20 20 20 23 20 43 6f 6e 73 69 64 65 72 20  .    # Consider 
9b20: 6d 6f 76 69 6e 67 20 74 68 69 73 20 74 6f 20 74  moving this to t
9b30: 68 65 20 69 6e 74 65 67 72 69 74 79 20 6d 6f 64  he integrity mod
9b40: 75 6c 65 2e 0a 09 20 20 20 20 69 6e 74 65 67 72  ule...    integr
9b50: 69 74 79 20 61 73 73 65 72 74 20 7b 24 78 72 69  ity assert {$xri
9b60: 64 20 21 3d 20 24 78 63 68 69 6c 64 7d 20 7b 52  d != $xchild} {R
9b70: 65 76 69 73 69 6f 6e 20 24 78 72 69 64 20 64 65  evision $xrid de
9b80: 70 65 6e 64 73 20 6f 6e 20 69 74 73 65 6c 66 2e  pends on itself.
9b90: 7d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64  }..    lappend d
9ba0: 65 70 65 6e 64 65 6e 63 69 65 73 28 24 78 72 69  ependencies($xri
9bb0: 64 29 20 24 78 63 68 69 6c 64 0a 09 20 20 20 20  d) $xchild..    
9bc0: 73 65 74 20 64 65 70 28 24 78 72 69 64 2c 24 78  set dep($xrid,$x
9bd0: 63 68 69 6c 64 29 20 2e 0a 09 7d 0a 0a 09 23 20  child) ...}...# 
9be0: 54 68 65 20 73 71 6c 20 73 74 61 74 65 6d 65 6e  The sql statemen
9bf0: 74 73 20 61 62 6f 76 65 20 6c 6f 6f 6b 73 20 6f  ts above looks o
9c00: 6e 6c 79 20 66 6f 72 20 64 69 72 65 63 74 20 64  nly for direct d
9c10: 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 23 20 62  ependencies..# b
9c20: 65 74 77 65 65 6e 20 72 65 76 69 73 69 6f 6e 20  etween revision 
9c30: 69 6e 20 74 68 65 20 63 68 61 6e 67 65 73 65 74  in the changeset
9c40: 2e 20 48 6f 77 65 76 65 72 20 64 75 65 20 74 6f  . However due to
9c50: 20 74 68 65 0a 09 23 20 76 61 67 61 72 69 65 73   the..# vagaries
9c60: 20 6f 66 20 6d 65 74 61 20 64 61 74 61 20 69 74   of meta data it
9c70: 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72   is possible for
9c80: 20 74 77 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f   two revisions o
9c90: 66 0a 09 23 20 74 68 65 20 73 61 6d 65 20 66 69  f..# the same fi
9ca0: 6c 65 20 74 6f 20 65 6e 64 20 75 70 20 69 6e 20  le to end up in 
9cb0: 74 68 65 20 73 61 6d 65 20 63 68 61 6e 67 65 73  the same changes
9cc0: 65 74 2c 20 77 69 74 68 6f 75 74 20 61 0a 09 23  et, without a..#
9cd0: 20 64 69 72 65 63 74 20 64 65 70 65 6e 64 65 6e   direct dependen
9ce0: 63 79 20 62 65 74 77 65 65 6e 20 74 68 65 6d 2e  cy between them.
9cf0: 20 48 6f 77 65 76 65 72 20 77 65 20 6b 6e 6f 77   However we know
9d00: 20 74 68 61 74 20 74 68 65 72 65 0a 09 23 20 68   that there..# h
9d10: 61 73 20 74 6f 20 62 65 20 61 20 61 6e 20 69 6e  as to be a an in
9d20: 64 69 72 65 63 74 20 64 65 70 65 6e 64 65 6e 63  direct dependenc
9d30: 79 2c 20 62 65 20 69 74 20 74 68 72 6f 75 67 68  y, be it through
9d40: 20 70 72 69 6d 61 72 79 0a 09 23 20 63 68 69 6c   primary..# chil
9d50: 64 72 65 6e 2c 20 62 72 61 6e 63 68 20 63 68 69  dren, branch chi
9d60: 6c 64 72 65 6e 2c 20 6f 72 20 61 20 63 6f 6d 62  ldren, or a comb
9d70: 69 6e 61 74 69 6f 6e 20 74 68 65 72 65 6f 66 2e  ination thereof.
9d80: 0a 0a 09 23 20 57 65 20 6e 6f 77 20 66 69 6c 6c  ...# We now fill
9d90: 20 69 6e 20 74 68 65 73 65 20 70 73 65 75 64 6f   in these pseudo
9da0: 2d 64 65 70 65 6e 64 65 6e 63 69 65 73 2c 20 69  -dependencies, i
9db0: 66 20 6e 6f 20 73 75 63 68 0a 09 23 20 64 65 70  f no such..# dep
9dc0: 65 6e 64 65 6e 63 79 20 65 78 69 73 74 73 20 61  endency exists a
9dd0: 6c 72 65 61 64 79 2e 20 54 68 65 20 64 69 72 65  lready. The dire
9de0: 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 64 65 70  ction of the dep
9df0: 65 6e 64 65 6e 63 79 0a 09 23 20 69 73 20 61 63  endency..# is ac
9e00: 74 75 61 6c 6c 79 20 69 72 72 65 6c 65 76 61 6e  tually irrelevan
9e10: 74 20 66 6f 72 20 74 68 69 73 2e 0a 0a 09 23 20  t for this....# 
9e20: 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 64 69  NOTE: This is di
9e30: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 63 76 73  fferent from cvs
9e40: 32 73 76 6e 2e 20 4f 75 72 20 73 70 69 72 69 74  2svn. Our spirit
9e50: 75 61 6c 20 61 6e 63 65 73 74 6f 72 0a 09 23 20  ual ancestor..# 
9e60: 64 6f 65 73 20 6e 6f 74 20 75 73 65 20 73 75 63  does not use suc
9e70: 68 20 70 73 65 75 64 6f 2d 64 65 70 65 6e 64 65  h pseudo-depende
9e80: 6e 63 69 65 73 2c 20 68 6f 77 65 76 65 72 20 69  ncies, however i
9e90: 74 20 75 73 65 73 20 61 0a 09 23 20 43 4f 4d 4d  t uses a..# COMM
9ea0: 49 54 5f 54 48 52 45 53 48 4f 4c 44 2c 20 61 20  IT_THRESHOLD, a 
9eb0: 74 69 6d 65 20 69 6e 74 65 72 76 61 6c 20 63 6f  time interval co
9ec0: 6d 6d 69 74 73 20 73 68 6f 75 6c 64 20 66 61 6c  mmits should fal
9ed0: 6c 2e 20 54 68 69 73 0a 09 23 20 77 69 6c 6c 20  l. This..# will 
9ee0: 67 72 65 61 74 6c 79 20 72 65 64 75 63 65 73 20  greatly reduces 
9ef0: 74 68 65 20 72 69 73 6b 20 6f 66 20 67 65 74 74  the risk of gett
9f00: 69 6e 67 20 66 61 72 20 73 65 70 61 72 61 74 65  ing far separate
9f10: 64 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 6f  d..# revisions o
9f20: 66 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 20  f the same file 
9f30: 69 6e 74 6f 20 6f 6e 65 20 63 68 61 6e 67 65 73  into one changes
9f40: 65 74 2e 0a 0a 09 23 20 57 65 20 61 6c 6c 6f 77  et....# We allow
9f50: 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 20 62 65   revisions to be
9f60: 20 66 61 72 20 61 70 61 72 74 20 69 6e 20 74 69   far apart in ti
9f70: 6d 65 20 69 6e 20 74 68 65 20 73 61 6d 65 0a 09  me in the same..
9f80: 23 20 63 68 61 6e 67 65 73 65 74 2c 20 62 75 74  # changeset, but
9f90: 20 69 6e 20 74 75 72 6e 20 6e 65 65 64 20 74 68   in turn need th
9fa0: 65 20 70 73 65 75 64 6f 2d 64 65 70 65 6e 64 65  e pseudo-depende
9fb0: 6e 63 69 65 73 20 74 6f 0a 09 23 20 68 61 6e 64  ncies to..# hand
9fc0: 6c 65 20 74 68 69 73 2e 0a 0a 09 6c 6f 67 20 77  le this....log w
9fd0: 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 69  rite 14 csets {i
9fe0: 6e 74 65 72 6e 61 6c 20 20 5b 61 72 72 61 79 20  nternal  [array 
9ff0: 73 69 7a 65 20 64 65 70 5d 7d 0a 09 6c 6f 67 20  size dep]}..log 
a000: 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b  write 14 csets {
a010: 63 6f 6c 6c 65 63 74 65 64 20 5b 61 72 72 61 79  collected [array
a020: 20 73 69 7a 65 20 64 65 70 65 6e 64 65 6e 63 69   size dependenci
a030: 65 73 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20  es]}..log write 
a040: 31 34 20 63 73 65 74 73 20 70 73 65 75 64 6f 2d  14 csets pseudo-
a050: 69 6e 74 65 72 6e 61 6c 73 75 63 63 65 73 73 6f  internalsuccesso
a060: 72 73 0a 0a 09 61 72 72 61 79 20 73 65 74 20 66  rs...array set f
a070: 69 64 73 20 7b 7d 0a 09 73 74 61 74 65 20 66 6f  ids {}..state fo
a080: 72 65 61 63 68 72 6f 77 20 5b 73 75 62 73 74 20  reachrow [subst 
a090: 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62  -nocommands -nob
a0a0: 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20  ackslashes {..  
a0b0: 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 20 41    SELECT R.rid A
a0c0: 53 20 78 72 69 64 2c 20 52 2e 66 69 64 20 41 53  S xrid, R.fid AS
a0d0: 20 78 66 69 64 0a 20 20 20 20 20 20 20 20 20 20   xfid.          
a0e0: 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f    FROM   revisio
a0f0: 6e 20 52 0a 20 20 20 20 20 20 20 20 20 20 20 20  n R.            
a100: 57 48 45 52 45 20 20 52 2e 72 69 64 20 49 4e 20  WHERE  R.rid IN 
a110: 24 74 68 65 73 65 74 0a 09 7d 5d 20 7b 20 6c 61  $theset..}] { la
a120: 70 70 65 6e 64 20 66 69 64 73 28 24 78 66 69 64  ppend fids($xfid
a130: 29 20 24 78 72 69 64 20 7d 0a 0a 09 73 65 74 20  ) $xrid }...set 
a140: 67 72 6f 75 70 73 20 7b 7d 0a 09 66 6f 72 65 61  groups {}..forea
a150: 63 68 20 7b 66 69 64 20 72 69 64 73 7d 20 5b 61  ch {fid rids} [a
a160: 72 72 61 79 20 67 65 74 20 66 69 64 73 5d 20 7b  rray get fids] {
a170: 0a 09 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  ..    if {[lleng
a180: 74 68 20 24 72 69 64 73 5d 20 3c 20 32 7d 20 63  th $rids] < 2} c
a190: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 66 6f 72  ontinue..    for
a1a0: 65 61 63 68 20 61 20 24 72 69 64 73 20 7b 0a 09  each a $rids {..
a1b0: 09 66 6f 72 65 61 63 68 20 62 20 24 72 69 64 73  .foreach b $rids
a1c0: 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 61 20   {...    if {$a 
a1d0: 3d 3d 20 24 62 7d 20 63 6f 6e 74 69 6e 75 65 0a  == $b} continue.
a1e0: 09 09 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20  ..    if {[info 
a1f0: 65 78 69 73 74 73 20 64 65 70 28 24 61 2c 24 62  exists dep($a,$b
a200: 29 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20  )]} continue... 
a210: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
a220: 73 74 73 20 64 65 70 28 24 62 2c 24 61 29 5d 7d  sts dep($b,$a)]}
a230: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 20 20   continue...    
a240: 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64 65 6e  lappend dependen
a250: 63 69 65 73 28 24 61 29 20 24 62 0a 09 09 20 20  cies($a) $b...  
a260: 20 20 73 65 74 20 64 65 70 28 24 61 2c 24 62 29    set dep($a,$b)
a270: 20 2e 0a 09 09 20 20 20 20 73 65 74 20 64 65 70   ....    set dep
a280: 28 24 62 2c 24 61 29 20 2e 0a 09 09 7d 0a 09 20  ($b,$a) ....}.. 
a290: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 6e 20     }..    set n 
a2a0: 5b 6c 6c 65 6e 67 74 68 20 24 72 69 64 73 5d 0a  [llength $rids].
a2b0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 67 72 6f  .    lappend gro
a2c0: 75 70 73 20 5b 6c 69 73 74 20 24 6e 20 5b 65 78  ups [list $n [ex
a2d0: 70 72 20 7b 28 24 6e 2a 24 6e 2d 24 6e 29 2f 32  pr {($n*$n-$n)/2
a2e0: 7d 5d 5d 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69  }]]..}...log wri
a2f0: 74 65 20 31 34 20 63 73 65 74 73 20 7b 70 73 65  te 14 csets {pse
a300: 75 64 6f 20 20 20 20 5b 61 72 72 61 79 20 73 69  udo    [array si
a310: 7a 65 20 66 69 64 73 5d 20 28 5b 6c 73 6f 72 74  ze fids] ([lsort
a320: 20 2d 69 6e 64 65 78 20 30 20 2d 64 65 63 72 65   -index 0 -decre
a330: 61 73 69 6e 67 20 2d 69 6e 74 65 67 65 72 20 24  asing -integer $
a340: 67 72 6f 75 70 73 5d 29 7d 0a 09 6c 6f 67 20 77  groups])}..log w
a350: 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b 69  rite 14 csets {i
a360: 6e 74 65 72 6e 61 6c 20 20 5b 61 72 72 61 79 20  nternal  [array 
a370: 73 69 7a 65 20 64 65 70 5d 7d 0a 09 6c 6f 67 20  size dep]}..log 
a380: 77 72 69 74 65 20 31 34 20 63 73 65 74 73 20 7b  write 14 csets {
a390: 63 6f 6c 6c 65 63 74 65 64 20 5b 61 72 72 61 79  collected [array
a3a0: 20 73 69 7a 65 20 64 65 70 65 6e 64 65 6e 63 69   size dependenci
a3b0: 65 73 5d 7d 0a 09 6c 6f 67 20 77 72 69 74 65 20  es]}..log write 
a3c0: 31 34 20 63 73 65 74 73 20 63 6f 6d 70 6c 65 74  14 csets complet
a3d0: 65 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  e..return.    }.
a3e0: 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d 20  .    # result = 
a3f0: 34 2d 6c 69 73 74 20 28 69 74 65 6d 74 79 70 65  4-list (itemtype
a400: 20 69 74 65 6d 69 64 20 6e 65 78 74 69 74 65 6d   itemid nextitem
a410: 74 79 70 65 20 6e 65 78 74 69 74 65 6d 69 64 20  type nextitemid 
a420: 2e 2e 2e 29 0a 20 20 20 20 74 79 70 65 6d 65 74  ...).    typemet
a430: 68 6f 64 20 6c 6f 6f 70 73 20 7b 72 65 76 69 73  hod loops {revis
a440: 69 6f 6e 73 7d 20 7b 0a 09 23 20 4e 6f 74 65 3a  ions} {..# Note:
a450: 20 54 61 67 73 20 61 6e 64 20 62 72 61 6e 63 68   Tags and branch
a460: 65 73 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20  es cannot cause 
a470: 74 68 65 20 6c 6f 6f 70 2e 20 54 68 65 69 72 20  the loop. Their 
a480: 69 64 27 73 2c 0a 09 23 20 62 65 69 6e 67 20 6f  id's,..# being o
a490: 66 20 61 20 66 75 6e 64 61 6d 65 6e 74 61 6c 6c  f a fundamentall
a4a0: 79 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  y different type
a4b0: 20 74 68 61 6e 20 74 68 65 20 72 65 76 69 73 69   than the revisi
a4c0: 6f 6e 73 0a 09 23 20 63 6f 6d 69 6e 67 20 69 6e  ons..# coming in
a4d0: 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 74 68   cannot be in th
a4e0: 65 20 73 65 74 2e 0a 0a 09 73 65 74 20 74 68 65  e set....set the
a4f0: 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76  set ('[join $rev
a500: 69 73 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a  isions {','}]').
a510: 09 72 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72  .return [state r
a520: 75 6e 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d  un [subst -nocom
a530: 6d 61 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61  mands -nobacksla
a540: 73 68 65 73 20 7b 0a 09 20 20 20 20 2d 2d 20 28  shes {..    -- (
a550: 31 29 20 50 72 69 6d 61 72 79 20 63 68 69 6c 64  1) Primary child
a560: 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72  ..    SELECT R.r
a570: 69 64 2c 20 52 2e 63 68 69 6c 64 0a 09 20 20 20  id, R.child..   
a580: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e   FROM   revision
a590: 20 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52   R..    WHERE  R
a5a0: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65  .rid   IN $these
a5b0: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63  t     -- Restric
a5c0: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f  t to revisions o
a5d0: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20  f interest..    
a5e0: 41 4e 44 20 20 20 20 52 2e 63 68 69 6c 64 20 49  AND    R.child I
a5f0: 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d 2d  S NOT NULL    --
a600: 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68 69   Has primary chi
a610: 6c 64 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52  ld..    AND    R
a620: 2e 63 68 69 6c 64 20 49 4e 20 24 74 68 65 73 65  .child IN $these
a630: 74 20 20 20 20 20 2d 2d 20 4c 6f 6f 70 0a 09 20  t     -- Loop.. 
a640: 20 20 20 2d 2d 0a 09 20 20 20 20 55 4e 49 4f 4e     --..    UNION
a650: 0a 09 20 20 20 20 2d 2d 20 28 32 29 20 53 65 63  ..    -- (2) Sec
a660: 6f 6e 64 61 72 79 20 28 62 72 61 6e 63 68 29 20  ondary (branch) 
a670: 63 68 69 6c 64 72 65 6e 0a 09 20 20 20 20 53 45  children..    SE
a680: 4c 45 43 54 20 52 2e 72 69 64 2c 20 42 2e 62 72  LECT R.rid, B.br
a690: 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72  id..    FROM   r
a6a0: 65 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73  evision R, revis
a6b0: 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c 64 72 65  ionbranchchildre
a6c0: 6e 20 42 0a 09 20 20 20 20 57 48 45 52 45 20 20  n B..    WHERE  
a6d0: 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73  R.rid   IN $thes
a6e0: 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69  et     -- Restri
a6f0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20  ct to revisions 
a700: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20  of interest..   
a710: 20 41 4e 44 20 20 20 20 52 2e 72 69 64 20 3d 20   AND    R.rid = 
a720: 42 2e 72 69 64 20 20 20 20 20 20 20 20 20 20 2d  B.rid          -
a730: 2d 20 53 65 6c 65 63 74 20 73 75 62 73 65 74 20  - Select subset 
a740: 6f 66 20 62 72 61 6e 63 68 20 63 68 69 6c 64 72  of branch childr
a750: 65 6e 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42  en..    AND    B
a760: 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65 73 65  .rid   IN $these
a770: 74 20 20 20 20 20 2d 2d 20 4c 6f 6f 70 0a 09 20  t     -- Loop.. 
a780: 20 20 20 2d 2d 0a 09 20 20 20 20 55 4e 49 4f 4e     --..    UNION
a790: 0a 09 20 20 20 20 2d 2d 20 28 34 29 20 43 68 69  ..    -- (4) Chi
a7a0: 6c 64 20 6f 66 20 74 72 75 6e 6b 20 72 6f 6f 74  ld of trunk root
a7b0: 20 73 75 63 63 65 73 73 6f 72 20 6f 66 20 6c 61   successor of la
a7c0: 73 74 20 4e 54 44 42 20 6f 6e 20 74 72 75 6e 6b  st NTDB on trunk
a7d0: 2e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e  ...    SELECT R.
a7e0: 72 69 64 2c 20 52 41 2e 63 68 69 6c 64 0a 09 20  rid, RA.child.. 
a7f0: 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69     FROM   revisi
a800: 6f 6e 20 52 2c 20 72 65 76 69 73 69 6f 6e 20 52  on R, revision R
a810: 41 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e  A..    WHERE  R.
a820: 72 69 64 20 20 20 20 49 4e 20 24 74 68 65 73 65  rid    IN $these
a830: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63  t     -- Restric
a840: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f  t to revisions o
a850: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20  f interest..    
a860: 41 4e 44 20 20 20 20 52 2e 69 73 64 65 66 61 75  AND    R.isdefau
a870: 6c 74 20 20 20 20 20 20 20 20 20 20 20 20 20 2d  lt             -
a880: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 4e 54  - Restrict to NT
a890: 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52  DB..    AND    R
a8a0: 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54 20  .dbchild IS NOT 
a8b0: 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c 61  NULL   -- and la
a8c0: 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69 6e  st NTDB belongin
a8d0: 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20 20  g to trunk..    
a8e0: 41 4e 44 20 20 20 20 52 41 2e 72 69 64 20 3d 20  AND    RA.rid = 
a8f0: 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d  R.dbchild      -
a900: 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f  - Go directly to
a910: 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20   trunk root..   
a920: 20 41 4e 44 20 20 20 20 52 41 2e 63 68 69 6c 64   AND    RA.child
a930: 20 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20   IS NOT NULL    
a940: 2d 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63  -- Has primary c
a950: 68 69 6c 64 2e 0a 09 20 20 20 20 41 4e 44 20 20  hild...    AND  
a960: 20 20 52 41 2e 63 68 69 6c 64 20 49 4e 20 24 74    RA.child IN $t
a970: 68 65 73 65 74 20 20 20 20 20 2d 2d 20 4c 6f 6f  heset     -- Loo
a980: 70 0a 09 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20  p..}]].    }..  
a990: 20 20 23 20 76 61 72 28 64 76 29 20 3d 20 64 69    # var(dv) = di
a9a0: 63 74 20 28 69 74 65 6d 20 2d 3e 20 6c 69 73 74  ct (item -> list
a9b0: 20 28 69 74 65 6d 29 29 2c 20 69 74 65 6d 20 20   (item)), item  
a9c0: 3d 20 6c 69 73 74 20 28 74 79 70 65 20 69 64 29  = list (type id)
a9d0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
a9e0: 73 75 63 63 65 73 73 6f 72 73 20 7b 64 76 20 72  successors {dv r
a9f0: 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09 75 70 76  evisions} {..upv
aa00: 61 72 20 31 20 24 64 76 20 64 65 70 65 6e 64 65  ar 1 $dv depende
aa10: 6e 63 69 65 73 0a 09 73 65 74 20 74 68 65 73 65  ncies..set these
aa20: 74 20 28 27 5b 6a 6f 69 6e 20 24 72 65 76 69 73  t ('[join $revis
aa30: 69 6f 6e 73 20 7b 27 2c 27 7d 5d 27 29 0a 0a 09  ions {','}]')...
aa40: 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  # The following 
aa50: 63 61 73 65 73 20 73 70 65 63 69 66 79 20 77 68  cases specify wh
aa60: 65 6e 20 61 20 72 65 76 69 73 69 6f 6e 20 53 20  en a revision S 
aa70: 69 73 20 61 20 73 75 63 63 65 73 73 6f 72 0a 09  is a successor..
aa80: 23 20 6f 66 20 61 20 72 65 76 69 73 69 6f 6e 20  # of a revision 
aa90: 52 2e 20 45 61 63 68 20 6f 66 20 74 68 65 20 63  R. Each of the c
aaa0: 61 73 65 73 20 74 72 61 6e 73 6c 61 74 65 73 20  ases translates 
aab0: 69 6e 74 6f 20 6f 6e 65 20 6f 66 0a 09 23 20 74  into one of..# t
aac0: 68 65 20 62 72 61 6e 63 68 65 73 20 6f 66 20 74  he branches of t
aad0: 68 65 20 53 51 4c 20 55 4e 49 4f 4e 20 63 6f 6d  he SQL UNION com
aae0: 69 6e 67 20 62 65 6c 6f 77 2e 0a 09 23 0a 09 23  ing below...#..#
aaf0: 20 28 31 29 20 53 20 63 61 6e 20 62 65 20 61 20   (1) S can be a 
ab00: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66  primary child of
ab10: 20 52 2c 20 69 2e 65 2e 20 69 6e 20 74 68 65 20   R, i.e. in the 
ab20: 73 61 6d 65 20 4c 4f 44 2e 20 52 0a 09 23 20 20  same LOD. R..#  
ab30: 20 20 20 72 65 66 65 72 65 6e 63 65 73 20 53 20     references S 
ab40: 64 69 72 65 63 74 6c 79 2e 20 52 2e 63 68 69 6c  directly. R.chil
ab50: 64 20 3d 20 53 28 2e 72 69 64 29 2c 20 69 66 20  d = S(.rid), if 
ab60: 69 74 20 65 78 69 73 74 73 2e 0a 09 23 0a 09 23  it exists...#..#
ab70: 20 28 32 29 20 53 20 63 61 6e 20 62 65 20 61 20   (2) S can be a 
ab80: 73 65 63 6f 6e 64 61 72 79 2c 20 69 2e 65 2e 20  secondary, i.e. 
ab90: 62 72 61 6e 63 68 2c 20 63 68 69 6c 64 20 6f 66  branch, child of
aba0: 20 52 2e 20 48 65 72 65 20 74 68 65 0a 09 23 20   R. Here the..# 
abb0: 20 20 20 20 6c 69 6e 6b 20 69 73 20 6d 61 64 65      link is made
abc0: 20 74 68 72 6f 75 67 68 20 74 68 65 20 68 65 6c   through the hel
abd0: 70 65 72 20 74 61 62 6c 65 0a 09 23 20 20 20 20  per table..#    
abe0: 20 52 45 56 49 53 49 4f 4e 42 52 41 4e 43 48 43   REVISIONBRANCHC
abf0: 48 49 4c 44 52 45 4e 2e 20 52 2e 72 69 64 20 2d  HILDREN. R.rid -
ac00: 3e 20 52 42 43 2e 72 69 64 2c 20 52 42 43 2e 62  > RBC.rid, RBC.b
ac10: 72 69 64 20 3d 0a 09 23 20 20 20 20 20 53 28 2e  rid =..#     S(.
ac20: 72 69 64 29 0a 09 23 0a 09 23 20 28 33 29 20 4f  rid)..#..# (3) O
ac30: 72 69 67 69 6e 61 6c 6c 79 20 74 68 69 73 20 75  riginally this u
ac40: 73 65 20 63 61 73 65 20 64 65 66 69 6e 65 64 20  se case defined 
ac50: 74 68 65 20 72 6f 6f 74 20 6f 66 20 61 20 64 65  the root of a de
ac60: 74 61 63 68 65 64 0a 09 23 20 20 20 20 20 4e 54  tached..#     NT
ac70: 44 42 20 61 73 20 74 68 65 20 73 75 63 63 65 73  DB as the succes
ac80: 73 6f 72 20 6f 66 20 74 68 65 20 74 72 75 6e 6b  sor of the trunk
ac90: 20 72 6f 6f 74 2e 20 54 68 69 73 20 6c 65 61 64   root. This lead
aca0: 73 20 74 6f 20 61 0a 09 23 20 20 20 20 20 62 61  s to a..#     ba
acb0: 64 20 74 61 6e 67 6c 65 20 6c 61 74 65 72 20 6f  d tangle later o
acc0: 6e 2e 20 57 69 74 68 20 61 20 64 65 74 61 63 68  n. With a detach
acd0: 65 64 20 4e 54 44 42 20 74 68 65 20 6f 72 69 67  ed NTDB the orig
ace0: 69 6e 61 6c 0a 09 23 20 20 20 20 20 74 72 75 6e  inal..#     trun
acf0: 6b 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20  k root revision 
ad00: 77 61 73 20 72 65 6d 6f 76 65 64 20 61 73 20 69  was removed as i
ad10: 72 72 65 6c 65 76 61 6e 74 2c 20 61 6c 6c 6f 77  rrelevant, allow
ad20: 69 6e 67 0a 09 23 20 20 20 20 20 74 68 65 20 6e  ing..#     the n
ad30: 6f 6d 69 6e 61 6c 20 72 6f 6f 74 20 74 6f 20 62  ominal root to b
ad40: 65 20 6c 61 74 65 72 20 69 6e 20 74 69 6d 65 20  e later in time 
ad50: 74 68 61 6e 20 74 68 65 20 4e 54 44 42 0a 09 23  than the NTDB..#
ad60: 20 20 20 20 20 72 6f 6f 74 2e 20 4e 6f 77 20 73       root. Now s
ad70: 65 74 74 69 6e 67 20 74 68 69 73 20 64 65 70 65  etting this depe
ad80: 6e 64 65 6e 63 79 20 77 69 6c 6c 20 62 65 20 62  ndency will be b
ad90: 61 63 6b 77 61 72 64 20 69 6e 0a 09 23 20 20 20  ackward in..#   
ada0: 20 20 74 69 6d 65 2e 20 52 45 4d 4f 56 45 44 2e    time. REMOVED.
adb0: 0a 09 23 0a 09 23 20 28 34 29 20 49 66 20 52 20  ..#..# (4) If R 
adc0: 69 73 20 74 68 65 20 6c 61 73 74 20 6f 66 20 74  is the last of t
add0: 68 65 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e  he NTDB revision
ade0: 73 20 77 68 69 63 68 20 62 65 6c 6f 6e 67 20 74  s which belong t
adf0: 6f 0a 09 23 20 20 20 20 20 74 68 65 20 74 72 75  o..#     the tru
ae00: 6e 6b 2c 20 74 68 65 6e 20 74 68 65 20 70 72 69  nk, then the pri
ae10: 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 20 74 68  mary child of th
ae20: 65 20 74 72 75 6e 6b 20 72 6f 6f 74 20 28 74 68  e trunk root (th
ae30: 65 0a 09 23 20 20 20 20 20 27 31 2e 32 27 20 72  e..#     '1.2' r
ae40: 65 76 69 73 69 6f 6e 29 20 69 73 20 61 20 73 75  evision) is a su
ae50: 63 63 65 73 73 6f 72 2c 20 69 66 20 69 74 20 65  ccessor, if it e
ae60: 78 69 73 74 73 2e 0a 0a 09 23 20 4e 6f 74 65 20  xists....# Note 
ae70: 74 68 61 74 20 74 68 65 20 62 72 61 6e 63 68 65  that the branche
ae80: 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 74  s spawned from t
ae90: 68 65 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e  he revisions, an
aea0: 64 20 74 68 65 0a 09 23 20 74 61 67 73 20 61 73  d the..# tags as
aeb0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
aec0: 65 6d 20 61 72 65 20 73 75 63 63 65 73 73 6f 72  em are successor
aed0: 73 20 61 73 20 77 65 6c 6c 2e 0a 0a 09 73 74 61  s as well....sta
aee0: 74 65 20 66 6f 72 65 61 63 68 72 6f 77 20 5b 73  te foreachrow [s
aef0: 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73  ubst -nocommands
af00: 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20   -nobackslashes 
af10: 7b 0a 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69  {.    -- (1) Pri
af20: 6d 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20  mary child..    
af30: 53 45 4c 45 43 54 20 52 2e 72 69 64 20 41 53 20  SELECT R.rid AS 
af40: 78 72 69 64 2c 20 52 2e 63 68 69 6c 64 20 41 53  xrid, R.child AS
af50: 20 78 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f   xchild..    FRO
af60: 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 0a 09  M   revision R..
af70: 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64      WHERE  R.rid
af80: 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 20     IN $theset   
af90: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f    -- Restrict to
afa0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e   revisions of in
afb0: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20  terest..    AND 
afc0: 20 20 20 52 2e 63 68 69 6c 64 20 49 53 20 4e 4f     R.child IS NO
afd0: 54 20 4e 55 4c 4c 20 20 20 20 2d 2d 20 48 61 73  T NULL    -- Has
afe0: 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 20   primary child. 
aff0: 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20     UNION.    -- 
b000: 28 32 29 20 53 65 63 6f 6e 64 61 72 79 20 28 62  (2) Secondary (b
b010: 72 61 6e 63 68 29 20 63 68 69 6c 64 72 65 6e 0a  ranch) children.
b020: 09 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69  .    SELECT R.ri
b030: 64 20 41 53 20 78 72 69 64 2c 20 42 2e 62 72 69  d AS xrid, B.bri
b040: 64 20 41 53 20 78 63 68 69 6c 64 0a 09 20 20 20  d AS xchild..   
b050: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e   FROM   revision
b060: 20 52 2c 20 72 65 76 69 73 69 6f 6e 62 72 61 6e   R, revisionbran
b070: 63 68 63 68 69 6c 64 72 65 6e 20 42 0a 09 20 20  chchildren B..  
b080: 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20 20    WHERE  R.rid  
b090: 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20   IN $theset     
b0a0: 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 72  -- Restrict to r
b0b0: 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65  evisions of inte
b0c0: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20  rest..    AND   
b0d0: 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 64 20 20   R.rid = B.rid  
b0e0: 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63          -- Selec
b0f0: 74 20 73 75 62 73 65 74 20 6f 66 20 62 72 61 6e  t subset of bran
b100: 63 68 20 63 68 69 6c 64 72 65 6e 0a 20 20 20 20  ch children.    
b110: 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d 20 28 34 29  UNION.    -- (4)
b120: 20 43 68 69 6c 64 20 6f 66 20 74 72 75 6e 6b 20   Child of trunk 
b130: 72 6f 6f 74 20 73 75 63 63 65 73 73 6f 72 20 6f  root successor o
b140: 66 20 6c 61 73 74 20 4e 54 44 42 20 6f 6e 20 74  f last NTDB on t
b150: 72 75 6e 6b 2e 0a 09 20 20 20 20 53 45 4c 45 43  runk...    SELEC
b160: 54 20 52 2e 72 69 64 20 41 53 20 78 72 69 64 2c  T R.rid AS xrid,
b170: 20 52 41 2e 63 68 69 6c 64 20 41 53 20 78 63 68   RA.child AS xch
b180: 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 72 65  ild..    FROM re
b190: 76 69 73 69 6f 6e 20 52 2c 20 72 65 76 69 73 69  vision R, revisi
b1a0: 6f 6e 20 52 41 0a 09 20 20 20 20 57 48 45 52 45  on RA..    WHERE
b1b0: 20 52 2e 72 69 64 20 20 20 49 4e 20 24 74 68 65   R.rid   IN $the
b1c0: 73 65 74 20 20 20 20 20 20 2d 2d 20 52 65 73 74  set      -- Rest
b1d0: 72 69 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e  rict to revision
b1e0: 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20  s of interest.. 
b1f0: 20 20 20 41 4e 44 20 20 20 52 2e 69 73 64 65 66     AND   R.isdef
b200: 61 75 6c 74 20 20 20 20 20 20 20 20 20 20 20 20  ault            
b210: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20   -- Restrict to 
b220: 4e 54 44 42 0a 09 20 20 20 20 41 4e 44 20 20 20  NTDB..    AND   
b230: 52 2e 64 62 63 68 69 6c 64 20 49 53 20 4e 4f 54  R.dbchild IS NOT
b240: 20 4e 55 4c 4c 20 20 20 2d 2d 20 61 6e 64 20 6c   NULL   -- and l
b250: 61 73 74 20 4e 54 44 42 20 62 65 6c 6f 6e 67 69  ast NTDB belongi
b260: 6e 67 20 74 6f 20 74 72 75 6e 6b 0a 09 20 20 20  ng to trunk..   
b270: 20 41 4e 44 20 20 20 52 41 2e 72 69 64 20 3d 20   AND   RA.rid = 
b280: 52 2e 64 62 63 68 69 6c 64 20 20 20 20 20 20 2d  R.dbchild      -
b290: 2d 20 47 6f 20 64 69 72 65 63 74 6c 79 20 74 6f  - Go directly to
b2a0: 20 74 72 75 6e 6b 20 72 6f 6f 74 0a 09 20 20 20   trunk root..   
b2b0: 20 41 4e 44 20 20 20 52 41 2e 63 68 69 6c 64 20   AND   RA.child 
b2c0: 49 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 2d  IS NOT NULL    -
b2d0: 2d 20 48 61 73 20 70 72 69 6d 61 72 79 20 63 68  - Has primary ch
b2e0: 69 6c 64 2e 0a 09 7d 5d 20 7b 0a 09 20 20 20 20  ild...}] {..    
b2f0: 23 20 43 6f 6e 73 69 64 65 72 20 6d 6f 76 69 6e  # Consider movin
b300: 67 20 74 68 69 73 20 74 6f 20 74 68 65 20 69 6e  g this to the in
b310: 74 65 67 72 69 74 79 20 6d 6f 64 75 6c 65 2e 0a  tegrity module..
b320: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61  .    integrity a
b330: 73 73 65 72 74 20 7b 24 78 72 69 64 20 21 3d 20  ssert {$xrid != 
b340: 24 78 63 68 69 6c 64 7d 20 7b 52 65 76 69 73 69  $xchild} {Revisi
b350: 6f 6e 20 24 78 72 69 64 20 64 65 70 65 6e 64 73  on $xrid depends
b360: 20 6f 6e 20 69 74 73 65 6c 66 2e 7d 0a 09 20 20   on itself.}..  
b370: 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64    lappend depend
b380: 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 72 65 76  encies([list rev
b390: 20 24 78 72 69 64 5d 29 20 5b 6c 69 73 74 20 72   $xrid]) [list r
b3a0: 65 76 20 24 78 63 68 69 6c 64 5d 0a 09 7d 0a 09  ev $xchild]..}..
b3b0: 73 74 61 74 65 20 66 6f 72 65 61 63 68 72 6f 77  state foreachrow
b3c0: 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61   [subst -nocomma
b3d0: 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68  nds -nobackslash
b3e0: 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54  es {..    SELECT
b3f0: 20 52 2e 72 69 64 20 41 53 20 78 72 69 64 2c 20   R.rid AS xrid, 
b400: 54 2e 74 69 64 20 41 53 20 78 63 68 69 6c 64 0a  T.tid AS xchild.
b410: 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76 69  .    FROM   revi
b420: 73 69 6f 6e 20 52 2c 20 74 61 67 20 54 0a 09 20  sion R, tag T.. 
b430: 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64 20     WHERE  R.rid 
b440: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 20  IN $theset      
b450: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20   -- Restrict to 
b460: 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74  revisions of int
b470: 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20  erest..    AND  
b480: 20 20 54 2e 72 65 76 20 3d 20 52 2e 72 69 64 20    T.rev = R.rid 
b490: 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65           -- Sele
b4a0: 63 74 20 74 61 67 73 20 61 74 74 61 63 68 65 64  ct tags attached
b4b0: 20 74 6f 20 74 68 65 6d 0a 09 7d 5d 20 7b 0a 09   to them..}] {..
b4c0: 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65      lappend depe
b4d0: 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 72  ndencies([list r
b4e0: 65 76 20 24 78 72 69 64 5d 29 20 5b 6c 69 73 74  ev $xrid]) [list
b4f0: 20 73 79 6d 3a 3a 74 61 67 20 24 78 63 68 69 6c   sym::tag $xchil
b500: 64 5d 0a 09 7d 0a 09 73 74 61 74 65 20 66 6f 72  d]..}..state for
b510: 65 61 63 68 72 6f 77 20 5b 73 75 62 73 74 20 2d  eachrow [subst -
b520: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61  nocommands -noba
b530: 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20  ckslashes {..   
b540: 20 53 45 4c 45 43 54 20 52 2e 72 69 64 20 41 53   SELECT R.rid AS
b550: 20 78 72 69 64 2c 20 42 2e 62 69 64 20 41 53 20   xrid, B.bid AS 
b560: 78 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d  xchild..    FROM
b570: 20 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 62     revision R, b
b580: 72 61 6e 63 68 20 42 0a 09 20 20 20 20 57 48 45  ranch B..    WHE
b590: 52 45 20 20 52 2e 72 69 64 20 49 4e 20 24 74 68  RE  R.rid IN $th
b5a0: 65 73 65 74 20 20 20 20 20 20 20 2d 2d 20 52 65  eset       -- Re
b5b0: 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 73 69  strict to revisi
b5c0: 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a  ons of interest.
b5d0: 09 20 20 20 20 41 4e 44 20 20 20 20 42 2e 72 6f  .    AND    B.ro
b5e0: 6f 74 20 3d 20 52 2e 72 69 64 20 20 20 20 20 20  ot = R.rid      
b5f0: 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 62 72 61     -- Select bra
b600: 6e 63 68 65 73 20 61 74 74 61 63 68 65 64 20 74  nches attached t
b610: 6f 20 74 68 65 6d 0a 09 7d 5d 20 7b 0a 09 20 20  o them..}] {..  
b620: 20 20 6c 61 70 70 65 6e 64 20 64 65 70 65 6e 64    lappend depend
b630: 65 6e 63 69 65 73 28 5b 6c 69 73 74 20 72 65 76  encies([list rev
b640: 20 24 78 72 69 64 5d 29 20 5b 6c 69 73 74 20 73   $xrid]) [list s
b650: 79 6d 3a 3a 62 72 61 6e 63 68 20 24 78 63 68 69  ym::branch $xchi
b660: 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  ld]..}..return. 
b670: 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75     }..    # resu
b680: 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e 67  lt = list (chang
b690: 65 73 65 74 2d 69 64 29 0a 20 20 20 20 74 79 70  eset-id).    typ
b6a0: 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 63 65  emethod cs_succe
b6b0: 73 73 6f 72 73 20 7b 72 65 76 69 73 69 6f 6e 73  ssors {revisions
b6c0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 23 20 54 68  } {.        # Th
b6d0: 69 73 20 69 73 20 61 20 76 61 72 69 61 6e 74 20  is is a variant 
b6e0: 6f 66 20 27 73 75 63 63 65 73 73 6f 72 73 27 20  of 'successors' 
b6f0: 77 68 69 63 68 20 6d 61 70 73 20 74 68 65 20 6c  which maps the l
b700: 6f 77 2d 6c 65 76 65 6c 0a 20 20 20 20 20 20 20  ow-level.       
b710: 20 23 20 64 61 74 61 20 64 69 72 65 63 74 6c 79   # data directly
b720: 20 74 6f 20 74 68 65 20 61 73 73 6f 63 69 61 74   to the associat
b730: 65 64 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49  ed changesets. I
b740: 2e 65 2e 20 69 6e 73 74 65 61 64 0a 20 20 20 20  .e. instead.    
b750: 20 20 20 20 23 20 6d 69 6c 6c 69 6f 6e 73 20 6f      # millions o
b760: 66 20 64 65 70 65 6e 64 65 6e 63 79 20 70 61 69  f dependency pai
b770: 72 73 20 28 69 6e 20 65 78 74 72 65 6d 65 20 63  rs (in extreme c
b780: 61 73 65 73 20 28 45 78 61 6d 70 6c 65 3a 20 54  ases (Example: T
b790: 63 6c 0a 20 20 20 20 20 20 20 20 23 20 43 56 53  cl.        # CVS
b7a0: 29 29 20 77 65 20 72 65 74 75 72 6e 20 61 20 76  )) we return a v
b7b0: 65 72 79 20 73 68 6f 72 74 20 61 6e 64 20 6d 75  ery short and mu
b7c0: 63 68 20 6d 6f 72 65 20 6d 61 6e 61 67 65 61 62  ch more manageab
b7d0: 6c 65 20 6c 69 73 74 0a 20 20 20 20 20 20 20 20  le list.        
b7e0: 23 20 6f 66 20 63 68 61 6e 67 65 73 65 74 73 2e  # of changesets.
b7f0: 0a 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27  ...set theset ('
b800: 5b 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73  [join $revisions
b810: 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72   {','}]')..retur
b820: 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75  n [state run [su
b830: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20  bst -nocommands 
b840: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b  -nobackslashes {
b850: 0a 20 20 20 20 2d 2d 20 28 31 29 20 50 72 69 6d  .    -- (1) Prim
b860: 61 72 79 20 63 68 69 6c 64 0a 09 20 20 20 20 53  ary child..    S
b870: 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20  ELECT C.cid..   
b880: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e   FROM   revision
b890: 20 52 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63   R, csitem CI, c
b8a0: 68 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20  hangeset C..    
b8b0: 57 48 45 52 45 20 20 52 2e 72 69 64 20 20 20 49  WHERE  R.rid   I
b8c0: 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d 2d  N $theset     --
b8d0: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76   Restrict to rev
b8e0: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65  isions of intere
b8f0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52  st..    AND    R
b900: 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55  .child IS NOT NU
b910: 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69  LL    -- Has pri
b920: 6d 61 72 79 20 63 68 69 6c 64 0a 20 20 20 20 20  mary child.     
b930: 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 49         AND    CI
b940: 2e 69 69 64 20 3d 20 52 2e 63 68 69 6c 64 20 20  .iid = R.child  
b950: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 61       -- Select a
b960: 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20  ll changesets.  
b970: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20            AND   
b980: 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 20   C.cid = CI.cid 
b990: 20 20 20 20 20 20 20 20 2d 2d 20 63 6f 6e 74 61          -- conta
b9a0: 69 6e 69 6e 67 20 74 68 65 20 70 72 69 6d 61 72  ining the primar
b9b0: 79 20 63 68 69 6c 64 0a 20 20 20 20 20 20 20 20  y child.        
b9c0: 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70      AND    C.typ
b9d0: 65 20 3d 20 30 20 20 20 20 20 20 20 20 20 20 20  e = 0           
b9e0: 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 20 72    -- which are r
b9f0: 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73 65  evision changese
ba00: 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20  ts.    UNION.   
ba10: 20 2d 2d 20 28 32 29 20 53 65 63 6f 6e 64 61 72   -- (2) Secondar
ba20: 79 20 28 62 72 61 6e 63 68 29 20 63 68 69 6c 64  y (branch) child
ba30: 72 65 6e 0a 09 20 20 20 20 53 45 4c 45 43 54 20  ren..    SELECT 
ba40: 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20  C.cid..    FROM 
ba50: 20 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 72 65    revision R, re
ba60: 76 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c  visionbranchchil
ba70: 64 72 65 6e 20 42 2c 20 63 73 69 74 65 6d 20 43  dren B, csitem C
ba80: 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 0a 09  I, changeset C..
ba90: 20 20 20 20 57 48 45 52 45 20 20 52 2e 72 69 64      WHERE  R.rid
baa0: 20 20 20 49 4e 20 24 74 68 65 73 65 74 20 20 20     IN $theset   
bab0: 20 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f    -- Restrict to
bac0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 66 20 69 6e   revisions of in
bad0: 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20  terest..    AND 
bae0: 20 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 69 64     R.rid = B.rid
baf0: 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c            -- Sel
bb00: 65 63 74 20 73 75 62 73 65 74 20 6f 66 20 62 72  ect subset of br
bb10: 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 0a 20 20  anch children.  
bb20: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20            AND   
bb30: 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 72 69 64   CI.iid = B.brid
bb40: 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63          -- Selec
bb50: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73  t all changesets
bb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44  .            AND
bb70: 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63      C.cid = CI.c
bb80: 69 64 09 20 20 2d 2d 20 63 6f 6e 74 61 69 6e 69  id.  -- containi
bb90: 6e 67 20 74 68 65 20 62 72 61 6e 63 68 0a 20 20  ng the branch.  
bba0: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20            AND   
bbb0: 20 43 2e 74 79 70 65 20 3d 20 30 09 09 20 20 2d   C.type = 0..  -
bbc0: 2d 20 77 68 69 63 68 20 61 72 65 20 72 65 76 69  - which are revi
bbd0: 73 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 0a  sion changesets.
bbe0: 20 20 20 20 55 4e 49 4f 4e 0a 20 20 20 20 2d 2d      UNION.    --
bbf0: 20 28 34 29 20 43 68 69 6c 64 20 6f 66 20 74 72   (4) Child of tr
bc00: 75 6e 6b 20 72 6f 6f 74 20 73 75 63 63 65 73 73  unk root success
bc10: 6f 72 20 6f 66 20 6c 61 73 74 20 4e 54 44 42 20  or of last NTDB 
bc20: 6f 6e 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 53  on trunk...    S
bc30: 45 4c 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20  ELECT C.cid..   
bc40: 20 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e   FROM   revision
bc50: 20 52 2c 20 72 65 76 69 73 69 6f 6e 20 52 41 2c   R, revision RA,
bc60: 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e   csitem CI, chan
bc70: 67 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 45  geset C..    WHE
bc80: 52 45 20 20 52 2e 72 69 64 20 20 20 49 4e 20 24  RE  R.rid   IN $
bc90: 74 68 65 73 65 74 20 20 20 20 20 20 2d 2d 20 52  theset      -- R
bca0: 65 73 74 72 69 63 74 20 74 6f 20 72 65 76 69 73  estrict to revis
bcb0: 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65 73 74  ions of interest
bcc0: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 2e 69  ..    AND    R.i
bcd0: 73 64 65 66 61 75 6c 74 20 20 20 20 20 20 20 20  sdefault        
bce0: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74       -- Restrict
bcf0: 20 74 6f 20 4e 54 44 42 0a 09 20 20 20 20 41 4e   to NTDB..    AN
bd00: 44 20 20 20 20 52 2e 64 62 63 68 69 6c 64 20 49  D    R.dbchild I
bd10: 53 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 2d 2d 20  S NOT NULL   -- 
bd20: 61 6e 64 20 6c 61 73 74 20 4e 54 44 42 20 62 65  and last NTDB be
bd30: 6c 6f 6e 67 69 6e 67 20 74 6f 20 74 72 75 6e 6b  longing to trunk
bd40: 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 41 2e  ..    AND    RA.
bd50: 72 69 64 20 3d 20 52 2e 64 62 63 68 69 6c 64 20  rid = R.dbchild 
bd60: 20 20 20 20 20 2d 2d 20 47 6f 20 64 69 72 65 63       -- Go direc
bd70: 74 6c 79 20 74 6f 20 74 72 75 6e 6b 20 72 6f 6f  tly to trunk roo
bd80: 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 52 41  t..    AND    RA
bd90: 2e 63 68 69 6c 64 20 49 53 20 4e 4f 54 20 4e 55  .child IS NOT NU
bda0: 4c 4c 20 20 20 20 2d 2d 20 48 61 73 20 70 72 69  LL    -- Has pri
bdb0: 6d 61 72 79 20 63 68 69 6c 64 2e 0a 20 20 20 20  mary child..    
bdc0: 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43          AND    C
bdd0: 49 2e 69 69 64 20 3d 20 52 41 2e 63 68 69 6c 64  I.iid = RA.child
bde0: 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74         -- Select
bdf0: 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a   all changesets.
be00: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20              AND 
be10: 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69     C.cid = CI.ci
be20: 64 09 20 20 20 2d 2d 20 63 6f 6e 74 61 69 6e 69  d.   -- containi
be30: 6e 67 20 74 68 65 20 70 72 69 6d 61 72 79 20 63  ng the primary c
be40: 68 69 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20  hild.           
be50: 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d   AND    C.type =
be60: 20 30 09 09 20 20 20 2d 2d 20 77 68 69 63 68 20   0..   -- which 
be70: 61 72 65 20 72 65 76 69 73 69 6f 6e 20 63 68 61  are revision cha
be80: 6e 67 65 73 65 74 73 0a 20 20 20 20 55 4e 49 4f  ngesets.    UNIO
be90: 4e 0a 09 20 20 20 20 53 45 4c 45 43 54 20 43 2e  N..    SELECT C.
bea0: 63 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 20  cid..    FROM   
beb0: 72 65 76 69 73 69 6f 6e 20 52 2c 20 74 61 67 20  revision R, tag 
bec0: 54 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68  T, csitem CI, ch
bed0: 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57  angeset C..    W
bee0: 48 45 52 45 20 20 52 2e 72 69 64 20 69 6e 20 24  HERE  R.rid in $
bef0: 74 68 65 73 65 74 20 20 20 20 20 20 20 20 2d 2d  theset        --
bf00: 20 52 65 73 74 72 69 63 74 20 74 6f 20 72 65 76   Restrict to rev
bf10: 69 73 69 6f 6e 73 20 6f 66 20 69 6e 74 65 72 65  isions of intere
bf20: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 54  st..    AND    T
bf30: 2e 72 65 76 20 3d 20 52 2e 72 69 64 09 20 20 20  .rev = R.rid.   
bf40: 2d 2d 20 53 65 6c 65 63 74 20 74 61 67 73 20 61  -- Select tags a
bf50: 74 74 61 63 68 65 64 20 74 6f 20 74 68 65 6d 0a  ttached to them.
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20              AND 
bf70: 20 20 20 43 49 2e 69 69 64 20 3d 20 54 2e 74 69     CI.iid = T.ti
bf80: 64 20 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65  d          -- Se
bf90: 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73  lect all changes
bfa0: 65 74 73 0a 20 20 20 20 20 20 20 20 20 20 20 20  ets.            
bfb0: 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43  AND    C.cid = C
bfc0: 49 2e 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e 74  I.cid.   -- cont
bfd0: 61 69 6e 69 6e 67 20 74 68 65 20 74 61 67 73 0a  aining the tags.
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20              AND 
bff0: 20 20 20 43 2e 74 79 70 65 20 3d 20 31 09 09 20     C.type = 1.. 
c000: 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65 20 74    -- which are t
c010: 61 67 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20  ag changesets.  
c020: 20 20 55 4e 49 4f 4e 0a 09 20 20 20 20 53 45 4c    UNION..    SEL
c030: 45 43 54 20 43 2e 63 69 64 0a 09 20 20 20 20 46  ECT C.cid..    F
c040: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52  ROM   revision R
c050: 2c 20 62 72 61 6e 63 68 20 42 2c 20 63 73 69 74  , branch B, csit
c060: 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65 74  em CI, changeset
c070: 20 43 0a 09 20 20 20 20 57 48 45 52 45 20 20 52   C..    WHERE  R
c080: 2e 72 69 64 20 69 6e 20 24 74 68 65 73 65 74 20  .rid in $theset 
c090: 20 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69         -- Restri
c0a0: 63 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20  ct to revisions 
c0b0: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20  of interest..   
c0c0: 20 41 4e 44 20 20 20 20 42 2e 72 6f 6f 74 20 3d   AND    B.root =
c0d0: 20 52 2e 72 69 64 09 20 20 20 2d 2d 20 53 65 6c   R.rid.   -- Sel
c0e0: 65 63 74 20 62 72 61 6e 63 68 65 73 20 61 74 74  ect branches att
c0f0: 61 63 68 65 64 20 74 6f 20 74 68 65 6d 0a 20 20  ached to them.  
c100: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20            AND   
c110: 20 43 49 2e 69 69 64 20 3d 20 42 2e 62 69 64 20   CI.iid = B.bid 
c120: 20 20 20 20 20 20 20 20 20 2d 2d 20 53 65 6c 65           -- Sele
c130: 63 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74  ct all changeset
c140: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e  s.            AN
c150: 44 20 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e  D    C.cid = CI.
c160: 63 69 64 09 20 20 20 2d 2d 20 63 6f 6e 74 61 69  cid.   -- contai
c170: 6e 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 65  ning the branche
c180: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 4e  s.            AN
c190: 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20 32 09  D    C.type = 2.
c1a0: 09 20 20 20 2d 2d 20 77 68 69 63 68 20 61 72 65  .   -- which are
c1b0: 20 62 72 61 6e 63 68 20 63 68 61 6e 67 65 73 65   branch changese
c1c0: 74 73 0a 09 7d 5d 5d 0a 0a 09 23 20 52 65 67 61  ts..}]]...# Rega
c1d0: 72 64 69 6e 67 20 72 65 76 20 2d 3e 20 62 72 61  rding rev -> bra
c1e0: 6e 63 68 7c 74 61 67 2c 20 77 65 20 63 6f 75 6c  nch|tag, we coul
c1f0: 64 20 63 6f 6e 73 69 64 65 72 20 6c 6f 6f 6b 69  d consider looki
c200: 6e 67 20 61 74 0a 09 23 20 74 68 65 20 73 79 6d  ng at..# the sym
c210: 62 6f 6c 20 6f 66 20 74 68 65 20 62 72 61 6e 63  bol of the branc
c220: 68 7c 74 61 67 2c 20 69 74 73 20 6c 6f 64 2d 73  h|tag, its lod-s
c230: 79 6d 62 6f 6c 2c 20 61 6e 64 20 74 68 65 0a 09  ymbol, and the..
c240: 23 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74  # revisions on t
c250: 68 61 74 20 6c 6f 64 2c 20 62 75 74 20 64 6f 6e  hat lod, but don
c260: 27 74 2e 20 42 65 63 61 75 73 65 20 69 74 20 69  't. Because it i
c270: 73 20 6e 6f 74 20 65 78 61 63 74 0a 09 23 20 65  s not exact..# e
c280: 6e 6f 75 67 68 2c 20 74 68 65 20 62 72 61 6e 63  nough, the branc
c290: 68 7c 74 61 67 20 77 6f 75 6c 64 20 64 65 70 65  h|tag would depe
c2a0: 6e 64 20 6f 6e 20 72 65 76 69 73 69 6f 6e 73 20  nd on revisions 
c2b0: 63 6f 6d 69 6e 67 0a 09 23 20 61 66 74 65 72 20  coming..# after 
c2c0: 69 74 73 20 63 72 65 61 74 69 6f 6e 20 6f 6e 20  its creation on 
c2d0: 74 68 65 20 70 61 72 65 6e 74 61 6c 20 6c 6f 64  the parental lod
c2e0: 2e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72  ..    }..    # r
c2f0: 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f 6c 20 6e  esult = symbol n
c300: 61 6d 65 0a 20 20 20 20 74 79 70 65 6d 65 74 68  ame.    typemeth
c310: 6f 64 20 63 73 5f 6c 6f 64 20 7b 6d 65 74 61 69  od cs_lod {metai
c320: 64 20 72 65 76 69 73 69 6f 6e 73 7d 20 7b 0a 09  d revisions} {..
c330: 23 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65  # Determines the
c340: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 79 6d   name of the sym
c350: 62 6f 6c 20 77 68 69 63 68 20 69 73 20 74 68 65  bol which is the
c360: 20 6c 69 6e 65 20 6f 66 0a 09 23 20 64 65 76 65   line of..# deve
c370: 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20  lopment for the 
c380: 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 61 20 63  revisions in a c
c390: 68 61 6e 67 65 73 65 74 2e 20 54 68 65 0a 09 23  hangeset. The..#
c3a0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
c3b0: 74 68 65 20 6d 65 74 61 20 64 61 74 61 20 72 65  the meta data re
c3c0: 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
c3d0: 73 6f 75 72 63 65 20 6d 65 74 61 69 64 0a 09 23  source metaid..#
c3e0: 20 69 73 20 6f 75 74 20 6f 66 20 64 61 74 65 20   is out of date 
c3f0: 62 79 20 74 68 65 20 74 69 6d 65 20 77 65 20 63  by the time we c
c400: 6f 6d 65 20 68 65 72 65 20 28 73 69 6e 63 65 20  ome here (since 
c410: 70 61 73 73 0a 09 23 20 46 69 6c 74 65 72 53 79  pass..# FilterSy
c420: 6d 62 6f 6c 73 29 2c 20 73 6f 20 69 74 20 63 61  mbols), so it ca
c430: 6e 6e 6f 74 20 62 65 20 75 73 65 64 2e 20 53 65  nnot be used. Se
c440: 65 20 74 68 65 20 6d 65 74 68 6f 64 20 27 72 75  e the method 'ru
c450: 6e 27 0a 09 23 20 69 6e 20 66 69 6c 65 20 22 63  n'..# in file "c
c460: 32 66 5f 70 66 69 6c 74 65 72 73 79 6d 2e 74 63  2f_pfiltersym.tc
c470: 6c 22 20 66 6f 72 20 6d 6f 72 65 20 63 6f 6d 6d  l" for more comm
c480: 65 6e 74 61 72 79 20 6f 6e 20 74 68 69 73 2e 0a  entary on this..
c490: 0a 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b  ..set theset ('[
c4a0: 6a 6f 69 6e 20 24 72 65 76 69 73 69 6f 6e 73 20  join $revisions 
c4b0: 7b 27 2c 27 7d 5d 27 29 0a 09 72 65 74 75 72 6e  {','}]')..return
c4c0: 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75 62   [state run [sub
c4d0: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d  st -nocommands -
c4e0: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a  nobackslashes {.
c4f0: 09 20 20 20 20 53 45 4c 45 43 54 0a 09 20 20 20  .    SELECT..   
c500: 20 44 49 53 54 49 4e 43 54 20 4c 2e 6e 61 6d 65   DISTINCT L.name
c510: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 72 65 76  ..    FROM   rev
c520: 69 73 69 6f 6e 20 52 2c 20 73 79 6d 62 6f 6c 20  ision R, symbol 
c530: 4c 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e  L..    WHERE  R.
c540: 72 69 64 20 69 6e 20 24 74 68 65 73 65 74 20 20  rid in $theset  
c550: 20 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63        -- Restric
c560: 74 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 6f  t to revisions o
c570: 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20  f interest..    
c580: 41 4e 44 20 20 20 20 4c 2e 73 69 64 20 3d 20 52  AND    L.sid = R
c590: 2e 6c 6f 64 20 20 20 20 20 20 20 20 20 20 20 2d  .lod           -
c5a0: 2d 20 47 65 74 20 6c 6f 64 20 73 79 6d 62 6f 6c  - Get lod symbol
c5b0: 20 6f 66 20 72 65 76 69 73 69 6f 6e 0a 09 7d 5d   of revision..}]
c5c0: 5d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23  ].    }.}..# # #
c5d0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
c5e0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
c5f0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
c600: 23 23 23 23 23 23 23 23 0a 23 23 20 48 65 6c 70  ########.## Help
c610: 65 72 20 73 69 6e 67 6c 65 74 6f 6e 2e 20 43 6f  er singleton. Co
c620: 6d 6d 61 6e 64 73 20 66 6f 72 20 74 61 67 20 73  mmands for tag s
c630: 79 6d 62 6f 6c 20 63 68 61 6e 67 65 73 65 74 73  ymbol changesets
c640: 2e 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a  ...snit::type ::
c650: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
c660: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74  rt::cvs::project
c670: 3a 3a 72 65 76 3a 3a 73 79 6d 3a 3a 74 61 67 20  ::rev::sym::tag 
c680: 7b 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64  {.    typemethod
c690: 20 62 79 72 65 76 69 73 69 6f 6e 20 7b 7d 20 7b   byrevision {} {
c6a0: 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20   return 0 }.    
c6b0: 74 79 70 65 6d 65 74 68 6f 64 20 62 79 73 79 6d  typemethod bysym
c6c0: 62 6f 6c 20 20 20 7b 7d 20 7b 20 72 65 74 75 72  bol   {} { retur
c6d0: 6e 20 31 20 7d 0a 20 20 20 20 74 79 70 65 6d 65  n 1 }.    typeme
c6e0: 74 68 6f 64 20 69 73 74 61 67 20 20 20 20 20 20  thod istag      
c6f0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 7d 0a  {} { return 1 }.
c700: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69      typemethod i
c710: 73 62 72 61 6e 63 68 20 20 20 7b 7d 20 7b 20 72  sbranch   {} { r
c720: 65 74 75 72 6e 20 30 20 7d 0a 0a 20 20 20 20 74  eturn 0 }..    t
c730: 79 70 65 6d 65 74 68 6f 64 20 73 74 72 20 7b 74  ypemethod str {t
c740: 61 67 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c  ag} {..struct::l
c750: 69 73 74 20 61 73 73 69 67 6e 20 5b 73 74 61 74  ist assign [stat
c760: 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c  e run {..    SEL
c770: 45 43 54 20 53 2e 6e 61 6d 65 2c 20 46 2e 6e 61  ECT S.name, F.na
c780: 6d 65 2c 20 50 2e 6e 61 6d 65 0a 09 20 20 20 20  me, P.name..    
c790: 46 52 4f 4d 20 20 20 74 61 67 20 54 2c 20 73 79  FROM   tag T, sy
c7a0: 6d 62 6f 6c 20 53 2c 20 66 69 6c 65 20 46 2c 20  mbol S, file F, 
c7b0: 70 72 6f 6a 65 63 74 20 50 0a 09 20 20 20 20 57  project P..    W
c7c0: 48 45 52 45 20 20 54 2e 74 69 64 20 3d 20 24 74  HERE  T.tid = $t
c7d0: 61 67 20 20 20 2d 2d 20 46 69 6e 64 20 73 70 65  ag   -- Find spe
c7e0: 63 69 66 69 65 64 20 74 61 67 0a 09 20 20 20 20  cified tag..    
c7f0: 41 4e 44 20 20 20 20 46 2e 66 69 64 20 3d 20 54  AND    F.fid = T
c800: 2e 66 69 64 20 20 2d 2d 20 47 65 74 20 66 69 6c  .fid  -- Get fil
c810: 65 20 6f 66 20 74 61 67 0a 09 20 20 20 20 41 4e  e of tag..    AN
c820: 44 20 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70  D    P.pid = F.p
c830: 69 64 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65  id  -- Get proje
c840: 63 74 20 6f 66 20 66 69 6c 65 0a 09 20 20 20 20  ct of file..    
c850: 41 4e 44 20 20 20 20 53 2e 73 69 64 20 3d 20 54  AND    S.sid = T
c860: 2e 73 69 64 20 20 2d 2d 20 47 65 74 20 73 79 6d  .sid  -- Get sym
c870: 62 6f 6c 20 6f 66 20 74 61 67 0a 09 7d 5d 20 73  bol of tag..}] s
c880: 6e 61 6d 65 20 66 6e 61 6d 65 20 70 6e 61 6d 65  name fname pname
c890: 0a 09 72 65 74 75 72 6e 20 22 24 70 6e 61 6d 65  ..return "$pname
c8a0: 2f 54 27 24 7b 73 6e 61 6d 65 7d 27 3a 3a 24 66  /T'${sname}'::$f
c8b0: 6e 61 6d 65 22 0a 20 20 20 20 7d 0a 0a 20 20 20  name".    }..   
c8c0: 20 23 20 72 65 73 75 6c 74 20 3d 20 6c 69 73 74   # result = list
c8d0: 20 28 6d 69 6e 74 69 6d 65 2c 20 6d 61 78 74 69   (mintime, maxti
c8e0: 6d 65 29 0a 20 20 20 20 74 79 70 65 6d 65 74 68  me).    typemeth
c8f0: 6f 64 20 74 69 6d 65 72 61 6e 67 65 20 7b 74 61  od timerange {ta
c900: 67 73 7d 20 7b 0a 09 23 20 54 68 65 20 72 61 6e  gs} {..# The ran
c910: 67 65 20 69 73 20 64 65 66 69 6e 65 64 20 61 73  ge is defined as
c920: 20 74 68 65 20 72 61 6e 67 65 20 6f 66 20 74 68   the range of th
c930: 65 20 72 65 76 69 73 69 6f 6e 73 20 74 68 65 20  e revisions the 
c940: 74 61 67 73 0a 09 23 20 61 72 65 20 61 74 74 61  tags..# are atta
c950: 63 68 65 64 20 74 6f 2e 0a 0a 09 73 65 74 20 74  ched to....set t
c960: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 74  heset ('[join $t
c970: 61 67 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65  ags {','}]')..re
c980: 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20  turn [state run 
c990: 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e  [subst -nocomman
c9a0: 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65  ds -nobackslashe
c9b0: 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20  s {..    SELECT 
c9c0: 4d 49 4e 28 52 2e 64 61 74 65 29 2c 20 4d 41 58  MIN(R.date), MAX
c9d0: 28 52 2e 64 61 74 65 29 0a 09 20 20 20 20 46 52  (R.date)..    FR
c9e0: 4f 4d 20 20 20 74 61 67 20 54 2c 20 72 65 76 69  OM   tag T, revi
c9f0: 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52  sion R..    WHER
ca00: 45 20 20 54 2e 74 69 64 20 49 4e 20 24 74 68 65  E  T.tid IN $the
ca10: 73 65 74 20 20 2d 2d 20 52 65 73 74 72 69 63 74  set  -- Restrict
ca20: 20 74 6f 20 74 61 67 73 20 6f 66 20 69 6e 74 65   to tags of inte
ca30: 72 65 73 74 0a 20 20 20 20 20 20 20 20 20 20 20  rest.           
ca40: 20 41 4e 44 20 20 20 20 52 2e 72 69 64 20 3d 20   AND    R.rid = 
ca50: 54 2e 72 65 76 20 20 20 20 20 2d 2d 20 53 65 6c  T.rev     -- Sel
ca60: 65 63 74 20 74 61 67 20 70 61 72 65 6e 74 20 72  ect tag parent r
ca70: 65 76 69 73 69 6f 6e 73 0a 09 7d 5d 5d 0a 20 20  evisions..}]].  
ca80: 20 20 7d 0a 0a 20 20 20 20 23 20 76 61 72 28 64    }..    # var(d
ca90: 76 29 20 3d 20 64 69 63 74 20 28 69 74 65 6d 20  v) = dict (item 
caa0: 2d 3e 20 6c 69 73 74 20 28 69 74 65 6d 29 29 2c  -> list (item)),
cab0: 20 69 74 65 6d 20 20 3d 20 6c 69 73 74 20 28 74   item  = list (t
cac0: 79 70 65 20 69 64 29 0a 20 20 20 20 74 79 70 65  ype id).    type
cad0: 6d 65 74 68 6f 64 20 73 75 63 63 65 73 73 6f 72  method successor
cae0: 73 20 7b 64 76 20 74 61 67 73 7d 20 7b 0a 09 23  s {dv tags} {..#
caf0: 20 54 61 67 73 20 68 61 76 65 20 6e 6f 20 73 75   Tags have no su
cb00: 63 63 65 73 73 6f 72 73 2e 0a 09 72 65 74 75 72  ccessors...retur
cb10: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 72  n.    }..    # r
cb20: 65 73 75 6c 74 20 3d 20 34 2d 6c 69 73 74 20 28  esult = 4-list (
cb30: 69 74 65 6d 74 79 70 65 20 69 74 65 6d 69 64 20  itemtype itemid 
cb40: 6e 65 78 74 69 74 65 6d 74 79 70 65 20 6e 65 78  nextitemtype nex
cb50: 74 69 74 65 6d 69 64 20 2e 2e 2e 29 0a 20 20 20  titemid ...).   
cb60: 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 6f 70   typemethod loop
cb70: 73 20 7b 74 61 67 73 7d 20 7b 0a 09 23 20 54 61  s {tags} {..# Ta
cb80: 67 73 20 68 61 76 65 20 6e 6f 20 73 75 63 63 65  gs have no succe
cb90: 73 73 6f 72 73 2c 20 74 68 65 72 65 66 6f 72 65  ssors, therefore
cba0: 20 63 61 6e 6e 6f 74 20 63 61 75 73 65 20 6c 6f   cannot cause lo
cbb0: 6f 70 73 0a 09 72 65 74 75 72 6e 20 7b 7d 0a 20  ops..return {}. 
cbc0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75     }..    # resu
cbd0: 6c 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e 67  lt = list (chang
cbe0: 65 73 65 74 2d 69 64 29 0a 20 20 20 20 74 79 70  eset-id).    typ
cbf0: 65 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 63 65  emethod cs_succe
cc00: 73 73 6f 72 73 20 7b 74 61 67 73 7d 20 7b 0a 09  ssors {tags} {..
cc10: 23 20 54 61 67 73 20 68 61 76 65 20 6e 6f 20 73  # Tags have no s
cc20: 75 63 63 65 73 73 6f 72 73 2e 0a 09 72 65 74 75  uccessors...retu
cc30: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  rn.    }..    # 
cc40: 72 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f 6c 20  result = symbol 
cc50: 6e 61 6d 65 0a 20 20 20 20 74 79 70 65 6d 65 74  name.    typemet
cc60: 68 6f 64 20 63 73 5f 6c 6f 64 20 7b 73 69 64 20  hod cs_lod {sid 
cc70: 74 61 67 73 7d 20 7b 0a 09 23 20 44 65 74 65 72  tags} {..# Deter
cc80: 6d 69 6e 65 73 20 74 68 65 20 6e 61 6d 65 20 6f  mines the name o
cc90: 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 77 68 69  f the symbol whi
cca0: 63 68 20 69 73 20 74 68 65 20 6c 69 6e 65 20 6f  ch is the line o
ccb0: 66 0a 09 23 20 64 65 76 65 6c 6f 70 6d 65 6e 74  f..# development
ccc0: 20 66 6f 72 20 74 68 65 20 74 61 67 73 20 69 6e   for the tags in
ccd0: 20 61 20 63 68 61 6e 67 65 73 65 74 2e 20 43 6f   a changeset. Co
cce0: 6d 65 73 20 64 69 72 65 63 74 6c 79 20 66 72 6f  mes directly fro
ccf0: 6d 0a 09 23 20 74 68 65 20 73 79 6d 62 6f 6c 20  m..# the symbol 
cd00: 77 68 69 63 68 20 69 73 20 74 68 65 20 63 68 61  which is the cha
cd10: 6e 67 65 73 65 74 27 73 20 73 6f 75 72 63 65 20  ngeset's source 
cd20: 61 6e 64 20 69 74 73 20 70 72 65 66 65 72 65 64  and its prefered
cd30: 0a 09 23 20 70 61 72 65 6e 74 2e 0a 0a 20 20 20  ..# parent...   
cd40: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 74 61       return [sta
cd50: 74 65 20 72 75 6e 20 7b 0a 20 09 20 20 20 20 53  te run {. .    S
cd60: 45 4c 45 43 54 20 50 2e 6e 61 6d 65 0a 09 20 20  ELECT P.name..  
cd70: 20 20 46 52 4f 4d 20 70 72 65 66 65 72 65 64 70    FROM preferedp
cd80: 61 72 65 6e 74 20 53 50 2c 20 73 79 6d 62 6f 6c  arent SP, symbol
cd90: 20 50 0a 09 20 20 20 20 57 48 45 52 45 20 53 50   P..    WHERE SP
cda0: 2e 73 69 64 20 3d 20 24 73 69 64 0a 09 20 20 20  .sid = $sid..   
cdb0: 20 41 4e 44 20 20 20 50 2e 73 69 64 20 3d 20 53   AND   P.sid = S
cdc0: 50 2e 70 69 64 0a 09 7d 5d 0a 20 20 20 20 7d 0a  P.pid..}].    }.
cdd0: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  }..# # ## ### ##
cde0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
cdf0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
ce00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ce10: 0a 23 23 20 48 65 6c 70 65 72 20 73 69 6e 67 6c  .## Helper singl
ce20: 65 74 6f 6e 2e 20 43 6f 6d 6d 61 6e 64 73 20 66  eton. Commands f
ce30: 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c  or branch symbol
ce40: 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a 73 6e   changesets...sn
ce50: 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66  it::type ::vc::f
ce60: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
ce70: 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76  vs::project::rev
ce80: 3a 3a 73 79 6d 3a 3a 62 72 61 6e 63 68 20 7b 0a  ::sym::branch {.
ce90: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62      typemethod b
cea0: 79 72 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 20 72  yrevision {} { r
ceb0: 65 74 75 72 6e 20 30 20 7d 0a 20 20 20 20 74 79  eturn 0 }.    ty
cec0: 70 65 6d 65 74 68 6f 64 20 62 79 73 79 6d 62 6f  pemethod bysymbo
ced0: 6c 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  l   {} { return 
cee0: 31 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68  1 }.    typemeth
cef0: 6f 64 20 69 73 74 61 67 20 20 20 20 20 20 7b 7d  od istag      {}
cf00: 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 20 20   { return 0 }.  
cf10: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 62    typemethod isb
cf20: 72 61 6e 63 68 20 20 20 7b 7d 20 7b 20 72 65 74  ranch   {} { ret
cf30: 75 72 6e 20 31 20 7d 0a 0a 20 20 20 20 74 79 70  urn 1 }..    typ
cf40: 65 6d 65 74 68 6f 64 20 73 74 72 20 7b 62 72 61  emethod str {bra
cf50: 6e 63 68 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a  nch} {..struct::
cf60: 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 73 74 61  list assign [sta
cf70: 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45  te run {..    SE
cf80: 4c 45 43 54 20 53 2e 6e 61 6d 65 2c 20 46 2e 6e  LECT S.name, F.n
cf90: 61 6d 65 2c 20 50 2e 6e 61 6d 65 0a 09 20 20 20  ame, P.name..   
cfa0: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42   FROM   branch B
cfb0: 2c 20 73 79 6d 62 6f 6c 20 53 2c 20 66 69 6c 65  , symbol S, file
cfc0: 20 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 20   F, project P.. 
cfd0: 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20     WHERE  B.bid 
cfe0: 3d 20 24 62 72 61 6e 63 68 20 20 2d 2d 20 46 69  = $branch  -- Fi
cff0: 6e 64 20 73 70 65 63 69 66 69 65 64 20 62 72 61  nd specified bra
d000: 6e 63 68 0a 09 20 20 20 20 41 4e 44 20 20 20 20  nch..    AND    
d010: 46 2e 66 69 64 20 3d 20 42 2e 66 69 64 20 20 20  F.fid = B.fid   
d020: 20 2d 2d 20 47 65 74 20 66 69 6c 65 20 6f 66 20   -- Get file of 
d030: 62 72 61 6e 63 68 0a 09 20 20 20 20 41 4e 44 20  branch..    AND 
d040: 20 20 20 50 2e 70 69 64 20 3d 20 46 2e 70 69 64     P.pid = F.pid
d050: 20 20 20 20 2d 2d 20 47 65 74 20 70 72 6f 6a 65      -- Get proje
d060: 63 74 20 6f 66 20 66 69 6c 65 0a 09 20 20 20 20  ct of file..    
d070: 41 4e 44 20 20 20 20 53 2e 73 69 64 20 3d 20 42  AND    S.sid = B
d080: 2e 73 69 64 20 20 20 20 2d 2d 20 47 65 74 20 73  .sid    -- Get s
d090: 79 6d 62 6f 6c 20 6f 66 20 62 72 61 6e 63 68 0a  ymbol of branch.
d0a0: 09 7d 5d 20 73 6e 61 6d 65 20 66 6e 61 6d 65 20  .}] sname fname 
d0b0: 70 6e 61 6d 65 0a 09 72 65 74 75 72 6e 20 22 24  pname..return "$
d0c0: 70 6e 61 6d 65 2f 42 27 24 7b 73 6e 61 6d 65 7d  pname/B'${sname}
d0d0: 27 3a 3a 24 66 6e 61 6d 65 22 0a 20 20 20 20 7d  '::$fname".    }
d0e0: 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20 3d  ..    # result =
d0f0: 20 6c 69 73 74 20 28 6d 69 6e 74 69 6d 65 2c 20   list (mintime, 
d100: 6d 61 78 74 69 6d 65 29 0a 20 20 20 20 74 79 70  maxtime).    typ
d110: 65 6d 65 74 68 6f 64 20 74 69 6d 65 72 61 6e 67  emethod timerang
d120: 65 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b 0a 09  e {branches} {..
d130: 23 20 54 68 65 20 72 61 6e 67 65 20 6f 66 20 61  # The range of a
d140: 20 62 72 61 6e 63 68 20 69 73 20 64 65 66 69 6e   branch is defin
d150: 65 64 20 61 73 20 74 68 65 20 72 61 6e 67 65 20  ed as the range 
d160: 6f 66 20 74 68 65 0a 09 23 20 72 65 76 69 73 69  of the..# revisi
d170: 6f 6e 73 20 74 68 65 20 62 72 61 6e 63 68 65 73  ons the branches
d180: 20 61 72 65 20 73 70 61 77 6e 65 64 20 62 79 2e   are spawned by.
d190: 20 4e 4f 54 45 20 68 6f 77 65 76 65 72 20 74 68   NOTE however th
d1a0: 61 74 20 74 68 65 0a 09 23 20 62 72 61 6e 63 68  at the..# branch
d1b0: 65 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  es associated wi
d1c0: 74 68 20 61 20 64 65 74 61 63 68 65 64 20 4e 54  th a detached NT
d1d0: 44 42 20 77 69 6c 6c 20 68 61 76 65 20 6e 6f 20  DB will have no 
d1e0: 72 6f 6f 74 0a 09 23 20 73 70 61 77 6e 69 6e 67  root..# spawning
d1f0: 20 74 68 65 6d 2c 20 68 65 6e 63 65 20 74 68 65   them, hence the
d200: 79 20 68 61 76 65 20 6e 6f 20 72 65 61 6c 20 74  y have no real t
d210: 69 6d 65 72 61 6e 67 65 20 61 6e 79 0a 09 23 20  imerange any..# 
d220: 6c 6f 6e 67 65 72 2e 20 42 79 20 75 73 69 6e 67  longer. By using
d230: 20 30 20 77 65 20 70 75 74 20 74 68 65 6d 20 69   0 we put them i
d240: 6e 20 66 72 6f 6e 74 20 6f 66 20 65 76 65 72 79  n front of every
d250: 74 68 69 6e 67 20 65 6c 73 65 2c 0a 09 23 20 61  thing else,..# a
d260: 73 20 74 68 65 79 20 6c 6f 67 69 63 61 6c 6c 79  s they logically
d270: 20 61 72 65 2e 0a 0a 09 73 65 74 20 74 68 65 73   are....set thes
d280: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e  et ('[join $bran
d290: 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72  ches {','}]')..r
d2a0: 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e  eturn [state run
d2b0: 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61   [subst -nocomma
d2c0: 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68  nds -nobackslash
d2d0: 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54  es {..    SELECT
d2e0: 20 49 46 4e 55 4c 4c 28 4d 49 4e 28 52 2e 64 61   IFNULL(MIN(R.da
d2f0: 74 65 29 2c 30 29 2c 20 49 46 4e 55 4c 4c 28 4d  te),0), IFNULL(M
d300: 41 58 28 52 2e 64 61 74 65 29 2c 30 29 0a 09 20  AX(R.date),0).. 
d310: 20 20 20 46 52 4f 4d 20 20 62 72 61 6e 63 68 20     FROM  branch 
d320: 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20  B, revision R.. 
d330: 20 20 20 57 48 45 52 45 20 42 2e 62 69 64 20 49     WHERE B.bid I
d340: 4e 20 24 74 68 65 73 65 74 20 20 20 2d 2d 20 52  N $theset   -- R
d350: 65 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63  estrict to branc
d360: 68 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a  hes of interest.
d370: 20 20 20 20 20 20 20 20 20 20 20 20 41 4e 44 20              AND 
d380: 20 20 52 2e 72 69 64 20 3d 20 42 2e 72 6f 6f 74    R.rid = B.root
d390: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 62       -- Select b
d3a0: 72 61 6e 63 68 20 70 61 72 65 6e 74 20 72 65 76  ranch parent rev
d3b0: 69 73 69 6f 6e 73 0a 09 7d 5d 5d 0a 20 20 20 20  isions..}]].    
d3c0: 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c 74 20  }..    # result 
d3d0: 3d 20 34 2d 6c 69 73 74 20 28 69 74 65 6d 74 79  = 4-list (itemty
d3e0: 70 65 20 69 74 65 6d 69 64 20 6e 65 78 74 69 74  pe itemid nextit
d3f0: 65 6d 74 79 70 65 20 6e 65 78 74 69 74 65 6d 69  emtype nextitemi
d400: 64 20 2e 2e 2e 29 0a 20 20 20 20 74 79 70 65 6d  d ...).    typem
d410: 65 74 68 6f 64 20 6c 6f 6f 70 73 20 7b 62 72 61  ethod loops {bra
d420: 6e 63 68 65 73 7d 20 7b 0a 09 23 20 4e 6f 74 65  nches} {..# Note
d430: 3a 20 52 65 76 69 73 69 6f 6e 73 20 61 6e 64 20  : Revisions and 
d440: 74 61 67 73 20 63 61 6e 6e 6f 74 20 63 61 75 73  tags cannot caus
d450: 65 20 74 68 65 20 6c 6f 6f 70 2e 20 42 65 69 6e  e the loop. Bein
d460: 67 20 6f 66 20 61 0a 09 23 20 66 75 6e 64 61 6d  g of a..# fundam
d470: 65 6e 74 61 6c 6c 79 20 64 69 66 66 65 72 65 6e  entally differen
d480: 74 20 74 79 70 65 20 74 68 65 79 20 63 61 6e 6e  t type they cann
d490: 6f 74 20 62 65 20 69 6e 20 74 68 65 20 69 6e 63  ot be in the inc
d4a0: 6f 6d 69 6e 67 0a 09 23 20 73 65 74 20 6f 66 20  oming..# set of 
d4b0: 69 64 73 2e 0a 0a 09 73 65 74 20 74 68 65 73 65  ids....set these
d4c0: 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e 63  t ('[join $branc
d4d0: 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 72 65  hes {','}]')..re
d4e0: 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20  turn [state run 
d4f0: 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e  [subst -nocomman
d500: 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65  ds -nobackslashe
d510: 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20  s {..    SELECT 
d520: 42 2e 62 69 64 2c 20 42 58 2e 62 69 64 0a 09 20  B.bid, BX.bid.. 
d530: 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68     FROM   branch
d540: 20 42 2c 20 70 72 65 66 65 72 65 64 70 61 72 65   B, preferedpare
d550: 6e 74 20 50 2c 20 62 72 61 6e 63 68 20 42 58 0a  nt P, branch BX.
d560: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69  .    WHERE  B.bi
d570: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 2d  d IN $theset   -
d580: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72  - Restrict to br
d590: 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65  anches of intere
d5a0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42  st..    AND    B
d5b0: 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 20  .sid = P.pid    
d5c0: 20 20 2d 2d 20 47 65 74 20 74 68 65 20 70 72 65    -- Get the pre
d5d0: 66 65 72 65 64 20 62 72 61 6e 63 68 65 73 20 76  fered branches v
d5e0: 69 61 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42  ia..    AND    B
d5f0: 58 2e 73 69 64 20 3d 20 50 2e 73 69 64 20 20 20  X.sid = P.sid   
d600: 20 20 2d 2d 20 74 68 65 20 62 72 61 6e 63 68 20    -- the branch 
d610: 73 79 6d 62 6f 6c 73 0a 09 20 20 20 20 41 4e 44  symbols..    AND
d620: 20 20 20 20 42 58 2e 62 69 64 20 49 4e 20 24 74      BX.bid IN $t
d630: 68 65 73 65 74 20 20 2d 2d 20 4c 6f 6f 70 0a 09  heset  -- Loop..
d640: 7d 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  }]].    }..    #
d650: 20 76 61 72 28 64 76 29 20 3d 20 64 69 63 74 20   var(dv) = dict 
d660: 28 69 74 65 6d 20 2d 3e 20 6c 69 73 74 20 28 69  (item -> list (i
d670: 74 65 6d 29 29 2c 20 69 74 65 6d 20 20 3d 20 6c  tem)), item  = l
d680: 69 73 74 20 28 74 79 70 65 20 69 64 29 0a 20 20  ist (type id).  
d690: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 73 75 63    typemethod suc
d6a0: 63 65 73 73 6f 72 73 20 7b 64 76 20 62 72 61 6e  cessors {dv bran
d6b0: 63 68 65 73 7d 20 7b 0a 09 75 70 76 61 72 20 31  ches} {..upvar 1
d6c0: 20 24 64 76 20 64 65 70 65 6e 64 65 6e 63 69 65   $dv dependencie
d6d0: 73 0a 09 23 20 54 68 65 20 66 69 72 73 74 20 72  s..# The first r
d6e0: 65 76 69 73 69 6f 6e 20 63 6f 6d 6d 69 74 74 65  evision committe
d6f0: 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20 61  d on a branch, a
d700: 6e 64 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 0a  nd all branches.
d710: 09 23 20 61 6e 64 20 74 61 67 73 20 77 68 69 63  .# and tags whic
d720: 68 20 68 61 76 65 20 69 74 20 61 73 20 74 68 65  h have it as the
d730: 69 72 20 70 72 65 66 65 72 65 64 20 70 61 72 65  ir prefered pare
d740: 6e 74 20 61 72 65 20 74 68 65 0a 09 23 20 73 75  nt are the..# su
d750: 63 63 65 73 73 6f 72 73 20 6f 66 20 61 20 62 72  ccessors of a br
d760: 61 6e 63 68 2e 0a 0a 09 73 65 74 20 74 68 65 73  anch....set thes
d770: 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62 72 61 6e  et ('[join $bran
d780: 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29 0a 09 73  ches {','}]')..s
d790: 74 61 74 65 20 66 6f 72 65 61 63 68 72 6f 77 20  tate foreachrow 
d7a0: 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e  [subst -nocomman
d7b0: 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65  ds -nobackslashe
d7c0: 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20  s {..    SELECT 
d7d0: 42 2e 62 69 64 20 41 53 20 78 62 69 64 2c 20 52  B.bid AS xbid, R
d7e0: 2e 72 69 64 20 41 53 20 78 63 68 69 6c 64 0a 09  .rid AS xchild..
d7f0: 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63      FROM   branc
d800: 68 20 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 0a  h B, revision R.
d810: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69  .    WHERE  B.bi
d820: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20  d IN $theset    
d830: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20   -- Restrict to 
d840: 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65  branches of inte
d850: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20  rest..    AND   
d860: 20 42 2e 66 69 72 73 74 20 3d 20 52 2e 72 69 64   B.first = R.rid
d870: 20 20 20 20 20 20 2d 2d 20 47 65 74 20 66 69 72        -- Get fir
d880: 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74  st revision on t
d890: 68 65 20 62 72 61 6e 63 68 0a 09 7d 5d 20 7b 0a  he branch..}] {.
d8a0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 64 65 70  .    lappend dep
d8b0: 65 6e 64 65 6e 63 69 65 73 28 5b 6c 69 73 74 20  endencies([list 
d8c0: 73 79 6d 3a 3a 62 72 61 6e 63 68 20 24 78 62 69  sym::branch $xbi
d8d0: 64 5d 29 20 5b 6c 69 73 74 20 72 65 76 20 24 78  d]) [list rev $x
d8e0: 63 68 69 6c 64 5d 0a 09 7d 0a 09 73 74 61 74 65  child]..}..state
d8f0: 20 66 6f 72 65 61 63 68 72 6f 77 20 5b 73 75 62   foreachrow [sub
d900: 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d  st -nocommands -
d910: 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b 0a  nobackslashes {.
d920: 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e 62 69  .    SELECT B.bi
d930: 64 20 41 53 20 78 62 69 64 2c 20 42 58 2e 62 69  d AS xbid, BX.bi
d940: 64 20 41 53 20 78 63 68 69 6c 64 0a 09 20 20 20  d AS xchild..   
d950: 20 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42   FROM   branch B
d960: 2c 20 70 72 65 66 65 72 65 64 70 61 72 65 6e 74  , preferedparent
d970: 20 50 2c 20 62 72 61 6e 63 68 20 42 58 0a 09 20   P, branch BX.. 
d980: 20 20 20 57 48 45 52 45 20 20 42 2e 62 69 64 20     WHERE  B.bid 
d990: 49 4e 20 24 74 68 65 73 65 74 20 20 20 20 20 2d  IN $theset     -
d9a0: 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20 62 72  - Restrict to br
d9b0: 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65 72 65  anches of intere
d9c0: 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42  st..    AND    B
d9d0: 2e 73 69 64 20 3d 20 50 2e 70 69 64 20 20 20 20  .sid = P.pid    
d9e0: 20 20 20 20 2d 2d 20 47 65 74 20 73 75 62 6f 72      -- Get subor
d9f0: 64 69 6e 61 74 65 20 62 72 61 6e 63 68 65 73 20  dinate branches 
da00: 76 69 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44  via the..    AND
da10: 20 20 20 20 42 58 2e 73 69 64 20 3d 20 50 2e 73      BX.sid = P.s
da20: 69 64 20 20 20 20 20 20 20 2d 2d 20 70 72 65 66  id       -- pref
da30: 65 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20  ered parents of 
da40: 74 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 09 7d  their symbols..}
da50: 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  ] {..    lappend
da60: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 28 5b 6c   dependencies([l
da70: 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e 63 68 20  ist sym::branch 
da80: 24 78 62 69 64 5d 29 20 5b 6c 69 73 74 20 73 79  $xbid]) [list sy
da90: 6d 3a 3a 62 72 61 6e 63 68 20 24 78 63 68 69 6c  m::branch $xchil
daa0: 64 5d 0a 09 7d 0a 09 73 74 61 74 65 20 66 6f 72  d]..}..state for
dab0: 65 61 63 68 72 6f 77 20 5b 73 75 62 73 74 20 2d  eachrow [subst -
dac0: 6e 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61  nocommands -noba
dad0: 63 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20  ckslashes {..   
dae0: 20 53 45 4c 45 43 54 20 42 2e 62 69 64 20 41 53   SELECT B.bid AS
daf0: 20 78 62 69 64 2c 20 54 2e 74 69 64 20 41 53 20   xbid, T.tid AS 
db00: 78 63 68 69 6c 64 0a 09 20 20 20 20 46 52 4f 4d  xchild..    FROM
db10: 20 20 20 62 72 61 6e 63 68 20 42 2c 20 70 72 65     branch B, pre
db20: 66 65 72 65 64 70 61 72 65 6e 74 20 50 2c 20 74  feredparent P, t
db30: 61 67 20 54 0a 09 20 20 20 20 57 48 45 52 45 20  ag T..    WHERE 
db40: 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65   B.bid IN $these
db50: 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63  t     -- Restric
db60: 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66  t to branches of
db70: 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41   interest..    A
db80: 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20 50 2e  ND    B.sid = P.
db90: 70 69 64 20 20 20 20 20 20 20 20 2d 2d 20 47 65  pid        -- Ge
dba0: 74 20 73 75 62 6f 72 64 69 6e 61 74 65 20 74 61  t subordinate ta
dbb0: 67 73 20 76 69 61 20 74 68 65 0a 09 20 20 20 20  gs via the..    
dbc0: 41 4e 44 20 20 20 20 54 2e 73 69 64 20 3d 20 50  AND    T.sid = P
dbd0: 2e 73 69 64 20 20 20 20 20 20 20 20 2d 2d 20 70  .sid        -- p
dbe0: 72 65 66 65 72 65 64 20 70 61 72 65 6e 74 73 20  refered parents 
dbf0: 6f 66 20 74 68 65 69 72 20 73 79 6d 62 6f 6c 73  of their symbols
dc00: 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 6c 61 70 70  ..}] {..    lapp
dc10: 65 6e 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73  end dependencies
dc20: 28 5b 6c 69 73 74 20 73 79 6d 3a 3a 62 72 61 6e  ([list sym::bran
dc30: 63 68 20 24 78 62 69 64 5d 29 20 5b 6c 69 73 74  ch $xbid]) [list
dc40: 20 73 79 6d 3a 3a 74 61 67 20 24 78 63 68 69 6c   sym::tag $xchil
dc50: 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  d]..}..return.  
dc60: 20 20 7d 0a 0a 20 20 20 20 23 20 72 65 73 75 6c    }..    # resul
dc70: 74 20 3d 20 6c 69 73 74 20 28 63 68 61 6e 67 65  t = list (change
dc80: 73 65 74 2d 69 64 29 0a 20 20 20 20 74 79 70 65  set-id).    type
dc90: 6d 65 74 68 6f 64 20 63 73 5f 73 75 63 63 65 73  method cs_succes
dca0: 73 6f 72 73 20 7b 62 72 61 6e 63 68 65 73 7d 20  sors {branches} 
dcb0: 7b 0a 20 20 20 20 20 20 20 20 23 20 54 68 69 73  {.        # This
dcc0: 20 69 73 20 61 20 76 61 72 69 61 6e 74 20 6f 66   is a variant of
dcd0: 20 27 73 75 63 63 65 73 73 6f 72 73 27 20 77 68   'successors' wh
dce0: 69 63 68 20 6d 61 70 73 20 74 68 65 20 6c 6f 77  ich maps the low
dcf0: 2d 6c 65 76 65 6c 0a 20 20 20 20 20 20 20 20 23  -level.        #
dd00: 20 64 61 74 61 20 64 69 72 65 63 74 6c 79 20 74   data directly t
dd10: 6f 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  o the associated
dd20: 20 63 68 61 6e 67 65 73 65 74 73 2e 20 49 2e 65   changesets. I.e
dd30: 2e 20 69 6e 73 74 65 61 64 0a 20 20 20 20 20 20  . instead.      
dd40: 20 20 23 20 6d 69 6c 6c 69 6f 6e 73 20 6f 66 20    # millions of 
dd50: 64 65 70 65 6e 64 65 6e 63 79 20 70 61 69 72 73  dependency pairs
dd60: 20 28 69 6e 20 65 78 74 72 65 6d 65 20 63 61 73   (in extreme cas
dd70: 65 73 20 28 45 78 61 6d 70 6c 65 3a 20 54 63 6c  es (Example: Tcl
dd80: 0a 20 20 20 20 20 20 20 20 23 20 43 56 53 29 29  .        # CVS))
dd90: 20 77 65 20 72 65 74 75 72 6e 20 61 20 76 65 72   we return a ver
dda0: 79 20 73 68 6f 72 74 20 61 6e 64 20 6d 75 63 68  y short and much
ddb0: 20 6d 6f 72 65 20 6d 61 6e 61 67 65 61 62 6c 65   more manageable
ddc0: 20 6c 69 73 74 0a 20 20 20 20 20 20 20 20 23 20   list.        # 
ddd0: 6f 66 20 63 68 61 6e 67 65 73 65 74 73 2e 0a 0a  of changesets...
dde0: 09 73 65 74 20 74 68 65 73 65 74 20 28 27 5b 6a  .set theset ('[j
ddf0: 6f 69 6e 20 24 62 72 61 6e 63 68 65 73 20 7b 27  oin $branches {'
de00: 2c 27 7d 5d 27 29 0a 20 20 20 20 20 20 20 20 72  ,'}]').        r
de10: 65 74 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e  eturn [state run
de20: 20 5b 73 75 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61   [subst -nocomma
de30: 6e 64 73 20 2d 6e 6f 62 61 63 6b 73 6c 61 73 68  nds -nobackslash
de40: 65 73 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54  es {..    SELECT
de50: 20 43 2e 63 69 64 0a 09 20 20 20 20 46 52 4f 4d   C.cid..    FROM
de60: 20 20 20 62 72 61 6e 63 68 20 42 2c 20 72 65 76     branch B, rev
de70: 69 73 69 6f 6e 20 52 2c 20 63 73 69 74 65 6d 20  ision R, csitem 
de80: 43 49 2c 20 63 68 61 6e 67 65 73 65 74 20 43 0a  CI, changeset C.
de90: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69  .    WHERE  B.bi
dea0: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20  d IN $theset    
deb0: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20   -- Restrict to 
dec0: 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65  branches of inte
ded0: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20  rest..    AND   
dee0: 20 42 2e 66 69 72 73 74 20 3d 20 52 2e 72 69 64   B.first = R.rid
def0: 09 2d 2d 20 47 65 74 20 66 69 72 73 74 20 72 65  .-- Get first re
df00: 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 62 72  vision on the br
df10: 61 6e 63 68 0a 20 20 20 20 20 20 20 20 20 20 20  anch.           
df20: 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d   AND    CI.iid =
df30: 20 52 2e 72 69 64 20 20 20 20 20 20 20 2d 2d 20   R.rid       -- 
df40: 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67  Select all chang
df50: 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 20  esets.          
df60: 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d    AND    C.cid =
df70: 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e 74 61   CI.cid.-- conta
df80: 69 6e 69 6e 67 20 74 68 69 73 20 72 65 76 69 73  ining this revis
df90: 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20  ion.            
dfa0: 41 4e 44 20 20 20 20 43 2e 74 79 70 65 20 3d 20  AND    C.type = 
dfb0: 30 09 09 2d 2d 20 77 68 69 63 68 20 61 72 65 20  0..-- which are 
dfc0: 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 73  revision changes
dfd0: 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 09 20  ets.    UNION.. 
dfe0: 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64 0a     SELECT C.cid.
dff0: 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e  .    FROM   bran
e000: 63 68 20 42 2c 20 70 72 65 66 65 72 65 64 70 61  ch B, preferedpa
e010: 72 65 6e 74 20 50 2c 20 62 72 61 6e 63 68 20 42  rent P, branch B
e020: 58 2c 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68  X, csitem CI, ch
e030: 61 6e 67 65 73 65 74 20 43 0a 09 20 20 20 20 57  angeset C..    W
e040: 48 45 52 45 20 20 42 2e 62 69 64 20 49 4e 20 24  HERE  B.bid IN $
e050: 74 68 65 73 65 74 20 20 20 20 20 2d 2d 20 52 65  theset     -- Re
e060: 73 74 72 69 63 74 20 74 6f 20 62 72 61 6e 63 68  strict to branch
e070: 65 73 20 6f 66 20 69 6e 74 65 72 65 73 74 0a 09  es of interest..
e080: 20 20 20 20 41 4e 44 20 20 20 20 42 2e 73 69 64      AND    B.sid
e090: 20 3d 20 50 2e 70 69 64 09 2d 2d 20 47 65 74 20   = P.pid.-- Get 
e0a0: 73 75 62 6f 72 64 69 6e 61 74 65 20 62 72 61 6e  subordinate bran
e0b0: 63 68 65 73 20 76 69 61 20 74 68 65 0a 09 20 20  ches via the..  
e0c0: 20 20 41 4e 44 20 20 20 20 42 58 2e 73 69 64 20    AND    BX.sid 
e0d0: 3d 20 50 2e 73 69 64 09 2d 2d 20 70 72 65 66 65  = P.sid.-- prefe
e0e0: 72 65 64 20 70 61 72 65 6e 74 73 20 6f 66 20 74  red parents of t
e0f0: 68 65 69 72 20 73 79 6d 62 6f 6c 73 0a 20 20 20  heir symbols.   
e100: 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20 20           AND    
e110: 43 49 2e 69 69 64 20 3d 20 42 58 2e 62 69 64 20  CI.iid = BX.bid 
e120: 20 20 20 20 20 2d 2d 20 53 65 6c 65 63 74 20 61       -- Select a
e130: 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 0a 20 20  ll changesets.  
e140: 20 20 20 20 20 20 20 20 20 20 41 4e 44 20 20 20            AND   
e150: 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 09   C.cid = CI.cid.
e160: 2d 2d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  -- containing th
e170: 65 20 73 75 62 6f 72 64 69 6e 61 74 65 20 62 72  e subordinate br
e180: 61 6e 63 68 65 73 0a 20 20 20 20 20 20 20 20 20  anches.         
e190: 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79 70 65     AND    C.type
e1a0: 20 3d 20 32 09 09 2d 2d 20 77 68 69 63 68 20 61   = 2..-- which a
e1b0: 72 65 20 62 72 61 6e 63 68 20 63 68 61 6e 67 65  re branch change
e1c0: 73 65 74 73 0a 20 20 20 20 55 4e 49 4f 4e 0a 09  sets.    UNION..
e1d0: 20 20 20 20 53 45 4c 45 43 54 20 43 2e 63 69 64      SELECT C.cid
e1e0: 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61  ..    FROM   bra
e1f0: 6e 63 68 20 42 2c 20 70 72 65 66 65 72 65 64 70  nch B, preferedp
e200: 61 72 65 6e 74 20 50 2c 20 74 61 67 20 54 2c 20  arent P, tag T, 
e210: 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e 67  csitem CI, chang
e220: 65 73 65 74 20 43 0a 09 20 20 20 20 57 48 45 52  eset C..    WHER
e230: 45 20 20 42 2e 62 69 64 20 49 4e 20 24 74 68 65  E  B.bid IN $the
e240: 73 65 74 20 20 20 20 20 2d 2d 20 52 65 73 74 72  set     -- Restr
e250: 69 63 74 20 74 6f 20 62 72 61 6e 63 68 65 73 20  ict to branches 
e260: 6f 66 20 69 6e 74 65 72 65 73 74 0a 09 20 20 20  of interest..   
e270: 20 41 4e 44 20 20 20 20 42 2e 73 69 64 20 3d 20   AND    B.sid = 
e280: 50 2e 70 69 64 09 2d 2d 20 47 65 74 20 73 75 62  P.pid.-- Get sub
e290: 6f 72 64 69 6e 61 74 65 20 74 61 67 73 20 76 69  ordinate tags vi
e2a0: 61 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 20  a the..    AND  
e2b0: 20 20 54 2e 73 69 64 20 3d 20 50 2e 73 69 64 09    T.sid = P.sid.
e2c0: 2d 2d 20 70 72 65 66 65 72 65 64 20 70 61 72 65  -- prefered pare
e2d0: 6e 74 73 20 6f 66 20 74 68 65 69 72 20 73 79 6d  nts of their sym
e2e0: 62 6f 6c 73 0a 20 20 20 20 20 20 20 20 20 20 20  bols.           
e2f0: 20 41 4e 44 20 20 20 20 43 49 2e 69 69 64 20 3d   AND    CI.iid =
e300: 20 54 2e 74 69 64 20 20 20 20 20 20 20 2d 2d 20   T.tid       -- 
e310: 53 65 6c 65 63 74 20 61 6c 6c 20 63 68 61 6e 67  Select all chang
e320: 65 73 65 74 73 0a 20 20 20 20 20 20 20 20 20 20  esets.          
e330: 20 20 41 4e 44 20 20 20 20 43 2e 63 69 64 20 3d    AND    C.cid =
e340: 20 43 49 2e 63 69 64 09 2d 2d 20 63 6f 6e 74 61   CI.cid.-- conta
e350: 69 6e 69 6e 67 20 74 68 65 20 73 75 62 6f 72 64  ining the subord
e360: 69 6e 61 74 65 20 74 61 67 73 0a 20 20 20 20 20  inate tags.     
e370: 20 20 20 20 20 20 20 41 4e 44 20 20 20 20 43 2e         AND    C.
e380: 74 79 70 65 20 3d 20 31 09 09 2d 2d 20 77 68 69  type = 1..-- whi
e390: 63 68 20 61 72 65 20 74 61 67 20 63 68 61 6e 67  ch are tag chang
e3a0: 65 73 65 74 73 0a 09 7d 5d 5d 0a 09 72 65 74 75  esets..}]]..retu
e3b0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  rn.    }..    # 
e3c0: 72 65 73 75 6c 74 20 3d 20 73 79 6d 62 6f 6c 20  result = symbol 
e3d0: 6e 61 6d 65 0a 20 20 20 20 74 79 70 65 6d 65 74  name.    typemet
e3e0: 68 6f 64 20 63 73 5f 6c 6f 64 20 7b 73 69 64 20  hod cs_lod {sid 
e3f0: 62 72 61 6e 63 68 65 73 7d 20 7b 0a 09 23 20 44  branches} {..# D
e400: 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 6e 61  etermines the na
e410: 6d 65 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c  me of the symbol
e420: 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 69   which is the li
e430: 6e 65 20 6f 66 0a 09 23 20 64 65 76 65 6c 6f 70  ne of..# develop
e440: 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 62 72 61  ment for the bra
e450: 6e 63 68 65 73 20 69 6e 20 61 20 63 68 61 6e 67  nches in a chang
e460: 65 73 65 74 2e 20 43 6f 6d 65 73 20 64 69 72 65  eset. Comes dire
e470: 63 74 6c 79 0a 09 23 20 66 72 6f 6d 20 74 68 65  ctly..# from the
e480: 20 73 79 6d 62 6f 6c 20 77 68 69 63 68 20 69 73   symbol which is
e490: 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 27 73   the changeset's
e4a0: 20 73 6f 75 72 63 65 20 61 6e 64 20 69 74 73 0a   source and its.
e4b0: 09 23 20 70 72 65 66 65 72 65 64 20 70 61 72 65  .# prefered pare
e4c0: 6e 74 2e 0a 0a 20 20 20 20 20 20 20 20 72 65 74  nt...        ret
e4d0: 75 72 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 7b  urn [state run {
e4e0: 0a 20 09 20 20 20 20 53 45 4c 45 43 54 20 50 2e  . .    SELECT P.
e4f0: 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 70  name..    FROM p
e500: 72 65 66 65 72 65 64 70 61 72 65 6e 74 20 53 50  referedparent SP
e510: 2c 20 73 79 6d 62 6f 6c 20 50 0a 09 20 20 20 20  , symbol P..    
e520: 57 48 45 52 45 20 53 50 2e 73 69 64 20 3d 20 24  WHERE SP.sid = $
e530: 73 69 64 0a 09 20 20 20 20 41 4e 44 20 20 20 50  sid..    AND   P
e540: 2e 73 69 64 20 3d 20 53 50 2e 70 69 64 0a 09 7d  .sid = SP.pid..}
e550: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  ].    }..    typ
e560: 65 6d 65 74 68 6f 64 20 6c 69 6d 69 74 73 20 7b  emethod limits {
e570: 62 72 61 6e 63 68 65 73 7d 20 7b 0a 09 23 20 4e  branches} {..# N
e580: 6f 74 65 73 2e 20 54 68 69 73 20 6d 65 74 68 6f  otes. This metho
e590: 64 20 65 78 69 73 74 73 20 6f 6e 6c 79 20 66 6f  d exists only fo
e5a0: 72 20 62 72 61 6e 63 68 65 73 2e 20 49 74 20 69  r branches. It i
e5b0: 73 20 6e 65 65 64 65 64 20 74 6f 0a 09 23 20 67  s needed to..# g
e5c0: 65 74 20 64 65 74 61 69 6c 65 64 20 69 6e 66 6f  et detailed info
e5d0: 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61 20  rmation about a 
e5e0: 62 61 63 6b 77 61 72 64 20 62 72 61 6e 63 68 2e  backward branch.
e5f0: 20 49 74 20 64 6f 65 73 0a 09 23 20 6e 6f 74 20   It does..# not 
e600: 61 70 70 6c 79 20 74 6f 20 74 61 67 73 2c 20 6e  apply to tags, n
e610: 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e 20 54 68  or revisions. Th
e620: 65 20 71 75 65 72 69 65 73 20 63 61 6e 20 61 6c  e queries can al
e630: 73 6f 0a 09 23 20 72 65 73 74 72 69 63 74 20 74  so..# restrict t
e640: 68 65 6d 73 65 6c 76 65 73 20 74 6f 20 74 68 65  hemselves to the
e650: 20 72 65 76 69 73 69 6f 6e 20 73 75 63 65 73 73   revision sucess
e660: 6f 72 73 2f 70 72 65 64 65 63 65 73 73 6f 72 73  ors/predecessors
e670: 0a 09 23 20 6f 66 20 62 72 61 6e 63 68 65 73 2c  ..# of branches,
e680: 20 61 73 20 6f 6e 6c 79 20 74 68 65 79 20 68 61   as only they ha
e690: 76 65 20 6f 72 64 65 72 69 6e 67 20 64 61 74 61  ve ordering data
e6a0: 20 61 6e 64 20 74 68 75 73 20 63 61 6e 0a 09 23   and thus can..#
e6b0: 20 63 61 75 73 65 20 74 68 65 20 62 61 63 6b 77   cause the backw
e6c0: 61 72 64 6e 65 73 73 2e 0a 0a 09 73 65 74 20 74  ardness....set t
e6d0: 68 65 73 65 74 20 28 27 5b 6a 6f 69 6e 20 24 62  heset ('[join $b
e6e0: 72 61 6e 63 68 65 73 20 7b 27 2c 27 7d 5d 27 29  ranches {','}]')
e6f0: 0a 0a 09 73 65 74 20 6d 61 78 70 20 5b 73 74 61  ...set maxp [sta
e700: 74 65 20 72 75 6e 20 5b 73 75 62 73 74 20 2d 6e  te run [subst -n
e710: 6f 63 6f 6d 6d 61 6e 64 73 20 2d 6e 6f 62 61 63  ocommands -nobac
e720: 6b 73 6c 61 73 68 65 73 20 7b 0a 09 20 20 20 20  kslashes {..    
e730: 2d 2d 20 6d 61 78 69 6d 61 6c 20 70 72 65 64 65  -- maximal prede
e740: 63 65 73 73 6f 72 20 70 6f 73 69 74 69 6f 6e 20  cessor position 
e750: 70 65 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20  per branch..    
e760: 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 4d 41  SELECT B.bid, MA
e770: 58 20 28 43 4f 2e 70 6f 73 29 0a 09 20 20 20 20  X (CO.pos)..    
e780: 46 52 4f 4d 20 20 20 62 72 61 6e 63 68 20 42 2c  FROM   branch B,
e790: 20 72 65 76 69 73 69 6f 6e 20 52 2c 20 63 73 69   revision R, csi
e7a0: 74 65 6d 20 43 49 2c 20 63 68 61 6e 67 65 73 65  tem CI, changese
e7b0: 74 20 43 2c 20 63 73 6f 72 64 65 72 20 43 4f 0a  t C, csorder CO.
e7c0: 09 20 20 20 20 57 48 45 52 45 20 20 42 2e 62 69  .    WHERE  B.bi
e7d0: 64 20 49 4e 20 24 74 68 65 73 65 74 20 20 20 20  d IN $theset    
e7e0: 20 2d 2d 20 52 65 73 74 72 69 63 74 20 74 6f 20   -- Restrict to 
e7f0: 62 72 61 6e 63 68 65 73 20 6f 66 20 69 6e 74 65  branches of inte
e800: 72 65 73 74 0a 09 20 20 20 20 41 4e 44 20 20 20  rest..    AND   
e810: 20 42 2e 72 6f 6f 74 20 3d 20 52 2e 72 69 64 20   B.root = R.rid 
e820: 20 20 20 20 20 20 2d 2d 20 47 65 74 20 62 72 61        -- Get bra
e830: 6e 63 68 20 72 6f 6f 74 20 72 65 76 69 73 69 6f  nch root revisio
e840: 6e 73 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43  ns..    AND    C
e850: 49 2e 69 69 64 20 3d 20 52 2e 72 69 64 20 20 20  I.iid = R.rid   
e860: 20 20 20 20 2d 2d 20 47 65 74 20 63 68 61 6e 67      -- Get chang
e870: 65 73 65 74 73 20 63 6f 6e 74 61 69 6e 69 6e 67  esets containing
e880: 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20 20 20   the..    AND   
e890: 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69 64 20   C.cid = CI.cid 
e8a0: 20 20 20 20 20 20 2d 2d 20 72 6f 6f 74 20 72 65        -- root re
e8b0: 76 69 73 69 6f 6e 73 2c 20 77 68 69 63 68 20 61  visions, which a
e8c0: 72 65 0a 09 20 20 20 20 41 4e 44 20 20 20 20 43  re..    AND    C
e8d0: 2e 74 79 70 65 20 3d 20 30 20 20 20 20 20 20 20  .type = 0       
e8e0: 20 20 20 20 2d 2d 20 72 65 76 69 73 69 6f 6e 20      -- revision 
e8f0: 63 68 61 6e 67 65 73 65 74 73 0a 09 20 20 20 20  changesets..    
e900: 41 4e 44 20 20 20 20 43 4f 2e 63 69 64 20 3d 20  AND    CO.cid = 
e910: 43 2e 63 69 64 20 20 20 20 20 20 20 2d 2d 20 47  C.cid       -- G
e920: 65 74 20 74 68 65 69 72 20 74 6f 70 6f 6c 6f 67  et their topolog
e930: 69 63 61 6c 20 6f 72 64 65 72 69 6e 67 0a 09 20  ical ordering.. 
e940: 20 20 20 47 52 4f 55 50 20 42 59 20 42 2e 62 69     GROUP BY B.bi
e950: 64 0a 09 7d 5d 5d 0a 0a 09 73 65 74 20 6d 69 6e  d..}]]...set min
e960: 73 20 5b 73 74 61 74 65 20 72 75 6e 20 5b 73 75  s [state run [su
e970: 62 73 74 20 2d 6e 6f 63 6f 6d 6d 61 6e 64 73 20  bst -nocommands 
e980: 2d 6e 6f 62 61 63 6b 73 6c 61 73 68 65 73 20 7b  -nobackslashes {
e990: 0a 09 20 20 20 20 2d 2d 20 6d 69 6e 69 6d 61 6c  ..    -- minimal
e9a0: 20 73 75 63 63 65 73 73 6f 72 20 70 6f 73 69 74   successor posit
e9b0: 69 6f 6e 20 70 65 72 20 62 72 61 6e 63 68 0a 09  ion per branch..
e9c0: 20 20 20 20 53 45 4c 45 43 54 20 42 2e 62 69 64      SELECT B.bid
e9d0: 2c 20 4d 49 4e 20 28 43 4f 2e 70 6f 73 29 0a 09  , MIN (CO.pos)..
e9e0: 20 20 20 20 46 52 4f 4d 20 20 20 62 72 61 6e 63      FROM   branc
e9f0: 68 20 42 2c 20 72 65 76 69 73 69 6f 6e 20 52 2c  h B, revision R,
ea00: 20 63 73 69 74 65 6d 20 43 49 2c 20 63 68 61 6e   csitem CI, chan
ea10: 67 65 73 65 74 20 43 2c 20 63 73 6f 72 64 65 72  geset C, csorder
ea20: 20 43 4f 0a 09 20 20 20 20 57 48 45 52 45 20 20   CO..    WHERE  
ea30: 42 2e 62 69 64 20 49 4e 20 24 74 68 65 73 65 74  B.bid IN $theset
ea40: 20 20 20 20 20 2d 2d 20 52 65 73 74 72 69 63 74       -- Restrict
ea50: 20 74 6f 20 62 72 61 6e 63 68 65 73 20 6f 66 20   to branches of 
ea60: 69 6e 74 65 72 65 73 74 0a 09 20 20 20 20 41 4e  interest..    AN
ea70: 44 20 20 20 20 42 2e 66 69 72 73 74 20 3d 20 52  D    B.first = R
ea80: 2e 72 69 64 20 20 20 20 20 20 2d 2d 20 47 65 74  .rid      -- Get
ea90: 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73   the first revis
eaa0: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 62 72 61 6e  ions on the bran
eab0: 63 68 65 73 0a 09 20 20 20 20 41 4e 44 20 20 20  ches..    AND   
eac0: 20 43 49 2e 69 69 64 20 3d 20 52 2e 72 69 64 20   CI.iid = R.rid 
ead0: 20 20 20 20 20 20 2d 2d 20 47 65 74 20 63 68 61        -- Get cha
eae0: 6e 67 65 73 65 74 73 20 63 6f 6e 74 61 69 6e 69  ngesets containi
eaf0: 6e 67 20 74 68 65 0a 09 20 20 20 20 41 4e 44 20  ng the..    AND 
eb00: 20 20 20 43 2e 63 69 64 20 3d 20 43 49 2e 63 69     C.cid = CI.ci
eb10: 64 09 2d 2d 20 66 69 72 73 74 20 72 65 76 69 73  d.-- first revis
eb20: 69 6f 6e 73 2c 20 77 68 69 63 68 20 61 72 65 0a  ions, which are.
eb30: 09 20 20 20 20 41 4e 44 20 20 20 20 43 2e 74 79  .    AND    C.ty
eb40: 70 65 20 3d 20 30 09 09 2d 2d 20 72 65 76 69 73  pe = 0..-- revis
eb50: 69 6f 6e 20 63 68 61 6e 67 65 73 65 74 73 0a 09  ion changesets..
eb60: 20 20 20 20 41 4e 44 20 20 20 20 43 4f 2e 63 69      AND    CO.ci
eb70: 64 20 3d 20 43 2e 63 69 64 09 2d 2d 20 47 65 74  d = C.cid.-- Get
eb80: 20 74 68 65 69 72 20 74 6f 70 6f 6c 6f 67 69 63   their topologic
eb90: 61 6c 20 6f 72 64 65 72 69 6e 67 0a 09 20 20 20  al ordering..   
eba0: 20 47 52 4f 55 50 20 42 59 20 42 2e 62 69 64 0a   GROUP BY B.bid.
ebb0: 09 7d 5d 5d 0a 0a 20 20 20 20 20 20 20 20 72 65  .}]]..        re
ebc0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 6d 61 78 70  turn [list $maxp
ebd0: 20 24 6d 69 6e 73 5d 0a 20 20 20 20 7d 0a 0a 20   $mins].    }.. 
ebe0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
ebf0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
ec00: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
ec10: 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a  # Configuration.
ec20: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73  .    pragma -has
ec30: 69 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f 20 3b  instances   no ;
ec40: 20 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 20 20   # singleton.   
ec50: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65   pragma -hastype
ec60: 69 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23 20 6e  info    no ; # n
ec70: 6f 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a  o introspection.
ec80: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74      pragma -hast
ec90: 79 70 65 64 65 73 74 72 6f 79 20 6e 6f 20 3b 20  ypedestroy no ; 
eca0: 23 20 69 6d 6d 6f 72 74 61 6c 0a 7d 0a 0a 23 20  # immortal.}..# 
ecb0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
ecc0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
ecd0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
ece0: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 0a 0a  ###########.##..
ecf0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
ed00: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
ed10: 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63  ort::cvs::projec
ed20: 74 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  t {.    namespac
ed30: 65 20 65 78 70 6f 72 74 20 72 65 76 0a 20 20 20  e export rev.   
ed40: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20   namespace eval 
ed50: 72 65 76 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65  rev {..namespace
ed60: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
ed70: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
ed80: 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70  s::state..namesp
ed90: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
eda0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
edb0: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a  :cvs::integrity.
edc0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
edd0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d  t ::vc::tools::m
ede0: 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63  isc::*..namespac
edf0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74  e import ::vc::t
ee00: 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e  ools::trouble..n
ee10: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
ee20: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67  ::vc::tools::log
ee30: 0a 09 6c 6f 67 20 72 65 67 69 73 74 65 72 20 63  ..log register c
ee40: 73 65 74 73 0a 0a 09 23 20 53 65 74 20 75 70 20  sets...# Set up 
ee50: 74 68 65 20 68 65 6c 70 65 72 20 73 69 6e 67 6c  the helper singl
ee60: 65 74 6f 6e 73 0a 09 6e 61 6d 65 73 70 61 63 65  etons..namespace
ee70: 20 65 76 61 6c 20 72 65 76 20 7b 0a 09 20 20 20   eval rev {..   
ee80: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72   namespace impor
ee90: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
eea0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61  import::cvs::sta
eeb0: 74 65 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63  te..    namespac
eec0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
eed0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
eee0: 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 20  vs::integrity.. 
eef0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70     namespace imp
ef00: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a  ort ::vc::tools:
ef10: 3a 6c 6f 67 0a 09 7d 0a 09 6e 61 6d 65 73 70 61  :log..}..namespa
ef20: 63 65 20 65 76 61 6c 20 73 79 6d 3a 3a 74 61 67  ce eval sym::tag
ef30: 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63   {..    namespac
ef40: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
ef50: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
ef60: 76 73 3a 3a 73 74 61 74 65 0a 09 20 20 20 20 6e  vs::state..    n
ef70: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
ef80: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
ef90: 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67  port::cvs::integ
efa0: 72 69 74 79 0a 09 20 20 20 20 6e 61 6d 65 73 70  rity..    namesp
efb0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
efc0: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 7d 0a 09  :tools::log..}..
efd0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 73  namespace eval s
efe0: 79 6d 3a 3a 62 72 61 6e 63 68 20 7b 0a 09 20 20  ym::branch {..  
eff0: 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f    namespace impo
f000: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  rt ::vc::fossil:
f010: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74  :import::cvs::st
f020: 61 74 65 0a 09 20 20 20 20 6e 61 6d 65 73 70 61  ate..    namespa
f030: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
f040: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
f050: 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09  cvs::integrity..
f060: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d      namespace im
f070: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73  port ::vc::tools
f080: 3a 3a 6c 6f 67 0a 09 7d 0a 20 20 20 20 7d 0a 7d  ::log..}.    }.}
f090: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
f0a0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
f0b0: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
f0c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
f0d0: 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67  ## Ready..packag
f0e0: 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f  e provide vc::fo
f0f0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
f100: 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 20  s::project::rev 
f110: 31 2e 30 0a 72 65 74 75 72 6e 0a                 1.0.return.