[PATCH 2 of 2 V2] stack: add indexedrevs property to contain a list of stack revs and its base

Yuya Nishihara yuya at tcha.org
Thu Sep 26 19:13:43 EDT 2019


On Wed, 25 Sep 2019 17:58:46 +0800, Anton Shestakov wrote:
> # HG changeset patch
> # User Anton Shestakov <av6 at dwimlabs.net>
> # Date 1569139071 -25200
> #      Sun Sep 22 14:57:51 2019 +0700
> # Node ID b85dea9c83a01ae6c6045b7dc5e4aa10dfbec8c7
> # Parent  2c9d35029c27f3d0e63afc8f618268f079f337c3
> # EXP-Topic stack-object
> stack: add indexedrevs property to contain a list of stack revs and its base
> 
> Sometimes we need to access a specific stack revision by its index, but
> stack.revs doesn't support indexing. Obviously we can just do list(st.revs),
> but it's more convenient to have a property specifically for this task.
> 
> indexedrevs also contains stack base at index 0, so actual stack revisions
> start from index 1.
> 
> diff --git a/mercurial/stack.py b/mercurial/stack.py
> --- a/mercurial/stack.py
> +++ b/mercurial/stack.py
> @@ -31,3 +31,11 @@ class stack(object):
>          return bool(self.revs)
>  
>      __bool__ = __nonzero__
> +
> +    @property
> +    def indexedrevs(self):
> +        if self.revs:
> +            base = self._repo[self.revs.first()].p1()
> +        else:
> +            base = self._repo['.']
> +        return [base.rev()] + list(self.revs)

It might be nit-picky, but I feel making this a plain function is better
than pretending a property. If it looked like a property, I would write
for i in ...: stack.indexedrevs[i], which is expensive.


More information about the Mercurial-devel mailing list