520
520
def plan_merge(self, ver_a, ver_b, base=None):
521
521
"""See VersionedFile.plan_merge"""
522
from merge import _PlanMerge
522
from bzrlib.merge import _PlanMerge
524
524
return _PlanMerge(ver_a, ver_b, self).plan_merge()
525
525
old_plan = list(_PlanMerge(ver_a, base, self).plan_merge())
526
526
new_plan = list(_PlanMerge(ver_a, ver_b, self).plan_merge())
527
527
return _PlanMerge._subtract_plans(old_plan, new_plan)
529
def plan_lca_merge(self, ver_a, ver_b, base=None):
530
from bzrlib.merge import _PlanLCAMerge
531
graph = self._get_graph()
532
new_plan = _PlanLCAMerge(ver_a, ver_b, self, graph).plan_merge()
535
old_plan = _PlanLCAMerge(ver_a, base, self, graph).plan_merge()
536
return _PlanLCAMerge._subtract_plans(list(old_plan), list(new_plan))
530
538
def add_lines(self, version_id, parents, lines):
531
539
"""See VersionedFile.add_lines
596
604
raise errors.RevisionNotPresent(version_id, self._file_id)
606
def _get_graph(self):
607
from bzrlib.graph import (
610
_StackedParentsProvider,
612
from bzrlib.repofmt.knitrepo import _KnitParentsProvider
613
parent_providers = [DictParentsProvider(self._parents)]
614
for vf in self.fallback_versionedfiles:
615
parent_providers.append(_KnitParentsProvider(vf))
616
return Graph(_StackedParentsProvider(parent_providers))
599
619
class PlanWeaveMerge(TextMerge):
600
620
"""Weave merge that takes a plan as its input.
653
673
elif state == 'new-b':
655
675
lines_b.append(line)
676
elif state == 'conflicted-a':
679
elif state == 'conflicted-b':
657
683
assert state in ('irrelevant', 'ghost-a', 'ghost-b',
658
684
'killed-base', 'killed-both'), state