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..1093382c083a90126a15d83b5d72da5dcfce217a 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 [--filename FILENAME] [--device SERIAL] [flags...] |
No flags: Prints existing command-line file. |
Empty string: Deletes command-line file. |
@@ -27,60 +28,56 @@ 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('--filename', default='chrome-command-line', |
jbudorick
2017/01/13 20:50:00
Why'd you make this a default as opposed to having
perezju
2017/01/16 14:48:20
Ok. Changed. Also found more wrapping scripts that
|
+ help='Name of file where to store flags on the device' |
+ ' (default: %(default)s).') |
+ 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.filename = posixpath.basename(args.device_path) |
+ print ('warning: --device-path option is deprecated,' |
+ ' --filename %s is now enough.' |
+ % cmd_helper.SingleQuote(args.filename)) |
- 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() |
- return 0 |
jbudorick
2017/01/13 20:50:00
nit: this should still return 0
perezju
2017/01/16 14:48:20
Done.
|
+ # 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 flags. ' |
+ else: |
+ action = 'Updated flags. ' |
+ |
+ def update_flags(device): |
+ changer = flag_changer.FlagChanger(device, args.filename) |
+ if remote_args is not None: |
+ changer.ReplaceFlags(remote_args) |
+ return (device, device.build_description, changer.GetCurrentFlags()) |
+ |
+ updated_values = all_devices.pMap(update_flags).pGet(None) |
+ |
+ print '%sCurrent flags (in %s):' % (action, args.filename) |
+ for d, desc, flags in updated_values: |
jbudorick
2017/01/13 20:49:59
Nice!
|
+ 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 flags) |
+ else: |
+ quoted_flags = '( empty )' |
+ print ' %s (%s): %r' % (d, desc, quoted_flags) |
if __name__ == '__main__': |