[Libreoffice-commits] dev-tools.git: 2 commits - qa/bugzillaChecker.py

Xisco Fauli xiscofauli at libreoffice.org
Wed Feb 28 16:42:35 UTC 2018


 qa/bugzillaChecker.py |  317 ++++++++++++++++++++------------------------------
 1 file changed, 129 insertions(+), 188 deletions(-)

New commits:
commit 67053b0e6abe60521a843b8893108816a8a56812
Author: Xisco Fauli <xiscofauli at libreoffice.org>
Date:   Wed Feb 28 14:59:51 2018 +0100

    QA: Warn about confirmed bugs where the version hasn't been changed
    
    Besides: Improve the output and color the most recent issues

diff --git a/qa/bugzillaChecker.py b/qa/bugzillaChecker.py
index 5016693..cce8dff 100755
--- a/qa/bugzillaChecker.py
+++ b/qa/bugzillaChecker.py
@@ -10,6 +10,11 @@
 import common
 import datetime
 import re
+import colorama
+from colorama import Back
+
+#Use this variable to hightlight the most recent bugs
+coloredPeriodDays = 1
 
 reportPeriodDays = 7
 
@@ -29,12 +34,13 @@ retestUnconfirmedPeriodDays = 30
 
 retestNeedinfoPeriodDays = 60
 
-untouchedPeriodDays = 365
-
 inactiveAssignedPeriodDays = 90
 
 reopened6MonthsComment = "This bug has been in RESOLVED FIXED status for more than 6 months."
 
