Пример #1
0
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.output_directory is not None:
        # 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)

    if options.base_url is not None:
        global JIRA_BASE_URL
        JIRA_BASE_URL = options.base_url

    if options.incompatible_label is not None:
        global BACKWARD_INCOMPATIBLE_LABEL
        BACKWARD_INCOMPATIBLE_LABEL = options.incompatible_label

    projects = options.projects

    if options.range is True:
        versions = [
            Version(v)
            for v in GetVersions(options.versions, projects).getlist()
        ]
    else:
        versions = [Version(v) for v in options.versions]
    versions.sort()

    global SORTTYPE
    SORTTYPE = options.sorttype
    global SORTORDER
    SORTORDER = options.sortorder

    if options.title is None:
        title = projects[0]
    else:
        title = options.title

    if options.retries is not None:
        global NUM_RETRIES
        NUM_RETRIES = options.retries[0]

    haderrors = False

    for version in versions:
        vstr = str(version)
        linter = Linter(vstr, options)
        jlist = sorted(JiraIter(vstr, projects))
        if len(jlist) == 0:
            print "There is no issue which has the specified version: %s" % version
            continue

        if vstr in RELEASE_VERSION:
            reldate = RELEASE_VERSION[vstr]
        elif options.usetoday:
            reldate = strftime("%Y-%m-%d", gmtime())
        else:
            reldate = "Unreleased (as of %s)" % strftime("%Y-%m-%d", gmtime())

        if not os.path.exists(vstr):
            os.mkdir(vstr)

        reloutputs = Outputs("%(ver)s/RELEASENOTES.%(ver)s.md",
                             "%(ver)s/RELEASENOTES.%(key)s.%(ver)s.md", [], {
                                 "ver": version,
                                 "date": reldate,
                                 "title": title
                             })
        choutputs = Outputs("%(ver)s/CHANGES.%(ver)s.md",
                            "%(ver)s/CHANGES.%(key)s.%(ver)s.md", [], {
                                "ver": version,
                                "date": reldate,
                                "title": title
                            })

        if options.license is True:
            reloutputs.write_all(ASF_LICENSE)
            choutputs.write_all(ASF_LICENSE)

        relhead = '# %(title)s %(key)s %(ver)s Release Notes\n\n' \
                  'These release notes cover new developer and user-facing ' \
                  'incompatibilities, important issues, features, and major improvements.\n\n'
        chhead = '# %(title)s Changelog\n\n' \
                 '## Release %(ver)s - %(date)s\n'\
                 '\n'

        reloutputs.write_all(relhead)
        choutputs.write_all(chhead)

        incompatlist = []
        importantlist = []
        buglist = []
        improvementlist = []
        newfeaturelist = []
        subtasklist = []
        tasklist = []
        testlist = []
        otherlist = []

        for jira in jlist:
            if jira.get_incompatible_change():
                incompatlist.append(jira)
            elif jira.get_important():
                importantlist.append(jira)
            elif jira.get_type() == "Bug":
                buglist.append(jira)
            elif jira.get_type() == "Improvement":
                improvementlist.append(jira)
            elif jira.get_type() == "New Feature":
                newfeaturelist.append(jira)
            elif jira.get_type() == "Sub-task":
                subtasklist.append(jira)
            elif jira.get_type() == "Task":
                tasklist.append(jira)
            elif jira.get_type() == "Test":
                testlist.append(jira)
            else:
                otherlist.append(jira)

            line = '* [%s](' % (sanitize_text(jira.get_id())) + JIRA_BASE_URL + \
                   '/browse/%s) | *%s* | **%s**\n' \
                   % (sanitize_text(jira.get_id()),
                      sanitize_text(jira.get_priority()), sanitize_text(jira.get_summary()))

            if len(jira.get_release_note()) > 0 or \
               jira.get_incompatible_change() or jira.get_important():
                reloutputs.write_key_raw(jira.get_project(), "\n---\n\n")
                reloutputs.write_key_raw(jira.get_project(), line)
                if len(jira.get_release_note()) == 0:
                    line = '\n**WARNING: No release note provided for this change.**\n\n'
                else:
                    line = '\n%s\n\n' % (processrelnote(
                        jira.get_release_note()))
                reloutputs.write_key_raw(jira.get_project(), line)

            linter.lint(jira)

        if linter.enabled:
            print linter.message()
            if linter.had_errors():
                haderrors = True
                shutil.rmtree(vstr)
                continue

        reloutputs.write_all("\n\n")
        reloutputs.close()

        if options.skip_credits:
            CHANGEHDR1 = "| JIRA | Summary | Priority | " + \
                     "Component |\n"
            CHANGEHDR2 = "|:---- |:---- | :--- |:---- |\n"
        else:
            CHANGEHDR1 = "| JIRA | Summary | Priority | " + \
                         "Component | Reporter | Contributor |\n"
            CHANGEHDR2 = "|:---- |:---- | :--- |:---- |:---- |:---- |\n"

        if incompatlist:
            choutputs.write_all("### INCOMPATIBLE CHANGES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(incompatlist, options.skip_credits)

        if importantlist:
            choutputs.write_all("\n\n### IMPORTANT ISSUES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(importantlist, options.skip_credits)

        if newfeaturelist:
            choutputs.write_all("\n\n### NEW FEATURES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(newfeaturelist, options.skip_credits)

        if improvementlist:
            choutputs.write_all("\n\n### IMPROVEMENTS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(improvementlist, options.skip_credits)

        if buglist:
            choutputs.write_all("\n\n### BUG FIXES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(buglist, options.skip_credits)

        if testlist:
            choutputs.write_all("\n\n### TESTS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(testlist, options.skip_credits)

        if subtasklist:
            choutputs.write_all("\n\n### SUB-TASKS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(subtasklist, options.skip_credits)

        if tasklist or otherlist:
            choutputs.write_all("\n\n### OTHER:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(otherlist, options.skip_credits)
            choutputs.write_list(tasklist, options.skip_credits)

        choutputs.write_all("\n\n")
        choutputs.close()

    if options.index:
        buildindex(title, options.license)
        buildreadme(title, options.license)

    if haderrors is True:
        sys.exit(1)
Пример #2
0
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.output_directory is not None:
        # 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)

    if options.base_url is not None:
        global JIRA_BASE_URL
        JIRA_BASE_URL = options.base_url

    if options.incompatible_label is not None:
        global BACKWARD_INCOMPATIBLE_LABEL
        BACKWARD_INCOMPATIBLE_LABEL = options.incompatible_label

    proxy = urllib2.ProxyHandler()
    opener = urllib2.build_opener(proxy)
    urllib2.install_opener(opener)

    projects = options.projects

    if options.range is True:
        versions = [Version(v)
                    for v in GetVersions(options.versions, projects).getlist()]
    else:
        versions = [Version(v) for v in options.versions]
    versions.sort()

    global SORTTYPE
    SORTTYPE = options.sorttype
    global SORTORDER
    SORTORDER = options.sortorder

    if options.title is None:
        title = projects[0]
    else:
        title = options.title

    if options.retries is not None:
        global NUM_RETRIES
        NUM_RETRIES = options.retries[0]

    haderrors = False

    for version in versions:
        vstr = str(version)
        linter = Linter(vstr, options)
        jlist = sorted(JiraIter(vstr, projects))
        if len(jlist) == 0:
            print "There is no issue which has the specified version: %s" % version
            continue

        if vstr in RELEASE_VERSION:
            reldate = RELEASE_VERSION[vstr]
        elif options.usetoday:
            reldate = strftime("%Y-%m-%d", gmtime())
        else:
            reldate = "Unreleased (as of %s)" % strftime("%Y-%m-%d", gmtime())

        if not os.path.exists(vstr):
            os.mkdir(vstr)

        reloutputs = Outputs("%(ver)s/RELEASENOTES.%(ver)s.md",
                             "%(ver)s/RELEASENOTES.%(key)s.%(ver)s.md", [],
                             {"ver": version,
                              "date": reldate,
                              "title": title})
        choutputs = Outputs("%(ver)s/CHANGES.%(ver)s.md",
                            "%(ver)s/CHANGES.%(key)s.%(ver)s.md", [],
                            {"ver": version,
                             "date": reldate,
                             "title": title})

        if options.license is True:
            reloutputs.write_all(ASF_LICENSE)
            choutputs.write_all(ASF_LICENSE)

        relhead = '# %(title)s %(key)s %(ver)s Release Notes\n\n' \
                  'These release notes cover new developer and user-facing ' \
                  'incompatibilities, important issues, features, and major improvements.\n\n'
        chhead = '# %(title)s Changelog\n\n' \
                 '## Release %(ver)s - %(date)s\n'\
                 '\n'

        reloutputs.write_all(relhead)
        choutputs.write_all(chhead)

        incompatlist = []
        importantlist = []
        buglist = []
        improvementlist = []
        newfeaturelist = []
        subtasklist = []
        tasklist = []
        testlist = []
        otherlist = []

        for jira in jlist:
            if jira.get_incompatible_change():
                incompatlist.append(jira)
            elif jira.get_important():
                importantlist.append(jira)
            elif jira.get_type() == "Bug":
                buglist.append(jira)
            elif jira.get_type() == "Improvement":
                improvementlist.append(jira)
            elif jira.get_type() == "New Feature":
                newfeaturelist.append(jira)
            elif jira.get_type() == "Sub-task":
                subtasklist.append(jira)
            elif jira.get_type() == "Task":
                tasklist.append(jira)
            elif jira.get_type() == "Test":
                testlist.append(jira)
            else:
                otherlist.append(jira)

            line = '* [%s](' % (sanitize_text(jira.get_id())) + JIRA_BASE_URL + \
                   '/browse/%s) | *%s* | **%s**\n' \
                   % (sanitize_text(jira.get_id()),
                      sanitize_text(jira.get_priority()), sanitize_text(jira.get_summary()))

            if len(jira.get_release_note()) > 0 or \
               jira.get_incompatible_change() or jira.get_important():
                reloutputs.write_key_raw(jira.get_project(), "\n---\n\n")
                reloutputs.write_key_raw(jira.get_project(), line)
                if len(jira.get_release_note()) == 0:
                    line = '\n**WARNING: No release note provided for this change.**\n\n'
                else:
                    line = '\n%s\n\n' % (
                        processrelnote(jira.get_release_note()))
                reloutputs.write_key_raw(jira.get_project(), line)

            linter.lint(jira)

        if linter.enabled:
            print linter.message()
            if linter.had_errors():
                haderrors = True
                shutil.rmtree(vstr)
                continue

        reloutputs.write_all("\n\n")
        reloutputs.close()

        if incompatlist:
            choutputs.write_all("### INCOMPATIBLE CHANGES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(incompatlist)

        if importantlist:
            choutputs.write_all("\n\n### IMPORTANT ISSUES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(importantlist)

        if newfeaturelist:
            choutputs.write_all("\n\n### NEW FEATURES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(newfeaturelist)

        if improvementlist:
            choutputs.write_all("\n\n### IMPROVEMENTS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(improvementlist)

        if buglist:
            choutputs.write_all("\n\n### BUG FIXES:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(buglist)

        if testlist:
            choutputs.write_all("\n\n### TESTS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(testlist)

        if subtasklist:
            choutputs.write_all("\n\n### SUB-TASKS:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(subtasklist)

        if tasklist or otherlist:
            choutputs.write_all("\n\n### OTHER:\n\n")
            choutputs.write_all(CHANGEHDR1)
            choutputs.write_all(CHANGEHDR2)
            choutputs.write_list(otherlist)
            choutputs.write_list(tasklist)

        choutputs.write_all("\n\n")
        choutputs.close()

    if options.index:
        buildindex(title, options.license)
        buildreadme(title, options.license)

    if haderrors is True:
        sys.exit(1)