From 0e884df48607f562727e2f5f47e1409bf14aa3db Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 15 Sep 2021 23:31:49 +0200 Subject: [PATCH] keep empty folders after deleting all files --- copyparty/up2k.py | 10 +++++----- copyparty/util.py | 15 ++++++++------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/copyparty/up2k.py b/copyparty/up2k.py index 6badc982..d8f8775c 100644 --- a/copyparty/up2k.py +++ b/copyparty/up2k.py @@ -236,7 +236,7 @@ class Up2k(object): if vp: fvp = "{}/{}".format(vp, fvp) - self._handle_rm(LEELOO_DALLAS, None, fvp) + self._handle_rm(LEELOO_DALLAS, None, fvp, True) nrm += 1 if nrm: @@ -1384,7 +1384,7 @@ class Up2k(object): ok = {} ng = {} for vp in vpaths: - a, b, c = self._handle_rm(uname, ip, vp) + a, b, c = self._handle_rm(uname, ip, vp, False) n_files += a for k in b: ok[k] = 1 @@ -1397,7 +1397,7 @@ class Up2k(object): return "deleted {} files (and {}/{} folders)".format(n_files, ok, ok + ng) - def _handle_rm(self, uname, ip, vpath): + def _handle_rm(self, uname, ip, vpath, rm_topdir): try: permsets = [[True, False, False, True]] vn, rem = self.asrv.vfs.get(vpath, uname, *permsets[0]) @@ -1466,7 +1466,7 @@ class Up2k(object): bos.unlink(abspath) - rm = rmdirs(self.log_func, scandir, True, atop) + rm = rmdirs(self.log_func, scandir, True, atop, 1 if rm_topdir else 0) return n_files, rm[0], rm[1] def handle_mv(self, uname, svp, dvp): @@ -1508,7 +1508,7 @@ class Up2k(object): with self.mutex: self._mv_file(uname, svpf, dvpf) - rmdirs(self.log_func, scandir, True, sabs) + rmdirs(self.log_func, scandir, True, sabs, 1) return "k" def _mv_file(self, uname, svp, dvp): diff --git a/copyparty/util.py b/copyparty/util.py index 861c9fd6..70da5840 100644 --- a/copyparty/util.py +++ b/copyparty/util.py @@ -1164,7 +1164,7 @@ def statdir(logger, scandir, lstat, top): logger(src, "{} @ {}".format(repr(ex), top), 1) -def rmdirs(logger, scandir, lstat, top): +def rmdirs(logger, scandir, lstat, top, depth): if not os.path.exists(fsenc(top)) or not os.path.isdir(fsenc(top)): top = os.path.dirname(top) @@ -1174,15 +1174,16 @@ def rmdirs(logger, scandir, lstat, top): ok = [] ng = [] for d in dirs[::-1]: - a, b = rmdirs(logger, scandir, lstat, d) + a, b = rmdirs(logger, scandir, lstat, d, depth + 1) ok += a ng += b - try: - os.rmdir(fsenc(top)) - ok.append(top) - except: - ng.append(top) + if depth: + try: + os.rmdir(fsenc(top)) + ok.append(top) + except: + ng.append(top) return ok, ng