~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 09:04:24 UTC
  • Revision ID: mbp@sourcefrog.net-20050705090423-e41ae78e4986e5a1
- handle chunks which differ from the base but agree

Show diffs side-by-side

added added

removed removed

Lines of Context:
88
88
            if what == 'unchanged':
89
89
                for i in range(t[1], t[2]):
90
90
                    yield self.base[i]
91
 
            elif what == 'a':
 
91
            elif what == 'a' or what == 'same':
92
92
                for i in range(t[1], t[2]):
93
93
                    yield self.a[i]
94
94
            elif what == 'b':
118
118
        'a', lines
119
119
             Lines taken from a
120
120
 
 
121
        'same', lines
 
122
             Lines taken from a (and equal to b)
 
123
 
121
124
        'b', lines
122
125
             Lines taken from b
123
126
 
128
131
            what = t[0]
129
132
            if what == 'unchanged':
130
133
                yield what, self.base[t[1]:t[2]]
131
 
            elif what == 'a':
 
134
            elif what == 'a' or what == 'same':
132
135
                yield what, self.a[t[1]:t[2]]
133
136
            elif what == 'b':
134
137
                yield what, self.b[t[1]:t[2]]
150
153
        'unchanged', start, end
151
154
             Take a region of base[start:end]
152
155
 
 
156
        'same', astart, aend
 
157
             b and a are different from base but give the same result
 
158
 
153
159
        'a', start, end
154
160
             Non-clashing insertion from a[start:end]
155
161
 
189
195
                # TODO: check the len just as a shortcut
190
196
                equal_a = (lines_a == lines_base)
191
197
                equal_b = (lines_b == lines_base)
 
198
                same = lines_a == lines_b
192
199
 
193
 
                if equal_a and not equal_b:
 
200
                if same:
 
201
                    yield 'same', ia, amatch
 
202
                elif equal_a and not equal_b:
194
203
                    yield 'b', ib, bmatch
195
204
                elif equal_b and not equal_a:
196
205
                    yield 'a', ia, amatch
303
312
 
304
313
 
305
314
def main(argv):
306
 
    base = file(argv[1], 'rt').readlines()
307
 
    a = file(argv[2], 'rt').readlines()
 
315
    # as for diff3 and meld the syntax is "MINE BASE OTHER"
 
316
    a = file(argv[1], 'rt').readlines()
 
317
    base = file(argv[2], 'rt').readlines()
308
318
    b = file(argv[3], 'rt').readlines()
309
319
 
310
320
    m3 = Merge3(base, a, b)
311
321
 
312
 
    sys.stdout.writelines(m3.merge_lines(argv[2], argv[3]))
 
322
    sys.stdout.writelines(m3.merge_lines(name_a=argv[1], name_b=argv[3]))
313
323
 
314
324
 
315
325
if __name__ == '__main__':