Overview
SHA1 Hash: | 96b7bfb83401cc7e8ea8ad0eb803e6f50b3b50ff |
---|---|
Date: | 2007-11-16 08:32:40 |
User: | aku |
Comment: | Added convenience command to the state package when the sql returns a single row. Added more statistics about revisions, tags, branches, symbols, changesets to various passes. |
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]Modified tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl from [95b71ab788] to [030100362a].
@@ -20,10 +20,11 @@ package require Tcl 8.4 ; # Required runtime. package require snit ; # OO system. package require struct::list ; # Higher order list operations. package require vc::tools::log ; # User feedback. +package require vc::fossil::import::cvs::repository ; # Repository management. package require vc::fossil::import::cvs::cyclebreaker ; # Breaking dependency cycles. package require vc::fossil::import::cvs::state ; # State storage. package require vc::fossil::import::cvs::project::rev ; # Project level changesets # # ## ### ##### ######## ############# ##################### @@ -76,10 +77,12 @@ state transaction { cyclebreaker run [struct::list filter [project::rev all] \ [myproc IsByRevision]] \ [myproc SaveOrder] } + + repository printcsetstatistics return } typemethod discard {} { # Pass manager interface. Executed for all passes after the @@ -119,10 +122,11 @@ namespace eval ::vc::fossil::import::cvs::pass { namespace export breakrcycle namespace eval breakrcycle { namespace import ::vc::fossil::import::cvs::cyclebreaker + namespace import ::vc::fossil::import::cvs::repository namespace import ::vc::fossil::import::cvs::state namespace eval project { namespace import ::vc::fossil::import::cvs::project::rev } namespace import ::vc::tools::log
Modified tools/cvs2fossil/lib/c2f_pbreakscycle.tcl from [0e581d0498] to [a1d5600281].
@@ -20,10 +20,11 @@ package require Tcl 8.4 ; # Required runtime. package require snit ; # OO system. package require struct::list ; # Higher order list operations. package require vc::fossil::import::cvs::cyclebreaker ; # Breaking dependency cycles. +package require vc::fossil::import::cvs::repository ; # Repository management. package require vc::fossil::import::cvs::state ; # State storage. package require vc::fossil::import::cvs::project::rev ; # Project level changesets # # ## ### ##### ######## ############# ##################### ## Register the pass with the management @@ -63,10 +64,12 @@ state transaction { cyclebreaker run [struct::list filter [project::rev all] \ [myproc IsBySymbol]] } + + repository printcsetstatistics return } typemethod discard {} { # Pass manager interface. Executed for all passes after the @@ -92,10 +95,11 @@ namespace eval ::vc::fossil::import::cvs::pass { namespace export breakscycle namespace eval breakscycle { namespace import ::vc::fossil::import::cvs::cyclebreaker + namespace import ::vc::fossil::import::cvs::repository namespace import ::vc::fossil::import::cvs::state namespace eval project { namespace import ::vc::fossil::import::cvs::project::rev } }
Modified tools/cvs2fossil/lib/c2f_pcollrev.tcl from [9385b6cf1b] to [e9c8eea44f].
@@ -339,12 +339,12 @@ } $project purgeghostsymbols } - repository printrevstatistics repository persistrev + repository printrevstatistics integrity strict log write 1 collrev "Scan completed" return }
Modified tools/cvs2fossil/lib/c2f_pfiltersym.tcl from [852144546e] to [29f48baf16].
@@ -19,10 +19,11 @@ package require Tcl 8.4 ; # Required runtime. package require snit ; # OO system. package require vc::tools::misc ; # Text formatting. package require vc::tools::log ; # User feedback. +package require vc::fossil::import::cvs::repository ; # Repository management. package require vc::fossil::import::cvs::state ; # State storage. package require vc::fossil::import::cvs::integrity ; # State storage integrity checks. package require vc::fossil::import::cvs::project::sym ; # Project level symbols # # ## ### ##### ######## ############# ##################### @@ -81,10 +82,12 @@ FilterExcludedSymbols MutateSymbols AdjustParents RefineSymbols + repository printrevstatistics + # Strict integrity enforces that all meta entries are in # the same LOD as the revision using them. At this point # this may not be true any longer. If a NTDB was excluded # then all revisions it shared with the trunk were moved # to the trunk LOD, however their meta entries will still @@ -111,11 +114,11 @@ # # ## ### ##### ######## ############# ## Internal methods proc FilterExcludedSymbols {} { - log write 3 filtersym "Filter out excluded symbols and users" + log write 3 filtersym "Remove the excluded symbols and their users" # We pull all the excluded symbols together into a table for # easy reference by the upcoming DELETE and other statements. # ('x IN table' clauses). @@ -159,13 +162,13 @@ # 'dbchild'. The associated 'dbparent' is squashed # instead. All parents of the joints are moved to the # trunk as well. set tjoint $link($joint) - set tlod [lindex [state run { + set tlod [state one { SELECT lod FROM revision WHERE rid = $tjoint - }] 0] + }] # Covnert db/parent/child into regular parent/child links. state run { UPDATE revision SET dbparent = NULL, parent = $joint WHERE rid = $tjoint ; UPDATE revision SET dbchild = NULL, child = $tjoint WHERE rid = $joint ; @@ -349,16 +352,16 @@ # # ... AND P.pid IN (SELECT B.sid # FROM branch B # WHERE B.root = R.rid) - if {![lindex [state run { + if {![state one { SELECT COUNT(*) FROM branch B WHERE B.sid = $pid AND B.root = $rid - }] 0]} { + }]} { incr tmax -1 set mxs [format $fmt $tmax] continue } @@ -406,17 +409,17 @@ # ... AND P.pid IN (SELECT BX.sid # FROM branch BX # WHERE BX.root = R.rid # AND BX.pos > B.pos) - if {![lindex [state run { + if {![state one { SELECT COUNT(*) FROM branch B WHERE B.sid = $pid AND B.root = $rid AND B.pos > $pos - }] 0]} { + }]} { incr bmax -1 set mxs [format $fmt $bmax] continue } @@ -498,10 +501,11 @@ } namespace eval ::vc::fossil::import::cvs::pass { namespace export filtersym namespace eval filtersym { + namespace import ::vc::fossil::import::cvs::repository namespace import ::vc::fossil::import::cvs::state namespace import ::vc::fossil::import::cvs::integrity namespace eval project { namespace import ::vc::fossil::import::cvs::project::sym }
Modified tools/cvs2fossil/lib/c2f_pinitcsets.tcl from [bb434d64fd] to [10710518c2].
@@ -131,10 +131,12 @@ state transaction { CreateRevisionChangesets ; # Group file revisions into csets. BreakInternalDependencies ; # Split the csets based on internal conflicts. CreateSymbolChangesets ; # Create csets for tags and branches. PersistTheChangesets + + repository printcsetstatistics } return } typemethod discard {} {
Modified tools/cvs2fossil/lib/c2f_prev.tcl from [bd4777ddd8] to [458c8956e4].
@@ -142,11 +142,11 @@ # dependencies cut before we remove them from # consideration, for documentation later. set breaks($best) $cross($best) - log write 6 csets "Best break @ $best, cuts [nsp $cross($best) dependency dependencies]" + log write 6 csets "Best break @ $best, cutting [nsp $cross($best) dependency dependencies]" # Note: The value of best is an abolute location in # myrevisions. Use the start of current to make it an # index absolute to current. @@ -286,13 +286,11 @@ return } typemethod loadcounter {} { # Initialize the counter from the state - set mycounter [lindex [state run { - SELECT MAX(cid) FROM changeset - }] 0] + set mycounter [state one { SELECT MAX(cid) FROM changeset }] return } proc PullInternalSuccessorRevisions {dv revisions} { upvar 1 $dv dependencies
Modified tools/cvs2fossil/lib/c2f_repository.tcl from [fccbbea0d2] to [6cbcf7b826].
@@ -89,11 +89,11 @@ # pass I results typemethod printstatistics {} { set prlist [TheProjects] set npr [llength $prlist] - log write 2 repository "Scanned [nsp $npr project]" + log write 2 repository "Statistics: Scanned [nsp $npr project]" if {$npr > 1} { set bmax [max [struct::list map $prlist [myproc .BaseLength]]] incr bmax 2 set bfmt %-${bmax}s @@ -106,11 +106,11 @@ } set keep {} foreach p $prlist { set nfiles [llength [$p filenames]] - set line "Project [format $bfmt \"[$p printbase]\"] : [format $nfmt $nfiles] [sp $nfiles file]" + set line "Statistics: Project [format $bfmt \"[$p printbase]\"] : [format $nfmt $nfiles] [sp $nfiles file]" if {$nfiles < 1} { append line ", dropped" } else { lappend keep $p } @@ -164,12 +164,59 @@ return } # pass II results typemethod printrevstatistics {} { - log write 2 repository "Scanned ..." - # number of revisions, symbols, repository wide, per project ... + log write 2 repository "Revision statistics" + # number of revisions, symbols, repository wide, and per project ... + + set rcount [state one { SELECT COUNT (*) FROM revision }] + set tcount [state one { SELECT COUNT (*) FROM tag }] + set bcount [state one { SELECT COUNT (*) FROM branch }] + set scount [state one { SELECT COUNT (*) FROM symbol }] + set acount [state one { SELECT COUNT (*) FROM author }] + set ccount [state one { SELECT COUNT (*) FROM cmessage }] + set fmt %[string length [max [list $rcount $tcount $bcount $scount $acount $ccount]]]s + + log write 2 repository "Statistics: [format $fmt $rcount] [sp $rcount revision]" + log write 2 repository "Statistics: [format $fmt $tcount] [sp $tcount tag]" + log write 2 repository "Statistics: [format $fmt $bcount] [sp $bcount branch branches]" + log write 2 repository "Statistics: [format $fmt $scount] [sp $scount symbol]" + log write 2 repository "Statistics: [format $fmt $acount] [sp $acount author]" + log write 2 repository "Statistics: [format $fmt $ccount] [sp $ccount {log message}]" + + set prlist [TheProjects] + set npr [llength $prlist] + + if {$npr > 1} { + set bmax [max [struct::list map $prlist [myproc .BaseLength]]] + incr bmax 2 + set bfmt %-${bmax}s + } else { + set bfmt %s + } + + foreach p $prlist { + set pid [$p id] + set prefix "Statistics: Project [format $bfmt \"[$p printbase]\"]" + regsub -all {[^ ]} $prefix { } blanks + set sep " : " + + set rcount [state one { SELECT COUNT (*) FROM revision R, file F WHERE R.fid = F.fid AND F.pid = $pid }] + set tcount [state one { SELECT COUNT (*) FROM tag T, file F WHERE T.fid = F.fid AND F.pid = $pid }] + set bcount [state one { SELECT COUNT (*) FROM branch B, file F WHERE B.fid = F.fid AND F.pid = $pid }] + set scount [state one { SELECT COUNT (*) FROM symbol WHERE pid = $pid }] + set acount [state one { SELECT COUNT (*) FROM author WHERE aid IN (SELECT DISTINCT aid FROM meta WHERE pid = $pid) }] + set ccount [state one { SELECT COUNT (*) FROM cmessage WHERE cid IN (SELECT DISTINCT cid FROM meta WHERE pid = $pid) }] + + log write 2 repository "$prefix$sep[format $fmt $rcount] [sp $rcount revision]" + log write 2 repository "$blanks$sep[format $fmt $tcount] [sp $tcount tag]" + log write 2 repository "$blanks$sep[format $fmt $bcount] [sp $bcount branch branches]" + log write 2 repository "$blanks$sep[format $fmt $scount] [sp $scount symbol]" + log write 2 repository "$blanks$sep[format $fmt $acount] [sp $acount author]" + log write 2 repository "$blanks$sep[format $fmt $ccount] [sp $ccount {log message}]" + } return } # pass II persistence typemethod persistrev {} { @@ -224,10 +271,53 @@ return } typemethod projectof {pid} { return $myprojmap($pid) + } + + + # pass IV+ results + typemethod printcsetstatistics {} { + log write 2 repository "Changeset statistics" + # number of revisions, symbols, repository wide, and per project ... + + set ccount [state one { SELECT COUNT (*) FROM changeset }] + set rcount [state one { SELECT COUNT (*) FROM changeset WHERE type = 0 }] + set scount [state one { SELECT COUNT (*) FROM changeset WHERE type = 1 }] + set fmt %[string length [max [list $ccount $rcount $scount]]]s + + log write 2 repository "Statistics: [format $fmt $ccount] [sp $ccount changeset]" + log write 2 repository "Statistics: [format $fmt $rcount] [sp $rcount {revision changeset}]" + log write 2 repository "Statistics: [format $fmt $scount] [sp $scount {symbol changeset}]" + + set prlist [TheProjects] + set npr [llength $prlist] + + if {$npr > 1} { + set bmax [max [struct::list map $prlist [myproc .BaseLength]]] + incr bmax 2 + set bfmt %-${bmax}s + } else { + set bfmt %s + } + + foreach p $prlist { + set pid [$p id] + set prefix "Statistics: Project [format $bfmt \"[$p printbase]\"]" + regsub -all {[^ ]} $prefix { } blanks + set sep " : " + + set ccount [state one { SELECT COUNT (*) FROM changeset WHERE pid = $pid }] + set rcount [state one { SELECT COUNT (*) FROM changeset WHERE pid = $pid AND type = 0 }] + set scount [state one { SELECT COUNT (*) FROM changeset WHERE pid = $pid AND type = 1 }] + + log write 2 repository "$prefix$sep[format $fmt $ccount] [sp $ccount changeset]" + log write 2 repository "$blanks$sep[format $fmt $rcount] [sp $rcount {revision changeset}]" + log write 2 repository "$blanks$sep[format $fmt $scount] [sp $scount {symbol changeset}]" + } + return } # # ## ### ##### ######## ############# ## State
Modified tools/cvs2fossil/lib/c2f_state.tcl from [03d1122d66] to [5356f2147d].
@@ -143,10 +143,14 @@ return } typemethod run {args} { return [uplevel 1 [linsert $args 0 $mystate eval]] + } + + typemethod one {args} { + return [lindex [uplevel 1 [linsert $args 0 $mystate eval]] 0] } typemethod transaction {script} { return [uplevel 1 [list $mystate transaction $script]] }