def main(argv): """Main function for the gbp pq-rpm command""" retval = 0 try: parser = GbpOptionParserRpm(command=os.path.basename(argv[0]), prefix='', usage=USAGE_STRING) except ConfigParser.ParsingError as err: gbp.log.err('Invalid config file: %s' % err) return 1 parser.add_boolean_config_file_option(option_name="patch-numbers", dest="patch_numbers") parser.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, help="Verbose command execution") parser.add_option( "--force", dest="force", action="store_true", default=False, help="In case of import even import if the branch already exists") parser.add_config_file_option(option_name="vendor", action="store", dest="vendor") parser.add_config_file_option(option_name="color", dest="color", type='tristate') parser.add_config_file_option(option_name="color-scheme", dest="color_scheme") parser.add_config_file_option(option_name="tmp-dir", dest="tmp_dir") parser.add_config_file_option(option_name="upstream-tag", dest="upstream_tag") parser.add_config_file_option(option_name="spec-file", dest="spec_file") parser.add_config_file_option(option_name="packaging-dir", dest="packaging_dir") parser.add_option( "--new-packaging-dir", help="Packaging directory in the new packaging branch. Only " "relevant for the 'convert' action. If not defined, defaults " "to '--packaging-dir'") parser.add_config_file_option( option_name="packaging-branch", dest="packaging_branch", help="Branch the packaging is being maintained on. Only relevant " "if a invariable/single pq-branch is defined, in which case " "this is used as the 'base' branch. Default is " "'%(packaging-branch)s'") parser.add_config_file_option(option_name="pq-branch", dest="pq_branch") parser.add_config_file_option(option_name="import-files", dest="import_files", type="string", action="callback", callback=opt_split_cb) parser.add_option( "--retain-history", action="store_true", help="When doing convert, preserve as much of the git history as " "possible, i.e. create one commit per commit. Only " "relevant for the 'convert' action.") parser.add_option( "--export-rev", action="store", dest="export_rev", default="", help="Export patches from treeish object TREEISH instead of head " "of patch-queue branch", metavar="TREEISH") parser.add_config_file_option("patch-export-compress", dest="patch_export_compress") parser.add_config_file_option("patch-export-squash-until", dest="patch_export_squash_until") parser.add_config_file_option("patch-export-ignore-path", dest="patch_export_ignore_path") (options, args) = parser.parse_args(argv) gbp.log.setup(options.color, options.verbose, options.color_scheme) options.patch_export_compress = string_to_int( options.patch_export_compress) if options.new_packaging_dir is None: options.new_packaging_dir = options.packaging_dir if len(args) < 2: gbp.log.err("No action given.") return 1 else: action = args[1] if args[1] in ["export", "import", "rebase", "drop", "switch", "convert"]: pass elif args[1] in ["apply"]: if len(args) != 3: gbp.log.err("No patch name given.") return 1 else: patchfile = args[2] else: gbp.log.err("Unknown action '%s'." % args[1]) return 1 try: repo = RpmGitRepository(os.path.curdir) except GitRepositoryError: gbp.log.err("%s is not a git repository" % (os.path.abspath('.'))) return 1 if os.path.abspath('.') != repo.path: gbp.log.warn("Switching to topdir before running commands") os.chdir(repo.path) try: # Create base temporary directory for this run options.tmp_dir = tempfile.mkdtemp(dir=options.tmp_dir, prefix='gbp-pq-rpm_') if action == "export": export_patches(repo, options) elif action == "import": import_spec_patches(repo, options) elif action == "drop": drop_pq_rpm(repo, options) elif action == "rebase": rebase_pq(repo, options) elif action == "apply": apply_single_patch(repo, patchfile, options) elif action == "switch": switch_pq(repo, options) elif action == "convert": convert_package(repo, options) except CommandExecFailed: retval = 1 except GitRepositoryError as err: gbp.log.err("Git command failed: %s" % err) retval = 1 except GbpError, err: if len(err.__str__()): gbp.log.err(err) retval = 1
def parse_args(argv): """Parse command line and config file options""" try: parser = GbpOptionParserRpm(command=os.path.basename(argv[0]), prefix='', usage='%prog [options] paths') except ConfigParser.ParsingError as err: gbp.log.error('invalid config file: %s' % err) return None, None range_grp = GbpOptionGroup(parser, "commit range options", "which commits to add to the changelog") format_grp = GbpOptionGroup(parser, "changelog entry formatting", "how to format the changelog entries") naming_grp = GbpOptionGroup( parser, "naming", "branch names, tag formats, directory and file naming") commit_grp = GbpOptionGroup(parser, "commit", "automatic committing and tagging") parser.add_option_group(range_grp) parser.add_option_group(format_grp) parser.add_option_group(naming_grp) parser.add_option_group(commit_grp) # Non-grouped options parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="verbose command execution") parser.add_config_file_option(option_name="color", dest="color", type='tristate') parser.add_config_file_option(option_name="color-scheme", dest="color_scheme") parser.add_config_file_option(option_name="vendor", action="store", dest="vendor") parser.add_config_file_option( option_name="git-log", dest="git_log", help="options to pass to git-log, default is '%(git-log)s'") parser.add_boolean_config_file_option(option_name="ignore-branch", dest="ignore_branch") parser.add_config_file_option( option_name="customizations", dest="customization_file", help="Load Python code from CUSTOMIZATION_FILE. At the " "moment, the only useful thing the code can do is " "define a custom ChangelogEntryFormatter class.") # Naming group options naming_grp.add_config_file_option(option_name="packaging-branch", dest="packaging_branch") naming_grp.add_config_file_option(option_name="packaging-tag", dest="packaging_tag") naming_grp.add_config_file_option(option_name="packaging-dir", dest="packaging_dir") naming_grp.add_config_file_option(option_name="changelog-file", dest="changelog_file") naming_grp.add_config_file_option(option_name="spec-file", dest="spec_file") # Range group options range_grp.add_option( "-s", "--since", dest="since", help="commit to start from (e.g. HEAD^^^, release/0.1.2)") range_grp.add_option( "--all", action="store_true", help="use all commits from the Git history, overrides " "--since") # Formatting group options format_grp.add_config_file_option(option_name="meta-bts", dest="meta_bts") format_grp.add_option( "--no-release", action="store_false", default=True, dest="release", help="no release, just update the last changelog section") format_grp.add_boolean_config_file_option(option_name="git-author", dest="git_author") format_grp.add_boolean_config_file_option(option_name="full", dest="full") format_grp.add_config_file_option( option_name="id-length", dest="idlen", help="include N digits of the commit id in the changelog " "entry, default is '%(id-length)s'", type="int", metavar="N") format_grp.add_config_file_option( option_name="ignore-regex", dest="ignore_regex", help="Ignore lines in commit message matching regex, " "default is '%(ignore-regex)s'") format_grp.add_config_file_option(option_name="changelog-revision", dest="changelog_revision") format_grp.add_config_file_option(option_name="spawn-editor", dest="spawn_editor") format_grp.add_config_file_option(option_name="editor-cmd", dest="editor_cmd") format_grp.add_option( "-m", '--message', help="text to use as new changelog entries - git commit " "messages and the --since are ignored in this case") # Commit/tag group options commit_grp.add_option("-c", "--commit", action="store_true", help="commit changes") commit_grp.add_config_file_option(option_name="commit-msg", dest="commit_msg") commit_grp.add_option( "--tag", action="store_true", help="commit the changes and create a packaging/release" "tag") commit_grp.add_option("--retag", action="store_true", help="Overwrite packaging tag if it already exists") commit_grp.add_boolean_config_file_option(option_name="sign-tags", dest="sign_tags") commit_grp.add_config_file_option(option_name="keyid", dest="keyid") options, args = parser.parse_args(argv[1:]) if options.tag: options.commit = True if not options.changelog_revision: options.changelog_revision = RpmPkgPolicy.Changelog.header_rev_format gbp.log.setup(options.color, options.verbose, options.color_scheme) return options, args