mq: do not let qrefresh write bad patch stable
authorMartin Geisler <mg@lazybytes.net>
Sun, 13 Mar 2011 16:18:46 +0100
branchstable
changeset 13632 33a33f19aad2
parent 13631 29c800ee54cf
child 13635 c9ddc39c21b6
mq: do not let qrefresh write bad patch
hgext/mq.py
tests/test-mq-qrefresh.t
--- a/hgext/mq.py	Sun Mar 13 15:04:13 2011 +0100
+++ b/hgext/mq.py	Sun Mar 13 16:18:46 2011 +0100
@@ -1455,9 +1455,10 @@
 
             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]]
--- a/tests/test-mq-qrefresh.t	Sun Mar 13 15:04:13 2011 +0100
+++ b/tests/test-mq-qrefresh.t	Sun Mar 13 16:18:46 2011 +0100
@@ -487,3 +487,38 @@
 
   $ 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 ..