Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/localrepo.py @ 18118:e70ff1e599f4
branchmap: extract read logic from repo
author | Pierre-Yves David <pierre-yves.david@logilab.fr> |
---|---|
date | Wed, 19 Dec 2012 14:46:57 +0100 |
parents | 526e7ec5c96e |
children | 5264464b5f68 |
comparison
equal
deleted
inserted
replaced
18117:526e7ec5c96e | 18118:e70ff1e599f4 |
---|---|
2 # | 2 # |
3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> | 3 # Copyright 2005-2007 Matt Mackall <mpm@selenic.com> |
4 # | 4 # |
5 # This software may be used and distributed according to the terms of the | 5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2 or any later version. | 6 # GNU General Public License version 2 or any later version. |
7 from node import bin, hex, nullid, nullrev, short | 7 from node import hex, nullid, short |
8 from i18n import _ | 8 from i18n import _ |
9 import peer, changegroup, subrepo, discovery, pushkey, obsolete, repoview | 9 import peer, changegroup, subrepo, discovery, pushkey, obsolete, repoview |
10 import changelog, dirstate, filelog, manifest, context, bookmarks, phases | 10 import changelog, dirstate, filelog, manifest, context, bookmarks, phases |
11 import lock, transaction, store, encoding, base85 | 11 import lock, transaction, store, encoding, base85 |
12 import scmutil, util, extensions, hook, error, revset | 12 import scmutil, util, extensions, hook, error, revset |
669 if self._branchcache is not None and self._branchcachetip == tip: | 669 if self._branchcache is not None and self._branchcachetip == tip: |
670 return | 670 return |
671 | 671 |
672 oldtip = self._branchcachetip | 672 oldtip = self._branchcachetip |
673 if oldtip is None or oldtip not in cl.nodemap: | 673 if oldtip is None or oldtip not in cl.nodemap: |
674 partial, last, lrev = self._readbranchcache() | 674 partial, last, lrev = branchmap.read(self) |
675 else: | 675 else: |
676 lrev = cl.rev(oldtip) | 676 lrev = cl.rev(oldtip) |
677 partial = self._branchcache | 677 partial = self._branchcache |
678 | 678 |
679 catip = self._cacheabletip() | 679 catip = self._cacheabletip() |
727 the branch, open heads come before closed''' | 727 the branch, open heads come before closed''' |
728 bt = {} | 728 bt = {} |
729 for bn, heads in self.branchmap().iteritems(): | 729 for bn, heads in self.branchmap().iteritems(): |
730 bt[bn] = self._branchtip(heads) | 730 bt[bn] = self._branchtip(heads) |
731 return bt | 731 return bt |
732 | |
733 @unfilteredmethod # Until we get a smarter cache management | |
734 def _readbranchcache(self): | |
735 partial = {} | |
736 try: | |
737 f = self.opener("cache/branchheads") | |
738 lines = f.read().split('\n') | |
739 f.close() | |
740 except (IOError, OSError): | |
741 return {}, nullid, nullrev | |
742 | |
743 try: | |
744 last, lrev = lines.pop(0).split(" ", 1) | |
745 last, lrev = bin(last), int(lrev) | |
746 if lrev >= len(self) or self[lrev].node() != last: | |
747 # invalidate the cache | |
748 raise ValueError('invalidating branch cache (tip differs)') | |
749 for l in lines: | |
750 if not l: | |
751 continue | |
752 node, label = l.split(" ", 1) | |
753 label = encoding.tolocal(label.strip()) | |
754 if not node in self: | |
755 raise ValueError('invalidating branch cache because node '+ | |
756 '%s does not exist' % node) | |
757 partial.setdefault(label, []).append(bin(node)) | |
758 except KeyboardInterrupt: | |
759 raise | |
760 except Exception, inst: | |
761 if self.ui.debugflag: | |
762 self.ui.warn(str(inst), '\n') | |
763 partial, last, lrev = {}, nullid, nullrev | |
764 return partial, last, lrev | |
765 | 732 |
766 @unfilteredmethod # Until we get a smarter cache management | 733 @unfilteredmethod # Until we get a smarter cache management |
767 def _updatebranchcache(self, partial, ctxgen): | 734 def _updatebranchcache(self, partial, ctxgen): |
768 """Given a branchhead cache, partial, that may have extra nodes or be | 735 """Given a branchhead cache, partial, that may have extra nodes or be |
769 missing heads, and a generator of nodes that are at least a superset of | 736 missing heads, and a generator of nodes that are at least a superset of |