mercurial/hg.py
changeset 46914 50b79f8b802d
parent 46913 b2740c547243
child 46915 efc6f6a794bd
--- 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)