[PATCH 3 of 3] crecord: exit edition of hunk with non-zero status does not interrupt session
Augie Fackler
raf at durin42.com
Mon Jun 8 14:50:58 UTC 2015
On Fri, Jun 05, 2015 at 02:03:33PM -0700, Laurent Charignon wrote:
> # HG changeset patch
> # User Laurent Charignon <lcharignon at fb.com>
> # Date 1433536874 25200
> # Fri Jun 05 13:41:14 2015 -0700
> # Node ID 55d45b5b1cb25d431f4771cd42e456b76c904b36
> # Parent 82711472302682face294f925835780ab9f710a8
> crecord: exit edition of hunk with non-zero status does not interrupt session
>
> Before this patch, when editing a hunk, if the editor was exiting with a non-
> zero status the crecord session would be aborted. This patch makes crecord
> handle the failure and goes back to the state before the failed edition.
> We use the new error reporting mechanism introduced in the previous patch to
> notify the user of the issue.
>
> diff --git a/mercurial/crecord.py b/mercurial/crecord.py
> --- a/mercurial/crecord.py
> +++ b/mercurial/crecord.py
> @@ -1468,9 +1468,11 @@
> f.close()
> # start the editor and wait for it to complete
> editor = self.ui.geteditor()
> - self.ui.system("%s \"%s\"" % (editor, patchfn),
> - environ={'hguser': self.ui.username()},
> - onerr=util.Abort, errprefix=_("edit failed"))
> + ret = self.ui.system("%s \"%s\"" % (editor, patchfn),
> + environ={'hguser': self.ui.username()})
> + if ret != 0:
> + self.errorstr = "Editor exited with status %d" % ret
This looks suspiciously like something that should get localized?
> + return None
> # remove comment lines
> patchfp = open(patchfn)
> ncpatchfp = cStringIO.StringIO()
> @@ -1495,6 +1497,10 @@
>
> beforeadded, beforeremoved = item.added, item.removed
> newpatches = editpatchwitheditor(self, item)
> + if newpatches is None:
> + if not test:
> + updateui(self)
> + return
> header = item.header
> editedhunkindex = header.hunks.index(item)
> hunksbefore = header.hunks[:editedhunkindex]
> diff --git a/tests/test-commit-interactive-curses.t b/tests/test-commit-interactive-curses.t
> --- a/tests/test-commit-interactive-curses.t
> +++ b/tests/test-commit-interactive-curses.t
> @@ -65,14 +65,16 @@
> a
> a
>
> -Committing only one hunk
> +Committing only one hunk while aborting edition of hunk
>
> - Untoggle all the hunks, go down to the second file
> - unfold it
> - go down to second hunk (1 for the first hunk, 1 for the first hunkline, 1 for the second hunk, 1 for the second hunklike)
> - toggle the second hunk
> +- edit the hunk and quit the editor imediately with non-zero status
> - commit
>
> + $ printf "printf 'editor ran\n'; exit 1" > editor.sh
> $ echo "x" > c
> $ cat b >> c
> $ echo "y" >> c
> @@ -86,9 +88,12 @@
> > KEY_DOWN
> > KEY_DOWN
> > TOGGLE
> + > e
> > X
> > EOF
> - $ hg commit -i -m "one hunk" -d "0 0"
> + $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit -i -m "one hunk" -d "0 0"
> + editor ran
> + $ rm editor.sh
> $ hg tip
> changeset: 2:7d10dfe755a8
> tag: tip
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list