From 0a9a807772f99c31bf6d35fdc15740544006d4e7 Mon Sep 17 00:00:00 2001 From: ed Date: Wed, 14 May 2025 15:45:52 +0200 Subject: [PATCH] fix xbu/xau reloc collision-handling; if a hook relocates a file into a folder where that same file exists with the same filename, the filename-collision-avoidance would kick in, generating a new filename and another copy --- bin/hooks/reloc-by-ext.py | 7 +++++-- copyparty/up2k.py | 10 ++++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/bin/hooks/reloc-by-ext.py b/bin/hooks/reloc-by-ext.py index b25d3c35..3fa9c9bc 100644 --- a/bin/hooks/reloc-by-ext.py +++ b/bin/hooks/reloc-by-ext.py @@ -71,6 +71,9 @@ def main(): ## selecting it inside the print at the end: ## + # move all uploads to one specific folder + into_junk = {"vp": "/junk"} + # create a subfolder named after the filetype and move it into there into_subfolder = {"vp": ext} @@ -92,8 +95,8 @@ def main(): by_category = {} # no action # now choose the default effect to apply; can be any of these: - # into_subfolder into_toplevel into_sibling by_category - effect = {"vp": "/junk"} + # into_junk into_subfolder into_toplevel into_sibling by_category + effect = into_sibling ## ## but we can keep going, adding more speicifc rules diff --git a/copyparty/up2k.py b/copyparty/up2k.py index 314a0ede..a55006ce 100644 --- a/copyparty/up2k.py +++ b/copyparty/up2k.py @@ -3236,7 +3236,7 @@ class Up2k(object): if hr.get("reloc"): x = pathmod(self.vfs, dst, vp, hr["reloc"]) if x: - zvfs = vfs + ud1 = (vfs.vpath, job["prel"], job["name"]) pdir, _, job["name"], (vfs, rem) = x dst = os.path.join(pdir, job["name"]) job["vcfg"] = vfs.flags @@ -3244,7 +3244,8 @@ class Up2k(object): job["vtop"] = vfs.vpath job["prel"] = rem job["name"] = sanitize_fn(job["name"], "") - if zvfs.vpath != vfs.vpath: + ud2 = (vfs.vpath, job["prel"], job["name"]) + if ud1 != ud2: # print(json.dumps(job, sort_keys=True, indent=4)) job["hash"] = cj["hash"] self.log("xbu reloc1:%d..." % (depth,), 6) @@ -4999,14 +5000,15 @@ class Up2k(object): if hr.get("reloc"): x = pathmod(self.vfs, ap_chk, vp_chk, hr["reloc"]) if x: - zvfs = vfs + ud1 = (vfs.vpath, job["prel"], job["name"]) pdir, _, job["name"], (vfs, rem) = x job["vcfg"] = vf = vfs.flags job["ptop"] = vfs.realpath job["vtop"] = vfs.vpath job["prel"] = rem job["name"] = sanitize_fn(job["name"], "") - if zvfs.vpath != vfs.vpath: + ud2 = (vfs.vpath, job["prel"], job["name"]) + if ud1 != ud2: self.log("xbu reloc2:%d..." % (depth,), 6) return self._handle_json(job, depth + 1)