mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-26 15:06:08 +03:00
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:
parent
0b1cf69134
commit
d217fc272e
1 changed files with 13 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue