# HG changeset patch # User Martin Geisler # Date 2011-03-13 15:18:46 # Node ID 33a33f19aad2c36d66c7d8ecb40732a59df7972f # Parent 29c800ee54cf573683ff4b2551e9513b5815cd8e mq: do not let qrefresh write bad patch diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -1455,9 +1455,10 @@ class queue(object): try: # might be nice to attempt to roll back strip after this - patchf.rename() n = repo.commit(message, user, ph.date, match=match, force=True) + # only write patch after a successful commit + patchf.rename() self.applied.append(statusentry(n, patchfn)) except: ctx = repo[cparents[0]] diff --git a/tests/test-mq-qrefresh.t b/tests/test-mq-qrefresh.t --- a/tests/test-mq-qrefresh.t +++ b/tests/test-mq-qrefresh.t @@ -487,3 +487,38 @@ Issue1441 with git patches: $ cd .. +Refresh with bad usernames. Mercurial used to abort on bad usernames, +but only after writing the bad name into the patch. + + $ hg init bad-usernames + $ cd bad-usernames + $ touch a + $ hg add a + $ hg qnew a + $ hg qrefresh -u 'foo + > bar' + transaction abort! + rollback completed + refresh interrupted while patch was popped! (revert --all, qpush to recover) + abort: username 'foo\nbar' contains a newline! + [255] + $ cat .hg/patches/a + # HG changeset patch + # Parent 0000000000000000000000000000000000000000 + diff --git a/a b/a + new file mode 100644 + $ hg qpush + applying a + now at: a + $ hg qrefresh -u ' ' + transaction abort! + rollback completed + refresh interrupted while patch was popped! (revert --all, qpush to recover) + abort: empty username! + [255] + $ cat .hg/patches/a + # HG changeset patch + # Parent 0000000000000000000000000000000000000000 + diff --git a/a b/a + new file mode 100644 + $ cd ..