Index: build/config/mac/plist_util.py |
diff --git a/build/config/mac/gen_plist.py b/build/config/mac/plist_util.py |
similarity index 71% |
rename from build/config/mac/gen_plist.py |
rename to build/config/mac/plist_util.py |
index 0004179505ee6e63bc5988c65b4aeba58f3d1b93..e2a8d6e15eb08da22577fc0408a70b85d8af4f22 100644 |
--- a/build/config/mac/gen_plist.py |
+++ b/build/config/mac/plist_util.py |
@@ -21,19 +21,6 @@ SUBST_RE = re.compile(r'\$\{(?P<id>[^}]*?)(?P<modifier>:[^}]*)?\}') |
IDENT_RE = re.compile(r'[_/\s]') |
-class ArgumentParser(argparse.ArgumentParser): |
- """Subclass of argparse.ArgumentParser to work with GN response files. |
- |
- GN response file writes all the arguments on a single line and assumes |
- that the python script uses shlext.split() to extract them. Since the |
- default ArgumentParser expects a single argument per line, we need to |
- provide a subclass to have the correct support for @{{response_file_name}}. |
- """ |
- |
- def convert_arg_line_to_args(self, arg_line): |
- return shlex.split(arg_line) |
- |
- |
def InterpolateList(values, substitutions): |
"""Interpolates variable references into |value| using |substitutions|. |
@@ -182,28 +169,83 @@ def MergePList(plist1, plist2): |
return result |
-def main(): |
- parser = ArgumentParser( |
- description='A script to generate iOS application Info.plist.', |
- fromfile_prefix_chars='@') |
- parser.add_argument('-o', '--output', required=True, |
- help='Path to output plist file.') |
- parser.add_argument('-s', '--subst', action='append', default=[], |
- help='Substitution rule in the format "key=value".') |
- parser.add_argument('-f', '--format', required=True, |
- help='Plist format (e.g. binary1, xml1) to output.') |
- parser.add_argument('path', nargs="+", help='Path to input plist files.') |
+class Action(object): |
+ """Class implementing one action supported by the script.""" |
+ |
+ @classmethod |
+ def Register(cls, subparsers): |
+ parser = subparsers.add_parser(cls.name, help=cls.help) |
+ parser.set_defaults(func=cls._Execute) |
+ cls._Register(parser) |
+ |
+ |
+class MergeAction(Action): |
+ """Class to merge multiple plist files.""" |
+ |
+ name = 'merge' |
+ help = 'merge multiple plist files' |
+ |
+ @staticmethod |
+ def _Register(parser): |
+ parser.add_argument( |
+ '-o', '--output', required=True, |
+ help='path to the output plist file') |
+ parser.add_argument( |
+ '-f', '--format', required=True, choices=('xml1', 'binary1', 'json'), |
+ help='format of the plist file to generate') |
+ parser.add_argument( |
+ 'path', nargs="+", |
+ help='path to plist files to merge') |
+ |
+ @staticmethod |
+ def _Execute(args): |
+ data = {} |
+ for filename in args.path: |
+ data = MergePList(data, LoadPList(filename)) |
+ SavePList(args.output, args.format, data) |
+ |
+ |
+class SubstituteAction(Action): |
+ """Class implementing the variable substitution in a plist file.""" |
+ |
+ name = 'substitute' |
+ help = 'perform pattern substitution in a plist file' |
+ |
+ @staticmethod |
+ def _Register(parser): |
+ parser.add_argument( |
+ '-o', '--output', required=True, |
+ help='path to the output plist file') |
+ parser.add_argument( |
+ '-t', '--template', required=True, |
+ help='path to the template file') |
+ parser.add_argument( |
+ '-s', '--substitution', action='append', default=[], |
+ help='substitution rule in the format key=value') |
+ parser.add_argument( |
+ '-f', '--format', required=True, choices=('xml1', 'binary1', 'json'), |
+ help='format of the plist file to generate') |
+ |
+ @staticmethod |
+ def _Execute(args): |
+ substitutions = {} |
+ for substitution in args.substitution: |
+ key, value = substitution.split('=', 1) |
+ substitutions[key] = value |
+ data = Interpolate(LoadPList(args.template), substitutions) |
+ SavePList(args.output, args.format, data) |
+ |
+ |
+def Main(): |
+ parser = argparse.ArgumentParser(description='manipulate plist files') |
+ subparsers = parser.add_subparsers() |
+ |
+ for action in [MergeAction, SubstituteAction]: |
+ action.Register(subparsers) |
+ |
args = parser.parse_args() |
- substitutions = {} |
- for subst in args.subst: |
- key, value = subst.split('=', 1) |
- substitutions[key] = value |
- data = {} |
- for filename in args.path: |
- data = MergePList(data, LoadPList(filename)) |
- data = Interpolate(data, substitutions) |
- SavePList(args.output, args.format, data) |
- return 0 |
+ args.func(args) |
+ |
if __name__ == '__main__': |
- sys.exit(main()) |
+ sys.exit(Main()) |