comparison mercurial/revsetlang.py @ 34034:96f249dce03e

revset: move order constants from revsetlang Thanks to the recent refactor, the ordering rule is fully processed at runtime.
author Yuya Nishihara <yuya@tcha.org>
date Wed, 30 Aug 2017 22:32:47 +0900
parents dcfdf4d09663
children 37b82485097f
comparison
equal deleted inserted replaced
34033:2d80e078724a 34034:96f249dce03e
255 is also None. Use _isnamedfunc() instead. 255 is also None. Use _isnamedfunc() instead.
256 """ 256 """
257 if not _isnamedfunc(x, funcname): 257 if not _isnamedfunc(x, funcname):
258 return 258 return
259 return x[2] 259 return x[2]
260
261 # Constants for ordering requirement, used in getset():
262 #
263 # If 'define', any nested functions and operations MAY change the ordering of
264 # the entries in the set (but if changes the ordering, it MUST ALWAYS change
265 # it). If 'follow', any nested functions and operations MUST take the ordering
266 # specified by the first operand to the '&' operator.
267 #
268 # For instance,
269 #
270 # X & (Y | Z)
271 # ^ ^^^^^^^
272 # | follow
273 # define
274 #
275 # will be evaluated as 'or(y(x()), z(x()))', where 'x()' can change the order
276 # of the entries in the set, but 'y()', 'z()' and 'or()' shouldn't.
277 #
278 # 'any' means the order doesn't matter. For instance,
279 #
280 # (X & Y) | ancestors(Z)
281 # ^ ^
282 # any any
283 #
284 # For 'X & Y', 'X' decides order so the order of 'Y' does not matter. For
285 # 'ancestors(Z)', Z's order does not matter since 'ancestors' does not care
286 # about the order of its argument.
287 #
288 # Currently, most revsets do not care about the order, so 'define' is
289 # equivalent to 'follow' for them, and the resulting order is based on the
290 # 'subset' parameter passed down to them:
291 #
292 # m = revset.match(..., order=defineorder)
293 # m(repo, subset)
294 # ^^^^^^
295 # For most revsets, 'define' means using the order this subset provides
296 #
297 # There are a few revsets that always redefine the order if 'define' is
298 # specified: 'sort(X)', 'reverse(X)', 'x:y'.
299 anyorder = 'any' # don't care the order, could be even random-shuffled
300 defineorder = 'define' # ALWAYS redefine, or ALWAYS follow the current order
301 followorder = 'follow' # MUST follow the current order
302 260
303 def _matchonly(revs, bases): 261 def _matchonly(revs, bases):
304 """ 262 """
305 >>> f = lambda *args: _matchonly(*map(parse, args)) 263 >>> f = lambda *args: _matchonly(*map(parse, args))
306 >>> f('ancestors(A)', 'not ancestors(B)') 264 >>> f('ancestors(A)', 'not ancestors(B)')