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
- branch=trunk inherited from [a28c83647d]
- sym-trunk inherited from [a28c83647d]
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]]