From: Olivier Goffart Date: Wed, 20 Jan 2016 12:44:30 +0000 (+0100) Subject: SyncEngine: fix inode after move if the file has moved on the file system X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~1254^2~48 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=47710d167abde5f1ef4a778bde68612171d3121c;p=nextcloud-desktop.git SyncEngine: fix inode after move if the file has moved on the file system This is the fix for issue #4370 Step to reproduce the bug: 1) have lots of files in directory "dir1" 2) do mkdir dir2 && mv dir1/* dir2 3) DURING the sync (which takes time because of the many moves) do mkdir dir3 && mv dir2/* dir3/ 4) observe that files are PUT in the next sync The problem is that SyncJournalFileRecord::SyncJournalFileRecord will fail to get the inode after the forst move because the files are already moved on the filesystem. Normaly it should use the inode from the discovery phase in that case but that is not working because it comes from the remote node in case of moves, so the code in SyncEngine::treewalkFile would not set the inode. Test in https://github.com/owncloud/smashbox/pull/143 --- diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index 301c0fb5a..59dca10cc 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -451,7 +451,7 @@ int SyncEngine::treewalkFile( TREE_WALK_FILE *file, bool remote ) } item->_size = file->size; - if (!remote) { + if (!item->_inode) { item->_inode = file->inode; }