52 |
52 |
53 self.fromDate.setDisplayFormat("yyyy-MM-dd") |
53 self.fromDate.setDisplayFormat("yyyy-MM-dd") |
54 self.toDate.setDisplayFormat("yyyy-MM-dd") |
54 self.toDate.setDisplayFormat("yyyy-MM-dd") |
55 self.fromDate.setDate(QDate.currentDate()) |
55 self.fromDate.setDate(QDate.currentDate()) |
56 self.toDate.setDate(QDate.currentDate()) |
56 self.toDate.setDate(QDate.currentDate()) |
57 self.fieldCombo.setCurrentIndex(self.fieldCombo.findText(self.trUtf8("Message"))) |
57 self.fieldCombo.setCurrentIndex( |
58 self.limitSpinBox.setValue(self.vcs.getPlugin().getPreferences("LogLimit")) |
58 self.fieldCombo.findText(self.trUtf8("Message"))) |
59 self.stopCheckBox.setChecked(self.vcs.getPlugin().getPreferences("StopLogOnCopy")) |
59 self.limitSpinBox.setValue( |
|
60 self.vcs.getPlugin().getPreferences("LogLimit")) |
|
61 self.stopCheckBox.setChecked( |
|
62 self.vcs.getPlugin().getPreferences("StopLogOnCopy")) |
60 |
63 |
61 self.__messageRole = Qt.UserRole |
64 self.__messageRole = Qt.UserRole |
62 self.__changesRole = Qt.UserRole + 1 |
65 self.__changesRole = Qt.UserRole + 1 |
63 |
66 |
64 self.process = QProcess() |
67 self.process = QProcess() |
66 self.process.readyReadStandardOutput.connect(self.__readStdout) |
69 self.process.readyReadStandardOutput.connect(self.__readStdout) |
67 self.process.readyReadStandardError.connect(self.__readStderr) |
70 self.process.readyReadStandardError.connect(self.__readStderr) |
68 |
71 |
69 self.rx_sep1 = QRegExp('\\-+\\s*') |
72 self.rx_sep1 = QRegExp('\\-+\\s*') |
70 self.rx_sep2 = QRegExp('=+\\s*') |
73 self.rx_sep2 = QRegExp('=+\\s*') |
71 self.rx_rev1 = QRegExp('rev ([0-9]+): ([^|]*) \| ([^|]*) \| ([0-9]+) .*') |
74 self.rx_rev1 = QRegExp( |
|
75 'rev ([0-9]+): ([^|]*) \| ([^|]*) \| ([0-9]+) .*') |
72 # "rev" followed by one or more decimals followed by a colon followed |
76 # "rev" followed by one or more decimals followed by a colon followed |
73 # anything up to " | " (twice) followed by one or more decimals followed |
77 # anything up to " | " (twice) followed by one or more decimals |
74 # by anything |
78 # followed by anything |
75 self.rx_rev2 = QRegExp('r([0-9]+) \| ([^|]*) \| ([^|]*) \| ([0-9]+) .*') |
79 self.rx_rev2 = QRegExp( |
|
80 'r([0-9]+) \| ([^|]*) \| ([^|]*) \| ([0-9]+) .*') |
76 # "r" followed by one or more decimals followed by " | " followed |
81 # "r" followed by one or more decimals followed by " | " followed |
77 # anything up to " | " (twice) followed by one or more decimals followed |
82 # anything up to " | " (twice) followed by one or more decimals |
78 # by anything |
83 # followed by anything |
79 self.rx_flags1 = QRegExp(r""" ([ADM])\s(.*)\s+\(\w+\s+(.*):([0-9]+)\)\s*""") |
84 self.rx_flags1 = QRegExp( |
|
85 r""" ([ADM])\s(.*)\s+\(\w+\s+(.*):([0-9]+)\)\s*""") |
80 # three blanks followed by A or D or M followed by path followed by |
86 # three blanks followed by A or D or M followed by path followed by |
81 # path copied from followed by copied from revision |
87 # path copied from followed by copied from revision |
82 self.rx_flags2 = QRegExp(' ([ADM]) (.*)\\s*') |
88 self.rx_flags2 = QRegExp(' ([ADM]) (.*)\\s*') |
83 # three blanks followed by A or D or M followed by path |
89 # three blanks followed by A or D or M followed by path |
84 |
90 |
279 self.__processBuffer() |
285 self.__processBuffer() |
280 self.__finish() |
286 self.__finish() |
281 |
287 |
282 def __finish(self): |
288 def __finish(self): |
283 """ |
289 """ |
284 Private slot called when the process finished or the user pressed the button. |
290 Private slot called when the process finished or the user pressed the |
|
291 button. |
285 """ |
292 """ |
286 if self.process is not None and \ |
293 if self.process is not None and \ |
287 self.process.state() != QProcess.NotRunning: |
294 self.process.state() != QProcess.NotRunning: |
288 self.process.terminate() |
295 self.process.terminate() |
289 QTimer.singleShot(2000, self.process.kill) |
296 QTimer.singleShot(2000, self.process.kill) |
339 elif self.rx_sep1.exactMatch(s) or self.rx_sep2.exactMatch(s): |
346 elif self.rx_sep1.exactMatch(s) or self.rx_sep2.exactMatch(s): |
340 if len(log) > 1: |
347 if len(log) > 1: |
341 self.__generateLogItem(log["author"], log["date"], |
348 self.__generateLogItem(log["author"], log["date"], |
342 log["message"], log["revision"], changedPaths) |
349 log["message"], log["revision"], changedPaths) |
343 dt = QDate.fromString(log["date"], Qt.ISODate) |
350 dt = QDate.fromString(log["date"], Qt.ISODate) |
344 if not self.__maxDate.isValid() and not self.__minDate.isValid(): |
351 if not self.__maxDate.isValid() and \ |
|
352 not self.__minDate.isValid(): |
345 self.__maxDate = dt |
353 self.__maxDate = dt |
346 self.__minDate = dt |
354 self.__minDate = dt |
347 else: |
355 else: |
348 if self.__maxDate < dt: |
356 if self.__maxDate < dt: |
349 self.__maxDate = dt |
357 self.__maxDate = dt |
414 |
422 |
415 @param rev1 first revision number (integer) |
423 @param rev1 first revision number (integer) |
416 @param rev2 second revision number (integer) |
424 @param rev2 second revision number (integer) |
417 """ |
425 """ |
418 if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked(): |
426 if self.sbsCheckBox.isEnabled() and self.sbsCheckBox.isChecked(): |
419 self.vcs.svnSbsDiff(self.filename, revisions=(str(rev1), str(rev2))) |
427 self.vcs.svnSbsDiff(self.filename, |
|
428 revisions=(str(rev1), str(rev2))) |
420 else: |
429 else: |
421 if self.diff is None: |
430 if self.diff is None: |
422 from .SvnDiffDialog import SvnDiffDialog |
431 from .SvnDiffDialog import SvnDiffDialog |
423 self.diff = SvnDiffDialog(self.vcs) |
432 self.diff = SvnDiffDialog(self.vcs) |
424 self.diff.show() |
433 self.diff.show() |
457 change["copyfrom_path"], change["copyfrom_revision"]) |
466 change["copyfrom_path"], change["copyfrom_revision"]) |
458 self.__resizeColumnsFiles() |
467 self.__resizeColumnsFiles() |
459 self.__resortFiles() |
468 self.__resortFiles() |
460 |
469 |
461 self.diffPreviousButton.setEnabled( |
470 self.diffPreviousButton.setEnabled( |
462 current != self.logTree.topLevelItem(self.logTree.topLevelItemCount() - 1)) |
471 current != self.logTree.topLevelItem( |
|
472 self.logTree.topLevelItemCount() - 1)) |
463 |
473 |
464 @pyqtSlot() |
474 @pyqtSlot() |
465 def on_logTree_itemSelectionChanged(self): |
475 def on_logTree_itemSelectionChanged(self): |
466 """ |
476 """ |
467 Private slot called, when the selection has changed. |
477 Private slot called, when the selection has changed. |
468 """ |
478 """ |
469 self.diffRevisionsButton.setEnabled(len(self.logTree.selectedItems()) == 2) |
479 self.diffRevisionsButton.setEnabled( |
|
480 len(self.logTree.selectedItems()) == 2) |
470 |
481 |
471 @pyqtSlot() |
482 @pyqtSlot() |
472 def on_nextButton_clicked(self): |
483 def on_nextButton_clicked(self): |
473 """ |
484 """ |
474 Private slot to handle the Next button. |
485 Private slot to handle the Next button. |
485 if itm is None: |
496 if itm is None: |
486 self.diffPreviousButton.setEnabled(False) |
497 self.diffPreviousButton.setEnabled(False) |
487 return |
498 return |
488 rev2 = int(itm.text(0)) |
499 rev2 = int(itm.text(0)) |
489 |
500 |
490 itm = self.logTree.topLevelItem(self.logTree.indexOfTopLevelItem(itm) + 1) |
501 itm = self.logTree.topLevelItem( |
|
502 self.logTree.indexOfTopLevelItem(itm) + 1) |
491 if itm is None: |
503 if itm is None: |
492 self.diffPreviousButton.setEnabled(False) |
504 self.diffPreviousButton.setEnabled(False) |
493 return |
505 return |
494 rev1 = int(itm.text(0)) |
506 rev1 = int(itm.text(0)) |
495 |
507 |
559 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
571 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
560 elif txt == self.trUtf8("Revision"): |
572 elif txt == self.trUtf8("Revision"): |
561 fieldIndex = 0 |
573 fieldIndex = 0 |
562 txt = self.rxEdit.text() |
574 txt = self.rxEdit.text() |
563 if txt.startswith("^"): |
575 if txt.startswith("^"): |
564 searchRx = QRegExp("^\s*{0}".format(txt[1:]), Qt.CaseInsensitive) |
576 searchRx = QRegExp( |
|
577 "^\s*{0}".format(txt[1:]), Qt.CaseInsensitive) |
565 else: |
578 else: |
566 searchRx = QRegExp(txt, Qt.CaseInsensitive) |
579 searchRx = QRegExp(txt, Qt.CaseInsensitive) |
567 else: |
580 else: |
568 fieldIndex = 3 |
581 fieldIndex = 3 |
569 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |
582 searchRx = QRegExp(self.rxEdit.text(), Qt.CaseInsensitive) |