+#tuple of versions to check whether the version has been changed at confirmation time
+versionsToCheck = ('5', '6')
+
 def util_create_statList_checkers():
     return {
         'people': {}
@@ -68,6 +74,8 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
 
             creatorMail = row['creator']
 
+            rowVersion = row['version']
+
             common.util_check_bugzilla_mail(statList, creatorMail, row['creator_detail']['real_name'], creationDate, rowId)
 
             everConfirmed = False
@@ -89,6 +97,8 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
             reopenValue = None
             addAssigned = False
             addassignedValue = None
+            movedToNew = False
+            movedToNewValue = None
 
             for action in row['history']:
                 actionMail = action['who']
@@ -102,6 +112,7 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                 for change in action['changes']:
 
                     if change['field_name'] == 'version':
+                        versionChanged = True
                         if actionDate >= cfg['reportPeriod'] and (common.isOpen(rowStatus) or rowStatus == 'UNCONFIRMED'):
                             addedVersion = change['added']
                             removedVersion = change['removed']
@@ -186,6 +197,15 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                                     row['assigned_to'] == 'libreoffice-bugs at lists.freedesktop.org':
                                 util_add_to_result(lResults, 'add_assignee', resultValue)
 
+                            if addedStatus == 'NEW' and rowStatus == 'NEW' and row['product'] == 'LibreOffice' and \
+                                    row['severity'] != 'enhancement' and \
+                                    ('regression' not in rowKeywords and 'bisected' not in rowKeywords and \
+                                    'haveBacktrace' not in rowKeywords) and row['component'] != 'Documentation' and \
+                                    actionMail not in cfg['configQA']['ignore']['confirmer'] and \
+                                    (rowVersion.startswith(versionsToCheck) or rowVersion == 'unspecified'):
+                                movedToNew = True
+                                movedToNewValue = resultValue
+
                     elif change['field_name'] == 'resolution':
                         if newStatus:
                             addedStatus = newStatus + "_" + change['added']
@@ -261,7 +281,7 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                 if rowStatus == 'UNCONFIRMED' and comments[-1]['creator'] != creatorMail and \
                         datetime.datetime.strptime(row['last_change_time'], "%Y-%m-%dT%H:%M:%SZ") < cfg['retestUnconfirmedPeriod']:
                     value = [ rowId, row['last_change_time'], comments[-1]['creator'] ]
-                    util_add_to_result(lResults, 'untouchedUnconfirmed', value)
+                    util_add_to_result(lResults, 'untouched_unconfirmed', value)
 
                 elif rowStatus == 'NEEDINFO' and comments[-1]['creator'] == creatorMail and \
                         datetime.datetime.strptime(row['last_change_time'], "%Y-%m-%dT%H:%M:%SZ") >= cfg['retestNeedinfoPeriod']:
@@ -272,8 +292,7 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                 if rowStatus == 'UNCONFIRMED' and \
                         datetime.datetime.strptime(row['last_change_time'], "%Y-%m-%dT%H:%M:%SZ") < cfg['retestUnconfirmedPeriod']:
                     value = [ rowId, row['last_change_time'], creatorMail ]
-                    util_add_to_result(lResults, 'Unconfirmed_1_comment', value)
-
+                    util_add_to_result(lResults, 'unconfirmed_1_comment', value)
 
             if autoFixed:
                 util_add_to_result(lResults, 'auto_fixed', autoFixedValue)
@@ -281,7 +300,7 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
             if autoConfirmed:
                 util_add_to_result(lResults, 'auto_confirmed', autoConfirmedValue)
 
-            if newerVersion and row['version'] != 'unspecified':
+            if newerVersion and rowVersion != 'unspecified':
                 util_add_to_result(lResults, 'newer_version', newerVersionValue)
 
             if isReopened and not autoConfirmed:
@@ -295,6 +314,9 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
             if movedToNeedInfo and everConfirmed:
                 util_add_to_result(lResults, 'moved_to_needinfo', movedToNeedInfoValue)
 
+            if not versionChanged and movedToNew and not autoConfirmed:
+                util_add_to_result(lResults, 'version_not_changed', movedToNewValue)
+
             #Check bugs where:
             # 1. last comment is done by 'libreoffice-commits at lists.freedesktop.org'
             # 2. Penultimate comment is done by 'libreoffice-commits at lists.freedesktop.org',
@@ -311,7 +333,6 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
 
             if rowStatus == 'ASSIGNED' and \
                     datetime.datetime.strptime(row['last_change_time'], "%Y-%m-%dT%H:%M:%SZ") < cfg['inactiveAssignedPeriod'] and \
-                    'easyHack' not in row['keywords'] and \
                     rowId not in cfg['configQA']['ignore']['inactiveAssigned']:
                 value = [rowId, row['last_change_time'], row['assigned_to']]
                 util_add_to_result(lResults, 'inactive_assignee', value)
@@ -321,14 +342,33 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                 value = [rowId, '', '']
                 util_add_to_result(lResults, 'empty_alias', value)
 
+    colorama.init(autoreset=True)
     for dKey, dValue in lResults.items():
         if dValue:
             print('\n=== ' + dKey.replace('_', ' ') + ' ===')
             dValue = sorted(dValue, key=lambda x: x[1])
             for idx in range(len(dValue)):
-                print(
-                    str(idx + 1) + ' - ' + common.urlShowBug + str(dValue[idx][0]) + " - " + \
-                    str(dValue[idx][1] ) + " - " + str(dValue[idx][2]))
+                background = Back.RESET
+
+                if dValue[idx][1]:
+                    if isinstance(dValue[idx][1], str):
+                        dValue[idx][1] = datetime.datetime.strptime(dValue[idx][1], "%Y-%m-%dT%H:%M:%SZ")
+
+                    if dKey == 'inactive_assignee':
+                        if dValue[idx][1] >= cfg['coloredInactiveAssignedPeriod']:
+                            background = Back.GREEN
+                    elif dKey == 'untouched_unconfirmed' or dKey == 'unconfirmed_1_comment':
+                        if dValue[idx][1] >= cfg['coloredRetestUnconfirmedPeriod']:
+                            background = Back.GREEN
+                    elif dKey == 'ping_bug_fixed':
+                        if dValue[idx][1] >= cfg['coloredFixBugPingPeriod']:
+                            background = Back.GREEN
+                    else:
+                        if dValue[idx][1] >= cfg['coloredReportPeriod']:
+                            background = Back.GREEN
+
+                print(background + "{:<3} | {:<58} | {} | {}".format(
+                    str(idx + 1), common.urlShowBug + str(dValue[idx][0]), str(dValue[idx][1] ), str(dValue[idx][2])))
 
     for k, v in statList['people'].items():
         if not statList['people'][k]['name']:
@@ -342,7 +382,8 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                 isEasyHack = False
                 if 'easyHack' in bugzillaData['bugs'][str(lBugs[idx])]['keywords']:
                         isEasyHack = True
-                print(str(idx + 1) + ' - ' + common.urlShowBug + str(lBugs[idx]) + ' - easyHack: ' + str(isEasyHack))
+                print("{:<3} | {:<58} | {}".format(
+                    str(idx + 1), common.urlShowBug + str(lBugs[idx]), 'easyHack: ' + str(isEasyHack)))
 
         if statList['people'][k]['oldest'] >= cfg['memberPeriod'] and statList['people'][k]['newest'] >= cfg['reportPeriod'] and \
                 len(statList['people'][k]['bugs']) >= memberBugs and statList['people'][k]['email'] not in cfg['configQA']['ignore']['members']:
@@ -365,16 +406,19 @@ def runCfg():
     cfg = common.get_config()
     cfg['todayDate'] = datetime.datetime.now().replace(hour=0, minute=0,second=0)
     cfg['reportPeriod'] = common.util_convert_days_to_datetime(cfg, reportPeriodDays)
+    cfg['coloredReportPeriod'] = common.util_convert_days_to_datetime(cfg, coloredPeriodDays)
     cfg['newUserPeriod'] = common.util_convert_days_to_datetime(cfg, newUserPeriodDays)
     cfg['oldUserPeriod'] = common.util_convert_days_to_datetime(cfg, oldUserPeriodDays)
     cfg['oldUserPeriod2'] = common.util_convert_days_to_datetime(cfg, oldUserPeriod2Days)
     cfg['memberPeriod'] = common.util_convert_days_to_datetime(cfg, memberPeriodDays)
     cfg['fixBugPingPeriod'] = common.util_convert_days_to_datetime(cfg, fixBugPingPeriodDays)
     cfg['fixBugPingDiff'] = common.util_convert_days_to_datetime(cfg, fixBugPingPeriodDays + reportPeriodDays)
-    cfg['untouchedPeriod'] = common.util_convert_days_to_datetime(cfg, untouchedPeriodDays)
+    cfg['coloredFixBugPingPeriod'] = common.util_convert_days_to_datetime(cfg, coloredPeriodDays + fixBugPingPeriodDays)
     cfg['retestUnconfirmedPeriod'] = common.util_convert_days_to_datetime(cfg, retestUnconfirmedPeriodDays)
+    cfg['coloredRetestUnconfirmedPeriod'] = common.util_convert_days_to_datetime(cfg, coloredPeriodDays + retestUnconfirmedPeriodDays)
     cfg['retestNeedinfoPeriod'] = common.util_convert_days_to_datetime(cfg, retestNeedinfoPeriodDays)
     cfg['inactiveAssignedPeriod'] = common.util_convert_days_to_datetime(cfg, inactiveAssignedPeriodDays)
+    cfg['coloredInactiveAssignedPeriod'] = common.util_convert_days_to_datetime(cfg, coloredPeriodDays + inactiveAssignedPeriodDays)
     return cfg
 
 if __name__ == '__main__':
commit cbfa8e556a41bc6a67d062fe79bdb2a41f0a9ce2
Author: Xisco Fauli <xiscofauli at libreoffice.org>
Date:   Mon Feb 26 15:17:33 2018 +0100

    QA: Sort all warnings by date
    
    Besides, simplify code

diff --git a/qa/bugzillaChecker.py b/qa/bugzillaChecker.py
index 084a3b0..5016693 100755
--- a/qa/bugzillaChecker.py
+++ b/qa/bugzillaChecker.py
@@ -40,6 +40,12 @@ def util_create_statList_checkers():
         'people': {}
         }
 
