Files
android_development/gsi/gsi_util/gsi_util.py
SzuWei Lin 18d5e919fe gsi_util: adding dump subcommand
'dump' command can dump information from given image, which could
be a image file, folder or device by adb.

Use $./gsi_util.py dump --help for the detail.

The patch also includes a "dump" framework, to implement some
dumpers to dump information. This patch also includes PropDumper to
dump information from property files, and XmlDumper to dump
information from XML files.

There is an initial dump info list in dump_info_list.py.
Use subcommand 'list_dump' could output the list.

Usually using Dumper is enough to dump information. dump.py is an
example to use Dumper.

Bug: 70253764
Test: dump from different mounter
Change-Id: I7c05f8f24d44d3c7429f2c428963f64191f49a53
2018-01-15 16:01:14 +08:00

75 lines
2.2 KiB
Python
Executable File

#!/usr/bin/env python
#
# Copyright 2017 - The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""gsi_util command-line utility."""
import argparse
import logging
import sys
class GsiUtil(object):
"""Object for gsi_util command line tool."""
_GSI_UTIL_VERSION = '1.0'
# Adds gsi_util COMMAND here.
# TODO(bowgotsai): auto collect from gsi_util/commands/*.py
_COMMANDS = ['flash_gsi', 'pull', 'dump', 'hello']
_LOGGING_FORMAT = '%(message)s'
_LOGGING_LEVEL = logging.WARNING
@staticmethod
def _get_module_name(command):
return 'gsi_util.commands.' + command
def run(self, argv):
"""Command-line processor."""
# Sets up default logging.
logging.basicConfig(format=self._LOGGING_FORMAT, level=self._LOGGING_LEVEL)
# Adds top-level --version/--debug argument.
parser = argparse.ArgumentParser()
parser.add_argument('-v', '--version', action='version',
version='%(prog)s {}'.format(self._GSI_UTIL_VERSION))
parser.add_argument(
'-d', '--debug', help='debug mode.', action='store_true')
# Adds subparsers for each COMMAND.
subparsers = parser.add_subparsers(title='COMMAND')
for command in self._COMMANDS:
module_name = self._get_module_name(command)
mod = __import__(module_name, globals(), locals(), ['setup_command_args'])
mod.setup_command_args(subparsers)
args = parser.parse_args(argv[1:])
if args.debug:
logging.getLogger().setLevel(logging.DEBUG)
try:
args.func(args)
except Exception as e:
logging.error('%s: %s', argv[0], e.message)
logging.exception(e)
sys.exit(1)
if __name__ == '__main__':
tool = GsiUtil()
tool.run(sys.argv)