| OLD | NEW |
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """Provides an interface to communicate with the device via the adb command. | 5 """Provides an interface to communicate with the device via the adb command. |
| 6 | 6 |
| 7 Assumes adb binary is currently on system path. | 7 Assumes adb binary is currently on system path. |
| 8 """ | 8 """ |
| 9 # pylint: disable-all | 9 # pylint: disable-all |
| 10 | 10 |
| (...skipping 1036 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1047 | 1047 |
| 1048 def PushIfNeeded(self, host_path, device_path): | 1048 def PushIfNeeded(self, host_path, device_path): |
| 1049 """Pushes |host_path| to |device_path|. | 1049 """Pushes |host_path| to |device_path|. |
| 1050 | 1050 |
| 1051 Works for files and directories. This method skips copying any paths in | 1051 Works for files and directories. This method skips copying any paths in |
| 1052 |test_data_paths| that already exist on the device with the same hash. | 1052 |test_data_paths| that already exist on the device with the same hash. |
| 1053 | 1053 |
| 1054 All pushed files can be removed by calling RemovePushedFiles(). | 1054 All pushed files can be removed by calling RemovePushedFiles(). |
| 1055 """ | 1055 """ |
| 1056 MAX_INDIVIDUAL_PUSHES = 50 | 1056 MAX_INDIVIDUAL_PUSHES = 50 |
| 1057 assert os.path.exists(host_path), 'Local path not found %s' % host_path | 1057 if not os.path.exists(host_path): |
| 1058 raise device_errors.CommandFailedError( |
| 1059 'Local path not found %s' % host_path, device=str(self)) |
| 1058 | 1060 |
| 1059 # See if the file on the host changed since the last push (if any) and | 1061 # See if the file on the host changed since the last push (if any) and |
| 1060 # return early if it didn't. Note that this shortcut assumes that the tests | 1062 # return early if it didn't. Note that this shortcut assumes that the tests |
| 1061 # on the device don't modify the files. | 1063 # on the device don't modify the files. |
| 1062 if not os.path.isdir(host_path): | 1064 if not os.path.isdir(host_path): |
| 1063 if host_path in self._push_if_needed_cache: | 1065 if host_path in self._push_if_needed_cache: |
| 1064 host_path_mtime = self._push_if_needed_cache[host_path] | 1066 host_path_mtime = self._push_if_needed_cache[host_path] |
| 1065 if host_path_mtime == os.stat(host_path).st_mtime: | 1067 if host_path_mtime == os.stat(host_path).st_mtime: |
| 1066 return | 1068 return |
| 1067 | 1069 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1103 | 1105 |
| 1104 diff_size = 0 | 1106 diff_size = 0 |
| 1105 if len(changed_files) <= MAX_INDIVIDUAL_PUSHES: | 1107 if len(changed_files) <= MAX_INDIVIDUAL_PUSHES: |
| 1106 diff_size = sum(host_utils.GetRecursiveDiskUsage(f[0]) | 1108 diff_size = sum(host_utils.GetRecursiveDiskUsage(f[0]) |
| 1107 for f in changed_files) | 1109 for f in changed_files) |
| 1108 | 1110 |
| 1109 # TODO(craigdh): Replace this educated guess with a heuristic that | 1111 # TODO(craigdh): Replace this educated guess with a heuristic that |
| 1110 # approximates the push time for each method. | 1112 # approximates the push time for each method. |
| 1111 if len(changed_files) > MAX_INDIVIDUAL_PUSHES or diff_size > 0.5 * size: | 1113 if len(changed_files) > MAX_INDIVIDUAL_PUSHES or diff_size > 0.5 * size: |
| 1112 self._actual_push_size += size | 1114 self._actual_push_size += size |
| 1113 if os.path.isdir(host_path): | |
| 1114 self.RunShellCommand('mkdir -p %s' % device_path) | |
| 1115 Push(host_path, device_path) | 1115 Push(host_path, device_path) |
| 1116 else: | 1116 else: |
| 1117 for f in changed_files: | 1117 for f in changed_files: |
| 1118 Push(f[0], f[1]) | 1118 Push(f[0], f[1]) |
| 1119 self._actual_push_size += diff_size | 1119 self._actual_push_size += diff_size |
| 1120 | 1120 |
| 1121 def GetPushSizeInfo(self): | 1121 def GetPushSizeInfo(self): |
| 1122 """Get total size of pushes to the device done via PushIfNeeded() | 1122 """Get total size of pushes to the device done via PushIfNeeded() |
| 1123 | 1123 |
| 1124 Returns: | 1124 Returns: |
| (...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1776 self.RunShellCommand('rm -f "%s"' % device_file) | 1776 self.RunShellCommand('rm -f "%s"' % device_file) |
| 1777 return host_file | 1777 return host_file |
| 1778 | 1778 |
| 1779 def PullFileFromDevice(self, device_file, host_file): | 1779 def PullFileFromDevice(self, device_file, host_file): |
| 1780 """Download |device_file| on the device from to |host_file| on the host. | 1780 """Download |device_file| on the device from to |host_file| on the host. |
| 1781 | 1781 |
| 1782 Args: | 1782 Args: |
| 1783 device_file: Absolute path to the file to retrieve from the device. | 1783 device_file: Absolute path to the file to retrieve from the device. |
| 1784 host_file: Absolute path to the file to store on the host. | 1784 host_file: Absolute path to the file to store on the host. |
| 1785 """ | 1785 """ |
| 1786 assert self._adb.Pull(device_file, host_file) | 1786 if not self._adb.Pull(device_file, host_file): |
| 1787 raise device_errors.AdbCommandFailedError( |
| 1788 ['pull', device_file, host_file], 'Failed to pull file from device.') |
| 1787 assert os.path.exists(host_file) | 1789 assert os.path.exists(host_file) |
| 1788 | 1790 |
| 1789 def SetUtilWrapper(self, util_wrapper): | 1791 def SetUtilWrapper(self, util_wrapper): |
| 1790 """Sets a wrapper prefix to be used when running a locally-built | 1792 """Sets a wrapper prefix to be used when running a locally-built |
| 1791 binary on the device (ex.: md5sum_bin). | 1793 binary on the device (ex.: md5sum_bin). |
| 1792 """ | 1794 """ |
| 1793 self._util_wrapper = util_wrapper | 1795 self._util_wrapper = util_wrapper |
| 1794 | 1796 |
| 1795 def RunInstrumentationTest(self, test, test_package, instr_args, timeout): | 1797 def RunInstrumentationTest(self, test, test_package, instr_args, timeout): |
| 1796 """Runs a single instrumentation test. | 1798 """Runs a single instrumentation test. |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1966 """ | 1968 """ |
| 1967 def __init__(self, output): | 1969 def __init__(self, output): |
| 1968 self._output = output | 1970 self._output = output |
| 1969 | 1971 |
| 1970 def write(self, data): | 1972 def write(self, data): |
| 1971 data = data.replace('\r\r\n', '\n') | 1973 data = data.replace('\r\r\n', '\n') |
| 1972 self._output.write(data) | 1974 self._output.write(data) |
| 1973 | 1975 |
| 1974 def flush(self): | 1976 def flush(self): |
| 1975 self._output.flush() | 1977 self._output.flush() |
| OLD | NEW |