213 return stringset(repo, subset, x) |
213 return stringset(repo, subset, x) |
214 |
214 |
215 def rangeset(repo, subset, x, y): |
215 def rangeset(repo, subset, x, y): |
216 m = getset(repo, subset, x) |
216 m = getset(repo, subset, x) |
217 if not m: |
217 if not m: |
218 m = getset(repo, range(len(repo)), x) |
218 m = getset(repo, list(repo), x) |
219 |
219 |
220 n = getset(repo, subset, y) |
220 n = getset(repo, subset, y) |
221 if not n: |
221 if not n: |
222 n = getset(repo, range(len(repo)), y) |
222 n = getset(repo, list(repo), y) |
223 |
223 |
224 if not m or not n: |
224 if not m or not n: |
225 return [] |
225 return [] |
226 m, n = m[0], n[-1] |
226 m, n = m[0], n[-1] |
227 |
227 |
232 s = set(subset) |
232 s = set(subset) |
233 return [x for x in r if x in s] |
233 return [x for x in r if x in s] |
234 |
234 |
235 def dagrange(repo, subset, x, y): |
235 def dagrange(repo, subset, x, y): |
236 if subset: |
236 if subset: |
237 r = range(len(repo)) |
237 r = list(repo) |
238 xs = _revsbetween(repo, getset(repo, r, x), getset(repo, r, y)) |
238 xs = _revsbetween(repo, getset(repo, r, x), getset(repo, r, y)) |
239 s = set(subset) |
239 s = set(subset) |
240 return [r for r in xs if r in s] |
240 return [r for r in xs if r in s] |
241 return [] |
241 return [] |
242 |
242 |
275 """``ancestor(single, single)`` |
275 """``ancestor(single, single)`` |
276 Greatest common ancestor of the two changesets. |
276 Greatest common ancestor of the two changesets. |
277 """ |
277 """ |
278 # i18n: "ancestor" is a keyword |
278 # i18n: "ancestor" is a keyword |
279 l = getargs(x, 2, 2, _("ancestor requires two arguments")) |
279 l = getargs(x, 2, 2, _("ancestor requires two arguments")) |
280 r = range(len(repo)) |
280 r = list(repo) |
281 a = getset(repo, r, l[0]) |
281 a = getset(repo, r, l[0]) |
282 b = getset(repo, r, l[1]) |
282 b = getset(repo, r, l[1]) |
283 if len(a) != 1 or len(b) != 1: |
283 if len(a) != 1 or len(b) != 1: |
284 # i18n: "ancestor" is a keyword |
284 # i18n: "ancestor" is a keyword |
285 raise error.ParseError(_("ancestor arguments must be single revisions")) |
285 raise error.ParseError(_("ancestor arguments must be single revisions")) |
286 an = [repo[a[0]].ancestor(repo[b[0]]).rev()] |
286 an = [repo[a[0]].ancestor(repo[b[0]]).rev()] |
287 |
287 |
288 return [r for r in an if r in subset] |
288 return [r for r in an if r in subset] |
289 |
289 |
290 def _ancestors(repo, subset, x, followfirst=False): |
290 def _ancestors(repo, subset, x, followfirst=False): |
291 args = getset(repo, range(len(repo)), x) |
291 args = getset(repo, list(repo), x) |
292 if not args: |
292 if not args: |
293 return [] |
293 return [] |
294 s = set(_revancestors(repo, args, followfirst)) | set(args) |
294 s = set(_revancestors(repo, args, followfirst)) | set(args) |
295 return [r for r in subset if r in s] |
295 return [r for r in subset if r in s] |
296 |
296 |
413 if pattern in repo.branchmap(): |
413 if pattern in repo.branchmap(): |
414 return [r for r in subset if matcher(repo[r].branch())] |
414 return [r for r in subset if matcher(repo[r].branch())] |
415 else: |
415 else: |
416 return [r for r in subset if matcher(repo[r].branch())] |
416 return [r for r in subset if matcher(repo[r].branch())] |
417 |
417 |
418 s = getset(repo, range(len(repo)), x) |
418 s = getset(repo, list(repo), x) |
419 b = set() |
419 b = set() |
420 for r in s: |
420 for r in s: |
421 b.add(repo[r].branch()) |
421 b.add(repo[r].branch()) |
422 s = set(s) |
422 s = set(s) |
423 return [r for r in subset if r in s or repo[r].branch() in b] |
423 return [r for r in subset if r in s or repo[r].branch() in b] |
464 |
464 |
465 def children(repo, subset, x): |
465 def children(repo, subset, x): |
466 """``children(set)`` |
466 """``children(set)`` |
467 Child changesets of changesets in set. |
467 Child changesets of changesets in set. |
468 """ |
468 """ |
469 s = set(getset(repo, range(len(repo)), x)) |
469 s = set(getset(repo, list(repo), x)) |
470 cs = _children(repo, subset, s) |
470 cs = _children(repo, subset, s) |
471 return [r for r in subset if r in cs] |
471 return [r for r in subset if r in cs] |
472 |
472 |
473 def closed(repo, subset, x): |
473 def closed(repo, subset, x): |
474 """``closed()`` |
474 """``closed()`` |
545 if ds in encoding.lower(c.description()): |
545 if ds in encoding.lower(c.description()): |
546 l.append(r) |
546 l.append(r) |
547 return l |
547 return l |
548 |
548 |
549 def _descendants(repo, subset, x, followfirst=False): |
549 def _descendants(repo, subset, x, followfirst=False): |
550 args = getset(repo, range(len(repo)), x) |
550 args = getset(repo, list(repo), x) |
551 if not args: |
551 if not args: |
552 return [] |
552 return [] |
553 s = set(_revdescendants(repo, args, followfirst)) | set(args) |
553 s = set(_revdescendants(repo, args, followfirst)) | set(args) |
554 return [r for r in subset if r in s] |
554 return [r for r in subset if r in s] |
555 |
555 |
569 Changesets that were created by a graft, transplant or rebase operation, |
569 Changesets that were created by a graft, transplant or rebase operation, |
570 with the given revisions specified as the source. Omitting the optional set |
570 with the given revisions specified as the source. Omitting the optional set |
571 is the same as passing all(). |
571 is the same as passing all(). |
572 """ |
572 """ |
573 if x is not None: |
573 if x is not None: |
574 args = set(getset(repo, range(len(repo)), x)) |
574 args = set(getset(repo, list(repo), x)) |
575 else: |
575 else: |
576 args = set(getall(repo, range(len(repo)), x)) |
576 args = set(getall(repo, list(repo), x)) |
577 |
577 |
578 dests = set() |
578 dests = set() |
579 |
579 |
580 # subset contains all of the possible destinations that can be returned, so |
580 # subset contains all of the possible destinations that can be returned, so |
581 # iterate over them and see if their source(s) were provided in the args. |
581 # iterate over them and see if their source(s) were provided in the args. |
875 lim = int(getstring(l[1], _("limit requires a number"))) |
875 lim = int(getstring(l[1], _("limit requires a number"))) |
876 except (TypeError, ValueError): |
876 except (TypeError, ValueError): |
877 # i18n: "limit" is a keyword |
877 # i18n: "limit" is a keyword |
878 raise error.ParseError(_("limit expects a number")) |
878 raise error.ParseError(_("limit expects a number")) |
879 ss = set(subset) |
879 ss = set(subset) |
880 os = getset(repo, range(len(repo)), l[0])[:lim] |
880 os = getset(repo, list(repo), l[0])[:lim] |
881 return [r for r in os if r in ss] |
881 return [r for r in os if r in ss] |
882 |
882 |
883 def last(repo, subset, x): |
883 def last(repo, subset, x): |
884 """``last(set, [n])`` |
884 """``last(set, [n])`` |
885 Last n members of set, defaulting to 1. |
885 Last n members of set, defaulting to 1. |
893 lim = int(getstring(l[1], _("last requires a number"))) |
893 lim = int(getstring(l[1], _("last requires a number"))) |
894 except (TypeError, ValueError): |
894 except (TypeError, ValueError): |
895 # i18n: "last" is a keyword |
895 # i18n: "last" is a keyword |
896 raise error.ParseError(_("last expects a number")) |
896 raise error.ParseError(_("last expects a number")) |
897 ss = set(subset) |
897 ss = set(subset) |
898 os = getset(repo, range(len(repo)), l[0])[-lim:] |
898 os = getset(repo, list(repo), l[0])[-lim:] |
899 return [r for r in os if r in ss] |
899 return [r for r in os if r in ss] |
900 |
900 |
901 def maxrev(repo, subset, x): |
901 def maxrev(repo, subset, x): |
902 """``max(set)`` |
902 """``max(set)`` |
903 Changeset with highest revision number in set. |
903 Changeset with highest revision number in set. |
904 """ |
904 """ |
905 os = getset(repo, range(len(repo)), x) |
905 os = getset(repo, list(repo), x) |
906 if os: |
906 if os: |
907 m = max(os) |
907 m = max(os) |
908 if m in subset: |
908 if m in subset: |
909 return [m] |
909 return [m] |
910 return [] |
910 return [] |
970 same as passing all(). If a changeset created by these operations is itself |
970 same as passing all(). If a changeset created by these operations is itself |
971 specified as a source for one of these operations, only the source changeset |
971 specified as a source for one of these operations, only the source changeset |
972 for the first operation is selected. |
972 for the first operation is selected. |
973 """ |
973 """ |
974 if x is not None: |
974 if x is not None: |
975 args = set(getset(repo, range(len(repo)), x)) |
975 args = set(getset(repo, list(repo), x)) |
976 else: |
976 else: |
977 args = set(getall(repo, range(len(repo)), x)) |
977 args = set(getall(repo, list(repo), x)) |
978 |
978 |
979 def _firstsrc(rev): |
979 def _firstsrc(rev): |
980 src = _getrevsource(repo, rev) |
980 src = _getrevsource(repo, rev) |
981 if src is None: |
981 if src is None: |
982 return None |
982 return None |
1022 p = repo[x].p1().rev() |
1022 p = repo[x].p1().rev() |
1023 return [r for r in subset if r == p] |
1023 return [r for r in subset if r == p] |
1024 |
1024 |
1025 ps = set() |
1025 ps = set() |
1026 cl = repo.changelog |
1026 cl = repo.changelog |
1027 for r in getset(repo, range(len(repo)), x): |
1027 for r in getset(repo, list(repo), x): |
1028 ps.add(cl.parentrevs(r)[0]) |
1028 ps.add(cl.parentrevs(r)[0]) |
1029 return [r for r in subset if r in ps] |
1029 return [r for r in subset if r in ps] |
1030 |
1030 |
1031 def p2(repo, subset, x): |
1031 def p2(repo, subset, x): |
1032 """``p2([set])`` |
1032 """``p2([set])`` |
1040 except IndexError: |
1040 except IndexError: |
1041 return [] |
1041 return [] |
1042 |
1042 |
1043 ps = set() |
1043 ps = set() |
1044 cl = repo.changelog |
1044 cl = repo.changelog |
1045 for r in getset(repo, range(len(repo)), x): |
1045 for r in getset(repo, list(repo), x): |
1046 ps.add(cl.parentrevs(r)[1]) |
1046 ps.add(cl.parentrevs(r)[1]) |
1047 return [r for r in subset if r in ps] |
1047 return [r for r in subset if r in ps] |
1048 |
1048 |
1049 def parents(repo, subset, x): |
1049 def parents(repo, subset, x): |
1050 """``parents([set])`` |
1050 """``parents([set])`` |
1054 ps = tuple(p.rev() for p in repo[x].parents()) |
1054 ps = tuple(p.rev() for p in repo[x].parents()) |
1055 return [r for r in subset if r in ps] |
1055 return [r for r in subset if r in ps] |
1056 |
1056 |
1057 ps = set() |
1057 ps = set() |
1058 cl = repo.changelog |
1058 cl = repo.changelog |
1059 for r in getset(repo, range(len(repo)), x): |
1059 for r in getset(repo, list(repo), x): |
1060 ps.update(cl.parentrevs(r)) |
1060 ps.update(cl.parentrevs(r)) |
1061 return [r for r in subset if r in ps] |
1061 return [r for r in subset if r in ps] |
1062 |
1062 |
1063 def parentspec(repo, subset, x, n): |
1063 def parentspec(repo, subset, x, n): |
1064 """``set^0`` |
1064 """``set^0`` |