Artifact 880ea7b085a2144b7e2291d3cfa0c363180bbdde:
File
tools/cvs2fossil/lib/c2f_file.tcl
part of check-in
[cb70cf4ad6]
- The basic work of setting up and linking revisions, tags, and branches is complete.
by
aku on
2007-10-13 05:39:00.
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 46 69 6c ########..## Fil
0200: 65 2c 20 70 61 72 74 20 6f 66 20 61 20 70 72 6f e, part of a pro
0210: 6a 65 63 74 2c 20 70 61 72 74 20 6f 66 20 61 20 ject, part of a
0220: 43 56 53 20 72 65 70 6f 73 69 74 6f 72 79 2e 20 CVS repository.
0230: 4d 75 6c 74 69 70 6c 65 0a 23 23 20 69 6e 73 74 Multiple.## inst
0240: 61 6e 63 65 73 20 61 72 65 20 70 6f 73 73 69 62 ances are possib
0250: 6c 65 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20 le...# # ## ###
0260: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
0270: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 ############ ###
0280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0290: 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e ##.## Requiremen
02a0: 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 ts..package requ
02b0: 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20 ire Tcl 8.4
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02d0: 20 20 20 20 20 20 20 20 3b 20 23 20 52 65 71 75 ; # Requ
02e0: 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61 ired runtime..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 6e ckage require sn
0300: 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 it
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0320: 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e ; # OO system.
0330: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require
0340: 20 73 74 72 75 63 74 3a 3a 73 65 74 20 20 20 20 struct::set
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0360: 20 20 20 20 20 3b 20 23 20 53 65 74 20 6f 70 65 ; # Set ope
0370: 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 rations..package
0380: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 require vc::fos
0390: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
03a0: 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20 23 ::file::rev ; #
03b0: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72 65 CVS per file re
03c0: 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 visions..package
03d0: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 require vc::fos
03e0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
03f0: 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20 23 ::file::sym ; #
0400: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73 79 CVS per file sy
0410: 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20 72 mbols..package r
0420: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 equire vc::tools
0430: 3a 3a 74 72 6f 75 62 6c 65 20 20 20 20 20 20 20 ::trouble
0440: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 45 ; # E
0450: 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 0a rror reporting..
0460: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
0470: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 vc::tools::misc
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0490: 20 20 20 20 3b 20 23 20 54 65 78 74 20 66 6f 72 ; # Text for
04a0: 6d 61 74 74 69 6e 67 0a 0a 23 20 23 20 23 23 20 matting..# # ##
04b0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
04c0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
04d0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ###############
04e0: 23 23 23 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 ######.## ..snit
04f0: 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 ::type ::vc::fos
0500: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
0510: 3a 3a 66 69 6c 65 20 7b 0a 20 20 20 20 23 20 23 ::file {. # #
0520: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
0530: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0540: 23 23 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c ####. ## Publ
0550: 69 63 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73 ic API.. cons
0560: 74 72 75 63 74 6f 72 20 7b 70 61 74 68 20 70 72 tructor {path pr
0570: 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74 20 6d 79 oject} {..set my
0580: 70 61 74 68 20 20 20 20 24 70 61 74 68 0a 09 73 path $path..s
0590: 65 74 20 6d 79 70 72 6f 6a 65 63 74 20 24 70 72 et myproject $pr
05a0: 6f 6a 65 63 74 0a 09 72 65 74 75 72 6e 0a 20 20 oject..return.
05b0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
05c0: 70 61 74 68 20 20 20 20 7b 7d 20 7b 20 72 65 74 path {} { ret
05d0: 75 72 6e 20 24 6d 79 70 61 74 68 20 7d 0a 20 20 urn $mypath }.
05e0: 20 20 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63 74 method project
05f0: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 {} { return $my
0600: 70 72 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20 23 project }.. #
0610: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
0620: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
0630: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 4d 65 ######. ## Me
0640: 74 68 6f 64 73 20 72 65 71 75 69 72 65 64 20 66 thods required f
0650: 6f 72 20 74 68 65 20 63 6c 61 73 73 20 74 6f 20 or the class to
0660: 62 65 20 61 20 73 69 6e 6b 20 6f 66 20 74 68 65 be a sink of the
0670: 20 72 63 73 20 70 61 72 73 65 72 0a 0a 20 20 20 rcs parser..
0680: 20 23 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 7b #method begin {
0690: 7d 20 7b 70 75 74 73 20 62 65 67 69 6e 7d 0a 20 } {puts begin}.
06a0: 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 68 65 #method sethe
06b0: 61 64 20 7b 68 7d 20 7b 70 75 74 73 20 68 65 61 ad {h} {puts hea
06c0: 64 3d 24 68 7d 0a 20 20 20 20 23 6d 65 74 68 6f d=$h}. #metho
06d0: 64 20 73 65 74 70 72 69 6e 63 69 70 61 6c 62 72 d setprincipalbr
06e0: 61 6e 63 68 20 7b 62 7d 20 7b 70 75 74 73 20 70 anch {b} {puts p
06f0: 62 3d 24 62 7d 0a 20 20 20 20 23 6d 65 74 68 6f b=$b}. #metho
0700: 64 20 64 65 66 74 61 67 20 7b 73 20 72 7d 20 7b d deftag {s r} {
0710: 70 75 74 73 20 24 73 3d 24 72 7d 0a 20 20 20 20 puts $s=$r}.
0720: 23 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65 #method setcomme
0730: 6e 74 20 7b 63 7d 20 7b 70 75 74 73 20 63 6f 6d nt {c} {puts com
0740: 6d 65 6e 74 3d 24 63 7d 0a 20 20 20 20 23 6d 65 ment=$c}. #me
0750: 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 20 7b thod admindone {
0760: 7d 20 7b 70 75 74 73 20 61 64 6d 69 6e 64 6f 6e } {puts admindon
0770: 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 e}. #method d
0780: 65 66 20 7b 72 65 76 20 64 61 74 65 20 61 75 74 ef {rev date aut
0790: 68 6f 72 20 73 74 61 74 65 20 6e 65 78 74 20 62 hor state next b
07a0: 72 61 6e 63 68 65 73 7d 20 7b 70 75 74 73 20 22 ranches} {puts "
07b0: 64 65 66 20 24 72 65 76 20 24 64 61 74 65 20 24 def $rev $date $
07c0: 61 75 74 68 6f 72 20 24 73 74 61 74 65 20 24 6e author $state $n
07d0: 65 78 74 20 24 62 72 61 6e 63 68 65 73 22 7d 0a ext $branches"}.
07e0: 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 64 #method defd
07f0: 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 65 66 one {} {puts def
0800: 2d 64 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68 -done}. #meth
0810: 6f 64 20 73 65 74 64 65 73 63 20 7b 64 7d 20 7b od setdesc {d} {
0820: 70 75 74 73 20 64 65 73 63 3d 24 64 7d 0a 20 20 puts desc=$d}.
0830: 20 20 23 6d 65 74 68 6f 64 20 65 78 74 65 6e 64 #method extend
0840: 20 7b 72 65 76 20 63 6f 6d 6d 69 74 6d 73 67 20 {rev commitmsg
0850: 64 65 6c 74 61 72 61 6e 67 65 7d 20 7b 70 75 74 deltarange} {put
0860: 73 20 22 65 78 74 65 6e 64 20 24 63 6f 6d 6d 69 s "extend $commi
0870: 74 6d 73 67 20 24 64 65 6c 74 61 72 61 6e 67 65 tmsg $deltarange
0880: 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 "}. #method d
0890: 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 6f 6e one {} {puts don
08a0: 65 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 e}.. # # ## #
08b0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
08c0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
08d0: 20 20 20 20 23 23 20 50 65 72 73 69 73 74 65 6e ## Persisten
08e0: 63 65 20 28 70 61 73 73 20 49 49 29 0a 0a 20 20 ce (pass II)..
08f0: 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74 method persist
0900: 20 7b 7d 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20 {} {. }..
0910: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
0920: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
0930: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
0940: 49 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 73 69 Implement the si
0950: 6e 6b 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 62 nk.. method b
0960: 65 67 69 6e 20 7b 7d 20 7b 23 69 67 6e 6f 72 65 egin {} {#ignore
0970: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 }.. method se
0980: 74 68 65 61 64 20 7b 72 65 76 6e 72 7d 20 7b 0a thead {revnr} {.
0990: 09 73 65 74 20 6d 79 68 65 61 64 20 24 72 65 76 .set myhead $rev
09a0: 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d nr..return. }
09b0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 .. method set
09c0: 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 principalbranch
09d0: 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 73 65 {branchnr} {..se
09e0: 74 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 24 62 t myprincipal $b
09f0: 72 61 6e 63 68 6e 72 0a 09 72 65 74 75 72 6e 0a ranchnr..return.
0a00: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
0a10: 64 20 64 65 66 74 61 67 20 7b 6e 61 6d 65 20 72 d deftag {name r
0a20: 65 76 6e 72 7d 20 7b 0a 09 23 20 46 55 54 55 52 evnr} {..# FUTUR
0a30: 45 3a 20 50 65 72 66 6f 72 6d 20 73 79 6d 62 6f E: Perform symbo
0a40: 6c 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e l transformation
0a50: 20 68 65 72 65 2e 0a 0a 09 69 66 20 7b 5b 73 74 here....if {[st
0a60: 72 75 63 74 3a 3a 73 65 74 20 63 6f 6e 74 61 69 ruct::set contai
0a70: 6e 73 20 24 6d 79 73 79 6d 62 6f 6c 73 20 24 6e ns $mysymbols $n
0a80: 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f ame]} {.. tro
0a90: 75 62 6c 65 20 66 61 74 61 6c 20 22 4d 75 6c 74 uble fatal "Mult
0aa0: 69 70 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 iple definitions
0ab0: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 27 of the symbol '
0ac0: 24 6e 61 6d 65 27 20 69 6e 20 27 24 6d 79 70 61 $name' in '$mypa
0ad0: 74 68 27 22 0a 09 20 20 20 20 72 65 74 75 72 6e th'".. return
0ae0: 0a 09 7d 0a 0a 09 73 74 72 75 63 74 3a 3a 73 65 ..}...struct::se
0af0: 74 20 61 64 64 20 6d 79 73 79 6d 62 6f 6c 73 20 t add mysymbols
0b00: 24 6e 61 6d 65 0a 0a 09 69 66 20 7b 5b 72 65 76 $name...if {[rev
0b10: 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72 20 24 isbranchrevnr $
0b20: 72 65 76 6e 72 20 2d 3e 20 62 72 61 6e 63 68 6e revnr -> branchn
0b30: 72 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 r]} {.. $self
0b40: 20 41 64 64 42 72 61 6e 63 68 20 24 6e 61 6d 65 AddBranch $name
0b50: 20 24 62 72 61 6e 63 68 6e 72 0a 09 7d 20 65 6c $branchnr..} el
0b60: 73 65 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 se {.. $self
0b70: 41 64 64 54 61 67 20 24 6e 61 6d 65 20 24 72 65 AddTag $name $re
0b80: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 vnr..}..return.
0b90: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
0ba0: 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d 20 setcomment {c}
0bb0: 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 20 20 {# ignore}..
0bc0: 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 method admindone
0bd0: 20 7b 7d 20 7b 0a 09 23 20 57 65 20 64 6f 20 6e {} {..# We do n
0be0: 6f 74 68 69 6e 67 20 61 74 20 74 68 65 20 62 6f othing at the bo
0bf0: 75 6e 64 61 72 79 20 6f 66 20 61 64 6d 69 6e 20 undary of admin
0c00: 61 6e 64 20 72 65 76 69 73 69 6f 6e 20 64 61 74 and revision dat
0c10: 61 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 a. }.. met
0c20: 68 6f 64 20 64 65 66 20 7b 72 65 76 6e 72 20 64 hod def {revnr d
0c30: 61 74 65 20 61 75 74 68 6f 72 20 73 74 61 74 65 ate author state
0c40: 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73 7d 20 next branches}
0c50: 7b 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 64 42 {..$self RecordB
0c60: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 24 62 72 ranchCommits $br
0c70: 61 6e 63 68 65 73 0a 09 24 6d 79 70 72 6f 6a 65 anches..$myproje
0c80: 63 74 20 61 75 74 68 6f 72 20 24 61 75 74 68 6f ct author $autho
0c90: 72 0a 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 r...if {[info ex
0ca0: 69 73 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e ists myrev($revn
0cb0: 72 29 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75 r)]} {.. trou
0cc0: 62 6c 65 20 66 61 74 61 6c 20 22 46 69 6c 65 20 ble fatal "File
0cd0: 24 6d 79 70 61 74 68 20 63 6f 6e 74 61 69 6e 73 $mypath contains
0ce0: 20 64 75 70 6c 69 63 61 74 65 20 64 65 66 69 6e duplicate defin
0cf0: 69 74 69 6f 6e 73 20 66 6f 72 20 72 65 76 69 73 itions for revis
0d00: 69 6f 6e 20 24 72 65 76 6e 72 2e 22 0a 09 20 20 ion $revnr."..
0d10: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 65 return..}...se
0d20: 74 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 20 t myrev($revnr)
0d30: 5b 72 65 76 20 25 41 55 54 4f 25 20 24 72 65 76 [rev %AUTO% $rev
0d40: 6e 72 20 24 64 61 74 65 20 24 61 75 74 68 6f 72 nr $date $author
0d50: 20 24 73 74 61 74 65 20 24 73 65 6c 66 5d 0a 0a $state $self]..
0d60: 09 52 65 63 6f 72 64 42 61 73 69 63 44 65 70 65 .RecordBasicDepe
0d70: 6e 64 65 6e 63 69 65 73 20 24 72 65 76 6e 72 20 ndencies $revnr
0d80: 24 6e 65 78 74 0a 09 72 65 74 75 72 6e 0a 20 20 $next..return.
0d90: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
0da0: 64 65 66 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 defdone {} {..#
0db0: 54 68 69 73 20 69 73 20 61 6c 6c 20 64 6f 6e 65 This is all done
0dc0: 20 61 66 74 65 72 20 74 68 65 20 72 65 76 69 73 after the revis
0dd0: 69 6f 6e 20 74 72 65 65 20 68 61 73 20 62 65 65 ion tree has bee
0de0: 6e 20 65 78 74 72 61 63 74 65 64 0a 09 23 20 66 n extracted..# f
0df0: 72 6f 6d 20 74 68 65 20 66 69 6c 65 2c 20 62 65 rom the file, be
0e00: 66 6f 72 65 20 74 68 65 20 63 6f 6d 6d 69 74 20 fore the commit
0e10: 6d 65 73 61 67 65 73 20 61 6e 64 20 64 65 6c 74 mesages and delt
0e20: 61 20 74 65 78 74 73 20 61 72 65 0a 09 23 20 70 a texts are..# p
0e30: 72 6f 63 65 73 73 65 64 2e 0a 0a 09 50 72 6f 63 rocessed....Proc
0e40: 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 essPrimaryDepend
0e50: 65 6e 63 69 65 73 0a 09 50 72 6f 63 65 73 73 42 encies..ProcessB
0e60: 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 65 ranchDependencie
0e70: 73 0a 09 53 6f 72 74 42 72 61 6e 63 68 65 73 0a s..SortBranches.
0e80: 09 50 72 6f 63 65 73 73 54 61 67 44 65 70 65 6e .ProcessTagDepen
0e90: 64 65 6e 63 69 65 73 0a 09 44 65 74 65 72 6d 69 dencies..Determi
0ea0: 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69 6f neTheRootRevisio
0eb0: 6e 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a n..return. }.
0ec0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 64 . method setd
0ed0: 65 73 63 20 7b 64 7d 20 7b 23 20 69 67 6e 6f 72 esc {d} {# ignor
0ee0: 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 65 e}.. method e
0ef0: 78 74 65 6e 64 20 7b 72 65 76 6e 72 20 63 6f 6d xtend {revnr com
0f00: 6d 69 74 6d 73 67 20 64 65 6c 74 61 72 61 6e 67 mitmsg deltarang
0f10: 65 7d 20 7b 0a 09 73 65 74 20 63 6d 20 5b 73 74 e} {..set cm [st
0f20: 72 69 6e 67 20 74 72 69 6d 20 24 63 6f 6d 6d 69 ring trim $commi
0f30: 74 6d 73 67 5d 0a 09 24 6d 79 70 72 6f 6a 65 63 tmsg]..$myprojec
0f40: 74 20 63 6d 65 73 73 61 67 65 20 24 63 6d 0a 0a t cmessage $cm..
0f50: 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 76 28 .set rev $myrev(
0f60: 24 72 65 76 6e 72 29 0a 0a 09 69 66 20 7b 5b 24 $revnr)...if {[$
0f70: 72 65 76 20 68 61 73 63 6f 6d 6d 69 74 6d 73 67 rev hascommitmsg
0f80: 5d 7d 20 7b 0a 09 20 20 20 20 23 20 41 70 70 61 ]} {.. # Appa
0f90: 72 65 6e 74 6c 79 20 72 65 70 6f 73 69 74 6f 72 rently repositor
0fa0: 69 65 73 20 65 78 69 73 74 20 69 6e 20 77 68 69 ies exist in whi
0fb0: 63 68 20 74 68 65 20 64 65 6c 74 61 20 64 61 74 ch the delta dat
0fc0: 61 0a 09 20 20 20 20 23 20 66 6f 72 20 72 65 76 a.. # for rev
0fd0: 69 73 69 6f 6e 20 31 2e 31 20 69 73 20 70 72 6f ision 1.1 is pro
0fe0: 76 69 64 65 64 20 73 65 76 65 72 61 6c 20 74 69 vided several ti
0ff0: 6d 65 73 2c 20 61 74 20 6c 65 61 73 74 0a 09 20 mes, at least..
1000: 20 20 20 23 20 74 77 69 63 65 2e 20 54 68 65 20 # twice. The
1010: 61 63 74 75 61 6c 20 63 61 75 73 65 20 6f 66 20 actual cause of
1020: 74 68 69 73 20 64 75 70 6c 69 63 61 74 69 6f 6e this duplication
1030: 20 69 73 20 6e 6f 74 0a 09 20 20 20 20 23 20 6b is not.. # k
1040: 6e 6f 77 6e 2e 20 53 70 65 63 75 6c 61 74 69 6f nown. Speculatio
1050: 6e 20 63 65 6e 74 65 72 73 20 6f 6e 20 52 43 53 n centers on RCS
1060: 2f 43 56 53 20 62 75 67 73 2c 20 6f 72 20 66 72 /CVS bugs, or fr
1070: 6f 6d 0a 09 20 20 20 20 23 20 6d 61 6e 75 61 6c om.. # manual
1080: 20 65 64 69 74 73 20 6f 66 20 74 68 65 20 72 65 edits of the re
1090: 70 6f 73 69 74 6f 72 79 20 77 68 69 63 68 20 62 pository which b
10a0: 6f 72 6b 65 64 20 74 68 65 0a 09 20 20 20 20 23 orked the.. #
10b0: 20 69 6e 74 65 72 6e 61 6c 73 2e 20 57 68 61 74 internals. What
10c0: 65 76 65 72 20 74 68 65 20 63 61 75 73 65 2c 20 ever the cause,
10d0: 74 65 73 74 69 6e 67 20 73 68 6f 77 65 64 20 74 testing showed t
10e0: 68 61 74 20 62 6f 74 68 0a 09 20 20 20 20 23 20 hat both.. #
10f0: 63 76 73 20 61 6e 64 20 72 63 73 20 75 73 65 20 cvs and rcs use
1100: 74 68 65 20 66 69 72 73 74 20 64 65 66 69 6e 69 the first defini
1110: 74 69 6f 6e 20 77 68 65 6e 20 70 65 72 66 6f 72 tion when perfor
1120: 6d 69 6e 67 20 61 0a 09 20 20 20 20 23 20 63 68 ming a.. # ch
1130: 65 63 6b 6f 75 74 2c 20 61 6e 64 20 77 65 20 66 eckout, and we f
1140: 6f 6c 6c 6f 77 20 74 68 65 69 72 20 6c 65 61 64 ollow their lead
1150: 2e 20 53 69 64 65 20 6e 6f 74 65 73 3a 20 27 63 . Side notes: 'c
1160: 76 73 0a 09 20 20 20 20 23 20 6c 6f 67 27 20 66 vs.. # log' f
1170: 61 69 6c 73 20 6f 6e 20 73 75 63 68 20 61 20 66 ails on such a f
1180: 69 6c 65 2c 20 61 6e 64 20 27 63 76 73 20 72 6c ile, and 'cvs rl
1190: 6f 67 27 20 70 72 69 6e 74 73 20 74 68 65 20 6c og' prints the l
11a0: 6f 67 0a 09 20 20 20 20 23 20 6d 65 73 73 61 67 og.. # messag
11b0: 65 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 e from the first
11c0: 20 64 65 6c 74 61 2c 20 69 67 6e 6f 72 69 6e 67 delta, ignoring
11d0: 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 0a 09 20 the second....
11e0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 log write 1 f
11f0: 69 6c 65 20 22 49 6e 20 66 69 6c 65 20 24 6d 79 ile "In file $my
1200: 70 61 74 68 20 3a 20 44 75 70 6c 69 63 61 74 65 path : Duplicate
1210: 20 64 65 6c 74 61 20 64 61 74 61 20 66 6f 72 20 delta data for
1220: 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 22 revision $revnr"
1230: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
1240: 31 20 66 69 6c 65 20 22 49 67 6e 6f 72 69 6e 67 1 file "Ignoring
1250: 20 74 68 65 20 64 75 70 6c 69 63 61 74 65 22 0a the duplicate".
1260: 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a . return..}..
1270: 09 23 20 45 78 74 65 6e 64 20 74 68 65 20 72 65 .# Extend the re
1280: 76 69 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20 vision with the
1290: 6e 65 77 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e new information.
12a0: 20 54 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 The revision..#
12b0: 20 6f 62 6a 65 63 74 20 75 73 65 73 20 74 68 69 object uses thi
12c0: 73 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 69 74 s to complete it
12d0: 73 20 6d 65 74 61 20 64 61 74 61 20 73 65 74 2e s meta data set.
12e0: 0a 0a 09 24 72 65 76 20 73 65 74 63 6f 6d 6d 69 ...$rev setcommi
12f0: 74 6d 73 67 20 24 63 6d 0a 09 24 72 65 76 20 73 tmsg $cm..$rev s
1300: 65 74 74 65 78 74 20 20 24 64 65 6c 74 61 72 61 ettext $deltara
1310: 6e 67 65 0a 0a 09 69 66 20 7b 21 5b 72 65 76 20 nge...if {![rev
1320: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 istrunkrevnr $re
1330: 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 24 72 65 vnr]} {.. $re
1340: 76 20 73 65 74 62 72 61 6e 63 68 6e 61 6d 65 20 v setbranchname
1350: 5b 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e [[$self Rev2Bran
1360: 63 68 20 24 72 65 76 6e 72 5d 20 6e 61 6d 65 5d ch $revnr] name]
1370: 0a 09 7d 0a 0a 09 23 20 49 66 20 74 68 69 73 20 ..}...# If this
1380: 69 73 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c is revision 1.1,
1390: 20 77 65 20 68 61 76 65 20 74 6f 20 64 65 74 65 we have to dete
13a0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 rmine whether th
13b0: 65 0a 09 23 20 66 69 6c 65 20 73 65 65 6d 73 20 e..# file seems
13c0: 74 6f 20 68 61 76 65 20 62 65 65 6e 20 63 72 65 to have been cre
13d0: 61 74 65 64 20 74 68 72 6f 75 67 68 20 27 63 76 ated through 'cv
13e0: 73 20 61 64 64 27 20 69 6e 73 74 65 61 64 20 6f s add' instead o
13f0: 66 0a 09 23 20 27 63 76 73 20 69 6d 70 6f 72 74 f..# 'cvs import
1400: 27 2e 20 54 68 69 73 20 63 61 6e 20 62 65 20 64 '. This can be d
1410: 6f 6e 65 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 one by looking a
1420: 74 20 74 68 65 20 75 6e 2d 0a 09 23 20 61 64 75 t the un-..# adu
1430: 6c 74 65 72 61 74 65 64 20 63 6f 6d 6d 69 74 20 lterated commit
1440: 6d 65 73 73 61 67 65 2c 20 61 73 20 43 56 53 20 message, as CVS
1450: 75 73 65 73 20 61 20 68 61 72 64 77 69 72 65 64 uses a hardwired
1460: 20 6d 61 67 69 63 0a 09 23 20 6d 65 73 73 61 67 magic..# messag
1470: 65 20 66 6f 72 20 74 68 65 20 6c 61 74 74 65 72 e for the latter
1480: 2c 20 69 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20 , i.e. "Initial
1490: 72 65 76 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a revision\n", no.
14a0: 09 23 20 70 65 72 69 6f 64 2e 20 20 28 54 68 69 .# period. (Thi
14b0: 73 20 66 61 63 74 20 61 6c 73 6f 20 68 65 6c 70 s fact also help
14c0: 73 20 75 73 20 77 68 65 6e 20 74 68 65 20 74 69 s us when the ti
14d0: 6d 65 20 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64 me comes to..# d
14e0: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 etermine whether
14f0: 20 74 68 69 73 20 66 69 6c 65 20 6d 69 67 68 74 this file might
1500: 20 68 61 76 65 20 68 61 64 20 61 20 64 65 66 61 have had a defa
1510: 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 69 6e ult branch..# in
1520: 20 74 68 65 20 70 61 73 74 2e 29 0a 0a 09 69 66 the past.)...if
1530: 20 7b 24 72 65 76 6e 72 20 65 71 20 22 22 7d 20 {$revnr eq ""}
1540: 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 6d 70 {.. set myimp
1550: 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24 63 6f orted [expr {$co
1560: 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e 69 74 mmitmsg eq "Init
1570: 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22 7d ial revision\n"}
1580: 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20 77 65 ]..}...# Here we
1590: 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61 63 6b also keep track
15a0: 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20 69 6e of the order in
15b0: 20 77 68 69 63 68 20 74 68 65 20 72 65 76 69 73 which the revis
15c0: 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61 64 64 ions..# were add
15d0: 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 2e 0a ed to the file..
15e0: 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65 76 69 ..lappend myrevi
15f0: 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65 74 75 sions $rev..retu
1600: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
1610: 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b 7d 0a thod done {} {}.
1620: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
1630: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
1640: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 ############.
1650: 20 23 23 20 53 74 61 74 65 0a 0a 20 20 20 20 76 ## State.. v
1660: 61 72 69 61 62 6c 65 20 6d 79 70 61 74 68 20 20 ariable mypath
1670: 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 {} ; #
1680: 20 50 61 74 68 20 6f 66 20 6f 75 72 20 72 63 73 Path of our rcs
1690: 20 61 72 63 68 69 76 65 2e 0a 20 20 20 20 76 61 archive.. va
16a0: 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65 63 74 riable myproject
16b0: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 {} ; #
16c0: 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 Reference to the
16d0: 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 74 0a project object.
16e0: 09 09 09 09 20 20 20 20 23 20 74 68 65 20 66 69 .... # the fi
16f0: 6c 65 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 le belongs to..
1700: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65 variable myre
1710: 76 20 2d 61 72 72 61 79 20 20 20 20 20 20 7b 7d v -array {}
1720: 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 73 69 ; # Maps revisi
1730: 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 on number to the
1740: 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63 ..... # assoc
1750: 69 61 74 65 64 20 72 65 76 69 73 69 6f 6e 20 6f iated revision o
1760: 62 6a 65 63 74 2e 0a 20 20 20 20 76 61 72 69 61 bject.. varia
1770: 62 6c 65 20 6d 79 72 65 76 69 73 69 6f 6e 73 20 ble myrevisions
1780: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 61 6d {} ; # Sam
1790: 65 20 61 73 20 6d 79 72 65 76 2c 20 62 75 74 20 e as myrev, but
17a0: 61 20 6c 69 73 74 2c 0a 09 09 09 09 20 20 20 20 a list,.....
17b0: 23 20 67 69 76 69 6e 67 20 75 73 20 74 68 65 20 # giving us the
17c0: 6f 72 64 65 72 20 6f 66 0a 09 09 09 09 20 20 20 order of.....
17d0: 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 20 20 # revisions..
17e0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65 61 variable myhea
17f0: 64 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 d {}
1800: 3b 20 23 20 48 65 61 64 20 72 65 76 69 73 69 6f ; # Head revisio
1810: 6e 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 n (revision numb
1820: 65 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c 65 er). variable
1830: 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20 20 myprincipal
1840: 20 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 69 {} ; # Princi
1850: 70 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61 6e pal branch (bran
1860: 63 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 09 ch number)......
1870: 20 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20 74 # Contrary t
1880: 6f 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73 20 o the name this
1890: 69 73 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 is the..... #
18a0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e default branch.
18b0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
18c0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20 20 dependencies
18d0: 7b 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 72 {} ; # Dictionar
18e0: 79 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c y parent -> chil
18f0: 64 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65 63 d,..... # rec
1900: 6f 72 64 73 20 70 72 69 6d 61 72 79 20 64 65 70 ords primary dep
1910: 65 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 76 endencies.. v
1920: 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 ariable myimport
1930: 65 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 23 ed 0 ; #
1940: 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53 Boolean flag. S
1950: 65 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 et if and only i
1960: 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 20 f..... # rev
1970: 31 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65 20 1.1 of the file
1980: 73 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 20 seemingly.....
1990: 20 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65 64 # was imported
19a0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64 65 instead of adde
19b0: 64 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72 6d d..... # norm
19c0: 61 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 62 ally.. variab
19d0: 6c 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 20 le myroot
19e0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 {} ; # Refe
19f0: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76 rence to the rev
1a00: 69 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 09 ision object....
1a10: 09 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 74 . # holding t
1a20: 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e he root revision
1a30: 2e 20 20 49 74 73 0a 09 09 09 09 20 20 20 20 23 . Its..... #
1a40: 20 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 20 number usually
1a50: 69 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 65 is '1.1'. Can be
1a60: 0a 09 09 09 09 20 20 20 20 23 20 61 20 64 69 66 ..... # a dif
1a70: 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62 ferent number, b
1a80: 65 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20 20 ecause of.....
1a90: 20 20 23 20 67 61 70 73 20 63 72 65 61 74 65 64 # gaps created
1aa0: 20 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20 2d via 'cvsadmin -
1ab0: 6f 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 o'.. variable
1ac0: 20 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72 72 mybranches -arr
1ad0: 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 62 ay {} ; # Maps b
1ae0: 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f 20 ranch number to
1af0: 74 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 20 the symbol.....
1b00: 20 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e 64 # object hand
1b10: 6c 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 2e ling the branch.
1b20: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
1b30: 74 61 67 73 20 20 20 20 20 2d 61 72 72 61 79 20 tags -array
1b40: 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 {} ; # Maps revi
1b50: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 sion number to t
1b60: 68 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20 20 he list.....
1b70: 23 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 # of symbol obje
1b80: 63 74 73 20 66 6f 72 20 74 68 65 20 74 61 67 73 cts for the tags
1b90: 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63 ..... # assoc
1ba0: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 72 iated with the r
1bb0: 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 evision.. var
1bc0: 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 20 iable mysymbols
1bd0: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 {} ; # S
1be0: 65 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c et of the symbol
1bf0: 20 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e 0a names found in.
1c00: 09 09 09 09 20 20 20 20 23 20 74 68 69 73 20 66 .... # this f
1c10: 69 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 ile... variab
1c20: 6c 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 30 le mybranchcnt 0
1c30: 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 72 ; # Counter for
1c40: 20 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 65 branches, to re
1c50: 63 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20 20 cord their....
1c60: 20 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64 65 # order of de
1c70: 66 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 61 finition. This a
1c80: 6c 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 20 lso defines....
1c90: 20 20 20 20 23 20 74 68 65 69 72 20 6f 72 64 65 # their orde
1ca0: 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 77 r of creation, w
1cb0: 68 69 63 68 20 69 73 20 74 68 65 0a 09 09 09 20 hich is the....
1cc0: 20 20 20 20 23 20 72 65 76 65 72 73 65 20 6f 66 # reverse of
1cd0: 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 2e definition. I.
1ce0: 65 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 09 e. a smaller....
1cf0: 20 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d 65 # number me
1d00: 61 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61 72 ans 'Defined ear
1d10: 6c 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 09 lier', means....
1d20: 20 20 20 20 20 23 20 27 43 72 65 61 74 65 64 20 # 'Created
1d30: 6c 61 74 65 72 27 2e 0a 0a 20 20 20 20 23 23 23 later'... ###
1d40: 20 54 4f 44 4f 20 23 23 23 0a 20 20 20 20 23 23 TODO ###. ##
1d50: 23 20 46 69 6c 65 20 66 6c 61 67 20 2d 20 65 78 # File flag - ex
1d60: 65 63 75 74 61 62 6c 65 2c 0a 20 20 20 20 23 23 ecutable,. ##
1d70: 23 20 52 43 53 20 6d 6f 64 65 20 69 6e 66 6f 20 # RCS mode info
1d80: 28 6b 62 2c 20 6b 6b 62 2c 20 2e 2e 2e 29 0a 0a (kb, kkb, ...)..
1d90: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
1da0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
1db0: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
1dc0: 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 ## Internal meth
1dd0: 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 ods.. method
1de0: 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d RecordBranchComm
1df0: 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b its {branches} {
1e00: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 ..foreach branch
1e10: 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65 73 20 revnr $branches
1e20: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61 74 63 {.. if {[catc
1e30: 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 h {...set branch
1e40: 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e [$self Rev2Bran
1e50: 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d ch $branchrevnr]
1e60: 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 73 65 .. }]} {...se
1e70: 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 t branch [$self
1e80: 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e AddUnlabeledBran
1e90: 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63 68 6e ch [rev 2branchn
1ea0: 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 5d r $branchrevnr]]
1eb0: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 .. }... #
1ec0: 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d 6d 69 Record the commi
1ed0: 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76 69 73 t, just as revis
1ee0: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 0a 09 ion number for..
1ef0: 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f 63 65 # now. Proce
1f00: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 sBranchDependenc
1f10: 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e 64 20 ies will extend
1f20: 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20 20 20 that ito a..
1f30: 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63 74 20 # proper object
1f40: 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20 20 20 reference....
1f50: 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c $branch setchil
1f60: 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68 72 65 drevnr $branchre
1f70: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 vnr..}..return.
1f80: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
1f90: 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72 65 76 Rev2Branch {rev
1fa0: 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20 nr} {..if {[rev
1fb0: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 istrunkrevnr $re
1fc0: 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f vnr]} {.. tro
1fd0: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 45 uble internal "E
1fe0: 78 70 65 63 74 65 64 20 61 20 62 72 61 6e 63 68 xpected a branch
1ff0: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 revision number
2000: 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 "..}..return $my
2010: 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20 32 62 branches([rev 2b
2020: 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72 5d 29 ranchnr $revnr])
2030: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
2040: 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 od AddUnlabeledB
2050: 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72 7d ranch {branchnr}
2060: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73 65 6c {..return [$sel
2070: 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e 6c 61 f AddBranch unla
2080: 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e 72 20 beled-$branchnr
2090: 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20 20 7d $branchnr]. }
20a0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 .. method Add
20b0: 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62 72 61 Branch {name bra
20c0: 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 69 nchnr} {..if {[i
20d0: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 61 nfo exists mybra
20e0: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 nches($branchnr)
20f0: 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 ]} {.. log wr
2100: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 ite 1 file "In '
2110: 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e 63 68 $mypath': Branch
2120: 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e 61 6d '$branchnr' nam
2130: 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68 65 73 ed '[$mybranches
2140: 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61 6d 65 ($branchnr) name
2150: 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 ]'".. log wri
2160: 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e 6e 6f te 1 file "Canno
2170: 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20 6e 61 t have second na
2180: 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67 6e 6f me '$name', igno
2190: 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20 72 65 ring it".. re
21a0: 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62 72 61 turn..}..set bra
21b0: 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 nch [sym %AUTO%
21c0: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 6e 72 branch $branchnr
21d0: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65 74 [$myproject get
21e0: 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 5d 0a 09 symbol $name]]..
21f0: 24 62 72 61 6e 63 68 20 73 65 74 70 6f 73 69 74 $branch setposit
2200: 69 6f 6e 20 5b 69 6e 63 72 20 6d 79 62 72 61 6e ion [incr mybran
2210: 63 68 63 6e 74 5d 0a 09 73 65 74 20 6d 79 62 72 chcnt]..set mybr
2220: 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 anches($branchnr
2230: 29 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 72 ) $branch..retur
2240: 6e 20 24 62 72 61 6e 63 68 0a 20 20 20 20 7d 0a n $branch. }.
2250: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 54 . method AddT
2260: 61 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20 ag {name revnr}
2270: 7b 0a 09 73 65 74 20 74 61 67 20 5b 73 79 6d 20 {..set tag [sym
2280: 25 41 55 54 4f 25 20 74 61 67 20 24 72 65 76 6e %AUTO% tag $revn
2290: 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65 r [$myproject ge
22a0: 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 5d 0a tsymbol $name]].
22b0: 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28 .lappend mytags(
22c0: 24 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65 $revnr) $tag..re
22d0: 74 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a turn $tag. }.
22e0: 0a 20 20 20 20 70 72 6f 63 20 52 65 63 6f 72 64 . proc Record
22f0: 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65 BasicDependencie
2300: 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b s {revnr next} {
2310: 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72 ..# Handle the r
2320: 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e evision dependen
2330: 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65 cies. Record the
2340: 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23 m for now, do..#
2350: 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68 nothing with th
2360: 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74 em yet....# On t
2370: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65 he trunk the 'ne
2380: 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 xt' field points
2390: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 to the previous
23a0: 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e ..# revision, i.
23b0: 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20 e. the _parent_
23c0: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f of the current o
23d0: 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20 ne. Example:..#
23e0: 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e 1.6's next is 1.
23f0: 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64 5 (modulo cvs ad
2400: 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e min -o)....# Con
2410: 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61 trarily on a bra
2420: 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 20 66 nch the 'next' f
2430: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 ield points to t
2440: 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63 he..# primary _c
2450: 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72 hild_ of the cur
2460: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41 rent revision. A
2470: 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e s example,..# 1.
2480: 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77 1.3.2's 'next' w
2490: 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a ill be 1.1.3.3..
24a0: 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 20 66 ..# The 'next' f
24b0: 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c ield actually al
24c0: 77 61 79 73 20 72 65 66 65 72 73 20 74 6f 20 74 ways refers to t
24d0: 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63 he revision..# c
24e0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65 ontaining the de
24f0: 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65 lta needed to re
2500: 74 72 69 65 76 65 20 74 68 61 74 20 72 65 76 69 trieve that revi
2510: 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65 sion....# The de
2520: 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65 pendencies neede
2530: 64 20 68 65 72 65 20 61 72 65 20 74 68 65 20 6c d here are the l
2540: 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 72 65 ogical structure
2550: 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c ,..# parent/chil
2560: 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69 d, and not the i
2570: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 mplementation de
2580: 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23 pendent delta..#
2590: 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20 pointers....if
25a0: 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65 {$next eq ""} re
25b0: 74 75 72 6e 0a 0a 09 75 70 76 61 72 20 31 20 6d turn...upvar 1 m
25c0: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 6d 79 ydependencies my
25d0: 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09 23 dependencies...#
25e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25f0: 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 parent
2600: 20 2d 3e 20 63 68 69 6c 64 0a 09 69 66 20 7b 5b -> child..if {[
2610: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 rev istrunkrevnr
2620: 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 $revnr]} {..
2630: 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 70 65 6e lappend mydepen
2640: 64 65 6e 63 69 65 73 20 24 6e 65 78 74 20 24 72 dencies $next $r
2650: 65 76 6e 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 evnr..} else {..
2660: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 lappend myde
2670: 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65 76 6e pendencies $revn
2680: 72 20 24 6e 65 78 74 0a 09 7d 0a 09 72 65 74 75 r $next..}..retu
2690: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 rn. }.. pr
26a0: 6f 63 20 50 72 6f 63 65 73 73 50 72 69 6d 61 72 oc ProcessPrimar
26b0: 79 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d yDependencies {}
26c0: 20 7b 0a 09 75 70 76 61 72 20 31 20 6d 79 64 65 {..upvar 1 myde
26d0: 70 65 6e 64 65 6e 63 69 65 73 20 6d 79 64 65 70 pendencies mydep
26e0: 65 6e 64 65 6e 63 69 65 73 20 6d 79 72 65 76 20 endencies myrev
26f0: 6d 79 72 65 76 0a 0a 09 66 6f 72 65 61 63 68 20 myrev...foreach
2700: 7b 70 61 72 65 6e 74 72 65 76 6e 72 20 63 68 69 {parentrevnr chi
2710: 6c 64 72 65 76 6e 72 7d 20 24 6d 79 64 65 70 65 ldrevnr} $mydepe
2720: 6e 64 65 6e 63 69 65 73 20 7b 0a 09 20 20 20 20 ndencies {..
2730: 73 65 74 20 70 61 72 65 6e 74 20 24 6d 79 72 65 set parent $myre
2740: 76 28 24 70 61 72 65 6e 74 72 65 76 6e 72 29 0a v($parentrevnr).
2750: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 20 . set child
2760: 24 6d 79 72 65 76 28 24 63 68 69 6c 64 72 65 76 $myrev($childrev
2770: 6e 72 29 0a 09 20 20 20 20 24 70 61 72 65 6e 74 nr).. $parent
2780: 20 73 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 setchild $child
2790: 0a 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 .. $child set
27a0: 70 61 72 65 6e 74 20 24 70 61 72 65 6e 74 0a 09 parent $parent..
27b0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
27c0: 0a 20 20 20 20 70 72 6f 63 20 50 72 6f 63 65 73 . proc Proces
27d0: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 sBranchDependenc
27e0: 69 65 73 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20 ies {} {..upvar
27f0: 31 20 6d 79 62 72 61 6e 63 68 65 73 20 6d 79 62 1 mybranches myb
2800: 72 61 6e 63 68 65 73 20 6d 79 72 65 76 20 6d 79 ranches myrev my
2810: 72 65 76 0a 0a 09 66 6f 72 65 61 63 68 20 7b 62 rev...foreach {b
2820: 72 61 6e 63 68 6e 72 20 62 72 61 6e 63 68 7d 20 ranchnr branch}
2830: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 [array get mybra
2840: 6e 63 68 65 73 5d 20 7b 0a 09 20 20 20 20 73 65 nches] {.. se
2850: 74 20 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 t revnr [$branch
2860: 20 70 61 72 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 parentrevnr]...
2870: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e
2880: 78 69 73 74 73 20 6d 79 72 65 76 28 24 72 65 76 xists myrev($rev
2890: 6e 72 29 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 nr)]} {...log wr
28a0: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 ite 1 file "In '
28b0: 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 62 72 $mypath': The br
28c0: 61 6e 63 68 20 27 5b 24 62 72 61 6e 63 68 20 6e anch '[$branch n
28d0: 61 6d 65 5d 27 20 72 65 66 65 72 65 6e 63 65 73 ame]' references
28e0: 22 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 "...log write 1
28f0: 66 69 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 file "the bogus
2900: 72 65 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 revision '$revnr
2910: 27 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 ' and will be ig
2920: 6e 6f 72 65 64 2e 22 0a 09 09 24 62 72 61 6e 63 nored."...$branc
2930: 68 20 64 65 73 74 72 6f 79 0a 09 09 75 6e 73 65 h destroy...unse
2940: 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 t mybranches($br
2950: 61 6e 63 68 6e 72 29 0a 09 20 20 20 20 7d 20 65 anchnr).. } e
2960: 6c 73 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 lse {...set rev
2970: 24 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 $myrev($revnr)..
2980: 09 24 72 65 76 20 61 64 64 62 72 61 6e 63 68 20 .$rev addbranch
2990: 24 62 72 61 6e 63 68 0a 0a 09 09 23 20 49 66 20 $branch....# If
29a0: 72 65 76 69 73 69 6f 6e 73 20 77 65 72 65 20 63 revisions were c
29b0: 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 ommitted on the
29c0: 62 72 61 6e 63 68 20 77 65 20 73 74 6f 72 65 20 branch we store
29d0: 61 0a 09 09 23 20 72 65 66 65 72 65 6e 63 65 20 a...# reference
29e0: 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20 74 68 to the branch th
29f0: 65 72 65 2c 20 61 6e 64 20 66 75 72 74 68 65 72 ere, and further
2a00: 20 64 65 63 6c 61 72 65 0a 09 09 23 20 74 68 65 declare...# the
2a10: 20 66 69 72 73 74 20 63 68 69 6c 64 27 73 20 70 first child's p
2a20: 61 72 65 6e 74 20 74 6f 20 62 65 20 62 72 61 6e arent to be bran
2a30: 63 68 27 73 20 70 61 72 65 6e 74 2c 20 61 6e 64 ch's parent, and
2a40: 0a 09 09 23 20 6c 69 73 74 20 74 68 69 73 20 63 ...# list this c
2a50: 68 69 6c 64 20 69 6e 20 74 68 65 20 70 61 72 65 hild in the pare
2a60: 6e 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 09 nt revision.....
2a70: 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 if {[$branch has
2a80: 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 20 20 20 20 child]} {...
2a90: 73 65 74 20 63 68 69 6c 64 72 65 76 6e 72 20 5b set childrevnr [
2aa0: 24 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 76 $branch childrev
2ab0: 6e 72 5d 0a 09 09 20 20 20 20 73 65 74 20 63 68 nr]... set ch
2ac0: 69 6c 64 20 24 6d 79 72 65 76 28 24 63 68 69 6c ild $myrev($chil
2ad0: 64 72 65 76 6e 72 29 0a 0a 09 09 20 20 20 20 24 drevnr).... $
2ae0: 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74 62 child setparentb
2af0: 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09 ranch $branch...
2b00: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 $child setpa
2b10: 72 65 6e 74 20 20 20 20 20 20 20 24 72 65 76 0a rent $rev.
2b20: 09 09 20 20 20 20 24 72 65 76 20 61 64 64 63 68 .. $rev addch
2b30: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 63 68 69 ildonbranch $chi
2b40: 6c 64 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d ld...}.. }..}
2b50: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
2b60: 20 20 20 20 70 72 6f 63 20 53 6f 72 74 42 72 61 proc SortBra
2b70: 6e 63 68 65 73 20 7b 7d 20 7b 0a 09 75 70 76 61 nches {} {..upva
2b80: 72 20 31 20 6d 79 72 65 76 20 6d 79 72 65 76 0a r 1 myrev myrev.
2b90: 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 ..foreach {revnr
2ba0: 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 rev} [array get
2bb0: 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 24 myrev] {.. $
2bc0: 72 65 76 20 73 6f 72 74 62 72 61 6e 63 68 65 73 rev sortbranches
2bd0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
2be0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 50 72 6f 63 }.. proc Proc
2bf0: 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 essTagDependenci
2c00: 65 73 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20 31 es {} {..upvar 1
2c10: 20 6d 79 74 61 67 73 20 6d 79 74 61 67 73 20 6d mytags mytags m
2c20: 79 72 65 76 20 6d 79 72 65 76 0a 0a 09 66 6f 72 yrev myrev...for
2c30: 65 61 63 68 20 7b 72 65 76 6e 72 20 74 61 67 6c each {revnr tagl
2c40: 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 ist} [array get
2c50: 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 69 mytags] {.. i
2c60: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists
2c70: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d myrev($revnr)]}
2c80: 20 7b 0a 09 09 73 65 74 20 6e 20 5b 6c 6c 65 6e {...set n [llen
2c90: 67 74 68 20 24 74 61 67 6c 69 73 74 5d 0a 09 09 gth $taglist]...
2ca0: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 log write 1 file
2cb0: 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 "In '$mypath':
2cc0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 5b 6e The following [n
2cd0: 73 70 20 24 6e 20 74 61 67 5d 20 72 65 66 65 72 sp $n tag] refer
2ce0: 65 6e 63 65 22 0a 09 09 6c 6f 67 20 77 72 69 74 ence"...log writ
2cf0: 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 62 6f e 1 file "the bo
2d00: 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 24 72 gus revision '$r
2d10: 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20 62 evnr' and will b
2d20: 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 66 6f e ignored."...fo
2d30: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 reach tag $tagli
2d40: 73 74 20 7b 0a 09 09 20 20 20 20 6c 6f 67 20 77 st {... log w
2d50: 72 69 74 65 20 31 20 66 69 6c 65 20 22 20 20 20 rite 1 file "
2d60: 20 5b 24 74 61 67 20 6e 61 6d 65 5d 22 0a 09 09 [$tag name]"...
2d70: 20 20 20 20 24 74 61 67 20 64 65 73 74 72 6f 79 $tag destroy
2d80: 0a 09 09 7d 0a 09 09 75 6e 73 65 74 20 6d 79 74 ...}...unset myt
2d90: 61 67 73 28 24 72 65 76 6e 72 29 0a 09 20 20 20 ags($revnr)..
2da0: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 } else {...set
2db0: 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 76 6e rev $myrev($revn
2dc0: 72 29 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 r)...foreach tag
2dd0: 20 24 74 61 67 6c 69 73 74 20 7b 20 24 72 65 76 $taglist { $rev
2de0: 20 61 64 64 74 61 67 20 24 74 61 67 20 7d 0a 09 addtag $tag }..
2df0: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e }..}..return
2e00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 . }.. proc
2e10: 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f DetermineTheRoo
2e20: 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09 tRevision {} {..
2e30: 75 70 76 61 72 20 31 20 6d 79 72 65 76 20 6d 79 upvar 1 myrev my
2e40: 72 65 76 20 6d 79 72 6f 6f 74 20 6d 79 72 6f 6f rev myroot myroo
2e50: 74 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 t...# The root i
2e60: 73 20 74 68 65 20 6f 6e 65 20 72 65 76 69 73 69 s the one revisi
2e70: 6f 6e 20 77 68 69 63 68 20 68 61 73 20 6e 6f 20 on which has no
2e80: 70 61 72 65 6e 74 2e 20 42 79 0a 09 23 20 63 68 parent. By..# ch
2e90: 65 63 6b 69 6e 67 20 61 6c 6c 20 72 65 76 69 73 ecking all revis
2ea0: 69 6f 6e 73 20 77 65 20 65 6e 73 75 72 65 20 74 ions we ensure t
2eb0: 68 61 74 20 77 65 20 63 61 6e 20 64 65 74 65 63 hat we can detec
2ec0: 74 20 61 6e 64 0a 09 23 20 72 65 70 6f 72 74 20 t and..# report
2ed0: 74 68 65 20 63 61 73 65 20 6f 66 20 6d 75 6c 74 the case of mult
2ee0: 69 70 6c 65 20 72 6f 6f 74 73 2e 20 57 69 74 68 iple roots. With
2ef0: 6f 75 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c out that we coul
2f00: 64 0a 09 23 20 73 69 6d 70 6c 79 20 74 61 6b 65 d..# simply take
2f10: 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 61 6e one revision an
2f20: 64 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72 d follow the par
2f30: 65 6e 74 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 ent links to..#
2f40: 74 68 65 69 72 20 72 6f 6f 74 20 28 73 69 63 21 their root (sic!
2f50: 29 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 )....foreach {re
2f60: 76 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 vnr rev} [array
2f70: 67 65 74 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 get myrev] {..
2f80: 20 20 69 66 20 7b 5b 24 72 65 76 20 68 61 73 70 if {[$rev hasp
2f90: 61 72 65 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 arent]} continue
2fa0: 0a 09 20 20 20 20 69 66 20 7b 24 6d 79 72 6f 6f .. if {$myroo
2fb0: 74 20 6e 65 20 22 22 7d 20 7b 20 74 72 6f 75 62 t ne ""} { troub
2fc0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 4d 75 6c le internal "Mul
2fd0: 74 69 70 6c 65 20 72 6f 6f 74 20 72 65 76 69 73 tiple root revis
2fe0: 69 6f 6e 73 20 66 6f 75 6e 64 22 20 7d 0a 09 20 ions found" }..
2ff0: 20 20 20 73 65 74 20 6d 79 72 6f 6f 74 20 24 72 set myroot $r
3000: 65 76 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 ev..}..return.
3010: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 }.. # # ##
3020: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
3030: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
3040: 0a 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 . ## Configur
3050: 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d ation.. pragm
3060: 61 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 a -hastypeinfo
3070: 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 no ; # no typ
3080: 65 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a e introspection.
3090: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 pragma -hasi
30a0: 6e 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b nfo no ;
30b0: 20 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 # no object int
30c0: 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 rospection. p
30d0: 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 ragma -hastypeme
30e0: 74 68 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 thods no ; # ty
30f0: 70 65 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 pe is not releva
3100: 6e 74 2e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d nt.. pragma -
3110: 73 69 6d 70 6c 65 64 69 73 70 61 74 63 68 20 79 simpledispatch y
3120: 65 73 20 3b 20 23 20 73 69 6d 70 6c 65 20 66 61 es ; # simple fa
3130: 73 74 20 64 69 73 70 61 74 63 68 0a 0a 20 20 20 st dispatch..
3140: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
3150: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
3160: 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 ########.}..name
3170: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a space eval ::vc:
3180: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
3190: 3a 63 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 :cvs {. names
31a0: 70 61 63 65 20 65 78 70 6f 72 74 20 66 69 6c 65 pace export file
31b0: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 . namespace e
31c0: 76 61 6c 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d val file {..# Im
31d0: 70 6f 72 74 20 6e 6f 74 20 72 65 71 75 69 72 65 port not require
31e0: 64 2c 20 61 6c 72 65 61 64 79 20 61 20 63 68 69 d, already a chi
31f0: 6c 64 20 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23 ld namespace...#
3200: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 namespace impor
3210: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a t ::vc::fossil::
3220: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c import::cvs::fil
3230: 65 3a 3a 72 65 76 0a 09 23 20 6e 61 6d 65 73 70 e::rev..# namesp
3240: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
3250: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
3260: 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 0a :cvs::file::sym.
3270: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 .namespace impor
3280: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d t ::vc::tools::m
3290: 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 isc::*..namespac
32a0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
32b0: 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 20 20 ools::trouble.
32c0: 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 }.}..# # ## ##
32d0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
32e0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 ############# #
32f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
3300: 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 ####.## Ready..p
3310: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 ackage provide v
3320: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
3330: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 t::cvs::file 1.0
3340: 0a 72 65 74 75 72 6e 0a .return.