Plugins/VcsPlugins/vcsSubversion/subversion.py

changeset 1888
03f59d88a62d
parent 1880
dbd4d7698310
child 1890
6523d664e754
--- a/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sat Jun 02 17:41:24 2012 +0200
+++ b/Plugins/VcsPlugins/vcsSubversion/subversion.py	Sun Jun 03 12:51:15 2012 +0200
@@ -43,6 +43,7 @@
 from .SvnRelocateDialog import SvnRelocateDialog
 from .SvnUrlSelectionDialog import SvnUrlSelectionDialog
 from .SvnRepoBrowserDialog import SvnRepoBrowserDialog
+from .SvnChangeListsDialog import SvnChangeListsDialog
 from .SvnStatusMonitorThread import SvnStatusMonitorThread
 from .SvnUtilities import getConfigPath, amendConfig, createDefaultConfig
 
@@ -1929,11 +1930,12 @@
         @param names name or list of names of file or directory to add
             (string)
         """
-        clname, ok = QInputDialog.getText(
+        clname, ok = QInputDialog.getItem(
             None,
             self.trUtf8("Add to changelist"),
             self.trUtf8("Enter name of the changelist:"),
-            QLineEdit.Normal)
+            sorted(self.svnGetChangelists()),
+            0, True)
         if not ok or not clname:
             return
 
@@ -1953,6 +1955,55 @@
         res = dia.startProcess(args, dname)
         if res:
             dia.exec_()
+        
+    def svnShowChangelists(self, path):
+        """
+        Public method used to inspect the change lists defined for the project.
+        
+        @param path directory name to show change lists for (string)
+        """
+        self.changeLists = SvnChangeListsDialog(self)
+        self.changeLists.show()
+        QApplication.processEvents()
+        self.changeLists.start(path)
+        
+    def svnGetChangelists(self):
+        """
+        Public method to get a list of all defined change lists.
+        
+        @return list of defined change list names (list of strings)
+        """
+        changelists = []
+        rx_changelist = \
+            QRegExp('--- \\S+ .([\\w\\s]+).:\\s*')
+            # three dashes, Changelist (translated), quote,
+            # changelist name, quote, :
+        
+        args = []
+        args.append("status")
+        args.append("--non-interactive")
+        args.append(".")
+        
+        ppath = e5App().getObject("Project").getProjectPath()
+        process = QProcess()
+        process.setWorkingDirectory(ppath)
+        process.start('svn', args)
+        procStarted = process.waitForStarted()
+        if procStarted:
+            finished = process.waitForFinished(30000)
+            if finished and process.exitCode() == 0:
+                output = \
+                    str(process.readAllStandardOutput(),
+                        Preferences.getSystem("IOEncoding"),
+                        'replace')
+                if output:
+                    for line in output.splitlines():
+                        if rx_changelist.exactMatch(line):
+                            changelist = rx_changelist.cap(1)
+                            if changelist not in changelists:
+                                changelists.append(changelist)
+        
+        return changelists
 
     ############################################################################
     ## Private Subversion specific methods are below.

eric ide

mercurial