diff --git a/hgext3rd/lfs/wrapper.py b/hgext3rd/lfs/wrapper.py --- a/hgext3rd/lfs/wrapper.py +++ b/hgext3rd/lfs/wrapper.py @@ -23,6 +23,14 @@ pointer, ) +if util.safehasattr(revlog, 'parsemeta'): + # Since 0596d274 + _parsemeta = revlog.parsemeta + _packmeta = revlog.packmeta +else: + _parsemeta = filelog.parsemeta + _packmeta = filelog.packmeta + def supportedoutgoingversions(orig, repo): versions = orig(repo) versions.discard('01') @@ -60,13 +68,13 @@ name = k[len('x-hg-'):] hgmeta[name] = p[k] if hgmeta or text.startswith('\1\n'): - text = filelog.packmeta(hgmeta, text) + text = _packmeta(hgmeta, text) return (text, True) def writetostore(self, text): # hg filelog metadata (includes rename, etc) - hgmeta, offset = filelog.parsemeta(text) + hgmeta, offset = _parsemeta(text) if offset and offset > 0: # lfs blob does not contain hg filelog metadata text = text[offset:] @@ -113,7 +121,7 @@ threshold = self.opener.options['lfsthreshold'] textlen = len(text) # exclude hg rename meta from file size - meta, offset = filelog.parsemeta(text) + meta, offset = _parsemeta(text) if offset: textlen -= offset diff --git a/remotefilelog/remotefilelog.py b/remotefilelog/remotefilelog.py --- a/remotefilelog/remotefilelog.py +++ b/remotefilelog/remotefilelog.py @@ -14,9 +14,15 @@ ) import collections, os from mercurial.node import bin, nullid -from mercurial import filelog, revlog, mdiff, ancestor, error +from mercurial import filelog, revlog, mdiff, ancestor, error, util from mercurial.i18n import _ +if util.safehasattr(revlog, 'parsemeta'): + # Since 0596d274 + _parsemeta = revlog.parsemeta +else: + _parsemeta = filelog.parsemeta + class remotefilelognodemap(object): def __init__(self, filename, store): self._filename = filename @@ -116,7 +122,7 @@ if node is None: node = revlog.hash(text, p1, p2) - meta, metaoffset = filelog.parsemeta(text) + meta, metaoffset = _parsemeta(text) rawtext, validatehash = self._processflags(text, flags, 'write') return self.addrawrevision(rawtext, transaction, linknode, p1, p2, node, flags, cachedelta, @@ -136,8 +142,8 @@ # metadata or not (flag processor could replace it), so we just # parse it as best-effort. # in LFS (flags != 0)'s case, the best way is to call LFS code to - # get the meta information, instead of filelog.parsemeta. - meta, metaoffset = filelog.parsemeta(rawtext) + # get the meta information, instead of _parsemeta. + meta, metaoffset = _parsemeta(rawtext) if flags != 0: # when flags != 0, be conservative and do not mangle rawtext, since # a read flag processor expects the text not being mangled at all. diff --git a/remotefilelog/shallowutil.py b/remotefilelog/shallowutil.py --- a/remotefilelog/shallowutil.py +++ b/remotefilelog/shallowutil.py @@ -14,6 +14,14 @@ from . import constants +if util.safehasattr(revlog, 'parsemeta'): + # Since 0596d274 + _parsemeta = revlog.parsemeta + _packmeta = revlog.packmeta +else: + _parsemeta = filelog.parsemeta + _packmeta = filelog.packmeta + if os.name != 'nt': import grp @@ -83,13 +91,13 @@ if copyfrom: meta['copy'] = copyfrom meta['copyrev'] = copyrev - text = filelog.packmeta(meta, text) + text = _packmeta(meta, text) return text def parsemeta(text): """parse mercurial filelog metadata""" - meta, size = filelog.parsemeta(text) + meta, size = _parsemeta(text) if text.startswith('\1\n'): s = text.index('\1\n', 2) text = text[s + 2:]