diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -17,6 +17,7 @@ demandload(globals(), "os revlog time ut class localrepository(repo.repository): capabilities = ('lookup', 'changegroupsubset') supported = ('revlogv1', 'store') + branchcache_features = ('unnamed',) def __del__(self): self.transhandle = None @@ -376,6 +377,22 @@ class localrepository(repo.repository): f = self.opener("branches.cache") lines = f.read().split('\n') f.close() + features = lines.pop(0).strip() + if not features.startswith('features: '): + raise ValueError(_('branch cache: no features specified')) + features = features.split(' ', 1)[1].split() + missing_features = [] + for feature in self.branchcache_features: + try: + features.remove(feature) + except ValueError, inst: + missing_features.append(feature) + if missing_features: + raise ValueError(_('branch cache: missing features: %s') + % ', '.join(missing_features)) + if features: + raise ValueError(_('branch cache: unknown features: %s') + % ', '.join(features)) last, lrev = lines.pop(0).split(" ", 1) last, lrev = bin(last), int(lrev) if not (lrev < self.changelog.count() and @@ -397,6 +414,7 @@ class localrepository(repo.repository): def _writebranchcache(self, branches, tip, tiprev): try: f = self.opener("branches.cache", "w") + f.write(" features: %s\n" % ' '.join(self.branchcache_features)) f.write("%s %s\n" % (hex(tip), tiprev)) for label, node in branches.iteritems(): f.write("%s %s\n" % (hex(node), label)) diff --git a/tests/test-mq-caches.out b/tests/test-mq-caches.out --- a/tests/test-mq-caches.out +++ b/tests/test-mq-caches.out @@ -7,6 +7,7 @@ No .hg/branches.cache # some regular revisions Patch queue now empty tip: 1 + features: unnamed 3f910abad313ff802d3a23a7529433872df9b3ae 1 3f910abad313ff802d3a23a7529433872df9b3ae bar 9539f35bdc80732cc9a3f84e46508f1ed1ec8cff foo @@ -15,10 +16,12 @@ 9539f35bdc80732cc9a3f84e46508f1ed1ec8cff applying p1 Now at: p1 tip: 2 + features: unnamed 3f910abad313ff802d3a23a7529433872df9b3ae 1 3f910abad313ff802d3a23a7529433872df9b3ae bar 9539f35bdc80732cc9a3f84e46508f1ed1ec8cff foo tip: 3 + features: unnamed 3f910abad313ff802d3a23a7529433872df9b3ae 1 3f910abad313ff802d3a23a7529433872df9b3ae bar 9539f35bdc80732cc9a3f84e46508f1ed1ec8cff foo @@ -27,6 +30,7 @@ branch bar: 2 # removing the cache tip: 3 + features: unnamed 3f910abad313ff802d3a23a7529433872df9b3ae 1 3f910abad313ff802d3a23a7529433872df9b3ae bar 9539f35bdc80732cc9a3f84e46508f1ed1ec8cff foo @@ -35,6 +39,7 @@ branch bar: 2 # importing rev 1 (the cache now ends in one of the patches) tip: 3 + features: unnamed 3f910abad313ff802d3a23a7529433872df9b3ae 1 3f910abad313ff802d3a23a7529433872df9b3ae bar 9539f35bdc80732cc9a3f84e46508f1ed1ec8cff foo @@ -49,5 +54,6 @@ applying p1 applying p2 Now at: p2 tip: 3 + features: unnamed 9539f35bdc80732cc9a3f84e46508f1ed1ec8cff 0 9539f35bdc80732cc9a3f84e46508f1ed1ec8cff foo diff --git a/tests/test-newbranch.out b/tests/test-newbranch.out --- a/tests/test-newbranch.out +++ b/tests/test-newbranch.out @@ -74,6 +74,7 @@ modify a branch 4:4909a3732169 + features: unnamed 4909a3732169c0c20011c4f4b8fdff4e3d89b23f 4 bf1bc2f45e834c75404d0ddab57d53beab56e2f8 4909a3732169c0c20011c4f4b8fdff4e3d89b23f foo