Mercurial > public > mercurial-scm > hg
comparison mercurial/revset.py @ 29364:76a1a703e23d
revset: build dict of extra sort options before evaluating set
Prepares for extracting a function that only validates sort options.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Wed, 15 Jun 2016 21:26:45 +0900 |
parents | 2d18c61173f1 |
children | f652e84f23f2 |
comparison
equal
deleted
inserted
replaced
29363:2d18c61173f1 | 29364:76a1a703e23d |
---|---|
1879 k = k[1:] | 1879 k = k[1:] |
1880 if k not in _sortkeyfuncs and k != 'topo': | 1880 if k not in _sortkeyfuncs and k != 'topo': |
1881 raise error.ParseError(_("unknown sort key %r") % fk) | 1881 raise error.ParseError(_("unknown sort key %r") % fk) |
1882 keyflags.append((k, reverse)) | 1882 keyflags.append((k, reverse)) |
1883 | 1883 |
1884 s = args['set'] | |
1885 revs = getset(repo, subset, s) | |
1886 | |
1887 if len(keyflags) > 1 and any(k == 'topo' for k, reverse in keyflags): | 1884 if len(keyflags) > 1 and any(k == 'topo' for k, reverse in keyflags): |
1888 # i18n: "topo" is a keyword | 1885 # i18n: "topo" is a keyword |
1889 raise error.ParseError(_( | 1886 raise error.ParseError(_( |
1890 'topo sort order cannot be combined with other sort keys')) | 1887 'topo sort order cannot be combined with other sort keys')) |
1891 | 1888 |
1892 firstbranch = () | 1889 opts = {} |
1893 if 'topo.firstbranch' in args: | 1890 if 'topo.firstbranch' in args: |
1894 if any(k == 'topo' for k, reverse in keyflags): | 1891 if any(k == 'topo' for k, reverse in keyflags): |
1895 firstbranch = getset(repo, subset, args['topo.firstbranch']) | 1892 opts['topo.firstbranch'] = args['topo.firstbranch'] |
1896 else: | 1893 else: |
1897 # i18n: "topo" and "topo.firstbranch" are keywords | 1894 # i18n: "topo" and "topo.firstbranch" are keywords |
1898 raise error.ParseError(_( | 1895 raise error.ParseError(_( |
1899 'topo.firstbranch can only be used when using the topo sort ' | 1896 'topo.firstbranch can only be used when using the topo sort ' |
1900 'key')) | 1897 'key')) |
1898 | |
1899 s = args['set'] | |
1900 revs = getset(repo, subset, s) | |
1901 | 1901 |
1902 if not keyflags: | 1902 if not keyflags: |
1903 return revs | 1903 return revs |
1904 if len(keyflags) == 1 and keyflags[0][0] == "rev": | 1904 if len(keyflags) == 1 and keyflags[0][0] == "rev": |
1905 revs.sort(reverse=keyflags[0][1]) | 1905 revs.sort(reverse=keyflags[0][1]) |
1906 return revs | 1906 return revs |
1907 elif keyflags[0][0] == "topo": | 1907 elif keyflags[0][0] == "topo": |
1908 firstbranch = () | |
1909 if 'topo.firstbranch' in opts: | |
1910 firstbranch = getset(repo, subset, opts['topo.firstbranch']) | |
1908 revs = baseset(_toposort(revs, repo.changelog.parentrevs, firstbranch), | 1911 revs = baseset(_toposort(revs, repo.changelog.parentrevs, firstbranch), |
1909 istopo=True) | 1912 istopo=True) |
1910 if keyflags[0][1]: | 1913 if keyflags[0][1]: |
1911 revs.reverse() | 1914 revs.reverse() |
1912 return revs | 1915 return revs |