Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
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
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.
-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)