+def util_add_to_result(lResults, key, value):
+    if  key not in lResults:
+        lResults[key] = []
+    lResults[key].append(value)
+
+
 def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
     print("Analyzing bugzilla chekers\n", end="", flush=True)
 
@@ -64,47 +70,33 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
 
             common.util_check_bugzilla_mail(statList, creatorMail, row['creator_detail']['real_name'], creationDate, rowId)
 
-            actionMail = None
             everConfirmed = False
             autoConfirmed = False
-            autoConfirmMail = ""
+            autoConfirmedValue = None
             versionChanged = False
-            versionChangedMail = ""
+            versionChangedValue = None
             oldestVersion = 999999
             newerVersion = False
-            newerVersionMail = ""
+            newerVersionValue = None
             autoFixed = False
-            autoFixedMail = ""
-            addAssigned = False
-            addAssignedMail = ""
-            removeAssigned = False
-            removeAssignedMail = ""
-            addAssignee = False
-            addAssigneeMail = ""
-            removeAssignee = False
-            removeAssigneeMail = ""
-            backPortAdded = False
-            backPortAddedEmail = ""
-            targetRemoved = False
-            targetRemovedEmail = ""
-            lastAssignedEmail = ""
-            patchAdded = False
-            regressionAdded = False
-            possibleRegressionAdded = False
-            isReopened6Months = False
+            autoFixedValue = None
+            lastAssignedValue = None
             closeDate = None
