Artifact 2626e348fd2d2d3dfdfc9adf9a082ad6bbda11ca:
File
tools/cvs2fossil/lib/c2f_file.tcl
part of check-in
[67c24820c7]
- Reworked the whole handling of meta data (author, commit message, plus project/branch information), so that revisions now store only the meta id, everything else is stored centrally. All the relevant pieces (author, cmessage, symbols, projects) now also get numeric ids assigned early instead of when being saved to the state. Project ids are loaded from the state now too.
by
aku on
2007-10-14 01:58:07.
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 65 78 tructor {path ex
0570: 65 63 75 74 61 62 6c 65 20 70 72 6f 6a 65 63 74 ecutable project
0580: 7d 20 7b 0a 09 73 65 74 20 6d 79 70 61 74 68 20 } {..set mypath
0590: 20 20 20 20 20 20 24 70 61 74 68 0a 09 73 65 74 $path..set
05a0: 20 6d 79 65 78 65 63 75 74 61 62 6c 65 20 24 65 myexecutable $e
05b0: 78 65 63 75 74 61 62 6c 65 0a 09 73 65 74 20 6d xecutable..set m
05c0: 79 70 72 6f 6a 65 63 74 20 20 20 20 24 70 72 6f yproject $pro
05d0: 6a 65 63 74 0a 09 72 65 74 75 72 6e 0a 20 20 20 ject..return.
05e0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 }.. method p
05f0: 61 74 68 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 ath {} { retu
0600: 72 6e 20 24 6d 79 70 61 74 68 20 7d 0a 20 20 20 rn $mypath }.
0610: 20 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63 74 20 method project
0620: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 {} { return $myp
0630: 72 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20 23 20 roject }.. #
0640: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
0650: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
0660: 23 23 23 23 23 0a 20 20 20 20 23 23 20 4d 65 74 #####. ## Met
0670: 68 6f 64 73 20 72 65 71 75 69 72 65 64 20 66 6f hods required fo
0680: 72 20 74 68 65 20 63 6c 61 73 73 20 74 6f 20 62 r the class to b
0690: 65 20 61 20 73 69 6e 6b 20 6f 66 20 74 68 65 20 e a sink of the
06a0: 72 63 73 20 70 61 72 73 65 72 0a 0a 20 20 20 20 rcs parser..
06b0: 23 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 7b 7d #method begin {}
06c0: 20 7b 70 75 74 73 20 62 65 67 69 6e 7d 0a 20 20 {puts begin}.
06d0: 20 20 23 6d 65 74 68 6f 64 20 73 65 74 68 65 61 #method sethea
06e0: 64 20 7b 68 7d 20 7b 70 75 74 73 20 68 65 61 64 d {h} {puts head
06f0: 3d 24 68 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 =$h}. #method
0700: 20 73 65 74 70 72 69 6e 63 69 70 61 6c 62 72 61 setprincipalbra
0710: 6e 63 68 20 7b 62 7d 20 7b 70 75 74 73 20 70 62 nch {b} {puts pb
0720: 3d 24 62 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 =$b}. #method
0730: 20 64 65 66 74 61 67 20 7b 73 20 72 7d 20 7b 70 deftag {s r} {p
0740: 75 74 73 20 24 73 3d 24 72 7d 0a 20 20 20 20 23 uts $s=$r}. #
0750: 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65 6e method setcommen
0760: 74 20 7b 63 7d 20 7b 70 75 74 73 20 63 6f 6d 6d t {c} {puts comm
0770: 65 6e 74 3d 24 63 7d 0a 20 20 20 20 23 6d 65 74 ent=$c}. #met
0780: 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 20 7b 7d hod admindone {}
0790: 20 7b 70 75 74 73 20 61 64 6d 69 6e 64 6f 6e 65 {puts admindone
07a0: 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 }. #method de
07b0: 66 20 7b 72 65 76 20 64 61 74 65 20 61 75 74 68 f {rev date auth
07c0: 6f 72 20 73 74 61 74 65 20 6e 65 78 74 20 62 72 or state next br
07d0: 61 6e 63 68 65 73 7d 20 7b 70 75 74 73 20 22 64 anches} {puts "d
07e0: 65 66 20 24 72 65 76 20 24 64 61 74 65 20 24 61 ef $rev $date $a
07f0: 75 74 68 6f 72 20 24 73 74 61 74 65 20 24 6e 65 uthor $state $ne
0800: 78 74 20 24 62 72 61 6e 63 68 65 73 22 7d 0a 20 xt $branches"}.
0810: 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 64 6f #method defdo
0820: 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 65 66 2d ne {} {puts def-
0830: 64 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f done}. #metho
0840: 64 20 73 65 74 64 65 73 63 20 7b 64 7d 20 7b 70 d setdesc {d} {p
0850: 75 74 73 20 64 65 73 63 3d 24 64 7d 0a 20 20 20 uts desc=$d}.
0860: 20 23 6d 65 74 68 6f 64 20 65 78 74 65 6e 64 20 #method extend
0870: 7b 72 65 76 20 63 6f 6d 6d 69 74 6d 73 67 20 64 {rev commitmsg d
0880: 65 6c 74 61 72 61 6e 67 65 7d 20 7b 70 75 74 73 eltarange} {puts
0890: 20 22 65 78 74 65 6e 64 20 24 63 6f 6d 6d 69 74 "extend $commit
08a0: 6d 73 67 20 24 64 65 6c 74 61 72 61 6e 67 65 22 msg $deltarange"
08b0: 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 6f }. #method do
08c0: 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 6f 6e 65 ne {} {puts done
08d0: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
08e0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
08f0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############.
0900: 20 20 20 23 23 20 50 65 72 73 69 73 74 65 6e 63 ## Persistenc
0910: 65 20 28 70 61 73 73 20 49 49 29 0a 0a 20 20 20 e (pass II)..
0920: 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74 20 method persist
0930: 7b 7d 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 {} {. }..
0940: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
0950: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
0960: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 #######. ## I
0970: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 73 69 6e mplement the sin
0980: 6b 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 62 65 k.. method be
0990: 67 69 6e 20 7b 7d 20 7b 23 69 67 6e 6f 72 65 7d gin {} {#ignore}
09a0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 .. method set
09b0: 68 65 61 64 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 head {revnr} {..
09c0: 73 65 74 20 6d 79 68 65 61 64 72 65 76 6e 72 20 set myheadrevnr
09d0: 24 72 65 76 6e 72 0a 09 72 65 74 75 72 6e 0a 20 $revnr..return.
09e0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
09f0: 20 73 65 74 70 72 69 6e 63 69 70 61 6c 62 72 61 setprincipalbra
0a00: 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72 7d 20 7b nch {branchnr} {
0a10: 0a 09 73 65 74 20 6d 79 70 72 69 6e 63 69 70 61 ..set myprincipa
0a20: 6c 20 24 62 72 61 6e 63 68 6e 72 0a 09 72 65 74 l $branchnr..ret
0a30: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
0a40: 65 74 68 6f 64 20 64 65 66 74 61 67 20 7b 6e 61 ethod deftag {na
0a50: 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09 23 20 46 me revnr} {..# F
0a60: 55 54 55 52 45 3a 20 50 65 72 66 6f 72 6d 20 73 UTURE: Perform s
0a70: 79 6d 62 6f 6c 20 74 72 61 6e 73 66 6f 72 6d 61 ymbol transforma
0a80: 74 69 6f 6e 20 68 65 72 65 2e 0a 0a 09 69 66 20 tion here....if
0a90: 7b 5b 73 74 72 75 63 74 3a 3a 73 65 74 20 63 6f {[struct::set co
0aa0: 6e 74 61 69 6e 73 20 24 6d 79 73 79 6d 62 6f 6c ntains $mysymbol
0ab0: 73 20 24 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 s $name]} {..
0ac0: 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 trouble fatal "
0ad0: 4d 75 6c 74 69 70 6c 65 20 64 65 66 69 6e 69 74 Multiple definit
0ae0: 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 79 6d 62 ions of the symb
0af0: 6f 6c 20 27 24 6e 61 6d 65 27 20 69 6e 20 27 24 ol '$name' in '$
0b00: 6d 79 70 61 74 68 27 22 0a 09 20 20 20 20 72 65 mypath'".. re
0b10: 74 75 72 6e 0a 09 7d 0a 0a 09 73 74 72 75 63 74 turn..}...struct
0b20: 3a 3a 73 65 74 20 61 64 64 20 6d 79 73 79 6d 62 ::set add mysymb
0b30: 6f 6c 73 20 24 6e 61 6d 65 0a 0a 09 69 66 20 7b ols $name...if {
0b40: 5b 72 65 76 20 69 73 62 72 61 6e 63 68 72 65 76 [rev isbranchrev
0b50: 6e 72 20 24 72 65 76 6e 72 20 2d 3e 20 62 72 61 nr $revnr -> bra
0b60: 6e 63 68 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 24 nchnr]} {.. $
0b70: 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 24 self AddBranch $
0b80: 6e 61 6d 65 20 24 62 72 61 6e 63 68 6e 72 0a 09 name $branchnr..
0b90: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 24 73 } else {.. $s
0ba0: 65 6c 66 20 41 64 64 54 61 67 20 24 6e 61 6d 65 elf AddTag $name
0bb0: 20 24 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 $revnr..}..retu
0bc0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
0bd0: 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20 thod setcomment
0be0: 7b 63 7d 20 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a {c} {# ignore}..
0bf0: 20 20 20 20 6d 65 74 68 6f 64 20 61 64 6d 69 6e method admin
0c00: 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 57 65 20 done {} {..# We
0c10: 64 6f 20 6e 6f 74 68 69 6e 67 20 61 74 20 74 68 do nothing at th
0c20: 65 20 62 6f 75 6e 64 61 72 79 20 6f 66 20 61 64 e boundary of ad
0c30: 6d 69 6e 20 61 6e 64 20 72 65 76 69 73 69 6f 6e min and revision
0c40: 20 64 61 74 61 0a 20 20 20 20 7d 0a 0a 20 20 20 data. }..
0c50: 20 6d 65 74 68 6f 64 20 64 65 66 20 7b 72 65 76 method def {rev
0c60: 6e 72 20 64 61 74 65 20 61 75 74 68 6f 72 20 73 nr date author s
0c70: 74 61 74 65 20 6e 65 78 74 20 62 72 61 6e 63 68 tate next branch
0c80: 65 73 7d 20 7b 0a 09 24 73 65 6c 66 20 52 65 63 es} {..$self Rec
0c90: 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d 69 74 73 ordBranchCommits
0ca0: 20 24 62 72 61 6e 63 68 65 73 0a 0a 09 69 66 20 $branches...if
0cb0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 {[info exists my
0cc0: 72 65 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a rev($revnr)]} {.
0cd0: 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61 74 . trouble fat
0ce0: 61 6c 20 22 46 69 6c 65 20 24 6d 79 70 61 74 68 al "File $mypath
0cf0: 20 63 6f 6e 74 61 69 6e 73 20 64 75 70 6c 69 63 contains duplic
0d00: 61 74 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 ate definitions
0d10: 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 24 72 65 for revision $re
0d20: 76 6e 72 2e 22 0a 09 20 20 20 20 72 65 74 75 72 vnr.".. retur
0d30: 6e 0a 09 7d 0a 0a 09 73 65 74 20 6d 79 61 69 64 n..}...set myaid
0d40: 28 24 72 65 76 6e 72 29 20 5b 24 6d 79 70 72 6f ($revnr) [$mypro
0d50: 6a 65 63 74 20 64 65 66 61 75 74 68 6f 72 20 24 ject defauthor $
0d60: 61 75 74 68 6f 72 5d 0a 09 73 65 74 20 6d 79 72 author]..set myr
0d70: 65 76 28 24 72 65 76 6e 72 29 20 5b 72 65 76 20 ev($revnr) [rev
0d80: 25 41 55 54 4f 25 20 24 72 65 76 6e 72 20 24 64 %AUTO% $revnr $d
0d90: 61 74 65 20 24 73 74 61 74 65 20 24 73 65 6c 66 ate $state $self
0da0: 5d 0a 0a 09 52 65 63 6f 72 64 42 61 73 69 63 44 ]...RecordBasicD
0db0: 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65 76 ependencies $rev
0dc0: 6e 72 20 24 6e 65 78 74 0a 09 72 65 74 75 72 6e nr $next..return
0dd0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
0de0: 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d 20 7b 0a od defdone {} {.
0df0: 09 23 20 54 68 69 73 20 69 73 20 61 6c 6c 20 64 .# This is all d
0e00: 6f 6e 65 20 61 66 74 65 72 20 74 68 65 20 72 65 one after the re
0e10: 76 69 73 69 6f 6e 20 74 72 65 65 20 68 61 73 20 vision tree has
0e20: 62 65 65 6e 20 65 78 74 72 61 63 74 65 64 0a 09 been extracted..
0e30: 23 20 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 2c # from the file,
0e40: 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6d 6d before the comm
0e50: 69 74 20 6d 65 73 61 67 65 73 20 61 6e 64 20 64 it mesages and d
0e60: 65 6c 74 61 20 74 65 78 74 73 20 61 72 65 0a 09 elta texts are..
0e70: 23 20 70 72 6f 63 65 73 73 65 64 2e 0a 0a 09 50 # processed....P
0e80: 72 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 rocessPrimaryDep
0e90: 65 6e 64 65 6e 63 69 65 73 0a 09 50 72 6f 63 65 endencies..Proce
0ea0: 73 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e ssBranchDependen
0eb0: 63 69 65 73 0a 09 53 6f 72 74 42 72 61 6e 63 68 cies..SortBranch
0ec0: 65 73 0a 09 50 72 6f 63 65 73 73 54 61 67 44 65 es..ProcessTagDe
0ed0: 70 65 6e 64 65 6e 63 69 65 73 0a 09 44 65 74 65 pendencies..Dete
0ee0: 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 rmineTheRootRevi
0ef0: 73 69 6f 6e 0a 09 72 65 74 75 72 6e 0a 20 20 20 sion..return.
0f00: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 }.. method s
0f10: 65 74 64 65 73 63 20 7b 64 7d 20 7b 23 20 69 67 etdesc {d} {# ig
0f20: 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f nore}.. metho
0f30: 64 20 65 78 74 65 6e 64 20 7b 72 65 76 6e 72 20 d extend {revnr
0f40: 63 6f 6d 6d 69 74 6d 73 67 20 74 65 78 74 72 61 commitmsg textra
0f50: 6e 67 65 7d 20 7b 0a 09 73 65 74 20 63 6d 69 64 nge} {..set cmid
0f60: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 [$myproject def
0f70: 63 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67 cmessage [string
0f80: 20 74 72 69 6d 20 24 63 6f 6d 6d 69 74 6d 73 67 trim $commitmsg
0f90: 5d 5d 0a 0a 09 73 65 74 20 72 65 76 20 24 6d 79 ]]...set rev $my
0fa0: 72 65 76 28 24 72 65 76 6e 72 29 0a 0a 09 69 66 rev($revnr)...if
0fb0: 20 7b 5b 24 72 65 76 20 68 61 73 6d 65 74 61 5d {[$rev hasmeta]
0fc0: 7d 20 7b 0a 09 20 20 20 20 23 20 41 70 70 61 72 } {.. # Appar
0fd0: 65 6e 74 6c 79 20 72 65 70 6f 73 69 74 6f 72 69 ently repositori
0fe0: 65 73 20 65 78 69 73 74 20 69 6e 20 77 68 69 63 es exist in whic
0ff0: 68 20 74 68 65 20 64 65 6c 74 61 20 64 61 74 61 h the delta data
1000: 0a 09 20 20 20 20 23 20 66 6f 72 20 72 65 76 69 .. # for revi
1010: 73 69 6f 6e 20 31 2e 31 20 69 73 20 70 72 6f 76 sion 1.1 is prov
1020: 69 64 65 64 20 73 65 76 65 72 61 6c 20 74 69 6d ided several tim
1030: 65 73 2c 20 61 74 20 6c 65 61 73 74 0a 09 20 20 es, at least..
1040: 20 20 23 20 74 77 69 63 65 2e 20 54 68 65 20 61 # twice. The a
1050: 63 74 75 61 6c 20 63 61 75 73 65 20 6f 66 20 74 ctual cause of t
1060: 68 69 73 20 64 75 70 6c 69 63 61 74 69 6f 6e 20 his duplication
1070: 69 73 20 6e 6f 74 0a 09 20 20 20 20 23 20 6b 6e is not.. # kn
1080: 6f 77 6e 2e 20 53 70 65 63 75 6c 61 74 69 6f 6e own. Speculation
1090: 20 63 65 6e 74 65 72 73 20 6f 6e 20 52 43 53 2f centers on RCS/
10a0: 43 56 53 20 62 75 67 73 2c 20 6f 72 20 66 72 6f CVS bugs, or fro
10b0: 6d 0a 09 20 20 20 20 23 20 6d 61 6e 75 61 6c 20 m.. # manual
10c0: 65 64 69 74 73 20 6f 66 20 74 68 65 20 72 65 70 edits of the rep
10d0: 6f 73 69 74 6f 72 79 20 77 68 69 63 68 20 62 6f ository which bo
10e0: 72 6b 65 64 20 74 68 65 0a 09 20 20 20 20 23 20 rked the.. #
10f0: 69 6e 74 65 72 6e 61 6c 73 2e 20 57 68 61 74 65 internals. Whate
1100: 76 65 72 20 74 68 65 20 63 61 75 73 65 2c 20 74 ver the cause, t
1110: 65 73 74 69 6e 67 20 73 68 6f 77 65 64 20 74 68 esting showed th
1120: 61 74 20 62 6f 74 68 0a 09 20 20 20 20 23 20 63 at both.. # c
1130: 76 73 20 61 6e 64 20 72 63 73 20 75 73 65 20 74 vs and rcs use t
1140: 68 65 20 66 69 72 73 74 20 64 65 66 69 6e 69 74 he first definit
1150: 69 6f 6e 20 77 68 65 6e 20 70 65 72 66 6f 72 6d ion when perform
1160: 69 6e 67 20 61 0a 09 20 20 20 20 23 20 63 68 65 ing a.. # che
1170: 63 6b 6f 75 74 2c 20 61 6e 64 20 77 65 20 66 6f ckout, and we fo
1180: 6c 6c 6f 77 20 74 68 65 69 72 20 6c 65 61 64 2e llow their lead.
1190: 20 53 69 64 65 20 6e 6f 74 65 73 3a 20 27 63 76 Side notes: 'cv
11a0: 73 0a 09 20 20 20 20 23 20 6c 6f 67 27 20 66 61 s.. # log' fa
11b0: 69 6c 73 20 6f 6e 20 73 75 63 68 20 61 20 66 69 ils on such a fi
11c0: 6c 65 2c 20 61 6e 64 20 27 63 76 73 20 72 6c 6f le, and 'cvs rlo
11d0: 67 27 20 70 72 69 6e 74 73 20 74 68 65 20 6c 6f g' prints the lo
11e0: 67 0a 09 20 20 20 20 23 20 6d 65 73 73 61 67 65 g.. # message
11f0: 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20 from the first
1200: 64 65 6c 74 61 2c 20 69 67 6e 6f 72 69 6e 67 20 delta, ignoring
1210: 74 68 65 20 73 65 63 6f 6e 64 2e 0a 0a 09 20 20 the second....
1220: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 log write 1 fi
1230: 6c 65 20 22 49 6e 20 66 69 6c 65 20 24 6d 79 70 le "In file $myp
1240: 61 74 68 20 3a 20 44 75 70 6c 69 63 61 74 65 20 ath : Duplicate
1250: 64 65 6c 74 61 20 64 61 74 61 20 66 6f 72 20 72 delta data for r
1260: 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 22 0a evision $revnr".
1270: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 . log write 1
1280: 20 66 69 6c 65 20 22 49 67 6e 6f 72 69 6e 67 20 file "Ignoring
1290: 74 68 65 20 64 75 70 6c 69 63 61 74 65 22 0a 09 the duplicate"..
12a0: 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 return..}...
12b0: 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b if {[rev istrunk
12c0: 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b revnr $revnr]} {
12d0: 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 68 .. set branch
12e0: 69 64 20 7b 7d 0a 09 7d 20 65 6c 73 65 20 7b 0a id {}..} else {.
12f0: 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 68 69 . set branchi
1300: 64 20 5b 5b 24 73 65 6c 66 20 52 65 76 32 42 72 d [[$self Rev2Br
1310: 61 6e 63 68 20 24 72 65 76 6e 72 5d 20 69 64 5d anch $revnr] id]
1320: 0a 09 7d 0a 0a 09 24 72 65 76 20 73 65 74 6d 65 ..}...$rev setme
1330: 74 61 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 ta [$myproject d
1340: 65 66 6d 65 74 61 20 24 62 72 61 6e 63 68 69 64 efmeta $branchid
1350: 20 24 6d 79 61 69 64 28 24 72 65 76 6e 72 29 20 $myaid($revnr)
1360: 24 63 6d 69 64 5d 0a 09 24 72 65 76 20 73 65 74 $cmid]..$rev set
1370: 74 65 78 74 20 24 74 65 78 74 72 61 6e 67 65 0a text $textrange.
1380: 0a 09 23 20 49 66 20 74 68 69 73 20 69 73 20 72 ..# If this is r
1390: 65 76 69 73 69 6f 6e 20 31 2e 31 2c 20 77 65 20 evision 1.1, we
13a0: 68 61 76 65 20 74 6f 20 64 65 74 65 72 6d 69 6e have to determin
13b0: 65 20 77 68 65 74 68 65 72 20 74 68 65 0a 09 23 e whether the..#
13c0: 20 66 69 6c 65 20 73 65 65 6d 73 20 74 6f 20 68 file seems to h
13d0: 61 76 65 20 62 65 65 6e 20 63 72 65 61 74 65 64 ave been created
13e0: 20 74 68 72 6f 75 67 68 20 27 63 76 73 20 61 64 through 'cvs ad
13f0: 64 27 20 69 6e 73 74 65 61 64 20 6f 66 0a 09 23 d' instead of..#
1400: 20 27 63 76 73 20 69 6d 70 6f 72 74 27 2e 20 54 'cvs import'. T
1410: 68 69 73 20 63 61 6e 20 62 65 20 64 6f 6e 65 20 his can be done
1420: 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 74 20 74 68 by looking at th
1430: 65 20 75 6e 2d 0a 09 23 20 61 64 75 6c 74 65 72 e un-..# adulter
1440: 61 74 65 64 20 63 6f 6d 6d 69 74 20 6d 65 73 73 ated commit mess
1450: 61 67 65 2c 20 61 73 20 43 56 53 20 75 73 65 73 age, as CVS uses
1460: 20 61 20 68 61 72 64 77 69 72 65 64 20 6d 61 67 a hardwired mag
1470: 69 63 0a 09 23 20 6d 65 73 73 61 67 65 20 66 6f ic..# message fo
1480: 72 20 74 68 65 20 6c 61 74 74 65 72 2c 20 69 2e r the latter, i.
1490: 65 2e 20 22 49 6e 69 74 69 61 6c 20 72 65 76 69 e. "Initial revi
14a0: 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a 09 23 20 70 sion\n", no..# p
14b0: 65 72 69 6f 64 2e 20 20 28 54 68 69 73 20 66 61 eriod. (This fa
14c0: 63 74 20 61 6c 73 6f 20 68 65 6c 70 73 20 75 73 ct also helps us
14d0: 20 77 68 65 6e 20 74 68 65 20 74 69 6d 65 20 63 when the time c
14e0: 6f 6d 65 73 20 74 6f 0a 09 23 20 64 65 74 65 72 omes to..# deter
14f0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 69 mine whether thi
1500: 73 20 66 69 6c 65 20 6d 69 67 68 74 20 68 61 76 s file might hav
1510: 65 20 68 61 64 20 61 20 64 65 66 61 75 6c 74 20 e had a default
1520: 62 72 61 6e 63 68 0a 09 23 20 69 6e 20 74 68 65 branch..# in the
1530: 20 70 61 73 74 2e 29 0a 0a 09 69 66 20 7b 24 72 past.)...if {$r
1540: 65 76 6e 72 20 65 71 20 22 22 7d 20 7b 0a 09 20 evnr eq ""} {..
1550: 20 20 20 73 65 74 20 6d 79 69 6d 70 6f 72 74 65 set myimporte
1560: 64 20 5b 65 78 70 72 20 7b 24 63 6f 6d 6d 69 74 d [expr {$commit
1570: 6d 73 67 20 65 71 20 22 49 6e 69 74 69 61 6c 20 msg eq "Initial
1580: 72 65 76 69 73 69 6f 6e 5c 6e 22 7d 5d 0a 09 7d revision\n"}]..}
1590: 0a 0a 09 23 20 48 65 72 65 20 77 65 20 61 6c 73 ...# Here we als
15a0: 6f 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 o keep track of
15b0: 74 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 the order in whi
15c0: 63 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 ch the revisions
15d0: 0a 09 23 20 77 65 72 65 20 61 64 64 65 64 20 74 ..# were added t
15e0: 6f 20 74 68 65 20 66 69 6c 65 2e 0a 0a 09 6c 61 o the file....la
15f0: 70 70 65 6e 64 20 6d 79 72 65 76 69 73 69 6f 6e ppend myrevision
1600: 73 20 24 72 65 76 0a 09 72 65 74 75 72 6e 0a 20 s $rev..return.
1610: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
1620: 20 64 6f 6e 65 20 7b 7d 20 7b 7d 0a 0a 20 20 20 done {} {}..
1630: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
1640: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
1650: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
1660: 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69 61 State.. varia
1670: 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 20 20 ble mypath
1680: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 {} ; # Pat
1690: 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27 73 20 h of the file's
16a0: 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20 20 20 rcs archive..
16b0: 20 76 61 72 69 61 62 6c 65 20 6d 79 65 78 65 63 variable myexec
16c0: 75 74 61 62 6c 65 20 20 20 20 20 20 30 20 20 3b utable 0 ;
16d0: 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 # Boolean flag
16e0: 27 66 69 6c 65 20 65 78 65 63 75 74 61 62 6c 65 'file executable
16f0: 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 '.. variable
1700: 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 20 20 20 myproject
1710: 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e {} ; # Referen
1720: 63 65 20 74 6f 20 74 68 65 20 70 72 6f 6a 65 63 ce to the projec
1730: 74 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 20 20 t object.....
1740: 20 23 20 74 68 65 20 66 69 6c 65 20 62 65 6c 6f # the file belo
1750: 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76 61 72 69 ngs to.. vari
1760: 61 62 6c 65 20 6d 79 72 65 76 20 2d 61 72 72 61 able myrev -arra
1770: 79 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 4d 61 y {} ; # Ma
1780: 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 ps revision numb
1790: 65 72 20 74 6f 20 74 68 65 0a 09 09 09 09 20 20 er to the.....
17a0: 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 20 72 # associated r
17b0: 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e 0a evision object..
17c0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 variable myr
17d0: 65 76 69 73 69 6f 6e 73 20 20 20 20 20 20 20 7b evisions {
17e0: 7d 20 3b 20 23 20 53 61 6d 65 20 61 73 20 6d 79 } ; # Same as my
17f0: 72 65 76 2c 20 62 75 74 20 61 20 6c 69 73 74 2c rev, but a list,
1800: 0a 09 09 09 09 20 20 20 20 23 20 67 69 76 69 6e ..... # givin
1810: 67 20 75 73 20 74 68 65 20 6f 72 64 65 72 20 6f g us the order o
1820: 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 69 f..... # revi
1830: 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61 72 69 61 sions.. varia
1840: 62 6c 65 20 6d 79 61 69 64 20 20 20 20 20 20 2d ble myaid -
1850: 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 array {} ; # Map
1860: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 revision number
1870: 73 20 74 6f 20 74 68 65 20 69 64 0a 09 09 09 09 s to the id.....
1880: 20 20 20 20 23 20 6f 66 20 74 68 65 20 61 75 74 # of the aut
1890: 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69 74 74 65 hor who committe
18a0: 64 0a 09 09 09 09 20 20 20 20 23 20 69 74 2e 20 d..... # it.
18b0: 54 68 69 73 20 69 73 20 6c 61 74 65 72 20 61 67 This is later ag
18c0: 67 72 65 67 61 74 65 64 0a 09 09 09 09 20 20 20 gregated.....
18d0: 20 23 20 77 69 74 68 20 63 6f 6d 6d 69 74 20 6d # with commit m
18e0: 65 73 73 61 67 65 2c 20 62 72 61 6e 63 68 20 6e essage, branch n
18f0: 61 6d 65 0a 09 09 09 09 20 20 20 20 23 20 61 6e ame..... # an
1900: 64 20 70 72 6f 6a 65 63 74 20 69 64 20 66 6f 72 d project id for
1910: 20 61 20 6d 65 74 61 20 69 64 2e 0a 20 20 20 20 a meta id..
1920: 76 61 72 69 61 62 6c 65 20 6d 79 68 65 61 64 72 variable myheadr
1930: 65 76 6e 72 20 20 20 20 20 20 20 7b 7d 20 3b 20 evnr {} ;
1940: 23 20 48 65 61 64 20 72 65 76 69 73 69 6f 6e 20 # Head revision
1950: 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 (revision number
1960: 29 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d ). variable m
1970: 79 70 72 69 6e 63 69 70 61 6c 20 20 20 20 20 20 yprincipal
1980: 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 69 70 61 {} ; # Principa
1990: 6c 20 62 72 61 6e 63 68 20 28 62 72 61 6e 63 68 l branch (branch
19a0: 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 09 20 20 number)......
19b0: 20 20 23 20 43 6f 6e 74 72 61 72 79 20 74 6f 20 # Contrary to
19c0: 74 68 65 20 6e 61 6d 65 20 74 68 69 73 20 69 73 the name this is
19d0: 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 20 64 the..... # d
19e0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 20 efault branch..
19f0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 65 variable myde
1a00: 70 65 6e 64 65 6e 63 69 65 73 20 20 20 20 7b 7d pendencies {}
1a10: 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 72 79 20 ; # Dictionary
1a20: 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 2c parent -> child,
1a30: 0a 09 09 09 09 20 20 20 20 23 20 72 65 63 6f 72 ..... # recor
1a40: 64 73 20 70 72 69 6d 61 72 79 20 64 65 70 65 6e ds primary depen
1a50: 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 76 61 72 dencies.. var
1a60: 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 65 64 iable myimported
1a70: 20 20 20 20 20 20 20 20 30 20 20 3b 20 23 20 42 0 ; # B
1a80: 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53 65 74 oolean flag. Set
1a90: 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a if and only if.
1aa0: 09 09 09 09 20 20 20 20 23 20 72 65 76 20 31 2e .... # rev 1.
1ab0: 31 20 6f 66 20 74 68 65 20 66 69 6c 65 20 73 65 1 of the file se
1ac0: 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 20 20 20 emingly.....
1ad0: 23 20 77 61 73 20 69 6d 70 6f 72 74 65 64 20 69 # was imported i
1ae0: 6e 73 74 65 61 64 20 6f 66 20 61 64 64 65 64 0a nstead of added.
1af0: 09 09 09 09 20 20 20 20 23 20 6e 6f 72 6d 61 6c .... # normal
1b00: 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 ly.. variable
1b10: 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 20 20 20 myroot
1b20: 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 {} ; # Refere
1b30: 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76 69 73 nce to the revis
1b40: 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 ion object.....
1b50: 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 74 68 65 # holding the
1b60: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 20 root revision.
1b70: 20 49 74 73 0a 09 09 09 09 20 20 20 20 23 20 6e Its..... # n
1b80: 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 20 69 73 umber usually is
1b90: 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 65 0a 09 '1.1'. Can be..
1ba0: 09 09 09 20 20 20 20 23 20 61 20 64 69 66 66 65 ... # a diffe
1bb0: 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62 65 63 rent number, bec
1bc0: 61 75 73 65 20 6f 66 0a 09 09 09 09 20 20 20 20 ause of.....
1bd0: 23 20 67 61 70 73 20 63 72 65 61 74 65 64 20 76 # gaps created v
1be0: 69 61 20 27 63 76 73 61 64 6d 69 6e 20 2d 6f 27 ia 'cvsadmin -o'
1bf0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
1c00: 79 62 72 61 6e 63 68 65 73 20 2d 61 72 72 61 79 ybranches -array
1c10: 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 62 72 61 {} ; # Maps bra
1c20: 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 nch number to th
1c30: 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 20 20 20 e symbol.....
1c40: 20 23 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 69 # object handli
1c50: 6e 67 20 74 68 65 20 62 72 61 6e 63 68 2e 0a 20 ng the branch..
1c60: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 61 variable myta
1c70: 67 73 20 20 20 20 20 2d 61 72 72 61 79 20 7b 7d gs -array {}
1c80: 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 73 69 ; # Maps revisi
1c90: 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 on number to the
1ca0: 20 6c 69 73 74 0a 09 09 09 09 20 20 20 20 23 20 list..... #
1cb0: 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 63 74 of symbol object
1cc0: 73 20 66 6f 72 20 74 68 65 20 74 61 67 73 0a 09 s for the tags..
1cd0: 09 09 09 20 20 20 20 23 20 61 73 73 6f 63 69 61 ... # associa
1ce0: 74 65 64 20 77 69 74 68 20 74 68 65 20 72 65 76 ted with the rev
1cf0: 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 ision.. varia
1d00: 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 20 20 20 ble mysymbols
1d10: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 65 74 {} ; # Set
1d20: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 6e of the symbol n
1d30: 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e 0a 09 09 ames found in...
1d40: 09 09 20 20 20 20 23 20 74 68 69 73 20 66 69 6c .. # this fil
1d50: 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 e... variable
1d60: 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 30 20 3b mybranchcnt 0 ;
1d70: 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 62 # Counter for b
1d80: 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 65 63 6f ranches, to reco
1d90: 72 64 20 74 68 65 69 72 0a 09 09 09 20 20 20 20 rd their....
1da0: 20 23 20 6f 72 64 65 72 20 6f 66 20 64 65 66 69 # order of defi
1db0: 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 61 6c 73 nition. This als
1dc0: 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 20 20 20 o defines....
1dd0: 20 20 23 20 74 68 65 69 72 20 6f 72 64 65 72 20 # their order
1de0: 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 77 68 69 of creation, whi
1df0: 63 68 20 69 73 20 74 68 65 0a 09 09 09 20 20 20 ch is the....
1e00: 20 20 23 20 72 65 76 65 72 73 65 20 6f 66 20 64 # reverse of d
1e10: 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 2e 65 2e efinition. I.e.
1e20: 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 09 20 20 a smaller....
1e30: 20 20 20 23 20 6e 75 6d 62 65 72 20 6d 65 61 6e # number mean
1e40: 73 20 27 44 65 66 69 6e 65 64 20 65 61 72 6c 69 s 'Defined earli
1e50: 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 09 20 20 er', means....
1e60: 20 20 20 23 20 27 43 72 65 61 74 65 64 20 6c 61 # 'Created la
1e70: 74 65 72 27 2e 0a 0a 20 20 20 20 23 20 23 20 23 ter'... # # #
1e80: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
1e90: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
1ea0: 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e ##. ## Intern
1eb0: 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 al methods..
1ec0: 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 72 61 method RecordBra
1ed0: 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72 61 6e nchCommits {bran
1ee0: 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61 63 68 ches} {..foreach
1ef0: 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24 62 72 branchrevnr $br
1f00: 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 69 66 anches {.. if
1f10: 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73 65 74 {[catch {...set
1f20: 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 52 branch [$self R
1f30: 65 76 32 42 72 61 6e 63 68 20 24 62 72 61 6e 63 ev2Branch $branc
1f40: 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d 5d 7d hrevnr].. }]}
1f50: 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 20 {...set branch
1f60: 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61 62 65 [$self AddUnlabe
1f70: 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76 20 32 ledBranch [rev 2
1f80: 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68 branchnr $branch
1f90: 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 0a revnr]].. }..
1fa0: 09 20 20 20 20 23 20 52 65 63 6f 72 64 20 74 68 . # Record th
1fb0: 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74 20 61 e commit, just a
1fc0: 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 s revision numbe
1fd0: 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e 6f 77 r for.. # now
1fe0: 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68 44 65 . ProcesBranchDe
1ff0: 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c 6c 20 pendencies will
2000: 65 78 74 65 6e 64 20 74 68 61 74 20 69 74 6f 20 extend that ito
2010: 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65 72 20 a.. # proper
2020: 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 object reference
2030: 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 .... $branch
2040: 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20 24 62 setchildrevnr $b
2050: 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a 09 72 ranchrevnr..}..r
2060: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
2070: 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72 61 6e method Rev2Bran
2080: 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 66 ch {revnr} {..if
2090: 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 {[rev istrunkre
20a0: 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 vnr $revnr]} {..
20b0: 20 20 20 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 trouble inte
20c0: 72 6e 61 6c 20 22 45 78 70 65 63 74 65 64 20 61 rnal "Expected a
20d0: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e branch revision
20e0: 20 6e 75 6d 62 65 72 22 0a 09 7d 0a 09 72 65 74 number"..}..ret
20f0: 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 65 73 28 urn $mybranches(
2100: 5b 72 65 76 20 32 62 72 61 6e 63 68 6e 72 20 24 [rev 2branchnr $
2110: 72 65 76 6e 72 5d 29 0a 20 20 20 20 7d 0a 0a 20 revnr]). }..
2120: 20 20 20 6d 65 74 68 6f 64 20 41 64 64 55 6e 6c method AddUnl
2130: 61 62 65 6c 65 64 42 72 61 6e 63 68 20 7b 62 72 abeledBranch {br
2140: 61 6e 63 68 6e 72 7d 20 7b 0a 09 72 65 74 75 72 anchnr} {..retur
2150: 6e 20 5b 24 73 65 6c 66 20 41 64 64 42 72 61 6e n [$self AddBran
2160: 63 68 20 75 6e 6c 61 62 65 6c 65 64 2d 24 62 72 ch unlabeled-$br
2170: 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68 6e 72 anchnr $branchnr
2180: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 ]. }.. met
2190: 68 6f 64 20 41 64 64 42 72 61 6e 63 68 20 7b 6e hod AddBranch {n
21a0: 61 6d 65 20 62 72 61 6e 63 68 6e 72 7d 20 7b 0a ame branchnr} {.
21b0: 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 .if {[info exist
21c0: 73 20 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 s mybranches($br
21d0: 61 6e 63 68 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 anchnr)]} {..
21e0: 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c log write 1 fil
21f0: 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a e "In '$mypath':
2200: 20 42 72 61 6e 63 68 20 27 24 62 72 61 6e 63 68 Branch '$branch
2210: 6e 72 27 20 6e 61 6d 65 64 20 27 5b 24 6d 79 62 nr' named '[$myb
2220: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e ranches($branchn
2230: 72 29 20 6e 61 6d 65 5d 27 22 0a 09 20 20 20 20 r) name]'"..
2240: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 log write 1 file
2250: 20 22 43 61 6e 6e 6f 74 20 68 61 76 65 20 73 65 "Cannot have se
2260: 63 6f 6e 64 20 6e 61 6d 65 20 27 24 6e 61 6d 65 cond name '$name
2270: 27 2c 20 69 67 6e 6f 72 69 6e 67 20 69 74 22 0a ', ignoring it".
2280: 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 . return..}..
2290: 73 65 74 20 62 72 61 6e 63 68 20 5b 73 79 6d 20 set branch [sym
22a0: 25 41 55 54 4f 25 20 62 72 61 6e 63 68 20 24 62 %AUTO% branch $b
22b0: 72 61 6e 63 68 6e 72 20 5b 24 6d 79 70 72 6f 6a ranchnr [$myproj
22c0: 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e ect getsymbol $n
22d0: 61 6d 65 5d 5d 0a 09 24 62 72 61 6e 63 68 20 73 ame]]..$branch s
22e0: 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e 63 72 etposition [incr
22f0: 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a 09 73 mybranchcnt]..s
2300: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 62 et mybranches($b
2310: 72 61 6e 63 68 6e 72 29 20 24 62 72 61 6e 63 68 ranchnr) $branch
2320: 0a 09 72 65 74 75 72 6e 20 24 62 72 61 6e 63 68 ..return $branch
2330: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
2340: 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 6d 65 20 od AddTag {name
2350: 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 74 61 revnr} {..set ta
2360: 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 74 61 g [sym %AUTO% ta
2370: 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 72 6f g $revnr [$mypro
2380: 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 ject getsymbol $
2390: 6e 61 6d 65 5d 5d 0a 09 6c 61 70 70 65 6e 64 20 name]]..lappend
23a0: 6d 79 74 61 67 73 28 24 72 65 76 6e 72 29 20 24 mytags($revnr) $
23b0: 74 61 67 0a 09 72 65 74 75 72 6e 20 24 74 61 67 tag..return $tag
23c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 . }.. proc
23d0: 20 52 65 63 6f 72 64 42 61 73 69 63 44 65 70 65 RecordBasicDepe
23e0: 6e 64 65 6e 63 69 65 73 20 7b 72 65 76 6e 72 20 ndencies {revnr
23f0: 6e 65 78 74 7d 20 7b 0a 09 23 20 48 61 6e 64 6c next} {..# Handl
2400: 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 64 e the revision d
2410: 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 52 65 63 ependencies. Rec
2420: 6f 72 64 20 74 68 65 6d 20 66 6f 72 20 6e 6f 77 ord them for now
2430: 2c 20 64 6f 0a 09 23 20 6e 6f 74 68 69 6e 67 20 , do..# nothing
2440: 77 69 74 68 20 74 68 65 6d 20 79 65 74 2e 0a 0a with them yet...
2450: 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b 20 .# On the trunk
2460: 74 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 the 'next' field
2470: 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 points to the p
2480: 72 65 76 69 6f 75 73 0a 09 23 20 72 65 76 69 73 revious..# revis
2490: 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 65 20 5f 70 ion, i.e. the _p
24a0: 61 72 65 6e 74 5f 20 6f 66 20 74 68 65 20 63 75 arent_ of the cu
24b0: 72 72 65 6e 74 20 6f 6e 65 2e 20 45 78 61 6d 70 rrent one. Examp
24c0: 6c 65 3a 0a 09 23 20 31 2e 36 27 73 20 6e 65 78 le:..# 1.6's nex
24d0: 74 20 69 73 20 31 2e 35 20 28 6d 6f 64 75 6c 6f t is 1.5 (modulo
24e0: 20 63 76 73 20 61 64 6d 69 6e 20 2d 6f 29 2e 0a cvs admin -o)..
24f0: 0a 09 23 20 43 6f 6e 74 72 61 72 69 6c 79 20 6f ..# Contrarily o
2500: 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65 20 27 n a branch the '
2510: 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e next' field poin
2520: 74 73 20 74 6f 20 74 68 65 0a 09 23 20 70 72 69 ts to the..# pri
2530: 6d 61 72 79 20 5f 63 68 69 6c 64 5f 20 6f 66 20 mary _child_ of
2540: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 76 69 the current revi
2550: 73 69 6f 6e 2e 20 41 73 20 65 78 61 6d 70 6c 65 sion. As example
2560: 2c 0a 09 23 20 31 2e 31 2e 33 2e 32 27 73 20 27 ,..# 1.1.3.2's '
2570: 6e 65 78 74 27 20 77 69 6c 6c 20 62 65 20 31 2e next' will be 1.
2580: 31 2e 33 2e 33 2e 0a 0a 09 23 20 54 68 65 20 27 1.3.3....# The '
2590: 6e 65 78 74 27 20 66 69 65 6c 64 20 61 63 74 75 next' field actu
25a0: 61 6c 6c 79 20 61 6c 77 61 79 73 20 72 65 66 65 ally always refe
25b0: 72 73 20 74 6f 20 74 68 65 20 72 65 76 69 73 69 rs to the revisi
25c0: 6f 6e 0a 09 23 20 63 6f 6e 74 61 69 6e 69 6e 67 on..# containing
25d0: 20 74 68 65 20 64 65 6c 74 61 20 6e 65 65 64 65 the delta neede
25e0: 64 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 d to retrieve th
25f0: 61 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 at revision....#
2600: 20 54 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65 The dependencie
2610: 73 20 6e 65 65 64 65 64 20 68 65 72 65 20 61 72 s needed here ar
2620: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 73 74 e the logical st
2630: 72 75 63 74 75 72 65 2c 0a 09 23 20 70 61 72 65 ructure,..# pare
2640: 6e 74 2f 63 68 69 6c 64 2c 20 61 6e 64 20 6e 6f nt/child, and no
2650: 74 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 t the implementa
2660: 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 20 64 tion dependent d
2670: 65 6c 74 61 0a 09 23 20 70 6f 69 6e 74 65 72 73 elta..# pointers
2680: 2e 0a 0a 09 69 66 20 7b 24 6e 65 78 74 20 65 71 ....if {$next eq
2690: 20 22 22 7d 20 72 65 74 75 72 6e 0a 0a 09 75 70 ""} return...up
26a0: 76 61 72 20 31 20 6d 79 64 65 70 65 6e 64 65 6e var 1 mydependen
26b0: 63 69 65 73 20 6d 79 64 65 70 65 6e 64 65 6e 63 cies mydependenc
26c0: 69 65 73 0a 0a 09 23 20 20 20 20 20 20 20 20 20 ies...#
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26e0: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 parent -> child
26f0: 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 ..if {[rev istru
2700: 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d nkrevnr $revnr]}
2710: 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 {.. lappend
2720: 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 mydependencies $
2730: 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65 next $revnr..} e
2740: 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 lse {.. lappe
2750: 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 nd mydependencie
2760: 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09 s $revnr $next..
2770: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
2780: 0a 20 20 20 20 70 72 6f 63 20 50 72 6f 63 65 73 . proc Proces
2790: 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 65 6e sPrimaryDependen
27a0: 63 69 65 73 20 7b 7d 20 7b 0a 09 75 70 76 61 72 cies {} {..upvar
27b0: 20 31 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 1 mydependencie
27c0: 73 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 s mydependencies
27d0: 20 6d 79 72 65 76 20 6d 79 72 65 76 0a 0a 09 66 myrev myrev...f
27e0: 6f 72 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65 oreach {parentre
27f0: 76 6e 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20 vnr childrevnr}
2800: 24 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 $mydependencies
2810: 7b 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 6e {.. set paren
2820: 74 20 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74 t $myrev($parent
2830: 72 65 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20 revnr).. set
2840: 63 68 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63 child $myrev($c
2850: 68 69 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20 hildrevnr)..
2860: 24 70 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64 $parent setchild
2870: 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 $child.. $ch
2880: 69 6c 64 20 73 65 74 70 61 72 65 6e 74 20 24 70 ild setparent $p
2890: 61 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e arent..}..return
28a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 . }.. proc
28b0: 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65 ProcessBranchDe
28c0: 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a pendencies {} {.
28d0: 09 75 70 76 61 72 20 31 20 6d 79 62 72 61 6e 63 .upvar 1 mybranc
28e0: 68 65 73 20 6d 79 62 72 61 6e 63 68 65 73 20 6d hes mybranches m
28f0: 79 72 65 76 20 6d 79 72 65 76 0a 0a 09 66 6f 72 yrev myrev...for
2900: 65 61 63 68 20 7b 62 72 61 6e 63 68 6e 72 20 62 each {branchnr b
2910: 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 ranch} [array ge
2920: 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a t mybranches] {.
2930: 09 20 20 20 20 73 65 74 20 72 65 76 6e 72 20 5b . set revnr [
2940: 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 72 65 $branch parentre
2950: 76 6e 72 5d 0a 0a 09 20 20 20 20 69 66 20 7b 21 vnr]... if {!
2960: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 [info exists myr
2970: 65 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 ev($revnr)]} {..
2980: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c .log write 1 fil
2990: 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a e "In '$mypath':
29a0: 20 54 68 65 20 62 72 61 6e 63 68 20 27 5b 24 62 The branch '[$b
29b0: 72 61 6e 63 68 20 6e 61 6d 65 5d 27 20 72 65 66 ranch name]' ref
29c0: 65 72 65 6e 63 65 73 22 0a 09 09 6c 6f 67 20 77 erences"...log w
29d0: 72 69 74 65 20 31 20 66 69 6c 65 20 22 74 68 65 rite 1 file "the
29e0: 20 62 6f 67 75 73 20 72 65 76 69 73 69 6f 6e 20 bogus revision
29f0: 27 24 72 65 76 6e 72 27 20 61 6e 64 20 77 69 6c '$revnr' and wil
2a00: 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 l be ignored."..
2a10: 09 24 62 72 61 6e 63 68 20 64 65 73 74 72 6f 79 .$branch destroy
2a20: 0a 09 09 75 6e 73 65 74 20 6d 79 62 72 61 6e 63 ...unset mybranc
2a30: 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 0a 09 hes($branchnr)..
2a40: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 } else {...s
2a50: 65 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 et rev $myrev($r
2a60: 65 76 6e 72 29 0a 09 09 24 72 65 76 20 61 64 64 evnr)...$rev add
2a70: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 0a branch $branch..
2a80: 09 09 23 20 49 66 20 72 65 76 69 73 69 6f 6e 73 ..# If revisions
2a90: 20 77 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 were committed
2aa0: 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 65 on the branch we
2ab0: 20 73 74 6f 72 65 20 61 0a 09 09 23 20 72 65 66 store a...# ref
2ac0: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 62 72 erence to the br
2ad0: 61 6e 63 68 20 74 68 65 72 65 2c 20 61 6e 64 20 anch there, and
2ae0: 66 75 72 74 68 65 72 20 64 65 63 6c 61 72 65 0a further declare.
2af0: 09 09 23 20 74 68 65 20 66 69 72 73 74 20 63 68 ..# the first ch
2b00: 69 6c 64 27 73 20 70 61 72 65 6e 74 20 74 6f 20 ild's parent to
2b10: 62 65 20 62 72 61 6e 63 68 27 73 20 70 61 72 65 be branch's pare
2b20: 6e 74 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 nt, and...# list
2b30: 20 74 68 69 73 20 63 68 69 6c 64 20 69 6e 20 74 this child in t
2b40: 68 65 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 he parent revisi
2b50: 6f 6e 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 on.....if {[$bra
2b60: 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b nch haschild]} {
2b70: 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 ... set child
2b80: 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 63 revnr [$branch c
2b90: 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 20 hildrevnr]...
2ba0: 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 72 65 set child $myre
2bb0: 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 0a v($childrevnr)..
2bc0: 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 .. $child set
2bd0: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 parentbranch $br
2be0: 61 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c anch... $chil
2bf0: 64 20 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 d setparent
2c00: 20 20 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 $rev... $re
2c10: 76 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e v addchildonbran
2c20: 63 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 ch $child...}..
2c30: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a }..}..return.
2c40: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 }.. proc
2c50: 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b 7d 20 SortBranches {}
2c60: 7b 0a 09 75 70 76 61 72 20 31 20 6d 79 72 65 76 {..upvar 1 myrev
2c70: 20 6d 79 72 65 76 0a 0a 09 66 6f 72 65 61 63 68 myrev...foreach
2c80: 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b 61 72 {revnr rev} [ar
2c90: 72 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20 7b ray get myrev] {
2ca0: 0a 09 20 20 20 20 24 72 65 76 20 73 6f 72 74 62 .. $rev sortb
2cb0: 72 61 6e 63 68 65 73 0a 09 7d 0a 09 72 65 74 75 ranches..}..retu
2cc0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 rn. }.. pr
2cd0: 6f 63 20 50 72 6f 63 65 73 73 54 61 67 44 65 70 oc ProcessTagDep
2ce0: 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 endencies {} {..
2cf0: 75 70 76 61 72 20 31 20 6d 79 74 61 67 73 20 6d upvar 1 mytags m
2d00: 79 74 61 67 73 20 6d 79 72 65 76 20 6d 79 72 65 ytags myrev myre
2d10: 76 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 v...foreach {rev
2d20: 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 nr taglist} [arr
2d30: 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b ay get mytags] {
2d40: 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f .. if {![info
2d50: 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 24 72 exists myrev($r
2d60: 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 65 74 20 evnr)]} {...set
2d70: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 61 67 6c n [llength $tagl
2d80: 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 69 74 65 ist]...log write
2d90: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 1 file "In '$my
2da0: 70 61 74 68 27 3a 20 54 68 65 20 66 6f 6c 6c 6f path': The follo
2db0: 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 74 61 67 wing [nsp $n tag
2dc0: 5d 20 72 65 66 65 72 65 6e 63 65 22 0a 09 09 6c ] reference"...l
2dd0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 og write 1 file
2de0: 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 "the bogus revis
2df0: 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 ion '$revnr' and
2e00: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 will be ignored
2e10: 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 ."...foreach tag
2e20: 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 20 20 $taglist {...
2e30: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 log write 1 fi
2e40: 6c 65 20 22 20 20 20 20 5b 24 74 61 67 20 6e 61 le " [$tag na
2e50: 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 61 67 20 me]"... $tag
2e60: 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 09 75 6e destroy...}...un
2e70: 73 65 74 20 6d 79 74 61 67 73 28 24 72 65 76 6e set mytags($revn
2e80: 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b r).. } else {
2e90: 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 ...set rev $myre
2ea0: 76 28 24 72 65 76 6e 72 29 0a 09 09 66 6f 72 65 v($revnr)...fore
2eb0: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 ach tag $taglist
2ec0: 20 7b 20 24 72 65 76 20 61 64 64 74 61 67 20 24 { $rev addtag $
2ed0: 74 61 67 20 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a tag }.. }..}.
2ee0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
2ef0: 20 20 20 70 72 6f 63 20 44 65 74 65 72 6d 69 6e proc Determin
2f00: 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69 6f 6e eTheRootRevision
2f10: 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 6d {} {..upvar 1 m
2f20: 79 72 65 76 20 6d 79 72 65 76 20 6d 79 72 6f 6f yrev myrev myroo
2f30: 74 20 6d 79 72 6f 6f 74 0a 0a 09 23 20 54 68 65 t myroot...# The
2f40: 20 72 6f 6f 74 20 69 73 20 74 68 65 20 6f 6e 65 root is the one
2f50: 20 72 65 76 69 73 69 6f 6e 20 77 68 69 63 68 20 revision which
2f60: 68 61 73 20 6e 6f 20 70 61 72 65 6e 74 2e 20 42 has no parent. B
2f70: 79 0a 09 23 20 63 68 65 63 6b 69 6e 67 20 61 6c y..# checking al
2f80: 6c 20 72 65 76 69 73 69 6f 6e 73 20 77 65 20 65 l revisions we e
2f90: 6e 73 75 72 65 20 74 68 61 74 20 77 65 20 63 61 nsure that we ca
2fa0: 6e 20 64 65 74 65 63 74 20 61 6e 64 0a 09 23 20 n detect and..#
2fb0: 72 65 70 6f 72 74 20 74 68 65 20 63 61 73 65 20 report the case
2fc0: 6f 66 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 of multiple root
2fd0: 73 2e 20 57 69 74 68 6f 75 74 20 74 68 61 74 20 s. Without that
2fe0: 77 65 20 63 6f 75 6c 64 0a 09 23 20 73 69 6d 70 we could..# simp
2ff0: 6c 79 20 74 61 6b 65 20 6f 6e 65 20 72 65 76 69 ly take one revi
3000: 73 69 6f 6e 20 61 6e 64 20 66 6f 6c 6c 6f 77 20 sion and follow
3010: 74 68 65 20 70 61 72 65 6e 74 20 6c 69 6e 6b 73 the parent links
3020: 20 74 6f 0a 09 23 20 74 68 65 69 72 20 72 6f 6f to..# their roo
3030: 74 20 28 73 69 63 21 29 2e 0a 0a 09 66 6f 72 65 t (sic!)....fore
3040: 61 63 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 ach {revnr rev}
3050: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72 65 76 [array get myrev
3060: 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 ] {.. if {[$r
3070: 65 76 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 63 ev hasparent]} c
3080: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 69 66 20 ontinue.. if
3090: 7b 24 6d 79 72 6f 6f 74 20 6e 65 20 22 22 7d 20 {$myroot ne ""}
30a0: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e { trouble intern
30b0: 61 6c 20 22 4d 75 6c 74 69 70 6c 65 20 72 6f 6f al "Multiple roo
30c0: 74 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e t revisions foun
30d0: 64 22 20 7d 0a 09 20 20 20 20 73 65 74 20 6d 79 d" }.. set my
30e0: 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a 09 72 65 root $rev..}..re
30f0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
3100: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
3110: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
3120: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 #######. ## C
3130: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 onfiguration..
3140: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 pragma -hastyp
3150: 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 einfo no ; #
3160: 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 no type introsp
3170: 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d ection. pragm
3180: 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 a -hasinfo
3190: 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a no ; # no obj
31a0: 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f ect introspectio
31b0: 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 n. pragma -ha
31c0: 73 74 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f 20 stypemethods no
31d0: 20 3b 20 23 20 74 79 70 65 20 69 73 20 6e 6f 74 ; # type is not
31e0: 20 72 65 6c 65 76 61 6e 74 2e 0a 20 20 20 20 70 relevant.. p
31f0: 72 61 67 6d 61 20 2d 73 69 6d 70 6c 65 64 69 73 ragma -simpledis
3200: 70 61 74 63 68 20 79 65 73 20 3b 20 23 20 73 69 patch yes ; # si
3210: 6d 70 6c 65 20 66 61 73 74 20 64 69 73 70 61 74 mple fast dispat
3220: 63 68 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 ch.. # # ## #
3230: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
3240: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
3250: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 }..namespace eva
3260: 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a l ::vc::fossil::
3270: 69 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 import::cvs {.
3280: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f namespace expo
3290: 72 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 rt file. name
32a0: 73 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 space eval file
32b0: 7b 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 {..# Import not
32c0: 72 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 required, alread
32d0: 79 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 y a child namesp
32e0: 61 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 ace...# namespac
32f0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
3300: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
3310: 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 vs::file::rev..#
3320: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 namespace impor
3330: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a t ::vc::fossil::
3340: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c import::cvs::fil
3350: 65 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 e::sym..namespac
3360: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
3370: 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e ools::misc::*..n
3380: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
3390: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f ::vc::tools::tro
33a0: 75 62 6c 65 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 uble. }.}..#
33b0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
33c0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
33d0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
33e0: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 ###########.## R
33f0: 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 eady..package pr
3400: 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c ovide vc::fossil
3410: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 ::import::cvs::f
3420: 69 6c 65 20 31 2e 30 0a 72 65 74 75 72 6e 0a ile 1.0.return.