Patchwork [V2] shelve: allow unlimited shelved changes per name

login
register
mail settings
Submitter Jun Wu
Date June 21, 2017, 6:40 a.m.
Message ID <ec51ddbbe3afc1fe7308.1498027212@x1c>
Download mbox | patch
Permalink /patch/21581/
State Accepted
Headers show

Comments

Jun Wu - June 21, 2017, 6:40 a.m.
# HG changeset patch
# User Jun Wu <quark@fb.com>
# Date 1498027199 25200
#      Tue Jun 20 23:39:59 2017 -0700
# Node ID ec51ddbbe3afc1fe7308b921253d2e64fd249e67
# Parent  0ce2cbebd74964ffe61e79de8941461bccc9371b
# Available At https://bitbucket.org/quark-zju/hg-draft
#              hg pull https://bitbucket.org/quark-zju/hg-draft -r ec51ddbbe3af
shelve: allow unlimited shelved changes per name

Previously, there is a 100 changes limit per name (bookmark or named
branch). And the user will get "too many shelved changes named %s" when they
are trying to shelve the 101th change. I hit that error message today.

This limit was introduced by the shelve extension since the beginning.
The function generating the names was called "gennames", under
"getshelvename".

There is another "gennames" under "backupfilename":

    def backupfilename(self):
        def gennames(base):
            yield base
            base, ext = base.rsplit('.', 1)
            for i in itertools.count(1):
                yield '%s-%d.%s' % (base, i, ext)

"itertools.count" is an endless counter.

Since the other "gennames" generates unlimited number of names, and the
changeset introducing the limit (49d4919d21) does not say why the limit
is useful. It seems safe to just remove the limit.

The format "%02d" was kept intentionally so existing shelved changes won't
break.
via Mercurial-devel - June 21, 2017, 6:46 a.m.
On Tue, Jun 20, 2017 at 11:40 PM, Jun Wu <quark@fb.com> wrote:
> # HG changeset patch
> # User Jun Wu <quark@fb.com>
> # Date 1498027199 25200
> #      Tue Jun 20 23:39:59 2017 -0700
> # Node ID ec51ddbbe3afc1fe7308b921253d2e64fd249e67
> # Parent  0ce2cbebd74964ffe61e79de8941461bccc9371b
> # Available At https://bitbucket.org/quark-zju/hg-draft
> #              hg pull https://bitbucket.org/quark-zju/hg-draft -r ec51ddbbe3af
> shelve: allow unlimited shelved changes per name
>
> Previously, there is a 100 changes limit per name (bookmark or named
> branch). And the user will get "too many shelved changes named %s" when they
> are trying to shelve the 101th change. I hit that error message today.
>
> This limit was introduced by the shelve extension since the beginning.
> The function generating the names was called "gennames", under
> "getshelvename".
>
> There is another "gennames" under "backupfilename":
>
>     def backupfilename(self):
>         def gennames(base):
>             yield base
>             base, ext = base.rsplit('.', 1)
>             for i in itertools.count(1):
>                 yield '%s-%d.%s' % (base, i, ext)
>
> "itertools.count" is an endless counter.
>
> Since the other "gennames" generates unlimited number of names, and the
> changeset introducing the limit (49d4919d21) does not say why the limit
> is useful. It seems safe to just remove the limit.
>
> The format "%02d" was kept intentionally so existing shelved changes won't
> break.

Thanks! That's a great description. Queued.

>
> diff --git a/hgext/shelve.py b/hgext/shelve.py
> --- a/hgext/shelve.py
> +++ b/hgext/shelve.py
> @@ -317,5 +317,5 @@ def getshelvename(repo, parent, opts):
>      def gennames():
>          yield label
> -        for i in xrange(1, 100):
> +        for i in itertools.count(1):
>              yield '%s-%02d' % (label, i)
>      name = opts.get('name')
> @@ -344,6 +344,4 @@ def getshelvename(repo, parent, opts):
>                  name = n
>                  break
> -        else:
> -            raise error.Abort(_("too many shelved changes named '%s'") % label)
>
>      return name
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Patch

diff --git a/hgext/shelve.py b/hgext/shelve.py
--- a/hgext/shelve.py
+++ b/hgext/shelve.py
@@ -317,5 +317,5 @@  def getshelvename(repo, parent, opts):
     def gennames():
         yield label
-        for i in xrange(1, 100):
+        for i in itertools.count(1):
             yield '%s-%02d' % (label, i)
     name = opts.get('name')
@@ -344,6 +344,4 @@  def getshelvename(repo, parent, opts):
                 name = n
                 break
-        else:
-            raise error.Abort(_("too many shelved changes named '%s'") % label)
 
     return name