]> xenbits.xensource.com Git - people/larsk/xenproject-org-gitdm.git/commitdiff
Added functionality to create vendor breakdowns for reviews and ACKs
authorLars Kurth <lars.kurth@xenproject.org>
Tue, 14 Jul 2015 20:24:53 +0000 (16:24 -0400)
committerLars Kurth <lars.kurth@xenproject.org>
Tue, 14 Jul 2015 20:24:53 +0000 (16:24 -0400)
database.py
gitdm
reports.py

index 0bede164af110ee8def51ba2ee7cea2d62285150..73d7c2d3dbb32558b2a0ed4bc238ead1a08569d8 100644 (file)
@@ -145,6 +145,7 @@ class Employer:
         self.name = name
         self.added = self.removed = self.count = self.changed = 0
         self.sobs = 0
+        self.reviews = 0
         self.hackers = [ ]
 
     def AddCSet (self, patch):
@@ -158,6 +159,9 @@ class Employer:
     def AddSOB (self):
         self.sobs += 1
 
+    def AddReview (self):
+        self.reviews += 1
+
 Employers = { }
 
 def GetEmployer (name):
diff --git a/gitdm b/gitdm
index 836b7ec265450fbb270c931137200a2ba0cd39a7..d43ecd7d9ea2416682e06a4944aff03f04f8c87c 100755 (executable)
--- a/gitdm
+++ b/gitdm
@@ -169,6 +169,7 @@ class patch:
         self.author = LookupStoreHacker('Unknown hacker', 'unknown@hacker.net')
         self.email = 'unknown@hacker.net'
         self.sobs = [ ]
+        self.revs = [ ]
         self.reviews = [ ]
         self.acks = [ ]
         self.testers = [ ]
@@ -180,6 +181,7 @@ class patch:
 
     def addacker (self, reviewer):
         self.acks.append (reviewer)
+        self.reviews.append (reviewer)
 
     def addtester (self, tester):
         self.testers.append (tester)
@@ -259,13 +261,19 @@ def grabpatch(logpatch):
         m = patterns['reviewed-by'].match (Line)
         if m:
             email = database.RemapEmail (m.group (2))
-            p.addreviewer (LookupStoreHacker(m.group (1), email))
+            reviewer = LookupStoreHacker(m.group (1), email)
+            p.addreviewer (reviewer)
+            if reviewer != p.author:
+                p.revs.append ((email, LookupStoreHacker(m.group (1), m.group (2))))
             continue
         # Acked-by:
         m = patterns['acked-by'].match (Line)
         if m:
             email = database.RemapEmail (m.group (2))
-            p.addacker (LookupStoreHacker(m.group (1), email))
+            acker = LookupStoreHacker(m.group (1), email)
+            p.addacker (acker)
+            if acker != p.author:
+                p.revs.append ((email, LookupStoreHacker(m.group (1), m.group (2))))
             continue
         # Tested-by:
         m = patterns['tested-by'].match (Line)
@@ -458,6 +466,9 @@ for logpatch in patches:
         for sobemail, sobber in p.sobs:
             empl = sobber.emailemployer (sobemail, p.date)
             empl.AddSOB()
+        for revmail, reviewer in p.revs:
+            empl = reviewer.emailemployer (revmail, p.date)
+            empl.AddReview()
 
     if not p.merge:
         p.author.addpatch (p)
@@ -466,10 +477,7 @@ for logpatch in patches:
         for hacker in p.reviews:
             hacker.addreview (p)
         for hacker in p.acks:
-            # An ACK also counts as a review
-            # (but there is no easy way to not double count, if there are both)
             hacker.addacked (p)
-            hacker.addreview (p)
         for hacker in p.testers:
             hacker.addtested (p)
         for hacker in p.reports:
index b50af2b1a46b0ce3c1b6397ca62f89c8c76e4195..ba4380feb91a3d439f8661ec54d28c94905404a9 100644 (file)
@@ -363,6 +363,25 @@ def ReportByESOBs (elist):
         if count >= ListCount:
             break
     EndReport ()
+
+def CompareEReviews (e1, e2):
+    return e2.reviews - e1.reviews
+
+def ReportByEReviews (elist):
+    elist.sort (CompareEReviews)
+    totalreviews = 0
+    for e in elist:
+        totalreviews += e.reviews
+    count = 0
+    BeginReport ('Employers with the most Reviews and ACKs (total %d)' % totalreviews)
+    for e in elist:
+        if e.reviews > 0:
+            ReportLine (e.name, e.reviews, (e.reviews*100.0)/totalreviews)
+        count += 1
+        if count >= ListCount:
+            break
+    EndReport ()
+   
    
 def CompareHackers (e1, e2):
     return len (e2.hackers) - len (e1.hackers)
@@ -400,6 +419,7 @@ def EmplReports (elist, totalchanged, cscount):
     ReportByPCEmpl (elist, cscount)
     ReportByELChanged (elist, totalchanged)
     ReportByESOBs (elist)
+    ReportByEReviews (elist)
     ReportByEHackers (elist)
 
 #