1# Copyright (C) 2009, 2012 Piotr Piastucki <the_leech@users.berlios.de>
2# Copyright (C) 2012 Kai Willadsen <kai.willadsen@gmail.com>
3#
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation, either version 2 of the License, or (at
7# your option) any later version.
8#
9# This program is distributed in the hope that it will be useful, but
10# WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12# General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16
17from meld.conf import _
18from meld.filediff import FileDiff
19from meld.matchers import merge
20from meld.recent import RecentType
21
22
23class FileMerge(FileDiff):
24
25    differ = merge.AutoMergeDiffer
26
27    def _connect_buffer_handlers(self):
28        super()._connect_buffer_handlers()
29        self.textview[0].set_editable(0)
30        self.textview[2].set_editable(0)
31
32    def get_comparison(self):
33        comp = super().get_comparison()
34        return RecentType.Merge, comp[1]
35
36    def _merge_files(self):
37        yield _("[%s] Merging files") % self.label_text
38        merger = merge.Merger()
39        step = merger.initialize(self.buffer_filtered, self.buffer_texts)
40        while next(step) is None:
41            yield 1
42        for merged_text in merger.merge_3_files():
43            yield 1
44        self.linediffer.unresolved = merger.unresolved
45        self.textbuffer[1].set_text(merged_text)
46        self.recompute_label()
47