mq: reject new patch name containing leading/trailing whitespace
We could create a patch of such name, but it wouldn't be processed properly
by mq as parseseries() strips leading/trailing whitespace.
The test of default message (added by b9a16ed5acec) is no longer be useful
so removed.
This issue was reported as:
https://bitbucket.org/tortoisehg/thg/issues/4693/
--- a/hgext/mq.py Fri Mar 10 16:18:43 2017 -0800
+++ b/hgext/mq.py Mon Mar 20 11:38:37 2017 +0900
@@ -1116,6 +1116,10 @@
if name in self._reserved:
raise error.Abort(_('"%s" cannot be used as the name of a patch')
% name)
+ if name != name.strip():
+ # whitespace is stripped by parseseries()
+ raise error.Abort(_('patch name cannot begin or end with '
+ 'whitespace'))
for prefix in ('.hg', '.mq'):
if name.startswith(prefix):
raise error.Abort(_('patch name cannot begin with "%s"')
--- a/tests/test-mq-qimport.t Fri Mar 10 16:18:43 2017 -0800
+++ b/tests/test-mq-qimport.t Mon Mar 20 11:38:37 2017 +0900
@@ -247,11 +247,28 @@
this-name-is-better
url.diff
+import patch of bad filename
+
+ $ touch '../ bad.diff'
+ $ hg qimport '../ bad.diff'
+ abort: patch name cannot begin or end with whitespace
+ [255]
+ $ touch '.hg/patches/ bad.diff'
+ $ hg qimport -e ' bad.diff'
+ abort: patch name cannot begin or end with whitespace
+ [255]
+
qimport with bad name, should abort before reading file
$ hg qimport non-existent-file --name .hg
abort: patch name cannot begin with ".hg"
[255]
+ $ hg qimport non-existent-file --name ' foo'
+ abort: patch name cannot begin or end with whitespace
+ [255]
+ $ hg qimport non-existent-file --name 'foo '
+ abort: patch name cannot begin or end with whitespace
+ [255]
qimport http:// patch with leading slashes in url
--- a/tests/test-mq-qnew.t Fri Mar 10 16:18:43 2017 -0800
+++ b/tests/test-mq-qnew.t Mon Mar 20 11:38:37 2017 +0900
@@ -22,6 +22,8 @@
> hg qnew 'foo#bar'
> hg qnew 'foo:bar'
> hg qnew "`echo foo; echo bar`"
+ > hg qnew ' foo'
+ > hg qnew 'foo '
>
> hg qinit -c
>
@@ -112,6 +114,8 @@
abort: '#' cannot be used in the name of a patch
abort: ':' cannot be used in the name of a patch
abort: '\n' cannot be used in the name of a patch
+ abort: patch name cannot begin or end with whitespace
+ abort: patch name cannot begin or end with whitespace
% qnew with name containing slash
abort: path ends in directory separator: foo/ (glob)
abort: "foo" already exists as a directory
@@ -180,6 +184,8 @@
abort: '#' cannot be used in the name of a patch
abort: ':' cannot be used in the name of a patch
abort: '\n' cannot be used in the name of a patch
+ abort: patch name cannot begin or end with whitespace
+ abort: patch name cannot begin or end with whitespace
% qnew with name containing slash
abort: path ends in directory separator: foo/ (glob)
abort: "foo" already exists as a directory
@@ -313,36 +319,3 @@
> [hooks]
> pretxncommit.unexpectedabort =
> EOF
-
-#if unix-permissions
-
-Test handling default message with the patch filename with tail whitespaces
-
- $ cat > $TESTTMP/editor.sh << EOF
- > echo "==== before editing"
- > cat \$1
- > echo "===="
- > echo "[mq]: patch " > \$1
- > EOF
-
- $ rm -f .hg/last-message.txt
- $ hg status
- $ HGEDITOR="sh $TESTTMP/editor.sh" hg qnew -e "patch "
- ==== before editing
-
-
- HG: Enter commit message. Lines beginning with 'HG:' are removed.
- HG: Leave message empty to use default message.
- HG: --
- HG: user: test
- HG: branch 'default'
- HG: no files changed
- ====
- $ cat ".hg/patches/patch "
- # HG changeset patch
- # Parent 0000000000000000000000000000000000000000
-
-
- $ cd ..
-
-#endif
--- a/tests/test-qrecord.t Fri Mar 10 16:18:43 2017 -0800
+++ b/tests/test-qrecord.t Mon Mar 20 11:38:37 2017 +0900
@@ -239,6 +239,12 @@
$ hg qrecord .hg
abort: patch name cannot begin with ".hg"
[255]
+ $ hg qrecord ' foo'
+ abort: patch name cannot begin or end with whitespace
+ [255]
+ $ hg qrecord 'foo '
+ abort: patch name cannot begin or end with whitespace
+ [255]
qrecord a.patch