378 |
378 |
379 if not m or not n: |
379 if not m or not n: |
380 return baseset() |
380 return baseset() |
381 return _makerangeset(repo, subset, m.first(), n.last(), order) |
381 return _makerangeset(repo, subset, m.first(), n.last(), order) |
382 |
382 |
|
383 def rangeall(repo, subset, x, order): |
|
384 assert x is None |
|
385 return _makerangeset(repo, subset, 0, len(repo) - 1, order) |
|
386 |
383 def rangepre(repo, subset, y, order): |
387 def rangepre(repo, subset, y, order): |
384 # ':y' can't be rewritten to '0:y' since '0' may be hidden |
388 # ':y' can't be rewritten to '0:y' since '0' may be hidden |
385 n = getset(repo, fullreposet(repo), y) |
389 n = getset(repo, fullreposet(repo), y) |
386 if not n: |
390 if not n: |
387 return baseset() |
391 return baseset() |
388 return _makerangeset(repo, subset, 0, n.last(), order) |
392 return _makerangeset(repo, subset, 0, n.last(), order) |
|
393 |
|
394 def rangepost(repo, subset, x, order): |
|
395 m = getset(repo, fullreposet(repo), x) |
|
396 if not m: |
|
397 return baseset() |
|
398 return _makerangeset(repo, subset, m.first(), len(repo) - 1, order) |
389 |
399 |
390 def _makerangeset(repo, subset, m, n, order): |
400 def _makerangeset(repo, subset, m, n, order): |
391 if m == n: |
401 if m == n: |
392 r = baseset([m]) |
402 r = baseset([m]) |
393 elif n == node.wdirrev: |
403 elif n == node.wdirrev: |
2383 else: |
2393 else: |
2384 return _orderedhexlist(repo, subset, x) |
2394 return _orderedhexlist(repo, subset, x) |
2385 |
2395 |
2386 methods = { |
2396 methods = { |
2387 "range": rangeset, |
2397 "range": rangeset, |
|
2398 "rangeall": rangeall, |
2388 "rangepre": rangepre, |
2399 "rangepre": rangepre, |
|
2400 "rangepost": rangepost, |
2389 "dagrange": dagrange, |
2401 "dagrange": dagrange, |
2390 "string": stringset, |
2402 "string": stringset, |
2391 "symbol": stringset, |
2403 "symbol": stringset, |
2392 "and": andset, |
2404 "and": andset, |
2393 "or": orset, |
2405 "or": orset, |
2498 return _analyze(('func', ('symbol', 'only'), x[1]), order) |
2510 return _analyze(('func', ('symbol', 'only'), x[1]), order) |
2499 elif op == 'dagrangepre': |
2511 elif op == 'dagrangepre': |
2500 return _analyze(('func', ('symbol', 'ancestors'), x[1]), order) |
2512 return _analyze(('func', ('symbol', 'ancestors'), x[1]), order) |
2501 elif op == 'dagrangepost': |
2513 elif op == 'dagrangepost': |
2502 return _analyze(('func', ('symbol', 'descendants'), x[1]), order) |
2514 return _analyze(('func', ('symbol', 'descendants'), x[1]), order) |
2503 elif op == 'rangeall': |
|
2504 return _analyze(('rangepre', ('string', 'tip')), order) |
|
2505 elif op == 'rangepost': |
|
2506 return _analyze(('range', x[1], ('string', 'tip')), order) |
|
2507 elif op == 'negate': |
2515 elif op == 'negate': |
2508 s = getstring(x[1], _("can't negate that")) |
2516 s = getstring(x[1], _("can't negate that")) |
2509 return _analyze(('string', '-' + s), order) |
2517 return _analyze(('string', '-' + s), order) |
2510 elif op in ('string', 'symbol'): |
2518 elif op in ('string', 'symbol'): |
2511 return x |
2519 return x |
2515 return (op, ta, tb, order) |
2523 return (op, ta, tb, order) |
2516 elif op == 'or': |
2524 elif op == 'or': |
2517 return (op, _analyze(x[1], order), order) |
2525 return (op, _analyze(x[1], order), order) |
2518 elif op == 'not': |
2526 elif op == 'not': |
2519 return (op, _analyze(x[1], anyorder), order) |
2527 return (op, _analyze(x[1], anyorder), order) |
2520 elif op in ('rangepre', 'parentpost'): |
2528 elif op == 'rangeall': |
|
2529 return (op, None, order) |
|
2530 elif op in ('rangepre', 'rangepost', 'parentpost'): |
2521 return (op, _analyze(x[1], defineorder), order) |
2531 return (op, _analyze(x[1], defineorder), order) |
2522 elif op == 'group': |
2532 elif op == 'group': |
2523 return _analyze(x[1], order) |
2533 return _analyze(x[1], order) |
2524 elif op in ('dagrange', 'range', 'parent', 'ancestor'): |
2534 elif op in ('dagrange', 'range', 'parent', 'ancestor'): |
2525 ta = _analyze(x[1], defineorder) |
2535 ta = _analyze(x[1], defineorder) |
2620 return o[0], o[1] |
2630 return o[0], o[1] |
2621 else: |
2631 else: |
2622 o = _optimize(x[1], not small) |
2632 o = _optimize(x[1], not small) |
2623 order = x[2] |
2633 order = x[2] |
2624 return o[0], (op, o[1], order) |
2634 return o[0], (op, o[1], order) |
2625 elif op in ('rangepre', 'parentpost'): |
2635 elif op == 'rangeall': |
|
2636 return smallbonus, x |
|
2637 elif op in ('rangepre', 'rangepost', 'parentpost'): |
2626 o = _optimize(x[1], small) |
2638 o = _optimize(x[1], small) |
2627 order = x[2] |
2639 order = x[2] |
2628 return o[0], (op, o[1], order) |
2640 return o[0], (op, o[1], order) |
2629 elif op in ('dagrange', 'range', 'parent', 'ancestor'): |
2641 elif op in ('dagrange', 'range', 'parent', 'ancestor'): |
2630 wa, ta = _optimize(x[1], small) |
2642 wa, ta = _optimize(x[1], small) |