| Index: build/android/adb_command_line.py
|
| diff --git a/build/android/adb_command_line.py b/build/android/adb_command_line.py
|
| index 948bc8944492b088922fac874322c87b95d253a2..352c9cc548dbaf77ded1452766c2259535b108ab 100755
|
| --- a/build/android/adb_command_line.py
|
| +++ b/build/android/adb_command_line.py
|
| @@ -7,18 +7,19 @@
|
|
|
| import argparse
|
| import os
|
| +import posixpath
|
| import sys
|
|
|
| import devil_chromium
|
|
|
| from devil.android import device_utils
|
| -from devil.android import device_errors
|
| +from devil.android import flag_changer
|
| from devil.utils import cmd_helper
|
|
|
|
|
| def main():
|
| parser = argparse.ArgumentParser(description=__doc__)
|
| - parser.usage = '''%(prog)s --device-path PATH [--device SERIAL] [flags...]
|
| + parser.usage = '''%(prog)s --name FILENAME [--device SERIAL] [flags...]
|
|
|
| No flags: Prints existing command-line file.
|
| Empty string: Deletes command-line file.
|
| @@ -27,59 +28,58 @@ Otherwise: Writes command-line file.
|
| '''
|
| parser.add_argument('-d', '--device', dest='devices', action='append',
|
| default=[], help='Target device serial (repeatable).')
|
| - parser.add_argument('--device-path', required=True,
|
| - help='Remote path to flags file.')
|
| + parser.add_argument('--name', required=True,
|
| + help='Name of file where to store flags on the device.')
|
| + parser.add_argument('--device-path', help='(deprecated) No longer needed to'
|
| + ' supply a device path.')
|
| parser.add_argument('-e', '--executable', dest='executable', default='chrome',
|
| - help='Name of the executable.')
|
| + help='(deprecated) No longer used.')
|
| parser.add_argument('--adb-path', type=os.path.abspath,
|
| help='Path to the adb binary.')
|
| args, remote_args = parser.parse_known_args()
|
|
|
| - devil_chromium.Initialize(adb_path=args.adb_path)
|
| + if args.device_path:
|
| + args.name = posixpath.basename(args.device_path)
|
| + print ('warning: --device-path option is deprecated,'
|
| + ' --name %s is now enough.'
|
| + % cmd_helper.SingleQuote(args.name))
|
|
|
| - as_root = not args.device_path.startswith('/data/local/tmp/')
|
| + devil_chromium.Initialize(adb_path=args.adb_path)
|
|
|
| devices = device_utils.DeviceUtils.HealthyDevices(device_arg=args.devices,
|
| default_retries=0)
|
| all_devices = device_utils.DeviceUtils.parallel(devices)
|
|
|
| - def print_args():
|
| - def read_flags(device):
|
| - try:
|
| - return device.ReadFile(args.device_path, as_root=as_root).rstrip()
|
| - except device_errors.CommandFailedError:
|
| - return '' # File might not exist.
|
| -
|
| - descriptions = all_devices.pMap(lambda d: d.build_description).pGet(None)
|
| - flags = all_devices.pMap(read_flags).pGet(None)
|
| - for d, desc, flags in zip(devices, descriptions, flags):
|
| - print ' %s (%s): %r' % (d, desc, flags)
|
| -
|
| - # No args == print flags.
|
| if not remote_args:
|
| - print 'Existing flags (in %s):' % args.device_path
|
| - print_args()
|
| - return 0
|
| -
|
| - # Empty string arg == delete flags file.
|
| - if len(remote_args) == 1 and not remote_args[0]:
|
| - def delete_flags(device):
|
| - device.RunShellCommand(['rm', '-f', args.device_path], as_root=as_root)
|
| - all_devices.pMap(delete_flags).pGet(None)
|
| - print 'Deleted %s' % args.device_path
|
| - return 0
|
| -
|
| - # Set flags.
|
| - quoted_args = ' '.join(cmd_helper.SingleQuote(x) for x in remote_args)
|
| - flags_str = ' '.join([args.executable, quoted_args])
|
| -
|
| - def write_flags(device):
|
| - device.WriteFile(args.device_path, flags_str, as_root=as_root)
|
| - device.RunShellCommand(['chmod', '0664', args.device_path], as_root=as_root)
|
| -
|
| - all_devices.pMap(write_flags).pGet(None)
|
| - print 'Wrote flags to %s' % args.device_path
|
| - print_args()
|
| + # No args == do not update, just print flags.
|
| + remote_args = None
|
| + action = ''
|
| + elif len(remote_args) == 1 and not remote_args[0]:
|
| + # Single empty string arg == delete flags
|
| + remote_args = []
|
| + action = 'Deleted command line file. '
|
| + else:
|
| + action = 'Wrote command line file. '
|
| +
|
| + def update_flags(device):
|
| + changer = flag_changer.FlagChanger(device, args.name)
|
| + if remote_args is not None:
|
| + flags = changer.ReplaceFlags(remote_args)
|
| + else:
|
| + flags = changer.GetCurrentFlags()
|
| + return (device, device.build_description, flags)
|
| +
|
| + updated_values = all_devices.pMap(update_flags).pGet(None)
|
| +
|
| + print '%sCurrent flags (in %s):' % (action, args.name)
|
| + for d, desc, flags in updated_values:
|
| + if flags:
|
| + # Shell-quote flags for easy copy/paste as new args on the terminal.
|
| + quoted_flags = ' '.join(cmd_helper.SingleQuote(f) for f in sorted(flags))
|
| + else:
|
| + quoted_flags = '( empty )'
|
| + print ' %s (%s): %s' % (d, desc, quoted_flags)
|
| +
|
| return 0
|
|
|
|
|
|
|