diff --git a/mercurial/filemerge.py b/mercurial/filemerge.py
--- a/mercurial/filemerge.py
+++ b/mercurial/filemerge.py
@@ -753,6 +753,7 @@
         if ui.promptchoice(_("was merge of '%s' successful (yn)?"
                              "$$ &Yes $$ &No") % fd, 1):
             r = 1
+            _onfilemergefailure(ui)
 
     if not r and not checked and (_toolbool(ui, tool, "checkchanged") or
                                   'changed' in
@@ -762,6 +763,7 @@
                                  "was merge successful (yn)?"
                                  "$$ &Yes $$ &No") % fd, 1):
                 r = 1
+                _onfilemergefailure(ui)
 
     if back is not None and _toolbool(ui, tool, "fixeol"):
         _matcheol(_workingpath(repo, fcd), back)
diff --git a/tests/test-merge-halt.t b/tests/test-merge-halt.t
--- a/tests/test-merge-halt.t
+++ b/tests/test-merge-halt.t
@@ -85,7 +85,6 @@
   merging b
    output file a appears unchanged
   was merge successful (yn)? n
-  merging a failed!
   merge halted after failed merge (see hg resolve)
   [1]
 
@@ -118,13 +117,16 @@
   merging a
   merging b
   was merge of 'a' successful (yn)? n
-  merging a failed!
   merge halted after failed merge (see hg resolve)
   [1]
   $ hg rebase --abort
   rebase aborted
 
 Check that a requested abort actually works
+  $ cat <<EOS >> $HGRCPATH
+  > [merge]
+  > onfailure=prompt
+  > EOS
   $ cat <<EOS | hg rebase -s 1 -d 2 --tool false --config ui.interactive=1
   > n
   > EOS
@@ -132,6 +134,7 @@
   merging a
   merging b
   merging a failed!
+  continue merge operation (yn)? n
   merge halted after failed merge (see hg resolve)
   [1]