-            reopener6MonthsEmail = ""
             movedToFixed = False
             movedToNeedInfo = False
-            movedToNeedInfomail = ""
+            movedToNeedInfoValue = None
             isReopened = False
-            reopenerEmail = ""
+            reopenValue = None
+            addAssigned = False
+            addassignedValue = None
 
             for action in row['history']:
                 actionMail = action['who']
                 actionDate = datetime.datetime.strptime(action['when'], "%Y-%m-%dT%H:%M:%SZ")
                 common.util_check_bugzilla_mail(statList, actionMail, '', actionDate, rowId)
 
+                resultValue = [ rowId, actionDate, actionMail ]
+
                 # Use this variable in case the status is set before the resolution
                 newStatus = None
                 for change in action['changes']:
@@ -135,23 +127,23 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                                 newerVersion = False
                             else:
                                 newerVersion = True
-                                newerVersionMail = actionMail
+                                newerVersionValue = resultValue
 
                     elif change['field_name'] == 'status':
                         addedStatus = change['added']
                         removedStatus = change['removed']
 
                         if rowStatus == 'ASSIGNED' and addedStatus == 'ASSIGNED':
-                            lastAssignedEmail = actionMail
+                            lastAssignedValue = resultValue
 
                         if addedStatus == 'REOPENED' and rowStatus == 'REOPENED' and not movedToFixed:
                             isReopened = True
-                            reopenerEmail = actionMail
+                            reopenValue = resultValue
 
                         if actionDate >= cfg['reportPeriod'] and addedStatus == 'NEEDINFO' and \
                                 rowStatus == 'NEEDINFO' and common.isOpen(removedStatus):
                             movedToNeedInfo = True
-                            movedToNeedInfoMail = actionMail
+                            movedToNeedInfoValue = resultValue
 
                         if movedToNeedInfo and removedStatus == 'NEEDINFO':
                             movedToNeedInfo = False
@@ -165,8 +157,8 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                         #if any other user moves it to open ( ASSIGNED, NEW or REOPENED ),
                         #the bug is no longer autoconfirmed
                         if not everConfirmed and common.isOpen(addedStatus) and actionMail != creatorMail:
-                                everConfirmed = True
-                                autoConfirmed = False
+                            everConfirmed = True
+                            autoConfirmed = False
 
                         #Check for autoconfirmed bugs:
                         #Bug's status is open ( ASSIGNED, NEW or REOPENED ), moved to open by the reporter
@@ -176,7 +168,7 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                             common.isOpen(rowStatus) and common.isOpen(addedStatus) and 'bisected' not in rowKeywords and \
                             creatorMail not in cfg['configQA']['ignore']['autoConfirmed']:
                                 autoConfirmed = True
-                                autoConfirmedMail = actionMail
+                                autoConfirmedValue = resultValue
 
                         if autoFixed and removedStatus == 'RESOLVED':
                             autoFixed = False
@@ -185,16 +177,14 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                             if actionMail == creatorMail and addedStatus == 'RESOLVED_FIXED' and \
                                     rowStatus == 'RESOLVED_FIXED' and 'target:' not in row['whiteboard']:
                                 autoFixed = True
-                                autoFixedMail = actionMail
+                                autoFixedValue = resultValue
 
                             if removedStatus == "ASSIGNED" and addedStatus == "NEW" and \
                                     rowStatus == "NEW" and row['assigned_to'] != 'libreoffice-bugs at lists.freedesktop.org':
