Artifact 49171e7a4082c0e49ad98d8781dc90516cea4877:
File
tools/cvs2fossil/lib/c2f_frev.tcl
part of check-in
[cfe4b269ac]
- Added detection of irrelevant trunk revisions for files added to a branch but not the trunk. Repository extended to keep inverted indices for the meta data and commit messages for retrieval of commit messages per meta data, required for the previous. fixed problem with file objects, we kept only the rcs path, and need the user visible path too.
by
aku on
2007-10-17 04:37:05.
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 52 65 76 ########..## Rev
0200: 69 73 69 6f 6e 73 20 70 65 72 20 66 69 6c 65 2e isions per file.
0210: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 ..# # ## ### ###
0220: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
0230: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######### ######
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############.
0250: 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a ## Requirements.
0260: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require
0270: 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20 20 Tcl 8.4
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0290: 20 20 20 20 20 3b 20 23 20 52 65 71 75 69 72 65 ; # Require
02a0: 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 d runtime..packa
02b0: 67 65 20 72 65 71 75 69 72 65 20 73 6e 69 74 20 ge require snit
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 20 20 20 20 20 20 20 3b ;
02e0: 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 # OO system..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 ckage require vc
0300: 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 ::tools::misc
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0320: 20 20 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61 ; # Text forma
0330: 74 74 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23 tting..# # ## ##
0340: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
0350: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 ############# #
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0370: 23 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 3a 3a ####.## ..snit::
0380: 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 type ::vc::fossi
0390: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
03a0: 66 69 6c 65 3a 3a 72 65 76 20 7b 0a 20 20 20 20 file::rev {.
03b0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
03c0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
03d0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 50 #######. ## P
03e0: 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 63 ublic API.. c
03f0: 6f 6e 73 74 72 75 63 74 6f 72 20 7b 72 65 76 6e onstructor {revn
0400: 72 20 64 61 74 65 20 73 74 61 74 65 20 74 68 65 r date state the
0410: 66 69 6c 65 7d 20 7b 0a 09 73 65 74 20 6d 79 72 file} {..set myr
0420: 65 76 6e 72 20 20 20 20 24 72 65 76 6e 72 0a 09 evnr $revnr..
0430: 73 65 74 20 6d 79 64 61 74 65 20 20 20 20 20 24 set mydate $
0440: 64 61 74 65 0a 09 73 65 74 20 6d 79 6f 72 69 67 date..set myorig
0450: 64 61 74 65 20 24 64 61 74 65 0a 09 73 65 74 20 date $date..set
0460: 6d 79 73 74 61 74 65 20 20 20 20 24 73 74 61 74 mystate $stat
0470: 65 0a 09 73 65 74 20 6d 79 66 69 6c 65 20 20 20 e..set myfile
0480: 20 20 24 74 68 65 66 69 6c 65 0a 09 72 65 74 75 $thefile..retu
0490: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
04a0: 42 61 73 69 63 20 70 69 65 63 65 73 20 5f 5f 5f Basic pieces ___
04b0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ________________
04c0: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f _____.. metho
04d0: 64 20 68 61 73 6d 65 74 61 20 7b 7d 20 7b 20 72 d hasmeta {} { r
04e0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 eturn [expr {$my
04f0: 6d 65 74 61 69 64 20 6e 65 20 22 22 7d 5d 20 7d metaid ne ""}] }
0500: 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61 73 74 . method hast
0510: 65 78 74 20 7b 7d 20 7b 0a 09 73 74 72 75 63 74 ext {} {..struct
0520: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 6d ::list assign $m
0530: 79 74 65 78 74 20 73 20 65 0a 09 72 65 74 75 72 ytext s e..retur
0540: 6e 20 5b 65 78 70 72 20 7b 24 73 20 3c 3d 20 24 n [expr {$s <= $
0550: 65 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d e}]. }.. m
0560: 65 74 68 6f 64 20 73 65 74 6d 65 74 61 20 7b 6d ethod setmeta {m
0570: 65 74 61 7d 20 7b 20 73 65 74 20 6d 79 6d 65 74 eta} { set mymet
0580: 61 69 64 20 24 6d 65 74 61 20 3b 20 72 65 74 75 aid $meta ; retu
0590: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 rn }. method
05a0: 73 65 74 74 65 78 74 20 7b 74 65 78 74 7d 20 7b settext {text} {
05b0: 20 73 65 74 20 6d 79 74 65 78 74 20 20 20 24 74 set mytext $t
05c0: 65 78 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20 ext ; return }.
05d0: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 6c 6f 64 method setlod
05e0: 20 20 7b 6c 6f 64 7d 20 20 7b 20 73 65 74 20 6d {lod} { set m
05f0: 79 6c 6f 64 20 20 20 20 24 6c 6f 64 20 20 3b 20 ylod $lod ;
0600: 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 return }.. me
0610: 74 68 6f 64 20 72 65 76 6e 72 20 7b 7d 20 7b 20 thod revnr {} {
0620: 72 65 74 75 72 6e 20 24 6d 79 72 65 76 6e 72 20 return $myrevnr
0630: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 74 61 }. method sta
0640: 74 65 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 te {} { return $
0650: 6d 79 73 74 61 74 65 20 7d 0a 20 20 20 20 6d 65 mystate }. me
0660: 74 68 6f 64 20 6c 6f 64 20 20 20 7b 7d 20 7b 20 thod lod {} {
0670: 72 65 74 75 72 6e 20 24 6d 79 6c 6f 64 20 20 20 return $mylod
0680: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 61 74 }. method dat
0690: 65 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 e {} { return $
06a0: 6d 79 64 61 74 65 20 20 7d 0a 0a 20 20 20 20 6d mydate }.. m
06b0: 65 74 68 6f 64 20 69 73 6e 65 65 64 65 64 20 7b ethod isneeded {
06c0: 7d 20 7b 0a 09 69 66 20 7b 24 6d 79 6f 70 65 72 } {..if {$myoper
06d0: 61 74 69 6f 6e 20 6e 65 20 22 6e 6f 74 68 69 6e ation ne "nothin
06e0: 67 22 7d 20 20 20 20 20 20 20 20 20 7b 72 65 74 g"} {ret
06f0: 75 72 6e 20 31 7d 0a 09 69 66 20 7b 24 6d 79 72 urn 1}..if {$myr
0700: 65 76 6e 72 20 6e 65 20 22 31 2e 31 22 7d 20 20 evnr ne "1.1"}
0710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
0720: 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 20 7b 21 return 1}..if {!
0730: 5b 24 6d 79 6c 6f 64 20 69 73 74 72 75 6e 6b 5d [$mylod istrunk]
0740: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 }
0750: 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 {return 1}..if
0760: 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 62 {![llength $myb
0770: 72 61 6e 63 68 65 73 5d 7d 20 20 20 20 20 20 20 ranches]}
0780: 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a {return 1}.
0790: 09 73 65 74 20 66 69 72 73 74 62 72 61 6e 63 68 .set firstbranch
07a0: 20 5b 6c 69 6e 64 65 78 20 24 6d 79 62 72 61 6e [lindex $mybran
07b0: 63 68 65 73 20 30 5d 0a 09 69 66 20 7b 21 5b 24 ches 0]..if {![$
07c0: 66 69 72 73 74 62 72 61 6e 63 68 20 68 61 73 63 firstbranch hasc
07d0: 68 69 6c 64 5d 7d 20 20 20 20 20 20 20 20 20 20 hild]}
07e0: 7b 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 20 7b {return 1}..if {
07f0: 24 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 $myisondefaultbr
0800: 61 6e 63 68 7d 20 20 20 20 20 20 20 20 20 20 20 anch}
0810: 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a 0a 09 {return 1}...
0820: 23 20 46 49 58 3a 20 54 68 69 73 20 6d 65 73 73 # FIX: This mess
0830: 61 67 65 20 77 69 6c 6c 20 6e 6f 74 20 6d 61 74 age will not mat
0840: 63 68 20 69 66 20 74 68 65 20 52 43 53 20 66 69 ch if the RCS fi
0850: 6c 65 20 77 61 73 20 72 65 6e 61 6d 65 64 0a 09 le was renamed..
0860: 23 20 6d 61 6e 75 61 6c 6c 79 20 61 66 74 65 72 # manually after
0870: 20 69 74 20 77 61 73 20 63 72 65 61 74 65 64 2e it was created.
0880: 0a 0a 09 73 65 74 20 67 65 6e 20 22 66 69 6c 65 ...set gen "file
0890: 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b 24 6d 79 [file tail [$my
08a0: 66 69 6c 65 20 75 73 72 70 61 74 68 5d 5d 20 77 file usrpath]] w
08b0: 61 73 20 69 6e 69 74 69 61 6c 6c 79 20 61 64 64 as initially add
08c0: 65 64 20 6f 6e 20 62 72 61 6e 63 68 20 5b 24 66 ed on branch [$f
08d0: 69 72 73 74 62 72 61 6e 63 68 20 6e 61 6d 65 5d irstbranch name]
08e0: 2e 22 0a 09 73 65 74 20 6c 6f 67 20 5b 24 6d 79 ."..set log [$my
08f0: 66 69 6c 65 20 63 6f 6d 6d 69 74 6d 65 73 73 61 file commitmessa
0900: 67 65 6f 66 20 24 6d 79 6d 65 74 61 69 64 5d 0a geof $mymetaid].
0910: 0a 09 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b ..return [expr {
0920: 24 6c 6f 67 20 6e 65 20 24 67 65 6e 7d 5d 0a 20 $log ne $gen}].
0930: 20 20 20 7d 0a 0a 20 20 20 20 23 20 42 61 73 69 }.. # Basi
0940: 63 20 70 61 72 65 6e 74 2f 63 68 69 6c 64 20 6c c parent/child l
0950: 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f inkage _________
0960: 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61 _.. method ha
0970: 73 70 61 72 65 6e 74 20 7b 7d 20 7b 20 72 65 74 sparent {} { ret
0980: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 70 61 urn [expr {$mypa
0990: 72 65 6e 74 20 6e 65 20 22 22 7d 5d 20 7d 0a 20 rent ne ""}] }.
09a0: 20 20 20 6d 65 74 68 6f 64 20 68 61 73 63 68 69 method haschi
09b0: 6c 64 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 ld {} { return
09c0: 5b 65 78 70 72 20 7b 24 6d 79 63 68 69 6c 64 20 [expr {$mychild
09d0: 20 6e 65 20 22 22 7d 5d 20 7d 0a 0a 20 20 20 20 ne ""}] }..
09e0: 6d 65 74 68 6f 64 20 73 65 74 70 61 72 65 6e 74 method setparent
09f0: 20 7b 70 61 72 65 6e 74 7d 20 7b 0a 09 69 66 20 {parent} {..if
0a00: 7b 24 6d 79 70 61 72 65 6e 74 20 6e 65 20 22 22 {$myparent ne ""
0a10: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 } { trouble inte
0a20: 72 6e 61 6c 20 22 50 61 72 65 6e 74 20 61 6c 72 rnal "Parent alr
0a30: 65 61 64 79 20 64 65 66 69 6e 65 64 22 20 7d 0a eady defined" }.
0a40: 09 73 65 74 20 6d 79 70 61 72 65 6e 74 20 24 70 .set myparent $p
0a50: 61 72 65 6e 74 0a 09 72 65 74 75 72 6e 0a 20 20 arent..return.
0a60: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
0a70: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 7b 7d cutfromparent {}
0a80: 20 7b 20 73 65 74 20 6d 79 70 61 72 65 6e 74 20 { set myparent
0a90: 22 22 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20 20 "" ; return }.
0aa0: 20 20 6d 65 74 68 6f 64 20 63 75 74 66 72 6f 6d method cutfrom
0ab0: 63 68 69 6c 64 20 20 7b 7d 20 7b 20 73 65 74 20 child {} { set
0ac0: 6d 79 63 68 69 6c 64 20 20 22 22 20 3b 20 72 65 mychild "" ; re
0ad0: 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 turn }.. meth
0ae0: 6f 64 20 73 65 74 63 68 69 6c 64 20 7b 63 68 69 od setchild {chi
0af0: 6c 64 7d 20 7b 0a 09 69 66 20 7b 24 6d 79 63 68 ld} {..if {$mych
0b00: 69 6c 64 20 6e 65 20 22 22 7d 20 7b 20 74 72 6f ild ne ""} { tro
0b10: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 43 uble internal "C
0b20: 68 69 6c 64 20 61 6c 72 65 61 64 79 20 64 65 66 hild already def
0b30: 69 6e 65 64 22 20 7d 0a 09 73 65 74 20 6d 79 63 ined" }..set myc
0b40: 68 69 6c 64 20 24 63 68 69 6c 64 0a 09 72 65 74 hild $child..ret
0b50: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
0b60: 65 74 68 6f 64 20 70 61 72 65 6e 74 20 7b 7d 20 ethod parent {}
0b70: 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 61 72 65 { return $mypare
0b80: 6e 74 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 nt }. method
0b90: 63 68 69 6c 64 20 20 7b 7d 20 7b 20 72 65 74 75 child {} { retu
0ba0: 72 6e 20 24 6d 79 63 68 69 6c 64 20 20 7d 0a 0a rn $mychild }..
0bb0: 20 20 20 20 23 20 42 72 61 6e 63 68 20 6c 69 6e # Branch lin
0bc0: 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f kage ___________
0bd0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 ___________..
0be0: 20 6d 65 74 68 6f 64 20 73 65 74 70 61 72 65 6e method setparen
0bf0: 74 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 7d tbranch {branch}
0c00: 20 7b 0a 09 69 66 20 7b 24 6d 79 70 61 72 65 6e {..if {$myparen
0c10: 74 62 72 61 6e 63 68 20 6e 65 20 22 22 7d 20 7b tbranch ne ""} {
0c20: 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 trouble interna
0c30: 6c 20 22 42 72 61 6e 63 68 20 70 61 72 65 6e 74 l "Branch parent
0c40: 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e 65 64 already defined
0c50: 22 20 7d 0a 09 73 65 74 20 6d 79 70 61 72 65 6e " }..set myparen
0c60: 74 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a tbranch $branch.
0c70: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
0c80: 20 20 20 6d 65 74 68 6f 64 20 70 61 72 65 6e 74 method parent
0c90: 62 72 61 6e 63 68 20 7b 7d 20 7b 20 72 65 74 75 branch {} { retu
0ca0: 72 6e 20 24 6d 79 70 61 72 65 6e 74 62 72 61 6e rn $myparentbran
0cb0: 63 68 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 ch }. method
0cc0: 62 72 61 6e 63 68 65 73 20 20 20 20 20 7b 7d 20 branches {}
0cd0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e { return $mybran
0ce0: 63 68 65 73 20 7d 0a 0a 20 20 20 20 6d 65 74 68 ches }.. meth
0cf0: 6f 64 20 61 64 64 62 72 61 6e 63 68 20 7b 62 72 od addbranch {br
0d00: 61 6e 63 68 7d 20 7b 0a 09 6c 61 70 70 65 6e 64 anch} {..lappend
0d10: 20 6d 79 62 72 61 6e 63 68 65 73 20 24 62 72 61 mybranches $bra
0d20: 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 nch..return.
0d30: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 61 64 }.. method ad
0d40: 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 7b dchildonbranch {
0d50: 63 68 69 6c 64 7d 20 7b 0a 09 6c 61 70 70 65 6e child} {..lappen
0d60: 64 20 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 72 d mybranchchildr
0d70: 65 6e 20 24 63 68 69 6c 64 0a 09 72 65 74 75 72 en $child..retur
0d80: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
0d90: 68 6f 64 20 63 75 74 66 72 6f 6d 70 61 72 65 6e hod cutfromparen
0da0: 74 62 72 61 6e 63 68 20 7b 7d 20 7b 20 73 65 74 tbranch {} { set
0db0: 20 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 myparentbranch
0dc0: 22 22 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 "" ; return }..
0dd0: 20 20 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 method remove
0de0: 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 7d 20 branch {branch}
0df0: 7b 0a 09 6c 64 65 6c 65 74 65 20 6d 79 62 72 61 {..ldelete mybra
0e00: 6e 63 68 65 73 20 24 62 72 61 6e 63 68 0a 09 72 nches $branch..r
0e10: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
0e20: 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 63 68 method removech
0e30: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 7b 72 65 76 ildonbranch {rev
0e40: 7d 20 7b 0a 09 6c 64 65 6c 65 74 65 20 6d 79 62 } {..ldelete myb
0e50: 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 24 72 ranchchildren $r
0e60: 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d ev..return. }
0e70: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 6f 72 .. method sor
0e80: 74 62 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a 09 tbranches {} {..
0e90: 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d if {![llength $m
0ea0: 79 62 72 61 6e 63 68 65 73 5d 7d 20 72 65 74 75 ybranches]} retu
0eb0: 72 6e 0a 0a 09 23 20 53 6f 72 74 20 74 68 65 20 rn...# Sort the
0ec0: 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 branches spawned
0ed0: 20 62 79 20 74 68 69 73 20 72 65 76 69 73 69 6f by this revisio
0ee0: 6e 20 69 6e 20 63 72 65 61 74 69 6f 6e 0a 09 23 n in creation..#
0ef0: 20 6f 72 64 65 72 2e 20 54 6f 20 68 65 6c 70 20 order. To help
0f00: 69 6e 20 74 68 69 73 20 6f 75 72 20 66 69 6c 65 in this our file
0f10: 20 67 61 76 65 20 61 6c 6c 20 62 72 61 6e 63 68 gave all branch
0f20: 65 73 20 61 20 70 6f 73 69 74 69 6f 6e 0a 09 23 es a position..#
0f30: 20 69 64 2c 20 69 6e 20 6f 72 64 65 72 20 6f 66 id, in order of
0f40: 20 74 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f their definitio
0f50: 6e 20 62 79 20 74 68 65 20 52 43 53 20 61 72 63 n by the RCS arc
0f60: 68 69 76 65 2e 0a 09 23 0a 09 23 20 54 68 65 20 hive...#..# The
0f70: 63 72 65 61 74 69 6f 6e 20 6f 72 64 65 72 20 69 creation order i
0f80: 73 20 28 61 70 70 61 72 65 6e 74 6c 79 29 20 74 s (apparently) t
0f90: 68 65 20 72 65 76 65 72 73 65 20 6f 66 20 74 68 he reverse of th
0fa0: 65 0a 09 23 20 64 65 66 69 6e 69 74 69 6f 6e 20 e..# definition
0fb0: 6f 72 64 65 72 2e 20 28 49 66 20 61 20 62 72 61 order. (If a bra
0fc0: 6e 63 68 20 69 73 20 63 72 65 61 74 65 64 20 74 nch is created t
0fd0: 68 65 6e 20 64 65 6c 65 74 65 64 2c 20 61 0a 09 hen deleted, a..
0fe0: 23 20 6c 61 74 65 72 20 62 72 61 6e 63 68 20 63 # later branch c
0ff0: 61 6e 20 62 65 20 61 73 73 69 67 6e 65 64 20 74 an be assigned t
1000: 68 65 20 72 65 63 79 63 6c 65 64 20 62 72 61 6e he recycled bran
1010: 63 68 20 6e 75 6d 62 65 72 3b 0a 09 23 20 74 68 ch number;..# th
1020: 65 72 65 66 6f 72 65 20 62 72 61 6e 63 68 20 6e erefore branch n
1030: 75 6d 62 65 72 73 20 61 72 65 20 6e 6f 74 20 61 umbers are not a
1040: 6e 20 69 6e 64 69 63 61 74 69 6f 6e 20 6f 66 20 n indication of
1050: 63 72 65 61 74 69 6f 6e 0a 09 23 20 6f 72 64 65 creation..# orde
1060: 72 2e 29 0a 0a 09 73 65 74 20 74 6d 70 20 7b 7d r.)...set tmp {}
1070: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 ..foreach branch
1080: 20 24 6d 79 62 72 61 6e 63 68 65 73 20 7b 0a 09 $mybranches {..
1090: 20 20 20 20 6c 61 70 70 65 6e 64 20 74 6d 70 20 lappend tmp
10a0: 5b 6c 69 73 74 20 24 62 72 61 6e 63 68 20 5b 24 [list $branch [$
10b0: 62 72 61 6e 63 68 20 70 6f 73 69 74 69 6f 6e 5d branch position]
10c0: 5d 0a 09 7d 0a 0a 09 73 65 74 20 6d 79 62 72 61 ]..}...set mybra
10d0: 6e 63 68 65 73 20 7b 7d 0a 09 66 6f 72 65 61 63 nches {}..foreac
10e0: 68 20 69 74 65 6d 20 5b 6c 73 6f 72 74 20 2d 69 h item [lsort -i
10f0: 6e 64 65 78 20 31 20 2d 64 65 63 72 65 61 73 69 ndex 1 -decreasi
1100: 6e 67 20 24 74 6d 70 5d 20 7b 0a 09 20 20 20 20 ng $tmp] {..
1110: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 struct::list ass
1120: 69 67 6e 20 24 69 74 65 6d 20 62 72 61 6e 63 68 ign $item branch
1130: 20 70 6f 73 69 74 69 6f 6e 0a 09 20 20 20 20 6c position.. l
1140: 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 68 65 append mybranche
1150: 73 20 24 62 72 61 6e 63 68 0a 09 7d 0a 09 72 65 s $branch..}..re
1160: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
1170: 6d 65 74 68 6f 64 20 6d 6f 76 65 62 72 61 6e 63 method movebranc
1180: 68 65 73 74 6f 20 7b 72 65 76 7d 20 7b 0a 09 73 hesto {rev} {..s
1190: 65 74 20 72 65 76 6c 6f 64 20 5b 24 72 65 76 20 et revlod [$rev
11a0: 6c 6f 64 5d 0a 09 66 6f 72 65 61 63 68 20 62 72 lod]..foreach br
11b0: 61 6e 63 68 20 24 6d 79 62 72 61 6e 63 68 65 73 anch $mybranches
11c0: 20 7b 0a 09 20 20 20 20 24 72 65 76 20 61 64 64 {.. $rev add
11d0: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 branch $branch..
11e0: 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 70 $branch setp
11f0: 61 72 65 6e 74 20 24 72 65 76 0a 09 20 20 20 20 arent $rev..
1200: 24 62 72 61 6e 63 68 20 73 65 74 6c 6f 64 20 24 $branch setlod $
1210: 72 65 76 6c 6f 64 0a 09 7d 0a 09 66 6f 72 65 61 revlod..}..forea
1220: 63 68 20 62 72 61 6e 63 68 72 65 76 20 24 6d 79 ch branchrev $my
1230: 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b branchchildren {
1240: 0a 09 20 20 20 20 24 72 65 76 20 61 64 64 63 68 .. $rev addch
1250: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 62 72 61 ildonbranch $bra
1260: 6e 63 68 72 65 76 0a 09 20 20 20 20 24 62 72 61 nchrev.. $bra
1270: 6e 63 68 72 65 76 20 63 75 74 66 72 6f 6d 70 61 nchrev cutfrompa
1280: 72 65 6e 74 0a 09 20 20 20 20 24 62 72 61 6e 63 rent.. $branc
1290: 68 72 65 76 20 73 65 74 70 61 72 65 6e 74 20 24 hrev setparent $
12a0: 72 65 76 0a 09 7d 0a 09 73 65 74 20 6d 79 62 72 rev..}..set mybr
12b0: 61 6e 63 68 65 73 20 20 20 20 20 20 20 7b 7d 0a anches {}.
12c0: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 63 68 69 .set mybranchchi
12d0: 6c 64 72 65 6e 20 7b 7d 0a 09 72 65 74 75 72 6e ldren {}..return
12e0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
12f0: 6f 64 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e od removeallbran
1300: 63 68 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 ches {} {..forea
1310: 63 68 20 62 72 61 6e 63 68 20 24 6d 79 62 72 61 ch branch $mybra
1320: 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 24 62 72 nches {.. $br
1330: 61 6e 63 68 20 64 65 73 74 72 6f 79 0a 09 7d 0a anch destroy..}.
1340: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 20 .set mybranches
1350: 20 20 20 20 20 20 7b 7d 0a 09 73 65 74 20 6d 79 {}..set my
1360: 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b branchchildren {
1370: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
1380: 0a 20 20 20 20 23 20 54 61 67 20 6c 69 6e 6b 61 . # Tag linka
1390: 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ge _____________
13a0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 ____________..
13b0: 20 20 6d 65 74 68 6f 64 20 61 64 64 74 61 67 20 method addtag
13c0: 7b 74 61 67 7d 20 7b 0a 09 6c 61 70 70 65 6e 64 {tag} {..lappend
13d0: 20 6d 79 74 61 67 73 20 24 74 61 67 0a 09 72 65 mytags $tag..re
13e0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
13f0: 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 61 6c 6c method removeall
1400: 74 61 67 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 tags {} {..forea
1410: 63 68 20 74 61 67 20 24 6d 79 74 61 67 73 20 7b ch tag $mytags {
1420: 20 24 74 61 67 20 64 65 73 74 72 6f 79 20 7d 0a $tag destroy }.
1430: 09 73 65 74 20 6d 79 74 61 67 73 20 7b 7d 0a 09 .set mytags {}..
1440: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
1450: 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65 74 61 67 method movetag
1460: 73 74 6f 20 7b 72 65 76 7d 20 7b 0a 09 73 65 74 sto {rev} {..set
1470: 20 72 65 76 6c 6f 64 20 5b 24 72 65 76 20 6c 6f revlod [$rev lo
1480: 64 5d 0a 09 66 6f 72 65 61 63 68 20 74 61 67 20 d]..foreach tag
1490: 24 6d 79 74 61 67 73 20 7b 0a 09 20 20 20 20 24 $mytags {.. $
14a0: 72 65 76 20 61 64 64 74 61 67 20 24 74 61 67 0a rev addtag $tag.
14b0: 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61 67 . $tag settag
14c0: 72 65 76 20 24 72 65 76 0a 09 20 20 20 20 24 74 rev $rev.. $t
14d0: 61 67 20 73 65 74 6c 6f 64 20 24 72 65 76 6c 6f ag setlod $revlo
14e0: 64 0a 09 7d 0a 09 73 65 74 20 6d 79 74 61 67 73 d..}..set mytags
14f0: 20 7b 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 {}..return.
1500: 7d 0a 0a 20 20 20 20 23 20 67 65 6e 65 72 61 6c }.. # general
1510: 20 73 79 6d 62 6f 6c 20 6f 70 65 72 61 74 69 6f symbol operatio
1520: 6e 73 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a ns ___________..
1530: 20 20 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65 73 method moves
1540: 79 6d 62 6f 6c 73 74 6f 20 7b 72 65 76 7d 20 7b ymbolsto {rev} {
1550: 0a 09 23 20 4d 6f 76 65 20 74 68 65 20 74 61 67 ..# Move the tag
1560: 73 20 61 6e 64 20 62 72 61 6e 63 68 65 73 20 61 s and branches a
1570: 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 ttached to this
1580: 72 65 76 69 73 69 6f 6e 20 74 6f 20 74 68 65 0a revision to the.
1590: 09 23 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61 .# destination a
15a0: 6e 64 20 66 69 78 20 61 6c 6c 20 70 6f 69 6e 74 nd fix all point
15b0: 65 72 73 2e 0a 0a 09 24 73 65 6c 66 20 6d 6f 76 ers....$self mov
15c0: 65 74 61 67 73 74 6f 20 20 20 20 20 24 72 65 76 etagsto $rev
15d0: 0a 09 24 73 65 6c 66 20 6d 6f 76 65 62 72 61 6e ..$self movebran
15e0: 63 68 65 73 74 6f 20 24 72 65 76 0a 09 72 65 74 chesto $rev..ret
15f0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 urn. }.. #
1600: 20 44 65 72 69 76 65 64 20 73 74 75 66 66 20 5f Derived stuff _
1610: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ________________
1620: 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 ______.. meth
1630: 6f 64 20 64 65 74 65 72 6d 69 6e 65 6f 70 65 72 od determineoper
1640: 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 4c 6f ation {} {..# Lo
1650: 6f 6b 20 61 74 20 74 68 65 20 73 74 61 74 65 20 ok at the state
1660: 6f 66 20 62 6f 74 68 20 74 68 69 73 20 72 65 76 of both this rev
1670: 69 73 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 ision and its pa
1680: 72 65 6e 74 20 74 6f 0a 09 23 20 64 65 74 65 72 rent to..# deter
1690: 6d 69 6e 65 20 74 68 65 20 74 79 70 65 20 6f 70 mine the type op
16a0: 66 20 6f 70 65 72 61 74 69 6f 6e 20 77 68 69 63 f operation whic
16b0: 68 20 77 61 73 20 70 65 72 66 6f 72 6d 65 64 20 h was performed
16c0: 28 61 64 64 2c 0a 09 23 20 6d 6f 64 69 66 79 2c (add,..# modify,
16d0: 20 64 65 6c 65 74 65 2c 20 6e 6f 6e 65 29 2e 0a delete, none)..
16e0: 09 23 0a 09 23 20 54 68 65 20 69 6d 70 6f 72 74 .#..# The import
16f0: 61 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 ant information
1700: 69 73 20 64 65 61 64 20 76 73 20 6e 6f 74 2d 64 is dead vs not-d
1710: 65 61 64 20 66 6f 72 20 62 6f 74 68 2c 0a 09 23 ead for both,..#
1720: 20 67 69 76 69 6e 67 20 72 69 73 65 20 74 6f 20 giving rise to
1730: 66 6f 75 72 20 70 6f 73 73 69 62 6c 65 20 74 79 four possible ty
1740: 70 65 73 2e 0a 0a 09 73 65 74 20 73 64 65 61 64 pes....set sdead
1750: 20 5b 65 78 70 72 20 7b 24 6d 79 73 74 61 74 65 [expr {$mystate
1760: 20 65 71 20 22 64 65 61 64 22 7d 5d 0a 09 73 65 eq "dead"}]..se
1770: 74 20 70 64 65 61 64 20 5b 65 78 70 72 20 7b 24 t pdead [expr {$
1780: 6d 79 70 61 72 65 6e 74 20 65 71 20 22 22 20 7c myparent eq "" |
1790: 7c 20 5b 24 6d 79 70 61 72 65 6e 74 20 73 74 61 | [$myparent sta
17a0: 74 65 5d 20 65 71 20 22 64 65 61 64 22 7d 5d 0a te] eq "dead"}].
17b0: 0a 09 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f ..set myoperatio
17c0: 6e 20 24 6d 79 6f 70 73 74 61 74 65 28 5b 6c 69 n $myopstate([li
17d0: 73 74 20 24 70 64 65 61 64 20 24 73 64 65 61 64 st $pdead $sdead
17e0: 5d 29 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d ])..return. }
17f0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6f 70 65 .. method ope
1800: 72 61 74 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75 ration {} { retu
1810: 72 6e 20 24 6d 79 6f 70 65 72 61 74 69 6f 6e 20 rn $myoperation
1820: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65 74 }. method ret
1830: 79 70 65 20 7b 78 7d 20 7b 20 73 65 74 20 6d 79 ype {x} { set my
1840: 6f 70 65 72 61 74 69 6f 6e 20 24 78 20 3b 20 72 operation $x ; r
1850: 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 eturn }.. met
1860: 68 6f 64 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 hod isondefaultb
1870: 72 61 6e 63 68 20 7b 7d 20 7b 20 73 65 74 20 6d ranch {} { set m
1880: 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e yisondefaultbran
1890: 63 68 20 31 20 3b 20 72 65 74 75 72 6e 20 7d 0a ch 1 ; return }.
18a0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 64 . method setd
18b0: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c efaultbranchchil
18c0: 64 20 20 7b 72 65 76 7d 20 7b 20 73 65 74 20 6d d {rev} { set m
18d0: 79 64 62 63 68 69 6c 64 20 24 72 65 76 20 3b 20 ydbchild $rev ;
18e0: 72 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74 return }. met
18f0: 68 6f 64 20 73 65 74 64 65 66 61 75 6c 74 62 72 hod setdefaultbr
1900: 61 6e 63 68 70 61 72 65 6e 74 20 7b 72 65 76 7d anchparent {rev}
1910: 20 7b 0a 09 73 65 74 20 6d 79 64 62 70 61 72 65 {..set mydbpare
1920: 6e 74 20 24 72 65 76 0a 0a 09 23 20 52 65 74 79 nt $rev...# Rety
1930: 70 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 pe the revision
1940: 28 6d 61 79 20 63 68 61 6e 67 65 20 66 72 6f 6d (may change from
1950: 20 27 61 64 64 27 20 74 6f 20 27 63 68 61 6e 67 'add' to 'chang
1960: 65 27 29 2e 0a 0a 09 73 65 74 20 73 64 65 61 64 e')....set sdead
1970: 20 5b 65 78 70 72 20 7b 24 6d 79 6f 70 65 72 61 [expr {$myopera
1980: 74 69 6f 6e 20 20 20 20 20 6e 65 20 22 63 68 61 tion ne "cha
1990: 6e 67 65 22 7d 5d 0a 09 73 65 74 20 70 64 65 61 nge"}]..set pdea
19a0: 64 20 5b 65 78 70 72 20 7b 5b 24 72 65 76 20 6f d [expr {[$rev o
19b0: 70 65 72 61 74 69 6f 6e 5d 20 6e 65 20 22 63 68 peration] ne "ch
19c0: 61 6e 67 65 22 7d 5d 0a 09 73 65 74 20 6d 79 6f ange"}]..set myo
19d0: 70 65 72 61 74 69 6f 6e 20 24 6d 79 6f 70 73 74 peration $myopst
19e0: 61 74 65 28 5b 6c 69 73 74 20 24 70 64 65 61 64 ate([list $pdead
19f0: 20 24 73 64 65 61 64 5d 29 0a 09 72 65 74 75 72 $sdead])..retur
1a00: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 n. }.. # #
1a10: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
1a20: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
1a30: 23 23 23 23 0a 20 20 20 20 23 23 20 54 79 70 65 ####. ## Type
1a40: 20 41 50 49 0a 0a 20 20 20 20 74 79 70 65 6d 65 API.. typeme
1a50: 74 68 6f 64 20 69 73 74 72 75 6e 6b 72 65 76 6e thod istrunkrevn
1a60: 72 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 72 65 74 r {revnr} {..ret
1a70: 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e urn [expr {[llen
1a80: 67 74 68 20 5b 73 70 6c 69 74 20 24 72 65 76 6e gth [split $revn
1a90: 72 20 2e 5d 5d 20 3d 3d 20 32 7d 5d 0a 20 20 20 r .]] == 2}].
1aa0: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 }.. typemeth
1ab0: 6f 64 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72 od isbranchrevnr
1ac0: 20 7b 72 65 76 6e 72 20 5f 20 62 76 7d 20 7b 0a {revnr _ bv} {.
1ad0: 09 69 66 20 7b 5b 72 65 67 65 78 70 20 24 6d 79 .if {[regexp $my
1ae0: 62 72 61 6e 63 68 70 61 74 74 65 72 6e 20 24 72 branchpattern $r
1af0: 65 76 6e 72 20 2d 3e 20 68 65 61 64 20 74 61 69 evnr -> head tai
1b00: 6c 5d 7d 20 7b 0a 09 20 20 20 20 75 70 76 61 72 l]} {.. upvar
1b10: 20 31 20 24 62 76 20 62 72 61 6e 63 68 6e 72 0a 1 $bv branchnr.
1b20: 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 68 6e . set branchn
1b30: 72 20 24 7b 68 65 61 64 7d 24 74 61 69 6c 0a 09 r ${head}$tail..
1b40: 20 20 20 20 72 65 74 75 72 6e 20 31 0a 09 7d 0a return 1..}.
1b50: 09 72 65 74 75 72 6e 20 30 0a 20 20 20 20 7d 0a .return 0. }.
1b60: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
1b70: 32 62 72 61 6e 63 68 6e 72 20 7b 72 65 76 6e 72 2branchnr {revnr
1b80: 7d 20 7b 0a 09 23 20 49 6e 70 75 74 20 69 73 20 } {..# Input is
1b90: 61 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f a branch revisio
1ba0: 6e 20 6e 75 6d 62 65 72 2c 20 69 2e 65 2e 20 61 n number, i.e. a
1bb0: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 revision number
1bc0: 0a 09 23 20 77 69 74 68 20 61 6e 20 65 76 65 6e ..# with an even
1bd0: 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6d 70 6f number of compo
1be0: 6e 65 6e 74 73 3b 20 66 6f 72 20 65 78 61 6d 70 nents; for examp
1bf0: 6c 65 20 27 32 2e 39 2e 32 2e 31 27 0a 09 23 20 le '2.9.2.1'..#
1c00: 28 6e 65 76 65 72 20 27 32 2e 39 2e 32 27 20 6e (never '2.9.2' n
1c10: 6f 72 20 27 32 2e 39 2e 30 2e 32 27 29 2e 20 20 or '2.9.0.2').
1c20: 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 The return value
1c30: 20 69 73 20 74 68 65 0a 09 23 20 62 72 61 6e 63 is the..# branc
1c40: 68 20 6e 75 6d 62 65 72 20 28 66 6f 72 20 65 78 h number (for ex
1c50: 61 6d 70 6c 65 2c 20 27 32 2e 39 2e 32 27 29 2e ample, '2.9.2').
1c60: 20 20 46 6f 72 20 74 72 75 6e 6b 20 72 65 76 69 For trunk revi
1c70: 73 69 6f 6e 73 2c 0a 09 23 20 6c 69 6b 65 20 27 sions,..# like '
1c80: 33 2e 34 27 2c 20 77 65 20 72 65 74 75 72 6e 20 3.4', we return
1c90: 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67 the empty string
1ca0: 2e 0a 0a 09 69 66 20 7b 5b 24 74 79 70 65 20 69 ....if {[$type i
1cb0: 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 strunkrevnr $rev
1cc0: 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75 nr]} {.. retu
1cd0: 72 6e 20 22 22 0a 09 7d 0a 09 72 65 74 75 72 6e rn ""..}..return
1ce0: 20 5b 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 5b [join [lrange [
1cf0: 73 70 6c 69 74 20 24 72 65 76 6e 72 20 2e 5d 20 split $revnr .]
1d00: 30 20 65 6e 64 2d 31 5d 20 2e 5d 0a 20 20 20 20 0 end-1] .].
1d10: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }.. typemetho
1d20: 64 20 32 62 72 61 6e 63 68 70 61 72 65 6e 74 72 d 2branchparentr
1d30: 65 76 6e 72 20 7b 62 72 61 6e 63 68 6e 72 7d 20 evnr {branchnr}
1d40: 7b 0a 09 23 20 43 68 6f 70 20 74 68 65 20 6c 61 {..# Chop the la
1d50: 73 74 20 73 65 67 6d 65 6e 74 20 6f 66 66 0a 09 st segment off..
1d60: 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b 6c 72 return [join [lr
1d70: 61 6e 67 65 20 5b 73 70 6c 69 74 20 24 62 72 61 ange [split $bra
1d80: 6e 63 68 6e 72 20 2e 5d 20 30 20 65 6e 64 2d 31 nchnr .] 0 end-1
1d90: 5d 20 2e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ] .]. }..
1da0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
1db0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
1dc0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 #######. ## S
1dd0: 74 61 74 65 0a 0a 20 20 20 20 74 79 70 65 76 61 tate.. typeva
1de0: 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 70 riable mybranchp
1df0: 61 74 74 65 72 6e 20 7b 5e 28 28 3f 3a 5c 64 2b attern {^((?:\d+
1e00: 5c 2e 5c 64 2b 5c 2e 29 2b 29 28 3f 3a 30 5c 2e \.\d+\.)+)(?:0\.
1e10: 29 3f 28 5c 64 2b 29 24 7d 0a 20 20 20 20 23 20 )?(\d+)$}. #
1e20: 46 69 72 73 74 20 61 20 6e 6f 6e 7a 65 72 6f 20 First a nonzero
1e30: 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 64 even number of d
1e40: 69 67 69 74 20 67 72 6f 75 70 73 20 77 69 74 68 igit groups with
1e50: 20 74 72 61 69 6c 69 6e 67 20 64 6f 74 0a 20 20 trailing dot.
1e60: 20 20 23 20 43 56 53 20 74 68 65 6e 20 73 74 69 # CVS then sti
1e70: 63 6b 73 20 61 6e 20 65 78 74 72 61 20 30 20 69 cks an extra 0 i
1e80: 6e 20 68 65 72 65 3b 20 52 43 53 20 64 6f 65 73 n here; RCS does
1e90: 20 6e 6f 74 2e 0a 20 20 20 20 23 20 41 6e 64 20 not.. # And
1ea0: 74 68 65 20 6c 61 73 74 20 64 69 67 69 74 20 67 the last digit g
1eb0: 72 6f 75 70 2e 0a 0a 20 20 20 20 76 61 72 69 61 roup... varia
1ec0: 62 6c 65 20 6d 79 72 65 76 6e 72 20 20 20 20 20 ble myrevnr
1ed0: 7b 7d 20 3b 20 23 20 52 65 76 69 73 69 6f 6e 20 {} ; # Revision
1ee0: 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72 65 number of the re
1ef0: 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69 vision.. vari
1f00: 61 62 6c 65 20 6d 79 64 61 74 65 20 20 20 20 20 able mydate
1f10: 20 7b 7d 20 3b 20 23 20 54 69 6d 65 73 74 61 6d {} ; # Timestam
1f20: 70 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f p of the revisio
1f30: 6e 2c 20 73 65 63 6f 6e 64 73 20 73 69 6e 63 65 n, seconds since
1f40: 20 65 70 6f 63 68 0a 20 20 20 20 76 61 72 69 61 epoch. varia
1f50: 62 6c 65 20 6d 79 6f 72 69 67 64 61 74 65 20 20 ble myorigdate
1f60: 7b 7d 20 3b 20 23 20 4f 72 69 67 69 6e 61 6c 20 {} ; # Original
1f70: 75 6e 6d 6f 64 69 66 69 65 64 20 74 69 6d 65 73 unmodified times
1f80: 74 61 6d 70 2e 0a 20 20 20 20 76 61 72 69 61 62 tamp.. variab
1f90: 6c 65 20 6d 79 73 74 61 74 65 20 20 20 20 20 7b le mystate {
1fa0: 7d 20 3b 20 23 20 53 74 61 74 65 20 6f 66 20 74 } ; # State of t
1fb0: 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 he revision..
1fc0: 20 76 61 72 69 61 62 6c 65 20 6d 79 66 69 6c 65 variable myfile
1fd0: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 {} ; # Ref
1fe0: 20 74 6f 20 74 68 65 20 66 69 6c 65 20 6f 62 6a to the file obj
1ff0: 65 63 74 20 74 68 65 20 72 65 76 69 73 69 6f 6e ect the revision
2000: 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 belongs to..
2010: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 65 78 74 variable mytext
2020: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 61 6e {} ; # Ran
2030: 67 65 20 6f 66 20 74 68 65 20 28 64 65 6c 74 61 ge of the (delta
2040: 29 20 74 65 78 74 20 66 6f 72 20 74 68 69 73 20 ) text for this
2050: 72 65 76 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 revision in the
2060: 66 69 6c 65 2e 0a 20 20 20 20 76 61 72 69 61 62 file.. variab
2070: 6c 65 20 6d 79 6d 65 74 61 69 64 20 20 20 20 7b le mymetaid {
2080: 7d 20 3b 20 23 20 49 64 20 6f 66 20 74 68 65 20 } ; # Id of the
2090: 6d 65 74 61 20 64 61 74 61 20 67 72 6f 75 70 20 meta data group
20a0: 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 09 09 the revision....
20b0: 20 20 20 20 20 20 23 20 62 65 6c 6f 6e 67 73 20 # belongs
20c0: 74 6f 2e 20 54 68 69 73 20 69 73 20 6c 61 74 65 to. This is late
20d0: 72 20 75 73 65 64 20 74 6f 20 70 75 74 0a 09 09 r used to put...
20e0: 09 20 20 20 20 20 20 23 20 74 68 65 20 66 69 6c . # the fil
20f0: 65 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 74 6f e revisions into
2100: 20 70 72 65 6c 69 6d 69 6e 61 72 79 0a 09 09 09 preliminary....
2110: 20 20 20 20 20 20 23 20 63 68 61 6e 67 65 73 65 # changese
2120: 74 73 20 28 61 6b 61 20 70 72 6f 6a 65 63 74 20 ts (aka project
2130: 72 65 76 69 73 69 6f 6e 73 29 2e 0a 09 09 09 20 revisions).....
2140: 20 20 20 20 20 23 20 54 68 69 73 20 69 64 20 65 # This id e
2150: 6e 63 6f 64 65 73 20 34 20 70 69 65 63 65 73 20 ncodes 4 pieces
2160: 6f 66 20 64 61 74 61 2c 0a 09 09 09 20 20 20 20 of data,....
2170: 20 20 23 20 6e 61 6d 65 6c 79 3a 20 74 68 65 20 # namely: the
2180: 70 72 6f 6a 65 63 74 20 61 6e 64 20 62 72 61 6e project and bran
2190: 63 68 20 74 68 65 0a 09 09 09 20 20 20 20 20 20 ch the....
21a0: 23 20 72 65 76 69 73 69 6f 6e 20 77 61 73 20 63 # revision was c
21b0: 6f 6d 6d 69 74 74 65 64 20 74 6f 2c 20 74 68 65 ommitted to, the
21c0: 20 61 75 74 68 6f 72 0a 09 09 09 20 20 20 20 20 author....
21d0: 20 23 20 77 68 6f 20 64 69 64 20 74 68 65 20 63 # who did the c
21e0: 6f 6d 6d 69 74 2c 20 61 6e 64 20 74 68 65 20 6d ommit, and the m
21f0: 65 73 73 61 67 65 0a 09 09 09 20 20 20 20 20 20 essage....
2200: 23 20 75 73 65 64 2e 0a 20 20 20 20 76 61 72 69 # used.. vari
2210: 61 62 6c 65 20 6d 79 6c 6f 64 20 20 20 20 20 20 able mylod
2220: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 {} ; # Referenc
2230: 65 20 74 6f 20 74 68 65 20 6c 69 6e 65 2d 6f 66 e to the line-of
2240: 2d 64 65 76 65 6c 6f 70 6d 65 6e 74 0a 09 09 09 -development....
2250: 20 20 20 20 20 20 23 20 6f 62 6a 65 63 74 20 74 # object t
2260: 68 65 20 72 65 76 69 73 69 6f 6e 20 62 65 6c 6f he revision belo
2270: 6e 67 73 20 74 6f 2e 20 41 6e 0a 09 09 09 20 20 ngs to. An....
2280: 20 20 20 20 23 20 61 6c 74 65 72 6e 61 74 69 76 # alternativ
2290: 65 20 69 64 69 6f 6d 20 77 6f 75 6c 64 20 62 65 e idiom would be
22a0: 20 74 6f 20 63 61 6c 6c 20 69 74 0a 09 09 09 20 to call it....
22b0: 20 20 20 20 20 23 20 74 68 65 20 62 72 61 6e 63 # the branc
22c0: 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 69 h the revision i
22d0: 73 20 6f 6e 2e 20 54 68 69 73 0a 09 09 09 20 20 s on. This....
22e0: 20 20 20 20 23 20 72 65 66 65 72 65 6e 63 65 20 # reference
22f0: 69 73 20 74 6f 20 61 20 70 72 6f 6a 65 63 74 2d is to a project-
2300: 6c 65 76 65 6c 20 6f 62 6a 65 63 74 0a 09 09 09 level object....
2310: 20 20 20 20 20 20 23 20 28 73 79 6d 62 6f 6c 20 # (symbol
2320: 6f 72 20 74 72 75 6e 6b 29 2e 0a 0a 20 20 20 20 or trunk)...
2330: 23 20 42 61 73 69 63 20 70 61 72 65 6e 74 2f 63 # Basic parent/c
2340: 68 69 6c 64 20 6c 69 6e 6b 61 67 65 20 28 6c 69 hild linkage (li
2350: 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 nes of developme
2360: 6e 74 29 0a 0a 20 20 20 20 76 61 72 69 61 62 6c nt).. variabl
2370: 65 20 6d 79 70 61 72 65 6e 74 20 7b 7d 20 3b 20 e myparent {} ;
2380: 23 20 52 65 66 20 74 6f 20 70 61 72 65 6e 74 20 # Ref to parent
2390: 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e revision object.
23a0: 20 4c 69 6e 6b 20 72 65 71 75 69 72 65 64 20 62 Link required b
23b0: 65 63 61 75 73 65 20 6f 66 0a 20 20 20 20 23 20 ecause of. #
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23d0: 20 20 20 3b 20 23 20 27 63 76 73 61 64 6d 69 6e ; # 'cvsadmin
23e0: 20 2d 6f 27 2c 20 77 68 69 63 68 20 63 61 6e 20 -o', which can
23f0: 63 72 65 61 74 65 20 61 72 62 69 74 72 61 72 79 create arbitrary
2400: 20 67 61 70 73 20 69 6e 20 74 68 65 0a 20 20 20 gaps in the.
2410: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 #
2420: 20 20 20 20 20 20 3b 20 23 20 6e 75 6d 62 65 72 ; # number
2430: 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 54 68 ing sequence. Th
2440: 69 73 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d is is in the sam
2450: 65 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f e line of develo
2460: 70 6d 65 6e 74 0a 20 20 20 20 23 20 20 20 20 20 pment. #
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ;
2480: 20 23 20 4e 6f 74 65 3a 20 46 6f 72 20 74 68 65 # Note: For the
2490: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 first revision
24a0: 6f 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65 20 on a branch the
24b0: 72 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 20 revision. #
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24d0: 20 20 3b 20 23 20 69 74 20 77 61 73 20 73 70 61 ; # it was spa
24e0: 77 6e 65 64 20 66 72 6f 6d 20 69 73 20 74 68 65 wned from is the
24f0: 20 70 61 72 65 6e 74 2e 20 4f 6e 6c 79 20 74 68 parent. Only th
2500: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 0a e root revision.
2510: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 #
2520: 20 20 20 20 20 20 20 20 20 3b 20 23 20 6f 66 20 ; # of
2530: 6d 79 66 69 6c 65 27 73 20 72 65 76 69 73 69 6f myfile's revisio
2540: 6e 20 74 72 65 65 20 68 61 73 20 6e 6f 74 68 69 n tree has nothi
2550: 6e 67 20 73 65 74 20 68 65 72 65 2e 0a 20 20 20 ng set here..
2560: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 #
2570: 20 20 20 20 20 20 3b 20 23 0a 0a 20 20 20 20 76 ; #.. v
2580: 61 72 69 61 62 6c 65 20 6d 79 63 68 69 6c 64 20 ariable mychild
2590: 20 7b 7d 20 3b 20 23 20 52 65 66 20 74 6f 20 74 {} ; # Ref to t
25a0: 68 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 he primary child
25b0: 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 revision object
25c0: 2c 20 69 2e 65 2e 20 74 68 65 20 6e 65 78 74 0a , i.e. the next.
25d0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 #
25e0: 20 20 20 20 20 20 20 20 20 3b 20 23 20 72 65 76 ; # rev
25f0: 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 73 61 6d ision in the sam
2600: 65 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f e line of develo
2610: 70 6d 65 6e 74 2e 0a 0a 20 20 20 20 23 20 42 72 pment... # Br
2620: 61 6e 63 68 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f anch linkage ___
2630: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ________________
2640: 5f 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 _.. variable
2650: 6d 79 62 72 61 6e 63 68 65 73 20 20 20 20 20 7b mybranches {
2660: 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 74 68 } ; # List of th
2670: 65 20 62 72 61 6e 63 68 65 73 20 28 6f 62 6a 73 e branches (objs
2680: 29 20 73 70 61 77 6e 65 64 20 62 79 20 74 68 69 ) spawned by thi
2690: 73 20 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 s revision..
26a0: 76 61 72 69 61 62 6c 65 20 6d 79 70 61 72 65 6e variable myparen
26b0: 74 62 72 61 6e 63 68 20 7b 7d 20 3b 20 23 20 46 tbranch {} ; # F
26c0: 6f 72 20 74 68 65 20 66 69 72 73 74 20 72 65 76 or the first rev
26d0: 69 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 ision on a branc
26e0: 68 20 74 68 65 20 72 65 6c 65 76 61 6e 74 0a 20 h the relevant.
26f0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 #
2700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 ;
2710: 23 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 2e # branch object.
2720: 20 54 68 69 73 20 61 6c 73 6f 20 61 6c 6c 6f 77 This also allow
2730: 73 20 75 73 20 74 6f 20 64 65 74 65 72 6d 69 6e s us to determin
2740: 65 20 69 66 0a 20 20 20 20 23 20 20 20 20 20 20 e if. #
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2760: 20 20 20 20 3b 20 23 20 6d 79 70 61 72 65 6e 74 ; # myparent
2770: 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20 is in the same
2780: 4c 4f 44 2c 20 6f 72 20 74 68 65 20 72 65 76 69 LOD, or the revi
2790: 73 69 6f 6e 20 74 68 65 0a 20 20 20 20 23 20 20 sion the. #
27a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27b0: 20 20 20 20 20 20 20 20 3b 20 23 20 62 72 61 6e ; # bran
27c0: 63 68 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 2e ch spawned from.
27d0: 0a 0a 20 20 20 20 23 20 4c 69 73 74 20 6f 66 20 .. # List of
27e0: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a the revision obj
27f0: 65 63 74 73 20 6f 66 20 74 68 65 20 66 69 72 73 ects of the firs
2800: 74 20 63 6f 6d 6d 69 74 73 20 6f 6e 20 61 6e 79 t commits on any
2810: 0a 20 20 20 20 23 20 62 72 61 6e 63 68 65 73 20 . # branches
2820: 73 70 61 77 6e 65 64 20 62 79 20 74 68 69 73 20 spawned by this
2830: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 77 68 69 63 revision on whic
2840: 68 20 63 6f 6d 6d 69 74 73 20 6f 63 63 75 72 72 h commits occurr
2850: 65 64 2e 0a 20 20 20 20 23 20 54 68 69 73 20 64 ed.. # This d
2860: 65 70 65 6e 64 65 6e 63 79 20 69 73 20 6b 65 70 ependency is kep
2870: 74 20 65 78 70 6c 69 63 69 74 6c 79 20 62 65 63 t explicitly bec
2880: 61 75 73 65 20 6f 74 68 65 72 77 69 73 65 20 61 ause otherwise a
2890: 0a 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2d . # revision-
28a0: 6f 6e 6c 79 20 74 6f 70 6f 6c 6f 67 69 63 61 6c only topological
28b0: 20 73 6f 72 74 20 77 6f 75 6c 64 20 6d 69 73 73 sort would miss
28c0: 20 74 68 65 20 64 65 70 65 6e 64 65 6e 63 79 20 the dependency
28d0: 74 68 61 74 0a 20 20 20 20 23 20 65 78 69 73 74 that. # exist
28e0: 73 20 76 69 61 20 2d 3e 20 6d 79 62 72 61 6e 63 s via -> mybranc
28f0: 68 65 73 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 hes... variab
2900: 6c 65 20 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 le mybranchchild
2910: 72 65 6e 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 ren {} ; # List
2920: 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 of the revisions
2930: 20 28 6f 62 6a 73 29 20 77 68 69 63 68 20 61 72 (objs) which ar
2940: 65 20 74 68 65 20 66 69 72 73 74 0a 20 20 20 20 e the first.
2950: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 #
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; #
2970: 20 63 6f 6d 6d 69 74 73 20 6f 6e 20 61 6e 79 20 commits on any
2980: 6f 66 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 of the branches
2990: 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 74 68 69 spawned from thi
29a0: 73 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 s. #
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29c0: 20 20 20 3b 20 23 20 72 65 76 69 73 69 6f 6e 2e ; # revision.
29d0: 20 54 68 65 20 64 65 70 65 6e 64 65 6e 63 79 20 The dependency
29e0: 69 73 20 6b 65 70 74 20 65 78 70 6c 69 63 69 74 is kept explicit
29f0: 6c 79 20 74 6f 0a 20 20 20 20 23 20 20 20 20 20 ly to. #
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a10: 20 20 20 20 20 20 20 3b 20 23 20 65 6e 73 75 72 ; # ensur
2a20: 65 20 74 68 61 74 20 61 20 72 65 76 69 73 69 6f e that a revisio
2a30: 6e 2d 6f 6e 6c 79 20 74 6f 70 6f 6c 6f 67 69 63 n-only topologic
2a40: 61 6c 20 73 6f 72 74 20 77 69 6c 6c 0a 20 20 20 al sort will.
2a50: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 #
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 ;
2a70: 23 20 6e 6f 74 20 6d 69 73 73 20 69 74 2c 20 61 # not miss it, a
2a80: 73 20 69 74 20 6f 74 68 65 72 77 69 73 65 20 65 s it otherwise e
2a90: 78 69 73 74 73 20 6f 6e 6c 79 20 76 69 61 0a 20 xists only via.
2aa0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 #
2ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ac0: 3b 20 23 20 6d 79 62 72 61 6e 63 68 65 73 2e 0a ; # mybranches..
2ad0: 0a 20 20 20 20 23 20 54 61 67 20 6c 69 6e 6b 61 . # Tag linka
2ae0: 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ge _____________
2af0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 ___________..
2b00: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 61 67 73 variable mytags
2b10: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 {} ; # List of
2b20: 74 61 67 73 20 28 6f 62 6a 73 29 20 61 73 73 6f tags (objs) asso
2b30: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 ciated with this
2b40: 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 20 20 20 20 revision...
2b50: 23 20 4d 6f 72 65 20 64 65 72 69 76 65 64 20 64 # More derived d
2b60: 61 74 61 0a 0a 20 20 20 20 76 61 72 69 61 62 6c ata.. variabl
2b70: 65 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20 20 20 e myoperation
2b80: 20 20 20 20 20 7b 7d 20 3b 20 23 20 4f 6e 65 20 {} ; # One
2b90: 6f 66 20 27 61 64 64 27 2c 20 27 63 68 61 6e 67 of 'add', 'chang
2ba0: 65 27 2c 20 27 64 65 6c 65 74 65 27 2c 20 6f 72 e', 'delete', or
2bb0: 0a 09 09 09 20 20 20 20 20 20 20 20 20 20 20 20 ....
2bc0: 20 23 20 27 6e 6f 74 68 69 6e 67 27 2e 20 44 65 # 'nothing'. De
2bd0: 72 69 76 65 64 20 66 72 6f 6d 20 6f 75 72 20 61 rived from our a
2be0: 6e 64 0a 09 09 09 20 20 20 20 20 20 20 20 20 20 nd....
2bf0: 20 20 20 23 20 69 74 73 20 70 61 72 65 6e 74 27 # its parent'
2c00: 73 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72 s state.. var
2c10: 69 61 62 6c 65 20 6d 79 69 73 6f 6e 64 65 66 61 iable myisondefa
2c20: 75 6c 74 62 72 61 6e 63 68 20 30 20 3b 20 23 20 ultbranch 0 ; #
2c30: 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2c 20 73 65 Boolean flag, se
2c40: 74 20 69 66 20 74 68 65 0a 09 09 09 09 20 20 20 t if the.....
2c50: 20 20 23 20 72 65 76 69 73 69 6f 6e 20 69 73 20 # revision is
2c60: 6f 6e 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b on the non-trunk
2c70: 0a 09 09 09 09 20 20 20 20 20 23 20 64 65 66 61 ..... # defa
2c80: 75 6c 74 20 62 72 61 6e 63 68 2c 20 61 6b 61 20 ult branch, aka
2c90: 76 65 6e 64 6f 72 0a 09 09 09 09 20 20 20 20 20 vendor.....
2ca0: 23 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 # branch.. va
2cb0: 72 69 61 62 6c 65 20 6d 79 64 62 70 61 72 65 6e riable mydbparen
2cc0: 74 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 t {} ; #
2cd0: 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 Reference to th
2ce0: 65 20 6c 61 73 74 20 72 65 76 69 73 69 6f 6e 0a e last revision.
2cf0: 09 09 09 09 20 20 20 20 20 23 20 6f 6e 20 74 68 .... # on th
2d00: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 e vendor branch
2d10: 69 66 20 74 68 69 73 20 69 73 0a 09 09 09 09 20 if this is.....
2d20: 20 20 20 20 23 20 74 68 65 20 70 72 69 6d 61 72 # the primar
2d30: 79 20 63 68 69 6c 64 20 6f 66 20 74 68 65 0a 09 y child of the..
2d40: 09 09 09 20 20 20 20 20 23 20 72 65 67 75 6c 61 ... # regula
2d50: 72 20 72 6f 6f 74 2e 0a 20 20 20 20 76 61 72 69 r root.. vari
2d60: 61 62 6c 65 20 6d 79 64 62 63 68 69 6c 64 20 20 able mydbchild
2d70: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 {} ; # R
2d80: 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 eference to the
2d90: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 09 primary child...
2da0: 09 09 20 20 20 20 20 23 20 6f 66 20 74 68 65 20 .. # of the
2db0: 72 65 67 75 6c 61 72 20 72 6f 6f 74 20 69 66 20 regular root if
2dc0: 74 68 69 73 20 69 73 0a 09 09 09 09 20 20 20 20 this is.....
2dd0: 20 23 20 74 68 65 20 6c 61 73 74 20 72 65 76 69 # the last revi
2de0: 73 69 6f 6e 20 6f 6e 20 74 68 65 20 76 65 6e 64 sion on the vend
2df0: 6f 72 0a 09 09 09 09 20 20 20 20 20 23 20 62 72 or..... # br
2e00: 61 6e 63 68 2e 0a 0a 20 20 20 20 23 20 64 65 61 anch... # dea
2e10: 64 28 73 65 6c 66 29 20 78 20 64 65 61 64 28 70 d(self) x dead(p
2e20: 61 72 65 6e 74 29 20 2d 3e 20 6f 70 65 72 61 74 arent) -> operat
2e30: 69 6f 6e 0a 20 20 20 20 74 79 70 65 76 61 72 69 ion. typevari
2e40: 61 62 6c 65 20 6d 79 6f 70 73 74 61 74 65 20 2d able myopstate -
2e50: 61 72 72 61 79 20 7b 0a 09 7b 30 20 30 7d 20 63 array {..{0 0} c
2e60: 68 61 6e 67 65 0a 09 7b 30 20 31 7d 20 64 65 6c hange..{0 1} del
2e70: 65 74 65 0a 09 7b 31 20 30 7d 20 61 64 64 0a 09 ete..{1 0} add..
2e80: 7b 31 20 31 7d 20 6e 6f 74 68 69 6e 67 0a 20 20 {1 1} nothing.
2e90: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 }.. # # ##
2ea0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
2eb0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
2ec0: 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c . ## Internal
2ed0: 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 23 20 methods.. #
2ee0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
2ef0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
2f00: 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e #####. ## Con
2f10: 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 figuration..
2f20: 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69 pragma -hastypei
2f30: 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e nfo no ; # n
2f40: 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65 63 o type introspec
2f50: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 tion. pragma
2f60: 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20 20 -hasinfo
2f70: 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 63 no ; # no objec
2f80: 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a t introspection.
2f90: 20 20 20 20 70 72 61 67 6d 61 20 2d 73 69 6d 70 pragma -simp
2fa0: 6c 65 64 69 73 70 61 74 63 68 20 79 65 73 20 3b ledispatch yes ;
2fb0: 20 23 20 73 69 6d 70 6c 65 20 66 61 73 74 20 64 # simple fast d
2fc0: 69 73 70 61 74 63 68 0a 0a 20 20 20 20 23 20 23 ispatch.. # #
2fd0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
2fe0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
2ff0: 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 ####.}..namespac
3000: 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 e eval ::vc::fos
3010: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
3020: 3a 3a 66 69 6c 65 20 7b 0a 20 20 20 20 6e 61 6d ::file {. nam
3030: 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 72 65 espace export re
3040: 76 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 v. namespace
3050: 65 76 61 6c 20 72 65 76 20 7b 0a 09 6e 61 6d 65 eval rev {..name
3060: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
3070: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a c::tools::misc::
3080: 2a 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 *. }.}..# # #
3090: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
30a0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
30b0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
30c0: 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 61 64 ########.## Read
30d0: 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 y..package provi
30e0: 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 de vc::fossil::i
30f0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 mport::cvs::file
3100: 3a 3a 72 65 76 20 31 2e 30 0a 72 65 74 75 72 6e ::rev 1.0.return
3110: 0a .