Artifact 96780b3d36b6672b6b3d93127ca61d36c63b258d:
File
tools/cvs2fossil/lib/c2f_prtopsort.tcl
part of check-in
[66c85b4db4]
- Investigation of changeset order differences between running passes 1 to 6 and pass 6 alone show why the topological sort passes are separate in cvs2svn. The breaking of cycles can change the order of things due to different timeranges and dependencies of the broken changesets. Created two new passes for the sorting. The break passes 7 and 8 are now passes 8 and 9, and the new sort passes are 7 and 10.
by
aku on
2007-11-25 02:59:21.
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 50 61 73 ########..## Pas
0200: 73 20 56 49 49 2e 20 54 68 69 73 20 70 61 73 73 s VII. This pass
0210: 20 67 6f 65 73 20 6f 76 65 72 20 74 68 65 20 73 goes over the s
0220: 65 74 20 6f 66 20 72 65 76 69 73 69 6f 6e 20 62 et of revision b
0230: 61 73 65 64 20 63 68 61 6e 67 65 73 65 74 73 0a ased changesets.
0240: 23 23 20 61 6e 64 20 73 6f 72 74 73 20 74 68 65 ## and sorts the
0250: 6d 20 74 6f 70 6f 6c 6f 67 69 63 61 6c 6c 79 2e m topologically.
0260: 20 49 74 20 61 73 73 75 6d 65 73 20 74 68 61 74 It assumes that
0270: 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 63 79 there are no cy
0280: 63 6c 65 73 0a 23 23 20 77 68 69 63 68 20 63 6f cles.## which co
0290: 75 6c 64 20 69 6d 70 65 64 65 20 69 74 2c 20 61 uld impede it, a
02a0: 6e 79 20 68 61 76 69 6e 67 20 62 65 65 6e 20 62 ny having been b
02b0: 72 6f 6b 65 6e 20 62 79 20 74 68 65 20 70 72 65 roken by the pre
02c0: 76 69 6f 75 73 20 70 61 73 73 2c 0a 23 23 20 61 vious pass,.## a
02d0: 6e 64 20 61 62 6f 72 74 73 20 69 66 20 74 68 61 nd aborts if tha
02e0: 74 20 63 6f 6e 64 69 74 69 6f 6e 20 64 6f 65 73 t condition does
02f0: 6e 27 74 20 68 6f 6c 64 2e 0a 0a 23 20 23 20 23 n't hold...# # #
0300: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
0310: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
0320: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
0330: 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 71 75 ########.## Requ
0340: 69 72 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 67 irements..packag
0350: 65 20 72 65 71 75 69 72 65 20 54 63 6c 20 38 2e e require Tcl 8.
0360: 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0380: 20 20 20 20 3b 20 23 20 52 65 71 75 69 72 65 64 ; # Required
0390: 20 72 75 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 67 runtime..packag
03a0: 65 20 72 65 71 75 69 72 65 20 73 6e 69 74 20 20 e require snit
03b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03d0: 20 20 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 ; # OO syste
03e0: 6d 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 m..package requi
03f0: 72 65 20 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 re struct::list
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; #
0420: 20 48 69 67 68 65 72 20 6f 72 64 65 72 20 6c 69 Higher order li
0430: 73 74 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 70 st operations..p
0440: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 ackage require v
0450: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20 c::tools::log
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0470: 20 20 20 20 20 20 20 20 20 3b 20 23 20 55 73 65 ; # Use
0480: 72 20 66 65 65 64 62 61 63 6b 2e 0a 70 61 63 6b r feedback..pack
0490: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a age require vc::
04a0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
04b0: 63 76 73 3a 3a 63 79 63 6c 65 62 72 65 61 6b 65 cvs::cyclebreake
04c0: 72 20 20 20 20 20 3b 20 23 20 42 72 65 61 6b 69 r ; # Breaki
04d0: 6e 67 20 64 65 70 65 6e 64 65 6e 63 79 20 63 79 ng dependency cy
04e0: 63 6c 65 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 cles..package re
04f0: 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c quire vc::fossil
0500: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 ::import::cvs::s
0510: 74 61 74 65 20 20 20 20 20 20 20 20 20 20 20 20 tate
0520: 3b 20 23 20 53 74 61 74 65 20 73 74 6f 72 61 67 ; # State storag
0530: 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 e..package requi
0540: 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 re vc::fossil::i
0550: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a mport::cvs::proj
0560: 65 63 74 3a 3a 72 65 76 20 20 20 20 20 3b 20 23 ect::rev ; #
0570: 20 50 72 6f 6a 65 63 74 20 6c 65 76 65 6c 20 63 Project level c
0580: 68 61 6e 67 65 73 65 74 73 0a 0a 23 20 23 20 23 hangesets..# # #
0590: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
05a0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
05b0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
05c0: 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 67 69 ########.## Regi
05d0: 73 74 65 72 20 74 68 65 20 70 61 73 73 20 77 69 ster the pass wi
05e0: 74 68 20 74 68 65 20 6d 61 6e 61 67 65 6d 65 6e th the managemen
05f0: 74 0a 0a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 t..vc::fossil::i
0600: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 mport::cvs::pass
0610: 20 64 65 66 69 6e 65 20 5c 0a 20 20 20 20 52 65 define \. Re
0620: 76 54 6f 70 6f 6c 6f 67 69 63 61 6c 53 6f 72 74 vTopologicalSort
0630: 20 5c 0a 20 20 20 20 7b 54 6f 70 6f 6c 6f 67 69 \. {Topologi
0640: 63 61 6c 6c 79 20 53 6f 72 74 20 52 65 76 69 73 cally Sort Revis
0650: 69 6f 6e 20 43 68 61 6e 67 65 53 65 74 73 7d 20 ion ChangeSets}
0660: 5c 0a 20 20 20 20 3a 3a 76 63 3a 3a 66 6f 73 73 \. ::vc::foss
0670: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
0680: 3a 70 61 73 73 3a 3a 72 74 6f 70 73 6f 72 74 0a :pass::rtopsort.
0690: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 .# # ## ### ####
06a0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
06b0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
06c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 ##############.#
06d0: 23 20 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a # ..snit::type :
06e0: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
06f0: 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a ort::cvs::pass::
0700: 72 74 6f 70 73 6f 72 74 20 7b 0a 20 20 20 20 23 rtopsort {. #
0710: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
0720: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
0730: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 50 75 ######. ## Pu
0740: 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 74 79 blic API.. ty
0750: 70 65 6d 65 74 68 6f 64 20 73 65 74 75 70 20 7b pemethod setup {
0760: 7d 20 7b 0a 09 23 20 44 65 66 69 6e 65 20 74 68 } {..# Define th
0770: 65 20 6e 61 6d 65 73 20 61 6e 64 20 73 74 72 75 e names and stru
0780: 63 74 75 72 65 20 6f 66 20 74 68 65 20 70 65 72 cture of the per
0790: 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66 sistent state of
07a0: 0a 09 23 20 74 68 69 73 20 70 61 73 73 2e 0a 0a ..# this pass...
07b0: 09 73 74 61 74 65 20 72 65 61 64 69 6e 67 20 72 .state reading r
07c0: 65 76 69 73 69 6f 6e 0a 09 73 74 61 74 65 20 72 evision..state r
07d0: 65 61 64 69 6e 67 20 63 68 61 6e 67 65 73 65 74 eading changeset
07e0: 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e 67 20 ..state reading
07f0: 63 73 72 65 76 69 73 69 6f 6e 0a 0a 09 73 74 61 csrevision...sta
0800: 74 65 20 77 72 69 74 69 6e 67 20 63 73 6f 72 64 te writing csord
0810: 65 72 20 7b 0a 09 20 20 20 20 2d 2d 20 43 6f 6d er {.. -- Com
0820: 6d 69 74 20 6f 72 64 65 72 20 6f 66 20 74 68 65 mit order of the
0830: 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65 revision change
0840: 73 65 74 73 20 62 61 73 65 64 20 6f 6e 20 74 68 sets based on th
0850: 65 69 72 0a 09 20 20 20 20 2d 2d 20 64 65 70 65 eir.. -- depe
0860: 6e 64 65 6e 63 69 65 73 0a 0a 09 20 20 20 20 63 ndencies... c
0870: 69 64 20 49 4e 54 45 47 45 52 20 20 4e 4f 54 20 id INTEGER NOT
0880: 4e 55 4c 4c 20 20 52 45 46 45 52 45 4e 43 45 53 NULL REFERENCES
0890: 20 63 68 61 6e 67 65 73 65 74 2c 0a 09 20 20 20 changeset,..
08a0: 20 70 6f 73 20 49 4e 54 45 47 45 52 20 20 4e 4f pos INTEGER NO
08b0: 54 20 4e 55 4c 4c 2c 0a 09 20 20 20 20 55 4e 49 T NULL,.. UNI
08c0: 51 55 45 20 28 63 69 64 29 2c 0a 09 20 20 20 20 QUE (cid),..
08d0: 55 4e 49 51 55 45 20 28 70 6f 73 29 0a 09 7d 0a UNIQUE (pos)..}.
08e0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
08f0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f typemethod lo
0900: 61 64 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73 20 ad {} {..# Pass
0910: 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61 63 manager interfac
0920: 65 2e 20 45 78 65 63 75 74 65 64 20 74 6f 20 6c e. Executed to l
0930: 6f 61 64 20 64 61 74 61 20 63 6f 6d 70 75 74 65 oad data compute
0940: 64 20 62 79 0a 09 23 20 74 68 69 73 20 70 61 73 d by..# this pas
0950: 73 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 77 68 s into memory wh
0960: 65 6e 20 74 68 69 73 20 70 61 73 73 20 69 73 20 en this pass is
0970: 73 6b 69 70 70 65 64 20 69 6e 73 74 65 61 64 20 skipped instead
0980: 6f 66 0a 09 23 20 65 78 65 63 75 74 65 64 2e 0a of..# executed..
0990: 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e 67 20 ..state reading
09a0: 63 68 61 6e 67 65 73 65 74 0a 09 70 72 6f 6a 65 changeset..proje
09b0: 63 74 3a 3a 72 65 76 20 6c 6f 61 64 63 6f 75 6e ct::rev loadcoun
09c0: 74 65 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ter..return.
09d0: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }.. typemetho
09e0: 64 20 72 75 6e 20 7b 7d 20 7b 0a 09 23 20 50 61 d run {} {..# Pa
09f0: 73 73 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 ss manager inter
0a00: 66 61 63 65 2e 20 45 78 65 63 75 74 65 64 20 74 face. Executed t
0a10: 6f 20 70 65 72 66 6f 72 6d 20 74 68 65 0a 09 23 o perform the..#
0a20: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 6f functionality o
0a30: 66 20 74 68 65 20 70 61 73 73 2e 0a 0a 09 63 79 f the pass....cy
0a40: 63 6c 65 62 72 65 61 6b 65 72 20 73 61 76 65 63 clebreaker savec
0a50: 6d 64 20 20 5b 6d 79 70 72 6f 63 20 53 61 76 65 md [myproc Save
0a60: 4f 72 64 65 72 5d 0a 09 73 74 61 74 65 20 74 72 Order]..state tr
0a70: 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 ansaction {..
0a80: 20 63 79 63 6c 65 62 72 65 61 6b 65 72 20 72 75 cyclebreaker ru
0a90: 6e 20 62 72 65 61 6b 2d 72 65 76 20 5b 6d 79 70 n break-rev [myp
0aa0: 72 6f 63 20 43 68 61 6e 67 65 73 65 74 73 5d 0a roc Changesets].
0ab0: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
0ac0: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
0ad0: 20 64 69 73 63 61 72 64 20 7b 7d 20 7b 0a 09 23 discard {} {..#
0ae0: 20 50 61 73 73 20 6d 61 6e 61 67 65 72 20 69 6e Pass manager in
0af0: 74 65 72 66 61 63 65 2e 20 45 78 65 63 75 74 65 terface. Execute
0b00: 64 20 66 6f 72 20 61 6c 6c 20 70 61 73 73 65 73 d for all passes
0b10: 20 61 66 74 65 72 20 74 68 65 0a 09 23 20 72 75 after the..# ru
0b20: 6e 20 70 61 73 73 65 73 2c 20 74 6f 20 72 65 6d n passes, to rem
0b30: 6f 76 65 20 61 6c 6c 20 64 61 74 61 20 6f 66 20 ove all data of
0b40: 74 68 69 73 20 70 61 73 73 20 66 72 6f 6d 20 74 this pass from t
0b50: 68 65 20 73 74 61 74 65 2c 0a 09 23 20 61 73 20 he state,..# as
0b60: 62 65 69 6e 67 20 6f 75 74 20 6f 66 20 64 61 74 being out of dat
0b70: 65 2e 0a 0a 09 73 74 61 74 65 20 64 69 73 63 61 e....state disca
0b80: 72 64 20 63 73 6f 72 64 65 72 0a 09 72 65 74 75 rd csorder..retu
0b90: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
0ba0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
0bb0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
0bc0: 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 #####. ## Int
0bd0: 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 ernal methods..
0be0: 20 20 20 70 72 6f 63 20 43 68 61 6e 67 65 73 65 proc Changese
0bf0: 74 73 20 7b 7d 20 7b 0a 09 72 65 74 75 72 6e 20 ts {} {..return
0c00: 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 66 69 [struct::list fi
0c10: 6c 74 65 72 20 5b 70 72 6f 6a 65 63 74 3a 3a 72 lter [project::r
0c20: 65 76 20 61 6c 6c 5d 20 5b 6d 79 70 72 6f 63 20 ev all] [myproc
0c30: 49 73 42 79 52 65 76 69 73 69 6f 6e 5d 5d 0a 20 IsByRevision]].
0c40: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 49 }.. proc I
0c50: 73 42 79 52 65 76 69 73 69 6f 6e 20 7b 63 73 65 sByRevision {cse
0c60: 74 7d 20 7b 20 24 63 73 65 74 20 62 79 72 65 76 t} { $cset byrev
0c70: 69 73 69 6f 6e 20 7d 0a 0a 20 20 20 20 70 72 6f ision }.. pro
0c80: 63 20 53 61 76 65 4f 72 64 65 72 20 7b 67 72 61 c SaveOrder {gra
0c90: 70 68 20 61 74 20 63 73 65 74 7d 20 7b 0a 09 73 ph at cset} {..s
0ca0: 65 74 20 63 69 64 20 5b 24 63 73 65 74 20 69 64 et cid [$cset id
0cb0: 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 34 20 ]...log write 4
0cc0: 72 74 6f 70 73 6f 72 74 20 22 43 68 61 6e 67 65 rtopsort "Change
0cd0: 73 65 74 20 40 20 24 61 74 3a 20 5b 24 63 73 65 set @ $at: [$cse
0ce0: 74 20 73 74 72 5d 20 3c 3c 5b 24 67 72 61 70 68 t str] <<[$graph
0cf0: 20 6e 6f 64 65 20 73 65 74 20 24 63 73 65 74 20 node set $cset
0d00: 74 69 6d 65 72 61 6e 67 65 5d 3e 3e 22 0a 09 73 timerange]>>"..s
0d10: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 tate run {..
0d20: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 73 6f 72 INSERT INTO csor
0d30: 64 65 72 20 28 63 69 64 2c 20 20 70 6f 73 29 0a der (cid, pos).
0d40: 09 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 20 . VALUES
0d50: 20 20 20 20 20 20 20 20 20 28 24 63 69 64 2c 20 ($cid,
0d60: 24 61 74 29 0a 09 7d 0a 09 72 65 74 75 72 6e 0a $at)..}..return.
0d70: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 }.. # # #
0d80: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
0d90: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
0da0: 23 23 0a 20 20 20 20 23 23 20 43 6f 6e 66 69 67 ##. ## Config
0db0: 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 uration.. pra
0dc0: 67 6d 61 20 2d 68 61 73 69 6e 73 74 61 6e 63 65 gma -hasinstance
0dd0: 73 20 20 20 6e 6f 20 3b 20 23 20 73 69 6e 67 6c s no ; # singl
0de0: 65 74 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 eton. pragma
0df0: 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 -hastypeinfo
0e00: 6e 6f 20 3b 20 23 20 6e 6f 20 69 6e 74 72 6f 73 no ; # no intros
0e10: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 pection. prag
0e20: 6d 61 20 2d 68 61 73 74 79 70 65 64 65 73 74 72 ma -hastypedestr
0e30: 6f 79 20 6e 6f 20 3b 20 23 20 69 6d 6d 6f 72 74 oy no ; # immort
0e40: 61 6c 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 al.. # # ## #
0e50: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
0e60: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
0e70: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 }..namespace eva
0e80: 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a l ::vc::fossil::
0e90: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 import::cvs::pas
0ea0: 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 s {. namespac
0eb0: 65 20 65 78 70 6f 72 74 20 72 74 6f 70 73 6f 72 e export rtopsor
0ec0: 74 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 t. namespace
0ed0: 65 76 61 6c 20 72 74 6f 70 73 6f 72 74 20 7b 0a eval rtopsort {.
0ee0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 .namespace impor
0ef0: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a t ::vc::fossil::
0f00: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 63 79 63 import::cvs::cyc
0f10: 6c 65 62 72 65 61 6b 65 72 0a 09 6e 61 6d 65 73 lebreaker..names
0f20: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 pace import ::vc
0f30: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
0f40: 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 ::cvs::state..na
0f50: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 70 72 6f mespace eval pro
0f60: 6a 65 63 74 20 7b 0a 09 20 20 20 20 6e 61 6d 65 ject {.. name
0f70: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
0f80: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
0f90: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a t::cvs::project:
0fa0: 3a 72 65 76 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 :rev..}..namespa
0fb0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
0fc0: 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6c 6f 67 20 tools::log..log
0fd0: 72 65 67 69 73 74 65 72 20 72 74 6f 70 73 6f 72 register rtopsor
0fe0: 74 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 t. }.}..# # #
0ff0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
1000: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
1010: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
1020: 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 61 64 ########.## Read
1030: 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 y..package provi
1040: 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 de vc::fossil::i
1050: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 mport::cvs::pass
1060: 3a 3a 72 74 6f 70 73 6f 72 74 20 31 2e 30 0a 72 ::rtopsort 1.0.r
1070: 65 74 75 72 6e 0a eturn.