Skip to content
Snippets Groups Projects
Commit d8fa35c2 authored by kiilerix's avatar kiilerix
Browse files

ssh: quote remote paths (issue2983)

parent 5a773356
No related branches found
No related tags found
No related merge requests found
......@@ -18,6 +18,10 @@
if self.repo:
self.release()
def _serverquote(s):
'''quote a string for the remote shell ... which we assume is sh'''
return "'%s'" % s.replace("'", "'\\''")
class sshrepository(wireproto.wirerepository):
def __init__(self, ui, path, create=False):
self._url = path
......@@ -40,9 +44,9 @@
args = util.sshargs(sshcmd, self.host, self.user, self.port)
if create:
cmd = '%s %s "%s init %s"'
cmd = cmd % (sshcmd, args, remotecmd, self.path)
cmd = '%s %s %s' % (sshcmd, args,
util.shellquote("%s init %s" %
(_serverquote(remotecmd), _serverquote(self.path))))
ui.note(_('running %s\n') % cmd)
res = util.system(cmd)
if res != 0:
......@@ -57,7 +61,8 @@
# cleanup up previous run
self.cleanup()
cmd = '%s %s "%s -R %s serve --stdio"'
cmd = cmd % (sshcmd, args, remotecmd, self.path)
cmd = '%s %s %s' % (sshcmd, args,
util.shellquote("%s -R %s serve --stdio" %
(_serverquote(remotecmd), _serverquote(self.path))))
ui.note(_('running %s\n') % cmd)
cmd = util.quotecommand(cmd)
......@@ -63,5 +68,4 @@
cmd = util.quotecommand(cmd)
ui.note(_('running %s\n') % cmd)
self.pipeo, self.pipei, self.pipee = util.popen3(cmd)
# skip any noise generated by remote shell
......
......@@ -105,13 +105,13 @@
output of dummyssh
$ cat dummylog
Got arguments 1:user@dummy 2:hg init remote2
Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
Got arguments 1:user@dummy 2:hg -R remote2 serve --stdio
Got arguments 1:user@dummy 2:hg init remote1
Got arguments 1:user@dummy 2:hg -R remote1 serve --stdio
Got arguments 1:user@dummy 2:hg init remote1
Got arguments 1:user@dummy 2:hg init remote1
Got arguments 1:user@dummy 2:'hg' init 'remote2'
Got arguments 1:user@dummy 2:'hg' -R 'remote2' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote2' serve --stdio
Got arguments 1:user@dummy 2:'hg' init 'remote1'
Got arguments 1:user@dummy 2:'hg' -R 'remote1' serve --stdio
Got arguments 1:user@dummy 2:'hg' init 'remote1'
Got arguments 1:user@dummy 2:'hg' init 'remote1'
comparing repositories
......
......@@ -266,4 +266,12 @@
[255]
$ cd ..
Test remote paths with spaces (issue2983):
$ hg init --ssh "python $TESTDIR/dummyssh" "ssh://user@dummy/a repo"
$ hg -R 'a repo' tag tag
$ hg id --ssh "python $TESTDIR/dummyssh" "ssh://user@dummy/a repo"
3fb238f49e8c
$ cat dummylog
......@@ -269,11 +277,11 @@
$ cat dummylog
Got arguments 1:user@dummy 2:hg -R nonexistent serve --stdio
Got arguments 1:user@dummy 2:hg -R /$TESTTMP/nonexistent serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R local serve --stdio
Got arguments 1:user@dummy 2:hg -R $TESTTMP/local serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'nonexistent' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R '/$TESTTMP/nonexistent' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'local' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R '$TESTTMP/local' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
changegroup-in-remote hook: HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
......@@ -279,11 +287,11 @@
changegroup-in-remote hook: HG_NODE=a28a9d1a809cab7d4e2fde4bee738a9ede948b60 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
changegroup-in-remote hook: HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
......@@ -289,2 +297,5 @@
changegroup-in-remote hook: HG_NODE=1383141674ec756a6056f6a9097618482fe0f4a6 HG_SOURCE=serve HG_URL=remote:ssh:127.0.0.1
Got arguments 1:user@dummy 2:hg -R remote serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'remote' serve --stdio
Got arguments 1:user@dummy 2:'hg' init 'a repo'
Got arguments 1:user@dummy 2:'hg' -R 'a repo' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'a repo' serve --stdio
......@@ -98,8 +98,8 @@
no changes found
$ cat dummylog
Got arguments 1:user@dummy 2:hg -R cloned serve --stdio
Got arguments 1:user@dummy 2:hg -R sub serve --stdio
Got arguments 1:user@dummy 2:hg -R $TESTTMP/cloned serve --stdio
Got arguments 1:user@dummy 2:hg -R $TESTTMP/sub serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'cloned' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R 'sub' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R '$TESTTMP/cloned' serve --stdio
Got arguments 1:user@dummy 2:'hg' -R '$TESTTMP/sub' serve --stdio
$ rm $BINDIR/ssh
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment