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 # pylint: disable-all | 9 # pylint: disable-all |
| 10 | 10 |
| (...skipping 1782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1793 package = match.group(2) | 1793 package = match.group(2) |
| 1794 logging.warning('Trying to dismiss %s dialog for %s' % match.groups()) | 1794 logging.warning('Trying to dismiss %s dialog for %s' % match.groups()) |
| 1795 self.SendKeyEvent(KEYCODE_DPAD_RIGHT) | 1795 self.SendKeyEvent(KEYCODE_DPAD_RIGHT) |
| 1796 self.SendKeyEvent(KEYCODE_DPAD_RIGHT) | 1796 self.SendKeyEvent(KEYCODE_DPAD_RIGHT) |
| 1797 self.SendKeyEvent(KEYCODE_ENTER) | 1797 self.SendKeyEvent(KEYCODE_ENTER) |
| 1798 match = _FindFocusedWindow() | 1798 match = _FindFocusedWindow() |
| 1799 if match: | 1799 if match: |
| 1800 logging.error('Still showing a %s dialog for %s' % match.groups()) | 1800 logging.error('Still showing a %s dialog for %s' % match.groups()) |
| 1801 return package | 1801 return package |
| 1802 | 1802 |
| 1803 def EfficientDeviceDirectoryCopy(self, source, dest): | |
| 1804 """ Copy a directory efficiently on the device | |
| 1805 | |
| 1806 Copy new and changed files the source directory to the destination directory | |
| 1807 and remove added files. This is in some cases much faster than cp -r. | |
| 1808 | |
| 1809 Args: | |
| 1810 source: absolute path of source directory | |
| 1811 dest: absolute path of destination directory | |
| 1812 """ | |
| 1813 logging.info("In EfficientDeviceDirectoryCopy %s %s" % (source, dest)) | |
|
bulach
2014/03/13 17:22:57
nit: s/"/'/
also, s/%/,/
that is, logging.info t
| |
| 1814 script = """ | |
|
bulach
2014/03/13 17:22:57
would it make sense to have this in a separate fil
aberent
2014/03/13 18:32:45
Done.
| |
| 1815 source=$1 | |
| 1816 dest=$2 | |
| 1817 echo copying $source to $dest | |
| 1818 | |
| 1819 delete_extra() { | |
| 1820 # Don't delete symbolic links, since doing so deletes the vital lib link. | |
| 1821 if [ ! -L "$1" ] | |
| 1822 then | |
| 1823 if [ ! -e "$source/$1" ] | |
| 1824 then | |
| 1825 echo rm -rf "$dest/$1" | |
| 1826 rm -rf "$dest/$1" | |
| 1827 elif [ -d "$1" ] | |
| 1828 then | |
| 1829 for f in "$1"/* | |
| 1830 do | |
| 1831 delete_extra "$f" | |
| 1832 done | |
| 1833 fi | |
| 1834 fi | |
| 1835 } | |
| 1836 | |
| 1837 copy_if_older() { | |
| 1838 if [ -d "$1" ] && [ -e "$dest/$1" ] | |
| 1839 then | |
| 1840 if [ ! -e "$dest/$1" ] | |
| 1841 then | |
| 1842 echo cp -a "$1" "$dest/$1" | |
| 1843 cp -a "$1" "$dest/$1" | |
| 1844 else | |
| 1845 for f in "$1"/* | |
| 1846 do | |
| 1847 copy_if_older "$f" | |
|
bulach
2014/03/13 17:22:57
indent
aberent
2014/03/13 18:32:45
Done.
| |
| 1848 done | |
| 1849 fi | |
| 1850 elif [ ! -e "$dest/$1" ] || [ "$1" -ot "$dest/$1" ] | |
| 1851 then | |
| 1852 echo cp -a "$1" "$dest/$1" | |
| 1853 cp -a "$1" "$dest/$1" | |
| 1854 fi | |
| 1855 } | |
| 1856 | |
| 1857 if [ -e "$dest" ] | |
| 1858 then | |
| 1859 echo cd "$dest" | |
| 1860 cd "$dest" | |
| 1861 for f in ./* | |
| 1862 do | |
| 1863 if [ -e "$f" ] | |
| 1864 then | |
| 1865 delete_extra "$f" | |
| 1866 fi | |
| 1867 done | |
| 1868 else | |
| 1869 echo mkdir "$dest" | |
| 1870 mkdir "$dest" | |
| 1871 fi | |
| 1872 echo cd "$source" | |
| 1873 cd "$source" | |
| 1874 for f in ./* | |
| 1875 do | |
| 1876 if [ -e "$f" ] | |
| 1877 then | |
| 1878 copy_if_older "$f" | |
| 1879 fi | |
| 1880 done | |
| 1881 """ | |
| 1882 temp_script_file = self._GetDeviceTempFileName( | |
| 1883 AndroidCommands._TEMP_SCRIPT_FILE_BASE_FMT) | |
| 1884 self.SetFileContents(temp_script_file, script) | |
| 1885 self.EnableAdbRoot | |
| 1886 out = self.RunShellCommand("sh %s %s %s" % (temp_script_file, source, dest), | |
|
bulach
2014/03/13 17:22:57
nit: s/"/'/
aberent
2014/03/13 18:32:45
Done.
| |
| 1887 timeout_time=120) | |
| 1888 if self._device: | |
| 1889 device_repr = self._device[-4:] | |
| 1890 else: | |
| 1891 device_repr = '????' | |
| 1892 for line in out: | |
| 1893 logging.info('[%s]> %s', device_repr, line) | |
|
bulach
2014/03/13 17:22:57
I think logging is already hooked up to have a dev
aberent
2014/03/13 18:32:45
No, the device is added by RunShellCommand, but th
| |
| 1894 | |
| 1803 | 1895 |
| 1804 class NewLineNormalizer(object): | 1896 class NewLineNormalizer(object): |
| 1805 """A file-like object to normalize EOLs to '\n'. | 1897 """A file-like object to normalize EOLs to '\n'. |
| 1806 | 1898 |
| 1807 Pexpect runs adb within a pseudo-tty device (see | 1899 Pexpect runs adb within a pseudo-tty device (see |
| 1808 http://www.noah.org/wiki/pexpect), so any '\n' printed by adb is written | 1900 http://www.noah.org/wiki/pexpect), so any '\n' printed by adb is written |
| 1809 as '\r\n' to the logfile. Since adb already uses '\r\n' to terminate | 1901 as '\r\n' to the logfile. Since adb already uses '\r\n' to terminate |
| 1810 lines, the log ends up having '\r\r\n' at the end of each line. This | 1902 lines, the log ends up having '\r\r\n' at the end of each line. This |
| 1811 filter replaces the above with a single '\n' in the data stream. | 1903 filter replaces the above with a single '\n' in the data stream. |
| 1812 """ | 1904 """ |
| 1813 def __init__(self, output): | 1905 def __init__(self, output): |
| 1814 self._output = output | 1906 self._output = output |
| 1815 | 1907 |
| 1816 def write(self, data): | 1908 def write(self, data): |
| 1817 data = data.replace('\r\r\n', '\n') | 1909 data = data.replace('\r\r\n', '\n') |
| 1818 self._output.write(data) | 1910 self._output.write(data) |
| 1819 | 1911 |
| 1820 def flush(self): | 1912 def flush(self): |
| 1821 self._output.flush() | 1913 self._output.flush() |
| OLD | NEW |