diff options
author | Rin Cat (鈴猫) <dev@rincat.ch> | 2022-01-23 18:23:14 -0500 |
---|---|---|
committer | Sam James <sam@gentoo.org> | 2022-01-24 01:17:10 +0000 |
commit | b094ba47368bb9b16fb17ee47a54644a09860823 (patch) | |
tree | 61f77b2130133aa9ad994e58be4eb6e1abbc13a4 /bin/gpkg-helper.py | |
parent | Add -X shortopt for --exclude (diff) | |
download | portage-b094ba47368bb9b16fb17ee47a54644a09860823.tar.gz portage-b094ba47368bb9b16fb17ee47a54644a09860823.tar.bz2 portage-b094ba47368bb9b16fb17ee47a54644a09860823.zip |
*/*: GPKG (new binpkg format) Support (GLEP 78, provisionally)
Bug: https://bugs.gentoo.org/500630
Bug: https://bugs.gentoo.org/659864
Bug: https://bugs.gentoo.org/672672
Bug: https://bugs.gentoo.org/773259
Bug: https://bugs.gentoo.org/820578
Signed-off-by: Rin Cat (鈴猫) <dev@rincat.ch>
Closes: https://github.com/gentoo/portage/pull/562
Signed-off-by: Sam James <sam@gentoo.org>
Diffstat (limited to 'bin/gpkg-helper.py')
-rwxr-xr-x | bin/gpkg-helper.py | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/bin/gpkg-helper.py b/bin/gpkg-helper.py new file mode 100755 index 000000000..d79430212 --- /dev/null +++ b/bin/gpkg-helper.py @@ -0,0 +1,71 @@ +#!/usr/bin/python -b +# Copyright 2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +import argparse +import sys +import portage + +portage._internal_caller = True +from portage import os + + +def command_compose(args): + + usage = "usage: compose <package_cpv> <binpkg_path> <metadata_dir> <image_dir>\n" + + if len(args) != 4: + sys.stderr.write(usage) + sys.stderr.write("4 arguments are required, got %s\n" % len(args)) + return 1 + + cpv, binpkg_path, metadata_dir, image_dir = args + + if not os.path.isdir(metadata_dir): + sys.stderr.write(usage) + sys.stderr.write("Argument 3 is not a directory: '%s'\n" % metadata_dir) + return 1 + + if not os.path.isdir(image_dir): + sys.stderr.write(usage) + sys.stderr.write("Argument 4 is not a directory: '%s'\n" % image_dir) + return 1 + + gpkg_file = portage.gpkg.gpkg(portage.settings, cpv, binpkg_path) + metadata = gpkg_file._generate_metadata_from_dir(metadata_dir) + gpkg_file.compress(image_dir, metadata) + return os.EX_OK + + +def main(argv): + + if argv and isinstance(argv[0], bytes): + for i, x in enumerate(argv): + argv[i] = portage._unicode_decode(x, errors="strict") + + valid_commands = ("compress",) + description = "Perform metadata operations on a binary package." + usage = "usage: %s COMMAND [args]" % os.path.basename(argv[0]) + + parser = argparse.ArgumentParser(description=description, usage=usage) + options, args = parser.parse_known_args(argv[1:]) + + if not args: + parser.error("missing command argument") + + command = args[0] + + if command not in valid_commands: + parser.error("invalid command: '%s'" % command) + + if command == "compress": + rval = command_compose(args[1:]) + else: + raise AssertionError("invalid command: '%s'" % command) + + return rval + + +if __name__ == "__main__": + rval = main(sys.argv[:]) + sys.exit(rval) |