From 18b9921556556fc4331a6006a82db9c260c6cf2c Mon Sep 17 00:00:00 2001 From: Heikki Hokkanen Date: Tue, 14 Aug 2007 15:22:59 +0300 Subject: [PATCH] Files: Extensions (table). --- doc/TODO.txt | 12 ++---------- statgit | 31 +++++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/doc/TODO.txt b/doc/TODO.txt index b14e2e2..d2a4cc5 100644 --- a/doc/TODO.txt +++ b/doc/TODO.txt @@ -54,6 +54,7 @@ - List of authors - show only first 10 and rest on separate page? - DONE (T): author, commits (%), LOC?, first commit, last commit + - TODO days/time as developer - DONE (T): Developer of the Month: month, author, commits, LOC? - DONE (T): Author of Year @@ -64,9 +65,7 @@ - Average revisions per file - DONE (G) File Count by Date: x = date, y = files - (G) Average file size: x = date, y = lines/file - - (T) File Extensions (or mime types from "file"?): extension, files (%), lines (%), lines/file - - extensions: ext -> { files, lines? } - - git-ls-files -> basename -> check ext + - DONE (T) File Extensions (or mime types from "file"?): extension, files (%), lines (%), lines/file - (T) Largest Files? - (T) Files With Most Revisions? @@ -127,16 +126,9 @@ - "Repo heatmap"? - LOC and Churn -[Graphics] -- Use gnuplot, graphviz etc ? - -[Usage] -- $ statgit [-o html] /path/to/git /output/dir - [name] - statgit or gitstats (no google hits for either) [Misc] - use sortable.js ? - could show some statistics from last year, month, etc... pisg-like? -- style: tabs at top for different pages diff --git a/statgit b/statgit index cce36fc..cd4c763 100755 --- a/statgit +++ b/statgit @@ -11,8 +11,9 @@ import time GNUPLOT_COMMON = 'set terminal png transparent\nset size 0.5,0.5\n' -def getoutput(cmd): - print '>> %s' % cmd +def getoutput(cmd, quiet = False): + if not quiet: + print '>> %s' % cmd output = commands.getoutput(cmd) return output @@ -204,6 +205,22 @@ class GitDataCollector(DataCollector): continue (stamp, files) = parts[0:2] self.files_by_stamp[int(stamp)] = int(files) + + # extensions + self.extensions = {} # extension -> files, lines + lines = getoutput('git-ls-files').split('\n') + for line in lines: + base = os.path.basename(line) + if base.find('.') == -1: + ext = '' + else: + ext = base[(base.rfind('.') + 1):] + + if ext not in self.extensions: + self.extensions[ext] = {'files': 0, 'lines': 0} + + self.extensions[ext]['files'] += 1 + self.extensions[ext]['lines'] += int(getoutput('wc -l < "%s"' % line, quiet = True)) def getActivityByDayOfWeek(self): return self.activity_by_day_of_week @@ -447,6 +464,7 @@ class HTMLReportCreator(ReportCreator): f.write('
Average file size
%.2f bytes
' % ((100.0 * data.getTotalLOC()) / data.getTotalFiles())) f.write('\n') + # Files :: File count by date f.write('

File count by date

') fg = open(path + '/files_by_date.dat', 'w') @@ -458,6 +476,15 @@ class HTMLReportCreator(ReportCreator): f.write('

Average file size by date

') + # Files :: Extensions + f.write('\n

Extensions

\n\n') + f.write('') + for ext in sorted(data.extensions.keys()): + files = data.extensions[ext]['files'] + lines = data.extensions[ext]['lines'] + f.write('' % (ext, files, (100.0 * files) / data.getTotalFiles(), lines, (100.0 * lines) / data.getTotalLOC(), lines / files)) + f.write('
ExtensionFiles (%)Lines (%)Lines/file
%s%d (%.2f%%)%d (%.2f%%)%d
') + f.write('') f.close() -- 2.11.4.GIT