ubuntu-dev-tools/sponsor-patch

169 lines
4.8 KiB
Plaintext
Raw Permalink Normal View History

2019-09-04 16:57:27 -03:00
#!/usr/bin/python3
#
2011-09-10 21:28:28 +02:00
# Copyright (C) 2010-2011, Benjamin Drung <bdrung@ubuntu.com>
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# pylint: disable=invalid-name
# pylint: enable=invalid-name
import argparse
import logging
import os
import shutil
import sys
import tempfile
from ubuntutools import getLogger
from ubuntutools.builder import get_builder
from ubuntutools.config import UDTConfig
from ubuntutools.sponsor_patch.sponsor_patch import check_dependencies, sponsor_patch
Logger = getLogger()
2011-09-10 21:28:28 +02:00
def parse(script_name):
"""Parse the command line parameters."""
usage = (
"%(prog)s [options] <bug number>\n"
"One of --upload, --workdir, or --sponsor must be specified."
)
epilog = f"See {script_name}(1) for more info."
parser = argparse.ArgumentParser(usage=usage, epilog=epilog)
parser.add_argument(
"-b",
"--build",
dest="build",
help="Build the package with the specified builder.",
action="store_true",
)
parser.add_argument(
"-B", "--builder", dest="builder", help="Specify the package builder (default pbuilder)"
)
parser.add_argument(
"-e",
"--edit",
help="launch sub-shell to allow editing of the patch",
dest="edit",
action="store_true",
)
parser.add_argument(
"-k", "--key", dest="keyid", help="Specify the key ID to be used for signing."
)
parser.add_argument(
"-l",
"--lpinstance",
dest="lpinstance",
help="Launchpad instance to connect to (default: production)",
metavar="INSTANCE",
)
parser.add_argument(
"--no-conf",
dest="no_conf",
help="Don't read config files or environment variables.",
action="store_true",
)
parser.add_argument(
"-s",
"--sponsor",
help="sponsoring; equals -b -u ubuntu",
dest="sponsoring",
action="store_true",
)
parser.add_argument(
"-u", "--upload", dest="upload", help="Specify an upload destination (default none)."
)
parser.add_argument(
"-U",
"--update",
dest="update",
action="store_true",
help="Update the build environment before building.",
)
parser.add_argument(
"-v", "--verbose", help="print more information", dest="verbose", action="store_true"
)
parser.add_argument(
"-w",
"--workdir",
dest="workdir",
help="Specify a working directory (default is a "
"temporary directory, deleted afterwards).",
)
parser.add_argument("bug_number", type=int, help=argparse.SUPPRESS)
args = parser.parse_args()
if args.verbose:
Logger.setLevel(logging.DEBUG)
check_dependencies()
config = UDTConfig(args.no_conf)
if args.builder is None:
args.builder = config.get_value("BUILDER")
if args.lpinstance is None:
args.lpinstance = config.get_value("LPINSTANCE")
if not args.update:
args.update = config.get_value("UPDATE_BUILDER", boolean=True)
if args.workdir is None:
args.workdir = config.get_value("WORKDIR")
if args.keyid is None:
args.keyid = config.get_value("KEYID")
if args.sponsoring:
args.build = True
args.upload = "ubuntu"
return args
2011-09-10 21:28:28 +02:00
2017-05-01 00:20:03 +02:00
2011-09-10 21:28:28 +02:00
def main():
script_name = os.path.basename(sys.argv[0])
args = parse(script_name)
2011-09-10 21:28:28 +02:00
builder = get_builder(args.builder)
2011-09-10 21:28:28 +02:00
if not builder:
sys.exit(1)
if not args.upload and not args.workdir:
Logger.error("Please specify either a working directory or an upload target!")
2010-12-27 15:20:49 +01:00
sys.exit(1)
if args.workdir is None:
workdir = tempfile.mkdtemp(prefix=script_name + "-")
2010-12-27 15:20:49 +01:00
else:
workdir = args.workdir
2010-12-27 15:20:49 +01:00
try:
sponsor_patch(
args.bug_number,
args.build,
builder,
args.edit,
args.keyid,
args.lpinstance,
args.update,
args.upload,
workdir,
)
2010-12-27 15:20:49 +01:00
except KeyboardInterrupt:
Logger.error("User abort.")
2010-12-27 15:20:49 +01:00
sys.exit(2)
finally:
if args.workdir is None:
2010-12-27 15:20:49 +01:00
shutil.rmtree(workdir)
2017-05-01 00:20:03 +02:00
2010-12-27 15:20:49 +01:00
if __name__ == "__main__":
main()