/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

Simplify push a bit further, make dpush without rebase faster.

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
 
48
48
    """
49
49
 
50
 
    def __init__(self, source, mapping, pb=None):
 
50
    def __init__(self, store, source, pb=None):
51
51
        """Create a new missing objects iterator.
52
52
 
53
53
        """
54
54
        self.source = source
55
 
        self._object_store = BazaarObjectStore(self.source, mapping)
 
55
        self._object_store = store
56
56
        self._revids = set()
57
57
        self._sent_shas = set()
58
58
        self._pending = []
126
126
    def __init__(self, source, target):
127
127
        super(InterToGitRepository, self).__init__(source, target)
128
128
        self.mapping = self.target.get_mapping()
 
129
        self.source_store = BazaarObjectStore(self.source, self.mapping)
129
130
 
130
131
    @staticmethod
131
132
    def _get_repo_format_to_test():
142
143
 
143
144
class InterToLocalGitRepository(InterToGitRepository):
144
145
 
145
 
    def missing_revisions(self, stop_revisions):
 
146
    def missing_revisions(self, stop_revisions, check_revid):
146
147
        missing = []
147
148
        pb = ui.ui_factory.nested_progress_bar()
148
149
        try:
149
150
            graph = self.source.get_graph()
150
151
            for revid, _ in graph.iter_ancestry(stop_revisions):
151
152
                pb.update("determining revisions to fetch", len(missing))
152
 
                if not self.target.has_revision(revid):
 
153
                if not check_revid(revid):
153
154
                    missing.append(revid)
154
155
            return graph.iter_topo_order(missing)
155
156
        finally:
162
163
            if revid in gitidmap:
163
164
                gitid = gitidmap[revid]
164
165
            else:
165
 
                gitid, _ = self.mapping.revision_id_bzr_to_foreign(revid)
 
166
                gitid = self.source_store._lookup_revision_sha1(revid)
166
167
            self.target._git.refs[name] = gitid
167
168
            new_refs[name] = gitid
168
169
        return revidmap, new_refs
173
174
        revidmap = {}
174
175
        self.source.lock_read()
175
176
        try:
176
 
            todo = [revid for revid in self.missing_revisions(stop_revisions) if revid != NULL_REVISION]
 
177
            target_store = self.target._git.object_store
 
178
            def check_revid(revid):
 
179
                if revid == NULL_REVISION:
 
180
                    return True
 
181
                return (self.source_store._lookup_revision_sha1(revid) in target_store)
 
182
            todo = list(self.missing_revisions(stop_revisions, check_revid))
177
183
            pb = ui.ui_factory.nested_progress_bar()
178
184
            try:
179
 
                object_generator = MissingObjectsIterator(self.source, self.mapping, pb)
 
185
                object_generator = MissingObjectsIterator(self.source_store, self.source, pb)
180
186
                for old_bzr_revid, git_commit in object_generator.import_revisions(
181
187
                    todo):
182
188
                    new_bzr_revid = self.mapping.revision_id_foreign_to_bzr(git_commit)
183
189
                    revidmap[old_bzr_revid] = new_bzr_revid
184
190
                    gitidmap[old_bzr_revid] = git_commit
185
 
                self.target._git.object_store.add_objects(object_generator) 
 
191
                target_store.add_objects(object_generator) 
186
192
            finally:
187
193
                pb.finished()
188
194
        finally:
204
210
        def determine_wants(refs):
205
211
            ret = {}
206
212
            for name, revid in new_refs.iteritems():
207
 
                ret[name] = store._lookup_revision_sha1(revid)
 
213
                ret[name] = self.source_store._lookup_revision_sha1(revid)
208
214
            return ret
209
215
        self.source.lock_read()
210
216
        try:
211
 
            store = BazaarObjectStore(self.source, self.mapping)
212
217
            new_refs = self.target.send_pack(determine_wants,
213
 
                    store.generate_pack_contents)
 
218
                    self.source_store.generate_pack_contents)
214
219
        finally:
215
220
            self.source.unlock()
216
221
        return revidmap, new_refs