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 <kevin.ottens@nextcloud.com>
This commit is contained in:
Kevin Ottens 2020-07-02 18:19:16 +02:00 committed by Kevin Ottens (Rebase PR Action)
parent 0b1cf69134
commit d217fc272e

View file

@ -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