~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/merge3.py

Don't ignore bzrlib/plugins -- really bad idea because they can have bad 
old plugins lying around!

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Copyright (C) 2004, 2005 by Canonical Ltd
2
 
#
 
2
 
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
5
5
# the Free Software Foundation; either version 2 of the License, or
6
6
# (at your option) any later version.
7
 
#
 
7
 
8
8
# This program is distributed in the hope that it will be useful,
9
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
11
# GNU General Public License for more details.
12
 
#
 
12
 
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
19
# s: "i hate that."
20
20
 
21
21
 
 
22
from difflib import SequenceMatcher
22
23
from bzrlib.errors import CantReprocessAndShowBase
23
 
import bzrlib.patiencediff
24
 
from bzrlib.textfile import check_text_lines
25
 
 
26
24
 
27
25
def intersect(ra, rb):
28
26
    """Given two ranges return the range where they intersect or None.
68
66
    incorporating the changes from both BASE->OTHER and BASE->THIS.
69
67
    All three will typically be sequences of lines."""
70
68
    def __init__(self, base, a, b):
71
 
        check_text_lines(base)
72
 
        check_text_lines(a)
73
 
        check_text_lines(b)
74
69
        self.base = base
75
70
        self.a = a
76
71
        self.b = b
282
277
    
283
278
 
284
279
    def reprocess_merge_regions(self, merge_regions):
285
 
        """Where there are conflict regions, remove the agreed lines.
286
 
 
287
 
        Lines where both A and B have made the same changes are 
288
 
        eliminated.
289
 
        """
290
280
        for region in merge_regions:
291
281
            if region[0] != "conflict":
292
282
                yield region
294
284
            type, iz, zmatch, ia, amatch, ib, bmatch = region
295
285
            a_region = self.a[ia:amatch]
296
286
            b_region = self.b[ib:bmatch]
297
 
            matches = bzrlib.patiencediff.PatienceSequenceMatcher(
298
 
                    None, a_region, b_region).get_matching_blocks()
 
287
            matches = SequenceMatcher(None, a_region, 
 
288
                                      b_region).get_matching_blocks()
299
289
            next_a = ia
300
290
            next_b = ib
301
291
            for region_ia, region_ib, region_len in matches[:-1]:
327
317
        """
328
318
 
329
319
        ia = ib = 0
330
 
        amatches = bzrlib.patiencediff.PatienceSequenceMatcher(
331
 
                None, self.base, self.a).get_matching_blocks()
332
 
        bmatches = bzrlib.patiencediff.PatienceSequenceMatcher(
333
 
                None, self.base, self.b).get_matching_blocks()
 
320
        amatches = SequenceMatcher(None, self.base, self.a).get_matching_blocks()
 
321
        bmatches = SequenceMatcher(None, self.base, self.b).get_matching_blocks()
334
322
        len_a = len(amatches)
335
323
        len_b = len(bmatches)
336
324
 
386
374
 
387
375
    def find_unconflicted(self):
388
376
        """Return a list of ranges in base that are not conflicted."""
389
 
        am = bzrlib.patiencediff.PatienceSequenceMatcher(
390
 
                None, self.base, self.a).get_matching_blocks()
391
 
        bm = bzrlib.patiencediff.PatienceSequenceMatcher(
392
 
                None, self.base, self.b).get_matching_blocks()
 
377
 
 
378
        import re
 
379
 
 
380
        # don't sync-up on lines containing only blanks or pounds
 
381
        junk_re = re.compile(r'^[ \t#]*$')
 
382
        
 
383
        am = SequenceMatcher(junk_re.match, self.base, self.a).get_matching_blocks()
 
384
        bm = SequenceMatcher(junk_re.match, self.base, self.b).get_matching_blocks()
393
385
 
394
386
        unc = []
395
387