Hex Artifact Content
Not logged in

Artifact 76cc206f7397ab20d320fbdd0d88b3ee02bdf75b:

File tools/cvs2fossil/lib/c2f_patopsort.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 58 2e 20 54 68 69 73 20 70 61 73 73 20 67  s X. This pass g
0210: 6f 65 73 20 6f 76 65 72 20 61 6c 6c 20 63 68 61  oes over all cha
0220: 6e 67 65 73 65 74 73 20 61 6e 64 20 73 6f 72 74  ngesets and sort
0230: 73 20 74 68 65 6d 0a 23 23 20 74 6f 70 6f 6c 6f  s them.## topolo
0240: 67 69 63 61 6c 6c 79 2e 20 49 74 20 61 73 73 75  gically. It assu
0250: 6d 65 73 20 74 68 61 74 20 74 68 65 72 65 20 61  mes that there a
0260: 72 65 20 6e 6f 20 63 79 63 6c 65 73 20 77 68 69  re no cycles whi
0270: 63 68 20 63 6f 75 6c 64 0a 23 23 20 69 6d 70 65  ch could.## impe
0280: 64 65 20 69 74 2c 20 61 6e 79 20 72 65 6d 61 69  de it, any remai
0290: 6e 69 6e 67 20 68 61 76 69 6e 67 20 62 65 65 6e  ning having been
02a0: 20 62 72 6f 6b 65 6e 20 62 79 20 74 68 65 20 70   broken by the p
02b0: 72 65 76 69 6f 75 73 20 74 77 6f 0a 23 23 20 70  revious two.## p
02c0: 61 73 73 65 73 2c 20 61 6e 64 20 61 62 6f 72 74  asses, and abort
02d0: 73 20 69 66 20 74 68 61 74 20 63 6f 6e 64 69 74  s if that condit
02e0: 69 6f 6e 20 64 6f 65 73 6e 27 74 20 68 6f 6c 64  ion doesn't hold
02f0: 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  ...# # ## ### ##
0300: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0310: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
0320: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0330: 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73  .## Requirements
0340: 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72  ..package requir
0350: 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20  e 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 3b 20 23 20              ; # 
0380: 52 65 71 75 69 72 65 64 20 72 75 6e 74 69 6d 65  Required runtime
0390: 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72  ..package requir
03a0: 65 20 73 6e 69 74 20 20 20 20 20 20 20 20 20 20  e 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 3b 20 23 20              ; # 
03d0: 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b 61  OO system..packa
03e0: 67 65 20 72 65 71 75 69 72 65 20 73 74 72 75 63  ge require struc
03f0: 74 3a 3a 6c 69 73 74 20 20 20 20 20 20 20 20 20  t::list         
0400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0410: 20 20 20 20 20 3b 20 23 20 48 69 67 68 65 72 20       ; # Higher 
0420: 6f 72 64 65 72 20 6c 69 73 74 20 6f 70 65 72 61  order list opera
0430: 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72  tions..package r
0440: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73  equire vc::tools
0450: 3a 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20  ::log           
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0470: 20 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 61   ; # User feedba
0480: 63 6b 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ck..package requ
0490: 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  ire vc::fossil::
04a0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 63 79 63  import::cvs::cyc
04b0: 6c 65 62 72 65 61 6b 65 72 20 20 20 20 20 3b 20  lebreaker     ; 
04c0: 23 20 42 72 65 61 6b 69 6e 67 20 64 65 70 65 6e  # Breaking depen
04d0: 64 65 6e 63 79 20 63 79 63 6c 65 73 2e 0a 70 61  dency cycles..pa
04e0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63  ckage require vc
04f0: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
0500: 3a 3a 63 76 73 3a 3a 73 74 61 74 65 20 20 20 20  ::cvs::state    
0510: 20 20 20 20 20 20 20 20 3b 20 23 20 53 74 61 74          ; # Stat
0520: 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 6b 61  e storage..packa
0530: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66  ge require vc::f
0540: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
0550: 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76  vs::project::rev
0560: 20 20 20 20 20 3b 20 23 20 50 72 6f 6a 65 63 74       ; # Project
0570: 20 6c 65 76 65 6c 20 63 68 61 6e 67 65 73 65 74   level changeset
0580: 73 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  s..# # ## ### ##
0590: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
05a0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
05b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05c0: 0a 23 23 20 52 65 67 69 73 74 65 72 20 74 68 65  .## Register the
05d0: 20 70 61 73 73 20 77 69 74 68 20 74 68 65 20 6d   pass with the m
05e0: 61 6e 61 67 65 6d 65 6e 74 0a 0a 76 63 3a 3a 66  anagement..vc::f
05f0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
0600: 76 73 3a 3a 70 61 73 73 20 64 65 66 69 6e 65 20  vs::pass define 
0610: 5c 0a 20 20 20 20 41 6c 6c 54 6f 70 6f 6c 6f 67  \.    AllTopolog
0620: 69 63 61 6c 53 6f 72 74 20 5c 0a 20 20 20 20 7b  icalSort \.    {
0630: 54 6f 70 6f 6c 6f 67 69 63 61 6c 6c 79 20 53 6f  Topologically So
0640: 72 74 20 41 6c 6c 20 43 68 61 6e 67 65 53 65 74  rt All ChangeSet
0650: 73 7d 20 5c 0a 20 20 20 20 3a 3a 76 63 3a 3a 66  s} \.    ::vc::f
0660: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
0670: 76 73 3a 3a 70 61 73 73 3a 3a 61 74 6f 70 73 6f  vs::pass::atopso
0680: 72 74 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23  rt..# # ## ### #
0690: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
06a0: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23  ########### ####
06b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
06c0: 23 0a 23 23 20 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 63 73 6f 72 64 65 72 0a 0a 09 73 74 61 74  g csorder...stat
07c0: 65 20 77 72 69 74 69 6e 67 20 63 73 74 69 6d 65  e writing cstime
07d0: 73 74 61 6d 70 20 7b 0a 09 20 20 20 20 2d 2d 20  stamp {..    -- 
07e0: 43 6f 6d 6d 69 74 20 6f 72 64 65 72 20 6f 66 20  Commit order of 
07f0: 61 6c 6c 20 63 68 61 6e 67 65 73 65 74 73 20 62  all changesets b
0800: 61 73 65 64 20 6f 6e 20 74 68 65 69 72 0a 09 20  ased on their.. 
0810: 20 20 20 2d 2d 20 64 65 70 65 6e 64 65 6e 63 69     -- dependenci
0820: 65 73 2c 20 70 6c 75 73 20 61 20 6d 6f 6e 6f 74  es, plus a monot
0830: 6f 6e 69 63 61 6c 6c 79 20 69 6e 63 72 65 61 73  onically increas
0840: 69 6e 67 0a 09 20 20 20 20 2d 2d 20 74 69 6d 65  ing..    -- time
0850: 73 74 61 6d 70 2e 0a 0a 09 20 20 20 20 63 69 64  stamp....    cid
0860: 20 20 49 4e 54 45 47 45 52 20 20 4e 4f 54 20 4e    INTEGER  NOT N
0870: 55 4c 4c 20 20 52 45 46 45 52 45 4e 43 45 53 20  ULL  REFERENCES 
0880: 63 68 61 6e 67 65 73 65 74 2c 0a 09 20 20 20 20  changeset,..    
0890: 70 6f 73 20 20 49 4e 54 45 47 45 52 20 20 4e 4f  pos  INTEGER  NO
08a0: 54 20 4e 55 4c 4c 2c 0a 09 20 20 20 20 64 61 74  T NULL,..    dat
08b0: 65 20 49 4e 54 45 47 45 52 20 20 4e 4f 54 20 4e  e INTEGER  NOT N
08c0: 55 4c 4c 2c 0a 09 20 20 20 20 55 4e 49 51 55 45  ULL,..    UNIQUE
08d0: 20 28 63 69 64 29 2c 0a 09 20 20 20 20 55 4e 49   (cid),..    UNI
08e0: 51 55 45 20 28 70 6f 73 29 2c 0a 09 20 20 20 20  QUE (pos),..    
08f0: 55 4e 49 51 55 45 20 28 64 61 74 65 29 0a 09 7d  UNIQUE (date)..}
0900: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0910: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c      typemethod l
0920: 6f 61 64 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73  oad {} {..# Pass
0930: 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61   manager interfa
0940: 63 65 2e 20 45 78 65 63 75 74 65 64 20 74 6f 20  ce. Executed to 
0950: 6c 6f 61 64 20 64 61 74 61 20 63 6f 6d 70 75 74  load data comput
0960: 65 64 20 62 79 0a 09 23 20 74 68 69 73 20 70 61  ed by..# this pa
0970: 73 73 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 77  ss into memory w
0980: 68 65 6e 20 74 68 69 73 20 70 61 73 73 20 69 73  hen this pass is
0990: 20 73 6b 69 70 70 65 64 20 69 6e 73 74 65 61 64   skipped instead
09a0: 20 6f 66 0a 09 23 20 65 78 65 63 75 74 65 64 2e   of..# executed.
09b0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
09c0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 72      typemethod r
09d0: 75 6e 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73 20  un {} {..# Pass 
09e0: 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61 63  manager interfac
09f0: 65 2e 20 45 78 65 63 75 74 65 64 20 74 6f 20 70  e. Executed to p
0a00: 65 72 66 6f 72 6d 20 74 68 65 0a 09 23 20 66 75  erform the..# fu
0a10: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 6f 66 20 74  nctionality of t
0a20: 68 65 20 70 61 73 73 2e 0a 0a 09 63 79 63 6c 65  he pass....cycle
0a30: 62 72 65 61 6b 65 72 20 73 61 76 65 63 6d 64 20  breaker savecmd 
0a40: 20 5b 6d 79 70 72 6f 63 20 53 61 76 65 54 69 6d   [myproc SaveTim
0a50: 65 73 74 61 6d 70 73 5d 0a 0a 09 73 74 61 74 65  estamps]...state
0a60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09   transaction {..
0a70: 20 20 20 20 4c 6f 61 64 53 79 6d 62 6f 6c 43 68      LoadSymbolCh
0a80: 61 6e 67 65 73 65 74 73 0a 09 20 20 20 20 63 79  angesets..    cy
0a90: 63 6c 65 62 72 65 61 6b 65 72 20 72 75 6e 20 62  clebreaker run b
0aa0: 72 65 61 6b 2d 61 6c 6c 20 5b 6d 79 70 72 6f 63  reak-all [myproc
0ab0: 20 43 68 61 6e 67 65 73 65 74 73 5d 0a 09 7d 0a   Changesets]..}.
0ac0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
0ad0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 64 69     typemethod di
0ae0: 73 63 61 72 64 20 7b 7d 20 7b 0a 09 23 20 50 61  scard {} {..# Pa
0af0: 73 73 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72  ss manager inter
0b00: 66 61 63 65 2e 20 45 78 65 63 75 74 65 64 20 66  face. Executed f
0b10: 6f 72 20 61 6c 6c 20 70 61 73 73 65 73 20 61 66  or all passes af
0b20: 74 65 72 20 74 68 65 0a 09 23 20 72 75 6e 20 70  ter the..# run p
0b30: 61 73 73 65 73 2c 20 74 6f 20 72 65 6d 6f 76 65  asses, to remove
0b40: 20 61 6c 6c 20 64 61 74 61 20 6f 66 20 74 68 69   all data of thi
0b50: 73 20 70 61 73 73 20 66 72 6f 6d 20 74 68 65 20  s pass from the 
0b60: 73 74 61 74 65 2c 0a 09 23 20 61 73 20 62 65 69  state,..# as bei
0b70: 6e 67 20 6f 75 74 20 6f 66 20 64 61 74 65 2e 0a  ng out of date..
0b80: 0a 09 73 74 61 74 65 20 64 69 73 63 61 72 64 20  ..state discard 
0b90: 63 73 74 69 6d 65 73 74 61 6d 70 0a 09 72 65 74  cstimestamp..ret
0ba0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
0bb0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0bc0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0bd0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e  ######.    ## In
0be0: 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a  ternal methods..
0bf0: 20 20 20 20 70 72 6f 63 20 43 68 61 6e 67 65 73      proc Changes
0c00: 65 74 73 20 7b 7d 20 7b 20 70 72 6f 6a 65 63 74  ets {} { project
0c10: 3a 3a 72 65 76 20 61 6c 6c 20 7d 0a 0a 20 20 20  ::rev all }..   
0c20: 20 70 72 6f 63 20 4c 6f 61 64 53 79 6d 62 6f 6c   proc LoadSymbol
0c30: 43 68 61 6e 67 65 73 65 74 73 20 7b 7d 20 7b 0a  Changesets {} {.
0c40: 09 73 65 74 20 6d 79 73 79 6d 63 68 61 6e 67 65  .set mysymchange
0c50: 73 65 74 73 20 5b 73 74 72 75 63 74 3a 3a 6c 69  sets [struct::li
0c60: 73 74 20 66 69 6c 74 65 72 20 5b 70 72 6f 6a 65  st filter [proje
0c70: 63 74 3a 3a 72 65 76 20 61 6c 6c 5d 20 5b 6d 79  ct::rev all] [my
0c80: 70 72 6f 63 20 49 73 42 79 53 79 6d 62 6f 6c 5d  proc IsBySymbol]
0c90: 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  ]..return.    }.
0ca0: 0a 20 20 20 20 70 72 6f 63 20 53 61 76 65 54 69  .    proc SaveTi
0cb0: 6d 65 73 74 61 6d 70 73 20 7b 67 72 61 70 68 20  mestamps {graph 
0cc0: 61 74 20 63 73 65 74 7d 20 7b 0a 09 73 65 74 20  at cset} {..set 
0cd0: 63 69 64 20 5b 24 63 73 65 74 20 69 64 5d 0a 0a  cid [$cset id]..
0ce0: 09 73 65 74 20 64 61 74 65 20 5b 47 65 74 54 69  .set date [GetTi
0cf0: 6d 65 20 5b 6c 69 6e 64 65 78 20 5b 24 67 72 61  me [lindex [$gra
0d00: 70 68 20 6e 6f 64 65 20 67 65 74 20 24 63 73 65  ph node get $cse
0d10: 74 20 74 69 6d 65 72 61 6e 67 65 5d 20 31 5d 20  t timerange] 1] 
0d20: 5c 0a 09 09 20 20 20 20 20 20 5b 73 74 72 75 63  \...      [struc
0d30: 74 3a 3a 73 65 74 20 63 6f 6e 74 61 69 6e 20 24  t::set contain $
0d40: 6d 79 73 79 6d 63 68 61 6e 67 65 73 65 74 73 20  mysymchangesets 
0d50: 24 63 73 65 74 5d 5d 0a 0a 09 6c 6f 67 20 77 72  $cset]]...log wr
0d60: 69 74 65 20 34 20 61 74 6f 70 73 6f 72 74 20 22  ite 4 atopsort "
0d70: 43 68 61 6e 67 65 73 65 74 20 40 20 24 61 74 3a  Changeset @ $at:
0d80: 20 5b 24 63 73 65 74 20 73 74 72 5d 22 0a 09 73   [$cset str]"..s
0d90: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20  tate run {..    
0da0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 73 74 69  INSERT INTO csti
0db0: 6d 65 73 74 61 6d 70 20 28 63 69 64 2c 20 20 70  mestamp (cid,  p
0dc0: 6f 73 2c 20 64 61 74 65 29 0a 09 20 20 20 20 56  os, date)..    V
0dd0: 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20  ALUES           
0de0: 20 20 20 20 20 20 20 28 24 63 69 64 2c 20 24 61         ($cid, $a
0df0: 74 2c 20 24 64 61 74 65 29 0a 09 7d 0a 09 72 65  t, $date)..}..re
0e00: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
0e10: 70 72 6f 63 20 47 65 74 54 69 6d 65 20 7b 73 74  proc GetTime {st
0e20: 61 6d 70 20 65 78 70 65 63 74 63 68 61 6e 67 65  amp expectchange
0e30: 7d 20 7b 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20  } {..::variable 
0e40: 6d 79 6c 61 73 74 74 69 6d 65 73 74 61 6d 70 0a  mylasttimestamp.
0e50: 09 69 66 20 7b 24 73 74 61 6d 70 20 3e 20 24 6d  .if {$stamp > $m
0e60: 79 6d 61 78 74 69 6d 65 73 74 61 6d 70 7d 20 7b  ymaxtimestamp} {
0e70: 0a 09 20 20 20 20 23 20 41 20 74 69 6d 65 73 74  ..    # A timest
0e80: 61 6d 70 20 69 6e 20 74 68 65 20 66 75 74 75 72  amp in the futur
0e90: 65 20 69 73 20 62 65 6c 69 65 76 65 64 20 74 6f  e is believed to
0ea0: 20 62 65 20 62 6f 67 75 73 20 61 6e 64 0a 09 20   be bogus and.. 
0eb0: 20 20 20 23 20 73 68 69 66 74 65 64 20 62 61 63     # shifted bac
0ec0: 6b 77 61 72 73 20 69 6e 20 74 69 6d 65 20 74 6f  kwars in time to
0ed0: 20 70 72 65 76 65 6e 74 20 69 74 20 66 72 6f 6d   prevent it from
0ee0: 20 66 6f 72 63 69 6e 67 0a 09 20 20 20 20 23 20   forcing..    # 
0ef0: 6f 74 68 65 72 20 74 69 6d 65 73 74 61 6d 70 73  other timestamps
0f00: 20 74 6f 20 62 65 20 70 75 73 68 65 64 20 65 76   to be pushed ev
0f10: 65 6e 20 66 75 72 74 68 65 72 20 69 6e 20 74 68  en further in th
0f20: 65 0a 09 20 20 20 20 23 20 66 75 74 75 72 65 2e  e..    # future.
0f30: 0a 0a 09 20 20 20 20 23 20 46 72 6f 6d 20 63 76  ...    # From cv
0f40: 73 32 73 76 6e 3a 20 4e 6f 74 65 20 74 68 61 74  s2svn: Note that
0f50: 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 61   this is not nea
0f60: 72 6c 79 20 61 20 63 6f 6d 70 6c 65 74 65 0a 09  rly a complete..
0f70: 20 20 20 20 23 20 73 6f 6c 75 74 69 6f 6e 20 74      # solution t
0f80: 6f 20 74 68 65 20 62 6f 67 75 73 20 74 69 6d 65  o the bogus time
0f90: 73 74 61 6d 70 20 70 72 6f 62 6c 65 6d 2e 20 20  stamp problem.  
0fa0: 41 20 74 69 6d 65 73 74 61 6d 70 20 69 6e 0a 09  A timestamp in..
0fb0: 20 20 20 20 23 20 74 68 65 20 66 75 74 75 72 65      # the future
0fc0: 20 73 74 69 6c 6c 20 61 66 66 65 63 74 73 20 74   still affects t
0fd0: 68 65 20 6f 72 64 65 72 69 6e 67 20 6f 66 20 63  he ordering of c
0fe0: 68 61 6e 67 65 73 65 74 73 2c 20 61 6e 64 0a 09  hangesets, and..
0ff0: 20 20 20 20 23 20 61 20 63 68 61 6e 67 65 73 65      # a changese
1000: 74 20 68 61 76 69 6e 67 20 73 75 63 68 20 61 20  t having such a 
1010: 74 69 6d 65 73 74 61 6d 70 20 77 69 6c 6c 20 6e  timestamp will n
1020: 6f 74 20 62 65 0a 09 20 20 20 20 23 20 63 6f 6d  ot be..    # com
1030: 6d 69 74 74 65 64 20 75 6e 74 69 6c 20 61 6c 6c  mitted until all
1040: 20 63 68 61 6e 67 65 73 65 74 73 20 77 69 74 68   changesets with
1050: 20 65 61 72 6c 69 65 72 20 74 69 6d 65 73 74 61   earlier timesta
1060: 6d 70 73 0a 09 20 20 20 20 23 20 68 61 76 65 20  mps..    # have 
1070: 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 2c 20  been committed, 
1080: 65 76 65 6e 20 69 66 20 6f 74 68 65 72 20 63 68  even if other ch
1090: 61 6e 67 65 73 65 74 73 20 77 69 74 68 20 65 76  angesets with ev
10a0: 65 6e 0a 09 20 20 20 20 23 20 65 61 72 6c 69 65  en..    # earlie
10b0: 72 20 74 69 6d 65 73 74 61 6d 70 73 20 64 65 70  r timestamps dep
10c0: 65 6e 64 20 6f 6e 20 74 68 69 73 20 6f 6e 65 2e  end on this one.
10d0: 0a 0a 09 20 20 20 20 69 6e 63 72 20 6d 79 6c 61  ...    incr myla
10e0: 73 74 74 69 6d 65 73 74 61 6d 70 0a 09 20 20 20  sttimestamp..   
10f0: 20 69 66 20 7b 21 24 65 78 70 65 63 74 63 68 61   if {!$expectcha
1100: 6e 67 65 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69  nge} {...log wri
1110: 74 65 20 34 20 61 74 6f 70 73 6f 72 74 20 22 54  te 4 atopsort "T
1120: 69 6d 65 73 74 61 6d 70 20 5b 63 6c 6f 63 6b 20  imestamp [clock 
1130: 66 6f 72 6d 61 74 20 24 73 74 61 6d 70 5d 20 69  format $stamp] i
1140: 73 20 69 6e 20 74 68 65 20 66 75 74 75 72 65 3b  s in the future;
1150: 20 73 68 69 66 74 65 64 20 62 61 63 6b 20 74 6f   shifted back to
1160: 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 24   [clock format $
1170: 6d 79 6c 61 73 74 74 69 6d 65 73 74 61 6d 70 5d  mylasttimestamp]
1180: 22 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73 65  "..    }..} else
1190: 69 66 20 7b 24 73 74 61 6d 70 20 3c 20 28 24 6d  if {$stamp < ($m
11a0: 79 6c 61 73 74 74 69 6d 65 73 74 61 6d 70 29 2b  ylasttimestamp)+
11b0: 31 7d 20 7b 0a 09 20 20 20 20 69 6e 63 72 20 6d  1} {..    incr m
11c0: 79 6c 61 73 74 74 69 6d 65 73 74 61 6d 70 0a 09  ylasttimestamp..
11d0: 20 20 20 20 69 66 20 7b 21 24 65 78 70 65 63 74      if {!$expect
11e0: 63 68 61 6e 67 65 7d 20 7b 0a 09 09 6c 6f 67 20  change} {...log 
11f0: 77 72 69 74 65 20 34 20 61 74 6f 70 73 6f 72 74  write 4 atopsort
1200: 20 22 54 69 6d 65 73 74 61 6d 70 20 5b 63 6c 6f   "Timestamp [clo
1210: 63 6b 20 66 6f 72 6d 61 74 20 24 73 74 61 6d 70  ck format $stamp
1220: 5d 20 61 64 6a 75 73 74 65 64 20 74 6f 20 5b 63  ] adjusted to [c
1230: 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 24 6d 79 6c  lock format $myl
1240: 61 73 74 74 69 6d 65 73 74 61 6d 70 5d 22 0a 09  asttimestamp]"..
1250: 20 20 20 20 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a      }..} else {.
1260: 09 20 20 20 20 73 65 74 20 6d 79 6c 61 73 74 74  .    set mylastt
1270: 69 6d 65 73 74 61 6d 70 20 24 73 74 61 6d 70 0a  imestamp $stamp.
1280: 09 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 6c 61  .}..return $myla
1290: 73 74 74 69 6d 65 73 74 61 6d 70 0a 20 20 20 20  sttimestamp.    
12a0: 7d 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69 61  }..    typevaria
12b0: 62 6c 65 20 6d 79 73 79 6d 63 68 61 6e 67 65 73  ble mysymchanges
12c0: 65 74 73 20 7b 7d 20 3b 20 23 20 53 65 74 20 6f  ets {} ; # Set o
12d0: 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 63 68 61  f the symbol cha
12e0: 6e 67 65 73 65 74 73 2e 0a 20 20 20 20 74 79 70  ngesets..    typ
12f0: 65 76 61 72 69 61 62 6c 65 20 6d 79 6c 61 73 74  evariable mylast
1300: 74 69 6d 65 73 74 61 6d 70 20 30 20 20 3b 20 23  timestamp 0  ; #
1310: 20 4c 61 73 74 20 64 65 6c 69 76 65 72 65 64 20   Last delivered 
1320: 74 69 6d 65 73 74 61 6d 70 2e 0a 20 20 20 20 74  timestamp..    t
1330: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6d 61  ypevariable myma
1340: 78 74 69 6d 65 73 74 61 6d 70 20 0a 0a 20 20 20  xtimestamp ..   
1350: 20 74 79 70 65 63 6f 6e 73 74 72 75 63 74 6f 72   typeconstructor
1360: 20 7b 0a 09 23 20 54 68 65 20 6d 61 78 69 6d 75   {..# The maximu
1370: 6d 20 74 69 6d 65 73 74 61 6d 70 20 63 6f 6e 73  m timestamp cons
1380: 69 64 65 72 65 64 20 61 73 20 72 65 61 73 6f 6e  idered as reason
1390: 61 62 6c 65 20 69 73 0a 09 23 20 22 6e 6f 77 20  able is..# "now 
13a0: 2b 20 31 20 64 61 79 22 2e 0a 09 73 65 74 20 20  + 1 day"...set  
13b0: 6d 79 6d 61 78 74 69 6d 65 73 74 61 6d 70 20 5b  mymaxtimestamp [
13c0: 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 09  clock seconds]..
13d0: 69 6e 63 72 20 6d 79 6d 61 78 74 69 6d 65 73 74  incr mymaxtimest
13e0: 61 6d 70 20 38 36 34 30 30 20 3b 20 23 20 32 34  amp 86400 ; # 24
13f0: 68 20 2a 20 36 30 6d 69 6e 20 2a 20 36 30 73 65  h * 60min * 60se
1400: 63 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  c..return.    }.
1410: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
1420: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
1430: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
1440: 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f   ## Configuratio
1450: 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68  n..    pragma -h
1460: 61 73 69 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f  asinstances   no
1470: 20 3b 20 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20   ; # singleton. 
1480: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79     pragma -hasty
1490: 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23  peinfo    no ; #
14a0: 20 6e 6f 20 69 6e 74 72 6f 73 70 65 63 74 69 6f   no introspectio
14b0: 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61  n.    pragma -ha
14c0: 73 74 79 70 65 64 65 73 74 72 6f 79 20 6e 6f 20  stypedestroy no 
14d0: 3b 20 23 20 69 6d 6d 6f 72 74 61 6c 0a 0a 20 20  ; # immortal..  
14e0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
14f0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
1500: 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d  #########.}..nam
1510: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63  espace eval ::vc
1520: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
1530: 3a 3a 63 76 73 3a 3a 70 61 73 73 20 7b 0a 20 20  ::cvs::pass {.  
1540: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f    namespace expo
1550: 72 74 20 61 74 6f 70 73 6f 72 74 0a 20 20 20 20  rt atopsort.    
1560: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 61  namespace eval a
1570: 74 6f 70 73 6f 72 74 20 7b 0a 09 6e 61 6d 65 73  topsort {..names
1580: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63  pace import ::vc
1590: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
15a0: 3a 3a 63 76 73 3a 3a 63 79 63 6c 65 62 72 65 61  ::cvs::cyclebrea
15b0: 6b 65 72 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  ker..namespace i
15c0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73  mport ::vc::foss
15d0: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
15e0: 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63  :state..namespac
15f0: 65 20 65 76 61 6c 20 70 72 6f 6a 65 63 74 20 7b  e eval project {
1600: 0a 09 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  ..    namespace 
1610: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73  import ::vc::fos
1620: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
1630: 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 0a 09  ::project::rev..
1640: 7d 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  }..namespace imp
1650: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a  ort ::vc::tools:
1660: 3a 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 73 74  :log..log regist
1670: 65 72 20 61 74 6f 70 73 6f 72 74 0a 20 20 20 20  er atopsort.    
1680: 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20  }.}..# # ## ### 
1690: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
16a0: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
16b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
16c0: 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63  ##.## Ready..pac
16d0: 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a  kage provide vc:
16e0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
16f0: 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 61 74 6f 70  :cvs::pass::atop
1700: 73 6f 72 74 20 31 2e 30 0a 72 65 74 75 72 6e 0a  sort 1.0.return.