7 Module implementing a dialog to compare two files. |
7 Module implementing a dialog to compare two files. |
8 """ |
8 """ |
9 |
9 |
10 import os |
10 import os |
11 import time |
11 import time |
|
12 import contextlib |
|
13 from difflib import unified_diff, context_diff |
12 |
14 |
13 from PyQt5.QtCore import QFileInfo, QEvent, pyqtSlot |
15 from PyQt5.QtCore import QFileInfo, QEvent, pyqtSlot |
14 from PyQt5.QtGui import QTextCursor |
16 from PyQt5.QtGui import QTextCursor |
15 from PyQt5.QtWidgets import QWidget, QApplication, QDialogButtonBox |
17 from PyQt5.QtWidgets import QWidget, QApplication, QDialogButtonBox |
16 |
18 |
21 from .Ui_DiffDialog import Ui_DiffDialog |
23 from .Ui_DiffDialog import Ui_DiffDialog |
22 from .DiffHighlighter import DiffHighlighter |
24 from .DiffHighlighter import DiffHighlighter |
23 |
25 |
24 import Utilities |
26 import Utilities |
25 import Preferences |
27 import Preferences |
26 |
|
27 from difflib import unified_diff, context_diff |
|
28 |
28 |
29 |
29 |
30 class DiffDialog(QWidget, Ui_DiffDialog): |
30 class DiffDialog(QWidget, Ui_DiffDialog): |
31 """ |
31 """ |
32 Class implementing a dialog to compare two files. |
32 Class implementing a dialog to compare two files. |
130 return |
130 return |
131 fname = Utilities.toNativeSeparators(fname) |
131 fname = Utilities.toNativeSeparators(fname) |
132 |
132 |
133 txt = self.contents.toPlainText() |
133 txt = self.contents.toPlainText() |
134 try: |
134 try: |
135 with open(fname, "w", encoding="utf-8") as f: |
135 with open(fname, "w", encoding="utf-8") as f, \ |
136 try: |
136 contextlib.suppress(UnicodeError): |
137 f.write(txt) |
137 f.write(txt) |
138 except UnicodeError: |
|
139 pass |
|
140 except OSError as why: |
138 except OSError as why: |
141 E5MessageBox.critical( |
139 E5MessageBox.critical( |
142 self, self.tr('Save Diff'), |
140 self, self.tr('Save Diff'), |
143 self.tr( |
141 self.tr( |
144 '<p>The patch file <b>{0}</b> could not be saved.<br />' |
142 '<p>The patch file <b>{0}</b> could not be saved.<br />' |