Rev 3362: Fix incompatibility with recent Paramiko versions. (Andrew Bennetts) in file:///home/pqm/archives/thelove/bzr/%2Btrunk/
Canonical.com Patch Queue Manager
pqm at pqm.ubuntu.com
Fri Apr 11 10:14:42 BST 2008
At file:///home/pqm/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 3362
revision-id:pqm at pqm.ubuntu.com-20080411091434-wh7q1yc2k8cua4nv
parent: pqm at pqm.ubuntu.com-20080411070305-2yg29trk4rzvgb1u
parent: andrew.bennetts at canonical.com-20080410091639-6hwphp6m3c0rg44t
committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Fri 2008-04-11 10:14:34 +0100
message:
Fix incompatibility with recent Paramiko versions. (Andrew Bennetts)
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/transport/sftp.py sftp.py-20051019050329-ab48ce71b7e32dfe
bzrlib/transport/ssh.py ssh.py-20060824042150-0s9787kng6zv1nwq-1
------------------------------------------------------------
revno: 3353.1.3
revision-id:andrew.bennetts at canonical.com-20080410091639-6hwphp6m3c0rg44t
parent: andrew.bennetts at canonical.com-20080410084732-nmi86n9sb4vo1h9j
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: paramiko-1.7.2-compat
timestamp: Thu 2008-04-10 19:16:39 +1000
message:
Always adapt sockets to look like paramiko Channels before passing them to paramiko's SFTPClient.
modified:
NEWS NEWS-20050323055033-4e00b5db738777ff
bzrlib/transport/sftp.py sftp.py-20051019050329-ab48ce71b7e32dfe
bzrlib/transport/ssh.py ssh.py-20060824042150-0s9787kng6zv1nwq-1
------------------------------------------------------------
revno: 3353.1.2
revision-id:andrew.bennetts at canonical.com-20080410084732-nmi86n9sb4vo1h9j
parent: andrew.bennetts at canonical.com-20080410084123-a33oq0q3lonb10ej
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: paramiko-1.7.2-compat
timestamp: Thu 2008-04-10 18:47:32 +1000
message:
Add get_name to LoopbackSFTP. Makes the current tests pass with current paramiko.
modified:
bzrlib/transport/sftp.py sftp.py-20051019050329-ab48ce71b7e32dfe
bzrlib/transport/ssh.py ssh.py-20060824042150-0s9787kng6zv1nwq-1
------------------------------------------------------------
revno: 3353.1.1
revision-id:andrew.bennetts at canonical.com-20080410084123-a33oq0q3lonb10ej
parent: pqm at pqm.ubuntu.com-20080410073653-vq10gbuoes5o2c0q
committer: Andrew Bennetts <andrew.bennetts at canonical.com>
branch nick: paramiko-1.7.2-compat
timestamp: Thu 2008-04-10 18:41:23 +1000
message:
Stop the test suite hanging with current paramiko. (It doesn't pass yet, though.)
modified:
bzrlib/transport/sftp.py sftp.py-20051019050329-ab48ce71b7e32dfe
=== modified file 'NEWS'
--- a/NEWS 2008-04-11 07:03:05 +0000
+++ b/NEWS 2008-04-11 09:14:34 +0000
@@ -126,6 +126,9 @@
* Implement handling of basename parameter for DefaultMail. (James Westby)
+ * Incompatibility with Paramiko versions newer than 1.7.2 was fixed.
+ (Andrew Bennetts, #213425)
+
* Launchpad locations (lp: URLs) can be pulled. (Aaron Bentley, #181945)
* Merges that add files to deleted root directories complete. They
@@ -159,6 +162,9 @@
show_merge_revno methods. The latter had been deprecated since the 0.17
release. (James Westby)
+ * ``LoopbackSFTP`` is now called ``SocketAsChannelAdapter``.
+ (Andrew Bennetts)
+
* ``osutils.backup_file`` is removed. (Alexander Belchenko)
* ``Repository.get_revision_graph`` is deprecated, with no replacement
=== modified file 'bzrlib/transport/sftp.py'
--- a/bzrlib/transport/sftp.py 2007-10-24 18:19:51 +0000
+++ b/bzrlib/transport/sftp.py 2008-04-10 09:16:39 +0000
@@ -1019,10 +1019,12 @@
def close(self):
pass
- server = paramiko.SFTPServer(FakeChannel(), 'sftp', StubServer(self), StubSFTPServer,
- root=self._root, home=self._server_homedir)
+ server = paramiko.SFTPServer(
+ FakeChannel(), 'sftp', StubServer(self), StubSFTPServer,
+ root=self._root, home=self._server_homedir)
try:
- server.start_subsystem('sftp', None, sock)
+ server.start_subsystem(
+ 'sftp', None, ssh.SocketAsChannelAdapter(sock))
except socket.error, e:
if (len(e.args) > 0) and (e.args[0] == errno.EPIPE):
# it's okay for the client to disconnect abruptly
=== modified file 'bzrlib/transport/ssh.py'
--- a/bzrlib/transport/ssh.py 2008-02-08 18:36:35 +0000
+++ b/bzrlib/transport/ssh.py 2008-04-10 09:16:39 +0000
@@ -172,19 +172,34 @@
signal.signal(signal.SIGINT, signal.SIG_IGN)
-class LoopbackSFTP(object):
+class SocketAsChannelAdapter(object):
"""Simple wrapper for a socket that pretends to be a paramiko Channel."""
def __init__(self, sock):
self.__socket = sock
+ def get_name(self):
+ return "bzr SocketAsChannelAdapter"
+
def send(self, data):
return self.__socket.send(data)
def recv(self, n):
- return self.__socket.recv(n)
+ try:
+ return self.__socket.recv(n)
+ except socket.error, e:
+ if e.args[0] in (errno.EPIPE, errno.ECONNRESET, errno.ECONNABORTED,
+ errno.EBADF):
+ # Connection has closed. Paramiko expects an empty string in
+ # this case, not an exception.
+ return ''
+ raise
def recv_ready(self):
+ # TODO: jam 20051215 this function is necessary to support the
+ # pipelined() function. In reality, it probably should use
+ # poll() or select() to actually return if there is data
+ # available, otherwise we probably don't get any benefit
return True
def close(self):
@@ -237,7 +252,7 @@
sock.connect((host, port))
except socket.error, e:
self._raise_connection_error(host, port=port, orig_error=e)
- return SFTPClient(LoopbackSFTP(sock))
+ return SFTPClient(SocketAsChannelAdapter(sock))
register_ssh_vendor('loopback', LoopbackVendor())
@@ -347,7 +362,7 @@
argv = self._get_vendor_specific_argv(username, host, port,
subsystem='sftp')
sock = self._connect(argv)
- return SFTPClient(sock)
+ return SFTPClient(SocketAsChannelAdapter(sock))
except _sftp_connection_errors, e:
self._raise_connection_error(host, port=port, orig_error=e)
except (OSError, IOError), e:
@@ -601,13 +616,6 @@
def send(self, data):
return os.write(self.proc.stdin.fileno(), data)
- def recv_ready(self):
- # TODO: jam 20051215 this function is necessary to support the
- # pipelined() function. In reality, it probably should use
- # poll() or select() to actually return if there is data
- # available, otherwise we probably don't get any benefit
- return True
-
def recv(self, count):
return os.read(self.proc.stdout.fileno(), count)
More information about the bazaar-commits
mailing list