diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -2311,6 +2311,9 @@ def rename(ui, repo, patch, name=None, * q.applied[info[0]] = statusentry(info[1], name) q.applied_dirty = 1 + destdir = os.path.dirname(absdest) + if not os.path.isdir(destdir): + os.makedirs(destdir) util.rename(q.join(patch), absdest) r = q.qrepo() if r: diff --git a/tests/test-mq-qnew b/tests/test-mq-qnew --- a/tests/test-mq-qnew +++ b/tests/test-mq-qnew @@ -25,6 +25,12 @@ runtest() { hg qinit -c + echo '% qnew with name containing slash' + hg qnew foo/bar.patch + hg qseries + hg qpop + hg qdelete foo/bar.patch + echo '% qnew with uncommitted changes' echo a > somefile hg add somefile diff --git a/tests/test-mq-qnew.out b/tests/test-mq-qnew.out --- a/tests/test-mq-qnew.out +++ b/tests/test-mq-qnew.out @@ -8,6 +8,10 @@ abort: ".hgignore" cannot be used as the abort: ".mqfoo" cannot be used as the name of a patch abort: "foo#bar" cannot be used as the name of a patch abort: "foo:bar" cannot be used as the name of a patch +% qnew with name containing slash +foo/bar.patch +popping foo/bar.patch +patch queue now empty % qnew with uncommitted changes uncommitted.patch % qnew implies add @@ -58,6 +62,10 @@ abort: ".hgignore" cannot be used as the abort: ".mqfoo" cannot be used as the name of a patch abort: "foo#bar" cannot be used as the name of a patch abort: "foo:bar" cannot be used as the name of a patch +% qnew with name containing slash +foo/bar.patch +popping foo/bar.patch +patch queue now empty % qnew with uncommitted changes uncommitted.patch % qnew implies add diff --git a/tests/test-mq-qrename b/tests/test-mq-qrename --- a/tests/test-mq-qrename +++ b/tests/test-mq-qrename @@ -22,6 +22,9 @@ ls .hg/patches/bar hg qrename bar/renamed baz hg qseries ls .hg/patches/baz +hg qrename baz new/dir +hg qseries +ls .hg/patches/new/dir cd .. echo % test patch being renamed before committed diff --git a/tests/test-mq-qrename.out b/tests/test-mq-qrename.out --- a/tests/test-mq-qrename.out +++ b/tests/test-mq-qrename.out @@ -5,4 +5,6 @@ bar/renamed renamed baz .hg/patches/baz +new/dir +.hg/patches/new/dir % test patch being renamed before committed