Plugins/VcsPlugins/vcsMercurial/BookmarksExtension/bookmarks.py

changeset 1017
919147f2b518
parent 1011
0b118aefae5b
child 1018
949812411ab8
equal deleted inserted replaced
1016:72b6b0778e06 1017:919147f2b518
7 Module implementing the bookmarks extension interface. 7 Module implementing the bookmarks extension interface.
8 """ 8 """
9 9
10 import os 10 import os
11 11
12 from PyQt4.QtCore import QObject 12 from PyQt4.QtCore import QObject, QProcess
13 from PyQt4.QtGui import QDialog, QInputDialog 13 from PyQt4.QtGui import QDialog, QInputDialog
14 14
15 from ..HgDialog import HgDialog 15 from ..HgDialog import HgDialog
16 16
17 from .HgBookmarksListDialog import HgBookmarksListDialog 17 from .HgBookmarksListDialog import HgBookmarksListDialog
18 from .HgBookmarkDialog import HgBookmarkDialog 18 from .HgBookmarkDialog import HgBookmarkDialog
19 from .HgBookmarkRenameDialog import HgBookmarkRenameDialog 19 from .HgBookmarkRenameDialog import HgBookmarkRenameDialog
20
21 import Preferences
20 22
21 23
22 class Bookmarks(QObject): 24 class Bookmarks(QObject):
23 """ 25 """
24 Class implementing the bookmarks extension interface. 26 Class implementing the bookmarks extension interface.
51 53
52 self.bookmarksListDlg = HgBookmarksListDialog(self.vcs) 54 self.bookmarksListDlg = HgBookmarksListDialog(self.vcs)
53 self.bookmarksListDlg.show() 55 self.bookmarksListDlg.show()
54 self.bookmarksListDlg.start(path, self.bookmarksList) 56 self.bookmarksListDlg.start(path, self.bookmarksList)
55 57
56 def hgGetLoadedBookmarksList(self): 58 def hgGetBookmarksList(self, repodir):
57 """ 59 """
58 Public method to get the list of loaded bookmarks. 60 Public method to get the list of bookmarks.
59 61
60 @return list of loaded bookmarks (list of string) 62 @param repodir directory name of the repository (string)
61 """ 63 @return list of bookmarks (list of string)
64 """
65 ioEncoding = Preferences.getSystem("IOEncoding")
66 process = QProcess()
67 args = []
68 args.append('bookmarks')
69 process.setWorkingDirectory(repodir)
70 process.start('hg', args)
71 procStarted = process.waitForStarted()
72 if procStarted:
73 finished = process.waitForFinished(30000)
74 if finished and process.exitCode() == 0:
75 output = \
76 str(process.readAllStandardOutput(), ioEncoding, 'replace')
77 self.bookmarksList = []
78 for line in output.splitlines():
79 l = line.strip().split()
80 if l[-1][0] in "1234567890":
81 # last element is a rev:changeset
82 del l[-1]
83 if l[0] == "*":
84 del l[0]
85 name = " ".join(l)
86 self.bookmarksList.append(name)
87
62 return self.bookmarksList[:] 88 return self.bookmarksList[:]
63 89
64 def hgBookmarkDefine(self, name): 90 def hgBookmarkDefine(self, name):
65 """ 91 """
66 Public method to define a bookmark. 92 Public method to define a bookmark.
74 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)): 100 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
75 repodir = os.path.dirname(repodir) 101 repodir = os.path.dirname(repodir)
76 if repodir == os.sep: 102 if repodir == os.sep:
77 return 103 return
78 104
79 dlg = HgBookmarkDialog(self.vcs.tagsList, self.vcs.branchesList, 105 dlg = HgBookmarkDialog(HgBookmarkDialog.DEFINE_MODE,
80 self.bookmarksList) 106 self.vcs.hgGetTagsList(repodir),
107 self.vcs.hgGetBranchesList(repodir),
108 self.hgGetBookmarksList(repodir))
81 if dlg.exec_() == QDialog.Accepted: 109 if dlg.exec_() == QDialog.Accepted:
82 rev, bookmark = dlg.getData() 110 rev, bookmark = dlg.getData()
83 111
84 args = [] 112 args = []
85 args.append("bookmarks") 113 args.append("bookmarks")
110 138
111 bookmark, ok = QInputDialog.getItem( 139 bookmark, ok = QInputDialog.getItem(
112 None, 140 None,
113 self.trUtf8("Delete Bookmark"), 141 self.trUtf8("Delete Bookmark"),
114 self.trUtf8("Select the bookmark to be deleted:"), 142 self.trUtf8("Select the bookmark to be deleted:"),
115 [""] + self.bookmarksList, 143 [""] + sorted(self.hgGetBookmarksList(repodir)),
116 0, True) 144 0, True)
117 if ok and bookmark: 145 if ok and bookmark:
118 args = [] 146 args = []
119 args.append("bookmarks") 147 args.append("bookmarks")
120 args.append("--delete") 148 args.append("--delete")
138 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)): 166 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
139 repodir = os.path.dirname(repodir) 167 repodir = os.path.dirname(repodir)
140 if repodir == os.sep: 168 if repodir == os.sep:
141 return 169 return
142 170
143 dlg = HgBookmarkRenameDialog(self.bookmarksList) 171 dlg = HgBookmarkRenameDialog(self.hgGetBookmarksList(repodir))
144 if dlg.exec_() == QDialog.Accepted: 172 if dlg.exec_() == QDialog.Accepted:
145 newName, oldName = dlg.getData() 173 newName, oldName = dlg.getData()
146 174
147 args = [] 175 args = []
148 args.append("bookmarks") 176 args.append("bookmarks")
149 args.append("--rename") 177 args.append("--rename")
150 args.append(oldName) 178 args.append(oldName)
151 args.append(newName) 179 args.append(newName)
152 180
153 dia = HgDialog(self.trUtf8('Delete Mercurial Bookmark')) 181 dia = HgDialog(self.trUtf8('Rename Mercurial Bookmark'))
154 res = dia.startProcess(args, repodir) 182 res = dia.startProcess(args, repodir)
155 if res: 183 if res:
156 dia.exec_() 184 dia.exec_()
185
186 def hgBookmarkMove(self, name):
187 """
188 Public method to move a bookmark.
189
190 @param name file/directory name (string)
191 """
192 dname, fname = self.vcs.splitPath(name)
193
194 # find the root of the repo
195 repodir = str(dname)
196 while not os.path.isdir(os.path.join(repodir, self.vcs.adminDir)):
197 repodir = os.path.dirname(repodir)
198 if repodir == os.sep:
199 return
200
201 dlg = HgBookmarkDialog(HgBookmarkDialog.MOVE_MODE,
202 self.vcs.hgGetTagsList(repodir),
203 self.vcs.hgGetBranchesList(repodir),
204 self.hgGetBookmarksList(repodir))
205 if dlg.exec_() == QDialog.Accepted:
206 rev, bookmark = dlg.getData()
207
208 args = []
209 args.append("bookmarks")
210 args.append("--force")
211 if rev:
212 args.append("--rev")
213 args.append(rev)
214 args.append(bookmark)
215
216 dia = HgDialog(self.trUtf8('Move Mercurial Bookmark'))
217 res = dia.startProcess(args, repodir)
218 if res:
219 dia.exec_()

eric ide

mercurial