+ with llfuse.lock_released:
+ self.collection.root_collection().save()
+
+ def create(self, name):
+ with llfuse.lock_released:
+ self.collection.open(name, "w").close()
+
+ def mkdir(self, name):
+ with llfuse.lock_released:
+ self.collection.mkdirs(name)
+
+ def unlink(self, name):
+ with llfuse.lock_released:
+ self.collection.remove(name)
+
+ def rmdir(self, name):
+ with llfuse.lock_released:
+ self.collection.remove(name)
+
+ def rename(self, name_old, name_new, src):
+ if not isinstance(src, CollectionDirectoryBase):
+ raise llfuse.FUSEError(errno.EPERM)
+
+ if name_new in self:
+ ent = src[name_old]
+ tgt = self[name_new]
+ if isinstance(FuseArvadosFile, ent) and isinstance(FuseArvadosFile, tgt):
+ pass
+ elif isinstance(CollectionDirectoryBase, ent) and isinstance(CollectionDirectoryBase, tgt):
+ if len(tgt) > 0:
+ raise llfuse.FUSEError(errno.ENOTEMPTY)
+ elif isinstance(CollectionDirectoryBase, ent) and isinstance(FuseArvadosFile, tgt):
+ raise llfuse.FUSEError(errno.ENOTDIR)
+ elif isinstance(FuseArvadosFile, ent) and isinstance(CollectionDirectoryBase, tgt):
+ raise llfuse.FUSEError(errno.EISDIR)
+
+ with llfuse.lock_released:
+ self.collection.rename(name_old, name_new, source_collection=src.collection, overwrite=True)
+ self.flush()
+ src.flush()
+