-                                removeAssignee = True
-                                removeAssigneeMail = actionMail
+                                util_add_to_result(lResults, 'remove_assignee', resultValue)
                             elif addedStatus == "ASSIGNED" and rowStatus == "ASSIGNED" and \
                                     row['assigned_to'] == 'libreoffice-bugs at lists.freedesktop.org':
-                                addAssignee = True
-                                addAssigneeMail = actionMail
+                                util_add_to_result(lResults, 'add_assignee', resultValue)
 
                     elif change['field_name'] == 'resolution':
                         if newStatus:
@@ -206,38 +196,42 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                             isReopened = False
                             if common.isOpen(rowStatus):
                                 closeDate = actionDate
-                        elif change['removed'] == 'FIXED' and closeDate and actionDate >= cfg['reportPeriod'] and \
-                                (actionDate - closeDate).days > 180:
-                            isReopened6Months = True
-                            reopener6MonthsEmail = actionMail
-
+                        elif change['removed'] == 'FIXED' and actionDate >= cfg['reportPeriod'] and \
+                                closeDate and (actionDate - closeDate).days > 180:
+                            util_add_to_result(lResults, 'reopened_6_months', resultValue)
 
                     elif change['field_name'] == 'keywords':
                         if actionDate >= cfg['reportPeriod']:
                             keywordsAdded = change['added'].split(", ")
                             for keyword in keywordsAdded:
                                 if keyword in common.keywords_list and keyword in rowKeywords:
-                                        if keyword == 'patch':
-                                            patchAdded = True
+                                        if keyword == 'patch' and (common.isOpen(rowStatus) or rowStatus == 'UNCONFIRMED'):
+                                            util_add_to_result(lResults, 'patch_added', resultValue)
 
-                                        if keyword == 'regression':
-                                            regressionAdded = True
+                                        if keyword == 'regression' and (common.isOpen(rowStatus) or rowStatus == 'UNCONFIRMED') and \
+                                                'bibisectRequest' not in rowKeywords and 'bibisected' not in rowKeywords and \
+                                                'bisected' not in rowKeywords and 'preBibisect' not in rowKeywords and \
+                                                'bibisectNotNeeded' not in rowKeywords and 'notBibisectable' not in rowKeywords:
+                                            util_add_to_result(lResults, 'regression_added', resultValue)
 
-                                        if keyword == 'possibleRegression':
-                                            possibleRegressionAdded = True
+                                        if keyword == 'possibleRegression' and 'possibleRegression' in rowKeywords:
+                                            util_add_to_result(lResults, 'possibleregression_added', resultValue)
 
                     elif change['field_name'] == 'whiteboard':
                         if actionDate >= cfg['reportPeriod']:
                             for whiteboard in change['added'].split(' '):
                                 if 'backportrequest' in whiteboard.lower() and \
                                         whiteboard in row['whiteboard'] and common.isOpen(rowStatus):
-                                    backPortAdded = True
-                                    backPortAddedMail = actionMail
+                                    util_add_to_result(lResults, 'backport_added', resultValue)
 
                             for whiteboard in change['removed'].split(' '):
-                                if 'target' in whiteboard.lower() and whiteboard.split(":")[1] not in row["whiteboard"]:
-                                    targetRemoved = True
-                                    targetRemovedMail = actionMail
+                                if 'target:' in whiteboard.lower() and whiteboard.split(":")[1] not in row["whiteboard"]:
+                                    util_add_to_result(lResults, 'target_removed', resultValue)
+
+                    elif change['field_name'] == 'cf_crashreport':
+                        crashSignature = row['cf_crashreport']
+                        if crashSignature and not crashSignature.startswith('["'):
+                            util_add_to_result(lResults, 'incorrect_crash_signature', resultValue)
 
                     elif change['field_name'] == 'assigned_to':
                         if actionDate >= cfg['reportPeriod']:
@@ -247,12 +241,10 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                                     row['assigned_to'] != 'libreoffice-bugs at lists.freedesktop.org' and \
                                     ( rowStatus == 'NEW' or rowStatus == 'UNCONFIRMED'):
                                 addAssigned = True
