Skip to content

Commit f5fedf4

Browse files
committed
tools/pyboard.py: Add fs_cp function for direct device-to-device copy.
Signed-off-by: Damien George <[email protected]>
1 parent 24f1161 commit f5fedf4

File tree

1 file changed

+26
-9
lines changed

1 file changed

+26
-9
lines changed

tools/pyboard.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,20 @@ def fs_cat(self, src, chunk_size=256):
491491
)
492492
self.exec_(cmd, data_consumer=stdout_write_bytes)
493493

494+
def fs_cp(self, src, dest, chunk_size=256, progress_callback=None):
495+
if progress_callback:
496+
src_size = int(self.exec_("import os\nprint(os.stat('%s')[6])" % src))
497+
written = 0
498+
self.exec_("fr=open('%s','rb')\nr=fr.read\nfw=open('%s','wb')\nw=fw.write" % (src, dest))
499+
while True:
500+
data_len = int(self.exec_("d=r(%u)\nw(d)\nprint(len(d))" % chunk_size))
501+
if not data_len:
502+
break
503+
if progress_callback:
504+
written += data_len
505+
progress_callback(written, src_size)
506+
self.exec_("fr.close()\nfw.close()")
507+
494508
def fs_get(self, src, dest, chunk_size=256, progress_callback=None):
495509
if progress_callback:
496510
src_size = int(self.exec_("import os\nprint(os.stat('%s')[6])" % src))
@@ -584,18 +598,21 @@ def fname_cp_dest(src, dest):
584598
srcs = args[:-1]
585599
dest = args[-1]
586600
if dest.startswith(":"):
587-
op = pyb.fs_put
588-
fmt = "cp %s :%s"
589-
dest = fname_remote(dest)
601+
op_remote_src = pyb.fs_cp
602+
op_local_src = pyb.fs_put
590603
else:
591-
op = pyb.fs_get
592-
fmt = "cp :%s %s"
604+
op_remote_src = pyb.fs_get
605+
op_local_src = lambda src, dest, **_: __import__("shutil").copy(src, dest)
593606
for src in srcs:
594-
src = fname_remote(src)
595-
dest2 = fname_cp_dest(src, dest)
596607
if verbose:
597-
print(fmt % (src, dest2))
598-
op(src, dest2, progress_callback=progress_callback)
608+
print("cp %s %s" % (src, dest))
609+
if src.startswith(":"):
610+
op = op_remote_src
611+
else:
612+
op = op_local_src
613+
src2 = fname_remote(src)
614+
dest2 = fname_cp_dest(src2, fname_remote(dest))
615+
op(src2, dest2, progress_callback=progress_callback)
599616
else:
600617
op = {
601618
"cat": pyb.fs_cat,

0 commit comments

Comments
 (0)