10 import os |
10 import os |
11 |
11 |
12 import pysvn |
12 import pysvn |
13 |
13 |
14 from PyQt4.QtCore import QMutexLocker, QDate, QRegExp, Qt, pyqtSlot |
14 from PyQt4.QtCore import QMutexLocker, QDate, QRegExp, Qt, pyqtSlot |
15 from PyQt4.QtGui import QCursor, QHeaderView, QDialog, QApplication, QDialogButtonBox, \ |
15 from PyQt4.QtGui import QCursor, QHeaderView, QDialog, QApplication, \ |
16 QTreeWidgetItem |
16 QDialogButtonBox, QTreeWidgetItem |
17 |
17 |
18 from E5Gui import E5MessageBox |
18 from E5Gui import E5MessageBox |
19 |
19 |
20 from .SvnUtilities import formatTime, dateFromTime_t |
20 from .SvnUtilities import formatTime, dateFromTime_t |
21 from .SvnDialogMixin import SvnDialogMixin |
21 from .SvnDialogMixin import SvnDialogMixin |
56 |
56 |
57 self.fromDate.setDisplayFormat("yyyy-MM-dd") |
57 self.fromDate.setDisplayFormat("yyyy-MM-dd") |
58 self.toDate.setDisplayFormat("yyyy-MM-dd") |
58 self.toDate.setDisplayFormat("yyyy-MM-dd") |
59 self.fromDate.setDate(QDate.currentDate()) |
59 self.fromDate.setDate(QDate.currentDate()) |
60 self.toDate.setDate(QDate.currentDate()) |
60 self.toDate.setDate(QDate.currentDate()) |
61 self.fieldCombo.setCurrentIndex(self.fieldCombo.findText(self.trUtf8("Message"))) |
61 self.fieldCombo.setCurrentIndex( |
62 self.limitSpinBox.setValue(self.vcs.getPlugin().getPreferences("LogLimit")) |
62 self.fieldCombo.findText(self.trUtf8("Message"))) |
63 self.stopCheckBox.setChecked(self.vcs.getPlugin().getPreferences("StopLogOnCopy")) |
63 self.limitSpinBox.setValue( |
|
64 self.vcs.getPlugin().getPreferences("LogLimit")) |
|
65 self.stopCheckBox.setChecked( |
|
66 self.vcs.getPlugin().getPreferences("StopLogOnCopy")) |
64 |
67 |
65 self.__messageRole = Qt.UserRole |
68 self.__messageRole = Qt.UserRole |
66 self.__changesRole = Qt.UserRole + 1 |
69 self.__changesRole = Qt.UserRole + 1 |
67 |
70 |
68 self.flags = { |
71 self.flags = { |
163 else: |
166 else: |
164 copyPath = changedPath["copyfrom_path"] |
167 copyPath = changedPath["copyfrom_path"] |
165 if changedPath["copyfrom_revision"] is None: |
168 if changedPath["copyfrom_revision"] is None: |
166 copyRev = "" |
169 copyRev = "" |
167 else: |
170 else: |
168 copyRev = "{0:7d}".format(changedPath["copyfrom_revision"].number) |
171 copyRev = "{0:7d}".format( |
|
172 changedPath["copyfrom_revision"].number) |
169 change = { |
173 change = { |
170 "action": changedPath["action"], |
174 "action": changedPath["action"], |
171 "path": changedPath["path"], |
175 "path": changedPath["path"], |
172 "copyfrom_path": copyPath, |
176 "copyfrom_path": copyPath, |
173 "copyfrom_revision": copyRev, |
177 "copyfrom_revision": copyRev, |
217 limit = self.limitSpinBox.value() |
221 limit = self.limitSpinBox.value() |
218 if startRev is None: |
222 if startRev is None: |
219 start = pysvn.Revision(pysvn.opt_revision_kind.head) |
223 start = pysvn.Revision(pysvn.opt_revision_kind.head) |
220 else: |
224 else: |
221 try: |
225 try: |
222 start = pysvn.Revision(pysvn.opt_revision_kind.number, int(startRev)) |
226 start = pysvn.Revision(pysvn.opt_revision_kind.number, |
|
227 int(startRev)) |
223 except TypeError: |
228 except TypeError: |
224 start = pysvn.Revision(pysvn.opt_revision_kind.head) |
229 start = pysvn.Revision(pysvn.opt_revision_kind.head) |
225 |
230 |
226 locker = QMutexLocker(self.vcs.vcsExecutionMutex) |
231 locker = QMutexLocker(self.vcs.vcsExecutionMutex) |
227 cwd = os.getcwd() |
232 cwd = os.getcwd() |
253 |
258 |
254 for log in logs: |
259 for log in logs: |
255 self.__generateLogItem(log["author"], log["date"], |
260 self.__generateLogItem(log["author"], log["date"], |
256 log["message"], log["revision"], log['changed_paths']) |
261 log["message"], log["revision"], log['changed_paths']) |
257 dt = dateFromTime_t(log["date"]) |
262 dt = dateFromTime_t(log["date"]) |
258 if not self.__maxDate.isValid() and not self.__minDate.isValid(): |
263 if not self.__maxDate.isValid() and \ |
|
264 not self.__minDate.isValid(): |
259 self.__maxDate = dt |
265 self.__maxDate = dt |
260 self.__minDate = dt |
266 self.__minDate = dt |
261 else: |
267 else: |
262 if self.__maxDate < dt: |
268 if self.__maxDate < dt: |
263 self.__maxDate = dt |
269 self.__maxDate = dt |
319 @param rev1 first revision number (integer) |
325 @param rev1 first revision number (integer) |
320 @param rev2 second revision number (integer) |
326 @param rev2 second revision number (integer) |
321 @param peg_rev revision number to use as a reference (integer) |
327 @param peg_rev revision number to use as a reference (integer) |
322 """ |
328 """ |
323 if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked(): |
329 if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked(): |
324 self.vcs.svnSbsDiff(self.filename, revisions=(str(rev1), str(rev2))) |
330 self.vcs.svnSbsDiff(self.filename, |
|
331 revisions=(str(rev1), str(rev2))) |
325 else: |
332 else: |
326 if self.diff is None: |
333 if self.diff is None: |
327 from .SvnDiffDialog import SvnDiffDialog |
334 from .SvnDiffDialog import SvnDiffDialog |
328 self.diff = SvnDiffDialog(self.vcs) |
335 self.diff = SvnDiffDialog(self.vcs) |
329 self.diff.show() |
336 self.diff.show() |
361 change["copyfrom_path"], change["copyfrom_revision"]) |
368 change["copyfrom_path"], change["copyfrom_revision"]) |
362 self.__resizeColumnsFiles() |
369 self.__resizeColumnsFiles() |
363 self.__resortFiles() |
370 self.__resortFiles() |
364 |
371 |
365 self.diffPreviousButton.setEnabled( |
372 self.diffPreviousButton.setEnabled( |
366 current != self.logTree.topLevelItem(self.logTree.topLevelItemCount() - 1)) |
373 current != self.logTree.topLevelItem( |
|
374 self.logTree.topLevelItemCount() - 1)) |
367 |
375 |
368 @pyqtSlot() |
376 @pyqtSlot() |
369 def on_logTree_itemSelectionChanged(self): |
377 def on_logTree_itemSelectionChanged(self): |
370 """ |
378 """ |
371 Private slot called, when the selection has changed. |
379 Private slot called, when the selection has changed. |
372 """ |
380 """ |
373 self.diffRevisionsButton.setEnabled(len(self.logTree.selectedItems()) == 2) |
381 self.diffRevisionsButton.setEnabled( |
|
382 len(self.logTree.selectedItems()) == 2) |
374 |
383 |
375 @pyqtSlot() |
384 @pyqtSlot() |
376 def on_nextButton_clicked(self): |
385 def on_nextButton_clicked(self): |
377 """ |
386 """ |
378 Private slot to handle the Next button. |
387 Private slot to handle the Next button. |
395 if itm is None: |
404 if itm is None: |
396 self.diffPreviousButton.setEnabled(False) |
405 self.diffPreviousButton.setEnabled(False) |
397 return |
406 return |
398 rev2 = int(itm.text(0)) |
407 rev2 = int(itm.text(0)) |
399 |
408 |
400 itm = self.logTree.topLevelItem(self.logTree.indexOfTopLevelItem(itm) + 1) |
409 itm = self.logTree.topLevelItem( |
|
410 self.logTree.indexOfTopLevelItem(itm) + 1) |
401 if itm is None: |
411 if itm is None: |
402 self.diffPreviousButton.setEnabled(False) |
412 self.diffPreviousButton.setEnabled(False) |
403 return |
413 return |
404 rev1 = int(itm.text(0)) |
414 rev1 = int(itm.text(0)) |
405 |
415 |
485 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
495 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
486 elif txt == self.trUtf8("Revision"): |
496 elif txt == self.trUtf8("Revision"): |
487 fieldIndex = 0 |
497 fieldIndex = 0 |
488 txt = self.rxEdit.text() |
498 txt = self.rxEdit.text() |
489 if txt.startswith("^"): |
499 if txt.startswith("^"): |
490 searchRx = QRegExp("^\s*{0}".format(txt[1:]), Qt.CaseInsensitive) |
500 searchRx = QRegExp( |
|
501 "^\s*{0}".format(txt[1:]), Qt.CaseInsensitive) |
491 else: |
502 else: |
492 searchRx = QRegExp(txt, Qt.CaseInsensitive) |
503 searchRx = QRegExp(txt, Qt.CaseInsensitive) |
493 else: |
504 else: |
494 fieldIndex = 3 |
505 fieldIndex = 3 |
495 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
506 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |