From d217fc272e9b35870d392998a596ae623915165b Mon Sep 17 00:00:00 2001 From: Kevin Ottens Date: Thu, 2 Jul 2020 18:19:16 +0200 Subject: [PATCH] Make sure moves involving e2e are delete + upload If the file has a mangled name or will end up in a parent directory known to be encrypted, we stick to the CSYNC_INTRUCTION_NEW instead of going for CSYNC_INSTRUCTION_RENAME. This way we'll have a delete and an upload instead of a move command. Signed-off-by: Kevin Ottens --- src/csync/csync_reconcile.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/csync/csync_reconcile.cpp b/src/csync/csync_reconcile.cpp index 8b947c651..7b664addd 100644 --- a/src/csync/csync_reconcile.cpp +++ b/src/csync/csync_reconcile.cpp @@ -178,9 +178,22 @@ static void _csync_merge_algorithm_visitor(csync_file_stat_t *cur, CSYNC * ctx) basePath.constData(), other ? "found" : "not found"); } + const auto curParentPath = [=]{ + const auto slashPosition = cur->path.lastIndexOf('/'); + if (slashPosition >= 0) { + return cur->path.left(slashPosition); + } else { + return QByteArray(); + } + }(); + auto curParent = our_tree->findFile(curParentPath); + if(!other) { // Stick with the NEW return; + } else if (!other->e2eMangledName.isEmpty() || (curParent && curParent->isE2eEncrypted)) { + // Stick with the NEW as well, we want to always issue delete + upload in such cases + return; } else if (other->instruction == CSYNC_INSTRUCTION_RENAME) { // Some other EVAL_RENAME already claimed other. // We do nothing: maybe a different candidate for -- 2.30.2