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

This commit is contained in:
Allen Wittenauer 2015-06-27 08:59:50 -07:00
parent fe6c1bd73a
commit 79ed0f959f
2 changed files with 68 additions and 10 deletions

View File

@ -87,8 +87,15 @@ def notableclean(str):
str=str.rstrip() str=str.rstrip()
return str 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): def mstr(obj):
if (obj == None): if (obj is None):
return "" return ""
return unicode(obj) return unicode(obj)
@ -148,7 +155,7 @@ class Jira:
return mstr(self.fields['description']) return mstr(self.fields['description'])
def getReleaseNote(self): def getReleaseNote(self):
if (self.notes == None): if (self.notes is None):
field = self.parent.fieldIdMap['Release Note'] field = self.parent.fieldIdMap['Release Note']
if (self.fields.has_key(field)): if (self.fields.has_key(field)):
self.notes=mstr(self.fields[field]) self.notes=mstr(self.fields[field])
@ -159,14 +166,14 @@ class Jira:
def getPriority(self): def getPriority(self):
ret = "" ret = ""
pri = self.fields['priority'] pri = self.fields['priority']
if(pri != None): if(pri is not None):
ret = pri['name'] ret = pri['name']
return mstr(ret) return mstr(ret)
def getAssignee(self): def getAssignee(self):
ret = "" ret = ""
mid = self.fields['assignee'] mid = self.fields['assignee']
if(mid != None): if(mid is not None):
ret = mid['displayName'] ret = mid['displayName']
return mstr(ret) return mstr(ret)
@ -182,21 +189,21 @@ class Jira:
def getType(self): def getType(self):
ret = "" ret = ""
mid = self.fields['issuetype'] mid = self.fields['issuetype']
if(mid != None): if(mid is not None):
ret = mid['name'] ret = mid['name']
return mstr(ret) return mstr(ret)
def getReporter(self): def getReporter(self):
ret = "" ret = ""
mid = self.fields['reporter'] mid = self.fields['reporter']
if(mid != None): if(mid is not None):
ret = mid['displayName'] ret = mid['displayName']
return mstr(ret) return mstr(ret)
def getProject(self): def getProject(self):
ret = "" ret = ""
mid = self.fields['project'] mid = self.fields['project']
if(mid != None): if(mid is not None):
ret = mid['key'] ret = mid['key']
return mstr(ret) return mstr(ret)
@ -214,7 +221,7 @@ class Jira:
return False return False
def getIncompatibleChange(self): def getIncompatibleChange(self):
if (self.incompat == None): if (self.incompat is None):
field = self.parent.fieldIdMap['Hadoop Flags'] field = self.parent.fieldIdMap['Hadoop Flags']
self.reviewed=False self.reviewed=False
self.incompat=False self.incompat=False
@ -227,6 +234,24 @@ class Jira:
self.reviewed=True self.reviewed=True
return self.incompat 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): def getReleaseDate(self,version):
for j in range(len(self.fields['fixVersions'])): for j in range(len(self.fields['fixVersions'])):
if self.fields['fixVersions'][j]==version: if self.fields['fixVersions'][j]==version:
@ -339,9 +364,11 @@ def main():
help="build an index file") help="build an index file")
parser.add_option("-u","--usetoday", dest="usetoday", action="store_true", parser.add_option("-u","--usetoday", dest="usetoday", action="store_true",
help="use current date for unreleased versions") 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() (options, args) = parser.parse_args()
if (options.versions == None): if (options.versions is None):
options.versions = [] options.versions = []
if (len(args) > 2): if (len(args) > 2):
@ -396,6 +423,9 @@ def main():
reloutputs.writeAll(relhead) reloutputs.writeAll(relhead)
choutputs.writeAll(chhead) choutputs.writeAll(chhead)
errorCount=0
warningCount=0
lintMessage=""
incompatlist=[] incompatlist=[]
buglist=[] buglist=[]
improvementlist=[] improvementlist=[]
@ -408,6 +438,14 @@ def main():
for jira in sorted(jlist): for jira in sorted(jlist):
if jira.getIncompatibleChange(): if jira.getIncompatibleChange():
incompatlist.append(jira) 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": elif jira.getType() == "Bug":
buglist.append(jira) buglist.append(jira)
elif jira.getType() == "Improvement": elif jira.getType() == "Improvement":
@ -431,15 +469,33 @@ def main():
reloutputs.writeKeyRaw(jira.getProject(),"\n---\n\n") reloutputs.writeKeyRaw(jira.getProject(),"\n---\n\n")
reloutputs.writeKeyRaw(jira.getProject(), line) reloutputs.writeKeyRaw(jira.getProject(), line)
line ='\n**WARNING: No release note provided for this incompatible change.**\n\n' 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) 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): if (len(jira.getReleaseNote())>0):
reloutputs.writeKeyRaw(jira.getProject(),"\n---\n\n") reloutputs.writeKeyRaw(jira.getProject(),"\n---\n\n")
reloutputs.writeKeyRaw(jira.getProject(), line) reloutputs.writeKeyRaw(jira.getProject(), line)
line ='\n%s\n\n' % (tableclean(jira.getReleaseNote())) line ='\n%s\n\n' % (tableclean(jira.getReleaseNote()))
reloutputs.writeKeyRaw(jira.getProject(), line) 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.writeAll("\n\n")
reloutputs.close() reloutputs.close()

View File

@ -230,6 +230,8 @@ Trunk (Unreleased)
HADOOP-11142. Remove hdfs dfs reference from file system shell HADOOP-11142. Remove hdfs dfs reference from file system shell
documentation (Kengo Seki via aw) documentation (Kengo Seki via aw)
HADOOP-11807. add a lint mode to releasedocmaker (ramtin via aw)
BUG FIXES BUG FIXES
HADOOP-11473. test-patch says "-1 overall" even when all checks are +1 HADOOP-11473. test-patch says "-1 overall" even when all checks are +1