# HG changeset patch # User Gregory Szorc # Date 1466907140 25200 # Node ID 526b027b0130b595ae84644d43a5d72660677389 # Parent 30789efb1e5ead5f357fd079f04664295a42860d scmutil: improve documentation of revset APIs I can never remember the differences between the various revset APIs. I can never remember that scmutil.revrange() is the one I want to use from user-facing commands. Add some documentation to clarify this. While we're here, the argument name for revrange() is changed to "specs" because that's what it actually is. diff -r 30789efb1e5e -r 526b027b0130 mercurial/localrepo.py --- a/mercurial/localrepo.py Sat Jun 25 13:52:46 2016 -0700 +++ b/mercurial/localrepo.py Sat Jun 25 19:12:20 2016 -0700 @@ -554,7 +554,10 @@ The revset is specified as a string ``expr`` that may contain %-formatting to escape certain types. See ``revset.formatspec``. - Return a revset.abstractsmartset, which is a list-like interface + Revset aliases from the configuration are not expanded. To expand + user aliases, consider calling ``scmutil.revrange()``. + + Returns a revset.abstractsmartset, which is a list-like interface that contains integer revisions. ''' expr = revset.formatspec(expr, *args) @@ -566,6 +569,9 @@ This is a convenience wrapper around ``revs()`` that iterates the result and is a generator of changectx instances. + + Revset aliases from the configuration are not expanded. To expand + user aliases, consider calling ``scmutil.revrange()``. ''' for r in self.revs(expr, *args): yield self[r] diff -r 30789efb1e5e -r 526b027b0130 mercurial/scmutil.py --- a/mercurial/scmutil.py Sat Jun 25 13:52:46 2016 -0700 +++ b/mercurial/scmutil.py Sat Jun 25 19:12:20 2016 -0700 @@ -808,10 +808,29 @@ return repo.lookup(first), repo.lookup(second) -def revrange(repo, revs): - """Yield revision as strings from a list of revision specifications.""" +def revrange(repo, specs): + """Execute 1 to many revsets and return the union. + + This is the preferred mechanism for executing revsets using user-specified + config options, such as revset aliases. + + The revsets specified by ``specs`` will be executed via a chained ``OR`` + expression. If ``specs`` is empty, an empty result is returned. + + ``specs`` can contain integers, in which case they are assumed to be + revision numbers. + + It is assumed the revsets are already formatted. If you have arguments + that need to be expanded in the revset, call ``revset.formatspec()`` + and pass the result as an element of ``specs``. + + Specifying a single revset is allowed. + + Returns a ``revset.abstractsmartset`` which is a list-like interface over + integer revisions. + """ allspecs = [] - for spec in revs: + for spec in specs: if isinstance(spec, int): spec = revset.formatspec('rev(%d)', spec) allspecs.append(spec)