Fossil SCM

Moved the handling of the import statistics into its own package. Untested.

aku 2007-09-14 23:23 trunk
Commit 18251642f3b24b7110f66e706647000965e13342
--- a/tools/lib/import_statistics.tcl
+++ b/tools/lib/import_statistics.tcl
@@ -0,0 +1,49 @@
1
+# -----------------------------------------------------------------------------
2
+# Management of statistics for an import run.
3
+
4
+# -----------------------------------------------------------------------------
5
+# Requirements
6
+
7
+package require Tcl 8.4
8
+package require vc::tools::log ; # User feedback
9
+
10
+namespace eval ::vc::fossil::import::stats {
11
+ vc::tools::log::system stats
12
+ namespace import ::vc::tools::log::write
13
+}
14
+
15
+# -----------------------------------------------------------------------------
16
+# API
17
+
18
+# vc::fossil::import::stats
19
+# setup n m - Initialize module, expect n changesets, of m.
20
+# done - Write final statistics.
21
+# csbegin id - Import of identified changeset begins.
22
+# csend x - It took x seconds to import the changeset.
23
+#
24
+
25
+# -----------------------------------------------------------------------------
26
+# API Implementation - Functionality
27
+
28
+proc ::initossil::import::stats::g length $m]s
29
+ variable total_csets $n
30
+ variable total_running 0
31
+
32
+ variable ntfmt %[string length $n]s
33
+ variable nmfmt %[string length $m]s
34
+ return
35
+}
36
+_running 0
37
+ variable total_seconvc::fossil::import::stats::done {} {
38
+ variable total_csets
39
+ variable total_seconds
40
+
41
+ write 0 stats "========= [string repeat = 61]"
42
+ write 0 stats "Imported $total_csets [expr {($total_csets == 1) ? "changeses "Within [F $total_seconds] seconds (avg [F [Avg]] seconds/changeset)"
43
+ return
44
+}
45
+
46
+proc ::vc:nmfmt
47
+ variable ntfmt
48
+ write 0 stats "ChangeSet [format $nt $total_running]/$total_csets ([F6 [expr {$total_running*100.0/$total_csets}]]%)"
49
+
--- a/tools/lib/import_statistics.tcl
+++ b/tools/lib/import_statistics.tcl
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
--- a/tools/lib/import_statistics.tcl
+++ b/tools/lib/import_statistics.tcl
@@ -0,0 +1,49 @@
1 # -----------------------------------------------------------------------------
2 # Management of statistics for an import run.
3
4 # -----------------------------------------------------------------------------
5 # Requirements
6
7 package require Tcl 8.4
8 package require vc::tools::log ; # User feedback
9
10 namespace eval ::vc::fossil::import::stats {
11 vc::tools::log::system stats
12 namespace import ::vc::tools::log::write
13 }
14
15 # -----------------------------------------------------------------------------
16 # API
17
18 # vc::fossil::import::stats
19 # setup n m - Initialize module, expect n changesets, of m.
20 # done - Write final statistics.
21 # csbegin id - Import of identified changeset begins.
22 # csend x - It took x seconds to import the changeset.
23 #
24
25 # -----------------------------------------------------------------------------
26 # API Implementation - Functionality
27
28 proc ::initossil::import::stats::g length $m]s
29 variable total_csets $n
30 variable total_running 0
31
32 variable ntfmt %[string length $n]s
33 variable nmfmt %[string length $m]s
34 return
35 }
36 _running 0
37 variable total_seconvc::fossil::import::stats::done {} {
38 variable total_csets
39 variable total_seconds
40
41 write 0 stats "========= [string repeat = 61]"
42 write 0 stats "Imported $total_csets [expr {($total_csets == 1) ? "changeses "Within [F $total_seconds] seconds (avg [F [Avg]] seconds/changeset)"
43 return
44 }
45
46 proc ::vc:nmfmt
47 variable ntfmt
48 write 0 stats "ChangeSet [format $nt $total_running]/$total_csets ([F6 [expr {$total_running*100.0/$total_csets}]]%)"
49
--- tools/lib/importcvs.tcl
+++ tools/lib/importcvs.tcl
@@ -3,19 +3,21 @@
33
44
# -----------------------------------------------------------------------------
55
# Requirements
66
77
package require Tcl 8.4
8
-package require vc::cvs::ws ; # Frontend, reading from source repository
9
-package require vc::fossil::ws ; # Backend, writing to destination repository.
10
-package require vc::tools::log ; # User feedback
8
+package require vc::cvs::ws ; # Frontend, reading from source repository
9
+package require vc::fossil::ws ; # Backend, writing to destination repository.
10
+package require vc::tools::log ; # User feedback
11
+package require vc::fossil::import::stats ; # Import Statistics
1112
1213
namespace eval ::vc::fossil::import::cvs {
1314
vc::tools::log::system import
1415
namespace import ::vc::tools::log::write
1516
namespace eval cvs { namespace import ::vc::cvs::ws::* }
1617
namespace eval fossil { namespace import ::vc::fossil::ws::* }
18
+ namespace eval stats { namespace import ::vc::fossil::import::stats::* }
1719
1820
fossil::configure -appname cvs2fossil
1921
fossil::configure -ignore ::vc::cvs::ws::wsignore
2022
}
2123
@@ -59,73 +61,46 @@
5961
cvs::at $src ; # Define location of CVS repository
6062
cvs::scan ; # Gather revision data from the archives
6163
cvs::csets ; # Group changes into sets
6264
cvs::rtree ; # Build revision tree (trunk only right now).
6365
64
- set tot 0.0
65
- set nto 0
66
-
6766
write 0 import {Begin conversion}
6867
write 0 import {Setting up workspaces}
6968
7069
cvs::workspace ; # cd's to workspace
7170
fossil::begin [pwd] ; # Uses cwd as workspace to connect to.
72
-
73
- set ntrunk [cvs::ntrunk] ; set ntfmt %[string length $ntrunk]s
74
- set nmax [cvs::ncsets] ; set nmfmt %[string length $nmax]s
75
-
76
- cvs::foreach_cset cset [cvs::root] {
77
- write 0 import "ChangeSet [format $nmfmt $cset] @ [format $ntfmt $nto]/$ntrunk ([format %6.2f [expr {$nto*100.0/$ntrunk}]]%)"
78
- Statistics [OneChangeSet $cset]
79
- }
80
-
81
- write 0 import "========= [string repeat = 61]"
82
- write 0 import "Imported $nto [expr {($nto == 1) ? "changeset" : "changesets"}]"
83
- write 0 import "Within [format %.2f $tot] seconds (avg [format %.2f [expr {$tot/$nto}]] seconds/changeset)"
84
-
85
- cvs::wsclear
86
- fossil::close $dst
71
+ stats::setup [cvs::ntrunk] [cvs::ncsets]
72
+
73
+ cvs::foreach_cset cset [cvs::root] {
74
+ OneChangeSet $cset
75
+ }
76
+
77
+ stats::done
78
+ cvs::wsclear
79
+ fossil::close $dst
80
+
8781
write 0 import Ok.
8882
return
8983
}
9084
9185
# -----------------------------------------------------------------------------
9286
# Internal operations - Import a single changeset.
9387
94
-proc ::vc::fossil::import::cvs::Statistics {sec} {
95
- upvar 1 tot tot nto nto ntrunk ntrunk
96
-
97
- # No statistics if the commit was stopped before it was run
98
- if {$sec eq ""} return
99
-
100
- incr nto
101
-
102
- set tot [expr {$tot + $sec}]
103
- set avg [expr {$tot/$nto}]
104
- set max [expr {$ntrunk * $avg}]
105
- set rem [expr {$max - $tot}]
106
-
107
- write 3 import "st avg [format %.2f $avg] sec"
108
- write 3 import "st run [format %7.2f $tot] sec [format %6.2f [expr {$tot/60}]] min [format %5.2f [expr {$tot/3600}]] hr"
109
- write 3 import "st end [format %7.2f $max] sec [format %6.2f [expr {$max/60}]] min [format %5.2f [expr {$max/3600}]] hr"
110
- write 3 import "st rem [format %7.2f $rem] sec [format %6.2f [expr {$rem/60}]] min [format %5.2f [expr {$rem/3600}]] hr"
111
- return
112
-}
113
-
11488
proc ::vc::fossil::import::cvs::OneChangeSet {cset} {
115
- set usec [lindex [time {
89
+ stats::csbegin $cset
90
+
91
+ set microseconds [lindex [time {
11692
foreach {user message timestamp} [cvs::wssetup $cset] break
11793
foreach {uuid ad rm ch} [fossil::commit $cset $user $timestamp $message] break
11894
} 1] 0]
119
- cvs::uuid $cset $uuid
95
+ set seconds [expr {$microseconds/1e6}]
12096
121
- set sec [expr {$usec/1e6}]
122
-
97
+ cvs::uuid $cset $uuid
12398
write 2 import "== $uuid +${ad}-${rm}*${ch}"
124
- write 2 import "st in [format %.2f $sec] sec"
12599
126
- return $sec
100
+ stats::csend $seconds
101
+ return
127102
}
128103
129104
# -----------------------------------------------------------------------------
130105
131106
namespace eval ::vc::fossil::import::cvs {
132107
--- tools/lib/importcvs.tcl
+++ tools/lib/importcvs.tcl
@@ -3,19 +3,21 @@
3
4 # -----------------------------------------------------------------------------
5 # Requirements
6
7 package require Tcl 8.4
8 package require vc::cvs::ws ; # Frontend, reading from source repository
9 package require vc::fossil::ws ; # Backend, writing to destination repository.
10 package require vc::tools::log ; # User feedback
 
11
12 namespace eval ::vc::fossil::import::cvs {
13 vc::tools::log::system import
14 namespace import ::vc::tools::log::write
15 namespace eval cvs { namespace import ::vc::cvs::ws::* }
16 namespace eval fossil { namespace import ::vc::fossil::ws::* }
 
17
18 fossil::configure -appname cvs2fossil
19 fossil::configure -ignore ::vc::cvs::ws::wsignore
20 }
21
@@ -59,73 +61,46 @@
59 cvs::at $src ; # Define location of CVS repository
60 cvs::scan ; # Gather revision data from the archives
61 cvs::csets ; # Group changes into sets
62 cvs::rtree ; # Build revision tree (trunk only right now).
63
64 set tot 0.0
65 set nto 0
66
67 write 0 import {Begin conversion}
68 write 0 import {Setting up workspaces}
69
70 cvs::workspace ; # cd's to workspace
71 fossil::begin [pwd] ; # Uses cwd as workspace to connect to.
72
73 set ntrunk [cvs::ntrunk] ; set ntfmt %[string length $ntrunk]s
74 set nmax [cvs::ncsets] ; set nmfmt %[string length $nmax]s
75
76 cvs::foreach_cset cset [cvs::root] {
77 write 0 import "ChangeSet [format $nmfmt $cset] @ [format $ntfmt $nto]/$ntrunk ([format %6.2f [expr {$nto*100.0/$ntrunk}]]%)"
78 Statistics [OneChangeSet $cset]
79 }
80
81 write 0 import "========= [string repeat = 61]"
82 write 0 import "Imported $nto [expr {($nto == 1) ? "changeset" : "changesets"}]"
83 write 0 import "Within [format %.2f $tot] seconds (avg [format %.2f [expr {$tot/$nto}]] seconds/changeset)"
84
85 cvs::wsclear
86 fossil::close $dst
87 write 0 import Ok.
88 return
89 }
90
91 # -----------------------------------------------------------------------------
92 # Internal operations - Import a single changeset.
93
94 proc ::vc::fossil::import::cvs::Statistics {sec} {
95 upvar 1 tot tot nto nto ntrunk ntrunk
96
97 # No statistics if the commit was stopped before it was run
98 if {$sec eq ""} return
99
100 incr nto
101
102 set tot [expr {$tot + $sec}]
103 set avg [expr {$tot/$nto}]
104 set max [expr {$ntrunk * $avg}]
105 set rem [expr {$max - $tot}]
106
107 write 3 import "st avg [format %.2f $avg] sec"
108 write 3 import "st run [format %7.2f $tot] sec [format %6.2f [expr {$tot/60}]] min [format %5.2f [expr {$tot/3600}]] hr"
109 write 3 import "st end [format %7.2f $max] sec [format %6.2f [expr {$max/60}]] min [format %5.2f [expr {$max/3600}]] hr"
110 write 3 import "st rem [format %7.2f $rem] sec [format %6.2f [expr {$rem/60}]] min [format %5.2f [expr {$rem/3600}]] hr"
111 return
112 }
113
114 proc ::vc::fossil::import::cvs::OneChangeSet {cset} {
115 set usec [lindex [time {
 
 
116 foreach {user message timestamp} [cvs::wssetup $cset] break
117 foreach {uuid ad rm ch} [fossil::commit $cset $user $timestamp $message] break
118 } 1] 0]
119 cvs::uuid $cset $uuid
120
121 set sec [expr {$usec/1e6}]
122
123 write 2 import "== $uuid +${ad}-${rm}*${ch}"
124 write 2 import "st in [format %.2f $sec] sec"
125
126 return $sec
 
127 }
128
129 # -----------------------------------------------------------------------------
130
131 namespace eval ::vc::fossil::import::cvs {
132
--- tools/lib/importcvs.tcl
+++ tools/lib/importcvs.tcl
@@ -3,19 +3,21 @@
3
4 # -----------------------------------------------------------------------------
5 # Requirements
6
7 package require Tcl 8.4
8 package require vc::cvs::ws ; # Frontend, reading from source repository
9 package require vc::fossil::ws ; # Backend, writing to destination repository.
10 package require vc::tools::log ; # User feedback
11 package require vc::fossil::import::stats ; # Import Statistics
12
13 namespace eval ::vc::fossil::import::cvs {
14 vc::tools::log::system import
15 namespace import ::vc::tools::log::write
16 namespace eval cvs { namespace import ::vc::cvs::ws::* }
17 namespace eval fossil { namespace import ::vc::fossil::ws::* }
18 namespace eval stats { namespace import ::vc::fossil::import::stats::* }
19
20 fossil::configure -appname cvs2fossil
21 fossil::configure -ignore ::vc::cvs::ws::wsignore
22 }
23
@@ -59,73 +61,46 @@
61 cvs::at $src ; # Define location of CVS repository
62 cvs::scan ; # Gather revision data from the archives
63 cvs::csets ; # Group changes into sets
64 cvs::rtree ; # Build revision tree (trunk only right now).
65
 
 
 
66 write 0 import {Begin conversion}
67 write 0 import {Setting up workspaces}
68
69 cvs::workspace ; # cd's to workspace
70 fossil::begin [pwd] ; # Uses cwd as workspace to connect to.
71 stats::setup [cvs::ntrunk] [cvs::ncsets]
72
73 cvs::foreach_cset cset [cvs::root] {
74 OneChangeSet $cset
75 }
76
77 stats::done
78 cvs::wsclear
79 fossil::close $dst
80
 
 
 
 
 
81 write 0 import Ok.
82 return
83 }
84
85 # -----------------------------------------------------------------------------
86 # Internal operations - Import a single changeset.
87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88 proc ::vc::fossil::import::cvs::OneChangeSet {cset} {
89 stats::csbegin $cset
90
91 set microseconds [lindex [time {
92 foreach {user message timestamp} [cvs::wssetup $cset] break
93 foreach {uuid ad rm ch} [fossil::commit $cset $user $timestamp $message] break
94 } 1] 0]
95 set seconds [expr {$microseconds/1e6}]
96
97 cvs::uuid $cset $uuid
 
98 write 2 import "== $uuid +${ad}-${rm}*${ch}"
 
99
100 stats::csend $seconds
101 return
102 }
103
104 # -----------------------------------------------------------------------------
105
106 namespace eval ::vc::fossil::import::cvs {
107
--- tools/lib/pkgIndex.tcl
+++ tools/lib/pkgIndex.tcl
@@ -1,8 +1,9 @@
11
if {![package vsatisfies [package require Tcl] 8.4]} return
2
-package ifneeded vc::rcs::parser 1.0 [list source [file join $dir rcsparser.tcl]]
3
-package ifneeded vc::cvs::cmd 1.0 [list source [file join $dir cvs_cmd.tcl]]
4
-package ifneeded vc::cvs::ws 1.0 [list source [file join $dir cvs.tcl]]
5
-package ifneeded vc::fossil::cmd 1.0 [list source [file join $dir fossil_cmd.tcl]]
6
-package ifneeded vc::fossil::ws 1.0 [list source [file join $dir fossil.tcl]]
7
-package ifneeded vc::fossil::import::cvs 1.0 [list source [file join $dir importcvs.tcl]]
8
-package ifneeded vc::tools::log 1.0 [list source [file join $dir log.tcl]]
2
+package ifneeded vc::rcs::parser 1.0 [list source [file join $dir rcsparser.tcl]]
3
+package ifneeded vc::cvs::cmd 1.0 [list source [file join $dir cvs_cmd.tcl]]
4
+package ifneeded vc::cvs::ws 1.0 [list source [file join $dir cvs.tcl]]
5
+package ifneeded vc::fossil::cmd 1.0 [list source [file join $dir fossil_cmd.tcl]]
6
+package ifneeded vc::fossil::ws 1.0 [list source [file join $dir fossil.tcl]]
7
+package ifneeded vc::fossil::import::cvs 1.0 [list source [file join $dir importcvs.tcl]]
8
+package ifneeded vc::fossil::import::stats 1.0 [list source [file join $dir import_statistics.tcl]]
9
+package ifneeded vc::tools::log 1.0 [list source [file join $dir log.tcl]]
910
--- tools/lib/pkgIndex.tcl
+++ tools/lib/pkgIndex.tcl
@@ -1,8 +1,9 @@
1 if {![package vsatisfies [package require Tcl] 8.4]} return
2 package ifneeded vc::rcs::parser 1.0 [list source [file join $dir rcsparser.tcl]]
3 package ifneeded vc::cvs::cmd 1.0 [list source [file join $dir cvs_cmd.tcl]]
4 package ifneeded vc::cvs::ws 1.0 [list source [file join $dir cvs.tcl]]
5 package ifneeded vc::fossil::cmd 1.0 [list source [file join $dir fossil_cmd.tcl]]
6 package ifneeded vc::fossil::ws 1.0 [list source [file join $dir fossil.tcl]]
7 package ifneeded vc::fossil::import::cvs 1.0 [list source [file join $dir importcvs.tcl]]
8 package ifneeded vc::tools::log 1.0 [list source [file join $dir log.tcl]]
 
9
--- tools/lib/pkgIndex.tcl
+++ tools/lib/pkgIndex.tcl
@@ -1,8 +1,9 @@
1 if {![package vsatisfies [package require Tcl] 8.4]} return
2 package ifneeded vc::rcs::parser 1.0 [list source [file join $dir rcsparser.tcl]]
3 package ifneeded vc::cvs::cmd 1.0 [list source [file join $dir cvs_cmd.tcl]]
4 package ifneeded vc::cvs::ws 1.0 [list source [file join $dir cvs.tcl]]
5 package ifneeded vc::fossil::cmd 1.0 [list source [file join $dir fossil_cmd.tcl]]
6 package ifneeded vc::fossil::ws 1.0 [list source [file join $dir fossil.tcl]]
7 package ifneeded vc::fossil::import::cvs 1.0 [list source [file join $dir importcvs.tcl]]
8 package ifneeded vc::fossil::import::stats 1.0 [list source [file join $dir import_statistics.tcl]]
9 package ifneeded vc::tools::log 1.0 [list source [file join $dir log.tcl]]
10

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button