revset: remove order information from tree (API)
Keeping `order` in tree makes AST operation harder. And there could be
invalid cases if trees could be generated and compounded freely, like:
SetA(order=define) & SetB(order=define)
^^^^^^ couldn't be satisfied
This patch changes the code to calculate order on the fly, during tree
traversal. Optimization of reordering `and` arguments is preserved by
introducing a new internal operation `flipand`.
.. api::
revset.stringset() now takes 'order' as the last argument.
Differential Revision: https://phab.mercurial-scm.org/D451
https://bz.mercurial-scm.org/1877
$ hg init a
$ cd a
$ echo a > a
$ hg add a
$ hg ci -m 'a'
$ echo b > a
$ hg ci -m'b'
$ hg up 0
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ hg book main
$ hg book
* main 0:cb9a9f314b8b
$ echo c > c
$ hg add c
$ hg ci -m'c'
created new head
$ hg book
* main 2:d36c0562f908
$ hg heads
changeset: 2:d36c0562f908
bookmark: main
tag: tip
parent: 0:cb9a9f314b8b
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: c
changeset: 1:1e6c11564562
user: test
date: Thu Jan 01 00:00:00 1970 +0000
summary: b
$ hg up 1e6c11564562
1 files updated, 0 files merged, 1 files removed, 0 files unresolved
(leaving bookmark main)
$ hg merge main
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg book
main 2:d36c0562f908
$ hg ci -m'merge'
$ hg book
main 2:d36c0562f908
$ cd ..