Check-in [18251642f3]
Not logged in
Overview

SHA1 Hash:18251642f3b24b7110f66e706647000965e13342
Date: 2007-09-14 23:23:48
User: aku
Comment:Moved the handling of the import statistics into its own package. Untested.
Timelines: ancestors | descendants | both | trunk
Other Links: files | ZIP archive | manifest

Tags And Properties
Changes
[hide diffs]

Added tools/lib/import_statistics.tcl version [561c79f2a3]

@@ -1,1 +1,107 @@
+# -----------------------------------------------------------------------------
+# Management of statistics for an import run.
+
+# -----------------------------------------------------------------------------
+# Requirements
+
+package require Tcl 8.4
+package require vc::tools::log  ; # User feedback
+
+namespace eval ::vc::fossil::import::stats {
+    vc::tools::log::system stats
+    namespace import ::vc::tools::log::write
+}
+
+# -----------------------------------------------------------------------------
+# API
+
+#     vc::fossil::import::stats
+#         setup n m  - Initialize module, expect n changesets, of m.
+#         done       - Write final statistics.
+#         csbegin id - Import of identified changeset begins.
+#         csend x    - It took x seconds to import the changeset.
+#
+
+# -----------------------------------------------------------------------------
+# API Implementation - Functionality
+
+proc ::vc::fossil::import::stats::init {n m} {
+    variable total_csets   $n
+    variable total_running 0
+    variable total_seconds 0.0
+
+    variable ntfmt %[string length $n]s
+    variable nmfmt %[string length $m]s
+    return
+}
+
+proc ::vc::fossil::import::stats::done {} {
+    variable total_csets
+    variable total_seconds
+
+    write 0 stats "========= [string repeat = 61]"
+    write 0 stats "Imported $total_csets [expr {($total_csets == 1) ? "changeset" : "changesets"}]"
+    write 0 stats "Within [F $tot] seconds (avg [F [Avg]] seconds/changeset)"
+    return
+}
+
+proc ::vc::fossil::import::stats::csbegin {cset} {
+    variable nmfmt
+    variable ntfmt
+    write 0 stats "ChangeSet [format $nmfmt $cset] @ [format $ntfmt $total_running]/$total_csets ([F6 [expr {$total_running*100.0/$total_csets}]]%)"
+    return
+}
+
+proc ::vc::fossil::import::stats::csend {seconds} {
+    variable total_csets
+    variable total_seconds
+    variable total_running
+
+    incr total_running
+    set  total_seconds [expr {$total_seconds + $sec}]
+
+    set avg [Avg]
+    set end [expr {$total_csets * $avg}]
+    set rem [expr {$end - $total_seconds}]
+
+    write 2 stats "Imported in        [F7 $seconds] seconds"
+    write 3 stats "Average Time/Cset  [F7 $avg] seconds"
+    write 3 stats "Current Runtime    [FTime $total_seconds]"
+    write 3 stats "Total Runtime  (E) [FTime $end]"
+    write 3 stats "Remaining Time (E) [FTime $rem]"
+    # (E) for Estimated.
+
+    return
+}
+
+# -----------------------------------------------------------------------------
+# Internal helper commands.
+
+proc ::vc::fossil::import::stats::FTime {s} {
+    set m [expr {$s / 60}]
+    set h [expr {$s / 3600}]
+    return "[F7 $s] sec [F6 $m] min [F5 $h] hr"
+}
+
+proc ::vc::fossil::import::stats::F  {x} { format %.2f  $x }
+proc ::vc::fossil::import::stats::F5 {x} { format %5.2f $x }
+proc ::vc::fossil::import::stats::F6 {x} { format %6.2f $x }
+proc ::vc::fossil::import::stats::F7 {x} { format %7.2f $x }
+
+proc ::vc::fossil::import::stats::Avg {} {
+    variable total_seconds
+    variable total_running
+    return [expr {$total_seconds/$total_running}]
+}
+
+# -----------------------------------------------------------------------------
+
+namespace eval ::vc::fossil::import::stats {
+    namespace export setup done begin add
+}
+
+# -----------------------------------------------------------------------------
+# Ready
 
+package provide vc::fossil::import::stats 1.0
+return

Modified tools/lib/importcvs.tcl from [0d2f09ecb4] to [77cdacb9e5].

@@ -3,19 +3,21 @@
 
 # -----------------------------------------------------------------------------
 # Requirements
 
 package require Tcl 8.4
-package require vc::cvs::ws     ; # Frontend, reading from source repository
-package require vc::fossil::ws  ; # Backend,  writing to destination repository.
-package require vc::tools::log  ; # User feedback
+package require vc::cvs::ws               ; # Frontend, reading from source repository
+package require vc::fossil::ws            ; # Backend,  writing to destination repository.
+package require vc::tools::log            ; # User feedback
+package require vc::fossil::import::stats ; # Import Statistics
 
 namespace eval ::vc::fossil::import::cvs {
     vc::tools::log::system import
     namespace import ::vc::tools::log::write
     namespace eval cvs    { namespace import ::vc::cvs::ws::* }
     namespace eval fossil { namespace import ::vc::fossil::ws::* }
+    namespace eval stats  { namespace import ::vc::fossil::import::stats::* }
 
     fossil::configure -appname cvs2fossil
     fossil::configure -ignore  ::vc::cvs::ws::wsignore
 }
 
