Repository: yetus Updated Branches: refs/heads/master eddbd09b2 -> 951e61642
YETUS-209. releasedocmaker's error message is unintelligible if a non-existent project is specified Signed-off-by: Sean Busbey <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/yetus/repo Commit: http://git-wip-us.apache.org/repos/asf/yetus/commit/951e6164 Tree: http://git-wip-us.apache.org/repos/asf/yetus/tree/951e6164 Diff: http://git-wip-us.apache.org/repos/asf/yetus/diff/951e6164 Branch: refs/heads/master Commit: 951e6164275f7c191ebfcaf7a29e2ac20edc3996 Parents: eddbd09 Author: Kengo Seki <[email protected]> Authored: Fri Dec 11 18:30:28 2015 +0900 Committer: Kengo Seki <[email protected]> Committed: Mon Dec 14 14:14:08 2015 +0900 ---------------------------------------------------------------------- release-doc-maker/releasedocmaker.py | 71 +++++++++++++++++++------------ 1 file changed, 43 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/yetus/blob/951e6164/release-doc-maker/releasedocmaker.py ---------------------------------------------------------------------- diff --git a/release-doc-maker/releasedocmaker.py b/release-doc-maker/releasedocmaker.py index 4e30046..bfd8989 100755 --- a/release-doc-maker/releasedocmaker.py +++ b/release-doc-maker/releasedocmaker.py @@ -331,47 +331,62 @@ class Jira(object): class JiraIter(object): """An Iterator of JIRAs""" - def __init__(self, version, projects): - self.version = version - self.projects = projects - ver = str(version).replace("-SNAPSHOT", "") - + @staticmethod + def collect_fields(): + """send a query to JIRA and collect field-id map""" resp = urllib2.urlopen("https://issues.apache.org/jira/rest/api/2/field") data = json.loads(resp.read()) - - self.field_id_map = {} + field_id_map = {} for part in data: - self.field_id_map[part['name']] = part['id'] + field_id_map[part['name']] = part['id'] + return field_id_map - self.jiras = [] + @staticmethod + def query_jira(ver, projects, pos): + """send a query to JIRA and collect a certain number of issue information""" + count = 100 + pjs = "','".join(projects) + jql = "project in ('%s') and fixVersion in ('%s') and resolution = Fixed" % (pjs, ver) + params = urllib.urlencode({'jql':jql, 'startAt':pos, 'maxResults':count}) + try: + resp = urllib2.urlopen("https://issues.apache.org/jira/rest/api/2/search?%s" % params) + except urllib2.HTTPError, err: + code = err.code + print "JIRA returns HTTP error %d: %s. Aborting." % (code, err.msg) + if code == 400: + print "Please make sure the specified projects are correct." + sys.exit(1) + data = json.loads(resp.read()) + return data + + @staticmethod + def collect_jiras(ver, projects): + """send queries to JIRA and collect all issues that belongs to given version and projects""" + jiras = [] pos = 0 end = 1 - count = 100 while pos < end: - pjs = "','".join(projects) - jql = "project in ('%s') and fixVersion in ('%s') and resolution = Fixed" % (pjs, ver) - params = urllib.urlencode({'jql': jql, 'startAt':pos, 'maxResults':count}) - resp = urllib2.urlopen("https://issues.apache.org/jira/rest/api/2/search?%s" % params) - data = json.loads(resp.read()) + data = JiraIter.query_jira(ver, projects, pos) if data.has_key('error_messages'): - raise Exception(data['error_messages']) + print "JIRA returns error message: %s" % data['error_messages'] + sys.exit(1) pos = data['startAt'] + data['maxResults'] end = data['total'] - self.jiras.extend(data['issues']) + jiras.extend(data['issues']) - needaversion = False if ver not in RELEASE_VERSION: - needaversion = True - - if needaversion is True: - issues = data['issues'] - for i in range(len(issues)): - fix_versions = issues[i]['fields']['fixVersions'] - for j in range(len(fix_versions)): - fields = fix_versions[j] - if 'releaseDate' in fields: - RELEASE_VERSION[fields['name']] = fields['releaseDate'] + for issue in data['issues']: + for fix_version in issue['fields']['fixVersions']: + if 'releaseDate' in fix_version: + RELEASE_VERSION[fix_version['name']] = fix_version['releaseDate'] + return jiras + def __init__(self, version, projects): + self.version = version + self.projects = projects + self.field_id_map = JiraIter.collect_fields() + ver = str(version).replace("-SNAPSHOT", "") + self.jiras = JiraIter.collect_jiras(ver, projects) self.iter = self.jiras.__iter__() def __iter__(self):
