Mercurial > hg
changeset 46914:50b79f8b802d
outgoing: move filtering logic in its own function
This move code dedicated to a single purpose together and make the main code
simpler. Right when we are getting ready to make it more complex :-D
Differential Revision: https://phab.mercurial-scm.org/D10382
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Tue, 13 Apr 2021 15:13:20 +0200 |
parents | b2740c547243 |
children | efc6f6a794bd |
files | mercurial/hg.py |
diffstat | 1 files changed, 24 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/hg.py Sun Apr 11 19:31:03 2021 +0200 +++ b/mercurial/hg.py Tue Apr 13 15:13:20 2021 +0200 @@ -1358,27 +1358,40 @@ return ret +def _outgoing_filter(repo, revs, opts): + """apply revision filtering/ordering option for outgoing""" + limit = logcmdutil.getlimit(opts) + no_merges = opts.get(b'no_merges') + if opts.get(b'newest_first'): + revs.reverse() + if limit is None and not no_merges: + for r in revs: + yield r + return + + count = 0 + cl = repo.changelog + for n in revs: + if limit is not None and count >= limit: + break + parents = [p for p in cl.parents(n) if p != nullid] + if no_merges and len(parents) == 2: + continue + count += 1 + yield n + + def outgoing(ui, repo, dest, opts): - limit = logcmdutil.getlimit(opts) o, other = _outgoing(ui, repo, dest, opts) ret = 1 try: if o: ret = 0 - if opts.get(b'newest_first'): - o.reverse() ui.pager(b'outgoing') displayer = logcmdutil.changesetdisplayer(ui, repo, opts) - count = 0 - for n in o: - if limit is not None and count >= limit: - break - parents = [p for p in repo.changelog.parents(n) if p != nullid] - if opts.get(b'no_merges') and len(parents) == 2: - continue - count += 1 + for n in _outgoing_filter(repo, o, opts): displayer.show(repo[n]) displayer.close() cmdutil.outgoinghooks(ui, repo, other, opts, o)