sapling/edenscm/hgext/remotefilelog/mutablestores.py
Jun Wu 9dc21f8d0b codemod: import from the edenscm package
Summary:
D13853115 adds `edenscm/` to `sys.path` and code still uses `import mercurial`.
That has nasty problems if both `import mercurial` and
`import edenscm.mercurial` are used, because Python would think `mercurial.foo`
and `edenscm.mercurial.foo` are different modules so code like
`try: ... except mercurial.error.Foo: ...`, or `isinstance(x, mercurial.foo.Bar)`
would fail to handle the `edenscm.mercurial` version. There are also some
module-level states (ex. `extensions._extensions`) that would cause trouble if
they have multiple versions in a single process.

Change imports to use the `edenscm` so ideally the `mercurial` is no longer
imported at all. Add checks in extensions.py to catch unexpected extensions
importing modules from the old (wrong) locations when running tests.

Reviewed By: phillco

Differential Revision: D13868981

fbshipit-source-id: f4e2513766957fd81d85407994f7521a08e4de48
2019-01-29 17:25:32 -08:00

81 lines
2.2 KiB
Python

# Copyright 2018 Facebook, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from edenscm.mercurial.node import hex
# Offsets in the mutable pack tuple
DATA = 0
HISTORY = 1
class mutabledatahistorystore(object):
"""A proxy class that gets added to the union store and knows how to answer
requests by inspecting the current mutable data and history packs. We can't
insert the mutable packs themselves into the union store because they can be
created and destroyed over time."""
def __init__(self, log, shared=False):
self.log = log
self.shared = shared
def _packs(self):
if self.shared:
return self.log._mutablesharedpacks
else:
return self.log._mutablelocalpacks
def getmissing(self, keys):
packs = self._packs()
if packs is None:
return keys
return packs[DATA].getmissing(keys)
def get(self, name, node):
packs = self._packs()
if packs is None:
raise KeyError(name, hex(node))
return packs[DATA].get(name, node)
def getdelta(self, name, node):
packs = self._packs()
if packs is None:
raise KeyError(name, hex(node))
return packs[DATA].getdelta(name, node)
def getdeltachain(self, name, node):
packs = self._packs()
if packs is None:
raise KeyError(name, hex(node))
return packs[DATA].getdeltachain(name, node)
def getmeta(self, name, node):
packs = self._packs()
if packs is None:
raise KeyError(name, hex(node))
return packs[DATA].getmeta(name, node)
def getnodeinfo(self, name, node):
packs = self._packs()
if packs is None:
raise KeyError(name, hex(node))
return packs[HISTORY].getnodeinfo(name, node)
def getancestors(self, name, node, known=None):
packs = self._packs()
if packs is None:
raise KeyError(name, hex(node))
return packs[HISTORY].getancestors(name, node, known=known)
def getmetrics(self):
return {}