mercurial/revsetlang.py
changeset 31800 c63cb2d10d6d
parent 31636 f3b151278655
child 31997 11f501f0a213
--- a/mercurial/revsetlang.py	Sat Apr 01 15:24:03 2017 -0700
+++ b/mercurial/revsetlang.py	Sat May 14 20:51:57 2016 +0900
@@ -434,9 +434,9 @@
         flushss()
         if len(ts) == 1:
             return ws[0], ts[0] # 'or' operation is fully optimized out
-        # we can't reorder trees by weight because it would change the order.
-        # ("sort(a + b)" == "sort(b + a)", but "a + b" != "b + a")
-        #   ts = tuple(t for w, t in sorted(zip(ws, ts), key=lambda wt: wt[0]))
+        if order != defineorder:
+            # reorder by weight only when f(a + b) == f(b + a)
+            ts = [wt[1] for wt in sorted(zip(ws, ts), key=lambda wt: wt[0])]
         return max(ws), (op, ('list',) + tuple(ts), order)
     elif op == 'not':
         # Optimize not public() to _notpublic() because we have a fast version