HADOOP-11807. add a lint mode to releasedocmaker (ramtin via aw)
This commit is contained in:
parent
fe6c1bd73a
commit
79ed0f959f
|
@ -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()
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue