Artifact 0ce8e923d5ed478fcf93b47b60ba9e3d3646caaf:
File
tools/lib/cvs_timeline.tcl
part of check-in
[10e3b3ed76]
- Fixed bug in the new code setting up the timeline, forgot to clean up loop state,
causing data from previous iterations to bleed into the current one, causing the
use of bogus data and ultimatively a bogus timeline. Note! Incidentially a bug
in the old code was fixed by the new one, the use of mismatching revisions and
commit messages. That caused the generation of extra changesets in the old code.
by
aku on
2007-09-17 04:14:18.
0000: 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d # --------------
0010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
0050: 23 20 52 65 70 6f 73 69 74 6f 72 79 20 6d 61 6e # Repository man
0060: 61 67 65 6d 65 6e 74 20 28 43 56 53 29 2c 20 74 agement (CVS), t
0070: 69 6d 65 6c 69 6e 65 20 6f 66 20 65 76 65 6e 74 imeline of event
0080: 73 2e 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d s...# ----------
0090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
00d0: 2d 2d 2d 0a 23 20 52 65 71 75 69 72 65 6d 65 6e ---.# Requiremen
00e0: 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 ts..package requ
00f0: 69 72 65 20 54 63 6c 20 38 2e 34 0a 0a 6e 61 6d ire Tcl 8.4..nam
0100: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 espace eval ::vc
0110: 3a 3a 63 76 73 3a 3a 77 73 3a 3a 74 69 6d 65 6c ::cvs::ws::timel
0120: 69 6e 65 20 7b 7d 0a 0a 23 20 2d 2d 2d 2d 2d 2d ine {}..# ------
0130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0170: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 41 50 49 0a 0a 23 -------.# API..#
0180: 20 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 74 69 vc::cvs::ws::ti
0190: 6d 65 6c 69 6e 65 3a 3a 61 64 64 20 20 20 20 20 meline::add
01a0: 64 61 74 65 20 66 69 6c 65 20 72 65 76 69 73 69 date file revisi
01b0: 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 20 61 75 74 on operation aut
01c0: 68 6f 72 20 63 6f 6d 6d 69 74 2d 6d 73 67 0a 23 hor commit-msg.#
01d0: 20 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a 74 69 vc::cvs::ws::ti
01e0: 6d 65 6c 69 6e 65 3a 3a 66 6f 72 65 61 63 68 20 meline::foreach
01f0: 64 61 74 65 20 66 69 6c 65 20 72 65 76 69 73 69 date file revisi
0200: 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 20 61 75 74 on operation aut
0210: 68 6f 72 20 63 6f 6d 6d 69 74 2d 6d 73 67 20 73 hor commit-msg s
0220: 63 72 69 70 74 0a 0a 23 20 41 64 64 20 65 6e 74 cript..# Add ent
0230: 72 69 65 73 20 74 6f 20 74 68 65 20 74 69 6d 65 ries to the time
0240: 6c 69 6e 65 2c 20 61 6e 64 20 69 74 65 72 61 74 line, and iterat
0250: 65 20 6f 76 65 72 20 74 68 65 20 74 69 6d 65 6c e over the timel
0260: 69 6e 65 20 69 6e 20 70 72 6f 70 65 72 20 6f 72 ine in proper or
0270: 64 65 72 2e 0a 0a 23 20 2d 2d 2d 2d 2d 2d 2d 2d der...# --------
0280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
02c0: 2d 2d 2d 2d 2d 0a 23 20 41 50 49 20 49 6d 70 6c -----.# API Impl
02d0: 65 6d 65 6e 74 61 74 69 6f 6e 0a 0a 70 72 6f 63 ementation..proc
02e0: 20 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a ::vc::cvs::ws::
02f0: 74 69 6d 65 6c 69 6e 65 3a 3a 61 64 64 20 7b 64 timeline::add {d
0300: 61 74 65 20 66 69 6c 65 20 72 65 76 69 73 69 6f ate file revisio
0310: 6e 20 6f 70 65 72 61 74 69 6f 6e 20 61 75 74 68 n operation auth
0320: 6f 72 20 63 6d 73 67 7d 20 7b 0a 20 20 20 20 76 or cmsg} {. v
0330: 61 72 69 61 62 6c 65 20 74 69 6d 65 6c 69 6e 65 ariable timeline
0340: 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 20 74 69 . lappend ti
0350: 6d 65 6c 69 6e 65 28 24 64 61 74 65 29 20 5b 6c meline($date) [l
0360: 69 73 74 20 24 66 69 6c 65 20 24 72 65 76 69 73 ist $file $revis
0370: 69 6f 6e 20 24 6f 70 65 72 61 74 69 6f 6e 20 24 ion $operation $
0380: 61 75 74 68 6f 72 20 24 63 6d 73 67 5d 0a 20 20 author $cmsg].
0390: 20 20 72 65 74 75 72 6e 0a 7d 0a 0a 70 72 6f 63 return.}..proc
03a0: 20 3a 3a 76 63 3a 3a 63 76 73 3a 3a 77 73 3a 3a ::vc::cvs::ws::
03b0: 74 69 6d 65 6c 69 6e 65 3a 3a 66 6f 72 65 61 63 timeline::foreac
03c0: 68 20 7b 64 76 20 66 76 20 72 76 20 6f 76 20 61 h {dv fv rv ov a
03d0: 76 20 63 76 20 73 63 72 69 70 74 7d 20 7b 0a 20 v cv script} {.
03e0: 20 20 20 75 70 76 61 72 20 31 20 24 64 76 20 64 upvar 1 $dv d
03f0: 61 74 65 20 24 66 76 20 66 69 6c 65 20 24 72 76 ate $fv file $rv
0400: 20 72 65 76 69 73 69 6f 6e 20 24 6f 76 20 6f 70 revision $ov op
0410: 65 72 61 74 69 6f 6e 20 24 61 76 20 61 75 74 68 eration $av auth
0420: 6f 72 20 24 63 76 20 63 6d 73 67 0a 20 20 20 20 or $cv cmsg.
0430: 76 61 72 69 61 62 6c 65 20 74 69 6d 65 6c 69 6e variable timelin
0440: 65 0a 0a 20 20 20 20 3a 3a 66 6f 72 65 61 63 68 e.. ::foreach
0450: 20 64 61 74 65 20 5b 6c 73 6f 72 74 20 2d 64 69 date [lsort -di
0460: 63 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 ct [array names
0470: 74 69 6d 65 6c 69 6e 65 5d 5d 20 7b 0a 09 23 20 timeline]] {..#
0480: 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 20 6f 70 file revision op
0490: 65 72 61 74 69 6f 6e 20 61 75 74 68 6f 72 20 63 eration author c
04a0: 6f 6d 6d 69 74 6d 73 67 0a 09 23 20 30 20 20 20 ommitmsg..# 0
04b0: 20 31 20 20 20 20 20 20 20 20 32 20 20 20 20 20 1 2
04c0: 20 20 20 20 33 20 20 20 20 20 20 34 2f 65 6e 64 3 4/end
04d0: 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 20 20 ..#
04e0: 20 20 62 20 20 20 20 20 20 20 20 20 63 20 20 20 b c
04f0: 20 20 20 61 0a 0a 09 73 65 74 20 65 6e 74 72 69 a...set entri
0500: 65 73 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 es [lsort -index
0510: 20 33 20 5c 0a 09 09 09 20 5b 6c 73 6f 72 74 20 3 \.... [lsort
0520: 2d 69 6e 64 65 78 20 32 20 5c 0a 09 09 09 20 20 -index 2 \....
0530: 20 20 20 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 [lsort -inde
0540: 78 20 65 6e 64 20 5c 0a 09 09 09 09 20 20 20 24 x end \..... $
0550: 74 69 6d 65 6c 69 6e 65 28 24 64 61 74 65 29 5d timeline($date)]
0560: 5d 5d 0a 09 23 70 75 74 73 20 5b 6a 6f 69 6e 20 ]]..#puts [join
0570: 24 65 6e 74 72 69 65 73 20 5c 6e 5d 0a 0a 09 3a $entries \n]...:
0580: 3a 66 6f 72 65 61 63 68 20 65 6e 74 72 79 20 24 :foreach entry $
0590: 65 6e 74 72 69 65 73 20 7b 0a 09 20 20 20 20 6c entries {.. l
05a0: 61 73 73 69 67 6e 20 24 65 6e 74 72 79 20 66 69 assign $entry fi
05b0: 6c 65 20 72 65 76 69 73 69 6f 6e 20 6f 70 65 72 le revision oper
05c0: 61 74 69 6f 6e 20 61 75 74 68 6f 72 20 63 6d 73 ation author cms
05d0: 67 0a 09 20 20 20 20 73 65 74 20 63 6f 64 65 20 g.. set code
05e0: 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 [catch {uplevel
05f0: 31 20 24 73 63 72 69 70 74 7d 20 72 65 73 5d 0a 1 $script} res].
0600: 0a 09 20 20 20 20 23 20 30 20 2d 20 6f 6b 2c 20 .. # 0 - ok,
0610: 31 20 2d 20 65 72 72 6f 72 2c 20 32 20 2d 20 72 1 - error, 2 - r
0620: 65 74 75 72 6e 2c 20 33 20 2d 20 62 72 65 61 6b eturn, 3 - break
0630: 2c 20 34 20 2d 20 63 6f 6e 74 69 6e 75 65 0a 09 , 4 - continue..
0640: 20 20 20 20 73 77 69 74 63 68 20 2d 2d 20 24 63 switch -- $c
0650: 6f 64 65 20 7b 0a 09 09 30 20 7b 7d 0a 09 09 31 ode {...0 {}...1
0660: 20 7b 20 72 65 74 75 72 6e 20 2d 65 72 72 6f 72 { return -error
0670: 63 6f 64 65 20 24 3a 3a 65 72 72 6f 72 43 6f 64 code $::errorCod
0680: 65 20 2d 65 72 72 6f 72 69 6e 66 6f 20 24 3a 3a e -errorinfo $::
0690: 65 72 72 6f 72 49 6e 66 6f 20 2d 63 6f 64 65 20 errorInfo -code
06a0: 65 72 72 6f 72 20 24 72 65 73 20 7d 0a 09 09 32 error $res }...2
06b0: 20 7b 7d 0a 09 09 33 20 7b 20 72 65 74 75 72 6e {}...3 { return
06c0: 20 7d 0a 09 09 34 20 7b 7d 0a 09 09 64 65 66 61 }...4 {}...defa
06d0: 75 6c 74 20 7b 0a 09 09 20 20 20 20 72 65 74 75 ult {... retu
06e0: 72 6e 20 2d 63 6f 64 65 20 24 63 6f 64 65 20 24 rn -code $code $
06f0: 72 65 73 75 6c 74 0a 09 09 7d 0a 09 20 20 20 20 result...}..
0700: 7d 0a 09 7d 0a 20 20 20 20 7d 0a 20 20 20 20 72 }..}. }. r
0710: 65 74 75 72 6e 0a 7d 0a 0a 23 20 2d 2d 2d 2d 2d eturn.}..# -----
0720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0760: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 49 6e 74 65 72 --------.# Inter
0770: 6e 61 6c 73 0a 0a 70 72 6f 63 20 3a 3a 76 63 3a nals..proc ::vc:
0780: 3a 63 76 73 3a 3a 77 73 3a 3a 74 69 6d 65 6c 69 :cvs::ws::timeli
0790: 6e 65 3a 3a 6c 61 73 73 69 67 6e 20 7b 6c 20 61 ne::lassign {l a
07a0: 72 67 73 7d 20 7b 0a 20 20 20 20 3a 3a 66 6f 72 rgs} {. ::for
07b0: 65 61 63 68 20 76 20 24 61 72 67 73 20 7b 75 70 each v $args {up
07c0: 76 61 72 20 31 20 24 76 20 24 76 7d 20 0a 20 20 var 1 $v $v} .
07d0: 20 20 3a 3a 66 6f 72 65 61 63 68 20 24 61 72 67 ::foreach $arg
07e0: 73 20 24 6c 20 62 72 65 61 6b 0a 20 20 20 20 72 s $l break. r
07f0: 65 74 75 72 6e 0a 7d 0a 0a 6e 61 6d 65 73 70 61 eturn.}..namespa
0800: 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 63 76 ce eval ::vc::cv
0810: 73 3a 3a 77 73 3a 3a 74 69 6d 65 6c 69 6e 65 20 s::ws::timeline
0820: 7b 0a 20 20 20 20 23 20 54 69 6d 65 6c 69 6e 65 {. # Timeline
0830: 3a 20 6d 61 70 20 28 64 61 74 65 20 2d 3e 20 6c : map (date -> l
0840: 69 73 74 20 28 66 69 6c 65 20 72 65 76 69 73 69 ist (file revisi
0850: 6f 6e 20 6f 70 65 72 61 74 69 6f 6e 20 61 75 74 on operation aut
0860: 68 6f 72 20 63 6f 6d 6d 69 74 6d 73 67 29 29 0a hor commitmsg)).
0870: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 20 74 . variable t
0880: 69 6d 65 6c 69 6e 65 0a 20 20 20 20 61 72 72 61 imeline. arra
0890: 79 20 73 65 74 20 74 69 6d 65 6c 69 6e 65 20 7b y set timeline {
08a0: 7d 0a 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 }.. namespace
08b0: 20 65 78 70 6f 72 74 20 61 64 64 0a 7d 0a 0a 23 export add.}..#
08c0: 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ---------------
08d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
08e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
08f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 --------------.#
0910: 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 Ready..package
0920: 70 72 6f 76 69 64 65 20 76 63 3a 3a 63 76 73 3a provide vc::cvs:
0930: 3a 77 73 3a 3a 74 69 6d 65 6c 69 6e 65 20 31 2e :ws::timeline 1.
0940: 30 0a 72 65 74 75 72 6e 0a 0.return.