161 elif os.path.exists('/tmp'): |
161 elif os.path.exists('/tmp'): |
162 tmpdir = '/tmp' |
162 tmpdir = '/tmp' |
163 else: |
163 else: |
164 E5MessageBox.critical( |
164 E5MessageBox.critical( |
165 self, |
165 self, |
166 self.trUtf8("Subversion Diff"), |
166 self.tr("Subversion Diff"), |
167 self.trUtf8("""There is no temporary directory available.""")) |
167 self.tr("""There is no temporary directory available.""")) |
168 return |
168 return |
169 |
169 |
170 tmpdir = os.path.join(tmpdir, 'svn_tmp') |
170 tmpdir = os.path.join(tmpdir, 'svn_tmp') |
171 if not os.path.exists(tmpdir): |
171 if not os.path.exists(tmpdir): |
172 os.mkdir(tmpdir) |
172 os.mkdir(tmpdir) |
203 dname = e5App().getObject('Project').getRelativePath(dname) |
203 dname = e5App().getObject('Project').getRelativePath(dname) |
204 if dname: |
204 if dname: |
205 dname += "/" |
205 dname += "/" |
206 for name in fnames: |
206 for name in fnames: |
207 self.__showError( |
207 self.__showError( |
208 self.trUtf8("Processing file '{0}'...\n").format(name)) |
208 self.tr("Processing file '{0}'...\n").format(name)) |
209 if urls is not None: |
209 if urls is not None: |
210 url1 = "{0}/{1}{2}".format(urls[0], dname, name) |
210 url1 = "{0}/{1}{2}".format(urls[0], dname, name) |
211 url2 = "{0}/{1}{2}".format(urls[1], dname, name) |
211 url2 = "{0}/{1}{2}".format(urls[1], dname, name) |
212 if summary: |
212 if summary: |
213 diff_summary = self.client.diff_summarize( |
213 diff_summary = self.client.diff_summarize( |
335 tc = self.contents.textCursor() |
335 tc = self.contents.textCursor() |
336 tc.movePosition(QTextCursor.Start) |
336 tc.movePosition(QTextCursor.Start) |
337 self.contents.setTextCursor(tc) |
337 self.contents.setTextCursor(tc) |
338 self.contents.ensureCursorVisible() |
338 self.contents.ensureCursorVisible() |
339 |
339 |
340 self.filesCombo.addItem(self.trUtf8("<Start>"), 0) |
340 self.filesCombo.addItem(self.tr("<Start>"), 0) |
341 self.filesCombo.addItem(self.trUtf8("<End>"), -1) |
341 self.filesCombo.addItem(self.tr("<End>"), -1) |
342 for oldFile, newFile, pos in sorted(self.__fileSeparators): |
342 for oldFile, newFile, pos in sorted(self.__fileSeparators): |
343 if oldFile != newFile: |
343 if oldFile != newFile: |
344 self.filesCombo.addItem( |
344 self.filesCombo.addItem( |
345 "{0}\n{1}".format(oldFile, newFile), pos) |
345 "{0}\n{1}".format(oldFile, newFile), pos) |
346 else: |
346 else: |
415 else: |
415 else: |
416 fname = self.vcs.splitPath(self.filename)[0] |
416 fname = self.vcs.splitPath(self.filename)[0] |
417 |
417 |
418 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( |
418 fname, selectedFilter = E5FileDialog.getSaveFileNameAndFilter( |
419 self, |
419 self, |
420 self.trUtf8("Save Diff"), |
420 self.tr("Save Diff"), |
421 fname, |
421 fname, |
422 self.trUtf8("Patch Files (*.diff)"), |
422 self.tr("Patch Files (*.diff)"), |
423 None, |
423 None, |
424 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) |
424 E5FileDialog.Options(E5FileDialog.DontConfirmOverwrite)) |
425 |
425 |
426 if not fname: |
426 if not fname: |
427 return # user aborted |
427 return # user aborted |
432 if ex: |
432 if ex: |
433 fname += ex |
433 fname += ex |
434 if QFileInfo(fname).exists(): |
434 if QFileInfo(fname).exists(): |
435 res = E5MessageBox.yesNo( |
435 res = E5MessageBox.yesNo( |
436 self, |
436 self, |
437 self.trUtf8("Save Diff"), |
437 self.tr("Save Diff"), |
438 self.trUtf8("<p>The patch file <b>{0}</b> already exists." |
438 self.tr("<p>The patch file <b>{0}</b> already exists." |
439 " Overwrite it?</p>").format(fname), |
439 " Overwrite it?</p>").format(fname), |
440 icon=E5MessageBox.Warning) |
440 icon=E5MessageBox.Warning) |
441 if not res: |
441 if not res: |
442 return |
442 return |
443 fname = Utilities.toNativeSeparators(fname) |
443 fname = Utilities.toNativeSeparators(fname) |
444 |
444 |
447 f = open(fname, "w", encoding="utf-8", newline="") |
447 f = open(fname, "w", encoding="utf-8", newline="") |
448 f.write(eol.join(self.contents.toPlainText().splitlines())) |
448 f.write(eol.join(self.contents.toPlainText().splitlines())) |
449 f.close() |
449 f.close() |
450 except IOError as why: |
450 except IOError as why: |
451 E5MessageBox.critical( |
451 E5MessageBox.critical( |
452 self, self.trUtf8('Save Diff'), |
452 self, self.tr('Save Diff'), |
453 self.trUtf8( |
453 self.tr( |
454 '<p>The patch file <b>{0}</b> could not be saved.' |
454 '<p>The patch file <b>{0}</b> could not be saved.' |
455 '<br>Reason: {1}</p>') |
455 '<br>Reason: {1}</p>') |
456 .format(fname, str(why))) |
456 .format(fname, str(why))) |
457 |
457 |
458 def __showError(self, msg): |
458 def __showError(self, msg): |