mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-06-23 01:08:53 +00:00
make get_size/get_current_size consistent for all IFilesystemNode classes
* stop caching most_recent_size in dirnode, rely upon backing filenode for it * start caching most_recent_size in MutableFileNode * return None when you don't know, not "?" * only render None as "?" in the web "more info" page * add get_size/get_current_size to UnknownNode
This commit is contained in:
@ -195,7 +195,6 @@ class DirectoryNode:
|
||||
self._uri = wrap_dirnode_cap(filenode_cap)
|
||||
self._nodemaker = nodemaker
|
||||
self._uploader = uploader
|
||||
self._most_recent_size = None
|
||||
|
||||
def __repr__(self):
|
||||
return "<%s %s-%s %s>" % (self.__class__.__name__,
|
||||
@ -204,22 +203,19 @@ class DirectoryNode:
|
||||
hasattr(self, '_uri') and self._uri.abbrev())
|
||||
|
||||
def get_size(self):
|
||||
# return the size of our backing mutable file, in bytes, if we've
|
||||
# fetched it.
|
||||
if not self._node.is_mutable():
|
||||
# TODO?: consider using IMutableFileNode.providedBy(self._node)
|
||||
return self._node.get_size()
|
||||
return self._most_recent_size
|
||||
"""Return the size of our backing mutable file, in bytes, if we've
|
||||
fetched it. Otherwise return None. This returns synchronously."""
|
||||
return self._node.get_size()
|
||||
|
||||
def _set_size(self, data):
|
||||
self._most_recent_size = len(data)
|
||||
return data
|
||||
def get_current_size(self):
|
||||
"""Calculate the size of our backing mutable file, in bytes. Returns
|
||||
a Deferred that fires with the result."""
|
||||
return self._node.get_current_size()
|
||||
|
||||
def _read(self):
|
||||
if self._node.is_mutable():
|
||||
# use the IMutableFileNode API.
|
||||
d = self._node.download_best_version()
|
||||
d.addCallback(self._set_size)
|
||||
else:
|
||||
d = self._node.download_to_data()
|
||||
d.addCallback(self._unpack_contents)
|
||||
@ -706,9 +702,10 @@ class DeepStats:
|
||||
|
||||
def enter_directory(self, parent, children):
|
||||
dirsize_bytes = parent.get_size()
|
||||
if dirsize_bytes is not None:
|
||||
self.add("size-directories", dirsize_bytes)
|
||||
self.max("largest-directory", dirsize_bytes)
|
||||
dirsize_children = len(children)
|
||||
self.add("size-directories", dirsize_bytes)
|
||||
self.max("largest-directory", dirsize_bytes)
|
||||
self.max("largest-directory-children", dirsize_children)
|
||||
|
||||
def add(self, key, value=1):
|
||||
|
Reference in New Issue
Block a user