Show More
@@ -1871,18 +1871,27 b' def sort(repo, subset, x):' | |||||
1871 | # i18n: "sort" is a keyword |
|
1871 | # i18n: "sort" is a keyword | |
1872 | keys = getstring(args['keys'], _("sort spec must be a string")) |
|
1872 | keys = getstring(args['keys'], _("sort spec must be a string")) | |
1873 |
|
1873 | |||
|
1874 | keyflags = [] | |||
|
1875 | for k in keys.split(): | |||
|
1876 | fk = k | |||
|
1877 | reverse = (k[0] == '-') | |||
|
1878 | if reverse: | |||
|
1879 | k = k[1:] | |||
|
1880 | if k not in _sortkeyfuncs and k != 'topo': | |||
|
1881 | raise error.ParseError(_("unknown sort key %r") % fk) | |||
|
1882 | keyflags.append((k, reverse)) | |||
|
1883 | ||||
1874 | s = args['set'] |
|
1884 | s = args['set'] | |
1875 | keys = keys.split() |
|
|||
1876 | revs = getset(repo, subset, s) |
|
1885 | revs = getset(repo, subset, s) | |
1877 |
|
1886 | |||
1878 |
if len(keys) > 1 and any(k |
|
1887 | if len(keyflags) > 1 and any(k == 'topo' for k, reverse in keyflags): | |
1879 | # i18n: "topo" is a keyword |
|
1888 | # i18n: "topo" is a keyword | |
1880 | raise error.ParseError(_( |
|
1889 | raise error.ParseError(_( | |
1881 | 'topo sort order cannot be combined with other sort keys')) |
|
1890 | 'topo sort order cannot be combined with other sort keys')) | |
1882 |
|
1891 | |||
1883 | firstbranch = () |
|
1892 | firstbranch = () | |
1884 | if 'topo.firstbranch' in args: |
|
1893 | if 'topo.firstbranch' in args: | |
1885 |
if any(k |
|
1894 | if any(k == 'topo' for k, reverse in keyflags): | |
1886 | firstbranch = getset(repo, subset, args['topo.firstbranch']) |
|
1895 | firstbranch = getset(repo, subset, args['topo.firstbranch']) | |
1887 | else: |
|
1896 | else: | |
1888 | # i18n: "topo" and "topo.firstbranch" are keywords |
|
1897 | # i18n: "topo" and "topo.firstbranch" are keywords | |
@@ -1890,32 +1899,22 b' def sort(repo, subset, x):' | |||||
1890 | 'topo.firstbranch can only be used when using the topo sort ' |
|
1899 | 'topo.firstbranch can only be used when using the topo sort ' | |
1891 | 'key')) |
|
1900 | 'key')) | |
1892 |
|
1901 | |||
1893 | if not keys: |
|
1902 | if not keyflags: | |
1894 | return revs |
|
|||
1895 | if keys == ["rev"]: |
|
|||
1896 | revs.sort() |
|
|||
1897 | return revs |
|
1903 | return revs | |
1898 | elif keys == ["-rev"]: |
|
1904 | if len(keyflags) == 1 and keyflags[0][0] == "rev": | |
1899 |
revs.sort(reverse= |
|
1905 | revs.sort(reverse=keyflags[0][1]) | |
1900 | return revs |
|
1906 | return revs | |
1901 |
elif keys[0] |
|
1907 | elif keyflags[0][0] == "topo": | |
1902 | revs = baseset(_toposort(revs, repo.changelog.parentrevs, firstbranch), |
|
1908 | revs = baseset(_toposort(revs, repo.changelog.parentrevs, firstbranch), | |
1903 | istopo=True) |
|
1909 | istopo=True) | |
1904 |
if keys[0][ |
|
1910 | if keyflags[0][1]: | |
1905 | revs.reverse() |
|
1911 | revs.reverse() | |
1906 | return revs |
|
1912 | return revs | |
1907 |
|
1913 | |||
1908 | # sort() is guaranteed to be stable |
|
1914 | # sort() is guaranteed to be stable | |
1909 | ctxs = [repo[r] for r in revs] |
|
1915 | ctxs = [repo[r] for r in revs] | |
1910 | for k in reversed(keys): |
|
1916 | for k, reverse in reversed(keyflags): | |
1911 | fk = k |
|
|||
1912 | reverse = (k[0] == '-') |
|
|||
1913 | if reverse: |
|
|||
1914 | k = k[1:] |
|
|||
1915 | try: |
|
|||
1916 |
|
|
1917 | ctxs.sort(key=_sortkeyfuncs[k], reverse=reverse) | |
1917 | except KeyError: |
|
|||
1918 | raise error.ParseError(_("unknown sort key %r") % fk) |
|
|||
1919 | return baseset([c.rev() for c in ctxs]) |
|
1918 | return baseset([c.rev() for c in ctxs]) | |
1920 |
|
1919 | |||
1921 | def _toposort(revs, parentsfunc, firstbranch=()): |
|
1920 | def _toposort(revs, parentsfunc, firstbranch=()): |
General Comments 0
You need to be logged in to leave comments.
Login now