def parse_args()

in releasedocmaker/src/main/python/releasedocmaker/__init__.py [0:0]


def parse_args():  # pylint: disable=too-many-branches
    """Parse command-line arguments with optparse."""
    parser = ArgumentParser(
        prog='releasedocmaker',
        epilog="--project and --version may be given multiple times.")
    parser.add_argument("--dirversions",
                        dest="versiondirs",
                        action="store_true",
                        default=False,
                        help="Put files in versioned directories")
    parser.add_argument("--empty",
                        dest="empty",
                        action="store_true",
                        default=False,
                        help="Create empty files when no issues")
    parser.add_argument(
        "--extension",
        dest="extension",
        default=EXTENSION,
        type=str,
        help="Set the file extension of created Markdown files")
    parser.add_argument("--fileversions",
                        dest="versionfiles",
                        action="store_true",
                        default=False,
                        help="Write files with embedded versions")
    parser.add_argument("-i",
                        "--index",
                        dest="index",
                        action="store_true",
                        default=False,
                        help="build an index file")
    parser.add_argument("-l",
                        "--license",
                        dest="license",
                        action="store_true",
                        default=False,
                        help="Add an ASF license")
    parser.add_argument("-p",
                        "--project",
                        dest="projects",
                        action="append",
                        type=str,
                        help="projects in JIRA to include in releasenotes",
                        metavar="PROJECT")
    parser.add_argument("--prettyindex",
                        dest="prettyindex",
                        action="store_true",
                        default=False,
                        help="build an index file with pretty URLs")
    parser.add_argument("-r",
                        "--range",
                        dest="range",
                        action="store_true",
                        default=False,
                        help="Given versions are a range")
    parser.add_argument(
        "--sortorder",
        dest="sortorder",
        metavar="TYPE",
        default=SORTORDER,
        # dec is supported for backward compatibility
        choices=["asc", "dec", "desc", "newer", "older"],
        help=f"Sorting order for sort type (default: {SORTORDER})")
    parser.add_argument("--sorttype",
                        dest="sorttype",
                        metavar="TYPE",
                        default=SORTTYPE,
                        choices=["resolutiondate", "issueid"],
                        help=f"Sorting type for issues (default: {SORTTYPE})")
    parser.add_argument(
        "-t",
        "--projecttitle",
        dest="title",
        type=str,
        help="Title to use for the project (default is Apache PROJECT)")
    parser.add_argument("-u",
                        "--usetoday",
                        dest="usetoday",
                        action="store_true",
                        default=False,
                        help="use current date for unreleased versions")
    parser.add_argument("-v",
                        "--version",
                        dest="versions",
                        action="append",
                        type=str,
                        help="versions in JIRA to include in releasenotes",
                        metavar="VERSION")
    parser.add_argument(
        "-V",
        dest="release_version",
        action="store_true",
        default=False,
        help="display version information for releasedocmaker and exit.")
    parser.add_argument(
        "-O",
        "--outputdir",
        dest="output_directory",
        action="append",
        type=str,
        help="specify output directory to put release docs to.")
    parser.add_argument("-B",
                        "--baseurl",
                        dest="base_url",
                        action="append",
                        type=str,
                        default='https://issues.apache.org/jira',
                        help="specify base URL of the JIRA instance.")
    parser.add_argument(
        "--retries",
        dest="retries",
        action="append",
        type=int,
        help="Specify how many times to retry connection for each URL.")
    parser.add_argument(
        "--skip-credits",
        dest="skip_credits",
        action="store_true",
        default=False,
        help=
        "While creating release notes skip the 'reporter' and 'contributor' columns"
    )
    parser.add_argument(
        "-X",
        "--incompatiblelabel",
        dest="incompatible_label",
        default="backward-incompatible",
        type=str,
        help="Specify the label to indicate backward incompatibility.")

    Linter.add_parser_options(parser)

    if len(sys.argv) <= 1:
        parser.print_help()
        sys.exit(1)

    options = parser.parse_args()

    # Handle the version string right away and exit
    if options.release_version:
        logging.info(getversion())
        sys.exit(0)

    # Validate options
    if not options.release_version:
        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 None:
            parser.error("Base URL must be defined")
        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]

    if options.range or len(options.versions) > 1:
        if not options.versiondirs and not options.versionfiles:
            parser.error(
                "Multiple versions require either --fileversions or --dirversions"
            )

    return options