/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/textmerge.py

Implemented reprocess for weave

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
 
22
22
 
23
23
class TextMerge(object):
 
24
    """Base class for text-mergers
 
25
    Subclasses must implement _merge_struct.
 
26
    """
24
27
    def __init__(self, a_marker='<<<<<<< \n', b_marker='>>>>>>> \n',
25
28
                 split_marker='=======\n'):
26
29
        self.a_marker = a_marker
28
31
        self.split_marker = split_marker
29
32
 
30
33
    def struct_to_lines(self, struct_iter):
 
34
        """Convert merge result tuples to lines"""
31
35
        for lines in struct_iter:
32
36
            if len(lines) == 1:
33
37
                for line in lines[0]:
42
46
                yield self.b_marker
43
47
 
44
48
    def iter_useful(self, struct_iter):
 
49
        """Iterate through input tuples, skipping empty ones."""
45
50
        for group in struct_iter:
46
51
            if len(group[0]) > 0:
47
52
                yield group
48
53
            elif len(group) > 1 and len(group[1]) > 0:
49
54
                yield group
50
55
 
51
 
    def merge_lines(self):
52
 
        return self.struct_to_lines(self.merge_struct())
53
 
 
54
 
    def merge_struct(self):
55
 
        return  self.iter_useful(self._merge_struct())
 
56
    def merge_lines(self, reprocess=False):
 
57
        return self.struct_to_lines(self.merge_struct(reprocess))
 
58
 
 
59
    def merge_struct(self, reprocess=False):
 
60
        struct_iter = self.iter_useful(self._merge_struct())
 
61
        if reprocess is True:
 
62
            return self.reprocess_struct(struct_iter)
 
63
        else:
 
64
            return struct_iter
 
65
 
 
66
    @staticmethod
 
67
    def reprocess_struct(struct_iter):
 
68
        for group in struct_iter:
 
69
            if len(group) == 1:
 
70
                yield group
 
71
            else:
 
72
                for newgroup in Merge2(group[0], group[1]).merge_struct():
 
73
                    yield newgroup
56
74
 
57
75
 
58
76
class Merge2(TextMerge):