19 |
19 |
20 from .SvnDialogMixin import SvnDialogMixin |
20 from .SvnDialogMixin import SvnDialogMixin |
21 from .Ui_SvnDiffDialog import Ui_SvnDiffDialog |
21 from .Ui_SvnDiffDialog import Ui_SvnDiffDialog |
22 |
22 |
23 import Utilities |
23 import Utilities |
|
24 |
24 |
25 |
25 class SvnDiffDialog(QWidget, SvnDialogMixin, Ui_SvnDiffDialog): |
26 class SvnDiffDialog(QWidget, SvnDialogMixin, Ui_SvnDiffDialog): |
26 """ |
27 """ |
27 Class implementing a dialog to show the output of the svn diff command. |
28 Class implementing a dialog to show the output of the svn diff command. |
28 """ |
29 """ |
29 def __init__(self, vcs, parent = None): |
30 def __init__(self, vcs, parent=None): |
30 """ |
31 """ |
31 Constructor |
32 Constructor |
32 |
33 |
33 @param vcs reference to the vcs object |
34 @param vcs reference to the vcs object |
34 @param parent parent widget (QWidget) |
35 @param parent parent widget (QWidget) |
106 elif summaryKind == pysvn.diff_summarize_kind.normal: |
107 elif summaryKind == pysvn.diff_summarize_kind.normal: |
107 return "N" |
108 return "N" |
108 else: |
109 else: |
109 return " " |
110 return " " |
110 |
111 |
111 def start(self, fn, versions = None, urls = None, summary = False, pegRev = None): |
112 def start(self, fn, versions=None, urls=None, summary=False, pegRev=None): |
112 """ |
113 """ |
113 Public slot to start the svn diff command. |
114 Public slot to start the svn diff command. |
114 |
115 |
115 @param fn filename to be diffed (string) |
116 @param fn filename to be diffed (string) |
116 @param versions list of versions to be diffed (list of up to 2 integer or None) |
117 @param versions list of versions to be diffed (list of up to 2 integer or None) |
117 @keyparam urls list of repository URLs (list of 2 strings) |
118 @keyparam urls list of repository URLs (list of 2 strings) |
118 @keyparam summary flag indicating a summarizing diff |
119 @keyparam summary flag indicating a summarizing diff |
119 (only valid for URL diffs) (boolean) |
120 (only valid for URL diffs) (boolean) |
120 @keyparam pegRev revision number the filename is valid (integer) |
121 @keyparam pegRev revision number the filename is valid (integer) |
121 """ |
122 """ |
122 self.buttonBox.button(QDialogButtonBox.Save).setEnabled(False) |
123 self.buttonBox.button(QDialogButtonBox.Save).setEnabled(False) |
123 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) |
124 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(False) |
193 if urls is not None: |
194 if urls is not None: |
194 url1 = "{0}/{1}{2}".format(urls[0], dname, name) |
195 url1 = "{0}/{1}{2}".format(urls[0], dname, name) |
195 url2 = "{0}/{1}{2}".format(urls[1], dname, name) |
196 url2 = "{0}/{1}{2}".format(urls[1], dname, name) |
196 if summary: |
197 if summary: |
197 diff_summary = self.client.diff_summarize( |
198 diff_summary = self.client.diff_summarize( |
198 url1, revision1 = rev1, |
199 url1, revision1=rev1, |
199 url_or_path2 = url2, revision2 = rev2, |
200 url_or_path2=url2, revision2=rev2, |
200 recurse = recurse) |
201 recurse=recurse) |
201 diff_list = [] |
202 diff_list = [] |
202 for diff_sum in diff_summary: |
203 for diff_sum in diff_summary: |
203 diff_list.append("{0} {1}".format( |
204 diff_list.append("{0} {1}".format( |
204 self.__getDiffSummaryKind(diff_sum['summarize_kind']), |
205 self.__getDiffSummaryKind(diff_sum['summarize_kind']), |
205 diff_sum['path'])) |
206 diff_sum['path'])) |
206 diffText = os.linesep.join(diff_list) |
207 diffText = os.linesep.join(diff_list) |
207 else: |
208 else: |
208 diffText = self.client.diff(tmpdir, |
209 diffText = self.client.diff(tmpdir, |
209 url1, revision1 = rev1, |
210 url1, revision1=rev1, |
210 url_or_path2 = url2, revision2 = rev2, |
211 url_or_path2=url2, revision2=rev2, |
211 recurse = recurse) |
212 recurse=recurse) |
212 else: |
213 else: |
213 if pegRev is not None: |
214 if pegRev is not None: |
214 diffText = self.client.diff_peg(tmpdir, name, |
215 diffText = self.client.diff_peg(tmpdir, name, |
215 peg_revision = self.__getVersionArg(pegRev), |
216 peg_revision=self.__getVersionArg(pegRev), |
216 revision_start = rev1, revision_end = rev2, recurse = recurse) |
217 revision_start=rev1, revision_end=rev2, recurse=recurse) |
217 else: |
218 else: |
218 diffText = self.client.diff(tmpdir, name, |
219 diffText = self.client.diff(tmpdir, name, |
219 revision1 = rev1, revision2 = rev2, recurse = recurse) |
220 revision1=rev1, revision2=rev2, recurse=recurse) |
220 counter = 0 |
221 counter = 0 |
221 for line in diffText.splitlines(): |
222 for line in diffText.splitlines(): |
222 self.__appendText("{0}{1}".format(line, os.linesep)) |
223 self.__appendText("{0}{1}".format(line, os.linesep)) |
223 counter += 1 |
224 counter += 1 |
224 if counter == 30: |
225 if counter == 30: |
332 if QFileInfo(fname).exists(): |
333 if QFileInfo(fname).exists(): |
333 res = E5MessageBox.yesNo(self, |
334 res = E5MessageBox.yesNo(self, |
334 self.trUtf8("Save Diff"), |
335 self.trUtf8("Save Diff"), |
335 self.trUtf8("<p>The patch file <b>{0}</b> already exists." |
336 self.trUtf8("<p>The patch file <b>{0}</b> already exists." |
336 " Overwrite it?</p>").format(fname), |
337 " Overwrite it?</p>").format(fname), |
337 icon = E5MessageBox.Warning) |
338 icon=E5MessageBox.Warning) |
338 if not res: |
339 if not res: |
339 return |
340 return |
340 fname = Utilities.toNativeSeparators(fname) |
341 fname = Utilities.toNativeSeparators(fname) |
341 |
342 |
342 try: |
343 try: |
343 f = open(fname, "w", encoding = "utf-8") |
344 f = open(fname, "w", encoding="utf-8") |
344 f.write(self.contents.toPlainText()) |
345 f.write(self.contents.toPlainText()) |
345 f.close() |
346 f.close() |
346 except IOError as why: |
347 except IOError as why: |
347 E5MessageBox.critical(self, self.trUtf8('Save Diff'), |
348 E5MessageBox.critical(self, self.trUtf8('Save Diff'), |
348 self.trUtf8('<p>The patch file <b>{0}</b> could not be saved.' |
349 self.trUtf8('<p>The patch file <b>{0}</b> could not be saved.' |