Diff
Not logged in

Differences From:

File tools/cvs2fossil/lib/c2f_repository.tcl part of check-in [67600f777b] - Fixed handling of project objects when persisting them. Fill the project map. This is needed if the pass is not skipped. For the skip case we already initialize the project map when 'load'ing from the state. by aku on 2007-11-14 05:08:43. [view]

To:

File tools/cvs2fossil/lib/c2f_repository.tcl part of check-in [38b967dcf5] - Merge aku's CVS import changes into the main line. Fix a small bug in diff.c. by drh on 2007-11-17 00:29:42. Also file tools/cvs2fossil/lib/c2f_repository.tcl part of check-in [96b7bfb834] - 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. by aku on 2007-11-16 08:32:40. [view]

@@ -90,9 +90,9 @@
     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
@@ -107,9 +107,9 @@
 
 	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
@@ -165,10 +165,57 @@
     }
 
     # 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
@@ -225,8 +272,51 @@
     }
 
     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