~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/merge.py

  • Committer: Vincent Ladeuil
  • Date: 2010-10-08 10:50:51 UTC
  • mfrom: (5050.17.31 2.2.2-dev)
  • mto: This revision was merged to the branch mainline in revision 5474.
  • Revision ID: v.ladeuil+lp@free.fr-20101008105051-xd4knkrohzclffic
Merge 2.2 into trunk including fixes for bug #651706 and bug #646133

Show diffs side-by-side

added added

removed removed

Lines of Context:
565
565
 
566
566
    def _maybe_fetch(self, source, target, revision_id):
567
567
        if not source.repository.has_same_location(target.repository):
568
 
            try:
569
 
                tags_to_fetch = set(source.tags.get_reverse_tag_dict())
570
 
            except errors.TagsNotSupported:
571
 
                tags_to_fetch = None
572
 
            fetch_spec = _mod_graph.NotInOtherForRevs(target.repository,
573
 
                source.repository, [revision_id],
574
 
                if_present_ids=tags_to_fetch).execute()
575
 
            target.fetch(source, fetch_spec=fetch_spec)
 
568
            target.fetch(source, revision_id)
576
569
 
577
570
    def find_base(self):
578
571
        revisions = [_mod_revision.ensure_null(self.this_basis),
589
582
            elif len(lcas) == 1:
590
583
                self.base_rev_id = list(lcas)[0]
591
584
            else: # len(lcas) > 1
592
 
                self._is_criss_cross = True
593
585
                if len(lcas) > 2:
594
586
                    # find_unique_lca can only handle 2 nodes, so we have to
595
587
                    # start back at the beginning. It is a shame to traverse
600
592
                else:
601
593
                    self.base_rev_id = self.revision_graph.find_unique_lca(
602
594
                                            *lcas)
603
 
                sorted_lca_keys = self.revision_graph.find_merge_order(                
604
 
                    revisions[0], lcas)
605
 
                if self.base_rev_id == _mod_revision.NULL_REVISION:
606
 
                    self.base_rev_id = sorted_lca_keys[0]
607
 
                
 
595
                self._is_criss_cross = True
608
596
            if self.base_rev_id == _mod_revision.NULL_REVISION:
609
597
                raise errors.UnrelatedBranches()
610
598
            if self._is_criss_cross:
611
599
                trace.warning('Warning: criss-cross merge encountered.  See bzr'
612
600
                              ' help criss-cross.')
613
601
                trace.mutter('Criss-cross lcas: %r' % lcas)
614
 
                if self.base_rev_id in lcas:
615
 
                    trace.mutter('Unable to find unique lca. '
616
 
                                 'Fallback %r as best option.' % self.base_rev_id)
617
 
                interesting_revision_ids = set(lcas)
618
 
                interesting_revision_ids.add(self.base_rev_id)
 
602
                interesting_revision_ids = [self.base_rev_id]
 
603
                interesting_revision_ids.extend(lcas)
619
604
                interesting_trees = dict((t.get_revision_id(), t)
620
605
                    for t in self.this_branch.repository.revision_trees(
621
606
                        interesting_revision_ids))
622
607
                self._cached_trees.update(interesting_trees)
623
 
                if self.base_rev_id in lcas:
624
 
                    self.base_tree = interesting_trees[self.base_rev_id]
625
 
                else:
626
 
                    self.base_tree = interesting_trees.pop(self.base_rev_id)
 
608
                self.base_tree = interesting_trees.pop(self.base_rev_id)
 
609
                sorted_lca_keys = self.revision_graph.find_merge_order(
 
610
                    revisions[0], lcas)
627
611
                self._lca_trees = [interesting_trees[key]
628
612
                                   for key in sorted_lca_keys]
629
613
            else: