Skip to content
Snippets Groups Projects
Commit fa23c454 authored by Durham Goode's avatar Durham Goode
Browse files

manifest: update to work with new manifest classes in core

Core hg has refactored the manifest logic to remove the manifest class. So we
need to update our use of manifests to use manifestlog and manifestctx instead.

Tested this by running the tests against hg 3.8, 3.9, 4.0, and @ (c27614f2dec).
parent d0ce6eae
No related branches found
No related tags found
No related merge requests found
......@@ -9,6 +9,7 @@
changelog,
manifest,
context,
util,
)
from mercurial.node import bin, hex, nullid
......@@ -308,10 +309,10 @@
def __len__(self):
return len(self.repo.handler.repo) + len(self.repo.revmap)
class overlaymanifestlog(overlayrevlog):
class overlayoldmanifestlog(overlayrevlog):
def read(self, sha):
if sha == nullid:
return manifest.manifestdict()
return overlaymanifest(self.repo, sha)
def __getitem__(self, sha):
......@@ -312,10 +313,41 @@
def read(self, sha):
if sha == nullid:
return manifest.manifestdict()
return overlaymanifest(self.repo, sha)
def __getitem__(self, sha):
return self.read(sha)
return overlaymanifestctx(self.repo, sha)
class overlaymanifestrevlog(overlayrevlog):
pass
class overlaymanifestctx(object):
def __init__(self, repo, node):
self._repo = repo
self._node = node
def read(self):
return overlaymanifest(self._repo, self._node)
try:
class overlaymanifestlog(manifest.manifestlog):
def __init__(self, repo):
self._repo = repo
# Needed for 4.0, since __getitem__ did not redirect to get() in that
# release.
def __getitem__(self, node):
return self.get('', node)
def get(self, dir, node):
if dir:
raise RuntimeError("hggit doesn't support treemanifests")
if node == nullid:
return manifest.manifestctx()
return overlaymanifestctx(self._repo, node)
except AttributeError:
# manifestlog did not exist prior to 4.0
pass
class overlaychangelog(overlayrevlog):
def read(self, sha):
......@@ -336,9 +368,13 @@
self.handler = handler
self.changelog = overlaychangelog(self, handler.repo.changelog)
self.manifest = overlaymanifestlog(self, handler.repo.manifest)
# new as of mercurial 3.9+
self.manifestlog = self.manifest
if util.safehasattr(handler.repo, 'manifest'):
self.manifest = overlayoldmanifestlog(self, handler.repo.manifest)
# new as of mercurial 3.9+
self.manifestlog = self.manifest
else:
# no more manifest class as of 4.1
self.manifestlog = overlaymanifestlog(self)
# for incoming -p
self.root = handler.repo.root
......@@ -360,6 +396,10 @@
except (AttributeError, ImportError):
pass
def _constructmanifest(self):
return overlaymanifestrevlog(self,
self.handler.repo._constructmanifest())
def __getitem__(self, n):
if n not in self.revmap:
return self.handler.repo[n]
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment