# HG changeset patch # User Martin von Zweigbergk # Date 1424717877 28800 # Node ID 0e23faa1511c9a456e651b6cf0dfa3b40edff41d # Parent c2287f203ec4b4b25587fd4d21d81c52a53bebee treemanifest: store directory path in treemanifest nodes This leads to less concatenation while iterating, and it's useful for debugging. diff -r c2287f203ec4 -r 0e23faa1511c mercurial/manifest.py --- a/mercurial/manifest.py Thu Mar 19 11:07:57 2015 -0700 +++ b/mercurial/manifest.py Mon Feb 23 10:57:57 2015 -0800 @@ -336,7 +336,8 @@ return '', f class treemanifest(object): - def __init__(self, text=''): + def __init__(self, dir='', text=''): + self._dir = dir self._dirs = {} # Using _lazymanifest here is a little slower than plain old dicts self._files = {} @@ -347,27 +348,33 @@ if fl: self.setflag(f, fl) + def _subpath(self, path): + return self._dir + path + def __len__(self): size = len(self._files) for m in self._dirs.values(): size += m.__len__() return size + def __str__(self): + return '' % self._dir + def iteritems(self): for p, n in sorted(self._dirs.items() + self._files.items()): if p in self._files: - yield p, n + yield self._subpath(p), n else: - for sf, sn in n.iteritems(): - yield p + sf, sn + for f, sn in n.iteritems(): + yield f, sn def iterkeys(self): for p in sorted(self._dirs.keys() + self._files.keys()): if p in self._files: - yield p + yield self._subpath(p) else: for f in self._dirs[p].iterkeys(): - yield p + f + yield f def keys(self): return list(self.iterkeys()) @@ -437,7 +444,7 @@ dir, subpath = _splittopdir(f) if dir: if dir not in self._dirs: - self._dirs[dir] = treemanifest() + self._dirs[dir] = treemanifest(self._subpath(dir)) self._dirs[dir].__setitem__(subpath, n) else: self._files[f] = n @@ -447,13 +454,13 @@ dir, subpath = _splittopdir(f) if dir: if dir not in self._dirs: - self._dirs[dir] = treemanifest() + self._dirs[dir] = treemanifest(self._subpath(dir)) self._dirs[dir].setflag(subpath, flags) else: self._flags[f] = flags def copy(self): - copy = treemanifest() + copy = treemanifest(self._dir) for d in self._dirs: copy._dirs[d] = self._dirs[d].copy() copy._files = dict.copy(self._files) @@ -567,7 +574,7 @@ def _newmanifest(self, data=''): if self._usetreemanifest: - return treemanifest(data) + return treemanifest('', data) return manifestdict(data) def readdelta(self, node):