src/eric7/Plugins/VcsPlugins/vcsMercurial/ShelveExtension/shelve.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
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()

eric ide

mercurial