Artifact 38dafe8989e55aee0ffeaf0049391dc898bd2097:
File
tools/cvs2fossil/lib/c2f_prevlink.tcl
part of check-in
[47d52d1efd]
- Added convenience method for assertions and used it in place of the existing if/trouble internal constructions. Changed API of 'log write' so that we can defer substituation of the message to when the write actually happen, and converted all places which would be hit by double-substitution. The remaining 'log write' calls will be converted incrementally.
by
aku on
2007-11-28 05:39:49.
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 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69 07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65 tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69 d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20 SE, which.# you
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65 should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 ived as part of
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74 n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72 voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79 ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75 many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20 als. For exact
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73 contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65 tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79 vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66 able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23 com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 48 65 6c ########..## Hel
0200: 70 65 72 20 63 6c 61 73 73 20 66 6f 72 20 74 68 per class for th
0210: 65 20 70 61 73 73 20 36 20 63 79 63 6c 65 20 62 e pass 6 cycle b
0220: 72 65 61 6b 65 72 2e 20 45 61 63 68 20 69 6e 73 reaker. Each ins
0230: 74 61 6e 63 65 20 72 65 66 65 72 73 20 74 6f 0a tance refers to.
0240: 23 23 20 74 68 72 65 65 20 63 68 61 6e 67 65 73 ## three changes
0250: 65 74 73 20 41 2c 20 42 2c 20 61 6e 64 20 43 2c ets A, B, and C,
0260: 20 77 69 74 68 20 41 20 61 20 70 72 65 64 65 63 with A a predec
0270: 65 73 73 6f 72 20 6f 66 20 42 2c 20 61 6e 64 20 essor of B, and
0280: 42 0a 23 23 20 70 72 65 64 65 63 65 73 73 6f 72 B.## predecessor
0290: 20 6f 66 20 43 2c 20 61 6e 64 20 74 68 65 20 77 of C, and the w
02a0: 68 6f 6c 65 20 70 61 72 74 20 6f 66 20 61 20 64 hole part of a d
02b0: 65 70 65 6e 64 65 6e 63 79 20 63 79 63 6c 65 2e ependency cycle.
02c0: 0a 0a 23 23 20 49 6e 73 74 61 6e 63 65 73 20 61 ..## Instances a
02d0: 6e 61 6c 79 73 65 20 74 68 65 20 66 69 6c 65 20 nalyse the file
02e0: 6c 65 76 65 6c 20 64 65 70 65 6e 64 65 6e 63 69 level dependenci
02f0: 65 73 20 77 68 69 63 68 20 67 61 76 65 20 72 69 es which gave ri
0300: 73 65 20 74 6f 0a 23 23 20 74 68 65 20 63 68 61 se to.## the cha
0310: 6e 67 65 73 65 74 20 64 65 70 65 6e 64 65 6e 63 ngeset dependenc
0320: 69 65 73 20 6f 66 20 41 2c 20 42 2c 20 61 6e 64 ies of A, B, and
0330: 20 43 2c 20 77 69 74 68 20 74 68 65 20 72 65 73 C, with the res
0340: 75 6c 74 73 20 75 73 65 64 20 62 79 0a 23 23 20 ults used by.##
0350: 74 68 65 20 63 79 63 6c 65 20 62 72 65 61 6b 65 the cycle breake
0360: 72 20 61 6c 67 6f 72 69 74 68 6d 20 74 6f 20 66 r algorithm to f
0370: 69 6e 64 20 61 20 67 6f 6f 64 20 6c 6f 63 61 74 ind a good locat
0380: 69 6f 6e 20 77 68 65 72 65 20 74 6f 20 61 74 0a ion where to at.
0390: 23 23 20 6c 65 61 73 74 20 77 65 61 6b 65 6e 20 ## least weaken
03a0: 61 6e 64 20 61 74 20 62 65 73 74 20 66 75 6c 6c and at best full
03b0: 79 20 62 72 65 61 6b 20 74 68 65 20 63 79 63 6c y break the cycl
03c0: 65 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 e...# # ## ### #
03d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
03e0: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 ########### ####
03f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0400: 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 #.## Requirement
0410: 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 s..package requi
0420: 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 re Tcl 8.4
0430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0440: 20 20 20 20 20 20 20 20 20 3b 20 23 20 52 65 71 ; # Req
0450: 75 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 uired runtime..p
0460: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 ackage require s
0470: 6e 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20 nit
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0490: 20 20 20 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 ; # OO syst
04a0: 65 6d 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 em..package requ
04b0: 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d ire vc::tools::m
04c0: 69 73 63 20 20 20 20 20 20 20 20 20 20 20 20 20 isc
04d0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 54 65 ; # Te
04e0: 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a 70 61 xt formatting.pa
04f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 ckage require vc
0500: 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 ::tools::trouble
0510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0520: 20 20 20 20 3b 20 23 20 45 72 72 6f 72 20 72 65 ; # Error re
0530: 70 6f 72 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 porting..package
0540: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f require vc::too
0550: 6c 73 3a 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 ls::log
0560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ;
0570: 20 23 20 55 73 65 72 20 66 65 65 64 62 61 63 6b # User feedback
0580: 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 ..package requir
0590: 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d e vc::fossil::im
05a0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 port::cvs::state
05b0: 20 20 20 20 20 20 20 20 3b 20 23 20 53 74 61 74 ; # Stat
05c0: 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 6b 61 e storage..packa
05d0: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 ge require vc::f
05e0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
05f0: 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 20 20 20 vs::integrity
0600: 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74 65 67 ; # State integ
0610: 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 70 61 63 rity checks..pac
0620: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a kage require vc:
0630: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
0640: 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 :cvs::project::r
0650: 65 76 20 3b 20 23 20 50 72 6f 6a 65 63 74 20 6c ev ; # Project l
0660: 65 76 65 6c 20 63 68 61 6e 67 65 73 65 74 73 0a evel changesets.
0670: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 .# # ## ### ####
0680: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
0690: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
06a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 ##############.#
06b0: 23 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a #..snit::type ::
06c0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
06d0: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 rt::cvs::project
06e0: 3a 3a 72 65 76 6c 69 6e 6b 20 7b 0a 20 20 20 20 ::revlink {.
06f0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
0700: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
0710: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 50 #######. ## P
0720: 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 63 ublic API.. c
0730: 6f 6e 73 74 72 75 63 74 6f 72 20 7b 70 72 65 76 onstructor {prev
0740: 20 63 73 65 74 20 6e 65 78 74 7d 20 7b 0a 09 73 cset next} {..s
0750: 65 74 20 6d 79 70 72 65 76 20 24 70 72 65 76 0a et myprev $prev.
0760: 09 73 65 74 20 6d 79 63 73 65 74 20 24 63 73 65 .set mycset $cse
0770: 74 0a 09 73 65 74 20 6d 79 6e 65 78 74 20 24 6e t..set mynext $n
0780: 65 78 74 0a 0a 09 23 20 57 65 20 70 65 72 66 6f ext...# We perfo
0790: 72 6d 20 74 68 65 20 62 75 6c 6b 20 6f 66 20 74 rm the bulk of t
07a0: 68 65 20 61 6e 61 6c 79 73 69 73 20 64 75 72 69 he analysis duri
07b0: 6e 67 20 63 6f 6e 73 74 72 75 63 74 69 6f 6e 2e ng construction.
07c0: 20 54 68 65 0a 09 23 20 66 69 6c 65 20 72 65 76 The..# file rev
07d0: 69 73 69 6f 6e 73 20 68 65 6c 64 20 62 79 20 74 isions held by t
07e0: 68 65 20 63 68 61 6e 67 65 73 65 74 20 43 53 45 he changeset CSE
07f0: 54 20 63 61 6e 20 62 65 20 73 6f 72 74 65 64 20 T can be sorted
0800: 69 6e 74 6f 0a 09 23 20 66 6f 75 72 20 63 61 74 into..# four cat
0810: 65 67 6f 72 69 65 73 2e 0a 0a 09 23 20 31 2e 20 egories....# 1.
0820: 52 65 76 69 73 69 6f 6e 73 20 77 68 6f 73 65 20 Revisions whose
0830: 70 72 65 64 65 63 65 73 73 6f 72 73 20 61 72 65 predecessors are
0840: 20 6e 6f 74 20 69 6e 20 50 52 45 56 2c 20 6e 6f not in PREV, no
0850: 72 20 61 72 65 0a 09 23 20 20 20 20 74 68 65 69 r are..# thei
0860: 72 20 73 75 63 63 65 73 73 6f 72 73 20 66 6f 75 r successors fou
0870: 6e 64 20 69 6e 20 4e 45 58 54 2e 20 54 68 65 73 nd in NEXT. Thes
0880: 65 20 72 65 76 69 73 69 6f 6e 73 20 64 6f 20 6e e revisions do n
0890: 6f 74 0a 09 23 20 20 20 20 63 6f 75 6e 74 2c 20 ot..# count,
08a0: 61 73 20 74 68 65 79 20 64 69 64 20 6e 6f 74 20 as they did not
08b0: 69 6e 64 75 63 65 20 61 6e 79 20 6f 66 20 74 68 induce any of th
08c0: 65 20 74 77 6f 20 64 65 70 65 6e 64 65 6e 63 69 e two dependenci
08d0: 65 73 0a 09 23 20 20 20 20 75 6e 64 65 72 20 63 es..# under c
08e0: 6f 6e 73 69 64 65 72 61 74 69 6f 6e 2e 20 54 68 onsideration. Th
08f0: 65 79 20 63 61 6e 20 62 65 20 69 67 6e 6f 72 65 ey can be ignore
0900: 64 2e 0a 0a 09 23 20 32 2e 20 52 65 76 69 73 69 d....# 2. Revisi
0910: 6f 6e 73 20 77 68 69 63 68 20 68 61 76 65 20 70 ons which have p
0920: 72 65 64 65 63 65 73 73 6f 72 73 20 69 6e 20 50 redecessors in P
0930: 52 45 56 20 61 6e 64 20 73 75 63 65 73 73 6f 72 REV and sucessor
0940: 73 0a 09 23 20 20 20 20 69 6e 20 4e 45 58 54 2e s..# in NEXT.
0950: 20 54 68 65 79 20 61 72 65 20 63 61 6c 6c 65 64 They are called
0960: 20 27 70 61 73 73 74 68 72 6f 75 67 68 27 20 69 'passthrough' i
0970: 6e 20 63 76 73 32 73 76 6e 2e 20 54 68 65 79 0a n cvs2svn. They.
0980: 09 23 20 20 20 20 69 6e 64 75 63 65 20 62 6f 74 .# induce bot
0990: 68 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 75 h dependencies u
09a0: 6e 64 65 72 20 63 6f 6e 73 69 64 65 72 61 74 69 nder considerati
09b0: 6f 6e 20 61 6e 64 20 61 72 65 20 74 68 75 73 0a on and are thus.
09c0: 09 23 20 20 20 20 63 72 69 74 69 63 61 6c 20 69 .# critical i
09d0: 6e 20 74 68 65 20 63 72 65 61 74 69 6f 6e 20 6f n the creation o
09e0: 66 20 74 68 65 20 63 79 63 6c 65 2e 20 41 73 20 f the cycle. As
09f0: 73 75 63 68 20 74 68 65 79 20 61 72 65 0a 09 23 such they are..#
0a00: 20 20 20 20 61 6c 73 6f 20 75 6e 62 72 65 61 6b also unbreak
0a10: 61 62 6c 65 20 3a 28 0a 0a 09 23 20 33 2e 20 52 able :(...# 3. R
0a20: 65 76 69 73 69 6f 6e 73 20 77 68 69 63 68 20 68 evisions which h
0a30: 61 76 65 20 70 72 65 64 65 63 65 73 73 6f 72 20 ave predecessor
0a40: 69 6e 20 50 52 45 56 45 2c 20 62 75 74 20 6e 6f in PREVE, but no
0a50: 0a 09 23 20 20 20 20 73 75 63 63 65 73 73 6f 72 ..# successor
0a60: 73 20 69 6e 20 4e 45 58 54 2e 20 41 73 20 73 75 s in NEXT. As su
0a70: 63 68 20 74 68 65 79 20 69 6e 64 75 63 65 64 20 ch they induced
0a80: 74 68 65 20 69 6e 63 6f 6d 69 6e 67 0a 09 23 20 the incoming..#
0a90: 20 20 20 64 65 70 65 6e 64 65 6e 63 79 2c 20 62 dependency, b
0aa0: 75 74 20 6e 6f 74 20 74 68 65 20 6f 75 74 67 6f ut not the outgo
0ab0: 69 6e 67 20 6f 6e 65 2e 0a 0a 09 23 20 34 2e 20 ing one....# 4.
0ac0: 52 65 76 69 73 69 6f 6e 73 20 77 68 69 63 68 20 Revisions which
0ad0: 68 61 76 65 20 6e 6f 20 70 72 65 64 65 63 65 73 have no predeces
0ae0: 73 6f 72 73 20 69 6e 20 50 52 45 56 45 2c 20 62 sors in PREVE, b
0af0: 75 74 20 74 68 65 69 72 0a 09 23 20 20 20 20 73 ut their..# s
0b00: 75 63 63 65 73 73 6f 72 73 20 61 72 65 20 69 6e uccessors are in
0b10: 20 4e 45 58 54 2e 20 41 73 20 73 75 63 68 20 74 NEXT. As such t
0b20: 68 65 79 20 69 6e 64 75 63 65 64 20 74 68 65 20 hey induced the
0b30: 6f 75 74 67 6f 69 6e 67 0a 09 23 20 20 20 20 64 outgoing..# d
0b40: 65 70 65 6e 64 65 6e 63 79 2c 20 62 75 74 20 6e ependency, but n
0b50: 6f 74 20 74 68 65 20 69 6e 63 6f 6d 69 6e 67 20 ot the incoming
0b60: 6f 6e 65 2e 0a 0a 09 23 20 49 66 20 77 65 20 68 one....# If we h
0b70: 61 76 65 20 6e 6f 20 70 61 73 73 74 68 72 6f 75 ave no passthrou
0b80: 67 68 20 72 65 76 69 73 69 6f 6e 73 20 74 68 65 gh revisions the
0b90: 6e 20 73 70 6c 69 74 74 69 6e 67 20 74 68 65 0a n splitting the.
0ba0: 09 23 20 63 68 61 6e 67 65 73 65 74 20 62 65 74 .# changeset bet
0bb0: 77 65 65 6e 20 63 61 74 65 67 6f 72 69 65 73 20 ween categories
0bc0: 33 20 61 6e 64 20 34 2c 20 77 69 74 68 20 63 61 3 and 4, with ca
0bd0: 74 65 67 6f 72 79 20 31 20 67 6f 69 6e 67 0a 09 tegory 1 going..
0be0: 23 20 77 68 65 72 65 76 65 72 2c 20 77 69 6c 6c # wherever, will
0bf0: 20 62 72 65 61 6b 20 74 68 65 20 63 79 63 6c 65 break the cycle
0c00: 2e 20 49 66 20 63 61 74 65 67 6f 72 79 20 32 20 . If category 2
0c10: 72 65 76 69 73 69 6f 6e 73 20 61 72 65 0a 09 23 revisions are..#
0c20: 20 70 72 65 73 65 6e 74 20 77 65 20 63 61 6e 20 present we can
0c30: 73 74 69 6c 6c 20 70 65 72 66 6f 72 6d 20 74 68 still perform th
0c40: 65 20 73 70 6c 69 74 2c 20 74 68 69 73 20 77 69 e split, this wi
0c50: 6c 6c 20 68 6f 77 65 76 65 72 0a 09 23 20 6e 6f ll however..# no
0c60: 74 20 62 72 65 61 6b 20 74 68 65 20 63 79 63 6c t break the cycl
0c70: 65 2c 20 6f 6e 6c 79 20 77 65 61 6b 65 6e 20 69 e, only weaken i
0c80: 74 2e 0a 0a 09 61 72 72 61 79 20 73 65 74 20 63 t....array set c
0c90: 73 65 74 70 72 65 76 6d 61 70 20 5b 49 6e 76 65 setprevmap [Inve
0ca0: 72 74 20 5b 24 6d 79 70 72 65 76 20 6e 65 78 74 rt [$myprev next
0cb0: 6d 61 70 5d 5d 0a 09 61 72 72 61 79 20 73 65 74 map]]..array set
0cc0: 20 63 73 65 74 6e 65 78 74 6d 61 70 20 5b 24 6d csetnextmap [$m
0cd0: 79 63 73 65 74 20 6e 65 78 74 6d 61 70 5d 0a 0a ycset nextmap]..
0ce0: 09 73 65 74 20 70 72 65 76 72 65 76 20 5b 24 6d .set prevrev [$m
0cf0: 79 70 72 65 76 20 72 65 76 69 73 69 6f 6e 73 5d yprev revisions]
0d00: 0a 09 73 65 74 20 6e 65 78 74 72 65 76 20 5b 24 ..set nextrev [$
0d10: 6d 79 6e 65 78 74 20 72 65 76 69 73 69 6f 6e 73 mynext revisions
0d20: 5d 0a 0a 09 66 6f 72 65 61 63 68 20 72 20 5b 24 ]...foreach r [$
0d30: 6d 79 63 73 65 74 20 72 65 76 69 73 69 6f 6e 73 mycset revisions
0d40: 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72 74 20 ] {.. set rt
0d50: 5b 52 54 20 24 72 5d 0a 09 20 20 20 20 69 6e 63 [RT $r].. inc
0d60: 72 20 20 20 20 6d 79 63 6f 75 6e 74 28 24 72 74 r mycount($rt
0d70: 29 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d ).. lappend m
0d80: 79 63 61 74 65 67 6f 72 79 28 24 72 74 29 20 24 ycategory($rt) $
0d90: 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 r..}..return.
0da0: 20 7d 0a 0a 20 20 20 20 23 20 52 65 73 75 6c 74 }.. # Result
0db0: 20 69 73 20 54 52 55 45 20 69 66 20 61 6e 64 20 is TRUE if and
0dc0: 6f 6e 6c 79 20 62 72 65 61 6b 69 6e 67 20 6d 79 only breaking my
0dd0: 73 65 74 20 77 69 6c 6c 20 64 6f 20 73 6f 6d 65 set will do some
0de0: 20 67 6f 6f 64 2e 0a 20 20 20 20 6d 65 74 68 6f good.. metho
0df0: 64 20 62 72 65 61 6b 61 62 6c 65 20 7b 7d 20 7b d breakable {} {
0e00: 20 65 78 70 72 20 20 7b 24 6d 79 63 6f 75 6e 74 expr {$mycount
0e10: 28 70 72 65 76 29 20 7c 7c 20 24 6d 79 63 6f 75 (prev) || $mycou
0e20: 6e 74 28 6e 65 78 74 29 7d 20 7d 0a 20 20 20 20 nt(next)} }.
0e30: 6d 65 74 68 6f 64 20 70 61 73 73 63 6f 75 6e 74 method passcount
0e40: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 {} { return $my
0e50: 63 6f 75 6e 74 28 70 61 73 73 29 20 7d 0a 0a 20 count(pass) }..
0e60: 20 20 20 6d 65 74 68 6f 64 20 6c 69 6e 6b 73 74 method linkst
0e70: 6f 6d 6f 76 65 20 7b 7d 20 7b 0a 09 23 20 52 65 omove {} {..# Re
0e80: 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 turn the number
0e90: 6f 66 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61 of revisions tha
0ea0: 74 20 77 6f 75 6c 64 20 62 65 20 6d 6f 76 65 64 t would be moved
0eb0: 20 73 68 6f 75 6c 64 20 77 65 0a 09 23 20 73 70 should we..# sp
0ec0: 6c 69 74 20 74 68 65 20 63 68 61 6e 67 65 73 65 lit the changese
0ed0: 74 2e 0a 0a 09 73 65 74 20 6e 20 5b 6d 69 6e 32 t....set n [min2
0ee0: 20 24 6d 79 63 6f 75 6e 74 28 70 72 65 76 29 20 $mycount(prev)
0ef0: 24 6d 79 63 6f 75 6e 74 28 6e 65 78 74 29 5d 0a $mycount(next)].
0f00: 09 69 66 20 7b 24 6e 20 3e 20 30 20 7d 20 7b 20 .if {$n > 0 } {
0f10: 72 65 74 75 72 6e 20 24 6e 20 7d 0a 09 72 65 74 return $n }..ret
0f20: 75 72 6e 20 5b 6d 61 78 32 20 24 6d 79 63 6f 75 urn [max2 $mycou
0f30: 6e 74 28 70 72 65 76 29 20 24 6d 79 63 6f 75 6e nt(prev) $mycoun
0f40: 74 28 6e 65 78 74 29 5d 0a 20 20 20 20 7d 0a 0a t(next)]. }..
0f50: 20 20 20 20 6d 65 74 68 6f 64 20 62 65 74 74 65 method bette
0f60: 72 74 68 61 6e 20 7b 6f 74 68 65 72 7d 20 7b 0a rthan {other} {.
0f70: 09 73 65 74 20 73 62 72 65 61 6b 20 5b 24 73 65 .set sbreak [$se
0f80: 6c 66 20 20 62 72 65 61 6b 61 62 6c 65 5d 0a 09 lf breakable]..
0f90: 73 65 74 20 6f 62 72 65 61 6b 20 5b 24 6f 74 68 set obreak [$oth
0fa0: 65 72 20 62 72 65 61 6b 61 62 6c 65 5d 0a 0a 09 er breakable]...
0fb0: 69 66 20 7b 24 73 62 72 65 61 6b 20 26 26 20 21 if {$sbreak && !
0fc0: 24 6f 62 72 65 61 6b 7d 20 7b 20 72 65 74 75 72 $obreak} { retur
0fd0: 6e 20 31 20 7d 20 3b 20 23 20 73 65 6c 66 20 69 n 1 } ; # self i
0fe0: 73 20 62 65 74 74 65 72 2e 0a 09 69 66 20 7b 21 s better...if {!
0ff0: 24 73 62 72 65 61 6b 20 26 26 20 24 6f 62 72 65 $sbreak && $obre
1000: 61 6b 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 7d ak} { return 0 }
1010: 20 3b 20 23 20 73 65 6c 66 20 69 73 20 77 6f 72 ; # self is wor
1020: 73 65 2e 0a 0a 09 23 20 45 71 75 61 6c 69 74 79 se....# Equality
1030: 2e 20 4c 6f 6f 6b 20 61 74 20 74 68 65 20 63 6f . Look at the co
1040: 75 6e 74 65 72 73 2e 0a 09 23 20 2d 20 57 68 69 unters...# - Whi
1050: 63 68 65 76 65 72 20 68 61 73 20 74 68 65 20 6c chever has the l
1060: 65 73 73 65 72 20 6e 75 6d 62 65 72 20 6f 66 20 esser number of
1070: 70 61 73 73 74 68 72 6f 75 67 68 20 72 65 76 69 passthrough revi
1080: 73 69 6f 6e 73 0a 09 23 20 20 20 69 73 20 62 65 sions..# is be
1090: 74 74 65 72 2c 20 61 73 20 6d 6f 72 65 20 63 61 tter, as more ca
10a0: 6e 20 62 65 20 73 70 6c 69 74 20 6f 66 66 2c 20 n be split off,
10b0: 77 65 61 6b 65 6e 69 6e 67 20 74 68 65 20 63 79 weakening the cy
10c0: 63 6c 65 0a 09 23 20 20 20 6d 6f 72 65 2e 0a 09 cle..# more...
10d0: 23 20 2d 20 57 68 69 63 68 65 76 65 72 20 68 61 # - Whichever ha
10e0: 73 20 6c 65 73 73 20 6c 69 6e 6b 73 20 74 6f 20 s less links to
10f0: 6d 6f 76 65 20 69 73 20 62 65 74 74 65 72 2e 0a move is better..
1100: 0a 09 73 65 74 20 6f 70 61 73 73 20 5b 24 6f 74 ..set opass [$ot
1110: 68 65 72 20 70 61 73 73 63 6f 75 6e 74 5d 0a 09 her passcount]..
1120: 69 66 20 7b 24 6d 79 63 6f 75 6e 74 28 70 61 73 if {$mycount(pas
1130: 73 29 20 3c 20 24 6f 70 61 73 73 7d 20 7b 20 72 s) < $opass} { r
1140: 65 74 75 72 6e 20 31 20 7d 20 3b 20 23 20 73 65 eturn 1 } ; # se
1150: 6c 66 20 69 73 20 62 65 74 74 65 72 2e 0a 09 69 lf is better...i
1160: 66 20 7b 24 6d 79 63 6f 75 6e 74 28 70 61 73 73 f {$mycount(pass
1170: 29 20 3e 20 24 6f 70 61 73 73 7d 20 7b 20 72 65 ) > $opass} { re
1180: 74 75 72 6e 20 30 20 7d 20 3b 20 23 20 73 65 6c turn 0 } ; # sel
1190: 66 20 69 73 20 77 6f 72 73 65 2e 0a 0a 09 73 65 f is worse....se
11a0: 74 20 73 6d 6f 76 65 20 5b 24 73 65 6c 66 20 20 t smove [$self
11b0: 6c 69 6e 6b 73 74 6f 6d 6f 76 65 5d 0a 09 73 65 linkstomove]..se
11c0: 74 20 6f 6d 6f 76 65 20 5b 24 6f 74 68 65 72 20 t omove [$other
11d0: 6c 69 6e 6b 73 74 6f 6d 6f 76 65 5d 0a 0a 09 69 linkstomove]...i
11e0: 66 20 7b 24 73 6d 6f 76 65 20 3c 20 24 6f 6d 6f f {$smove < $omo
11f0: 76 65 7d 20 7b 20 72 65 74 75 72 6e 20 31 20 7d ve} { return 1 }
1200: 20 3b 20 23 20 73 65 6c 66 20 69 73 20 62 65 74 ; # self is bet
1210: 74 65 72 2e 0a 0a 09 72 65 74 75 72 6e 20 30 20 ter....return 0
1220: 3b 20 23 20 53 65 6c 66 20 69 73 20 77 6f 72 73 ; # Self is wors
1230: 65 20 6f 72 20 65 71 75 61 6c 2c 20 69 2e 65 2e e or equal, i.e.
1240: 20 6e 6f 74 20 62 65 74 74 65 72 2e 0a 20 20 20 not better..
1250: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 62 }.. method b
1260: 72 65 61 6b 20 7b 7d 20 7b 0a 09 69 6e 74 65 67 reak {} {..integ
1270: 72 69 74 79 20 61 73 73 65 72 74 20 7b 5b 24 73 rity assert {[$s
1280: 65 6c 66 20 62 72 65 61 6b 61 62 6c 65 5d 7d 20 elf breakable]}
1290: 7b 43 68 61 6e 67 65 73 65 74 20 5b 24 6d 79 63 {Changeset [$myc
12a0: 73 65 74 20 73 74 72 5d 20 69 73 20 6e 6f 74 20 set str] is not
12b0: 62 72 65 61 6b 61 62 6c 65 2e 7d 0a 0a 09 23 20 breakable.}...#
12c0: 4f 6e 65 20 74 68 69 6e 67 20 74 6f 20 63 68 6f One thing to cho
12d0: 6f 73 65 20 77 68 65 6e 20 73 70 6c 69 74 74 69 ose when splitti
12e0: 6e 67 20 43 53 45 54 20 69 73 20 77 68 65 72 65 ng CSET is where
12f0: 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e the..# revision
1300: 20 69 6e 20 63 61 74 65 67 6f 72 69 65 73 20 31 in categories 1
1310: 20 61 6e 64 20 32 20 28 6e 6f 6e 65 20 61 6e 64 and 2 (none and
1320: 20 70 61 73 73 74 68 72 6f 75 67 68 0a 09 23 20 passthrough..#
1330: 72 65 73 70 65 63 74 69 76 65 6c 79 29 20 61 72 respectively) ar
1340: 65 20 6d 6f 76 65 64 20 74 6f 2e 20 54 68 69 73 e moved to. This
1350: 20 69 73 20 64 6f 6e 65 20 75 73 69 6e 67 20 74 is done using t
1360: 68 65 20 63 6f 75 6e 74 65 72 73 2e 0a 0a 09 69 he counters....i
1370: 66 20 7b 21 24 6d 79 63 6f 75 6e 74 28 70 72 65 f {!$mycount(pre
1380: 76 29 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 74 v)} {.. # Not
1390: 68 69 6e 67 20 69 6e 20 63 61 74 65 67 6f 72 79 hing in category
13a0: 20 33 20 3d 3e 20 31 2c 32 20 67 6f 20 74 68 65 3 => 1,2 go the
13b0: 72 65 2c 20 34 20 74 68 65 20 6f 74 68 65 72 2e re, 4 the other.
13c0: 0a 09 20 20 20 20 73 65 74 20 6d 79 63 61 74 65 .. set mycate
13d0: 67 6f 72 79 28 70 72 65 76 29 20 5b 63 6f 6e 63 gory(prev) [conc
13e0: 61 74 20 24 6d 79 63 61 74 65 67 6f 72 79 28 6e at $mycategory(n
13f0: 6f 6e 65 29 20 24 6d 79 63 61 74 65 67 6f 72 79 one) $mycategory
1400: 28 70 61 73 73 29 5d 0a 09 7d 20 65 6c 73 65 69 (pass)]..} elsei
1410: 66 20 7b 21 24 6d 79 63 6f 75 6e 74 28 6e 65 78 f {!$mycount(nex
1420: 74 29 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 74 t)} {.. # Not
1430: 68 69 6e 67 20 69 6e 20 63 61 74 65 67 6f 72 79 hing in category
1440: 20 34 20 3d 3e 20 31 2c 32 20 67 6f 20 74 68 65 4 => 1,2 go the
1450: 72 65 2c 20 33 20 74 68 65 20 6f 74 68 65 72 2e re, 3 the other.
1460: 0a 09 20 20 20 20 73 65 74 20 6d 79 63 61 74 65 .. set mycate
1470: 67 6f 72 79 28 6e 65 78 74 29 20 5b 63 6f 6e 63 gory(next) [conc
1480: 61 74 20 24 6d 79 63 61 74 65 67 6f 72 79 28 6e at $mycategory(n
1490: 6f 6e 65 29 20 24 6d 79 63 61 74 65 67 6f 72 79 one) $mycategory
14a0: 28 70 61 73 73 29 5d 0a 09 7d 20 65 6c 73 65 69 (pass)]..} elsei
14b0: 66 20 7b 24 6d 79 63 6f 75 6e 74 28 70 72 65 76 f {$mycount(prev
14c0: 29 20 3c 20 24 6d 79 63 6f 75 6e 74 28 6e 65 78 ) < $mycount(nex
14d0: 74 29 7d 20 7b 0a 09 20 20 20 20 23 20 4c 65 73 t)} {.. # Les
14e0: 73 20 70 72 65 64 65 63 65 73 73 6f 72 73 20 74 s predecessors t
14f0: 68 61 6e 20 73 75 63 63 65 73 73 6f 72 73 20 3d han successors =
1500: 3e 20 31 2c 32 20 67 6f 20 74 6f 20 74 68 65 0a > 1,2 go to the.
1510: 09 20 20 20 20 23 20 73 75 63 65 73 73 6f 72 73 . # sucessors
1520: 2e 0a 09 20 20 20 20 73 65 74 20 6d 79 63 61 74 ... set mycat
1530: 65 67 6f 72 79 28 6e 65 78 74 29 20 5b 63 6f 6e egory(next) [con
1540: 63 61 74 20 24 6d 79 63 61 74 65 67 6f 72 79 28 cat $mycategory(
1550: 6e 65 78 74 29 20 24 6d 79 63 61 74 65 67 6f 72 next) $mycategor
1560: 79 28 6e 6f 6e 65 29 20 5c 0a 09 09 09 09 20 20 y(none) \.....
1570: 20 20 20 20 24 6d 79 63 61 74 65 67 6f 72 79 28 $mycategory(
1580: 70 61 73 73 29 5d 0a 09 7d 20 65 6c 73 65 20 7b pass)]..} else {
1590: 0a 09 20 20 20 20 23 20 4c 65 73 73 20 73 75 63 .. # Less suc
15a0: 63 65 73 73 6f 72 73 20 74 68 61 6e 20 70 72 65 cessors than pre
15b0: 64 65 63 65 73 73 6f 72 73 20 3d 3e 20 31 2c 32 decessors => 1,2
15c0: 20 67 6f 20 74 6f 20 74 68 65 0a 09 20 20 20 20 go to the..
15d0: 23 20 70 72 65 64 65 63 65 73 73 6f 72 73 2e 0a # predecessors..
15e0: 09 20 20 20 20 73 65 74 20 6d 79 63 61 74 65 67 . set mycateg
15f0: 6f 72 79 28 6e 65 78 74 29 20 5b 63 6f 6e 63 61 ory(next) [conca
1600: 74 20 24 6d 79 63 61 74 65 67 6f 72 79 28 6e 65 t $mycategory(ne
1610: 78 74 29 20 24 6d 79 63 61 74 65 67 6f 72 79 28 xt) $mycategory(
1620: 6e 6f 6e 65 29 20 5c 0a 09 09 09 09 20 20 20 20 none) \.....
1630: 20 20 24 6d 79 63 61 74 65 67 6f 72 79 28 70 61 $mycategory(pa
1640: 73 73 29 5d 0a 09 7d 0a 0a 09 23 20 57 65 20 6e ss)]..}...# We n
1650: 6f 77 20 68 61 76 65 20 74 68 65 20 72 65 76 69 ow have the revi
1660: 73 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 74 77 sions for the tw
1670: 6f 20 66 72 61 67 6d 65 6e 74 73 20 74 6f 20 62 o fragments to b
1680: 65 20 69 6e 20 74 68 65 0a 09 23 20 28 70 72 65 e in the..# (pre
1690: 76 7c 6e 65 78 74 29 20 65 6c 65 6d 65 6e 74 73 v|next) elements
16a0: 20 6f 66 20 6d 79 63 61 74 65 67 6f 72 79 2e 0a of mycategory..
16b0: 0a 09 72 65 74 75 72 6e 20 5b 70 72 6f 6a 65 63 ..return [projec
16c0: 74 3a 3a 72 65 76 20 73 70 6c 69 74 20 24 6d 79 t::rev split $my
16d0: 63 73 65 74 20 24 6d 79 63 61 74 65 67 6f 72 79 cset $mycategory
16e0: 28 70 72 65 76 29 20 24 6d 79 63 61 74 65 67 6f (prev) $mycatego
16f0: 72 79 28 6e 65 78 74 29 5d 0a 20 20 20 20 7d 0a ry(next)]. }.
1700: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
1710: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
1720: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 ############.
1730: 20 23 23 20 53 74 61 74 65 0a 0a 20 20 20 20 76 ## State.. v
1740: 61 72 69 61 62 6c 65 20 6d 79 70 72 65 76 20 7b ariable myprev {
1750: 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 } ; # Reference
1760: 74 6f 20 70 72 65 64 65 63 65 73 73 6f 72 20 63 to predecessor c
1770: 68 61 6e 67 65 73 65 74 20 69 6e 20 74 68 65 20 hangeset in the
1780: 6c 69 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62 link.. variab
1790: 6c 65 20 6d 79 63 73 65 74 20 7b 7d 20 3b 20 23 le mycset {} ; #
17a0: 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 Reference to th
17b0: 65 20 6d 61 69 6e 20 63 68 61 6e 67 65 73 65 74 e main changeset
17c0: 20 6f 66 20 74 68 65 20 6c 69 6e 6b 2e 0a 20 20 of the link..
17d0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6e 65 78 variable mynex
17e0: 74 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e t {} ; # Referen
17f0: 63 65 20 74 6f 20 74 68 65 20 73 75 63 63 65 73 ce to the succes
1800: 73 6f 72 20 63 68 61 6e 67 65 73 65 74 20 69 6e sor changeset in
1810: 20 74 68 65 20 6c 69 6e 6b 2e 0a 0a 20 20 20 20 the link...
1820: 23 20 43 6f 75 6e 74 65 72 73 20 66 6f 72 20 74 # Counters for t
1830: 68 65 20 72 65 76 69 73 69 6f 6e 20 63 61 74 65 he revision cate
1840: 67 6f 72 69 65 73 2e 0a 20 20 20 20 76 61 72 69 gories.. vari
1850: 61 62 6c 65 20 6d 79 63 6f 75 6e 74 20 2d 61 72 able mycount -ar
1860: 72 61 79 20 7b 0a 09 6e 6f 6e 65 20 30 0a 09 70 ray {..none 0..p
1870: 72 65 76 20 30 0a 09 6e 65 78 74 20 30 0a 09 70 rev 0..next 0..p
1880: 61 73 73 20 30 0a 20 20 20 20 7d 0a 20 20 20 20 ass 0. }.
1890: 23 20 4c 69 73 74 73 20 6f 66 20 72 65 76 69 73 # Lists of revis
18a0: 69 6f 6e 73 20 66 6f 72 20 74 68 65 20 76 61 72 ions for the var
18b0: 69 6f 75 73 20 63 61 74 65 67 6f 72 69 65 73 0a ious categories.
18c0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 63 variable myc
18d0: 61 74 65 67 6f 72 79 20 2d 61 72 72 61 79 20 7b ategory -array {
18e0: 0a 09 6e 6f 6e 65 20 7b 7d 0a 09 70 72 65 76 20 ..none {}..prev
18f0: 7b 7d 0a 09 6e 65 78 74 20 7b 7d 0a 09 70 61 73 {}..next {}..pas
1900: 73 20 7b 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 s {}. }..
1910: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
1920: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
1930: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 #######. ## I
1940: 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a nternal methods.
1950: 0a 20 20 20 20 70 72 6f 63 20 52 54 20 7b 72 7d . proc RT {r}
1960: 20 7b 0a 09 75 70 76 61 72 20 31 20 63 73 65 74 {..upvar 1 cset
1970: 70 72 65 76 6d 61 70 20 63 73 65 74 70 72 65 76 prevmap csetprev
1980: 6d 61 70 20 63 73 65 74 6e 65 78 74 6d 61 70 20 map csetnextmap
1990: 63 73 65 74 6e 65 78 74 6d 61 70 20 70 72 65 76 csetnextmap prev
19a0: 72 65 76 20 70 72 65 76 72 65 76 20 6e 65 78 74 rev prevrev next
19b0: 72 65 76 20 6e 65 78 74 72 65 76 0a 0a 09 73 65 rev nextrev...se
19c0: 74 20 69 6e 63 09 5b 65 78 70 72 20 7b 5b 69 6e t inc.[expr {[in
19d0: 66 6f 20 65 78 69 73 74 73 20 63 73 65 74 70 72 fo exists csetpr
19e0: 65 76 6d 61 70 28 24 72 29 5d 0a 09 09 20 20 20 evmap($r)]...
19f0: 20 20 20 20 3f 20 5b 73 74 72 75 63 74 3a 3a 73 ? [struct::s
1a00: 65 74 20 73 69 7a 65 20 5b 73 74 72 75 63 74 3a et size [struct:
1a10: 3a 73 65 74 20 69 6e 74 65 72 73 65 63 74 20 24 :set intersect $
1a20: 63 73 65 74 70 72 65 76 6d 61 70 28 24 72 29 20 csetprevmap($r)
1a30: 24 70 72 65 76 72 65 76 5d 5d 0a 09 09 20 20 20 $prevrev]]...
1a40: 20 20 20 20 3a 20 30 7d 5d 0a 09 73 65 74 20 6f : 0}]..set o
1a50: 75 74 20 5b 65 78 70 72 20 7b 5b 69 6e 66 6f 20 ut [expr {[info
1a60: 65 78 69 73 74 73 20 63 73 65 74 6e 65 78 74 6d exists csetnextm
1a70: 61 70 28 24 72 29 5d 0a 09 09 20 20 20 20 20 20 ap($r)]...
1a80: 20 3f 20 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 ? [struct::set
1a90: 73 69 7a 65 20 5b 73 74 72 75 63 74 3a 3a 73 65 size [struct::se
1aa0: 74 20 69 6e 74 65 72 73 65 63 74 20 24 63 73 65 t intersect $cse
1ab0: 74 6e 65 78 74 6d 61 70 28 24 72 29 20 24 6e 65 tnextmap($r) $ne
1ac0: 78 74 72 65 76 5d 5d 0a 09 09 20 20 20 20 20 20 xtrev]]...
1ad0: 20 3a 20 30 7d 5d 0a 0a 09 69 66 20 7b 24 69 6e : 0}]...if {$in
1ae0: 63 20 26 26 20 24 6f 75 74 7d 20 7b 20 72 65 74 c && $out} { ret
1af0: 75 72 6e 20 70 61 73 73 20 7d 0a 09 69 66 20 7b urn pass }..if {
1b00: 24 69 6e 63 7d 20 20 20 20 20 20 20 20 20 7b 20 $inc} {
1b10: 72 65 74 75 72 6e 20 70 72 65 76 20 7d 0a 09 69 return prev }..i
1b20: 66 20 7b 24 6f 75 74 7d 20 20 20 20 20 20 20 20 f {$out}
1b30: 20 7b 20 72 65 74 75 72 6e 20 6e 65 78 74 20 7d { return next }
1b40: 0a 09 72 65 74 75 72 6e 20 6e 6f 6e 65 0a 20 20 ..return none.
1b50: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 49 6e }.. proc In
1b60: 76 65 72 74 20 7b 64 69 63 74 7d 20 7b 0a 09 61 vert {dict} {..a
1b70: 72 72 61 79 20 73 65 74 20 74 6d 70 20 7b 7d 0a rray set tmp {}.
1b80: 09 66 6f 72 65 61 63 68 20 7b 6b 20 76 61 6c 75 .foreach {k valu
1b90: 65 73 7d 20 24 64 69 63 74 20 7b 0a 09 20 20 20 es} $dict {..
1ba0: 20 66 6f 72 65 61 63 68 20 76 20 24 76 61 6c 75 foreach v $valu
1bb0: 65 73 20 7b 20 6c 61 70 70 65 6e 64 20 74 6d 70 es { lappend tmp
1bc0: 28 24 76 29 20 24 6b 20 7d 0a 09 7d 0a 09 72 65 ($v) $k }..}..re
1bd0: 74 75 72 6e 20 5b 61 72 72 61 79 20 67 65 74 20 turn [array get
1be0: 74 6d 70 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 tmp]. }..
1bf0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
1c00: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
1c10: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 #######. ## C
1c20: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 onfiguration..
1c30: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 pragma -hastyp
1c40: 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 einfo no ; #
1c50: 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 no type introsp
1c60: 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d ection. pragm
1c70: 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 a -hasinfo
1c80: 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a no ; # no obj
1c90: 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f ect introspectio
1ca0: 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 73 69 n. pragma -si
1cb0: 6d 70 6c 65 64 69 73 70 61 74 63 68 20 79 65 73 mpledispatch yes
1cc0: 20 3b 20 23 20 73 69 6d 70 6c 65 20 66 61 73 74 ; # simple fast
1cd0: 20 64 69 73 70 61 74 63 68 0a 0a 20 20 20 20 23 dispatch.. #
1ce0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
1cf0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
1d00: 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 ######.}..namesp
1d10: 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 ace eval ::vc::f
1d20: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
1d30: 76 73 3a 3a 70 72 6f 6a 65 63 74 20 7b 0a 20 20 vs::project {.
1d40: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f namespace expo
1d50: 72 74 20 72 65 76 6c 69 6e 6b 0a 20 20 20 20 6e rt revlink. n
1d60: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 72 65 amespace eval re
1d70: 76 6c 69 6e 6b 20 7b 0a 09 6e 61 6d 65 73 70 61 vlink {..namespa
1d80: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
1d90: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
1da0: 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 cvs::state..name
1db0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
1dc0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
1dd0: 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 t::cvs::integrit
1de0: 79 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 y..namespace imp
1df0: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
1e00: 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 :misc::*..namesp
1e10: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
1e20: 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a :tools::trouble.
1e30: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 .namespace eval
1e40: 70 72 6f 6a 65 63 74 20 7b 0a 09 20 20 20 20 6e project {.. n
1e50: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
1e60: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
1e70: 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 port::cvs::proje
1e80: 63 74 3a 3a 72 65 76 0a 09 7d 0a 09 6e 61 6d 65 ct::rev..}..name
1e90: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
1ea0: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6c c::tools::log..l
1eb0: 6f 67 20 72 65 67 69 73 74 65 72 20 63 73 65 74 og register cset
1ec0: 73 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 s. }.}..# # #
1ed0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
1ee0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
1ef0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
1f00: 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 61 64 ########.## Read
1f10: 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 y..package provi
1f20: 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 de vc::fossil::i
1f30: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a mport::cvs::proj
1f40: 65 63 74 3a 3a 72 65 76 6c 69 6e 6b 20 31 2e 30 ect::revlink 1.0
1f50: 0a 72 65 74 75 72 6e 0a .return.