Return-Path: X-Original-To: apmail-yetus-commits-archive@minotaur.apache.org Delivered-To: apmail-yetus-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9E4F91818B for ; Tue, 8 Mar 2016 16:44:02 +0000 (UTC) Received: (qmail 73731 invoked by uid 500); 8 Mar 2016 16:44:02 -0000 Delivered-To: apmail-yetus-commits-archive@yetus.apache.org Received: (qmail 73708 invoked by uid 500); 8 Mar 2016 16:44:02 -0000 Mailing-List: contact commits-help@yetus.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@yetus.apache.org Delivered-To: mailing list commits@yetus.apache.org Received: (qmail 73699 invoked by uid 99); 8 Mar 2016 16:44:02 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Mar 2016 16:44:02 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 50216DFA26; Tue, 8 Mar 2016 16:44:02 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: busbey@apache.org To: commits@yetus.apache.org Message-Id: <3cb087aea9bd4285afd5a4e249db1baa@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: yetus git commit: YETUS-324. Split releasedocmaker.py option parsing into separate function. Date: Tue, 8 Mar 2016 16:44:02 +0000 (UTC) Repository: yetus Updated Branches: refs/heads/master 356b33bc2 -> 9ae534f3b YETUS-324. Split releasedocmaker.py option parsing into separate function. Signed-off-by: Sean Busbey Project: http://git-wip-us.apache.org/repos/asf/yetus/repo Commit: http://git-wip-us.apache.org/repos/asf/yetus/commit/9ae534f3 Tree: http://git-wip-us.apache.org/repos/asf/yetus/tree/9ae534f3 Diff: http://git-wip-us.apache.org/repos/asf/yetus/diff/9ae534f3 Branch: refs/heads/master Commit: 9ae534f3b94a515dd0f74244f3fdffccbeba1ea0 Parents: 356b33b Author: Andrew Wang Authored: Thu Mar 3 14:38:00 2016 -0800 Committer: Sean Busbey Committed: Tue Mar 8 08:38:04 2016 -0800 ---------------------------------------------------------------------- release-doc-maker/releasedocmaker.py | 51 +++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/yetus/blob/9ae534f3/release-doc-maker/releasedocmaker.py ---------------------------------------------------------------------- diff --git a/release-doc-maker/releasedocmaker.py b/release-doc-maker/releasedocmaker.py index f1d7e14..831b26b 100755 --- a/release-doc-maker/releasedocmaker.py +++ b/release-doc-maker/releasedocmaker.py @@ -20,6 +20,7 @@ from glob import glob from optparse import OptionParser from time import gmtime, strftime from distutils.version import LooseVersion +import errno import os import re import sys @@ -441,7 +442,8 @@ class Outputs(object): textsanitize(jira.get_assignee())) self.write_key_raw(jira.get_project(), line) -def main(): +def parse_args(): + """Parse command-line arguments with optparse.""" usage = "usage: %prog --project PROJECT [--project PROJECT] --version VERSION [--version VERSION2 ...]" parser = OptionParser(usage=usage, epilog="Markdown-formatted CHANGES and RELEASENOTES files will be stored" @@ -471,37 +473,54 @@ def main(): help="specify base URL of the JIRA instance.") (options, _) = parser.parse_args() + # Validate options + if options.versions is None: + parser.error("At least one version needs to be supplied") + if options.projects is None: + parser.error("At least one project needs to be supplied") + if options.base_url is not None: + if len(options.base_url) > 1: + parser.error("Only one base URL should be given") + else: + options.base_url = options.base_url[0] + if options.output_directory is not None: + if len(options.output_directory) > 1: + parser.error("Only one output directory should be given") + else: + options.output_directory = options.output_directory[0] + + return options + +def main(): + options = parse_args() if options.release_version: with open(os.path.join(os.path.dirname(__file__), "../VERSION"), 'r') as ver_file: print ver_file.read() sys.exit(0) - if options.versions is None: - parser.error("At least one version needs to be supplied") - if options.output_directory is not None: - if len(options.output_directory) > 1: - parser.error("Only one output directory should be given") - if not os.path.isdir(options.output_directory[0]): - try: - os.makedirs(options.output_directory[0]) - except OSError: - parser.error("Unable to create output directory that does not exist") + # Create the output directory if it does not exist. + # Equivalent to `mkdir -p`. + try: + os.makedirs(options.output_directory) + except OSError as exc: + if exc.errno == errno.EEXIST and os.path.isdir(options.output_directory): + pass + else: + print "Unable to create output directory %s: %s" % \ + (options.output_directory, exc.message) + sys.exit(1) os.chdir(options.output_directory[0]) if options.base_url is not None: - if len(options.base_url) > 1: - parser.error("Only one base URL should be given") global JIRA_BASE_URL - JIRA_BASE_URL = options.base_url[0] + JIRA_BASE_URL = options.base_url proxy = urllib2.ProxyHandler() opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) projects = options.projects - if projects is None: - parser.error("At least one project needs to be supplied") if options.range is True: versions = [Version(v) for v in GetVersions(options.versions, projects).getlist()]