def log(orig, ui, repo, *pats, **opts): if shallowrepo.requirement not in repo.requirements: return orig(ui, repo, *pats, **opts) follow = opts.get('follow') revs = opts.get('rev') if pats: # Force slowpath for non-follow patterns and follows that start from # non-working-copy-parent revs. if not follow or revs: # This forces the slowpath opts['removed'] = True # If this is a non-follow log without any revs specified, recommend that # the user add -f to speed it up. if not follow and not revs: match, pats = scmutil.matchandpats(repo['.'], pats, opts) isfile = not match.anypats() if isfile: for file in match.files(): if not os.path.isfile(repo.wjoin(file)): isfile = False break if isfile: ui.warn(_("warning: file log can be slow on large repos - " + "use -f to speed it up\n")) return orig(ui, repo, *pats, **opts)
def walkfilerevs(orig, repo, match, follow, revs, fncache): if not shallowrepo.requirement in repo.requirements: return orig(repo, match, follow, revs, fncache) # remotefilelog's can't be walked in rev order, so throw. # The caller will see the exception and walk the commit tree instead. if not follow: raise cmdutil.FileWalkError("Cannot walk via filelog") wanted = set() minrev, maxrev = min(revs), max(revs) pctx = repo['.'] for filename in match.files(): if filename not in pctx: raise error.Abort(_('cannot follow file not in parent ' 'revision: "%s"') % filename) fctx = pctx[filename] linkrev = fctx.linkrev() if linkrev >= minrev and linkrev <= maxrev: fncache.setdefault(linkrev, []).append(filename) wanted.add(linkrev) for ancestor in fctx.ancestors(): linkrev = ancestor.linkrev() if linkrev >= minrev and linkrev <= maxrev: fncache.setdefault(linkrev, []).append(ancestor.path()) wanted.add(linkrev) return wanted
def walkfilerevs(orig, repo, match, follow, revs, fncache): if not shallowrepo.requirement in repo.requirements: return orig(repo, match, follow, revs, fncache) # remotefilelog's can't be walked in rev order, so throw. # The caller will see the exception and walk the commit tree instead. if not follow: raise cmdutil.FileWalkError("Cannot walk via filelog") wanted = set() minrev, maxrev = min(revs), max(revs) pctx = repo['.'] for filename in match.files(): if filename not in pctx: raise util.Abort( _('cannot follow file not in parent ' 'revision: "%s"') % filename) fctx = pctx[filename] linkrev = fctx.linkrev() if linkrev >= minrev and linkrev <= maxrev: fncache.setdefault(linkrev, []).append(filename) wanted.add(linkrev) for ancestor in fctx.ancestors(): linkrev = ancestor.linkrev() if linkrev >= minrev and linkrev <= maxrev: fncache.setdefault(linkrev, []).append(ancestor.path()) wanted.add(linkrev) return wanted
def log(orig, ui, repo, *pats, **opts): if not isenabled(repo): return orig(ui, repo, *pats, **opts) follow = opts.get(r'follow') revs = opts.get(r'rev') if pats: # Force slowpath for non-follow patterns and follows that start from # non-working-copy-parent revs. if not follow or revs: # This forces the slowpath opts[r'removed'] = True # If this is a non-follow log without any revs specified, recommend that # the user add -f to speed it up. if not follow and not revs: match, pats = scmutil.matchandpats(repo['.'], pats, pycompat.byteskwargs(opts)) isfile = not match.anypats() if isfile: for file in match.files(): if not os.path.isfile(repo.wjoin(file)): isfile = False break if isfile: ui.warn( _("warning: file log can be slow on large repos - " + "use -f to speed it up\n")) return orig(ui, repo, *pats, **opts)
def log(orig, ui, repo, *pats, **opts): if pats and not opts.get("follow"): # Force slowpath for non-follow patterns opts['removed'] = True match, pats = scmutil.matchandpats(repo['.'], pats, opts) isfile = not match.anypats() if isfile: for file in match.files(): if not os.path.isfile(repo.wjoin(file)): isfile = False break if isfile: ui.warn(_("warning: file log can be slow on large repos - " + "use -f to speed it up\n")) return orig(ui, repo, *pats, **opts)
def log(orig, ui, repo, *pats, **opts): if pats and not opts.get("follow"): # Force slowpath for non-follow patterns opts['removed'] = True match, pats = scmutil.matchandpats(repo['.'], pats, opts) isfile = not match.anypats() if isfile: for file in match.files(): if not os.path.isfile(repo.wjoin(file)): isfile = False break if isfile: ui.warn( _("warning: file log can be slow on large repos - " + "use -f to speed it up\n")) return orig(ui, repo, *pats, **opts)