https://bz.mercurial-scm.org/show_bug.cgi?id=5538
Bug ID: 5538 Summary: followlines() spends a lot of time in linkrev adjustment Product: Mercurial Version: default branch Hardware: All OS: All Status: UNCONFIRMED Severity: bug Priority: normal Component: Mercurial Assignee: bugzi...@mercurial-scm.org Reporter: gregory.sz...@gmail.com CC: mercurial-devel@mercurial-scm.org, pierre-yves.da...@ens-lyon.org On the Firefox repo, `hg log -r 'followlines("layout/generic/nsBlockFrame.cpp", 2750:2850)'` spends ~85% of execution time in linkrev adjustment: $ hg log -r 'followlines("layout/generic/nsBlockFrame.cpp", 2750:2850)' --pager=false -T '{rev}\n' --profile | 100.0% dispatch.py: callcatch line 45: mercurial.dispatch.run() | 100.0% scmutil.py: callcatch line 234: return scmutil.callcatch(ui... | 100.0% dispatch.py: _runcatchfunc line 145: return func() | 100.0% blackbox.py: log line 215: return _dispatch(req) | 99.8% commands.py: log line 3546: return orig(ui, repo, *args... | 99.8% cmdutil.py: getlogrevs line 3418: revs, expr, filematcher = c... | 98.2% cmdutil.py: _makelogrevset line 2138: expr, filematcher = _makelo... | 98.2% smartset.py: __iter__ line 1961: it = iter(revs) | 98.2% smartset.py: _consumegen line 815: for x in self._consumegen(): | 98.2% revset.py: <genexpr> line 846: for item in self._gen: | 98.2% context.py: blockancestors line 954: (c.rev() for c, _linerange \ 85.9% util.py: __get__ line 763: return self._changeid | 85.9% context.py: _changeid line 815: result = self.func(obj) | 85.9% context.py: _adjustlinkrev line 700: return self._adjustlinkrev(... | 85.9% ancestor.py: __contains__ line 860: if lkr not in memberanc: | 29.0% changelog.py: parentrevs line 353: for parent in parentrevs(-h... | 9.7% revlog.py: parentrevs line 359: return super(changelog, sel... \ 12.2% context.py: _changesrange line 1200: inrangep, linerange1 = _cha... | 11.6% context.py: data line 1178: blocks = mdiff.allblocks(fc... | 11.6% filelog.py: read line 1132: return self._filelog.read(s... | 11.6% revlog.py: revision line 48: t = self.revision(node) | 8.0% revlog.py: _chunks line 1313: bins = self._chunks(chain, ... | 8.0% revlog.py: decompress line 1232: ladd(decomp(buffer(data, ch... --- Sample count: 11546 Total time: 38.470000 seconds This makes followlines() extremely slow on large repos, especially with files with many revisions. -- You are receiving this mail because: You are on the CC list for the bug. _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel