/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to remote.py

Fix branch cloning.

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
 
26
26
from bzrlib.plugins.git import git
27
27
from bzrlib.plugins.git.branch import GitBranch
 
28
from bzrlib.plugins.git.errors import NoSuchRef
28
29
from bzrlib.plugins.git.dir import GitDir
29
30
from bzrlib.plugins.git.foreign import ForeignBranch
30
31
from bzrlib.plugins.git.repository import GitFormat, GitRepository
31
32
 
 
33
import os
 
34
import tempfile
32
35
import urllib
33
36
import urlparse
34
37
 
35
 
from dulwich.pack import PackData
 
38
from dulwich.pack import PackData, Pack
36
39
 
37
40
 
38
41
class GitSmartTransport(Transport):
43
46
        assert scheme == "git"
44
47
        hostport, self._path = urllib.splithost(loc)
45
48
        (self._host, self._port) = urllib.splitnport(hostport, git.protocol.TCP_GIT_PORT)
46
 
        if _client is not None:
47
 
            self._client = _client
48
 
        else:
49
 
            self._client = git.client.TCPGitClient(self._host, self._port)
 
49
        self._client = _client
 
50
 
 
51
    def _get_client(self):
 
52
        if self._client is not None:
 
53
            ret = self._client
 
54
            self._client = None
 
55
            return ret
 
56
        return git.client.TCPGitClient(self._host, self._port)
50
57
 
51
58
    def fetch_pack(self, determine_wants, graph_walker, pack_data, progress=None):
52
59
        if progress is None:
53
60
            def progress(text):
54
61
                info("git: %s" % text)
55
 
        self._client.fetch_pack(self._path, determine_wants, graph_walker, 
56
 
                pack_data, progress)
57
 
 
58
 
    def fetch_objects(self, determine_wants, graph_walker, progress=None):
59
 
        fd, path = tempfile.mkstemp(dir=self.pack_dir(), suffix=".pack")
60
 
        self.fetch_pack(determine_wants, graph_walker, lambda x: os.write(fd, x), progress)
61
 
        os.close(fd)
62
 
        try:
63
 
            p = PackData(path)
64
 
            for o in p.iterobjects():
65
 
                yield o
66
 
        finally:
67
 
            os.remove(path)
 
62
        self._get_client().fetch_pack(self._path, determine_wants, 
 
63
            graph_walker, pack_data, progress)
68
64
 
69
65
    def get(self, path):
70
66
        raise NoSuchFile(path)
71
67
 
 
68
    def abspath(self, relpath):
 
69
        return urlutils.join(self.base, relpath)
 
70
 
72
71
    def clone(self, offset=None):
73
72
        """See Transport.clone()."""
74
73
        if offset is None:
109
108
        self._transport.fetch_pack(determine_wants, graph_walker, pack_data, 
110
109
            progress)
111
110
 
 
111
    def fetch_objects(self, determine_wants, graph_walker, progress=None):
 
112
        fd, path = tempfile.mkstemp(suffix=".pack")
 
113
        self.fetch_pack(determine_wants, graph_walker, lambda x: os.write(fd, x), progress)
 
114
        os.close(fd)
 
115
        try:
 
116
            basename = path[:-len(".pack")]
 
117
            p = PackData(path)
 
118
            p.create_index_v2(basename+".idx")
 
119
            for o in Pack(basename).iterobjects():
 
120
                yield o
 
121
        finally:
 
122
            os.remove(path)
 
123
 
112
124
 
113
125
class RemoteGitBranch(GitBranch):
114
126
 
115
127
    def __init__(self, bzrdir, repository, name, lockfiles):
116
128
        def determine_wants(heads):
 
129
            if not name in heads:
 
130
                raise NoSuchRef(name)
117
131
            self._ref = heads[name]
118
132
        bzrdir.root_transport.fetch_pack(determine_wants, None, lambda x: None, 
119
133
                             lambda x: mutter("git: %s" % x))
122
136
    def last_revision(self):
123
137
        return self.mapping.revision_id_foreign_to_bzr(self._ref)
124
138
 
 
139
    def _synchronize_history(self, destination, revision_id):
 
140
        """See Branch._synchronize_history()."""
 
141
        destination.generate_revision_history(self.last_revision())
 
142