/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 breezy/branch.py

  • Committer: Breezy landing bot
  • Author(s): Jelmer Vernooij
  • Date: 2020-01-18 15:18:03 UTC
  • mfrom: (7449.1.2 interbranch-update-references)
  • Revision ID: breezy.the.bot@gmail.com-20200118151803-v3paalxc880jka79
Support importing tree reference info from Git.

Merged from https://code.launchpad.net/~jelmer/brz/interbranch-update-references/+merge/377797

Show diffs side-by-side

added added

removed removed

Lines of Context:
1281
1281
    def update_references(self, target):
1282
1282
        if not getattr(self._format, 'supports_reference_locations', False):
1283
1283
            return
1284
 
        reference_dict = self._get_all_reference_info()
1285
 
        if len(reference_dict) == 0:
1286
 
            return
1287
 
        old_base = self.base
1288
 
        new_base = target.base
1289
 
        target_reference_dict = target._get_all_reference_info()
1290
 
        for tree_path, (branch_location, file_id) in viewitems(reference_dict):
1291
 
            branch_location = urlutils.rebase_url(branch_location,
1292
 
                                                  old_base, new_base)
1293
 
            target_reference_dict.setdefault(
1294
 
                tree_path, (branch_location, file_id))
1295
 
        target._set_all_reference_info(target_reference_dict)
 
1284
        return InterBranch.get(self, target).update_references()
1296
1285
 
1297
1286
    def check(self, refs):
1298
1287
        """Check consistency of the branch.
2119
2108
        """
2120
2109
        raise NotImplementedError(self.fetch)
2121
2110
 
 
2111
    def update_references(self):
 
2112
        """Import reference information from source to target.
 
2113
        """
 
2114
        raise NotImplementedError(self.update_references)
 
2115
 
2122
2116
 
2123
2117
def _fix_overwrite_type(overwrite):
2124
2118
    if isinstance(overwrite, bool):
2155
2149
                     be truncated to end with revision_id.
2156
2150
        """
2157
2151
        with self.source.lock_read(), self.target.lock_write():
2158
 
            self.source.update_references(self.target)
2159
2152
            self.source._synchronize_history(self.target, revision_id)
 
2153
            self.update_references()
2160
2154
            try:
2161
2155
                parent = self.source.get_parent()
2162
2156
            except errors.InaccessibleParent as e:
2325
2319
        result.source_branch = self.source
2326
2320
        result.target_branch = self.target
2327
2321
        result.old_revno, result.old_revid = self.target.last_revision_info()
2328
 
        self.source.update_references(self.target)
2329
2322
        overwrite = _fix_overwrite_type(overwrite)
2330
2323
        if result.old_revid != stop_revision:
2331
2324
            # We assume that during 'push' this repository is closer than
2337
2330
            result.tag_updates, result.tag_conflicts = (
2338
2331
                self.source.tags.merge_to(
2339
2332
                    self.target.tags, "tags" in overwrite))
 
2333
        self.update_references()
2340
2334
        result.new_revno, result.new_revid = self.target.last_revision_info()
2341
2335
        return result
2342
2336
 
2372
2366
        with self.source.lock_read():
2373
2367
            # We assume that during 'pull' the target repository is closer than
2374
2368
            # the source one.
2375
 
            self.source.update_references(self.target)
2376
2369
            graph = self.target.repository.get_graph(self.source.repository)
2377
2370
            # TODO: Branch formats should have a flag that indicates
2378
2371
            # that revno's are expensive, and pull() should honor that flag.
2389
2382
                self.source.tags.merge_to(
2390
2383
                    self.target.tags, "tags" in overwrite,
2391
2384
                    ignore_master=not merge_tags_to_master))
 
2385
            self.update_references()
2392
2386
            result.new_revno, result.new_revid = (
2393
2387
                self.target.last_revision_info())
2394
2388
            if _hook_master:
2402
2396
                    hook(result)
2403
2397
            return result
2404
2398
 
 
2399
    def update_references(self):
 
2400
        if not getattr(self.source._format, 'supports_reference_locations', False):
 
2401
            return
 
2402
        reference_dict = self.source._get_all_reference_info()
 
2403
        if len(reference_dict) == 0:
 
2404
            return
 
2405
        old_base = self.source.base
 
2406
        new_base = self.target.base
 
2407
        target_reference_dict = self.target._get_all_reference_info()
 
2408
        for tree_path, (branch_location, file_id) in viewitems(reference_dict):
 
2409
            branch_location = urlutils.rebase_url(branch_location,
 
2410
                                                  old_base, new_base)
 
2411
            target_reference_dict.setdefault(
 
2412
                tree_path, (branch_location, file_id))
 
2413
        self.target._set_all_reference_info(target_reference_dict)
 
2414
 
2405
2415
 
2406
2416
InterBranch.register_optimiser(GenericInterBranch)