D5190: shallowutil: introduce a helper function isenabled()
pulkit (Pulkit Goyal)
phabricator at mercurial-scm.org
Wed Oct 24 14:55:42 UTC 2018
pulkit created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
This patch introduces a inenabled() function which will check whether
remotefilelog is enabled or not. The function is then also used at all the
places where check whether remotefilelog is enabled or not. The new function
makes code easy to read without need to understand what is the constant involved
and why we are checking repo.requirements.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5190
AFFECTED FILES
hgext/remotefilelog/__init__.py
hgext/remotefilelog/debugcommands.py
hgext/remotefilelog/remotefilelogserver.py
hgext/remotefilelog/shallowbundle.py
hgext/remotefilelog/shallowutil.py
CHANGE DETAILS
diff --git a/hgext/remotefilelog/shallowutil.py b/hgext/remotefilelog/shallowutil.py
--- a/hgext/remotefilelog/shallowutil.py
+++ b/hgext/remotefilelog/shallowutil.py
@@ -30,6 +30,10 @@
if not pycompat.iswindows:
import grp
+def isenabled(repo):
+ """returns whether the repository is remotefilelog enabled or not"""
+ return constants.SHALLOWREPO_REQUIREMENT in repo.requirements
+
def getcachekey(reponame, file, id):
pathhash = hashlib.sha1(file).hexdigest()
return os.path.join(reponame, pathhash[:2], pathhash[2:], id)
diff --git a/hgext/remotefilelog/shallowbundle.py b/hgext/remotefilelog/shallowbundle.py
--- a/hgext/remotefilelog/shallowbundle.py
+++ b/hgext/remotefilelog/shallowbundle.py
@@ -54,7 +54,7 @@
class shallowcg1packer(changegroup.cgpacker):
def generate(self, commonrevs, clnodes, fastpathlinkrev, source):
- if constants.SHALLOWREPO_REQUIREMENT in self._repo.requirements:
+ if shallowutil.isenabled(self._repo):
fastpathlinkrev = False
return super(shallowcg1packer, self).generate(commonrevs, clnodes,
@@ -69,7 +69,7 @@
linknodes, commonrevs, source = args
except ValueError:
commonrevs, source, mfdicts, fastpathlinkrev, fnodes, clrevs = args
- if constants.SHALLOWREPO_REQUIREMENT in self._repo.requirements:
+ if shallowutil.isenabled(self._repo):
repo = self._repo
if isinstance(repo, bundlerepo.bundlerepository):
# If the bundle contains filelogs, we can't pull from it, since
@@ -91,7 +91,7 @@
def shouldaddfilegroups(self, source):
repo = self._repo
- if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if not shallowutil.isenabled(repo):
return AllFiles
if source == "push" or source == "bundle":
@@ -139,7 +139,7 @@
yield delta
def makechangegroup(orig, repo, outgoing, version, source, *args, **kwargs):
- if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if not shallowutil.isenabled(repo):
return orig(repo, outgoing, version, source, *args, **kwargs)
original = repo.shallowmatch
@@ -168,7 +168,7 @@
repo.shallowmatch = original
def addchangegroupfiles(orig, repo, source, revmap, trp, expectedfiles, *args):
- if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if not shallowutil.isenabled(repo):
return orig(repo, source, revmap, trp, expectedfiles, *args)
files = 0
diff --git a/hgext/remotefilelog/remotefilelogserver.py b/hgext/remotefilelog/remotefilelogserver.py
--- a/hgext/remotefilelog/remotefilelogserver.py
+++ b/hgext/remotefilelog/remotefilelogserver.py
@@ -132,7 +132,7 @@
def _walkstreamfiles(orig, repo):
if state.shallowremote:
# if we are shallow ourselves, stream our local commits
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if shallowutil.isenabled(repo):
striplen = len(repo.store.path) + 1
readdir = repo.store.rawvfs.readdir
visit = [os.path.join(repo.store.path, 'data')]
@@ -166,7 +166,7 @@
continue
yield x
- elif constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ elif shallowutil.isenabled(repo):
# don't allow cloning from a shallow repo to a full repo
# since it would require fetching every version of every
# file in order to create the revlogs.
@@ -193,8 +193,8 @@
# expose remotefilelog capabilities
def _capabilities(orig, repo, proto):
caps = orig(repo, proto)
- if ((constants.SHALLOWREPO_REQUIREMENT in repo.requirements or
- ui.configbool('remotefilelog', 'server'))):
+ if (shallowutil.isenabled(repo) or ui.configbool('remotefilelog',
+ 'server')):
if isinstance(proto, _sshv1server):
# legacy getfiles method which only works over ssh
caps.append(constants.NETWORK_CAP_LEGACY_SSH_GETFILES)
@@ -278,7 +278,7 @@
data is a compressed blob with revlog flag and ancestors information. See
createfileblob for its content.
"""
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if shallowutil.isenabled(repo):
return '1\0' + _('cannot fetch remote files from shallow repo')
cachepath = repo.ui.config("remotefilelog", "servercachepath")
if not cachepath:
@@ -291,7 +291,7 @@
def getfiles(repo, proto):
"""A server api for requesting particular versions of particular files.
"""
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if shallowutil.isenabled(repo):
raise error.Abort(_('cannot fetch remote files from shallow repo'))
if not isinstance(proto, _sshv1server):
raise error.Abort(_('cannot fetch remote files over non-ssh protocol'))
diff --git a/hgext/remotefilelog/debugcommands.py b/hgext/remotefilelog/debugcommands.py
--- a/hgext/remotefilelog/debugcommands.py
+++ b/hgext/remotefilelog/debugcommands.py
@@ -92,7 +92,7 @@
if (opts.get('changelog') or
opts.get('manifest') or
opts.get('dir') or
- not constants.SHALLOWREPO_REQUIREMENT in repo.requirements or
+ not shallowutil.isenabled(repo) or
not repo.shallowmatch(file_)):
return orig(ui, repo, file_, **opts)
@@ -139,7 +139,7 @@
def debugindexdot(orig, ui, repo, file_):
"""dump an index DAG as a graphviz dot file"""
- if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if not shallowutil.isenabled(repo):
return orig(ui, repo, file_)
r = buildtemprevlog(repo, os.path.basename(file_)[:-2])
diff --git a/hgext/remotefilelog/__init__.py b/hgext/remotefilelog/__init__.py
--- a/hgext/remotefilelog/__init__.py
+++ b/hgext/remotefilelog/__init__.py
@@ -216,6 +216,8 @@
repoclass = localrepo.localrepository
repoclass._basesupported.add(constants.SHALLOWREPO_REQUIREMENT)
+isenabled = shallowutil.isenabled
+
def uisetup(ui):
"""Wraps user facing Mercurial commands to swap them out with shallow
versions.
@@ -236,8 +238,7 @@
# Prevent 'hg manifest --all'
def _manifest(orig, ui, repo, *args, **opts):
- if (constants.SHALLOWREPO_REQUIREMENT in repo.requirements
- and opts.get('all')):
+ if (isenabled(repo) and opts.get('all')):
raise error.Abort(_("--all is not supported in a shallow repo"))
return orig(ui, repo, *args, **opts)
@@ -262,7 +263,7 @@
if opts.get('shallow'):
repos = []
def pull_shallow(orig, self, *args, **kwargs):
- if constants.SHALLOWREPO_REQUIREMENT not in self.requirements:
+ if not isenabled(self):
repos.append(self.unfiltered())
# set up the client hooks so the post-clone update works
setupclient(self.ui, self.unfiltered())
@@ -347,7 +348,7 @@
ui.setconfig('hooks', 'commit.prefetch', wcpprefetch)
isserverenabled = ui.configbool('remotefilelog', 'server')
- isshallowclient = constants.SHALLOWREPO_REQUIREMENT in repo.requirements
+ isshallowclient = isenabled(repo)
if isserverenabled and isshallowclient:
raise RuntimeError("Cannot be both a server and shallow client.")
@@ -396,7 +397,7 @@
# prefetch files before update
def applyupdates(orig, repo, actions, wctx, mctx, overwrite, labels=None):
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
manifest = mctx.manifest()
files = []
for f, args, msg in actions['g']:
@@ -409,7 +410,7 @@
# Prefetch merge checkunknownfiles
def checkunknownfiles(orig, repo, wctx, mctx, force, actions,
*args, **kwargs):
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
files = []
sparsematch = repo.maybesparsematch(mctx.rev())
for f, (m, actionargs, msg) in actions.iteritems():
@@ -428,7 +429,7 @@
# Prefetch files before status attempts to look at their size and contents
def checklookup(orig, self, files):
repo = self._repo
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
prefetchfiles = []
for parent in self._parents:
for f in files:
@@ -441,7 +442,7 @@
# Prefetch the logic that compares added and removed files for renames
def findrenames(orig, repo, matcher, added, removed, *args, **kwargs):
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
files = []
parentctx = repo['.']
for f in removed:
@@ -454,7 +455,7 @@
# prefetch files before mergecopies check
def computenonoverlap(orig, repo, c1, c2, *args, **kwargs):
u1, u2 = orig(repo, c1, c2, *args, **kwargs)
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
m1 = c1.manifest()
m2 = c2.manifest()
files = []
@@ -486,7 +487,7 @@
def computeforwardmissing(orig, a, b, match=None):
missing = list(orig(a, b, match=match))
repo = a._repo
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
mb = b.manifest()
files = []
@@ -513,7 +514,7 @@
# repo can be None when running in chg:
# - at startup, reposetup was called because serve is not norepo
# - a norepo command like "help" is called
- if repo and constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if repo and isenabled(repo):
repo.fileservice.close()
extensions.wrapfunction(dispatch, 'runcommand', runcommand)
@@ -525,7 +526,7 @@
# prevent strip from stripping remotefilelogs
def _collectbrokencsets(orig, repo, files, striprev):
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
files = list([f for f in files if not repo.shallowmatch(f)])
return orig(repo, files, striprev)
extensions.wrapfunction(repair, '_collectbrokencsets', _collectbrokencsets)
@@ -576,25 +577,23 @@
def filectx(orig, self, path, fileid=None, filelog=None):
if fileid is None:
fileid = self.filenode(path)
- if (constants.SHALLOWREPO_REQUIREMENT in self._repo.requirements and
- self._repo.shallowmatch(path)):
+ if (isenabled(self._repo) and self._repo.shallowmatch(path)):
return remotefilectx.remotefilectx(self._repo, path,
fileid=fileid, changectx=self, filelog=filelog)
return orig(self, path, fileid=fileid, filelog=filelog)
extensions.wrapfunction(context.changectx, 'filectx', filectx)
def workingfilectx(orig, self, path, filelog=None):
- if (constants.SHALLOWREPO_REQUIREMENT in self._repo.requirements and
- self._repo.shallowmatch(path)):
+ if (isenabled(self._repo) and self._repo.shallowmatch(path)):
return remotefilectx.remoteworkingfilectx(self._repo,
path, workingctx=self, filelog=filelog)
return orig(self, path, filelog=filelog)
extensions.wrapfunction(context.workingctx, 'filectx', workingfilectx)
# prefetch required revisions before a diff
def trydiff(orig, repo, revs, ctx1, ctx2, modified, added, removed,
copy, getfilectx, *args, **kwargs):
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
prefetch = []
mf1 = ctx1.manifest()
for fname in modified + added + removed:
@@ -652,7 +651,7 @@
return getrenamed
def walkfilerevs(orig, repo, match, follow, revs, fncache):
- if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if not enabled(repo):
return orig(repo, match, follow, revs, fncache)
# remotefilelog's can't be walked in rev order, so throw.
@@ -692,7 +691,7 @@
a slower, more accurate result, use ``file()``.
"""
- if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if not isenabled(repo):
return orig(repo, subset, x)
# i18n: "filelog" is a keyword
@@ -800,7 +799,7 @@
# Protect against any repo or config changes that have happened since
# this repo was added to the repos file. We'd rather this loop succeed
# and too much be deleted, than the loop fail and nothing gets deleted.
- if constants.SHALLOWREPO_REQUIREMENT not in repo.requirements:
+ if not isenabled(repo):
continue
if not util.safehasattr(repo, 'name'):
@@ -849,7 +848,7 @@
ui.warn(_("warning: no valid repos in repofile\n"))
def log(orig, ui, repo, *pats, **opts):
- if constants.SHALLOWREPO_REQUIREMENT not in repo.requirements:
+ if not isenabled(repo):
return orig(ui, repo, *pats, **opts)
follow = opts.get('follow')
@@ -910,7 +909,7 @@
"""Prefetches in background revisions specified by bgprefetchrevs revset.
Does background repack if backgroundrepack flag is set in config.
"""
- shallow = constants.SHALLOWREPO_REQUIREMENT in repo.requirements
+ shallow = isenabled(repo)
bgprefetchrevs = ui.config('remotefilelog', 'bgprefetchrevs')
isready = readytofetch(repo)
@@ -932,7 +931,7 @@
def pull(orig, ui, repo, *pats, **opts):
result = orig(ui, repo, *pats, **opts)
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
# prefetch if it's configured
prefetchrevset = ui.config('remotefilelog', 'pullprefetch')
bgrepack = repo.ui.configbool('remotefilelog', 'backgroundrepack')
@@ -972,7 +971,7 @@
return orig(repo, remote, *args, **kwargs)
def _fileprefetchhook(repo, revs, match):
- if constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if isenabled(repo):
allfiles = []
for rev in revs:
if rev == nodemod.wdirrev or rev is None:
@@ -1068,7 +1067,7 @@
Return 0 on success.
"""
- if not constants.SHALLOWREPO_REQUIREMENT in repo.requirements:
+ if not isenabled(repo):
raise error.Abort(_("repo is not shallow"))
opts = resolveprefetchopts(ui, opts)
To: pulkit, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list