17 |
17 |
18 class Shelve(HgExtension): |
18 class Shelve(HgExtension): |
19 """ |
19 """ |
20 Class implementing the shelve extension interface. |
20 Class implementing the shelve extension interface. |
21 """ |
21 """ |
|
22 |
22 def __init__(self, vcs): |
23 def __init__(self, vcs): |
23 """ |
24 """ |
24 Constructor |
25 Constructor |
25 |
26 |
26 @param vcs reference to the Mercurial vcs object |
27 @param vcs reference to the Mercurial vcs object |
27 """ |
28 """ |
28 super().__init__(vcs) |
29 super().__init__(vcs) |
29 |
30 |
30 self.__unshelveKeep = False |
31 self.__unshelveKeep = False |
31 |
32 |
32 self.__shelveBrowserDialog = None |
33 self.__shelveBrowserDialog = None |
33 |
34 |
34 def shutdown(self): |
35 def shutdown(self): |
35 """ |
36 """ |
36 Public method used to shutdown the shelve interface. |
37 Public method used to shutdown the shelve interface. |
37 """ |
38 """ |
38 if self.__shelveBrowserDialog is not None: |
39 if self.__shelveBrowserDialog is not None: |
39 self.__shelveBrowserDialog.close() |
40 self.__shelveBrowserDialog.close() |
40 |
41 |
41 def __hgGetShelveNamesList(self): |
42 def __hgGetShelveNamesList(self): |
42 """ |
43 """ |
43 Private method to get the list of shelved changes. |
44 Private method to get the list of shelved changes. |
44 |
45 |
45 @return list of shelved changes (list of string) |
46 @return list of shelved changes (list of string) |
46 """ |
47 """ |
47 args = self.vcs.initCommand("shelve") |
48 args = self.vcs.initCommand("shelve") |
48 args.append('--list') |
49 args.append("--list") |
49 args.append('--quiet') |
50 args.append("--quiet") |
50 |
51 |
51 client = self.vcs.getClient() |
52 client = self.vcs.getClient() |
52 output = client.runcommand(args)[0] |
53 output = client.runcommand(args)[0] |
53 |
54 |
54 shelveNamesList = [] |
55 shelveNamesList = [] |
55 for line in output.splitlines(): |
56 for line in output.splitlines(): |
56 shelveNamesList.append(line.strip()) |
57 shelveNamesList.append(line.strip()) |
57 |
58 |
58 return shelveNamesList[:] |
59 return shelveNamesList[:] |
59 |
60 |
60 def hgShelve(self, name): |
61 def hgShelve(self, name): |
61 """ |
62 """ |
62 Public method to shelve current changes of files or directories. |
63 Public method to shelve current changes of files or directories. |
63 |
64 |
64 @param name directory or file name (string) or list of directory |
65 @param name directory or file name (string) or list of directory |
65 or file names (list of string) |
66 or file names (list of string) |
66 @return flag indicating that the project should be reread (boolean) |
67 @return flag indicating that the project should be reread (boolean) |
67 """ |
68 """ |
68 res = False |
69 res = False |
69 from .HgShelveDataDialog import HgShelveDataDialog |
70 from .HgShelveDataDialog import HgShelveDataDialog |
|
71 |
70 dlg = HgShelveDataDialog(self.vcs.version) |
72 dlg = HgShelveDataDialog(self.vcs.version) |
71 if dlg.exec() == QDialog.DialogCode.Accepted: |
73 if dlg.exec() == QDialog.DialogCode.Accepted: |
72 shelveName, dateTime, message, addRemove, keep = dlg.getData() |
74 shelveName, dateTime, message, addRemove, keep = dlg.getData() |
73 |
75 |
74 args = self.vcs.initCommand("shelve") |
76 args = self.vcs.initCommand("shelve") |
75 if shelveName: |
77 if shelveName: |
76 args.append("--name") |
78 args.append("--name") |
77 args.append(shelveName) |
79 args.append(shelveName) |
78 if message: |
80 if message: |
84 args.append("--date") |
86 args.append("--date") |
85 args.append(dateTime.toString("yyyy-MM-dd hh:mm:ss")) |
87 args.append(dateTime.toString("yyyy-MM-dd hh:mm:ss")) |
86 if self.vcs.version >= (5, 0, 0) and keep: |
88 if self.vcs.version >= (5, 0, 0) and keep: |
87 args.append("--keep") |
89 args.append("--keep") |
88 args.append("-v") |
90 args.append("-v") |
89 |
91 |
90 if isinstance(name, list): |
92 if isinstance(name, list): |
91 self.vcs.addArguments(args, name) |
93 self.vcs.addArguments(args, name) |
92 else: |
94 else: |
93 args.append(name) |
95 args.append(name) |
94 |
96 |
95 dia = HgDialog(self.tr('Shelve current changes'), self.vcs) |
97 dia = HgDialog(self.tr("Shelve current changes"), self.vcs) |
96 res = dia.startProcess(args) |
98 res = dia.startProcess(args) |
97 if res: |
99 if res: |
98 dia.exec() |
100 dia.exec() |
99 res = dia.hasAddOrDelete() |
101 res = dia.hasAddOrDelete() |
100 self.vcs.checkVCSStatus() |
102 self.vcs.checkVCSStatus() |
101 return res |
103 return res |
102 |
104 |
103 def hgShelveBrowser(self): |
105 def hgShelveBrowser(self): |
104 """ |
106 """ |
105 Public method to show the shelve browser dialog. |
107 Public method to show the shelve browser dialog. |
106 """ |
108 """ |
107 if self.__shelveBrowserDialog is None: |
109 if self.__shelveBrowserDialog is None: |
108 from .HgShelveBrowserDialog import HgShelveBrowserDialog |
110 from .HgShelveBrowserDialog import HgShelveBrowserDialog |
109 self.__shelveBrowserDialog = HgShelveBrowserDialog( |
111 |
110 self.vcs) |
112 self.__shelveBrowserDialog = HgShelveBrowserDialog(self.vcs) |
111 self.__shelveBrowserDialog.show() |
113 self.__shelveBrowserDialog.show() |
112 self.__shelveBrowserDialog.start() |
114 self.__shelveBrowserDialog.start() |
113 |
115 |
114 def hgUnshelve(self, shelveName=""): |
116 def hgUnshelve(self, shelveName=""): |
115 """ |
117 """ |
116 Public method to restore shelved changes to the project directory. |
118 Public method to restore shelved changes to the project directory. |
117 |
119 |
118 @param shelveName name of the shelve to restore (string) |
120 @param shelveName name of the shelve to restore (string) |
119 @return flag indicating that the project should be reread (boolean) |
121 @return flag indicating that the project should be reread (boolean) |
120 """ |
122 """ |
121 res = False |
123 res = False |
122 from .HgUnshelveDataDialog import HgUnshelveDataDialog |
124 from .HgUnshelveDataDialog import HgUnshelveDataDialog |
123 dlg = HgUnshelveDataDialog(self.__hgGetShelveNamesList(), |
125 |
124 shelveName=shelveName) |
126 dlg = HgUnshelveDataDialog(self.__hgGetShelveNamesList(), shelveName=shelveName) |
125 if dlg.exec() == QDialog.DialogCode.Accepted: |
127 if dlg.exec() == QDialog.DialogCode.Accepted: |
126 shelveName, keep = dlg.getData() |
128 shelveName, keep = dlg.getData() |
127 self.__unshelveKeep = keep # store for potential continue |
129 self.__unshelveKeep = keep # store for potential continue |
128 |
130 |
129 args = self.vcs.initCommand("unshelve") |
131 args = self.vcs.initCommand("unshelve") |
130 if keep: |
132 if keep: |
131 args.append("--keep") |
133 args.append("--keep") |
132 if shelveName: |
134 if shelveName: |
133 args.append(shelveName) |
135 args.append(shelveName) |
134 |
136 |
135 dia = HgDialog(self.tr('Restore shelved changes'), self.vcs) |
137 dia = HgDialog(self.tr("Restore shelved changes"), self.vcs) |
136 res = dia.startProcess(args) |
138 res = dia.startProcess(args) |
137 if res: |
139 if res: |
138 dia.exec() |
140 dia.exec() |
139 res = dia.hasAddOrDelete() |
141 res = dia.hasAddOrDelete() |
140 self.vcs.checkVCSStatus() |
142 self.vcs.checkVCSStatus() |
141 return res |
143 return res |
142 |
144 |
143 def hgUnshelveAbort(self): |
145 def hgUnshelveAbort(self): |
144 """ |
146 """ |
145 Public method to abort the ongoing restore operation. |
147 Public method to abort the ongoing restore operation. |
146 |
148 |
147 @return flag indicating that the project should be reread (boolean) |
149 @return flag indicating that the project should be reread (boolean) |
148 """ |
150 """ |
149 args = self.vcs.initCommand("unshelve") |
151 args = self.vcs.initCommand("unshelve") |
150 args.append("--abort") |
152 args.append("--abort") |
151 |
153 |
152 dia = HgDialog(self.tr('Abort restore operation'), self.vcs) |
154 dia = HgDialog(self.tr("Abort restore operation"), self.vcs) |
153 res = dia.startProcess(args) |
155 res = dia.startProcess(args) |
154 if res: |
156 if res: |
155 dia.exec() |
157 dia.exec() |
156 res = dia.hasAddOrDelete() |
158 res = dia.hasAddOrDelete() |
157 self.vcs.checkVCSStatus() |
159 self.vcs.checkVCSStatus() |
158 return res |
160 return res |
159 |
161 |
160 def hgUnshelveContinue(self): |
162 def hgUnshelveContinue(self): |
161 """ |
163 """ |
162 Public method to continue the ongoing restore operation. |
164 Public method to continue the ongoing restore operation. |
163 |
165 |
164 @return flag indicating that the project should be reread (boolean) |
166 @return flag indicating that the project should be reread (boolean) |
165 """ |
167 """ |
166 args = self.vcs.initCommand("unshelve") |
168 args = self.vcs.initCommand("unshelve") |
167 if self.__unshelveKeep: |
169 if self.__unshelveKeep: |
168 args.append("--keep") |
170 args.append("--keep") |
169 args.append("--continue") |
171 args.append("--continue") |
170 |
172 |
171 dia = HgDialog(self.tr('Continue restore operation'), self.vcs) |
173 dia = HgDialog(self.tr("Continue restore operation"), self.vcs) |
172 res = dia.startProcess(args) |
174 res = dia.startProcess(args) |
173 if res: |
175 if res: |
174 dia.exec() |
176 dia.exec() |
175 res = dia.hasAddOrDelete() |
177 res = dia.hasAddOrDelete() |
176 self.vcs.checkVCSStatus() |
178 self.vcs.checkVCSStatus() |
177 return res |
179 return res |
178 |
180 |
179 def hgDeleteShelves(self, shelveNames=None): |
181 def hgDeleteShelves(self, shelveNames=None): |
180 """ |
182 """ |
181 Public method to delete named shelves. |
183 Public method to delete named shelves. |
182 |
184 |
183 @param shelveNames name of shelves to delete (list of string) |
185 @param shelveNames name of shelves to delete (list of string) |
184 """ |
186 """ |
185 if not shelveNames: |
187 if not shelveNames: |
186 from .HgShelvesSelectionDialog import HgShelvesSelectionDialog |
188 from .HgShelvesSelectionDialog import HgShelvesSelectionDialog |
|
189 |
187 dlg = HgShelvesSelectionDialog( |
190 dlg = HgShelvesSelectionDialog( |
188 self.tr("Select the shelves to be deleted:"), |
191 self.tr("Select the shelves to be deleted:"), |
189 self.__hgGetShelveNamesList()) |
192 self.__hgGetShelveNamesList(), |
|
193 ) |
190 if dlg.exec() == QDialog.DialogCode.Accepted: |
194 if dlg.exec() == QDialog.DialogCode.Accepted: |
191 shelveNames = dlg.getSelectedShelves() |
195 shelveNames = dlg.getSelectedShelves() |
192 else: |
196 else: |
193 return |
197 return |
194 |
198 |
195 from UI.DeleteFilesConfirmationDialog import ( |
199 from UI.DeleteFilesConfirmationDialog import DeleteFilesConfirmationDialog |
196 DeleteFilesConfirmationDialog |
200 |
197 ) |
|
198 dlg = DeleteFilesConfirmationDialog( |
201 dlg = DeleteFilesConfirmationDialog( |
199 None, |
202 None, |
200 self.tr("Delete shelves"), |
203 self.tr("Delete shelves"), |
201 self.tr("Do you really want to delete these shelves?"), |
204 self.tr("Do you really want to delete these shelves?"), |
202 shelveNames) |
205 shelveNames, |
|
206 ) |
203 if dlg.exec() == QDialog.DialogCode.Accepted: |
207 if dlg.exec() == QDialog.DialogCode.Accepted: |
204 args = self.vcs.initCommand("shelve") |
208 args = self.vcs.initCommand("shelve") |
205 args.append("--delete") |
209 args.append("--delete") |
206 args.extend(shelveNames) |
210 args.extend(shelveNames) |
207 |
211 |
208 dia = HgDialog(self.tr('Delete shelves'), self.vcs) |
212 dia = HgDialog(self.tr("Delete shelves"), self.vcs) |
209 res = dia.startProcess(args) |
213 res = dia.startProcess(args) |
210 if res: |
214 if res: |
211 dia.exec() |
215 dia.exec() |
212 |
216 |
213 def hgCleanupShelves(self): |
217 def hgCleanupShelves(self): |
214 """ |
218 """ |
215 Public method to delete all shelves. |
219 Public method to delete all shelves. |
216 """ |
220 """ |
217 res = EricMessageBox.yesNo( |
221 res = EricMessageBox.yesNo( |
218 None, |
222 None, |
219 self.tr("Delete all shelves"), |
223 self.tr("Delete all shelves"), |
220 self.tr("""Do you really want to delete all shelved changes?""")) |
224 self.tr("""Do you really want to delete all shelved changes?"""), |
|
225 ) |
221 if res: |
226 if res: |
222 args = self.vcs.initCommand("shelve") |
227 args = self.vcs.initCommand("shelve") |
223 args.append("--cleanup") |
228 args.append("--cleanup") |
224 |
229 |
225 dia = HgDialog(self.tr('Delete all shelves'), self.vcs) |
230 dia = HgDialog(self.tr("Delete all shelves"), self.vcs) |
226 res = dia.startProcess(args) |
231 res = dia.startProcess(args) |
227 if res: |
232 if res: |
228 dia.exec() |
233 dia.exec() |