Show More
@@ -861,6 +861,37 b' def contentdivergent(repo, subset, x):' | |||
|
861 | 861 | contentdivergent = obsmod.getrevs(repo, 'contentdivergent') |
|
862 | 862 | return subset & contentdivergent |
|
863 | 863 | |
|
864 | @predicate('expectsize(set[, size])', safe=True, takeorder=True) | |
|
865 | def expectsize(repo, subset, x, order): | |
|
866 | """Abort if the revset doesn't expect given size""" | |
|
867 | args = getargsdict(x, 'expectsize', 'set size') | |
|
868 | minsize = 0 | |
|
869 | maxsize = len(repo) + 1 | |
|
870 | err = '' | |
|
871 | if 'size' not in args or 'set' not in args: | |
|
872 | raise error.ParseError(_('invalid set of arguments')) | |
|
873 | minsize, maxsize = getintrange(args['size'], | |
|
874 | _('expectsize requires a size range' | |
|
875 | ' or a positive integer'), | |
|
876 | _('size range bounds must be integers'), | |
|
877 | minsize, maxsize) | |
|
878 | if minsize < 0 or maxsize < 0: | |
|
879 | raise error.ParseError(_('negative size')) | |
|
880 | rev = getset(repo, fullreposet(repo), args['set'], order=order) | |
|
881 | if minsize != maxsize and (len(rev) < minsize or len(rev) > maxsize): | |
|
882 | err = _('revset size mismatch.' | |
|
883 | ' expected between %d and %d, got %d') % (minsize, maxsize, | |
|
884 | len(rev)) | |
|
885 | elif minsize == maxsize and len(rev) != minsize: | |
|
886 | err = _('revset size mismatch.' | |
|
887 | ' expected %d, got %d') % (minsize, len(rev)) | |
|
888 | if err: | |
|
889 | raise error.RepoLookupError(err) | |
|
890 | if order == followorder: | |
|
891 | return subset & rev | |
|
892 | else: | |
|
893 | return rev & subset | |
|
894 | ||
|
864 | 895 | @predicate('extdata(source)', safe=False, weight=100) |
|
865 | 896 | def extdata(repo, subset, x): |
|
866 | 897 | """Changesets in the specified extdata source. (EXPERIMENTAL)""" |
@@ -2978,3 +2978,63 b' test multiline revset with errors' | |||
|
2978 | 2978 | * set: |
|
2979 | 2979 | <baseset+ [0]> |
|
2980 | 2980 | 0 |
|
2981 | ||
|
2982 | abort if the revset doesn't expect given size | |
|
2983 | $ log 'expectsize()' | |
|
2984 | hg: parse error: invalid set of arguments | |
|
2985 | [255] | |
|
2986 | $ log 'expectsize(0:2, a)' | |
|
2987 | hg: parse error: expectsize requires a size range or a positive integer | |
|
2988 | [255] | |
|
2989 | $ log 'expectsize(0:2, 3)' | |
|
2990 | 0 | |
|
2991 | 1 | |
|
2992 | 2 | |
|
2993 | ||
|
2994 | $ log 'expectsize(2:0, 3)' | |
|
2995 | 2 | |
|
2996 | 1 | |
|
2997 | 0 | |
|
2998 | $ log 'expectsize(0:1, 1)' | |
|
2999 | abort: revset size mismatch. expected 1, got 2! | |
|
3000 | [255] | |
|
3001 | $ log 'expectsize(0:4, -1)' | |
|
3002 | hg: parse error: negative size | |
|
3003 | [255] | |
|
3004 | $ log 'expectsize(0:2, 2:4)' | |
|
3005 | 0 | |
|
3006 | 1 | |
|
3007 | 2 | |
|
3008 | $ log 'expectsize(0:1, 3:5)' | |
|
3009 | abort: revset size mismatch. expected between 3 and 5, got 2! | |
|
3010 | [255] | |
|
3011 | $ log 'expectsize(0:1, -1:2)' | |
|
3012 | hg: parse error: negative size | |
|
3013 | [255] | |
|
3014 | $ log 'expectsize(0:1, 1:-2)' | |
|
3015 | hg: parse error: negative size | |
|
3016 | [255] | |
|
3017 | $ log 'expectsize(0:2, a:4)' | |
|
3018 | hg: parse error: size range bounds must be integers | |
|
3019 | [255] | |
|
3020 | $ log 'expectsize(0:2, 2:b)' | |
|
3021 | hg: parse error: size range bounds must be integers | |
|
3022 | [255] | |
|
3023 | $ log 'expectsize(0:2, 2:)' | |
|
3024 | 0 | |
|
3025 | 1 | |
|
3026 | 2 | |
|
3027 | $ log 'expectsize(0:2, :5)' | |
|
3028 | 0 | |
|
3029 | 1 | |
|
3030 | 2 | |
|
3031 | $ log 'expectsize(0:2, :)' | |
|
3032 | 0 | |
|
3033 | 1 | |
|
3034 | 2 | |
|
3035 | $ log 'expectsize(0:2, 4:)' | |
|
3036 | abort: revset size mismatch. expected between 4 and 11, got 3! | |
|
3037 | [255] | |
|
3038 | $ log 'expectsize(0:2, :2)' | |
|
3039 | abort: revset size mismatch. expected between 0 and 2, got 3! | |
|
3040 | [255] |
General Comments 0
You need to be logged in to leave comments.
Login now