-                                addAssignedMail = actionMail
+                                addAssignedValue = resultValue
                             if addedAssignee == "libreoffice-bugs at lists.freedesktop.org" and \
-                                    row['assigned_to'] == 'libreoffice-bugs at lists.freedesktop.org' and \
-                                    rowStatus == 'ASSIGNED':
-                                removeAssigned = True
-                                removeAssignedMail = actionMail
+                                    row['assigned_to'] == 'libreoffice-bugs at lists.freedesktop.org' and rowStatus == 'ASSIGNED':
+                                util_add_to_result(lResults, 'remove_assigned_status', resultValue)
 
             commentMail = None
             comments = row['comments'][1:]
@@ -263,135 +255,45 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                 common.util_check_bugzilla_mail(statList, commentMail, '', commentDate, rowId)
 
                 if common.isOpen(rowStatus) and reopened6MonthsComment in comment['text']:
-                    isReopened6Months = True
+                    util_add_to_result(lResults, 'reopened_6_months', [rowId, '', ''])
 
             if len(comments) > 0:
                 if rowStatus == 'UNCONFIRMED' and comments[-1]['creator'] != creatorMail and \
                         datetime.datetime.strptime(row['last_change_time'], "%Y-%m-%dT%H:%M:%SZ") < cfg['retestUnconfirmedPeriod']:
-                        if 'untouchedUnconfirmed' not in lResults:
-                            lResults['untouchedUnconfirmed'] = []
-                        tup = (rowId, row['last_change_time'])
-                        lResults['untouchedUnconfirmed'].append(tup)
+                    value = [ rowId, row['last_change_time'], comments[-1]['creator'] ]
+                    util_add_to_result(lResults, 'untouchedUnconfirmed', value)
+
                 elif rowStatus == 'NEEDINFO' and comments[-1]['creator'] == creatorMail and \
                         datetime.datetime.strptime(row['last_change_time'], "%Y-%m-%dT%H:%M:%SZ") >= cfg['retestNeedinfoPeriod']:
-                        if 'NeedInfoProvided' not in lResults:
-                            lResults['NeedInfoProvided'] = []
-                        tup = (rowId, row['last_change_time'])
-                        lResults['NeedInfoProvided'].append(tup)
+                    value = [ rowId, row['last_change_time'], comments[-1]['creator'] ]
+                    util_add_to_result(lResults, 'needinfo_provided', value)
+
             else:
                 if rowStatus == 'UNCONFIRMED' and \
                         datetime.datetime.strptime(row['last_change_time'], "%Y-%m-%dT%H:%M:%SZ") < cfg['retestUnconfirmedPeriod']:
-                    if 'Unconfirmed1Comment' not in lResults:
-                        lResults['Unconfirmed1Comment'] = []
-                    tup = (rowId, row['last_change_time'])
-                    lResults['Unconfirmed1Comment'].append(tup)
-
-            for person in row['cc_detail']:
-                email = person['email']
-                if commentMail == email or actionMail == email:
-                    common.util_check_bugzilla_mail(statList, email, person['real_name'])
-
-            if (common.isOpen(rowStatus) or rowStatus == 'UNCONFIRMED') and regressionAdded and \
-                    'bibisectRequest' not in rowKeywords and 'bibisected' not in rowKeywords and \
-                    'bisected' not in rowKeywords and 'preBibisect' not in rowKeywords and \
-                    'bibisectNotNeeded' not in rowKeywords and 'notBibisectable' not in rowKeywords:
-                if 'regressionAdded' not in lResults:
-                    lResults['regressionAdded'] = []
-                tup = (rowId, '')
-                lResults['regressionAdded'].append(tup)
-
-            if possibleRegressionAdded and 'possibleRegression' in rowKeywords:
-                if 'possibleRegressionAdded' not in lResults:
-                    lResults['possibleRegressionAdded'] = []
-                tup = (rowId, '')
-                lResults['possibleRegressionAdded'].append(tup)
+                    value = [ rowId, row['last_change_time'], creatorMail ]
+                    util_add_to_result(lResults, 'Unconfirmed_1_comment', value)
+
 
             if autoFixed:
