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 823 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 834 host_path: Path (file or directory) on the host. | 834 host_path: Path (file or directory) on the host. |
| 835 device_path: Path on the device. | 835 device_path: Path on the device. |
| 836 ignore_filenames: If True only the file contents are considered when | 836 ignore_filenames: If True only the file contents are considered when |
| 837 checking whether a file has changed, otherwise the relative path | 837 checking whether a file has changed, otherwise the relative path |
| 838 must also match. | 838 must also match. |
| 839 | 839 |
| 840 Returns: | 840 Returns: |
| 841 A list of tuples of the form (host_path, device_path) for files whose | 841 A list of tuples of the form (host_path, device_path) for files whose |
| 842 md5sums do not match. | 842 md5sums do not match. |
| 843 """ | 843 """ |
| 844 | |
| 845 real_host_path = os.path.realpath(host_path) | |
|
craigdh
2013/11/05 19:10:08
add a comment here explaining why this is needed
aberent
2013/11/05 19:58:34
Done.
| |
| 846 real_device_path = self.RunShellCommand('realpath "%s"' % device_path)[0] | |
| 847 | |
| 844 host_hash_tuples, device_hash_tuples = self._RunMd5Sum( | 848 host_hash_tuples, device_hash_tuples = self._RunMd5Sum( |
| 845 host_path, device_path) | 849 real_host_path, real_device_path) |
| 846 | 850 |
| 847 # Ignore extra files on the device. | 851 # Ignore extra files on the device. |
| 848 if not ignore_filenames: | 852 if not ignore_filenames: |
| 849 host_files = [os.path.relpath(os.path.normpath(p.path), | 853 host_files = [os.path.relpath(os.path.normpath(p.path), |
| 850 os.path.normpath(host_path)) for p in host_hash_tuples] | 854 real_host_path) for p in host_hash_tuples] |
| 851 | 855 |
| 852 def HostHas(fname): | 856 def HostHas(fname): |
| 853 return any(path in fname for path in host_files) | 857 return any(path in fname for path in host_files) |
| 854 | 858 |
| 855 device_hash_tuples = [h for h in device_hash_tuples if HostHas(h.path)] | 859 device_hash_tuples = [h for h in device_hash_tuples if HostHas(h.path)] |
| 856 | 860 |
| 857 if len(host_hash_tuples) > len(device_hash_tuples): | 861 if len(host_hash_tuples) > len(device_hash_tuples): |
| 858 logging.info('%s files do not exist on the device' % | 862 logging.info('%s files do not exist on the device' % |
| 859 (len(host_hash_tuples) - len(device_hash_tuples))) | 863 (len(host_hash_tuples) - len(device_hash_tuples))) |
| 860 | 864 |
| 861 # Constructs the target device path from a given host path. Don't use when | 865 # Constructs the target device path from a given host path. Don't use when |
| 862 # only a single file is given as the base name given in device_path may | 866 # only a single file is given as the base name given in device_path may |
| 863 # differ from that in host_path. | 867 # differ from that in host_path. |
| 864 def HostToDevicePath(host_file_path): | 868 def HostToDevicePath(host_file_path): |
| 865 return os.path.join(device_path, os.path.relpath( | 869 return os.path.join(device_path, os.path.relpath(host_file_path, |
| 866 host_file_path, os.path.normpath(host_path))) | 870 real_host_path)) |
| 867 | 871 |
| 868 device_hashes = [h.hash for h in device_hash_tuples] | 872 device_hashes = [h.hash for h in device_hash_tuples] |
| 869 return [(t.path, HostToDevicePath(t.path) if os.path.isdir(host_path) else | 873 return [(t.path, HostToDevicePath(t.path) if |
| 870 device_path) | 874 os.path.isdir(real_host_path) else real_device_path) |
| 871 for t in host_hash_tuples if t.hash not in device_hashes] | 875 for t in host_hash_tuples if t.hash not in device_hashes] |
| 872 | 876 |
| 873 def PushIfNeeded(self, host_path, device_path): | 877 def PushIfNeeded(self, host_path, device_path): |
| 874 """Pushes |host_path| to |device_path|. | 878 """Pushes |host_path| to |device_path|. |
| 875 | 879 |
| 876 Works for files and directories. This method skips copying any paths in | 880 Works for files and directories. This method skips copying any paths in |
| 877 |test_data_paths| that already exist on the device with the same hash. | 881 |test_data_paths| that already exist on the device with the same hash. |
| 878 | 882 |
| 879 All pushed files can be removed by calling RemovePushedFiles(). | 883 All pushed files can be removed by calling RemovePushedFiles(). |
| 880 """ | 884 """ |
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1654 """ | 1658 """ |
| 1655 def __init__(self, output): | 1659 def __init__(self, output): |
| 1656 self._output = output | 1660 self._output = output |
| 1657 | 1661 |
| 1658 def write(self, data): | 1662 def write(self, data): |
| 1659 data = data.replace('\r\r\n', '\n') | 1663 data = data.replace('\r\r\n', '\n') |
| 1660 self._output.write(data) | 1664 self._output.write(data) |
| 1661 | 1665 |
| 1662 def flush(self): | 1666 def flush(self): |
| 1663 self._output.flush() | 1667 self._output.flush() |
| OLD | NEW |