aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRin Cat (鈴猫) <dev@rincat.ch>2022-01-23 18:23:14 -0500
committerSam James <sam@gentoo.org>2022-01-24 01:17:10 +0000
commitb094ba47368bb9b16fb17ee47a54644a09860823 (patch)
tree61f77b2130133aa9ad994e58be4eb6e1abbc13a4 /bin/gpkg-helper.py
parentAdd -X shortopt for --exclude (diff)
downloadportage-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-xbin/gpkg-helper.py71
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)