From e2caad3b0b49e0266b5c7abf3cb9ef11cc2095a7 Mon Sep 17 00:00:00 2001 From: James Turner Date: Fri, 2 Apr 2021 16:46:47 +0100 Subject: [PATCH] TerraSync: better reporting of permissions failures removing files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Log a ‘failed to remove orphan’ error as an error with the repository, instead of failing the entire sync --- simgear/io/HTTPRepository.cxx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/simgear/io/HTTPRepository.cxx b/simgear/io/HTTPRepository.cxx index 5c7186da..d3b4ba8b 100644 --- a/simgear/io/HTTPRepository.cxx +++ b/simgear/io/HTTPRepository.cxx @@ -377,7 +377,12 @@ public: // We now have a list of entries that need to be updated, and a list // of orphan files that should be removed. - removeOrphans(orphans); + try { + removeOrphans(orphans); + } catch (sg_exception& e) { + _repository->failedToUpdateChild(_relativePath, HTTPRepository::ResultCode::REPO_ERROR_IO); + } + scheduleUpdates(toBeUpdated); } @@ -389,11 +394,10 @@ public: void removeOrphans(const PathList orphans) { - PathList::const_iterator it; - for (it = orphans.begin(); it != orphans.end(); ++it) { - if (it->file() == ".dirindex") continue; - if (it->file() == ".hash") continue; - removeChild(*it); + for (const auto& o : orphans) { + if (o.file() == ".dirindex") continue; + if (o.file() == ".hash") continue; + removeChild(o); } }