~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/merge3.py

Fix BzrDir.create_workingtree for NULL_REVISION

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
23
22
from bzrlib.errors import CantReprocessAndShowBase
 
23
import bzrlib.patiencediff
 
24
from bzrlib.textfile import check_text_lines
 
25
 
24
26
 
25
27
def intersect(ra, rb):
26
28
    """Given two ranges return the range where they intersect or None.
66
68
    incorporating the changes from both BASE->OTHER and BASE->THIS.
67
69
    All three will typically be sequences of lines."""
68
70
    def __init__(self, base, a, b):
 
71
        check_text_lines(base)
 
72
        check_text_lines(a)
 
73
        check_text_lines(b)
69
74
        self.base = base
70
75
        self.a = a
71
76
        self.b = b
289
294
            type, iz, zmatch, ia, amatch, ib, bmatch = region
290
295
            a_region = self.a[ia:amatch]
291
296
            b_region = self.b[ib:bmatch]
292
 
            matches = SequenceMatcher(None, a_region, 
293
 
                                      b_region).get_matching_blocks()
 
297
            matches = bzrlib.patiencediff.PatienceSequenceMatcher(
 
298
                    None, a_region, b_region).get_matching_blocks()
294
299
            next_a = ia
295
300
            next_b = ib
296
301
            for region_ia, region_ib, region_len in matches[:-1]:
322
327
        """
323
328
 
324
329
        ia = ib = 0
325
 
        amatches = SequenceMatcher(None, self.base, self.a).get_matching_blocks()
326
 
        bmatches = SequenceMatcher(None, self.base, self.b).get_matching_blocks()
 
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()
327
334
        len_a = len(amatches)
328
335
        len_b = len(bmatches)
329
336
 
379
386
 
380
387
    def find_unconflicted(self):
381
388
        """Return a list of ranges in base that are not conflicted."""
382
 
 
383
 
        import re
384
 
 
385
 
        # don't sync-up on lines containing only blanks or pounds
386
 
        junk_re = re.compile(r'^[ \t#]*$')
387
 
        
388
 
        am = SequenceMatcher(junk_re.match, self.base, self.a).get_matching_blocks()
389
 
        bm = SequenceMatcher(junk_re.match, self.base, self.b).get_matching_blocks()
 
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()
390
393
 
391
394
        unc = []
392
395