--- a/hgext/fastannotate/support.py Sat Oct 05 10:29:34 2019 -0400
+++ b/hgext/fastannotate/support.py Sun Oct 06 09:45:02 2019 -0400
@@ -21,6 +21,7 @@
revmap,
)
+
class _lazyfctx(object):
"""delegates to fctx but do not construct fctx when unnecessary"""
@@ -42,6 +43,7 @@
def __getattr__(self, name):
return getattr(self._fctx, name)
+
def _convertoutputs(repo, annotated, contents):
"""convert fastannotate outputs to vanilla annotate format"""
# fastannotate returns: [(nodeid, linenum, path)], [linecontent]
@@ -59,10 +61,12 @@
results.append(annotateline(fctx=fctx, lineno=lineno, text=line))
return results
+
def _getmaster(fctx):
"""(fctx) -> str"""
return fctx._repo.ui.config('fastannotate', 'mainbranch') or 'default'
+
def _doannotate(fctx, follow=True, diffopts=None):
"""like the vanilla fctx.annotate, but do it via fastannotate, and make
the output format compatible with the vanilla fctx.annotate.
@@ -73,49 +77,61 @@
with context.fctxannotatecontext(fctx, follow, diffopts) as ac:
try:
- annotated, contents = ac.annotate(fctx.rev(), master=master,
- showpath=True, showlines=True)
+ annotated, contents = ac.annotate(
+ fctx.rev(), master=master, showpath=True, showlines=True
+ )
except Exception:
- ac.rebuild() # try rebuild once
- fctx._repo.ui.debug('fastannotate: %s: rebuilding broken cache\n'
- % fctx._path)
+ ac.rebuild() # try rebuild once
+ fctx._repo.ui.debug(
+ 'fastannotate: %s: rebuilding broken cache\n' % fctx._path
+ )
try:
- annotated, contents = ac.annotate(fctx.rev(), master=master,
- showpath=True, showlines=True)
+ annotated, contents = ac.annotate(
+ fctx.rev(), master=master, showpath=True, showlines=True
+ )
except Exception:
raise
assert annotated and contents
return _convertoutputs(fctx._repo, annotated, contents)
+
def _hgwebannotate(orig, fctx, ui):
- diffopts = patch.difffeatureopts(ui, untrusted=True,
- section='annotate', whitespace=True)
+ diffopts = patch.difffeatureopts(
+ ui, untrusted=True, section='annotate', whitespace=True
+ )
return _doannotate(fctx, diffopts=diffopts)
-def _fctxannotate(orig, self, follow=False, linenumber=False, skiprevs=None,
- diffopts=None):
+
+def _fctxannotate(
+ orig, self, follow=False, linenumber=False, skiprevs=None, diffopts=None
+):
if skiprevs:
# skiprevs is not supported yet
- return orig(self, follow, linenumber, skiprevs=skiprevs,
- diffopts=diffopts)
+ return orig(
+ self, follow, linenumber, skiprevs=skiprevs, diffopts=diffopts
+ )
try:
return _doannotate(self, follow, diffopts)
except Exception as ex:
- self._repo.ui.debug('fastannotate: falling back to the vanilla '
- 'annotate: %r\n' % ex)
- return orig(self, follow=follow, skiprevs=skiprevs,
- diffopts=diffopts)
+ self._repo.ui.debug(
+ 'fastannotate: falling back to the vanilla ' 'annotate: %r\n' % ex
+ )
+ return orig(self, follow=follow, skiprevs=skiprevs, diffopts=diffopts)
+
def _remotefctxannotate(orig, self, follow=False, skiprevs=None, diffopts=None):
# skipset: a set-like used to test if a fctx needs to be downloaded
with context.fctxannotatecontext(self, follow, diffopts) as ac:
skipset = revmap.revmap(ac.revmappath)
- return orig(self, follow, skiprevs=skiprevs, diffopts=diffopts,
- prefetchskip=skipset)
+ return orig(
+ self, follow, skiprevs=skiprevs, diffopts=diffopts, prefetchskip=skipset
+ )
+
def replacehgwebannotate():
extensions.wrapfunction(hgweb.webutil, 'annotate', _hgwebannotate)
+
def replacefctxannotate():
extensions.wrapfunction(hgcontext.basefilectx, 'annotate', _fctxannotate)