[Libreoffice-commits] dev-tools.git: scripts/regression-hotspots.py
Bjoern Michaelsen
bjoern.michaelsen at canonical.com
Mon Oct 14 03:04:05 PDT 2013
scripts/regression-hotspots.py | 69 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 69 insertions(+)
New commits:
commit fc7dcf4ebef84c66f59f7188d02c8706a0993b51
Author: Bjoern Michaelsen <bjoern.michaelsen at canonical.com>
Date: Mon Oct 14 12:03:28 2013 +0200
fdo#66750: identify regression hotspots
diff --git a/scripts/regression-hotspots.py b/scripts/regression-hotspots.py
new file mode 100755
index 0000000..0b94792
--- /dev/null
+++ b/scripts/regression-hotspots.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python3
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+import sys
+import re
+import sh
+from urllib.request import urlopen, URLError
+from io import BytesIO
+
+def get_fixed_regression_bugs():
+ url = 'https://bugs.freedesktop.org/buglist.cgi?bug_status=UNCONFIRMED&bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&bug_status=RESOLVED&bug_status=VERIFIED&bug_status=CLOSED&bug_status=NEEDINFO&bug_status=PLEASETEST&columnlist=&keywords=regression%2C%20&keywords_type=allwords&limit=0&list_id=354018&product=LibreOffice&query_format=advanced&resolution=FIXED&ctype=csv&human=0'
+ try:
+ resp = urlopen(url)
+ except URLError:
+ sys.stderr.write('Error fetching {}'.format(url))
+ sys.exit(1)
+ bug_ids=[]
+ for line in [raw.decode('utf-8').strip('\n') for raw in BytesIO(resp.read())][1:]:
+ bug_ids.append(int(line))
+ return bug_ids
+
+def get_dir_counts(file_counts, level):
+ dir_counts = {}
+ for (filename, count) in file_counts.items():
+ fileparts = filename.split('/')
+ if len(fileparts) > level:
+ dirpart = '/'.join(fileparts[:level])
+ if dirpart in dir_counts:
+ dir_counts[dirpart]+=1
+ else:
+ dir_counts[dirpart]=1
+ return dir_counts
+
+def print_counts(counts):
+ printorder = reversed(sorted((count, name) for (name, count) in counts.items()))
+ for count in printorder:
+ print('%5d %s' % (count[0], count[1]))
+
+if __name__ == '__main__':
+ file_counts = {}
+ statregex = re.compile('^ ([^ ]+) \|')
+ fixed_regression_ids = get_fixed_regression_bugs()
+ sys.stderr.write('found %d fixed regressions: %s\n' % (len(fixed_regression_ids), fixed_regression_ids))
+ for bug_id in fixed_regression_ids:
+ sys.stderr.write('working on bug %d\n' % bug_id)
+ logstat = sh.git('--no-pager', 'log', '--grep', 'fdo#%d' % bug_id, '--stat')
+ for line in logstat:
+ match = statregex.search(line)
+ if match and match.group(1):
+ filename = match.group(1)
+ sys.stderr.write('regression fix touched file: %s\n' % filename)
+ if filename in file_counts:
+ file_counts[filename]+=1
+ else:
+ file_counts[filename]=1
+ print('top level dirs:')
+ print_counts(get_dir_counts(file_counts, 1))
+ print('\nsecond level dirs:')
+ print_counts(get_dir_counts(file_counts, 2))
+ print('\nthird level dirs:')
+ print_counts(get_dir_counts(file_counts, 3))
+ print('\nfiles:')
+ print_counts(file_counts)
More information about the Libreoffice-commits
mailing list