Show More
@@ -1673,6 +1673,54 b' def getgraphlogrevs(repo, pats, opts):' | |||
|
1673 | 1673 | |
|
1674 | 1674 | return revs, expr, filematcher |
|
1675 | 1675 | |
|
1676 | def getlogrevs(repo, pats, opts): | |
|
1677 | """Return (revs, expr, filematcher) where revs is an iterable of | |
|
1678 | revision numbers, expr is a revset string built from log options | |
|
1679 | and file patterns or None, and used to filter 'revs'. If --stat or | |
|
1680 | --patch are not passed filematcher is None. Otherwise it is a | |
|
1681 | callable taking a revision number and returning a match objects | |
|
1682 | filtering the files to be detailed when displaying the revision. | |
|
1683 | """ | |
|
1684 | limit = loglimit(opts) | |
|
1685 | # Default --rev value depends on --follow but --follow behaviour | |
|
1686 | # depends on revisions resolved from --rev... | |
|
1687 | follow = opts.get('follow') or opts.get('follow_first') | |
|
1688 | if opts.get('rev'): | |
|
1689 | revs = scmutil.revrange(repo, opts['rev']) | |
|
1690 | elif follow: | |
|
1691 | revs = revset.baseset(repo.revs('reverse(:.)')) | |
|
1692 | else: | |
|
1693 | revs = revset.spanset(repo) | |
|
1694 | revs.reverse() | |
|
1695 | if not revs: | |
|
1696 | return revset.baseset([]), None, None | |
|
1697 | expr, filematcher = _makelogrevset(repo, pats, opts, revs) | |
|
1698 | if expr: | |
|
1699 | # Revset matchers often operate faster on revisions in changelog | |
|
1700 | # order, because most filters deal with the changelog. | |
|
1701 | if not opts.get('rev'): | |
|
1702 | revs.reverse() | |
|
1703 | matcher = revset.match(repo.ui, expr) | |
|
1704 | # Revset matches can reorder revisions. "A or B" typically returns | |
|
1705 | # returns the revision matching A then the revision matching B. Sort | |
|
1706 | # again to fix that. | |
|
1707 | revs = matcher(repo, revs) | |
|
1708 | if not opts.get('rev'): | |
|
1709 | revs.sort(reverse=True) | |
|
1710 | if limit is not None: | |
|
1711 | count = 0 | |
|
1712 | limitedrevs = revset.baseset([]) | |
|
1713 | it = iter(revs) | |
|
1714 | while count < limit: | |
|
1715 | try: | |
|
1716 | limitedrevs.append(it.next()) | |
|
1717 | except (StopIteration): | |
|
1718 | break | |
|
1719 | count += 1 | |
|
1720 | revs = limitedrevs | |
|
1721 | ||
|
1722 | return revs, expr, filematcher | |
|
1723 | ||
|
1676 | 1724 | def displaygraph(ui, dag, displayer, showparents, edgefn, getrenamed=None, |
|
1677 | 1725 | filematcher=None): |
|
1678 | 1726 | seen, state = [], graphmod.asciistate() |
@@ -4082,55 +4082,22 b' def log(ui, repo, *pats, **opts):' | |||
|
4082 | 4082 | if opts.get('graph'): |
|
4083 | 4083 | return cmdutil.graphlog(ui, repo, *pats, **opts) |
|
4084 | 4084 | |
|
4085 |
|
|
|
4085 | revs, expr, filematcher = cmdutil.getlogrevs(repo, pats, opts) | |
|
4086 | 4086 | limit = cmdutil.loglimit(opts) |
|
4087 | 4087 | count = 0 |
|
4088 | 4088 | |
|
4089 |
getrenamed |
|
|
4089 | getrenamed = None | |
|
4090 | 4090 | if opts.get('copies'): |
|
4091 | endrev = None | |
|
4091 | 4092 | if opts.get('rev'): |
|
4092 |
endrev = |
|
|
4093 | endrev = scmutil.revrange(repo, opts.get('rev')).max() + 1 | |
|
4093 | 4094 | getrenamed = templatekw.getrenamedfn(repo, endrev=endrev) |
|
4094 | 4095 | |
|
4095 | df = False | |
|
4096 | if opts.get("date"): | |
|
4097 | df = util.matchdate(opts["date"]) | |
|
4098 | ||
|
4099 | branches = opts.get('branch', []) + opts.get('only_branch', []) | |
|
4100 | opts['branch'] = [repo.lookupbranch(b) for b in branches] | |
|
4101 | ||
|
4102 | displayer = cmdutil.show_changeset(ui, repo, opts, True) | |
|
4103 | def prep(ctx, fns): | |
|
4104 | rev = ctx.rev() | |
|
4105 | parents = [p for p in repo.changelog.parentrevs(rev) | |
|
4106 | if p != nullrev] | |
|
4107 | if opts.get('no_merges') and len(parents) == 2: | |
|
4108 | return | |
|
4109 | if opts.get('only_merges') and len(parents) != 2: | |
|
4110 | return | |
|
4111 | if opts.get('branch') and ctx.branch() not in opts['branch']: | |
|
4112 | return | |
|
4113 | if df and not df(ctx.date()[0]): | |
|
4114 | return | |
|
4115 | ||
|
4116 | lower = encoding.lower | |
|
4117 | if opts.get('user'): | |
|
4118 | luser = lower(ctx.user()) | |
|
4119 | for k in [lower(x) for x in opts['user']]: | |
|
4120 | if (k in luser): | |
|
4121 | break | |
|
4122 | else: | |
|
4123 | return | |
|
4124 | if opts.get('keyword'): | |
|
4125 | luser = lower(ctx.user()) | |
|
4126 | ldesc = lower(ctx.description()) | |
|
4127 | lfiles = lower(" ".join(ctx.files())) | |
|
4128 | for k in [lower(x) for x in opts['keyword']]: | |
|
4129 | if (k in luser or k in ldesc or k in lfiles): | |
|
4130 | break | |
|
4131 | else: | |
|
4132 | return | |
|
4133 | ||
|
4096 | displayer = cmdutil.show_changeset(ui, repo, opts, buffered=True) | |
|
4097 | for rev in revs: | |
|
4098 | if count == limit: | |
|
4099 | break | |
|
4100 | ctx = repo[rev] | |
|
4134 | 4101 | copies = None |
|
4135 | 4102 | if getrenamed is not None and rev: |
|
4136 | 4103 | copies = [] |
@@ -4138,22 +4105,11 b' def log(ui, repo, *pats, **opts):' | |||
|
4138 | 4105 | rename = getrenamed(fn, rev) |
|
4139 | 4106 | if rename: |
|
4140 | 4107 | copies.append((fn, rename[0])) |
|
4141 | ||
|
4142 | revmatchfn = None | |
|
4143 | if opts.get('patch') or opts.get('stat'): | |
|
4144 | if opts.get('follow') or opts.get('follow_first'): | |
|
4145 | # note: this might be wrong when following through merges | |
|
4146 | revmatchfn = scmutil.match(repo[None], fns, default='path') | |
|
4147 | else: | |
|
4148 | revmatchfn = matchfn | |
|
4149 | ||
|
4108 | revmatchfn = filematcher and filematcher(ctx.rev()) or None | |
|
4150 | 4109 | displayer.show(ctx, copies=copies, matchfn=revmatchfn) |
|
4151 | ||
|
4152 | for ctx in cmdutil.walkchangerevs(repo, matchfn, opts, prep): | |
|
4153 | if displayer.flush(ctx.rev()): | |
|
4110 | if displayer.flush(rev): | |
|
4154 | 4111 | count += 1 |
|
4155 | if count == limit: | |
|
4156 | break | |
|
4112 | ||
|
4157 | 4113 | displayer.close() |
|
4158 | 4114 | |
|
4159 | 4115 | @command('manifest', |
@@ -1972,8 +1972,9 b' Test --follow and forward --rev' | |||
|
1972 | 1972 | +++ glog.nodes * (glob) |
|
1973 | 1973 | @@ -1,3 +1,3 @@ |
|
1974 | 1974 | -nodetag 6 |
|
1975 | -nodetag 7 | |
|
1975 | 1976 | nodetag 8 |
|
1976 |
|
|
|
1977 | +nodetag 7 | |
|
1977 | 1978 | +nodetag 6 |
|
1978 | 1979 | |
|
1979 | 1980 | Test --follow-first and forward --rev |
@@ -1988,8 +1989,9 b' Test --follow-first and forward --rev' | |||
|
1988 | 1989 | +++ glog.nodes * (glob) |
|
1989 | 1990 | @@ -1,3 +1,3 @@ |
|
1990 | 1991 | -nodetag 6 |
|
1992 | -nodetag 7 | |
|
1991 | 1993 | nodetag 8 |
|
1992 |
|
|
|
1994 | +nodetag 7 | |
|
1993 | 1995 | +nodetag 6 |
|
1994 | 1996 | |
|
1995 | 1997 | Test --follow and backward --rev |
General Comments 0
You need to be logged in to leave comments.
Login now