bool SimpleFileStore::onWriteComplete(const std::string& name, KeyMetadata& md) { if (md.version.isDeleted()) return onDeleteComplete(name, md); FilePaths paths = filepath(name); if ( !testIfVersionGreater(md.version, paths.deleted()) ) { File::remove(paths.inprogress()); return false; } File::rename(paths.current(), paths.reserve()); if ( !File::set_modified_time(paths.inprogress(), timeFromVersion(md.version)) || !File::rename(paths.inprogress(), paths.current()) ) { File::rename(paths.reserve(), paths.current()); File::remove(paths.inprogress()); return false; } md.digest ^= removeIfExists(paths.reserve()); md.digest ^= removeIfExists(paths.deleted(), true); return true; }