فهرست منبع

HADOOP-11807. add a lint mode to releasedocmaker (ramtin via aw)

(cherry picked from commit 8e657fba2fd33f7550597ea9c4c6e9a87aa1ef1c)
(cherry picked from commit 098ba450cc98475b84d60bb5ac3bd7b558b2a67c)
Allen Wittenauer 10 سال پیش
والد
کامیت
cf348f2eb8
2فایلهای تغییر یافته به همراه68 افزوده شده و 10 حذف شده
  1. 66 10
      dev-support/releasedocmaker.py
  2. 2 0
      hadoop-common-project/hadoop-common/CHANGES.txt

+ 66 - 10
dev-support/releasedocmaker.py

@@ -87,8 +87,15 @@ def notableclean(str):
   str=str.rstrip()
   return str
 
+# clean output dir
+def cleanOutputDir(dir):
+    files = os.listdir(dir)
+    for name in files:
+        os.remove(os.path.join(dir,name))
+    os.rmdir(dir)
+
 def mstr(obj):
-  if (obj == None):
+  if (obj is None):
     return ""
   return unicode(obj)
 
@@ -148,7 +155,7 @@ class Jira:
     return mstr(self.fields['description'])
 
   def getReleaseNote(self):
-    if (self.notes == None):
+    if (self.notes is None):
       field = self.parent.fieldIdMap['Release Note']
       if (self.fields.has_key(field)):
         self.notes=mstr(self.fields[field])
@@ -159,14 +166,14 @@ class Jira:
   def getPriority(self):
     ret = ""
     pri = self.fields['priority']
-    if(pri != None):
+    if(pri is not None):
       ret = pri['name']
     return mstr(ret)
 
   def getAssignee(self):
     ret = ""
     mid = self.fields['assignee']
-    if(mid != None):
+    if(mid is not None):
       ret = mid['displayName']
     return mstr(ret)
 
@@ -182,21 +189,21 @@ class Jira:
   def getType(self):
     ret = ""
     mid = self.fields['issuetype']
-    if(mid != None):
+    if(mid is not None):
       ret = mid['name']
     return mstr(ret)
 
   def getReporter(self):
     ret = ""
     mid = self.fields['reporter']
-    if(mid != None):
+    if(mid is not None):
       ret = mid['displayName']
     return mstr(ret)
 
   def getProject(self):
     ret = ""
     mid = self.fields['project']
-    if(mid != None):
+    if(mid is not None):
       ret = mid['key']
     return mstr(ret)
 
@@ -214,7 +221,7 @@ class Jira:
     return False
 
   def getIncompatibleChange(self):
-    if (self.incompat == None):
+    if (self.incompat is None):
       field = self.parent.fieldIdMap['Hadoop Flags']
       self.reviewed=False
       self.incompat=False
@@ -227,6 +234,24 @@ class Jira:
               self.reviewed=True
     return self.incompat
 
+  def checkMissingComponent(self):
+      if (len(self.fields['components'])>0):
+          return False
+      return True
+
+  def checkMissingAssignee(self):
+      if (self.fields['assignee'] is not None):
+          return False
+      return True
+
+  def checkVersionString(self):
+      field = self.parent.fieldIdMap['Fix Version/s']
+      for h in self.fields[field]:
+          found = re.match('^((\d+)(\.\d+)*).*$|^(\w+\-\d+)$', h['name'])
+          if not found:
+              return True
+      return False
+
   def getReleaseDate(self,version):
     for j in range(len(self.fields['fixVersions'])):
       if self.fields['fixVersions'][j]==version:
@@ -339,9 +364,11 @@ def main():
              help="build an index file")
   parser.add_option("-u","--usetoday", dest="usetoday", action="store_true",
              help="use current date for unreleased versions")
+  parser.add_option("-n","--lint", dest="lint", action="store_true",
+             help="use lint flag to exit on failures")
   (options, args) = parser.parse_args()
 
-  if (options.versions == None):
+  if (options.versions is None):
     options.versions = []
 
   if (len(args) > 2):
@@ -396,6 +423,9 @@ def main():
   reloutputs.writeAll(relhead)
   choutputs.writeAll(chhead)
 
+  errorCount=0
+  warningCount=0
+  lintMessage=""
   incompatlist=[]
   buglist=[]
   improvementlist=[]
@@ -408,6 +438,14 @@ def main():
   for jira in sorted(jlist):
     if jira.getIncompatibleChange():
       incompatlist.append(jira)
+      if (len(jira.getReleaseNote())==0):
+          warningCount+=1
+
+    if jira.checkVersionString():
+       warningCount+=1
+
+    if jira.checkMissingComponent() or jira.checkMissingAssignee():
+      errorCount+=1
     elif jira.getType() == "Bug":
       buglist.append(jira)
     elif jira.getType() == "Improvement":
@@ -431,15 +469,33 @@ def main():
       reloutputs.writeKeyRaw(jira.getProject(),"\n---\n\n")
       reloutputs.writeKeyRaw(jira.getProject(), line)
       line ='\n**WARNING: No release note provided for this incompatible change.**\n\n'
-      print 'WARNING: incompatible change %s lacks release notes.' % (notableclean(jira.getId()))
+      lintMessage += "\nWARNING: incompatible change %s lacks release notes." % (notableclean(jira.getId()))
       reloutputs.writeKeyRaw(jira.getProject(), line)
 
+    if jira.checkVersionString():
+        lintMessage += "\nWARNING: Version string problem for %s " % jira.getId()
+
+    if (jira.checkMissingComponent() or jira.checkMissingAssignee()):
+        errorMessage=[]
+        jira.checkMissingComponent() and errorMessage.append("component")
+        jira.checkMissingAssignee() and errorMessage.append("assignee")
+        lintMessage += "\nERROR: missing %s for %s " %  (" and ".join(errorMessage) , jira.getId())
+
     if (len(jira.getReleaseNote())>0):
       reloutputs.writeKeyRaw(jira.getProject(),"\n---\n\n")
       reloutputs.writeKeyRaw(jira.getProject(), line)
       line ='\n%s\n\n' % (tableclean(jira.getReleaseNote()))
       reloutputs.writeKeyRaw(jira.getProject(), line)
 
+  if (options.lint is True):
+      print lintMessage
+      print "======================================="
+      print "Error:%d, Warning:%d \n" % (errorCount, warningCount)
+
+      if (errorCount>0):
+          cleanOutputDir(version)
+          sys.exit(1)
+
   reloutputs.writeAll("\n\n")
   reloutputs.close()
 

+ 2 - 0
hadoop-common-project/hadoop-common/CHANGES.txt

@@ -223,6 +223,8 @@ Release 2.8.0 - UNRELEASED
     HADOOP-12170. hadoop-common's JNIFlags.cmake is redundant and can be
     removed (Alan Burlison via Colin P. McCabe)
 
+    HADOOP-11807. add a lint mode to releasedocmaker (ramtin via aw)
+
   OPTIMIZATIONS
 
     HADOOP-11785. Reduce the number of listStatus operation in distcp