| Index: build/android/pylib/device/device_utils.py
|
| diff --git a/build/android/pylib/device/device_utils.py b/build/android/pylib/device/device_utils.py
|
| index 97019236374fd8adaa3a8b021b97fd3f25a8f5ea..0fee10a7fb0c701551179ae6f057ce2729318053 100644
|
| --- a/build/android/pylib/device/device_utils.py
|
| +++ b/build/android/pylib/device/device_utils.py
|
| @@ -99,6 +99,17 @@ class DeviceUtils(object):
|
| Returns:
|
| True if adbd has root privileges, False otherwise.
|
| """
|
| + return self._HasRootImpl()
|
| +
|
| + def _HasRootImpl(self):
|
| + """ Implementation of HasRoot.
|
| +
|
| + This is split from HasRoot to allow other DeviceUtils methods to call
|
| + HasRoot without spawning a new timeout thread.
|
| +
|
| + Returns:
|
| + Same as for |HasRoot|.
|
| + """
|
| return self.old_interface.IsRootEnabled()
|
|
|
| @decorators.WithTimeoutAndRetriesFromInstance()
|
| @@ -171,7 +182,7 @@ class DeviceUtils(object):
|
| self.old_interface.WaitForSdCardReady(timeout)
|
| if wifi:
|
| while not 'Wi-Fi is enabled' in (
|
| - self.old_interface.RunShellCommand('dumpsys wifi')):
|
| + self._RunShellCommandImpl('dumpsys wifi')):
|
| time.sleep(0.1)
|
|
|
| @decorators.WithTimeoutAndRetriesDefaults(
|
| @@ -232,6 +243,61 @@ class DeviceUtils(object):
|
| raise device_errors.CommandFailedError(
|
| ['adb', 'install', apk_path], str(e))
|
|
|
| + @decorators.WithTimeoutAndRetriesFromInstance()
|
| + def RunShellCommand(self, cmd, check_return=False, root=False, timeout=None,
|
| + retries=None):
|
| + """Run an ADB shell command.
|
| +
|
| + TODO(jbudorick) Switch the default value of check_return to True after
|
| + AndroidCommands is gone.
|
| +
|
| + Args:
|
| + cmd: A list containing the command to run on the device and any arguments.
|
| + check_return: A boolean indicating whether or not the return code should
|
| + be checked.
|
| + timeout: Same as for |IsOnline|.
|
| + retries: Same as for |IsOnline|.
|
| + Raises:
|
| + CommandFailedError if check_return is True and the return code is nozero.
|
| + Returns:
|
| + The output of the command.
|
| + """
|
| + return self._RunShellCommandImpl(cmd, check_return=check_return, root=root,
|
| + timeout=timeout)
|
| +
|
| + def _RunShellCommandImpl(self, cmd, check_return=False, root=False,
|
| + timeout=None):
|
| + """Implementation of RunShellCommand.
|
| +
|
| + This is split from RunShellCommand to allow other DeviceUtils methods to
|
| + call RunShellCommand without spawning a new timeout thread.
|
| +
|
| + TODO(jbudorick) Remove the timeout parameter once this is no longer
|
| + implemented via AndroidCommands.
|
| +
|
| + Args:
|
| + cmd: Same as for |RunShellCommand|.
|
| + check_return: Same as for |RunShellCommand|.
|
| + timeout: Same as for |IsOnline|.
|
| + Raises:
|
| + Same as for |RunShellCommand|.
|
| + Returns:
|
| + Same as for |RunShellCommand|.
|
| + """
|
| + if isinstance(cmd, list):
|
| + cmd = ' '.join(cmd)
|
| + if root and not self.HasRoot():
|
| + cmd = 'su -c %s' % cmd
|
| + if check_return:
|
| + code, output = self.old_interface.GetShellCommandStatusAndOutput(
|
| + cmd, timeout_time=timeout)
|
| + if int(code) != 0:
|
| + raise device_errors.CommandFailedError(
|
| + cmd, 'Nonzero exit code (%d)' % code)
|
| + else:
|
| + output = self.old_interface.RunShellCommand(cmd, timeout_time=timeout)
|
| + return output
|
| +
|
| def __str__(self):
|
| """Returns the device serial."""
|
| return self.old_interface.GetDevice()
|
|
|