diff --git a/src/db/update/Container.cxx b/src/db/update/Container.cxx index 1be6ace29..b1474df90 100644 --- a/src/db/update/Container.cxx +++ b/src/db/update/Container.cxx @@ -46,12 +46,11 @@ UpdateWalk::UpdateContainerFile(Directory &directory, { const ScopeDatabaseLock protect; contdir = MakeVirtualDirectoryIfModified(directory, name, - info); + info, + DEVICE_CONTAINER); if (contdir == nullptr) /* not modified */ return true; - - contdir->device = DEVICE_CONTAINER; } const auto pathname = storage.MapFS(contdir->GetPath()); diff --git a/src/db/update/VirtualDirectory.cxx b/src/db/update/VirtualDirectory.cxx index de1d50695..5183374c5 100644 --- a/src/db/update/VirtualDirectory.cxx +++ b/src/db/update/VirtualDirectory.cxx @@ -23,7 +23,8 @@ Directory * UpdateWalk::MakeVirtualDirectoryIfModified(Directory &parent, const char *name, - const StorageFileInfo &info) noexcept + const StorageFileInfo &info, + unsigned virtual_device) noexcept { Directory *directory = parent.FindChild(name); @@ -32,7 +33,9 @@ UpdateWalk::MakeVirtualDirectoryIfModified(Directory &parent, const char *name, if (directory->IsMount()) return nullptr; - if (directory->mtime == info.mtime && !walk_discard) { + if (directory->mtime == info.mtime && + directory->device == virtual_device && + !walk_discard) { /* not modified */ return nullptr; } @@ -43,5 +46,6 @@ UpdateWalk::MakeVirtualDirectoryIfModified(Directory &parent, const char *name, directory = parent.MakeChild(name); directory->mtime = info.mtime; + directory->device = virtual_device; return directory; } diff --git a/src/db/update/Walk.hxx b/src/db/update/Walk.hxx index 03efe0d4c..ac7a5bd5b 100644 --- a/src/db/update/Walk.hxx +++ b/src/db/update/Walk.hxx @@ -141,10 +141,14 @@ private: * exists already and is unmodified. * * The caller must lock the database. + * + * @param virtual_device one of the DEVICE_* constants + * specifying the kind of virtual directory */ Directory *MakeVirtualDirectoryIfModified(Directory &parent, const char *name, - const StorageFileInfo &info) noexcept; + const StorageFileInfo &info, + unsigned virtual_device) noexcept; Directory *DirectoryMakeChildChecked(Directory &parent, const char *uri_utf8,