[PATCH 07 of 10 shelve-ext v4] shelve: add shelve type saving and loading

Augie Fackler raf at durin42.com
Sun Mar 26 16:36:39 EDT 2017


> On Mar 25, 2017, at 7:21 PM, Kostia Balytskyi <kobalyts at outlook.com> wrote:
> 
> On 21/03/2017 21:56, Augie Fackler wrote:
> 
>> On Sat, Mar 11, 2017 at 01:00:26PM -0800, Kostia Balytskyi wrote:
>>> # HG changeset patch
>>> # User Kostia Balytskyi <ikostia at fb.com>
>>> # Date 1489250294 28800
>>> #      Sat Mar 11 08:38:14 2017 -0800
>>> # Node ID 5179d6be9d6a33071c8a18cc48166a3f1d5ceec5
>>> # Parent  2dbff12d9b22281c8d84328704095d72b3151388
>>> shelve: add shelve type saving and loading
>>> 
>>> We need shelve type to be stored in .hg/shelvedstate in order
>>> to be able to run abort or continue action properly. If the shelve
>>> is obsbased, those actions should create markes, if it is traditional,
>>> the actions should strip commits.
>>> 
>>> diff --git a/hgext/shelve.py b/hgext/shelve.py
>>> --- a/hgext/shelve.py
>>> +++ b/hgext/shelve.py
>>> @@ -183,6 +183,8 @@ class shelvedstate(object):
>>>      _filename = 'shelvedstate'
>>>      _keep = 'keep'
>>>      _nokeep = 'nokeep'
>>> +    _obsbased = 'obsbased'
>>> +    _traditional = 'traditional'
>>> 
>>>      def __init__(self, ui, repo):
>>>          self.ui = ui
>>> @@ -204,6 +206,7 @@ class shelvedstate(object):
>>>              nodestoprune = [nodemod.bin(h) for h in fp.readline().split()]
>>>              branchtorestore = fp.readline().strip()
>>>              keep = fp.readline().strip() == cls._keep
>>> +            obsshelve = fp.readline().strip() == cls._obsbased
>> You should probably allow this line to not exist, and if it's missing
>> just presume "traditional" shelve. That way if a user gets upgraded
>> from hg 4.1 to 4.2 mid-unshelve, they won't be stuck.
> 
> I think this is what I am doing here, is it not? If it does not exist, fp.readline().strip()
> will be empty string and therefore not equal to cls._obsbased.
> Activebookmark patch comes after this one so anyone who started their unshelve
> without this series, would have neither shelve type, nor active bookmark in their state file.
> Anyone, who started their unshelve with this series will have both. I do not see
> the scenario in which someone would be stuck. Please give me an example.

My mistake, you’re right. I had a moment of dumb and forgot how readline works.

> 
>> 
>>>          except (ValueError, TypeError) as err:
>>>              raise error.CorruptedState(str(err))
>>>          finally:
>>> @@ -218,6 +221,7 @@ class shelvedstate(object):
>>>              obj.nodestoprune = nodestoprune
>>>              obj.branchtorestore = branchtorestore
>>>              obj.keep = keep
>>> +            obj.obsshelve = obsshelve
>>>          except error.RepoLookupError as err:
>>>              raise error.CorruptedState(str(err))
>>> 
>>> @@ -225,7 +229,7 @@ class shelvedstate(object):
>>> 
>>>      @classmethod
>>>      def save(cls, repo, name, originalwctx, pendingctx, nodestoprune,
>>> -             branchtorestore, keep=False):
>>> +             branchtorestore, keep=False, obsshelve=False):
>>>          fp = repo.vfs(cls._filename, 'wb')
>>>          fp.write('%i\n' % cls._version)
>>>          fp.write('%s\n' % name)
>>> @@ -237,6 +241,7 @@ class shelvedstate(object):
>>>                   ' '.join([nodemod.hex(n) for n in nodestoprune]))
>>>          fp.write('%s\n' % branchtorestore)
>>>          fp.write('%s\n' % (cls._keep if keep else cls._nokeep))
>>> +        fp.write('%s\n' % (cls._obsbased if obsshelve else cls._traditional))
>>>          fp.close()
>>> 
>>>      @classmethod
>>> _______________________________________________
>>> Mercurial-devel mailing list
>>> Mercurial-devel at mercurial-scm.org
>>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at mercurial-scm.org
>> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
> 



More information about the Mercurial-devel mailing list