# HG changeset patch # User FUJIWARA Katsunori # Date 2014-03-18 16:07:41 # Node ID 1e686e55780c1e233d54c79c044c9a5c0ffa65ea # Parent 57d0c8c3b9478a0d52ad0c2c87e2d09e9e2bfd4b qfold: save manually edited commit message into ".hg/last-message.txt" Before this patch, manually edited commit message for "hg qfold -e" isn't saved into ".hg/last-message.txt" until it is saved by "localrepository.savecommitmessage()" in "localrepository.commit()". This may lose such commit message, if unexpected exception is raised. This patch saves manually edited commit message for "hg qfold -e" into ".hg/last-message.txt" just after user editing. This patch doesn't save the message specified by -m/-l options as same as other commands. This is the simplest implementation to fix on stable. Editing and saving commit message should be centralized into the framework of "localrepository.commit()" with "editor" argument in the future. This patch uses repository wrapping class for exception raising before saving commit message in "localrepository.commit()" easily and certainly, because such exception requires corner case condition. diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -2576,6 +2576,7 @@ def fold(ui, repo, *files, **opts): if opts.get('edit'): message = ui.edit(message, user or ui.username()) + repo.savecommitmessage(message) diffopts = q.patchopts(q.diffopts(), *patches) wlock = repo.wlock() diff --git a/tests/test-mq-qfold.t b/tests/test-mq-qfold.t --- a/tests/test-mq-qfold.t +++ b/tests/test-mq-qfold.t @@ -140,5 +140,41 @@ Fold regular patch into a git patch, exp b +b +Test saving last-message.txt: + + $ hg qrefresh -m "original message" + + $ cat > $TESTDIR/commitfailure.py < from mercurial import util + > def reposetup(ui, repo): + > class commitfailure(repo.__class__): + > def commit(self, *args, **kwargs): + > raise util.Abort('emulating unexpected abort') + > repo.__class__ = commitfailure + > EOF + + $ cat > .hg/hgrc < [extensions] + > commitfailure = $TESTDIR/commitfailure.py + > EOF + + $ cat > $TESTDIR/editor.sh << EOF + > echo "==== before editing" + > cat \$1 + > echo "====" + > (echo; echo "test saving last-message.txt") >> \$1 + > EOF + + $ rm -f .hg/last-message.txt + $ HGEDITOR="sh $TESTDIR/editor.sh" hg qfold -e p3 + ==== before editing + original message==== + refresh interrupted while patch was popped! (revert --all, qpush to recover) + abort: emulating unexpected abort + [255] + $ cat .hg/last-message.txt + original message + test saving last-message.txt + $ cd ..