Hex Artifact Content
Not logged in

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.