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

Add basic infrastructure for dpush.

Show diffs side-by-side

added added

removed removed

Lines of Context:
40
40
from bzrlib.plugins.git.foreign import (
41
41
    versionedfiles,
42
42
    )
43
 
from bzrlib.plugins.git.mapping import default_mapping, mapping_registry, inventory_to_tree_and_blobs, revision_to_commit
 
43
from bzrlib.plugins.git.mapping import default_mapping, mapping_registry
44
44
from bzrlib.plugins.git.versionedfiles import GitTexts
45
45
 
46
46
import dulwich as git
150
150
        ancestry.reverse()
151
151
        return ancestry
152
152
 
153
 
    def import_revision_gist(self, source, revid, parent_lookup):
154
 
        """Impor the gist of another revision into this Git repository.
155
 
 
156
 
        """
157
 
        objects = []
158
 
        rev = source.get_revision(revid)
159
 
        for sha, object, path in inventory_to_tree_and_blobs(source, None, revid):
160
 
            if path == "":
161
 
                tree_sha = sha
162
 
            objects.append((object, path))
163
 
        commit = revision_to_commit(rev, tree_sha, parent_lookup)
164
 
        objects.append((commit, None))
165
 
        self._git.object_store.add_objects(objects)
166
 
        return commit.sha().hexdigest()
 
153
    def import_revision_gist(self, source, revid):
 
154
        pass
167
155
 
168
156
    def dfetch(self, source, stop_revision):
169
157
        if stop_revision is None:
170
158
            raise NotImplementedError
171
159
        revidmap = {}
172
 
        gitidmap = {}
173
160
        todo = []
174
 
        source.lock_write()
 
161
        source.lock_read()
175
162
        try:
176
163
            graph = source.get_graph()
177
 
            ancestry = [x for x in source.get_ancestry(stop_revision) if x is not None]
178
 
            for revid in graph.iter_topo_order(ancestry):
 
164
            for revid, parents in graph.iter_ancestry([stop_revision]):
179
165
                if not self.has_revision(revid):
180
166
                    todo.append(revid)
181
167
            pb = ui.ui_factory.nested_progress_bar()
182
168
            try:
183
 
                for i, revid in enumerate(todo):
 
169
                for i, revid in enumerate(reversed(todo)):
184
170
                    pb.update("pushing revisions", i, len(todo))
185
 
                    git_commit = self.import_revision_gist(source, revid, gitidmap.__getitem__)
186
 
                    gitidmap[revid] = git_commit
187
 
                    git_revid = self.get_mapping().revision_id_foreign_to_bzr(git_commit)
188
 
                    revidmap[revid] = git_revid
 
171
                    revidmap[revid] = self.import_revision_gist(source, revid)
189
172
            finally:
190
173
                pb.finished()
191
 
            source.fetch(self, revision_id=revidmap[stop_revision])
192
174
        finally:
193
175
            source.unlock()
194
176
        return revidmap
257
239
    def set_make_working_trees(self, trees):
258
240
        pass
259
241
 
260
 
    def fetch_objects(self, determine_wants, graph_walker, resolve_ext_ref, progress=None):
 
242
    def fetch_objects(self, determine_wants, graph_walker, progress=None):
261
243
        return self._git.fetch_objects(determine_wants, graph_walker, progress)
262
244
 
263
245