| 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 # Md5Sum resolves symbolic links in path names so the calculation of |
| 846 # relative path names from its output will need the real path names of the |
| 847 # base directories. Having calculated these they are used throughout the |
| 848 # function since this makes us less subject to any future changes to Md5Sum. |
| 849 real_host_path = os.path.realpath(host_path) |
| 850 real_device_path = self.RunShellCommand('realpath "%s"' % device_path)[0] |
| 851 |
| 844 host_hash_tuples, device_hash_tuples = self._RunMd5Sum( | 852 host_hash_tuples, device_hash_tuples = self._RunMd5Sum( |
| 845 host_path, device_path) | 853 real_host_path, real_device_path) |
| 846 | 854 |
| 847 # Ignore extra files on the device. | 855 # Ignore extra files on the device. |
| 848 if not ignore_filenames: | 856 if not ignore_filenames: |
| 849 host_files = [os.path.relpath(os.path.normpath(p.path), | 857 host_files = [os.path.relpath(os.path.normpath(p.path), |
| 850 os.path.normpath(host_path)) for p in host_hash_tuples] | 858 real_host_path) for p in host_hash_tuples] |
| 851 | 859 |
| 852 def HostHas(fname): | 860 def HostHas(fname): |
| 853 return any(path in fname for path in host_files) | 861 return any(path in fname for path in host_files) |
| 854 | 862 |
| 855 device_hash_tuples = [h for h in device_hash_tuples if HostHas(h.path)] | 863 device_hash_tuples = [h for h in device_hash_tuples if HostHas(h.path)] |
| 856 | 864 |
| 857 if len(host_hash_tuples) > len(device_hash_tuples): | 865 if len(host_hash_tuples) > len(device_hash_tuples): |
| 858 logging.info('%s files do not exist on the device' % | 866 logging.info('%s files do not exist on the device' % |
| 859 (len(host_hash_tuples) - len(device_hash_tuples))) | 867 (len(host_hash_tuples) - len(device_hash_tuples))) |
| 860 | 868 |
| 861 # Constructs the target device path from a given host path. Don't use when | 869 # 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 | 870 # only a single file is given as the base name given in device_path may |
| 863 # differ from that in host_path. | 871 # differ from that in host_path. |
| 864 def HostToDevicePath(host_file_path): | 872 def HostToDevicePath(host_file_path): |
| 865 return os.path.join(device_path, os.path.relpath( | 873 return os.path.join(device_path, os.path.relpath(host_file_path, |
| 866 host_file_path, os.path.normpath(host_path))) | 874 real_host_path)) |
| 867 | 875 |
| 868 device_hashes = [h.hash for h in device_hash_tuples] | 876 device_hashes = [h.hash for h in device_hash_tuples] |
| 869 return [(t.path, HostToDevicePath(t.path) if os.path.isdir(host_path) else | 877 return [(t.path, HostToDevicePath(t.path) if |
| 870 device_path) | 878 os.path.isdir(real_host_path) else real_device_path) |
| 871 for t in host_hash_tuples if t.hash not in device_hashes] | 879 for t in host_hash_tuples if t.hash not in device_hashes] |
| 872 | 880 |
| 873 def PushIfNeeded(self, host_path, device_path): | 881 def PushIfNeeded(self, host_path, device_path): |
| 874 """Pushes |host_path| to |device_path|. | 882 """Pushes |host_path| to |device_path|. |
| 875 | 883 |
| 876 Works for files and directories. This method skips copying any paths in | 884 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. | 885 |test_data_paths| that already exist on the device with the same hash. |
| 878 | 886 |
| 879 All pushed files can be removed by calling RemovePushedFiles(). | 887 All pushed files can be removed by calling RemovePushedFiles(). |
| 880 """ | 888 """ |
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1654 """ | 1662 """ |
| 1655 def __init__(self, output): | 1663 def __init__(self, output): |
| 1656 self._output = output | 1664 self._output = output |
| 1657 | 1665 |
| 1658 def write(self, data): | 1666 def write(self, data): |
| 1659 data = data.replace('\r\r\n', '\n') | 1667 data = data.replace('\r\r\n', '\n') |
| 1660 self._output.write(data) | 1668 self._output.write(data) |
| 1661 | 1669 |
| 1662 def flush(self): | 1670 def flush(self): |
| 1663 self._output.flush() | 1671 self._output.flush() |
| OLD | NEW |