Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/fsemulation.py
diff options
context:
space:
mode:
authorSascha Silbe <sascha-pgp@silbe.org>2012-01-05 22:13:50 (GMT)
committer Sascha Silbe <sascha-pgp@silbe.org>2012-01-05 22:13:50 (GMT)
commit3bfb2d72e10b6c5fd8bcabc951f409775c4353f9 (patch)
tree1d7aba65db89662a51b2eb911c2cf71b0fd19e0e /fsemulation.py
parent078fdc48237b17142a9f30462af9e72f49d192a0 (diff)
fsemulation: Fix '.' and '..' directory entries
When using generators, we can't simply call the parent method. Instead we need to iterate over the iterator it returns and yield each entry individually.
Diffstat (limited to 'fsemulation.py')
-rw-r--r--fsemulation.py40
1 files changed, 30 insertions, 10 deletions
diff --git a/fsemulation.py b/fsemulation.py
index e1dff69..2c38449 100644
--- a/fsemulation.py
+++ b/fsemulation.py
@@ -594,13 +594,17 @@ class ByTitleDirectory(Directory):
Directory.__init__(self, file_system, level, 0550, parent)
def listdir(self):
- Directory.listdir(self)
+ for name in Directory.listdir(self):
+ yield name
+
for object_id in self._ds.list_object_ids():
name = self._fs.lookup_title_name(object_id)
yield name
def readdir(self):
- Directory.readdir(self)
+ for name, entry in Directory.readdir(self):
+ yield name, entry
+
for object_id, metadata in self._ds.list_metadata():
name = self._fs.lookup_title_name(object_id, metadata)
yield (name, self._get_symlink(object_id))
@@ -627,12 +631,16 @@ class ByUidDirectory(Directory):
return DSObject(self._fs, object_id)
def listdir(self):
- Directory.listdir(self)
+ for name in Directory.listdir(self):
+ yield name
+
for object_id in self._ds.list_object_ids():
yield object_id
def readdir(self):
- Directory.readdir(self)
+ for name, entry in Directory.readdir(self):
+ yield name, entry
+
for object_id in self._ds.list_object_ids():
yield (object_id, DSObject(self._fs, object_id))
@@ -650,12 +658,16 @@ class ByVersionIdDirectory(Directory):
return DSObject(self._fs, object_id)
def listdir(self):
- Directory.listdir(self)
+ for name in Directory.listdir(self):
+ yield name
+
for version_id in self._ds.list_versions(self._tree_id):
yield (self._tree_id, version_id)
def readdir(self):
- Directory.readdir(self)
+ for name, entry in Directory.readdir(self):
+ yield name, entry
+
for version_id in self._ds.list_versions(self._tree_id):
object_id = (self._tree_id, version_id)
yield (object_id, DSObject(self._fs, object_id))
@@ -672,12 +684,16 @@ class ByTreeIdDirectory(Directory):
return ByVersionIdDirectory(self._fs, self._level + 1, self, tree_id)
def listdir(self):
- Directory.listdir(self)
+ for name in Directory.listdir(self):
+ yield name
+
for tree_id in self._ds.list_tree_ids():
yield tree_id
def readdir(self):
- Directory.readdir(self)
+ for name, entry in Directory.readdir(self):
+ yield name, entry
+
for tree_id in self._ds.list_tree_ids():
yield (tree_id, ByVersionIdDirectory(self._fs, self._level + 1,
self, tree_id))
@@ -694,13 +710,17 @@ class RootDirectory(Directory):
self._by_id_directory = ByUidDirectory(file_system, 1, self)
def listdir(self):
- Directory.listdir(self)
+ for name in Directory.listdir(self):
+ yield name
+
yield u'by-id'
#yield u'by-tags'
yield u'by-title'
def readdir(self):
- Directory.readdir(self)
+ for name, entry in Directory.readdir(self):
+ yield name, entry
+
yield (u'by-id', self._by_id_directory)
#yield (u'by-tags', self._by_tags_directory)
yield (u'by-title', self._by_title_directory)