blob: 6ab79382e9911c4778977887778223cc62969215 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import argparse
import logging
import os
import sys
if __name__ == '__main__':
sys.path.append(
os.path.abspath(
os.path.join(os.path.dirname(__file__), '..', '..', '..')))
from devil.android import device_denylist
from devil.android import device_errors
from devil.android import fastboot_utils
from devil.android.sdk import fastboot
from devil.android.tools import script_common
from devil.constants import exit_codes
from devil.utils import logging_common
from devil.utils import parallelizer
logger = logging.getLogger(__name__)
def main():
parser = argparse.ArgumentParser()
parser.add_argument('build_path', help='Path to android build.')
parser.add_argument(
'-w', '--wipe', action='store_true', help='If set, wipes user data')
parser.add_argument('--wait',
action='store_true',
help='If set, wait for device to be online after flash')
logging_common.AddLoggingArguments(parser)
script_common.AddDeviceArguments(parser)
args = parser.parse_args()
logging_common.InitializeLogging(args)
if args.denylist_file:
denylist = device_denylist.Denylist(args.denylist_file).Read()
if denylist:
logger.critical('Device(s) in denylist, not flashing devices:')
for key in denylist:
logger.critical(' %s', key)
return exit_codes.INFRA
flashed_devices = []
failed_devices = []
def flash(device):
try:
device.FlashDevice(args.build_path,
wipe=args.wipe,
wait_for_reboot=args.wait)
flashed_devices.append(device)
except Exception: # pylint: disable=broad-except
logger.exception('Device %s failed to flash.', str(device))
failed_devices.append(device)
devices = []
try:
adb_devices = script_common.GetDevices(args.devices, args.denylist_file)
devices += [fastboot_utils.FastbootUtils(device=d) for d in adb_devices]
except device_errors.NoDevicesError:
# Don't bail out if we're not looking for any particular device and there's
# at least one sitting in fastboot mode. Note that if we ARE looking for a
# particular device, and it's in fastboot mode, this will still fail.
fastboot_devices = fastboot.Fastboot.Devices()
if args.devices or not fastboot_devices:
raise
devices += [
fastboot_utils.FastbootUtils(fastbooter=d) for d in fastboot_devices
]
parallel_devices = parallelizer.SyncParallelizer(devices)
parallel_devices.pMap(flash)
if flashed_devices:
logger.info('The following devices were flashed:')
logger.info(' %s', ' '.join(str(d) for d in flashed_devices))
if failed_devices:
logger.critical('The following devices failed to flash:')
logger.critical(' %s', ' '.join(str(d) for d in failed_devices))
return exit_codes.INFRA
return 0
if __name__ == '__main__':
sys.exit(main())