diff --git a/hgext/mq.py b/hgext/mq.py --- a/hgext/mq.py +++ b/hgext/mq.py @@ -1116,6 +1116,10 @@ class queue(object): 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"') diff --git a/tests/test-mq-qimport.t b/tests/test-mq-qimport.t --- a/tests/test-mq-qimport.t +++ b/tests/test-mq-qimport.t @@ -247,11 +247,28 @@ qimport -e --name with --force 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 diff --git a/tests/test-mq-qnew.t b/tests/test-mq-qnew.t --- a/tests/test-mq-qnew.t +++ b/tests/test-mq-qnew.t @@ -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 @@ plain headers 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 @@ hg headers 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 @@ Test saving last-message.txt > [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 diff --git a/tests/test-qrecord.t b/tests/test-qrecord.t --- a/tests/test-qrecord.t +++ b/tests/test-qrecord.t @@ -239,6 +239,12 @@ qrecord with bad patch name, should abor $ 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