ssh: fix fetcher
PATCH 1/3 ssh: fix fetcher
From: Martin Jansa <[email protected]>
* set localpath in urldata_init
otherwise localpath and basename were None, when fetcher was trying to define .lock and .done paths
basepath = d.expand("${DL_DIR}/%s" % os.path.basename(self.localpath or self.basename))
* remove "host" from localpath
.done and .lock files are always using just basename, so if someone
has 2 recipes with:
SRC_URI = "ssh://foo/file.txt"
SRC_URI = "ssh://bar/file.txt"
then there will be only one file.txt.done in downloads anyway (and
only first file.txt from first server will be returned on do_fetch
--- lib/bb/fetch2/ssh.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-)
lib/bb/fetch2/ssh.py +7 -14
@@ -72,15 +72,14 @@ class SSH(FetchMethod): def supports_checksum(self, urldata): return False - def localpath(self, url, urldata, d): + def urldata_init(self, urldata, d): m = __pattern__.match(urldata.url) path = m.group('path') host = m.group('host') - lpath = os.path.join(data.getVar('DL_DIR', d, True), host, os.path.basename(path)) - return lpath + urldata.localpath = os.path.join(d.getVar('DL_DIR', True), os.path.basename(path)) def download(self, url, urldata, d): - dldir = data.getVar('DL_DIR', d, True) + dldir = d.getVar('DL_DIR', True) m = __pattern__.match(url) path = m.group('path')
@@ -89,16 +88,10 @@ class SSH(FetchMethod): user = m.group('user') password = m.group('pass') - ldir = os.path.join(dldir, host) - lpath = os.path.join(ldir, os.path.basename(path)) - - if not os.path.exists(ldir): - os.makedirs(ldir) - if port: - port = '-P %s' % port + portarg = '-P %s' % port else: - port = '' + portarg = '' if user: fr = user
@@ -112,9 +105,9 @@ class SSH(FetchMethod): import commands cmd = 'scp -B -r %s %s %s/' % ( - port, + portarg, commands.mkarg(fr), - commands.mkarg(ldir) + commands.mkarg(dldir) ) bb.fetch2.check_network_access(d, cmd, urldata.url)
Signature · 1 line
1.8.1.2
PATCH 2/3 ssh.py: throw ParameterError when someone tries ssh://foo; protocol=git
From: Martin Jansa <[email protected]>
* taken from SFTP fetcher:
http://patchwork.openembedded.org/patch/43027/
--- lib/bb/fetch2/ssh.py | 5 +++++ 1 file changed, 5 insertions(+)
lib/bb/fetch2/ssh.py +5 -0
@@ -73,6 +73,11 @@ class SSH(FetchMethod): return False def urldata_init(self, urldata, d): + if 'protocol' in urldata.parm and urldata.parm['protocol'] == 'git': + raise bb.fetch2.ParameterError( + "Invalid protocol - if you wish to fetch from a git " + + "repository using ssh, you need to use " + + "git:// prefix with protocol=ssh", urldata.url) m = __pattern__.match(urldata.url) path = m.group('path') host = m.group('host')
Signature · 1 line
1.8.1.2
PATCH 3/3 ssh.py: add example SRC_URI
In reply to Martin JansaFrom: Martin Jansa <[email protected]>
--- lib/bb/fetch2/ssh.py | 6 ++++++ 1 file changed, 6 insertions(+)
lib/bb/fetch2/ssh.py +6 -0
@@ -10,6 +10,12 @@ IETF secsh internet draft: Currently does not support the sftp parameters, as this uses scp Also does not support the 'fingerprint' connection parameter. + Please note that '/' is used as host, path separator not ':' as you may + be used to, also '~' can be used to specify user HOME, but again after '/' + + Example SRC_URI: + SRC_URI = "ssh://[email protected]/dir/path/file.txt" + SRC_URI = "ssh://[email protected]/~/file.txt" ''' # Copyright (C) 2006 OpenedHand Ltd.
Signature · 1 line
1.8.1.2