Home | History | Annotate | Download | only in commands
      1 # Copyright 2017 - The Android Open Source Project
      2 #
      3 # Licensed under the Apache License, Version 2.0 (the "License");
      4 # you may not use this file except in compliance with the License.
      5 # You may obtain a copy of the License at
      6 #
      7 #     http://www.apache.org/licenses/LICENSE-2.0
      8 #
      9 # Unless required by applicable law or agreed to in writing, software
     10 # distributed under the License is distributed on an "AS IS" BASIS,
     11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 # See the License for the specific language governing permissions and
     13 # limitations under the License.
     14 """Implementation of gsi_util command 'pull'."""
     15 
     16 import argparse
     17 import logging
     18 import shutil
     19 import sys
     20 
     21 from gsi_util.commands.common import image_sources
     22 
     23 
     24 def do_pull(args):
     25   logging.info('==== PULL ====')
     26 
     27   source, dest = args.SOURCE, args.DEST
     28 
     29   mounter = image_sources.create_composite_mounter_by_args(args)
     30   with mounter as file_accessor:
     31     with file_accessor.prepare_file(source) as filename:
     32       if not filename:
     33         print >> sys.stderr, 'Can not dump file: {}'.format(source)
     34       else:
     35         logging.debug('Copy %s -> %s', filename, dest)
     36         shutil.copy(filename, dest)
     37 
     38   logging.info('==== DONE ====')
     39 
     40 
     41 _PULL_DESCRIPTION = ("""'pull' command pulls a file from the give image.
     42 
     43 You must assign at least one image source.
     44 
     45 SOURCE is the full path file name to pull, which must start with '/' and
     46 includes the mount point. ex.
     47 
     48     /system/build.prop
     49     /vendor/compatibility_matrix.xml
     50 
     51 Some usage examples:
     52 
     53     $ ./gsi_util.py pull --system adb:AB0123456789 /system/manifest.xml
     54     $ ./gsi_util.py pull --vendor adb /vendor/compatibility_matrix.xml
     55     $ ./gsi_util.py pull --system system.img /system/build.prop
     56     $ ./gsi_util.py pull --system my/out/folder/system /system/build.prop""")
     57 
     58 
     59 def setup_command_args(parser):
     60   # command 'pull'
     61   pull_parser = parser.add_parser(
     62       'pull',
     63       help='pull a file from the given image',
     64       description=_PULL_DESCRIPTION,
     65       formatter_class=argparse.RawTextHelpFormatter)
     66   image_sources.add_argument_group(pull_parser)
     67   pull_parser.add_argument(
     68       'SOURCE',
     69       type=str,
     70       help='the full path file name in given image to be pull')
     71   pull_parser.add_argument(
     72       'DEST',
     73       nargs='?',
     74       default='.',
     75       type=str,
     76       help='the file name or directory to save the pulled file (default: .)')
     77   pull_parser.set_defaults(func=do_pull)
     78