~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/merge3.py

  • Committer: Martin Pool
  • Date: 2005-07-05 08:20:41 UTC
  • Revision ID: mbp@sourcefrog.net-20050705082041-6538a9ec26f7a59d
- Actually merge unsynchronized regions.  Woot!

Show diffs side-by-side

added added

removed removed

Lines of Context:
101
101
            assert matchlen == (aend - amatch)
102
102
            assert matchlen == (bend - bmatch)
103
103
            
104
 
            if amatch > ia:   # or bmatch > ib:
105
 
                # got an unmatched region; work out if either
106
 
                # alternative is the same as the base
107
 
 
108
 
                # kludge: return the whole thing as inserted into A
109
 
                yield 'a', ia, amatch
 
104
            len_a = amatch - ia
 
105
            len_b = bmatch - ib
 
106
            len_base = zmatch - iz
 
107
            assert len_a >= 0
 
108
            assert len_b >= 0
 
109
            assert len_base >= 0
 
110
 
 
111
            if len_a or len_b:
 
112
                lines_base = self.base[iz:zmatch]
 
113
                lines_a = self.a[ia:amatch]
 
114
                lines_b = self.b[ib:bmatch]
 
115
 
 
116
                # TODO: check the len just as a shortcut
 
117
                equal_a = (lines_a == lines_base)
 
118
                equal_b = (lines_b == lines_base)
 
119
 
 
120
                if equal_a and not equal_b:
 
121
                    yield 'b', ib, bmatch
 
122
                elif equal_b and not equal_a:
 
123
                    yield 'a', ia, amatch
 
124
                elif not equal_a and not equal_b:
 
125
                    yield 'conflict', ia, amatch, ib, bmatch
 
126
                else:
 
127
                    assert 0
 
128
 
110
129
                ia = amatch
 
130
                ib = bmatch
 
131
            iz = zmatch
 
132
 
 
133
            # if the same part of the base was deleted on both sides
 
134
            # that's OK, we can just skip it.
111
135
 
112
136
                
113
137
            if matchlen > 0: