165 return mod |
165 return mod |
166 |
166 |
167 def _runuisetup(name, ui): |
167 def _runuisetup(name, ui): |
168 uisetup = getattr(_extensions[name], 'uisetup', None) |
168 uisetup = getattr(_extensions[name], 'uisetup', None) |
169 if uisetup: |
169 if uisetup: |
170 uisetup(ui) |
170 try: |
|
171 uisetup(ui) |
|
172 except Exception as inst: |
|
173 ui.traceback() |
|
174 msg = _forbytes(inst) |
|
175 ui.warn(_("*** failed to set up extension %s: %s\n") % (name, msg)) |
|
176 return False |
|
177 return True |
171 |
178 |
172 def _runextsetup(name, ui): |
179 def _runextsetup(name, ui): |
173 extsetup = getattr(_extensions[name], 'extsetup', None) |
180 extsetup = getattr(_extensions[name], 'extsetup', None) |
174 if extsetup: |
181 if extsetup: |
175 try: |
182 try: |
176 extsetup(ui) |
183 try: |
177 except TypeError: |
184 extsetup(ui) |
178 if inspect.getargspec(extsetup).args: |
185 except TypeError: |
179 raise |
186 if inspect.getargspec(extsetup).args: |
180 extsetup() # old extsetup with no ui argument |
187 raise |
|
188 extsetup() # old extsetup with no ui argument |
|
189 except Exception as inst: |
|
190 ui.traceback() |
|
191 msg = _forbytes(inst) |
|
192 ui.warn(_("*** failed to set up extension %s: %s\n") % (name, msg)) |
|
193 return False |
|
194 return True |
181 |
195 |
182 def loadall(ui, whitelist=None): |
196 def loadall(ui, whitelist=None): |
183 result = ui.configitems("extensions") |
197 result = ui.configitems("extensions") |
184 if whitelist is not None: |
198 if whitelist is not None: |
185 result = [(k, v) for (k, v) in result if k in whitelist] |
199 result = [(k, v) for (k, v) in result if k in whitelist] |
201 % (name, msg)) |
215 % (name, msg)) |
202 if isinstance(inst, error.Hint) and inst.hint: |
216 if isinstance(inst, error.Hint) and inst.hint: |
203 ui.warn(_("*** (%s)\n") % inst.hint) |
217 ui.warn(_("*** (%s)\n") % inst.hint) |
204 ui.traceback() |
218 ui.traceback() |
205 |
219 |
|
220 broken = set() |
206 for name in _order[newindex:]: |
221 for name in _order[newindex:]: |
207 _runuisetup(name, ui) |
222 if not _runuisetup(name, ui): |
|
223 broken.add(name) |
208 |
224 |
209 for name in _order[newindex:]: |
225 for name in _order[newindex:]: |
210 _runextsetup(name, ui) |
226 if name in broken: |
|
227 continue |
|
228 if not _runextsetup(name, ui): |
|
229 broken.add(name) |
|
230 |
|
231 for name in broken: |
|
232 _extensions[name] = None |
211 |
233 |
212 # Call aftercallbacks that were never met. |
234 # Call aftercallbacks that were never met. |
213 for shortname in _aftercallbacks: |
235 for shortname in _aftercallbacks: |
214 if shortname in _extensions: |
236 if shortname in _extensions: |
215 continue |
237 continue |