/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 push.py

Somewhat fix dpushing to remote repos.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Push implementation that simply prints message saying push is not supported."""
18
18
 
 
19
from dulwich.client import (
 
20
    SimpleFetchGraphWalker,
 
21
    )
 
22
from dulwich.repo import (
 
23
    MissingObjectFinder,
 
24
    )
 
25
 
19
26
from bzrlib import (
20
27
    ui,
21
28
    )
32
39
from bzrlib.plugins.git.errors import (
33
40
    NoPushSupport,
34
41
    )
35
 
from bzrlib.plugins.git.mapping import (
36
 
    inventory_to_tree_and_blobs,
37
 
    revision_to_commit,
38
 
    )
39
42
from bzrlib.plugins.git.repository import (
40
43
    GitRepository,
41
44
    LocalGitRepository,
163
166
 
164
167
    def dfetch_refs(self, refs):
165
168
        revidmap = {}
166
 
        gitidmap = {}
 
169
        new_refs = {}
167
170
        for name, revid in refs.iteritems():
168
171
            newrevidmap, newgitidmap = self.dfetch(revid)
169
172
            revidmap.update(newrevidmap)
170
 
            gitidmap.update(newgitidmap)
171
 
            if revid in gitidmap:
172
 
                gitid = gitidmap[revid]
 
173
            if revid in newgitidmap:
 
174
                gitid = newgitidmap[revid]
173
175
            else:
174
176
                gitid, _ = self.mapping.revision_id_bzr_to_foreign(revid)
175
177
            self.target._git.set_ref(name, gitid)
176
 
        return revidmap, gitidmap
 
178
            new_refs[name] = gitid
 
179
        return revidmap, new_refs
177
180
 
178
181
    def dfetch(self, stop_revision=None):
179
182
        """Import the gist of the ancestry of a particular revision."""
212
215
        def get_changed_refs(refs):
213
216
            ret = {}
214
217
            for name, revid in new_refs.iteritems():
215
 
                ret[name] = object_generator._object_store._lookup_revision_sha1(revid)
 
218
                ret[name] = store._lookup_revision_sha1(revid)
216
219
            return ret
217
220
        self.source.lock_read()
218
221
        try:
219
 
            object_generator = MissingObjectsIterator(self.source, self.mapping)
 
222
            store = BazaarObjectStore(self.source, self.mapping)
220
223
            def generate_blob_contents(have, want):
221
 
                import pdb; pdb.set_trace()
222
 
            self.target.send_pack(get_changed_refs, generate_blob_contents)
 
224
                graphwalker = SimpleFetchGraphWalker(have, store.get_parents)
 
225
                objfinder = MissingObjectFinder(store, want, graphwalker)
 
226
                return store.iter_shas(iter(objfinder.next, None))
 
227
            new_refs = self.target.send_pack(get_changed_refs, generate_blob_contents)
223
228
        finally:
224
229
            self.source.unlock()
225
 
        return revidmap
 
230
        return revidmap, new_refs
226
231
 
227
232
    @staticmethod
228
233
    def is_compatible(source, target):