11import re
22import os
3+ from pathlib import Path , PurePosixPath
34
45from ppadb .command .transport import Transport
56from ppadb .command .serial import Serial
3031 from pipes import quote as cmd_quote
3132
3233
33- def _get_src_info (src ):
34- """Get information about the contents of a folder; used in :meth:`Device.push`."""
35- exists = os .path .exists (src )
36- isfile = os .path .isfile (src )
37- isdir = os .path .isdir (src )
38- basename = os .path .basename (src )
39- walk = None if not isdir else list (os .walk (src ))
40-
41- return exists , isfile , isdir , basename , walk
42-
43-
4434class Device (Transport , Serial , Input , Utils , WM , Traffic , CPUStat , BatteryStats ):
4535 INSTALL_RESULT_PATTERN = "(Success|Failure|Error)\s?(.*)"
4636 UNINSTALL_RESULT_PATTERN = "(Success|Failure.*|.*Unknown package:.*)"
@@ -66,22 +56,23 @@ def _push(self, src, dest, mode, progress):
6656 sync .push (src , dest , mode , progress )
6757
6858 def push (self , src , dest , mode = 0o644 , progress = None ):
69- exists , isfile , isdir , basename , walk = _get_src_info (src )
70- if not exists :
59+ src = Path (src )
60+ dest = PurePosixPath (dest )
61+ if not src .exists ():
7162 raise FileNotFoundError ("Cannot find {}" .format (src ))
7263
73- if isfile :
64+ if src . is_file () :
7465 self ._push (src , dest , mode , progress )
66+ elif src .is_dir ():
67+ src .resolve ()
68+ for root , dirs , files in src .walk ():
69+ subdir = root .relative_to (src )
70+ destdir = dest / src .name / subdir
7571
76- elif isdir :
77- for root , dirs , files in walk :
78- subdir = os .path .relpath (root , src )
79- root_dir_path = os .path .normpath (os .path .join (basename , subdir ))
80-
81- self .shell ('mkdir -p "{}"' .format (os .path .normpath (os .path .join (dest , root_dir_path ))))
72+ self .shell (f'mkdir -p "{ destdir } "' )
8273
8374 for item in files :
84- self ._push (os . path . normpath ( os . path . join ( root , item )), os . path . normpath ( os . path . join ( dest , root_dir_path , item )) , mode , progress )
75+ self ._push (root / item , destdir / item , mode , progress )
8576
8677 def pull (self , src , dest ):
8778 sync_conn = self .sync ()
0 commit comments