diff -r 99b5eaf372a7 -r 69402eb72115 mercurial/commands.py --- a/mercurial/commands.py Mon Feb 24 22:42:14 2014 +0100 +++ b/mercurial/commands.py Fri Feb 28 15:10:56 2014 -0800 @@ -4082,55 +4082,22 @@ if opts.get('graph'): return cmdutil.graphlog(ui, repo, *pats, **opts) - matchfn = scmutil.match(repo[None], pats, opts) + revs, expr, filematcher = cmdutil.getlogrevs(repo, pats, opts) limit = cmdutil.loglimit(opts) count = 0 - getrenamed, endrev = None, None + getrenamed = None if opts.get('copies'): + endrev = None if opts.get('rev'): - endrev = max(scmutil.revrange(repo, opts.get('rev'))) + 1 + endrev = scmutil.revrange(repo, opts.get('rev')).max() + 1 getrenamed = templatekw.getrenamedfn(repo, endrev=endrev) - df = False - if opts.get("date"): - df = util.matchdate(opts["date"]) - - branches = opts.get('branch', []) + opts.get('only_branch', []) - opts['branch'] = [repo.lookupbranch(b) for b in branches] - - displayer = cmdutil.show_changeset(ui, repo, opts, True) - def prep(ctx, fns): - rev = ctx.rev() - parents = [p for p in repo.changelog.parentrevs(rev) - if p != nullrev] - if opts.get('no_merges') and len(parents) == 2: - return - if opts.get('only_merges') and len(parents) != 2: - return - if opts.get('branch') and ctx.branch() not in opts['branch']: - return - if df and not df(ctx.date()[0]): - return - - lower = encoding.lower - if opts.get('user'): - luser = lower(ctx.user()) - for k in [lower(x) for x in opts['user']]: - if (k in luser): - break - else: - return - if opts.get('keyword'): - luser = lower(ctx.user()) - ldesc = lower(ctx.description()) - lfiles = lower(" ".join(ctx.files())) - for k in [lower(x) for x in opts['keyword']]: - if (k in luser or k in ldesc or k in lfiles): - break - else: - return - + displayer = cmdutil.show_changeset(ui, repo, opts, buffered=True) + for rev in revs: + if count == limit: + break + ctx = repo[rev] copies = None if getrenamed is not None and rev: copies = [] @@ -4138,22 +4105,11 @@ rename = getrenamed(fn, rev) if rename: copies.append((fn, rename[0])) - - revmatchfn = None - if opts.get('patch') or opts.get('stat'): - if opts.get('follow') or opts.get('follow_first'): - # note: this might be wrong when following through merges - revmatchfn = scmutil.match(repo[None], fns, default='path') - else: - revmatchfn = matchfn - + revmatchfn = filematcher and filematcher(ctx.rev()) or None displayer.show(ctx, copies=copies, matchfn=revmatchfn) - - for ctx in cmdutil.walkchangerevs(repo, matchfn, opts, prep): - if displayer.flush(ctx.rev()): + if displayer.flush(rev): count += 1 - if count == limit: - break + displayer.close() @command('manifest',