[PATCH] repair: forbid strip from inside a transaction

Pierre-Yves David pierre-yves.david at ens-lyon.org
Wed May 27 13:13:39 CDT 2015



On 05/27/2015 08:15 AM, Augie Fackler wrote:
> On Tue, May 26, 2015 at 06:40:41PM -0700, Pierre-Yves David wrote:
>> # HG changeset patch
>> # User Pierre-Yves David <pierre-yves.david at fb.com>
>> # Date 1432441127 25200
>> #      Sat May 23 21:18:47 2015 -0700
>> # Node ID 0c71ff45e361550948fcc3cbfa03898c8ba9fd96
>> # Parent  61b3529e23778f542044d24bb1ccd5688516a7f0
>> repair: forbid strip from inside a transaction
>>
>> Striping inside a transaction will, at best, crash or , at worst, result in very
>
> Spellcheck betrayed you: stripping (as opposed to striping).
>
> (copyediting here because there's one sentence in a comment I can't parse.)
>
>> unexpected result. We explicitly forbid it early.
>>
>> diff --git a/mercurial/repair.py b/mercurial/repair.py
>> --- a/mercurial/repair.py
>> +++ b/mercurial/repair.py
>> @@ -149,10 +149,16 @@ def strip(ui, repo, nodelist, backup=Tru
>>           chgrpfile = _bundle(repo, savebases, saveheads, node, 'temp',
>>                               compress=False)
>>
>>       mfst = repo.manifest
>>
>> +    curtr = repo.currenttransaction()
>> +    if curtr is not None:
>> +        del curtr  # avoid carrying reference to transaction for nothing
>> +        msg = _('programming error: cannot strip from inside a transaction')
>> +        raise util.Abort(msg, hint=_('contact your extensions maintainer'))
>
> "contact your extension maintainer"
>
>> +
>>       tr = repo.transaction("strip")
>>       offset = len(tr.entries)
>>
>>       try:
>>           tr.startgroup()
>> diff --git a/tests/test-devel-warnings.t b/tests/test-devel-warnings.t
>> --- a/tests/test-devel-warnings.t
>> +++ b/tests/test-devel-warnings.t
>> @@ -1,11 +1,11 @@
>>
>>     $ cat << EOF > buggylocking.py
>>     > """A small extension that acquire locks in the wrong order
>>     > """
>>     >
>> -  > from mercurial import cmdutil
>> +  > from mercurial import cmdutil, repair
>>     >
>>     > cmdtable = {}
>>     > command = cmdutil.command(cmdtable)
>>     >
>>     > @command('buggylocking', [], '')
>> @@ -36,10 +36,17 @@
>>     > def nowaitlocking(ui, repo):
>>     >     lo = repo.lock()
>>     >     wl = repo.wlock(wait=False)
>>     >     wl.release()
>>     >     lo.release()
>> +  >
>> +  > @command('stripintr', [], '')
>> +  > def stripintr(ui, repo):
>> +  >     lo = repo.lock()
>> +  >     # not a warning no worth testing.
>
> Not sure what this sentence should be (the "no" doesn't make sense)

me neither, lets drop the line.

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list