Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/revset.py @ 30044:69b61d0bb008
revset: do not rewrite ':y' to '0:y' (issue5385)
That's no longer valid since the revision 0 may be hidden. Bypass validating
the existence of '0' and filter it by spanset.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sat, 01 Oct 2016 20:20:11 +0900 |
parents | 49d5434d68fb |
children | 7bf15e7eab77 |
comparison
equal
deleted
inserted
replaced
30043:49d5434d68fb | 30044:69b61d0bb008 |
---|---|
366 | 366 |
367 if not m or not n: | 367 if not m or not n: |
368 return baseset() | 368 return baseset() |
369 return _makerangeset(repo, subset, m.first(), n.last(), order) | 369 return _makerangeset(repo, subset, m.first(), n.last(), order) |
370 | 370 |
371 def rangepre(repo, subset, y, order): | |
372 # ':y' can't be rewritten to '0:y' since '0' may be hidden | |
373 n = getset(repo, fullreposet(repo), y) | |
374 if not n: | |
375 return baseset() | |
376 return _makerangeset(repo, subset, 0, n.last(), order) | |
377 | |
371 def _makerangeset(repo, subset, m, n, order): | 378 def _makerangeset(repo, subset, m, n, order): |
372 if m == n: | 379 if m == n: |
373 r = baseset([m]) | 380 r = baseset([m]) |
374 elif n == node.wdirrev: | 381 elif n == node.wdirrev: |
375 r = spanset(repo, m, len(repo)) + baseset([n]) | 382 r = spanset(repo, m, len(repo)) + baseset([n]) |
2327 else: | 2334 else: |
2328 return _orderedhexlist(repo, subset, x) | 2335 return _orderedhexlist(repo, subset, x) |
2329 | 2336 |
2330 methods = { | 2337 methods = { |
2331 "range": rangeset, | 2338 "range": rangeset, |
2339 "rangepre": rangepre, | |
2332 "dagrange": dagrange, | 2340 "dagrange": dagrange, |
2333 "string": stringset, | 2341 "string": stringset, |
2334 "symbol": stringset, | 2342 "symbol": stringset, |
2335 "and": andset, | 2343 "and": andset, |
2336 "or": orset, | 2344 "or": orset, |
2442 elif op == 'dagrangepre': | 2450 elif op == 'dagrangepre': |
2443 return _analyze(('func', ('symbol', 'ancestors'), x[1]), order) | 2451 return _analyze(('func', ('symbol', 'ancestors'), x[1]), order) |
2444 elif op == 'dagrangepost': | 2452 elif op == 'dagrangepost': |
2445 return _analyze(('func', ('symbol', 'descendants'), x[1]), order) | 2453 return _analyze(('func', ('symbol', 'descendants'), x[1]), order) |
2446 elif op == 'rangeall': | 2454 elif op == 'rangeall': |
2447 return _analyze(('range', ('string', '0'), ('string', 'tip')), order) | 2455 return _analyze(('rangepre', ('string', 'tip')), order) |
2448 elif op == 'rangepre': | |
2449 return _analyze(('range', ('string', '0'), x[1]), order) | |
2450 elif op == 'rangepost': | 2456 elif op == 'rangepost': |
2451 return _analyze(('range', x[1], ('string', 'tip')), order) | 2457 return _analyze(('range', x[1], ('string', 'tip')), order) |
2452 elif op == 'negate': | 2458 elif op == 'negate': |
2453 s = getstring(x[1], _("can't negate that")) | 2459 s = getstring(x[1], _("can't negate that")) |
2454 return _analyze(('string', '-' + s), order) | 2460 return _analyze(('string', '-' + s), order) |
2460 return (op, ta, tb, order) | 2466 return (op, ta, tb, order) |
2461 elif op == 'or': | 2467 elif op == 'or': |
2462 return (op, _analyze(x[1], order), order) | 2468 return (op, _analyze(x[1], order), order) |
2463 elif op == 'not': | 2469 elif op == 'not': |
2464 return (op, _analyze(x[1], anyorder), order) | 2470 return (op, _analyze(x[1], anyorder), order) |
2465 elif op == 'parentpost': | 2471 elif op in ('rangepre', 'parentpost'): |
2466 return (op, _analyze(x[1], defineorder), order) | 2472 return (op, _analyze(x[1], defineorder), order) |
2467 elif op == 'group': | 2473 elif op == 'group': |
2468 return _analyze(x[1], order) | 2474 return _analyze(x[1], order) |
2469 elif op in ('dagrange', 'range', 'parent', 'ancestor'): | 2475 elif op in ('dagrange', 'range', 'parent', 'ancestor'): |
2470 ta = _analyze(x[1], defineorder) | 2476 ta = _analyze(x[1], defineorder) |
2565 return o[0], o[1] | 2571 return o[0], o[1] |
2566 else: | 2572 else: |
2567 o = _optimize(x[1], not small) | 2573 o = _optimize(x[1], not small) |
2568 order = x[2] | 2574 order = x[2] |
2569 return o[0], (op, o[1], order) | 2575 return o[0], (op, o[1], order) |
2570 elif op == 'parentpost': | 2576 elif op in ('rangepre', 'parentpost'): |
2571 o = _optimize(x[1], small) | 2577 o = _optimize(x[1], small) |
2572 order = x[2] | 2578 order = x[2] |
2573 return o[0], (op, o[1], order) | 2579 return o[0], (op, o[1], order) |
2574 elif op in ('dagrange', 'range', 'parent', 'ancestor'): | 2580 elif op in ('dagrange', 'range', 'parent', 'ancestor'): |
2575 wa, ta = _optimize(x[1], small) | 2581 wa, ta = _optimize(x[1], small) |