/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

Try to import nothing other than __init__ when not opening git repositories.

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
import urlparse
39
39
 
40
40
import dulwich as git
41
 
from dulwich.pack import PackData, Pack, PackIndex
 
41
from dulwich.pack import PackData, Pack
42
42
 
43
43
# Don't run any tests on GitSmartTransport as it is not intended to be 
44
44
# a full implementation of Transport
61
61
            ret = self._client
62
62
            self._client = None
63
63
            return ret
64
 
        return git.client.TCPGitClient(self._host, self._port, 
65
 
            capabilities=["multi_ack", "side-band-64k", "ofs-delta", "side-band"])
 
64
        return git.client.TCPGitClient(self._host, self._port)
66
65
 
67
66
    def fetch_pack(self, determine_wants, graph_walker, pack_data, progress=None):
68
67
        if progress is None:
107
106
        raise NotLocalUrl(self.transport.base)
108
107
 
109
108
 
110
 
class EmptyObjectStoreIterator(dict):
111
 
 
112
 
    def iterobjects(self):
113
 
        return []
114
 
 
115
 
 
116
 
class TemporaryPackIterator(Pack):
117
 
 
118
 
    def __init__(self, path, resolve_ext_ref):
119
 
        self.resolve_ext_ref = resolve_ext_ref
120
 
        super(TemporaryPackIterator, self).__init__(path)
121
 
 
122
 
    @property
123
 
    def idx(self):
124
 
        if self._idx is None:
125
 
            self._data.create_index_v2(self._idx_path, self.resolve_ext_ref)
126
 
            self._idx = PackIndex(self._idx_path)
127
 
        return self._idx
128
 
 
129
 
    def __del__(self):
130
 
        os.remove(self._data_path)
131
 
        os.remove(self._idx_path)
132
 
 
133
 
 
134
109
class RemoteGitRepository(GitRepository):
135
110
 
136
111
    def __init__(self, gitdir, lockfiles):
141
116
        self._transport.fetch_pack(determine_wants, graph_walker, pack_data, 
142
117
            progress)
143
118
 
144
 
    def fetch_objects(self, determine_wants, graph_walker, resolve_ext_ref, progress=None):
 
119
    def fetch_objects(self, determine_wants, graph_walker, progress=None):
145
120
        fd, path = tempfile.mkstemp(suffix=".pack")
146
121
        self.fetch_pack(determine_wants, graph_walker, lambda x: os.write(fd, x), progress)
147
122
        os.close(fd)
148
 
        if os.path.getsize(path) == 0:
149
 
            return EmptyObjectStoreIterator()
150
 
        return TemporaryPackIterator(path[:-len(".pack")], resolve_ext_ref)
 
123
        basename = path[:-len(".pack")]
 
124
        p = PackData(path)
 
125
        p.create_index_v2(basename+".idx")
 
126
        pack = Pack(basename)
 
127
        os.remove(path)
 
128
        return (len(p), pack.iterobjects())
151
129
 
152
130
 
153
131
class RemoteGitBranch(GitBranch):