-                if 'autoFixed' not in lResults:
-                    lResults['autoFixed'] = []
-                tup = (rowId, autoFixedMail)
-                lResults['autoFixed'].append(tup)
+                util_add_to_result(lResults, 'auto_fixed', autoFixedValue)
 
             if autoConfirmed:
-                if 'autoConfirmed' not in lResults:
-                    lResults['autoConfirmed'] = []
-                tup = (rowId, autoConfirmedMail)
-                lResults['autoConfirmed'].append(tup)
+                util_add_to_result(lResults, 'auto_confirmed', autoConfirmedValue)
 
             if newerVersion and row['version'] != 'unspecified':
-                if 'newerVersion' not in lResults:
-                    lResults['newerVersion'] =  []
-                tup = (rowId, newerVersionMail)
-                lResults['newerVersion'].append(tup)
-
-            if (common.isOpen(rowStatus) or rowStatus == 'UNCONFIRMED') and patchAdded:
-                if 'patchAdded' not in lResults:
-                    lResults['patchAdded'] = []
-                tup = (rowId, '')
-                lResults['patchAdded'].append(tup)
-
-            crashSignature = row['cf_crashreport']
-            if crashSignature and not crashSignature.startswith('["'):
-                if 'crashSignature' not in lResults:
-                    lResults['crashSignature'] = []
-                tup = (rowId, '')
-                lResults['crashSignature'].append(tup)
-
-            if isReopened6Months:
-                if 'reopened6Months' not in lResults:
-                    lResults['reopened6Months'] = []
-                tup = (rowId, reopener6MonthsEmail)
-                lResults['reopened6Months'].append(tup)
+                util_add_to_result(lResults, 'newer_version', newerVersionValue)
 
             if isReopened and not autoConfirmed:
-                if 'reopened' not in lResults:
-                    lResults['reopened'] = []
-                tup = (rowId, reopenerEmail)
-                lResults['reopened'].append(tup)
+                util_add_to_result(lResults, 'is_reopened', reopenValue)
 
             #In case the reporter assigned the bug to himself at creation time
             if addAssigned or (creationDate >= cfg['reportPeriod'] and row['assigned_to'] != 'libreoffice-bugs at lists.freedesktop.org' and \
                     (rowStatus == 'NEW' or rowStatus == 'UNCONFIRMED')):
-                if 'addAssigned' not in lResults:
-                    lResults['addAssigned'] = []
-                tup = (rowId, addAssignedMail)
-                lResults['addAssigned'].append(tup)
-
-            if removeAssigned:
-                if 'removeAssigned' not in lResults:
-                    lResults['removeAssigned'] = []
-                tup = (rowId, removeAssignedMail)
-                lResults['removeAssigned'].append(tup)
+                util_add_to_result(lResults, 'change_status_assigned', addAssignedValue)
 
             if movedToNeedInfo and everConfirmed:
-                if 'movedToNeedInfo' not in lResults:
-                    lResults['movedToNeedInfo'] = []
-                tup = (rowId, movedToNeedInfoMail)
-                lResults['movedToNeedInfo'].append(tup)
-
-            if addAssignee:
-                if 'addAssignee' not in lResults:
-                    lResults['addAssignee'] =[]
-                tup = (rowId, addAssigneeMail)
-                lResults['addAssignee'].append(tup)
-
-            if removeAssignee:
-                if 'removeAssignee' not in lResults:
-                    lResults['removeAssignee'] =[]
-                tup = (rowId, removeAssigneeMail)
-                lResults['removeAssignee'].append(tup)
-
-            if backPortAdded:
-                if 'backPortAdded' not in lResults:
-                    lResults['backPortAdded'] = []
-                tup = (rowId, backPortAddedMail)
-                lResults['backPortAdded'].append(tup)
-
-            if targetRemoved:
-                if 'targetRemoved' not in lResults:
-                    lResults['targetRemoved'] = []
-                tup = (rowId, targetRemovedMail)
-                lResults['targetRemoved'].append(tup)
+                util_add_to_result(lResults, 'moved_to_needinfo', movedToNeedInfoValue)
 
             #Check bugs where:
             # 1. last comment is done by 'libreoffice-commits at lists.freedesktop.org'
