--- 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_()