forked from Mirror/pmbootstrap
pmbootstrap newapkbuild: Properly parse arguments (#1320)
* pmbootstrap newapkbuild: Properly parse arguments The `pmbootstrap newapkbuild` action wraps Alpine's `newapkbuild`. We used to directly pass all arguments to `newapkbuild` without verifying in Python whether they make sense or not. However, as `newpakbuild` doesn't do strict sanity checks on the arguments, it is easy to end up with unexpected behavior when using the command for the first time. For example, `newapkbuild` allows either specifying a PKGNAME or SRCURL as last parameter, and also allows setting a PKGNAME with the `-n` parameter. It only makes sense to use that option when passing a SRCURL. With this commit, we duplicate the optins that should be passed through to `newapkbuild` and use argparse to fully sanitize the options and display a help page (`pmbootstrap newapkbuild -h`) that is consistent with the other help pages. Details: * The `-f` (force) flag does not get passed through anymore. Instead we use it in Python to skip asking if an existing aport should be overwritten (the aports are outside of the chroot, so `newapkbuild` can't handle it in a way that makes sense for pmbootstrap). * Output of `newapkbuild` gets redirected to the log file now, as we don't need it to display a help page. * Don't verify the pkgver while creating the new APKBUILD. When passing a SRCURL, the pkgver gets extracted from the end of the URL and may not have a valid format yet (but we want the APKBUILD anyway). * Stored options passed through in `pmb/config/__init__.py` and use it in both `pmb/parse/arguments.py` and `pmb/helpers/frontend.py`. * Only allow `-n` with SRCURL * The postmarketOS aports folder gets specified with `--folder` now. That way the generated help page is much closer to the original one from `newapkbuild`. The default is `main`. * Made the package type flags (CMake, autotools, ...) exclusive so only one of them can be specified
This commit is contained in:
parent
e7c18f6c48
commit
5ea00e0862
4 changed files with 97 additions and 17 deletions
|
@ -232,10 +232,34 @@ def update(args):
|
|||
|
||||
|
||||
def newapkbuild(args):
|
||||
if not len(args.args_passed):
|
||||
logging.info("See 'pmbootstrap newapkbuild -h' for usage information.")
|
||||
raise RuntimeError("No arguments to pass to newapkbuild specified!")
|
||||
pmb.build.newapkbuild(args, args.folder, args.args_passed)
|
||||
# Check for SRCURL usage
|
||||
is_url = False
|
||||
for prefix in ["http://", "https://", "ftp://"]:
|
||||
if args.pkgname_pkgver_srcurl.startswith(prefix):
|
||||
is_url = True
|
||||
break
|
||||
|
||||
# Sanity check: -n is only allowed with SRCURL
|
||||
if args.pkgname and not is_url:
|
||||
raise RuntimeError("You can only specify a pkgname (-n) when using"
|
||||
" SRCURL as last parameter.")
|
||||
|
||||
# Passthrough: Strings (e.g. -d "my description")
|
||||
pass_through = []
|
||||
for entry in pmb.config.newapkbuild_arguments_strings:
|
||||
value = getattr(args, entry[1])
|
||||
if value:
|
||||
pass_through += [entry[0], value]
|
||||
|
||||
# Passthrough: Switches (e.g. -C for CMake)
|
||||
for entry in (pmb.config.newapkbuild_arguments_switches_pkgtypes +
|
||||
pmb.config.newapkbuild_arguments_switches_other):
|
||||
if getattr(args, entry[1]) is True:
|
||||
pass_through.append(entry[0])
|
||||
|
||||
# Passthrough: PKGNAME[-PKGVER] | SRCURL
|
||||
pass_through.append(args.pkgname_pkgver_srcurl)
|
||||
pmb.build.newapkbuild(args, args.folder, pass_through, args.force)
|
||||
|
||||
|
||||
def kconfig_check(args):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue