[PATCH 3 of 3 V2] rebase: handle revtodo as a special value when storing/restoring state

Pierre-Yves David pierre-yves.david at ens-lyon.org
Thu Dec 4 18:44:20 CST 2014



On 12/04/2014 08:06 AM, Mads Kiilerich wrote:
> On 12/04/2014 04:29 PM, Pierre-Yves David wrote:
>> # HG changeset patch
>> # User Pierre-Yves David <pierre-yves.david at fb.com>
>> # Date 1417551792 28800
>> #      Tue Dec 02 12:23:12 2014 -0800
>> # Node ID e3b289dd518b326d927f1ec6b61f025a6c74c12a
>> # Parent  f1632814e8d3733acec372dcc17620ab0a8617bf
>> rebase: handle revtodo as a special value when storing/restoring state
>>
>> Revtodo happens to share its value with nullrev but this is an
>> implementation
>> details. So we move away from it.
>>
>> After this changeset one can successfully change the values for all
>> the constant
>> and have the test passing. But doing so would require more refactoring
>> if we
>> want to avoid breaking backward compatibility on the state file.
>>
>> diff --git a/hgext/rebase.py b/hgext/rebase.py
>> --- a/hgext/rebase.py
>> +++ b/hgext/rebase.py
>> @@ -16,11 +16,11 @@ http://mercurial.selenic.com/wiki/Rebase
>>   from mercurial import hg, util, repair, merge, cmdutil, commands,
>> bookmarks
>>   from mercurial import extensions, patch, scmutil, phases, obsolete,
>> error
>>   from mercurial import copies
>>   from mercurial.commands import templateopts
>> -from mercurial.node import nullrev
>> +from mercurial.node import nullrev, nullid, hex
>>   from mercurial.lock import release
>>   from mercurial.i18n import _
>>   import os, errno
>>   revtodo = -1
>> @@ -728,12 +728,16 @@ def storestatus(repo, originalwd, target
>>       f.write('%d\n' % int(keep))
>>       f.write('%d\n' % int(keepbranches))
>>       f.write('%s\n' % (activebookmark or ''))
>>       for d, v in state.iteritems():
>>           oldrev = repo[d].hex()
>> -        if v > nullmerge:
>> +        if v >= 0:
>>               newrev = repo[v].hex()
>> +        elif v == revtodo:
>> +            # To maintain format compatibility, we have to use nullid.
>> +            # Please do remove this special case when upgrading the
>> format.
>> +            newrev = hex(nullid)
>>           else:
>>               newrev = v
>>           f.write("%s:%s\n" % (oldrev, newrev))
>>       f.close()
>>       repo.ui.debug('rebase status stored\n')
>> @@ -771,10 +775,13 @@ def restorestatus(repo):
>>                   activebookmark = l
>>               else:
>>                   oldrev, newrev = l.split(':')
>>                   if newrev in (str(nullmerge), str(revignored)):
>>                       state[repo[oldrev].rev()] = int(newrev)
>> +                elif newrev == nullid:
>
> I guess that should be newrev == hex(nullid)?

Indeed. I think I need a "no uncommitted change before patchbomb" check :-/.
(Note that is keeps working because revtodo is still -1, so the 
'repo[hex(nullid)].rev()' call eventually return -1)

I can send a V3 is reviewer request do not want to fix this inflight.

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list