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

Augie Fackler raf at durin42.com
Mon Jun 8 09:45:44 CDT 2015


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?

> +
> +
>  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