Chromium Code Reviews| 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 | 9 |
| 10 import collections | 10 import collections |
| (...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 776 self._pushed_files.append(device_path) | 776 self._pushed_files.append(device_path) |
| 777 self._potential_push_size += size | 777 self._potential_push_size += size |
| 778 | 778 |
| 779 if self.CheckMd5Sum(local_path, device_path): | 779 if self.CheckMd5Sum(local_path, device_path): |
| 780 return | 780 return |
| 781 | 781 |
| 782 self._actual_push_size += size | 782 self._actual_push_size += size |
| 783 # They don't match, so remove everything first and then create it. | 783 # They don't match, so remove everything first and then create it. |
| 784 if os.path.isdir(local_path): | 784 if os.path.isdir(local_path): |
| 785 self.RunShellCommand('rm -r %s' % device_path, timeout_time=2 * 60) | 785 self.RunShellCommand('rm -r %s' % device_path, timeout_time=2 * 60) |
| 786 self.RunShellCommand('mkdir -p %s' % device_path) | 786 self.RunShellCommand('mkdir -p %s' % device_path) |
|
frankf
2013/07/18 17:54:07
Is this necessary? Doesn't push overwrite? From th
| |
| 787 | 787 |
| 788 # NOTE: We can't use adb_interface.Push() because it hardcodes a timeout of | 788 # NOTE: We can't use adb_interface.Push() because it hardcodes a timeout of |
| 789 # 60 seconds which isn't sufficient for a lot of users of this method. | 789 # 60 seconds which isn't sufficient for a lot of users of this method. |
| 790 push_command = 'push %s %s' % (local_path, device_path) | 790 push_command = 'push %s %s' % (local_path, device_path) |
| 791 self._LogShell(push_command) | 791 self._LogShell(push_command) |
| 792 output = self._adb.SendCommand(push_command, timeout_time=30 * 60) | 792 |
| 793 assert _HasAdbPushSucceeded(output) | 793 # Retry push with increasing backoff if the device is busy. |
| 794 retry = 0 | |
| 795 while True: | |
| 796 output = self._adb.SendCommand(push_command, timeout_time=30 * 60) | |
| 797 if _HasAdbPushSucceeded(output): | |
| 798 return | |
| 799 if 'resource busy' in output and retry < 3: | |
|
frankf
2013/07/18 17:54:07
If rm is required, then shouldn't you also being d
| |
| 800 retry += 1 | |
| 801 wait_time = 5 * retry | |
| 802 logging.error('Push failed, retrying in %d seconds: %s' % | |
| 803 (wait_time, output)) | |
| 804 time.sleep(wait_time) | |
| 805 else: | |
| 806 raise Exception('Push failed: %s' % output) | |
| 794 | 807 |
| 795 def GetPushSizeInfo(self): | 808 def GetPushSizeInfo(self): |
| 796 """Get total size of pushes to the device done via PushIfNeeded() | 809 """Get total size of pushes to the device done via PushIfNeeded() |
| 797 | 810 |
| 798 Returns: | 811 Returns: |
| 799 A tuple: | 812 A tuple: |
| 800 1. Total size of push requests to PushIfNeeded (MB) | 813 1. Total size of push requests to PushIfNeeded (MB) |
| 801 2. Total size that was actually pushed (MB) | 814 2. Total size that was actually pushed (MB) |
| 802 """ | 815 """ |
| 803 return (self._potential_push_size, self._actual_push_size) | 816 return (self._potential_push_size, self._actual_push_size) |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1391 """ | 1404 """ |
| 1392 def __init__(self, output): | 1405 def __init__(self, output): |
| 1393 self._output = output | 1406 self._output = output |
| 1394 | 1407 |
| 1395 def write(self, data): | 1408 def write(self, data): |
| 1396 data = data.replace('\r\r\n', '\n') | 1409 data = data.replace('\r\r\n', '\n') |
| 1397 self._output.write(data) | 1410 self._output.write(data) |
| 1398 | 1411 |
| 1399 def flush(self): | 1412 def flush(self): |
| 1400 self._output.flush() | 1413 self._output.flush() |
| OLD | NEW |