Mercurial > hg-stable
changeset 45628:c11099cc1de4
log: map --removed to walkopts.force_changelog_traversal
This is the flag to forcibly enable the slowpath. I'm not sure if the
slowpath parameter should be merged with this flag, so let's keep it as
an immutable flag for now.
I'll add another flag to support "grep --all-files". These two will be the
flags which aren't directly mapped from the command-line options.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 12 Sep 2020 21:54:58 +0900 |
parents | fb000408bca5 |
children | 8fe09005ed88 |
files | mercurial/logcmdutil.py |
diffstat | 1 files changed, 8 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/logcmdutil.py Fri Sep 25 14:33:05 2020 +0200 +++ b/mercurial/logcmdutil.py Sat Sep 12 21:54:58 2020 +0900 @@ -693,6 +693,10 @@ # 0: no follow, 1: follow first, 2: follow both parents follow = attr.ib(default=0) # type: int + # do not attempt filelog-based traversal, which may be fast but cannot + # include revisions where files were removed + force_changelog_traversal = attr.ib(default=False) # type: bool + # limit number of changes displayed; None means unlimited limit = attr.ib(default=None) # type: Optional[int] @@ -715,6 +719,7 @@ opts=opts, revspec=opts.get(b'rev', []), follow=follow, + force_changelog_traversal=bool(opts.get(b'removed')), limit=getlimit(opts), ) @@ -736,7 +741,7 @@ wctx = repo[None] match, pats = scmutil.matchandpats(wctx, wopts.pats, wopts.opts) slowpath = match.anypats() or ( - not match.always() and wopts.opts.get(b'removed') + not match.always() and wopts.force_changelog_traversal ) if not slowpath: if wopts.follow and wopts.revspec: @@ -923,6 +928,7 @@ revs = _initialrevs(repo, wopts) if not revs: return smartset.baseset(), None + # TODO: might want to merge slowpath with wopts.force_changelog_traversal match, pats, slowpath = _makematcher(repo, revs, wopts) wopts = attr.evolve(wopts, pats=pats) @@ -931,6 +937,7 @@ if slowpath or match.always(): revs = dagop.revancestors(repo, revs, followfirst=wopts.follow == 1) else: + assert not wopts.force_changelog_traversal revs, filematcher = _fileancestors( repo, revs, match, followfirst=wopts.follow == 1 )