summaryrefslogtreecommitdiff
path: root/lib/git/tree.py
diff options
context:
space:
mode:
authorSebastian Thiel <byronimo@gmail.com>2009-10-11 19:07:03 +0200
committerSebastian Thiel <byronimo@gmail.com>2009-10-11 19:07:03 +0200
commit15b9129ec639112e94ea96b6a395ad9b149515d1 (patch)
treec1a3388f25447a4ffc2c9e11912b4352a2f8ffd9 /lib/git/tree.py
parent7a7eedde7f5d5082f7f207ef76acccd24a6113b1 (diff)
downloadgitpython-15b9129ec639112e94ea96b6a395ad9b149515d1.tar.gz
lazymixin system now supports per-attribute baking, it is up to the class whether it bakes more. This also leads to more efficient use of memory as values are only cached and set when required - the baking system does not require an own tracking variable anymore, and values are only to be cached once - then python will natively find the cache without involving any additional overhead. This works by using __getattr__ instead of __get_attribute__ which would always be called
Diffstat (limited to 'lib/git/tree.py')
-rw-r--r--lib/git/tree.py25
1 files changed, 13 insertions, 12 deletions
diff --git a/lib/git/tree.py b/lib/git/tree.py
index 90f1b72d..db4a3e22 100644
--- a/lib/git/tree.py
+++ b/lib/git/tree.py
@@ -13,18 +13,19 @@ class Tree(base.IndexObject):
type = "tree"
__slots__ = "_contents"
- def __init__(self, repo, id, mode=None, path=None, size=None):
- super(Tree, self).__init__(repo, id, mode, path, size)
- self._contents = None
-
- def __bake__(self):
- # Read the tree contents.
- super(Tree, self).__bake__()
- self._contents = {}
- for line in self.repo.git.ls_tree(self.id).splitlines():
- obj = self.content_from_string(self.repo, line)
- if obj is not None:
- self._contents[obj.path] = obj
+ def __init__(self, repo, id, mode=None, path=None):
+ super(Tree, self).__init__(repo, id, mode, path)
+
+ def _set_cache_(self, attr):
+ if attr == "_contents":
+ # Read the tree contents.
+ self._contents = {}
+ for line in self.repo.git.ls_tree(self.id).splitlines():
+ obj = self.content_from_string(self.repo, line)
+ if obj is not None:
+ self._contents[obj.path] = obj
+ else:
+ super(Tree, self)._set_cache_(attr)
@staticmethod
def content_from_string(repo, text):