@@ -59,73 +61,46 @@
     cvs::at $src  ; # Define location of CVS repository
     cvs::scan     ; # Gather revision data from the archives
     cvs::csets    ; # Group changes into sets
     cvs::rtree    ; # Build revision tree (trunk only right now).
 
-    set tot 0.0
-    set nto 0
-
     write 0 import {Begin conversion}
     write 0 import {Setting up workspaces}
 
     cvs::workspace      ; # cd's to workspace
     fossil::begin [pwd] ; # Uses cwd as workspace to connect to.
-
-    set ntrunk [cvs::ntrunk] ; set ntfmt %[string length $ntrunk]s
-    set nmax   [cvs::ncsets] ; set nmfmt %[string length $nmax]s
+    stats::setup [cvs::ntrunk] [cvs::ncsets]
 
     cvs::foreach_cset cset [cvs::root] {
-	write 0 import "ChangeSet [format $nmfmt $cset] @ [format $ntfmt $nto]/$ntrunk ([format %6.2f [expr {$nto*100.0/$ntrunk}]]%)"
-	Statistics [OneChangeSet $cset]
+	OneChangeSet $cset
     }
 
-    write 0 import "========= [string repeat = 61]"
-    write 0 import "Imported $nto [expr {($nto == 1) ? "changeset" : "changesets"}]"
-    write 0 import "Within [format %.2f $tot] seconds (avg [format %.2f [expr {$tot/$nto}]] seconds/changeset)"
-
+    stats::done
     cvs::wsclear
     fossil::close $dst
+
     write 0 import Ok.
     return
 }
 
 # -----------------------------------------------------------------------------
 # Internal operations - Import a single changeset.
 
-proc ::vc::fossil::import::cvs::Statistics {sec} {
-    upvar 1 tot tot nto nto ntrunk ntrunk
+proc ::vc::fossil::import::cvs::OneChangeSet {cset} {
+    stats::csbegin $cset
 
-    # No statistics if the commit was stopped before it was run
-    if {$sec eq ""} return
-
-    incr nto
-
-    set tot [expr {$tot + $sec}]
-    set avg [expr {$tot/$nto}]
-    set max [expr {$ntrunk * $avg}]
-    set rem [expr {$max - $tot}]
-
-    write 3 import "st avg [format %.2f $avg] sec"
-    write 3 import "st run [format %7.2f $tot] sec [format %6.2f [expr {$tot/60}]] min [format %5.2f [expr {$tot/3600}]] hr"
-    write 3 import "st end [format %7.2f $max] sec [format %6.2f [expr {$max/60}]] min [format %5.2f [expr {$max/3600}]] hr"
-    write 3 import "st rem [format %7.2f $rem] sec [format %6.2f [expr {$rem/60}]] min [format %5.2f [expr {$rem/3600}]] hr"
-    return
-}
-
-proc ::vc::fossil::import::cvs::OneChangeSet {cset} {
-    set usec [lindex [time {
+    set microseconds [lindex [time {
 	foreach {user message timestamp} [cvs::wssetup $cset] break
 	foreach {uuid ad rm ch} [fossil::commit $cset $user $timestamp $message] break
     } 1] 0]
-    cvs::uuid $cset $uuid
+    set seconds [expr {$microseconds/1e6}]
 
-    set sec [expr {$usec/1e6}]
-
+    cvs::uuid $cset $uuid
     write 2 import "== $uuid +${ad}-${rm}*${ch}"
-    write 2 import "st in  [format %.2f $sec] sec"
 
-    return $sec
+    stats::csend $seconds
+    return
 }
 
 # -----------------------------------------------------------------------------
 
 namespace eval ::vc::fossil::import::cvs {

Modified tools/lib/pkgIndex.tcl from [97cb78f4d8] to [b623451fbf].

@@ -1,8 +1,9 @@
 if {![package vsatisfies [package require Tcl] 8.4]} return
-package ifneeded vc::rcs::parser         1.0 [list source [file join $dir rcsparser.tcl]]
-package ifneeded vc::cvs::cmd            1.0 [list source [file join $dir cvs_cmd.tcl]]
-package ifneeded vc::cvs::ws             1.0 [list source [file join $dir cvs.tcl]]
-package ifneeded vc::fossil::cmd         1.0 [list source [file join $dir fossil_cmd.tcl]]
-package ifneeded vc::fossil::ws          1.0 [list source [file join $dir fossil.tcl]]
-package ifneeded vc::fossil::import::cvs 1.0 [list source [file join $dir importcvs.tcl]]
-package ifneeded vc::tools::log          1.0 [list source [file join $dir log.tcl]]
+package ifneeded vc::rcs::parser           1.0 [list source [file join $dir rcsparser.tcl]]
+package ifneeded vc::cvs::cmd              1.0 [list source [file join $dir cvs_cmd.tcl]]
+package ifneeded vc::cvs::ws               1.0 [list source [file join $dir cvs.tcl]]
+package ifneeded vc::fossil::cmd           1.0 [list source [file join $dir fossil_cmd.tcl]]
+package ifneeded vc::fossil::ws            1.0 [list source [file join $dir fossil.tcl]]
+package ifneeded vc::fossil::import::cvs   1.0 [list source [file join $dir importcvs.tcl]]
+package ifneeded vc::fossil::import::stats 1.0 [list source [file join $dir import_statistics.tcl]]
+package ifneeded vc::tools::log            1.0 [list source [file join $dir log.tcl]]