D5813: revset: add expect to check the size of a set
yuja (Yuya Nishihara)
phabricator at mercurial-scm.org
Sat Feb 9 20:27:20 EST 2019
yuja added a comment.
> + at predicate('expectsize(set[, size])', safe=True, takeorder=True)
> +def expectrevsetsize(repo, subset, x, order):
> + """Abort if the revset doesn't expect given size"""
> + args = getargsdict(x, 'expect', 'set size')
> + size = args.get('size')
> + if size is not None:
> + minsize, maxsize = getintrange(size,
> + _('expectsize requires a size range'
> + ' or a positive integer'),
> + _('size range bounds must be integers'))
Maybe needs to specify the default min/max values to e.g. possible min/max
values or `None`.
> + if minsize != maxsize:
> + size = (minsize, maxsize)
> + else:
> + size = minsize
> + if size is None or 'set' not in args:
> + raise error.ParseError(_('invalid set of arguments'))
> + rev = getset(repo, fullreposet(repo), args['set'], order=order)
> + if isinstance(size, tuple):
> + if len(rev) < minsize or len(rev) > maxsize:
> + raise error.RepoLookupError(
> + _('revset size mismatch.'
> + ' expected between %d and %d, got %d') % (minsize,
> + maxsize,
> + len(rev)))
> + if isinstance(size, int):
> + if len(rev) != size:
> + raise error.RepoLookupError(
> + _('revset size mismatch.'
> + ' expected %d, got %d') % (size, len(rev)))
There's no point to duplicate these "if"s because both minsize/maxsize should
be set. We could switch the error messages by `minsize == maxsize`, but which
doesn't mean we need different `size` types depending on minsize/maxsize values.
> + # filter rev by subset. since we'll probably want to get an ordered
> + # result from expectsize(<set>), we'll have to conditionalize the
> + # filtering direction
Nit: this comment seems unnecessary since it just rephrase the code.
> + if order == followorder:
> + return subset & rev
> + else:
> + return rev & subset
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D5813
To: navaneeth.suresh, #hg-reviewers
Cc: yuja, pulkit, durin42, mjpieters, mercurial-devel
More information about the Mercurial-devel
mailing list