|
|
@@ -11,8 +11,9 @@ import time
|
|
11
|
11
|
|
|
12
|
12
|
GNUPLOT_COMMON = 'set terminal png transparent\nset size 0.5,0.5\n'
|
|
13
|
13
|
|
|
14
|
|
-def getoutput(cmd):
|
|
15
|
|
- print '>> %s' % cmd
|
|
|
14
|
+def getoutput(cmd, quiet = False):
|
|
|
15
|
+ if not quiet:
|
|
|
16
|
+ print '>> %s' % cmd
|
|
16
|
17
|
output = commands.getoutput(cmd)
|
|
17
|
18
|
return output
|
|
18
|
19
|
|
|
|
@@ -204,6 +205,22 @@ class GitDataCollector(DataCollector):
|
|
204
|
205
|
continue
|
|
205
|
206
|
(stamp, files) = parts[0:2]
|
|
206
|
207
|
self.files_by_stamp[int(stamp)] = int(files)
|
|
|
208
|
+
|
|
|
209
|
+ # extensions
|
|
|
210
|
+ self.extensions = {} # extension -> files, lines
|
|
|
211
|
+ lines = getoutput('git-ls-files').split('\n')
|
|
|
212
|
+ for line in lines:
|
|
|
213
|
+ base = os.path.basename(line)
|
|
|
214
|
+ if base.find('.') == -1:
|
|
|
215
|
+ ext = ''
|
|
|
216
|
+ else:
|
|
|
217
|
+ ext = base[(base.rfind('.') + 1):]
|
|
|
218
|
+
|
|
|
219
|
+ if ext not in self.extensions:
|
|
|
220
|
+ self.extensions[ext] = {'files': 0, 'lines': 0}
|
|
|
221
|
+
|
|
|
222
|
+ self.extensions[ext]['files'] += 1
|
|
|
223
|
+ self.extensions[ext]['lines'] += int(getoutput('wc -l < "%s"' % line, quiet = True))
|
|
207
|
224
|
|
|
208
|
225
|
def getActivityByDayOfWeek(self):
|
|
209
|
226
|
return self.activity_by_day_of_week
|
|
|
@@ -447,6 +464,7 @@ class HTMLReportCreator(ReportCreator):
|
|
447
|
464
|
f.write('<dt>Average file size</dt><dd>%.2f bytes</dd>' % ((100.0 * data.getTotalLOC()) / data.getTotalFiles()))
|
|
448
|
465
|
f.write('</dl>\n')
|
|
449
|
466
|
|
|
|
467
|
+ # Files :: File count by date
|
|
450
|
468
|
f.write('<h2>File count by date</h2>')
|
|
451
|
469
|
|
|
452
|
470
|
fg = open(path + '/files_by_date.dat', 'w')
|
|
|
@@ -458,6 +476,15 @@ class HTMLReportCreator(ReportCreator):
|
|
458
|
476
|
|
|
459
|
477
|
f.write('<h2>Average file size by date</h2>')
|
|
460
|
478
|
|
|
|
479
|
+ # Files :: Extensions
|
|
|
480
|
+ f.write('\n<h2>Extensions</h2>\n\n')
|
|
|
481
|
+ f.write('<table><tr><th>Extension</th><th>Files (%)</th><th>Lines (%)</th><th>Lines/file</th></tr>')
|
|
|
482
|
+ for ext in sorted(data.extensions.keys()):
|
|
|
483
|
+ files = data.extensions[ext]['files']
|
|
|
484
|
+ lines = data.extensions[ext]['lines']
|
|
|
485
|
+ f.write('<tr><td>%s</td><td>%d (%.2f%%)</td><td>%d (%.2f%%)</td><td>%d</td></tr>' % (ext, files, (100.0 * files) / data.getTotalFiles(), lines, (100.0 * lines) / data.getTotalLOC(), lines / files))
|
|
|
486
|
+ f.write('</table>')
|
|
|
487
|
+
|
|
461
|
488
|
f.write('</body></html>')
|
|
462
|
489
|
f.close()
|
|
463
|
490
|
|