# HG changeset patch # User Yuya Nishihara # Date 1432457602 -32400 # Node ID 5909ac39b86a74810e8065f9e9a4c8f3a86e7924 # Parent 6084926366b979e81e5dcc84fa595965d4c07883 revrange: drop unnecessary deduplication of revisions Because "l" is a smartset, duplicated entries are omitted by addsets. diff -r 6084926366b9 -r 5909ac39b86a mercurial/scmutil.py --- a/mercurial/scmutil.py Fri May 29 22:23:58 2015 +0200 +++ b/mercurial/scmutil.py Sun May 24 17:53:22 2015 +0900 @@ -709,14 +709,12 @@ return defval return repo[val].rev() - seen, l = set(), revset.baseset([]) + l = revset.baseset([]) revsetaliases = [alias for (alias, _) in repo.ui.configitems("revsetalias")] for spec in revs: - if l and not seen: - seen = set(l) # attempt to parse old-style ranges first to deal with # things like old-tag which contain query metacharacters try: @@ -727,7 +725,6 @@ raise error.RepoLookupError if isinstance(spec, int): - seen.add(spec) l = l + revset.baseset([spec]) continue @@ -741,24 +738,15 @@ if end == nullrev and start < 0: start = nullrev rangeiter = repo.changelog.revs(start, end) - if not seen and not l: + if not l: # by far the most common case: revs = ["-1:0"] l = revset.baseset(rangeiter) - # defer syncing seen until next iteration continue newrevs = set(rangeiter) - if seen: - newrevs.difference_update(seen) - seen.update(newrevs) - else: - seen = newrevs l = l + revset.baseset(sorted(newrevs, reverse=start > end)) continue elif spec and spec in repo: # single unquoted rev rev = revfix(repo, spec, None) - if rev in seen: - continue - seen.add(rev) l = l + revset.baseset([rev]) continue except error.RepoLookupError: @@ -766,10 +754,9 @@ # fall through to new-style queries if old-style fails m = revset.match(repo.ui, spec, repo) - if seen or l: - dl = [r for r in m(repo) if r not in seen] + if l: + dl = [r for r in m(repo)] l = l + revset.baseset(dl) - seen.update(dl) else: l = m(repo) diff -r 6084926366b9 -r 5909ac39b86a tests/test-revset.t --- a/tests/test-revset.t Fri May 29 22:23:58 2015 +0200 +++ b/tests/test-revset.t Sun May 24 17:53:22 2015 +0900 @@ -858,6 +858,16 @@ 4 5 +test that more than one `-r`s are combined in the right order and deduplicated: + + $ hg log -T '{rev}\n' -r 3 -r 3 -r 4 -r 5:2 -r 'ancestors(4)' + 3 + 4 + 5 + 2 + 0 + 1 + test that `or` operation skips duplicated revisions from right-hand side $ try 'reverse(1::5) or ancestors(4)'