eric6/Plugins/VcsPlugins/vcsPySvn/SvnDiffDialog.py

changeset 7771
787a6b3f8c9f
parent 7628
f904d0eef264
child 7774
9eed155411f0
equal deleted inserted replaced
7770:49f3377aebf1 7771:787a6b3f8c9f
12 import os 12 import os
13 13
14 import pysvn 14 import pysvn
15 15
16 from PyQt5.QtCore import QMutexLocker, QFileInfo, QDateTime, Qt, pyqtSlot 16 from PyQt5.QtCore import QMutexLocker, QFileInfo, QDateTime, Qt, pyqtSlot
17 from PyQt5.QtGui import QCursor, QTextCursor 17 from PyQt5.QtGui import QTextCursor
18 from PyQt5.QtWidgets import QWidget, QApplication, QDialogButtonBox 18 from PyQt5.QtWidgets import QWidget, QDialogButtonBox
19 19
20 from E5Gui.E5Application import e5App 20 from E5Gui.E5Application import e5App
21 from E5Gui import E5MessageBox, E5FileDialog 21 from E5Gui import E5MessageBox, E5FileDialog
22 from E5Gui.E5OverrideCursor import E5OverrideCursor
22 23
23 from .SvnDialogMixin import SvnDialogMixin 24 from .SvnDialogMixin import SvnDialogMixin
24 from .Ui_SvnDiffDialog import Ui_SvnDiffDialog 25 from .Ui_SvnDiffDialog import Ui_SvnDiffDialog
25 from .SvnDiffHighlighter import SvnDiffHighlighter 26 from .SvnDiffHighlighter import SvnDiffHighlighter
26 27
136 self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True) 137 self.buttonBox.button(QDialogButtonBox.Cancel).setDefault(True)
137 138
138 self._reset() 139 self._reset()
139 self.errorGroup.hide() 140 self.errorGroup.hide()
140 141
141 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
142 QApplication.processEvents()
143 self.filename = fn 142 self.filename = fn
144 143
145 self.contents.clear() 144 self.contents.clear()
146 self.highlighter.regenerateRules() 145 self.highlighter.regenerateRules()
147 self.paras = 0 146 self.paras = 0
198 dname, fnames = self.vcs.splitPathList(fn) 197 dname, fnames = self.vcs.splitPathList(fn)
199 else: 198 else:
200 dname, fname = self.vcs.splitPath(fn) 199 dname, fname = self.vcs.splitPath(fn)
201 fnames = [fname] 200 fnames = [fname]
202 201
203 locker = QMutexLocker(self.vcs.vcsExecutionMutex) 202 with E5OverrideCursor():
204 cwd = os.getcwd() 203 locker = QMutexLocker(self.vcs.vcsExecutionMutex)
205 os.chdir(dname) 204 cwd = os.getcwd()
206 try: 205 os.chdir(dname)
207 dname = e5App().getObject('Project').getRelativePath(dname) 206 try:
208 if dname: 207 dname = e5App().getObject('Project').getRelativePath(dname)
209 dname += "/" 208 if dname:
210 for name in fnames: 209 dname += "/"
211 self.__showError( 210 for name in fnames:
212 self.tr("Processing file '{0}'...\n").format(name)) 211 self.__showError(
213 if urls is not None: 212 self.tr("Processing file '{0}'...\n").format(name))
214 url1 = "{0}/{1}{2}".format(urls[0], dname, name) 213 if urls is not None:
215 url2 = "{0}/{1}{2}".format(urls[1], dname, name) 214 url1 = "{0}/{1}{2}".format(urls[0], dname, name)
216 if summary: 215 url2 = "{0}/{1}{2}".format(urls[1], dname, name)
217 diff_summary = self.client.diff_summarize( 216 if summary:
218 url1, revision1=rev1, 217 diff_summary = self.client.diff_summarize(
219 url_or_path2=url2, revision2=rev2, 218 url1, revision1=rev1,
220 recurse=recurse) 219 url_or_path2=url2, revision2=rev2,
221 diff_list = [] 220 recurse=recurse)
222 for diff_sum in diff_summary: 221 diff_list = []
223 path = diff_sum['path'] 222 for diff_sum in diff_summary:
224 diff_list.append("{0} {1}".format( 223 path = diff_sum['path']
225 self.__getDiffSummaryKind( 224 diff_list.append("{0} {1}".format(
226 diff_sum['summarize_kind']), 225 self.__getDiffSummaryKind(
227 path)) 226 diff_sum['summarize_kind']),
228 diffText = os.linesep.join(diff_list) 227 path))
228 diffText = os.linesep.join(diff_list)
229 else:
230 diffText = self.client.diff(
231 tmpdir,
232 url1, revision1=rev1,
233 url_or_path2=url2, revision2=rev2,
234 recurse=recurse)
229 else: 235 else:
230 diffText = self.client.diff( 236 if pegRev is not None:
231 tmpdir, 237 diffText = self.client.diff_peg(
232 url1, revision1=rev1, 238 tmpdir, name,
233 url_or_path2=url2, revision2=rev2, 239 peg_revision=self.__getVersionArg(pegRev),
234 recurse=recurse) 240 revision_start=rev1, revision_end=rev2,
235 else: 241 recurse=recurse)
236 if pegRev is not None: 242 else:
237 diffText = self.client.diff_peg( 243 diffText = self.client.diff(
238 tmpdir, name, 244 tmpdir, name,
239 peg_revision=self.__getVersionArg(pegRev), 245 revision1=rev1, revision2=rev2, recurse=recurse)
240 revision_start=rev1, revision_end=rev2, 246 counter = 0
241 recurse=recurse) 247 for line in diffText.splitlines():
242 else: 248 if line.startswith("--- ") or line.startswith("+++ "):
243 diffText = self.client.diff( 249 self.__processFileLine(line)
244 tmpdir, name, 250
245 revision1=rev1, revision2=rev2, recurse=recurse) 251 self.__appendText("{0}{1}".format(line, os.linesep))
246 counter = 0 252 counter += 1
247 for line in diffText.splitlines(): 253 if counter == 30:
248 if line.startswith("--- ") or line.startswith("+++ "): 254 # check for cancel every 30 lines
249 self.__processFileLine(line) 255 counter = 0
250 256 if self._clientCancelCallback():
251 self.__appendText("{0}{1}".format(line, os.linesep)) 257 break
252 counter += 1 258 if self._clientCancelCallback():
253 if counter == 30: 259 break
254 # check for cancel every 30 lines 260 except pysvn.ClientError as e:
255 counter = 0 261 self.__showError(e.args[0])
256 if self._clientCancelCallback(): 262 locker.unlock()
257 break 263 os.chdir(cwd)
258 if self._clientCancelCallback():
259 break
260 except pysvn.ClientError as e:
261 self.__showError(e.args[0])
262 locker.unlock()
263 os.chdir(cwd)
264 self.__finish() 264 self.__finish()
265 265
266 if self.paras == 0: 266 if self.paras == 0:
267 self.contents.setPlainText(self.tr('There is no difference.')) 267 self.contents.setPlainText(self.tr('There is no difference.'))
268 268
307 307
308 def __finish(self): 308 def __finish(self):
309 """ 309 """
310 Private slot called when the user pressed the button. 310 Private slot called when the user pressed the button.
311 """ 311 """
312 QApplication.restoreOverrideCursor()
313
314 self.refreshButton.setEnabled(True) 312 self.refreshButton.setEnabled(True)
315 self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) 313 self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
316 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) 314 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
317 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) 315 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
318 self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) 316 self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)

eric ide

mercurial