Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.py

changeset 5283
06423d65a2b8
child 5291
e93d14b48c34
diff -r 898b0dda21e1 -r 06423d65a2b8 Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/VcsPlugins/vcsMercurial/HisteditExtension/HgHisteditCommitEditor.py	Sat Oct 29 19:28:04 2016 +0200
@@ -0,0 +1,124 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (c) 2016 Detlev Offenbach <detlev@die-offenbachs.de>
+#
+
+"""
+Module implementing a dialog to edit the commit message of a revision.
+"""
+
+from PyQt5.QtCore import pyqtSlot, QCoreApplication
+from PyQt5.QtWidgets import QDialog
+
+from E5Gui import E5MessageBox
+
+from Ui_HgHisteditCommitEditor import Ui_HgHisteditCommitEditor
+
+import Preferences
+
+
+class HgHisteditCommitEditor(QDialog, Ui_HgHisteditCommitEditor):
+    """
+    Class implementing a dialog to edit the commit message of a revision.
+    """
+    def __init__(self, fileName, parent=None):
+        """
+        Constructor
+        
+        @param fileName name of the file containing the commit message
+            to be edited
+        @type str
+        @param parent reference to the parent widget
+        @type QWidget
+        """
+        super(HgHisteditCommitEditor, self).__init__(parent)
+        self.setupUi(self)
+        
+        self.__fileName = fileName
+        self.__readFile()
+        
+        self.recentCommitMessages = Preferences.toList(
+            Preferences.Prefs.settings.value('Mercurial/Commits'))
+        self.recentComboBox.clear()
+        self.recentComboBox.addItem("")
+        self.recentComboBox.addItems(self.recentCommitMessages)
+    
+    def __readFile(self):
+        """
+        Private method to read the file containing the commit message and
+        populate the dialog.
+        """
+        try:
+            f = open(self.__fileName, "r")
+            txt = f.read()
+            f.close()
+        except (IOError, OSError) as err:
+            E5MessageBox.critical(
+                self,
+                self.tr("Edit Commit Message"),
+                self.tr("""<p>The file <b>{0}</b> could not be read.</p>"""
+                        """<p>Reason: {1}</p>""").format(
+                    self.__fileName, str(err)))
+            self.on_buttonBox_rejected()
+            return
+        
+        msgLines = []
+        infoLines = []
+        for line in txt.splitlines():
+            if line.startswith("#"):
+                infoLines.append(line[1:].lstrip())
+            elif line.startswith("HG:"):
+                infoLines.append(line[3:].lstrip())
+            else:
+                msgLines.append(line)
+        
+        # remove empty lines at end of message
+        for row in range(len(msgLines) - 1, -1, -1):
+            if msgLines[row] == "":
+                del msgLines[row]
+            else:
+                break
+        
+        self.messageEdit.setPlainText("\n".join(msgLines))
+        self.infoEdit.setPlainText("\n".join(infoLines))
+    
+    @pyqtSlot()
+    def on_buttonBox_accepted(self):
+        """
+        Private slot called by the buttonBox accepted signal.
+        """
+        msg = self.messageEdit.toPlainText()
+        try:
+            f = open(self.__fileName, "w")
+            f.write(msg)
+            f.close()
+        except (IOError, OSError) as err:
+            E5MessageBox.critical(
+                self,
+                self.tr("Edit Commit Message"),
+                self.tr("""<p>The file <b>{0}</b> could not be read.</p>"""
+                        """<p>Reason: {1}</p>""").format(
+                    self.__fileName, str(err)))
+            self.on_buttonBox_rejected()
+            return
+        
+        self.close()
+        QCoreApplication.exit(0)
+    
+    @pyqtSlot()
+    def on_buttonBox_rejected(self):
+        """
+        Private slot called by the buttonBox rejected signal.
+        """
+        self.close()
+        QCoreApplication.exit(1)
+    
+    @pyqtSlot(str)
+    def on_recentComboBox_activated(self, txt):
+        """
+        Private slot to select a commit message from recent ones.
+        
+        @param txt text of the selected entry (string)
+        """
+        if txt:
+            self.messageEdit.setPlainText(txt)

eric ide

mercurial