Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py

changeset 1017
919147f2b518
parent 1011
0b118aefae5b
child 1018
949812411ab8
--- a/Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py	Sat May 07 13:37:58 2011 +0200
+++ b/Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py	Sat May 07 17:56:31 2011 +0200
@@ -9,7 +9,7 @@
 
 import os
 
-from PyQt4.QtCore import QObject
+from PyQt4.QtCore import QObject, QProcess
 from PyQt4.QtGui import QDialog, QInputDialog
 
 from ..HgDialog import HgDialog
@@ -18,6 +18,8 @@
 from .HgBookmarkDialog import HgBookmarkDialog
 from .HgBookmarkRenameDialog import HgBookmarkRenameDialog
 
+import Preferences
+
 
 class Bookmarks(QObject):
     """
@@ -53,12 +55,36 @@
         self.bookmarksListDlg.show()
         self.bookmarksListDlg.start(path, self.bookmarksList)
     
-    def hgGetLoadedBookmarksList(self):
+    def hgGetBookmarksList(self, repodir):
+        """
+        Public method to get the list of bookmarks.
+        
+        @param repodir directory name of the repository (string)
+        @return list of bookmarks (list of string)
         """
-        Public method to get the list of loaded bookmarks.
+        ioEncoding = Preferences.getSystem("IOEncoding")
+        process = QProcess()
+        args = []
+        args.append('bookmarks')
+        process.setWorkingDirectory(repodir)
+        process.start('hg', args)
+        procStarted = process.waitForStarted()
+        if procStarted:
+            finished = process.waitForFinished(30000)
+            if finished and process.exitCode() == 0:
+                output = \
+                    str(process.readAllStandardOutput(), ioEncoding, 'replace')
+                self.bookmarksList = []
+                for line in output.splitlines():
+                    l = line.strip().split()
+                    if l[-1][0] in "1234567890":
+                        # last element is a rev:changeset
+                        del l[-1]
+                        if l[0] == "*":
+                            del l[0]
+                        name = " ".join(l)
+                        self.bookmarksList.append(name)
         
-        @return list of loaded bookmarks (list of string)
-        """
         return self.bookmarksList[:]
     
     def hgBookmarkDefine(self, name):
@@ -76,8 +102,10 @@
             if repodir == os.sep:
                 return
         
-        dlg = HgBookmarkDialog(self.vcs.tagsList, self.vcs.branchesList, 
-            self.bookmarksList)
+        dlg = HgBookmarkDialog(HgBookmarkDialog.DEFINE_MODE, 
+                               self.vcs.hgGetTagsList(repodir),
+                               self.vcs.hgGetBranchesList(repodir),
+                               self.hgGetBookmarksList(repodir))
         if dlg.exec_() == QDialog.Accepted:
             rev, bookmark = dlg.getData()
             
@@ -112,7 +140,7 @@
             None,
             self.trUtf8("Delete Bookmark"),
             self.trUtf8("Select the bookmark to be deleted:"),
-            [""] + self.bookmarksList,
+            [""] + sorted(self.hgGetBookmarksList(repodir)),
             0, True)
         if ok and bookmark:
             args = []
@@ -140,7 +168,7 @@
             if repodir == os.sep:
                 return
         
-        dlg = HgBookmarkRenameDialog(self.bookmarksList)
+        dlg = HgBookmarkRenameDialog(self.hgGetBookmarksList(repodir))
         if dlg.exec_() == QDialog.Accepted:
             newName, oldName = dlg.getData()
             
@@ -150,7 +178,42 @@
             args.append(oldName)
             args.append(newName)
             
-            dia = HgDialog(self.trUtf8('Delete Mercurial Bookmark'))
+            dia = HgDialog(self.trUtf8('Rename Mercurial Bookmark'))
             res = dia.startProcess(args, repodir)
             if res:
                 dia.exec_()
+    
+    def hgBookmarkMove(self, name):
+        """
+        Public method to move a bookmark.
+        
+        @param name file/directory name (string)
+        """
+        dname, fname = self.vcs.splitPath(name)
+        
+        # find the root of the repo
+        repodir = str(dname)
+        while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
+            repodir = os.path.dirname(repodir)
+            if repodir == os.sep:
+                return
+        
+        dlg = HgBookmarkDialog(HgBookmarkDialog.MOVE_MODE, 
+                               self.vcs.hgGetTagsList(repodir),
+                               self.vcs.hgGetBranchesList(repodir),
+                               self.hgGetBookmarksList(repodir))
+        if dlg.exec_() == QDialog.Accepted:
+            rev, bookmark = dlg.getData()
+            
+            args = []
+            args.append("bookmarks")
+            args.append("--force")
+            if rev:
+                args.append("--rev")
+                args.append(rev)
+            args.append(bookmark)
+            
+            dia = HgDialog(self.trUtf8('Move Mercurial Bookmark'))
+            res = dia.startProcess(args, repodir)
+            if res:
+                dia.exec_()

eric ide

mercurial