From: Kevin Ottens Date: Thu, 2 Jul 2020 16:19:16 +0000 (+0200) Subject: Make sure moves involving e2e are delete + upload X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~222^2^2~116^2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d217fc272e9b35870d392998a596ae623915165b;p=nextcloud-desktop.git 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 --- 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