Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py

changeset 945
8cd4d08fa9f6
parent 882
34b86be88bf0
child 1112
8a7d1b9d18db
equal deleted inserted replaced
944:1b59c4ba121e 945:8cd4d08fa9f6
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.'

eric ide

mercurial