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