[PATCH V2] record: exiting editor with non zero status should not stop recording session

Laurent Charignon lcharignon at fb.com
Fri Jun 12 15:38:18 CDT 2015



> On Jun 8, 2015, at 7:45 AM, Augie Fackler <raf at durin42.com> wrote:
> 
> On Fri, Jun 05, 2015 at 04:20:28PM -0700, Laurent Charignon wrote:
>> # HG changeset patch
>> # User Laurent Charignon <lcharignon at fb.com>
>> # Date 1433536278 25200
>> #      Fri Jun 05 13:31:18 2015 -0700
>> # Node ID 08bb462f727b88812a46570b80c3a467c1ea23e9
>> # Parent  c39640d26a4c7546faef00b9e5c02af45ab8bf5e
>> record: exiting editor with non zero status should not stop recording session
> 
> queued, thanks
> 
> I've got one note below that might be worth doing in a followup -
> maybe ask other facebook folks how they feel about it?
> 
>> 
>> Before this patch, exiting a hunk edition in record with a non-zero status lead
>> to the end of the recording session losing previously selected hunks to record.
>> This patch introduces the more desirable behavior of warning the user and
>> continuing the recording session.
>> 
>> diff --git a/mercurial/patch.py b/mercurial/patch.py
>> --- a/mercurial/patch.py
>> +++ b/mercurial/patch.py
>> @@ -1023,9 +1023,11 @@
>>                     f.close()
>>                     # Start the editor and wait for it to complete
>>                     editor = ui.geteditor()
>> -                    ui.system("%s \"%s\"" % (editor, patchfn),
>> -                              environ={'HGUSER': ui.username()},
>> -                              onerr=util.Abort, errprefix=_("edit failed"))
>> +                    ret = ui.system("%s \"%s\"" % (editor, patchfn),
>> +                                    environ={'HGUSER': ui.username()})
>> +                    if ret != 0:
>> +                        ui.warn(_("editor exited with exit code %d\n") % ret)
>> +                        continue
>>                     # Remove comment lines
>>                     patchfp = open(patchfn)
>>                     ncpatchfp = cStringIO.StringIO()
>> diff --git a/tests/test-commit-interactive.t b/tests/test-commit-interactive.t
>> --- a/tests/test-commit-interactive.t
>> +++ b/tests/test-commit-interactive.t
>> @@ -1291,6 +1291,33 @@
>>   abort: error parsing patch: unhandled transition: range -> range
>>   [255]
>> 
>> +Exiting editor with status 1, ignores the edit but does not stop the recording
>> +session
>> +
>> +  $ HGEDITOR=false hg commit -i <<EOF
>> +  > y
>> +  > e
>> +  > n
>> +  > EOF
>> +  diff --git a/editedfile b/editedfile
>> +  1 hunks, 3 lines changed
>> +  examine changes to 'editedfile'? [Ynesfdaq?] y
>> +
>> +  @@ -1,3 +1,3 @@
>> +  -This is the first line
>> +  -This change will be committed
>> +  -This is the third line
>> +  +This change will not be committed
>> +  +This is the second line
>> +  +This line has been added
>> +  record this change to 'editedfile'? [Ynesfdaq?] e
>> +
>> +  editor exited with exit code 1
>> +  record this change to 'editedfile'? [Ynesfdaq?] n
>> +
>> +  no changes to record
> 
> it occurs to me that the editor might leave a bunch of spew on the
> terminal and we should redisplay the diff?

That's a great idea, I will put that in my queue
> 
>> +
>> +
>> random text in random positions is still an error
>> 
>>   $ cat > editor.sh << '__EOF__'
>> _______________________________________________
>> Mercurial-devel mailing list
>> Mercurial-devel at selenic.com
>> https://selenic.com/mailman/listinfo/mercurial-devel



More information about the Mercurial-devel mailing list