~ubuntu-branches/debian/jessie/bzr-git/jessie

« back to all changes in this revision

Viewing changes to remote.py

  • Committer: Bazaar Package Importer
  • Author(s): Jelmer Vernooij
  • Date: 2011-06-05 14:24:08 UTC
  • mfrom: (1.1.18 upstream)
  • Revision ID: james.westby@ubuntu.com-20110605142408-a0icybzfem8vltht
Tags: 0.6.0+bzr1270-1
New upstream snapshot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
64
64
    branch_name_to_ref,
65
65
    )
66
66
 
67
 
import dulwich as git
 
67
import dulwich.client
68
68
from dulwich.errors import (
69
69
    GitProtocolError,
70
70
    )
72
72
    Pack,
73
73
    ThinPackData,
74
74
    )
 
75
from dulwich.protocol import Protocol
75
76
import os
76
77
import tempfile
77
78
import urllib
169
170
            ret = self._client
170
171
            self._client = None
171
172
            return ret
172
 
        return git.client.TCPGitClient(self._host, self._port,
 
173
        return dulwich.client.TCPGitClient(self._host, self._port,
173
174
            thin_packs=thin_packs, report_activity=self._report_activity)
174
175
 
175
176
 
 
177
class BzrGitSSHGitClient(dulwich.client.SSHGitClient):
 
178
 
 
179
    def __init__(self, *args, **kwargs):
 
180
        super(BzrGitSSHGitClient, self).__init__(*args, **kwargs)
 
181
        self._read_buffer = ""
 
182
 
 
183
    def _can_read(self):
 
184
        if self._read_buffer != "":
 
185
            return True
 
186
        self._read_buffer = self._read(1)
 
187
        return (self._read_buffer != "")
 
188
 
 
189
    def _read(self, count):
 
190
        ret = self._read_buffer[:count]
 
191
        self._read_buffer = self._read_buffer[len(ret):]
 
192
        while len(ret) < count:
 
193
            if self._io_kind == "socket":
 
194
                ret += self._io_object.recv(count - len(ret))
 
195
            else:
 
196
                ret += self._io_object[0].read(count - len(ret))
 
197
        return ret
 
198
 
 
199
    def _write(self, data):
 
200
        if self._io_kind == "socket":
 
201
            self._io_object.send(data)
 
202
        else:
 
203
            self._io_object[1].write(data)
 
204
 
 
205
    def _connect(self, cmd, path):
 
206
        from bzrlib.transport import ssh as _mod_ssh
 
207
        vendor = _mod_ssh._get_ssh_vendor()
 
208
        self._ssh_connection = vendor.connect_ssh(self.username, None,
 
209
            self.host, self.port, command=[self._get_cmd_path(cmd), path])
 
210
        self._io_kind, self._io_object = self._ssh_connection.get_sock_or_pipes()
 
211
        if self._io_kind not in ("socket", "pipes"):
 
212
            raise AssertionError(
 
213
                "Unexpected io_kind %r from %r"
 
214
                % (self._io_kind, self._ssh_connection))
 
215
        return (Protocol(self._read, self._write,
 
216
            report_activity=self._report_activity), self._can_read)
 
217
 
 
218
 
176
219
class SSHGitSmartTransport(GitSmartTransport):
177
220
 
178
221
    _scheme = 'git+ssh'
188
231
            self._client = None
189
232
            return ret
190
233
        location_config = config.LocationConfig(self.base)
191
 
        client = git.client.SSHGitClient(self._host, self._port, self._username,
 
234
        client = BzrGitSSHGitClient(self._host, self._port, self._username,
192
235
            thin_packs=thin_packs, report_activity=self._report_activity)
193
236
        # Set up alternate pack program paths
194
237
        upload_pack = location_config.get_user_option('git_upload_pack')