diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index 02cdf54c..2a95d74e 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -1115,7 +1115,8 @@ class HttpCli(object): excl = None if target: excl, target = (target.split("/", 1) + [""])[:2] - ret["k" + excl] = self.gen_tree("/".join([top, excl]).strip("/"), target) + sub = self.gen_tree("/".join([top, excl]).strip("/"), target) + ret["k" + quotep(excl)] = sub try: vn, rem = self.auth.vfs.get(top, self.uname, True, False) diff --git a/copyparty/up2k.py b/copyparty/up2k.py index c0aca5d3..a811d476 100644 --- a/copyparty/up2k.py +++ b/copyparty/up2k.py @@ -684,7 +684,7 @@ class Up2k(object): cur = cur.execute(q, argv) for _, dtime, dsize, dp_dir, dp_fn in cur: if dp_dir.startswith("//") or dp_fn.startswith("//"): - dp_dir, dp_fn = s3dec(self.mem_cur, dp_dir, dp_fn) + dp_dir, dp_fn = s3dec(dp_dir, dp_fn) dp_abs = os.path.join(cj["ptop"], dp_dir, dp_fn).replace("\\", "/") # relying on path.exists to return false on broken symlinks @@ -806,8 +806,13 @@ class Up2k(object): raise OSError() elif fs1 == fs2: # same fs; make symlink as relative as possible - nsrc = src.replace("\\", "/").split("/") - ndst = dst.replace("\\", "/").split("/") + v = [] + for p in [src, dst]: + if WINDOWS: + p = p.replace("\\", "/") + v.append(p.split("/")) + + nsrc, ndst = v nc = 0 for a, b in zip(nsrc, ndst): if a != b: @@ -815,7 +820,8 @@ class Up2k(object): nc += 1 if nc > 1: lsrc = nsrc[nc:] - lsrc = "../" * (len(lsrc) - 1) + "/".join(lsrc) + hops = len(ndst[nc:]) - 1 + lsrc = "../" * hops + "/".join(lsrc) os.symlink(fsenc(lsrc), fsenc(ldst)) except (AttributeError, OSError) as ex: self.log("cannot symlink; creating copy: " + repr(ex))