Artifact bd713af4f16bcf0ba5deb402563768beaa2101ef:
File tools/cvs2fossil/lib/c2f_patopsort.tcl part of check-in [00bf8c198e] - The performance was still not satisfying, even with faster recomputing of successors. Doing it multiple times (Building the graph in each breaker and sort passes) eats time. Caching in memory blows the memory. Chosen solution: Cache this information in the database.Created a new pass 'CsetDeps' which is run between 'InitCsets' and 'BreakRevCsetCycles' (i.e. changeset creation and first breaker pass). It computes the changeset dependencies from the file-level dependencies once and saves the result in the state, in the new table 'cssuccessor'. Now the breaker and sort passes can get the information quickly, with virtually no effort. The dependencies are recomputed incrementally when a changeset is split by one of the breaker passes, for its fragments and its predecessors.
The loop check is now trivial, and integrated into the successor computation, with the heavy lifting for the detailed analysis and reporting moved down into the type-dependent SQL queries. The relevant new method is 'loops'. Now that the loop check is incremental the pass based checks have been removed from the integrity module, and the option '--loopcheck' has been eliminated. For paranoia the graph setup and modification code got its loop check reinstated as an assert, redusing the changeset report code.
Renumbered the breaker and sort passes. A number of places, like graph setup and traversal, loading of changesets, etc. got feedback indicators to show their progress.
The selection of revision and symbol changesets for the associated breaker passes was a bit on the slow side. We now keep changeset lists sorted by type (during loading or general construction) and access them directly.
by aku on 2007-12-02 20:04:40.
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 58 49 2e 20 54 68 69 73 20 70 61 73 73 20 s XI. This pass 0210: 67 6f 65 73 20 6f 76 65 72 20 61 6c 6c 20 63 68 goes over all ch 0220: 61 6e 67 65 73 65 74 73 20 61 6e 64 20 73 6f 72 angesets and sor 0230: 74 73 20 74 68 65 6d 0a 23 23 20 74 6f 70 6f 6c ts them.## topol 0240: 6f 67 69 63 61 6c 6c 79 2e 20 49 74 20 61 73 73 ogically. It ass 0250: 75 6d 65 73 20 74 68 61 74 20 74 68 65 72 65 20 umes that there 0260: 61 72 65 20 6e 6f 20 63 79 63 6c 65 73 20 77 68 are no cycles wh 0270: 69 63 68 20 63 6f 75 6c 64 0a 23 23 20 69 6d 70 ich could.## imp 0280: 65 64 65 20 69 74 2c 20 61 6e 79 20 72 65 6d 61 ede it, any rema 0290: 69 6e 69 6e 67 20 68 61 76 69 6e 67 20 62 65 65 ining having bee 02a0: 6e 20 62 72 6f 6b 65 6e 20 62 79 20 74 68 65 20 n broken by the 02b0: 70 72 65 76 69 6f 75 73 20 74 77 6f 0a 23 23 20 previous two.## 02c0: 70 61 73 73 65 73 2c 20 61 6e 64 20 61 62 6f 72 passes, and abor 02d0: 74 73 20 69 66 20 74 68 61 74 20 63 6f 6e 64 69 ts if that condi 02e0: 74 69 6f 6e 20 64 6f 65 73 6e 27 74 20 68 6f 6c tion doesn't hol 02f0: 64 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 d...# # ## ### # 0300: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ## 0310: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 ########### #### 0320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 0330: 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 #.## Requirement 0340: 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 s..package requi 0350: 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 re Tcl 8.4 0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; # 0380: 20 52 65 71 75 69 72 65 64 20 72 75 6e 74 69 6d Required runtim 0390: 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 e..package requi 03a0: 72 65 20 73 6e 69 74 20 20 20 20 20 20 20 20 20 re 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 3b 20 23 ; # 03d0: 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b OO system..pack 03e0: 61 67 65 20 72 65 71 75 69 72 65 20 73 74 72 75 age require stru 03f0: 63 74 3a 3a 6c 69 73 74 20 20 20 20 20 20 20 20 ct::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 3b 20 23 20 48 69 67 68 65 72 ; # Higher 0420: 20 6f 72 64 65 72 20 6c 69 73 74 20 6f 70 65 72 order list oper 0430: 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 ations..package 0440: 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c require vc::tool 0450: 73 3a 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 s::log 0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0470: 20 20 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 ; # User feedb 0480: 61 63 6b 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 ack..package req 0490: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a uire vc::fossil: 04a0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 63 79 :import::cvs::cy 04b0: 63 6c 65 62 72 65 61 6b 65 72 20 20 20 20 20 3b clebreaker ; 04c0: 20 23 20 42 72 65 61 6b 69 6e 67 20 64 65 70 65 # Breaking depe 04d0: 6e 64 65 6e 63 79 20 63 79 63 6c 65 73 2e 0a 70 ndency cycles..p 04e0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 ackage require v 04f0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor 0500: 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 20 20 20 t::cvs::state 0510: 20 20 20 20 20 20 20 20 20 3b 20 23 20 53 74 61 ; # Sta 0520: 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 6b te storage..pack 0530: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a age require vc:: 0540: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import:: 0550: 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 cvs::project::re 0560: 76 20 20 20 20 20 3b 20 23 20 50 72 6f 6a 65 63 v ; # Projec 0570: 74 20 6c 65 76 65 6c 20 63 68 61 6e 67 65 73 65 t level changese 0580: 74 73 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 ts..# # ## ### # 0590: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ## 05a0: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 ########### #### 05b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 05c0: 23 0a 23 23 20 52 65 67 69 73 74 65 72 20 74 68 #.## Register th 05d0: 65 20 70 61 73 73 20 77 69 74 68 20 74 68 65 20 e pass with the 05e0: 6d 61 6e 61 67 65 6d 65 6e 74 0a 0a 76 63 3a 3a management..vc:: 05f0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import:: 0600: 63 76 73 3a 3a 70 61 73 73 20 64 65 66 69 6e 65 cvs::pass define 0610: 20 5c 0a 20 20 20 20 41 6c 6c 54 6f 70 6f 6c 6f \. AllTopolo 0620: 67 69 63 61 6c 53 6f 72 74 20 5c 0a 20 20 20 20 gicalSort \. 0630: 7b 54 6f 70 6f 6c 6f 67 69 63 61 6c 6c 79 20 53 {Topologically S 0640: 6f 72 74 20 41 6c 6c 20 43 68 61 6e 67 65 53 65 ort All ChangeSe 0650: 74 73 7d 20 5c 0a 20 20 20 20 3a 3a 76 63 3a 3a ts} \. ::vc:: 0660: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import:: 0670: 63 76 73 3a 3a 70 61 73 73 3a 3a 61 74 6f 70 73 cvs::pass::atops 0680: 6f 72 74 0a 0a 23 20 23 20 23 23 20 23 23 23 20 ort..# # ## ### 0690: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## # 06a0: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 ############ ### 06b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 06c0: 23 23 0a 23 23 0a 0a 73 6e 69 74 3a 3a 74 79 70 ##.##..snit::typ 06d0: 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a e ::vc::fossil:: 06e0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 import::cvs::pas 06f0: 73 3a 3a 61 74 6f 70 73 6f 72 74 20 7b 0a 20 20 s::atopsort {. 0700: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ### 0710: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## #### 0720: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ## 0730: 20 50 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 Public API.. 0740: 20 74 79 70 65 6d 65 74 68 6f 64 20 73 65 74 75 typemethod setu 0750: 70 20 7b 7d 20 7b 0a 09 23 20 44 65 66 69 6e 65 p {} {..# Define 0760: 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 73 the names and s 0770: 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 tructure of the 0780: 70 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 persistent state 0790: 20 6f 66 0a 09 23 20 74 68 69 73 20 70 61 73 73 of..# this pass 07a0: 2e 0a 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e ....state readin 07b0: 67 20 72 65 76 69 73 69 6f 6e 0a 09 73 74 61 74 g revision..stat 07c0: 65 20 72 65 61 64 69 6e 67 20 63 68 61 6e 67 65 e reading change 07d0: 73 65 74 0a 09 73 74 61 74 65 20 72 65 61 64 69 set..state readi 07e0: 6e 67 20 63 73 6f 72 64 65 72 0a 0a 09 73 74 61 ng csorder...sta 07f0: 74 65 20 77 72 69 74 69 6e 67 20 63 73 74 69 6d te writing cstim 0800: 65 73 74 61 6d 70 20 7b 0a 09 20 20 20 20 2d 2d estamp {.. -- 0810: 20 43 6f 6d 6d 69 74 20 6f 72 64 65 72 20 6f 66 Commit order of 0820: 20 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 20 all changesets 0830: 62 61 73 65 64 20 6f 6e 20 74 68 65 69 72 0a 09 based on their.. 0840: 20 20 20 20 2d 2d 20 64 65 70 65 6e 64 65 6e 63 -- dependenc 0850: 69 65 73 2c 20 70 6c 75 73 20 61 20 6d 6f 6e 6f ies, plus a mono 0860: 74 6f 6e 69 63 61 6c 6c 79 20 69 6e 63 72 65 61 tonically increa 0870: 73 69 6e 67 0a 09 20 20 20 20 2d 2d 20 74 69 6d sing.. -- tim 0880: 65 73 74 61 6d 70 2e 0a 0a 09 20 20 20 20 63 69 estamp.... ci 0890: 64 20 20 49 4e 54 45 47 45 52 20 20 4e 4f 54 20 d INTEGER NOT 08a0: 4e 55 4c 4c 20 20 52 45 46 45 52 45 4e 43 45 53 NULL REFERENCES 08b0: 20 63 68 61 6e 67 65 73 65 74 2c 0a 09 20 20 20 changeset,.. 08c0: 20 70 6f 73 20 20 49 4e 54 45 47 45 52 20 20 4e pos INTEGER N 08d0: 4f 54 20 4e 55 4c 4c 2c 0a 09 20 20 20 20 64 61 OT NULL,.. da 08e0: 74 65 20 49 4e 54 45 47 45 52 20 20 4e 4f 54 20 te INTEGER NOT 08f0: 4e 55 4c 4c 2c 0a 09 20 20 20 20 55 4e 49 51 55 NULL,.. UNIQU 0900: 45 20 28 63 69 64 29 2c 0a 09 20 20 20 20 55 4e E (cid),.. UN 0910: 49 51 55 45 20 28 70 6f 73 29 2c 0a 09 20 20 20 IQUE (pos),.. 0920: 20 55 4e 49 51 55 45 20 28 64 61 74 65 29 0a 09 UNIQUE (date).. 0930: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }. 0940: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod 0950: 6c 6f 61 64 20 7b 7d 20 7b 0a 09 23 20 50 61 73 load {} {..# Pas 0960: 73 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66 s manager interf 0970: 61 63 65 2e 20 45 78 65 63 75 74 65 64 20 74 6f ace. Executed to 0980: 20 6c 6f 61 64 20 64 61 74 61 20 63 6f 6d 70 75 load data compu 0990: 74 65 64 20 62 79 0a 09 23 20 74 68 69 73 20 70 ted by..# this p 09a0: 61 73 73 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 ass into memory 09b0: 77 68 65 6e 20 74 68 69 73 20 70 61 73 73 20 69 when this pass i 09c0: 73 20 73 6b 69 70 70 65 64 20 69 6e 73 74 65 61 s skipped instea 09d0: 64 20 6f 66 0a 09 23 20 65 78 65 63 75 74 65 64 d of..# executed 09e0: 2e 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a ...return. }. 09f0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod 0a00: 72 75 6e 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73 run {} {..# Pass 0a10: 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61 manager interfa 0a20: 63 65 2e 20 45 78 65 63 75 74 65 64 20 74 6f 20 ce. Executed to 0a30: 70 65 72 66 6f 72 6d 20 74 68 65 0a 09 23 20 66 perform the..# f 0a40: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 6f 66 20 unctionality of 0a50: 74 68 65 20 70 61 73 73 2e 0a 0a 09 73 65 74 20 the pass....set 0a60: 6c 65 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 len [string leng 0a70: 74 68 20 5b 70 72 6f 6a 65 63 74 3a 3a 72 65 76 th [project::rev 0a80: 20 6e 75 6d 5d 5d 0a 09 73 65 74 20 6d 79 61 74 num]]..set myat 0a90: 66 6d 74 20 25 24 7b 6c 65 6e 7d 73 0a 09 69 6e fmt %${len}s..in 0aa0: 63 72 20 6c 65 6e 20 31 32 0a 09 73 65 74 20 6d cr len 12..set m 0ab0: 79 63 73 66 6d 74 20 25 24 7b 6c 65 6e 7d 73 0a ycsfmt %${len}s. 0ac0: 0a 09 63 79 63 6c 65 62 72 65 61 6b 65 72 20 73 ..cyclebreaker s 0ad0: 61 76 65 63 6d 64 20 20 5b 6d 79 70 72 6f 63 20 avecmd [myproc 0ae0: 53 61 76 65 54 69 6d 65 73 74 61 6d 70 73 5d 0a SaveTimestamps]. 0af0: 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 ..state transact 0b00: 69 6f 6e 20 7b 0a 09 20 20 20 20 4c 6f 61 64 53 ion {.. LoadS 0b10: 79 6d 62 6f 6c 43 68 61 6e 67 65 73 65 74 73 0a ymbolChangesets. 0b20: 09 20 20 20 20 63 79 63 6c 65 62 72 65 61 6b 65 . cyclebreake 0b30: 72 20 72 75 6e 20 74 73 6f 72 74 2d 61 6c 6c 20 r run tsort-all 0b40: 5b 6d 79 70 72 6f 63 20 43 68 61 6e 67 65 73 65 [myproc Changese 0b50: 74 73 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 ts]..}..return. 0b60: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 }.. typeme 0b70: 74 68 6f 64 20 64 69 73 63 61 72 64 20 7b 7d 20 thod discard {} 0b80: 7b 0a 09 23 20 50 61 73 73 20 6d 61 6e 61 67 65 {..# Pass manage 0b90: 72 20 69 6e 74 65 72 66 61 63 65 2e 20 45 78 65 r interface. Exe 0ba0: 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 70 61 cuted for all pa 0bb0: 73 73 65 73 20 61 66 74 65 72 20 74 68 65 0a 09 sses after the.. 0bc0: 23 20 72 75 6e 20 70 61 73 73 65 73 2c 20 74 6f # run passes, to 0bd0: 20 72 65 6d 6f 76 65 20 61 6c 6c 20 64 61 74 61 remove all data 0be0: 20 6f 66 20 74 68 69 73 20 70 61 73 73 20 66 72 of this pass fr 0bf0: 6f 6d 20 74 68 65 20 73 74 61 74 65 2c 0a 09 23 om the state,..# 0c00: 20 61 73 20 62 65 69 6e 67 20 6f 75 74 20 6f 66 as being out of 0c10: 20 64 61 74 65 2e 0a 0a 09 73 74 61 74 65 20 64 date....state d 0c20: 69 73 63 61 72 64 20 63 73 74 69 6d 65 73 74 61 iscard cstimesta 0c30: 6d 70 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d mp..return. } 0c40: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ### 0c50: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ######## 0c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 #############. 0c70: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 ## Internal me 0c80: 74 68 6f 64 73 0a 0a 20 20 20 20 70 72 6f 63 20 thods.. proc 0c90: 43 68 61 6e 67 65 73 65 74 73 20 7b 7d 20 7b 20 Changesets {} { 0ca0: 70 72 6f 6a 65 63 74 3a 3a 72 65 76 20 61 6c 6c project::rev all 0cb0: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 4c 6f 61 }.. proc Loa 0cc0: 64 53 79 6d 62 6f 6c 43 68 61 6e 67 65 73 65 74 dSymbolChangeset 0cd0: 73 20 7b 7d 20 7b 0a 09 73 65 74 20 6d 79 73 79 s {} {..set mysy 0ce0: 6d 63 68 61 6e 67 65 73 65 74 73 20 5b 73 74 72 mchangesets [str 0cf0: 75 63 74 3a 3a 6c 69 73 74 20 66 69 6c 74 65 72 uct::list filter 0d00: 20 5b 70 72 6f 6a 65 63 74 3a 3a 72 65 76 20 61 [project::rev a 0d10: 6c 6c 5d 20 5b 6d 79 70 72 6f 63 20 49 73 42 79 ll] [myproc IsBy 0d20: 53 79 6d 62 6f 6c 5d 5d 0a 09 72 65 74 75 72 6e Symbol]]..return 0d30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 . }.. proc 0d40: 20 49 73 42 79 53 79 6d 62 6f 6c 20 7b 63 73 65 IsBySymbol {cse 0d50: 74 7d 20 7b 20 24 63 73 65 74 20 62 79 73 79 6d t} { $cset bysym 0d60: 62 6f 6c 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 bol }.. proc 0d70: 53 61 76 65 54 69 6d 65 73 74 61 6d 70 73 20 7b SaveTimestamps { 0d80: 67 72 61 70 68 20 61 74 20 63 73 65 74 7d 20 7b graph at cset} { 0d90: 0a 09 73 65 74 20 63 69 64 20 5b 24 63 73 65 74 ..set cid [$cset 0da0: 20 69 64 5d 0a 0a 09 73 65 74 20 64 61 74 65 20 id]...set date 0db0: 5b 47 65 74 54 69 6d 65 20 5b 6c 69 6e 64 65 78 [GetTime [lindex 0dc0: 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 [$graph node ge 0dd0: 74 20 24 63 73 65 74 20 74 69 6d 65 72 61 6e 67 t $cset timerang 0de0: 65 5d 20 31 5d 20 5c 0a 09 09 20 20 20 20 20 20 e] 1] \... 0df0: 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 63 6f 6e [struct::set con 0e00: 74 61 69 6e 20 24 6d 79 73 79 6d 63 68 61 6e 67 tain $mysymchang 0e10: 65 73 65 74 73 20 24 63 73 65 74 5d 20 5c 0a 09 esets $cset] \.. 0e20: 09 20 20 20 20 20 6d 65 73 73 61 67 65 5d 0a 0a . message].. 0e30: 09 6c 6f 67 20 77 72 69 74 65 20 34 20 61 74 6f .log write 4 ato 0e40: 70 73 6f 72 74 20 22 43 68 61 6e 67 65 73 65 74 psort "Changeset 0e50: 20 40 20 5b 66 6f 72 6d 61 74 20 24 6d 79 61 74 @ [format $myat 0e60: 66 6d 74 20 24 61 74 5d 3a 20 5b 66 6f 72 6d 61 fmt $at]: [forma 0e70: 74 20 24 6d 79 63 73 66 6d 74 20 5b 24 63 73 65 t $mycsfmt [$cse 0e80: 74 20 73 74 72 5d 5d 24 6d 65 73 73 61 67 65 22 t str]]$message" 0e90: 0a 0a 09 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 ...state run {.. 0ea0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 INSERT INTO 0eb0: 63 73 74 69 6d 65 73 74 61 6d 70 20 28 63 69 64 cstimestamp (cid 0ec0: 2c 20 20 70 6f 73 2c 20 64 61 74 65 29 0a 09 20 , pos, date).. 0ed0: 20 20 20 56 41 4c 55 45 53 20 20 20 20 20 20 20 VALUES 0ee0: 20 20 20 20 20 20 20 20 20 20 20 28 24 63 69 64 ($cid 0ef0: 2c 20 24 61 74 2c 20 24 64 61 74 65 29 0a 09 7d , $at, $date)..} 0f00: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }.. 0f10: 20 20 20 20 70 72 6f 63 20 47 65 74 54 69 6d 65 proc GetTime 0f20: 20 7b 73 74 61 6d 70 20 65 78 70 65 63 74 63 68 {stamp expectch 0f30: 61 6e 67 65 20 6d 76 7d 20 7b 0a 09 3a 3a 76 61 ange mv} {..::va 0f40: 72 69 61 62 6c 65 20 6d 79 6c 61 73 74 74 69 6d riable mylasttim 0f50: 65 73 74 61 6d 70 0a 09 75 70 76 61 72 20 31 20 estamp..upvar 1 0f60: 24 6d 76 20 6d 65 73 73 61 67 65 0a 09 73 65 74 $mv message..set 0f70: 20 6d 65 73 73 61 67 65 20 22 22 0a 09 69 66 20 message ""..if 0f80: 7b 24 73 74 61 6d 70 20 3e 20 24 6d 79 6d 61 78 {$stamp > $mymax 0f90: 74 69 6d 65 73 74 61 6d 70 7d 20 7b 0a 09 20 20 timestamp} {.. 0fa0: 20 20 23 20 41 20 74 69 6d 65 73 74 61 6d 70 20 # A timestamp 0fb0: 69 6e 20 74 68 65 20 66 75 74 75 72 65 20 69 73 in the future is 0fc0: 20 62 65 6c 69 65 76 65 64 20 74 6f 20 62 65 20 believed to be 0fd0: 62 6f 67 75 73 20 61 6e 64 0a 09 20 20 20 20 23 bogus and.. # 0fe0: 20 73 68 69 66 74 65 64 20 62 61 63 6b 77 61 72 shifted backwar 0ff0: 73 20 69 6e 20 74 69 6d 65 20 74 6f 20 70 72 65 s in time to pre 1000: 76 65 6e 74 20 69 74 20 66 72 6f 6d 20 66 6f 72 vent it from for 1010: 63 69 6e 67 0a 09 20 20 20 20 23 20 6f 74 68 65 cing.. # othe 1020: 72 20 74 69 6d 65 73 74 61 6d 70 73 20 74 6f 20 r timestamps to 1030: 62 65 20 70 75 73 68 65 64 20 65 76 65 6e 20 66 be pushed even f 1040: 75 72 74 68 65 72 20 69 6e 20 74 68 65 0a 09 20 urther in the.. 1050: 20 20 20 23 20 66 75 74 75 72 65 2e 0a 0a 09 20 # future.... 1060: 20 20 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76 # From cvs2sv 1070: 6e 3a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 69 n: Note that thi 1080: 73 20 69 73 20 6e 6f 74 20 6e 65 61 72 6c 79 20 s is not nearly 1090: 61 20 63 6f 6d 70 6c 65 74 65 0a 09 20 20 20 20 a complete.. 10a0: 23 20 73 6f 6c 75 74 69 6f 6e 20 74 6f 20 74 68 # solution to th 10b0: 65 20 62 6f 67 75 73 20 74 69 6d 65 73 74 61 6d e bogus timestam 10c0: 70 20 70 72 6f 62 6c 65 6d 2e 20 20 41 20 74 69 p problem. A ti 10d0: 6d 65 73 74 61 6d 70 20 69 6e 0a 09 20 20 20 20 mestamp in.. 10e0: 23 20 74 68 65 20 66 75 74 75 72 65 20 73 74 69 # the future sti 10f0: 6c 6c 20 61 66 66 65 63 74 73 20 74 68 65 20 6f ll affects the o 1100: 72 64 65 72 69 6e 67 20 6f 66 20 63 68 61 6e 67 rdering of chang 1110: 65 73 65 74 73 2c 20 61 6e 64 0a 09 20 20 20 20 esets, and.. 1120: 23 20 61 20 63 68 61 6e 67 65 73 65 74 20 68 61 # a changeset ha 1130: 76 69 6e 67 20 73 75 63 68 20 61 20 74 69 6d 65 ving such a time 1140: 73 74 61 6d 70 20 77 69 6c 6c 20 6e 6f 74 20 62 stamp will not b 1150: 65 0a 09 20 20 20 20 23 20 63 6f 6d 6d 69 74 74 e.. # committ 1160: 65 64 20 75 6e 74 69 6c 20 61 6c 6c 20 63 68 61 ed until all cha 1170: 6e 67 65 73 65 74 73 20 77 69 74 68 20 65 61 72 ngesets with ear 1180: 6c 69 65 72 20 74 69 6d 65 73 74 61 6d 70 73 0a lier timestamps. 1190: 09 20 20 20 20 23 20 68 61 76 65 20 62 65 65 6e . # have been 11a0: 20 63 6f 6d 6d 69 74 74 65 64 2c 20 65 76 65 6e committed, even 11b0: 20 69 66 20 6f 74 68 65 72 20 63 68 61 6e 67 65 if other change 11c0: 73 65 74 73 20 77 69 74 68 20 65 76 65 6e 0a 09 sets with even.. 11d0: 20 20 20 20 23 20 65 61 72 6c 69 65 72 20 74 69 # earlier ti 11e0: 6d 65 73 74 61 6d 70 73 20 64 65 70 65 6e 64 20 mestamps depend 11f0: 6f 6e 20 74 68 69 73 20 6f 6e 65 2e 0a 0a 09 20 on this one.... 1200: 20 20 20 69 6e 63 72 20 6d 79 6c 61 73 74 74 69 incr mylastti 1210: 6d 65 73 74 61 6d 70 0a 09 20 20 20 20 69 66 20 mestamp.. if 1220: 7b 21 24 65 78 70 65 63 74 63 68 61 6e 67 65 7d {!$expectchange} 1230: 20 7b 0a 09 09 73 65 74 20 6d 65 73 73 61 67 65 {...set message 1240: 20 22 20 54 69 6d 65 73 74 61 6d 70 20 5b 63 6c " Timestamp [cl 1250: 6f 63 6b 20 66 6f 72 6d 61 74 20 24 73 74 61 6d ock format $stam 1260: 70 5d 20 69 73 20 69 6e 20 74 68 65 20 66 75 74 p] is in the fut 1270: 75 72 65 3b 20 73 68 69 66 74 65 64 20 62 61 63 ure; shifted bac 1280: 6b 20 74 6f 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d k to [clock form 1290: 61 74 20 24 6d 79 6c 61 73 74 74 69 6d 65 73 74 at $mylasttimest 12a0: 61 6d 70 5d 20 28 5b 65 78 70 72 20 7b 24 6d 79 amp] ([expr {$my 12b0: 6c 61 73 74 74 69 6d 65 73 74 61 6d 70 20 2d 20 lasttimestamp - 12c0: 24 73 74 61 6d 70 7d 5d 29 22 0a 09 20 20 20 20 $stamp}])".. 12d0: 7d 0a 09 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 }..} elseif {$st 12e0: 61 6d 70 20 3c 20 28 24 6d 79 6c 61 73 74 74 69 amp < ($mylastti 12f0: 6d 65 73 74 61 6d 70 29 2b 31 7d 20 7b 0a 09 20 mestamp)+1} {.. 1300: 20 20 20 69 6e 63 72 20 6d 79 6c 61 73 74 74 69 incr mylastti 1310: 6d 65 73 74 61 6d 70 0a 09 20 20 20 20 69 66 20 mestamp.. if 1320: 7b 21 24 65 78 70 65 63 74 63 68 61 6e 67 65 7d {!$expectchange} 1330: 20 7b 0a 09 09 73 65 74 20 6d 65 73 73 61 67 65 {...set message 1340: 20 22 20 54 69 6d 65 73 74 61 6d 70 20 5b 63 6c " Timestamp [cl 1350: 6f 63 6b 20 66 6f 72 6d 61 74 20 24 73 74 61 6d ock format $stam 1360: 70 5d 20 61 64 6a 75 73 74 65 64 20 74 6f 20 5b p] adjusted to [ 1370: 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 24 6d 79 clock format $my 1380: 6c 61 73 74 74 69 6d 65 73 74 61 6d 70 5d 20 28 lasttimestamp] ( 1390: 2b 5b 65 78 70 72 20 7b 24 6d 79 6c 61 73 74 74 +[expr {$mylastt 13a0: 69 6d 65 73 74 61 6d 70 20 2d 20 24 73 74 61 6d imestamp - $stam 13b0: 70 7d 5d 29 22 0a 09 20 20 20 20 7d 0a 09 7d 20 p}])".. }..} 13c0: 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74 20 else {.. set 13d0: 6d 79 6c 61 73 74 74 69 6d 65 73 74 61 6d 70 20 mylasttimestamp 13e0: 24 73 74 61 6d 70 0a 09 7d 0a 09 72 65 74 75 72 $stamp..}..retur 13f0: 6e 20 24 6d 79 6c 61 73 74 74 69 6d 65 73 74 61 n $mylasttimesta 1400: 6d 70 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 mp. }.. ty 1410: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 61 74 66 pevariable myatf 1420: 6d 74 20 3b 20 23 20 46 6f 72 6d 61 74 20 66 6f mt ; # Format fo 1430: 72 20 6c 6f 67 20 6f 75 74 70 75 74 20 74 6f 20 r log output to 1440: 67 61 69 6e 20 62 65 74 74 65 72 20 61 6c 69 67 gain better alig 1450: 6e 6d 65 6e 74 20 6f 66 20 74 68 65 20 76 61 72 nment of the var 1460: 69 6f 75 73 20 63 6f 6c 75 6d 6e 73 2e 0a 20 20 ious columns.. 1470: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d typevariable m 1480: 79 63 73 66 6d 74 20 3b 20 23 20 44 69 74 74 6f ycsfmt ; # Ditto 1490: 20 66 6f 72 20 74 68 65 20 63 68 61 6e 67 65 73 for the changes 14a0: 65 74 73 2e 0a 0a 20 20 20 20 74 79 70 65 76 61 ets... typeva 14b0: 72 69 61 62 6c 65 20 6d 79 73 79 6d 63 68 61 6e riable mysymchan 14c0: 67 65 73 65 74 73 20 7b 7d 20 3b 20 23 20 53 65 gesets {} ; # Se 14d0: 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 t of the symbol 14e0: 63 68 61 6e 67 65 73 65 74 73 2e 0a 20 20 20 20 changesets.. 14f0: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6c typevariable myl 1500: 61 73 74 74 69 6d 65 73 74 61 6d 70 20 30 20 20 asttimestamp 0 1510: 3b 20 23 20 4c 61 73 74 20 64 65 6c 69 76 65 72 ; # Last deliver 1520: 65 64 20 74 69 6d 65 73 74 61 6d 70 2e 0a 20 20 ed timestamp.. 1530: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d typevariable m 1540: 79 6d 61 78 74 69 6d 65 73 74 61 6d 70 0a 0a 20 ymaxtimestamp.. 1550: 20 20 20 74 79 70 65 63 6f 6e 73 74 72 75 63 74 typeconstruct 1560: 6f 72 20 7b 0a 09 23 20 54 68 65 20 6d 61 78 69 or {..# The maxi 1570: 6d 75 6d 20 74 69 6d 65 73 74 61 6d 70 20 63 6f mum timestamp co 1580: 6e 73 69 64 65 72 65 64 20 61 73 20 72 65 61 73 nsidered as reas 1590: 6f 6e 61 62 6c 65 20 69 73 0a 09 23 20 22 6e 6f onable is..# "no 15a0: 77 20 2b 20 31 20 64 61 79 22 2e 0a 09 73 65 74 w + 1 day"...set 15b0: 20 20 6d 79 6d 61 78 74 69 6d 65 73 74 61 6d 70 mymaxtimestamp 15c0: 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d [clock seconds] 15d0: 0a 09 69 6e 63 72 20 6d 79 6d 61 78 74 69 6d 65 ..incr mymaxtime 15e0: 73 74 61 6d 70 20 38 36 34 30 30 20 3b 20 23 20 stamp 86400 ; # 15f0: 32 34 68 20 2a 20 36 30 6d 69 6e 20 2a 20 36 30 24h * 60min * 60 1600: 73 65 63 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 sec..return. 1610: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ## 1620: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ######## 1630: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############. 1640: 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 ## Configurat 1650: 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 ion.. pragma 1660: 2d 68 61 73 69 6e 73 74 61 6e 63 65 73 20 20 20 -hasinstances 1670: 6e 6f 20 3b 20 23 20 73 69 6e 67 6c 65 74 6f 6e no ; # singleton 1680: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 . pragma -has 1690: 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 3b typeinfo no ; 16a0: 20 23 20 6e 6f 20 69 6e 74 72 6f 73 70 65 63 74 # no introspect 16b0: 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d ion. pragma - 16c0: 68 61 73 74 79 70 65 64 65 73 74 72 6f 79 20 6e hastypedestroy n 16d0: 6f 20 3b 20 23 20 69 6d 6d 6f 72 74 61 6c 0a 0a o ; # immortal.. 16e0: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### # 16f0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ## 1700: 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e ###########.}..n 1710: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a amespace eval :: 1720: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo 1730: 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 20 7b 0a rt::cvs::pass {. 1740: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 namespace ex 1750: 70 6f 72 74 20 61 74 6f 70 73 6f 72 74 0a 20 20 port atopsort. 1760: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c namespace eval 1770: 20 61 74 6f 70 73 6f 72 74 20 7b 0a 09 6e 61 6d atopsort {..nam 1780: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import :: 1790: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo 17a0: 72 74 3a 3a 63 76 73 3a 3a 63 79 63 6c 65 62 72 rt::cvs::cyclebr 17b0: 65 61 6b 65 72 0a 09 6e 61 6d 65 73 70 61 63 65 eaker..namespace 17c0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo 17d0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv 17e0: 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 s::state..namesp 17f0: 61 63 65 20 65 76 61 6c 20 70 72 6f 6a 65 63 74 ace eval project 1800: 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 {.. namespac 1810: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f 1820: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c 1830: 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 vs::project::rev 1840: 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 ..}..namespace i 1850: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c mport ::vc::tool 1860: 73 3a 3a 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 s::log..log regi 1870: 73 74 65 72 20 61 74 6f 70 73 6f 72 74 0a 20 20 ster atopsort. 1880: 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 }.}..# # ## ## 1890: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ######## 18a0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 ############# # 18b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 18c0: 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 ####.## Ready..p 18d0: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 ackage provide v 18e0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor 18f0: 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 61 74 t::cvs::pass::at 1900: 6f 70 73 6f 72 74 20 31 2e 30 0a 72 65 74 75 72 opsort 1.0.retur 1910: 6e 0a n.