eric6/Plugins/VcsPlugins/vcsPySvn/SvnLogBrowserDialog.py

changeset 7771
787a6b3f8c9f
parent 7533
88261c96484b
child 7774
9eed155411f0
equal deleted inserted replaced
7770:49f3377aebf1 7771:787a6b3f8c9f
11 import os 11 import os
12 12
13 import pysvn 13 import pysvn
14 14
15 from PyQt5.QtCore import QMutexLocker, QDate, QRegExp, Qt, pyqtSlot, QPoint 15 from PyQt5.QtCore import QMutexLocker, QDate, QRegExp, Qt, pyqtSlot, QPoint
16 from PyQt5.QtGui import QCursor
17 from PyQt5.QtWidgets import ( 16 from PyQt5.QtWidgets import (
18 QHeaderView, QWidget, QApplication, QDialogButtonBox, QTreeWidgetItem 17 QHeaderView, QWidget, QApplication, QDialogButtonBox, QTreeWidgetItem
19 ) 18 )
20 19
21 from E5Gui import E5MessageBox 20 from E5Gui import E5MessageBox
21 from E5Gui.E5OverrideCursor import E5OverrideCursor
22 22
23 from .SvnUtilities import formatTime, dateFromTime_t 23 from .SvnUtilities import formatTime, dateFromTime_t
24 from .SvnDialogMixin import SvnDialogMixin 24 from .SvnDialogMixin import SvnDialogMixin
25 25
26 from .Ui_SvnLogBrowserDialog import Ui_SvnLogBrowserDialog 26 from .Ui_SvnLogBrowserDialog import Ui_SvnLogBrowserDialog
262 @param startRev revision number to start from (integer, string) 262 @param startRev revision number to start from (integer, string)
263 """ 263 """
264 fetchLimit = 10 264 fetchLimit = 10
265 self._reset() 265 self._reset()
266 266
267 QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
268 QApplication.processEvents()
269
270 limit = self.limitSpinBox.value() 267 limit = self.limitSpinBox.value()
271 if startRev is None: 268 if startRev is None:
272 start = pysvn.Revision(pysvn.opt_revision_kind.head) 269 start = pysvn.Revision(pysvn.opt_revision_kind.head)
273 else: 270 else:
274 try: 271 try:
275 start = pysvn.Revision(pysvn.opt_revision_kind.number, 272 start = pysvn.Revision(pysvn.opt_revision_kind.number,
276 int(startRev)) 273 int(startRev))
277 except TypeError: 274 except TypeError:
278 start = pysvn.Revision(pysvn.opt_revision_kind.head) 275 start = pysvn.Revision(pysvn.opt_revision_kind.head)
279 276
280 locker = QMutexLocker(self.vcs.vcsExecutionMutex) 277 with E5OverrideCursor():
281 cwd = os.getcwd() 278 locker = QMutexLocker(self.vcs.vcsExecutionMutex)
282 os.chdir(self.dname) 279 cwd = os.getcwd()
283 try: 280 os.chdir(self.dname)
284 nextRev = 0 281 try:
285 fetched = 0 282 nextRev = 0
286 logs = [] 283 fetched = 0
287 while fetched < limit: 284 logs = []
288 flimit = min(fetchLimit, limit - fetched) 285 while fetched < limit:
289 if fetched == 0: 286 flimit = min(fetchLimit, limit - fetched)
290 revstart = start 287 if fetched == 0:
291 else: 288 revstart = start
292 revstart = pysvn.Revision( 289 else:
293 pysvn.opt_revision_kind.number, nextRev) 290 revstart = pysvn.Revision(
294 allLogs = self.client.log( 291 pysvn.opt_revision_kind.number, nextRev)
295 self.fname, revision_start=revstart, 292 allLogs = self.client.log(
296 discover_changed_paths=True, limit=flimit + 1, 293 self.fname, revision_start=revstart,
297 strict_node_history=self.stopCheckBox.isChecked()) 294 discover_changed_paths=True, limit=flimit + 1,
298 if len(allLogs) <= flimit or self._clientCancelCallback(): 295 strict_node_history=self.stopCheckBox.isChecked())
299 logs.extend(allLogs) 296 if len(allLogs) <= flimit or self._clientCancelCallback():
300 break 297 logs.extend(allLogs)
301 else: 298 break
302 logs.extend(allLogs[:-1]) 299 else:
303 nextRev = allLogs[-1]["revision"].number 300 logs.extend(allLogs[:-1])
304 fetched += fetchLimit 301 nextRev = allLogs[-1]["revision"].number
305 locker.unlock() 302 fetched += fetchLimit
306 303 locker.unlock()
307 for log in logs: 304
308 author = log["author"] 305 for log in logs:
309 message = log["message"] 306 author = log["author"]
310 self.__generateLogItem( 307 message = log["message"]
311 author, log["date"], message, 308 self.__generateLogItem(
312 log["revision"], log['changed_paths']) 309 author, log["date"], message,
313 dt = dateFromTime_t(log["date"]) 310 log["revision"], log['changed_paths'])
314 if ( 311 dt = dateFromTime_t(log["date"])
315 not self.__maxDate.isValid() and 312 if (
316 not self.__minDate.isValid() 313 not self.__maxDate.isValid() and
317 ): 314 not self.__minDate.isValid()
318 self.__maxDate = dt 315 ):
319 self.__minDate = dt
320 else:
321 if self.__maxDate < dt:
322 self.__maxDate = dt 316 self.__maxDate = dt
323 if self.__minDate > dt:
324 self.__minDate = dt 317 self.__minDate = dt
325 if len(logs) < limit and not self.cancelled: 318 else:
326 self.nextButton.setEnabled(False) 319 if self.__maxDate < dt:
327 self.limitSpinBox.setEnabled(False) 320 self.__maxDate = dt
328 self.__filterLogsEnabled = False 321 if self.__minDate > dt:
329 self.fromDate.setMinimumDate(self.__minDate) 322 self.__minDate = dt
330 self.fromDate.setMaximumDate(self.__maxDate) 323 if len(logs) < limit and not self.cancelled:
331 self.fromDate.setDate(self.__minDate) 324 self.nextButton.setEnabled(False)
332 self.toDate.setMinimumDate(self.__minDate) 325 self.limitSpinBox.setEnabled(False)
333 self.toDate.setMaximumDate(self.__maxDate) 326 self.__filterLogsEnabled = False
334 self.toDate.setDate(self.__maxDate) 327 self.fromDate.setMinimumDate(self.__minDate)
335 self.__filterLogsEnabled = True 328 self.fromDate.setMaximumDate(self.__maxDate)
336 329 self.fromDate.setDate(self.__minDate)
337 self.__resizeColumnsLog() 330 self.toDate.setMinimumDate(self.__minDate)
338 self.__resortLog() 331 self.toDate.setMaximumDate(self.__maxDate)
339 self.__filterLogs() 332 self.toDate.setDate(self.__maxDate)
340 except pysvn.ClientError as e: 333 self.__filterLogsEnabled = True
341 locker.unlock() 334
342 self.__showError(e.args[0]) 335 self.__resizeColumnsLog()
343 os.chdir(cwd) 336 self.__resortLog()
337 self.__filterLogs()
338 except pysvn.ClientError as e:
339 locker.unlock()
340 self.__showError(e.args[0])
341 os.chdir(cwd)
344 self.__finish() 342 self.__finish()
345 343
346 def start(self, fn, isFile=False): 344 def start(self, fn, isFile=False):
347 """ 345 """
348 Public slot to start the svn log command. 346 Public slot to start the svn log command.
368 366
369 def __finish(self): 367 def __finish(self):
370 """ 368 """
371 Private slot called when the user pressed the button. 369 Private slot called when the user pressed the button.
372 """ 370 """
373 QApplication.restoreOverrideCursor()
374
375 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True) 371 self.buttonBox.button(QDialogButtonBox.Close).setEnabled(True)
376 self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False) 372 self.buttonBox.button(QDialogButtonBox.Cancel).setEnabled(False)
377 self.buttonBox.button(QDialogButtonBox.Close).setDefault(True) 373 self.buttonBox.button(QDialogButtonBox.Close).setDefault(True)
378 374
379 self._cancel() 375 self._cancel()

eric ide

mercurial