1857 # i18n: "sort" is a keyword |
1857 # i18n: "sort" is a keyword |
1858 keys = getstring(l[1], _("sort spec must be a string")) |
1858 keys = getstring(l[1], _("sort spec must be a string")) |
1859 |
1859 |
1860 s = l[0] |
1860 s = l[0] |
1861 keys = keys.split() |
1861 keys = keys.split() |
1862 l = [] |
|
1863 def invert(s): |
|
1864 return "".join(chr(255 - ord(c)) for c in s) |
|
1865 revs = getset(repo, subset, s) |
1862 revs = getset(repo, subset, s) |
1866 if keys == ["rev"]: |
1863 if keys == ["rev"]: |
1867 revs.sort() |
1864 revs.sort() |
1868 return revs |
1865 return revs |
1869 elif keys == ["-rev"]: |
1866 elif keys == ["-rev"]: |
1870 revs.sort(reverse=True) |
1867 revs.sort(reverse=True) |
1871 return revs |
1868 return revs |
1872 for r in revs: |
1869 # sort() is guaranteed to be stable |
1873 c = repo[r] |
1870 ctxs = [repo[r] for r in revs] |
1874 e = [] |
1871 if True: |
1875 for k in keys: |
1872 for k in reversed(keys): |
1876 if k == 'rev': |
1873 if k == 'rev': |
1877 e.append(r) |
1874 ctxs.sort(key=lambda c: c.rev()) |
1878 elif k == '-rev': |
1875 elif k == '-rev': |
1879 e.append(-r) |
1876 ctxs.sort(key=lambda c: c.rev(), reverse=True) |
1880 elif k == 'branch': |
1877 elif k == 'branch': |
1881 e.append(c.branch()) |
1878 ctxs.sort(key=lambda c: c.branch()) |
1882 elif k == '-branch': |
1879 elif k == '-branch': |
1883 e.append(invert(c.branch())) |
1880 ctxs.sort(key=lambda c: c.branch(), reverse=True) |
1884 elif k == 'desc': |
1881 elif k == 'desc': |
1885 e.append(c.description()) |
1882 ctxs.sort(key=lambda c: c.description()) |
1886 elif k == '-desc': |
1883 elif k == '-desc': |
1887 e.append(invert(c.description())) |
1884 ctxs.sort(key=lambda c: c.description(), reverse=True) |
1888 elif k in 'user author': |
1885 elif k in 'user author': |
1889 e.append(c.user()) |
1886 ctxs.sort(key=lambda c: c.user()) |
1890 elif k in '-user -author': |
1887 elif k in '-user -author': |
1891 e.append(invert(c.user())) |
1888 ctxs.sort(key=lambda c: c.user(), reverse=True) |
1892 elif k == 'date': |
1889 elif k == 'date': |
1893 e.append(c.date()[0]) |
1890 ctxs.sort(key=lambda c: c.date()[0]) |
1894 elif k == '-date': |
1891 elif k == '-date': |
1895 e.append(-c.date()[0]) |
1892 ctxs.sort(key=lambda c: c.date()[0], reverse=True) |
1896 else: |
1893 else: |
1897 raise error.ParseError(_("unknown sort key %r") % k) |
1894 raise error.ParseError(_("unknown sort key %r") % k) |
1898 e.append(r) |
1895 return baseset([c.rev() for c in ctxs]) |
1899 l.append(e) |
|
1900 l.sort() |
|
1901 return baseset([e[-1] for e in l]) |
|
1902 |
1896 |
1903 @predicate('subrepo([pattern])') |
1897 @predicate('subrepo([pattern])') |
1904 def subrepo(repo, subset, x): |
1898 def subrepo(repo, subset, x): |
1905 """Changesets that add, modify or remove the given subrepo. If no subrepo |
1899 """Changesets that add, modify or remove the given subrepo. If no subrepo |
1906 pattern is named, any subrepo changes are returned. |
1900 pattern is named, any subrepo changes are returned. |