@@ -404,34 +306,29 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
                     'evert' not in comments[-2]['text'])) and \
                     commentDate < cfg['fixBugPingPeriod'] and commentDate >= cfg['fixBugPingDiff'] and \
                     'easyHack' not in row['keywords']:
-                if 'fixBugPing' not in lResults:
-                    lResults['fixBugPing'] = []
-                tup = (rowId, '')
-                lResults['fixBugPing'].append(tup)
+                value = [rowId, commentDate, row['assigned_to']]
+                util_add_to_result(lResults, 'ping_bug_fixed', value)
 
             if rowStatus == 'ASSIGNED' and \
                     datetime.datetime.strptime(row['last_change_time'], "%Y-%m-%dT%H:%M:%SZ") < cfg['inactiveAssignedPeriod'] and \
                     'easyHack' not in row['keywords'] and \
                     rowId not in cfg['configQA']['ignore']['inactiveAssigned']:
-                if 'inactiveAssigned' not in lResults:
-                    lResults['inactiveAssigned'] = []
-                tup = (rowId, lastAssignedEmail)
-                lResults['inactiveAssigned'].append(tup)
+                value = [rowId, row['last_change_time'], row['assigned_to']]
+                util_add_to_result(lResults, 'inactive_assignee', value)
 
         elif row['summary'].lower().startswith('[meta]'):
             if not row['alias'] and common.isOpen(row['status']):
-                if 'emptyAlias' not in lResults:
-                    lResults['emptyAlias'] = []
-                tup = (rowId, '')
-                lResults['emptyAlias'].append(tup)
-
+                value = [rowId, '', '']
+                util_add_to_result(lResults, 'empty_alias', value)
 
     for dKey, dValue in lResults.items():
         if dValue:
-            print('\n=== ' + dKey + ' ===')
+            print('\n=== ' + dKey.replace('_', ' ') + ' ===')
             dValue = sorted(dValue, key=lambda x: x[1])
             for idx in range(len(dValue)):
-                print(str(idx + 1) + ' - ' + common.urlShowBug + str(dValue[idx][0]) + " - " + str(dValue[idx][1]))
+                print(
+                    str(idx + 1) + ' - ' + common.urlShowBug + str(dValue[idx][0]) + " - " + \
+                    str(dValue[idx][1] ) + " - " + str(dValue[idx][2]))
 
     for k, v in statList['people'].items():
         if not statList['people'][k]['name']:
@@ -449,14 +346,14 @@ def analyze_bugzilla_checkers(statList, bugzillaData, cfg):
 
         if statList['people'][k]['oldest'] >= cfg['memberPeriod'] and statList['people'][k]['newest'] >= cfg['reportPeriod'] and \
                 len(statList['people'][k]['bugs']) >= memberBugs and statList['people'][k]['email'] not in cfg['configQA']['ignore']['members']:
-            print('\nNew member: ' + statList['people'][k]['name'] + " ("  + statList['people'][k]['email'] + ")")
+            print('\n=== New MEMBER: ' + statList['people'][k]['name'] + " ("  + statList['people'][k]['email'] + ")")
             print('\tOldest: ' + statList['people'][k]['oldest'].strftime("%Y-%m-%d"))
             print('\tNewest: ' + statList['people'][k]['newest'].strftime("%Y-%m-%d"))
             print('\tTotal: ' + str(len(statList['people'][k]['bugs'])))
 
         if statList['people'][k]['newest'] < cfg['oldUserPeriod'] and statList['people'][k]['newest'] >= cfg['oldUserPeriod2'] and \
                 len(statList['people'][k]['bugs']) >= oldUserBugs and statList['people'][k]['email'] not in cfg['configQA']['ignore']['oldContributors']:
-            print('\nOld Contributor: ' + statList['people'][k]['name'] + " ("  + statList['people'][k]['email'] + ")")
+            print('\n=== Old Contributor: ' + statList['people'][k]['name'] + " ("  + statList['people'][k]['email'] + ")")
             print('\tOldest: ' + statList['people'][k]['oldest'].strftime("%Y-%m-%d"))
             print('\tNewest: ' + statList['people'][k]['newest'].strftime("%Y-%m-%d"))
             print('\tTotal: ' + str(len(statList['people'][k]['bugs'])))


More information about the Libreoffice-commits mailing list