d9d325d59e22a96863aa4f27f2ba051338669b08
[portage.git] / bin / xpak-helper.py
1 #!/usr/bin/python
2 # Copyright 2009-2013 Gentoo Foundation
3 # Distributed under the terms of the GNU General Public License v2
4
5 import sys
6 import portage
7 portage._internal_caller = True
8 from portage import os
9 from portage.util._argparse import ArgumentParser
10
11 def command_recompose(args):
12
13         usage = "usage: recompose <binpkg_path> <metadata_dir>\n"
14
15         if len(args) != 2:
16                 sys.stderr.write(usage)
17                 sys.stderr.write("2 arguments are required, got %s\n" % len(args))
18                 return 1
19
20         binpkg_path, metadata_dir = args
21
22         if not os.path.isfile(binpkg_path):
23                 sys.stderr.write(usage)
24                 sys.stderr.write("Argument 1 is not a regular file: '%s'\n" % \
25                         binpkg_path)
26                 return 1
27
28         if not os.path.isdir(metadata_dir):
29                 sys.stderr.write(usage)
30                 sys.stderr.write("Argument 2 is not a directory: '%s'\n" % \
31                         metadata_dir)
32                 return 1
33
34         t = portage.xpak.tbz2(binpkg_path)
35         t.recompose(metadata_dir)
36         return os.EX_OK
37
38 def main(argv):
39
40         if argv and isinstance(argv[0], bytes):
41                 for i, x in enumerate(argv):
42                         argv[i] = portage._unicode_decode(x, errors='strict')
43
44         valid_commands = ('recompose',)
45         description = "Perform metadata operations on a binary package."
46         usage = "usage: %s COMMAND [args]" % \
47                 os.path.basename(argv[0])
48
49         parser = ArgumentParser(description=description, usage=usage)
50         options, args = parser.parse_known_args(argv[1:])
51
52         if not args:
53                 parser.error("missing command argument")
54
55         command = args[0]
56
57         if command not in valid_commands:
58                 parser.error("invalid command: '%s'" % command)
59
60         if command == 'recompose':
61                 rval = command_recompose(args[1:])
62         else:
63                 raise AssertionError("invalid command: '%s'" % command)
64
65         return rval
66
67 if __name__ == "__main__":
68         rval = main(sys.argv[:])
69         sys.exit(rval)