##// END OF EJS Templates
extensions: use ui.log() interface to provide detailed loading information...
Yuya Nishihara -
r41032:6f2510b5 default
parent child Browse files
Show More
@@ -121,13 +121,12 b' def _importext(name, path=None, reportfu'
121 121 return mod
122 122
123 123 def _reportimporterror(ui, err, failed, next):
124 # note: this ui.debug happens before --debug is processed,
124 # note: this ui.log happens before --debug is processed,
125 125 # Use --config ui.debug=1 to see them.
126 if ui.configbool('devel', 'debug.extensions'):
127 ui.debug('debug.extensions: - could not import %s (%s): trying %s\n'
128 % (failed, stringutil.forcebytestr(err), next))
129 if ui.debugflag:
130 ui.traceback()
126 ui.log(b'extension', b' - could not import %s (%s): trying %s\n',
127 failed, stringutil.forcebytestr(err), next)
128 if ui.debugflag and ui.configbool('devel', 'debug.extensions'):
129 ui.traceback()
131 130
132 131 def _rejectunicode(name, xs):
133 132 if isinstance(xs, (list, set, tuple)):
@@ -166,7 +165,7 b' def _validatetables(ui, mod):'
166 165 _rejectunicode(t, o._table)
167 166 _validatecmdtable(ui, getattr(mod, 'cmdtable', {}))
168 167
169 def load(ui, name, path, log=lambda *a: None, loadingtime=None):
168 def load(ui, name, path, loadingtime=None):
170 169 if name.startswith('hgext.') or name.startswith('hgext/'):
171 170 shortname = name[6:]
172 171 else:
@@ -175,11 +174,11 b' def load(ui, name, path, log=lambda *a: '
175 174 return None
176 175 if shortname in _extensions:
177 176 return _extensions[shortname]
178 log(' - loading extension: %s\n', shortname)
177 ui.log(b'extension', b' - loading extension: %s\n', shortname)
179 178 _extensions[shortname] = None
180 179 with util.timedcm('load extension %s', shortname) as stats:
181 180 mod = _importext(name, path, bind(_reportimporterror, ui))
182 log(' > %s extension loaded in %s\n', shortname, stats)
181 ui.log(b'extension', b' > %s extension loaded in %s\n', shortname, stats)
183 182 if loadingtime is not None:
184 183 loadingtime[shortname] += stats.elapsed
185 184
@@ -193,16 +192,17 b' def load(ui, name, path, log=lambda *a: '
193 192 'of Mercurial (current: %s); disabling)\n')
194 193 ui.warn(msg % (shortname, minver, util.version()))
195 194 return
196 log(' - validating extension tables: %s\n', shortname)
195 ui.log(b'extension', b' - validating extension tables: %s\n', shortname)
197 196 _validatetables(ui, mod)
198 197
199 198 _extensions[shortname] = mod
200 199 _order.append(shortname)
201 log(' - invoking registered callbacks: %s\n', shortname)
200 ui.log(b'extension', b' - invoking registered callbacks: %s\n',
201 shortname)
202 202 with util.timedcm('callbacks extension %s', shortname) as stats:
203 203 for fn in _aftercallbacks.get(shortname, []):
204 204 fn(loaded=True)
205 log(' > callbacks completed in %s\n', stats)
205 ui.log(b'extension', b' > callbacks completed in %s\n', stats)
206 206 return mod
207 207
208 208 def _runuisetup(name, ui):
@@ -235,28 +235,25 b' def _runextsetup(name, ui):'
235 235 return True
236 236
237 237 def loadall(ui, whitelist=None):
238 if ui.configbool('devel', 'debug.extensions'):
239 log = lambda msg, *values: ui.debug('debug.extensions: ',
240 msg % values, label='debug.extensions')
241 else:
242 log = lambda *a, **kw: None
243 238 loadingtime = collections.defaultdict(int)
244 239 result = ui.configitems("extensions")
245 240 if whitelist is not None:
246 241 result = [(k, v) for (k, v) in result if k in whitelist]
247 242 newindex = len(_order)
248 log('loading %sextensions\n', 'additional ' if newindex else '')
249 log('- processing %d entries\n', len(result))
243 ui.log(b'extension', b'loading %sextensions\n',
244 'additional ' if newindex else '')
245 ui.log(b'extension', b'- processing %d entries\n', len(result))
250 246 with util.timedcm('load all extensions') as stats:
251 247 for (name, path) in result:
252 248 if path:
253 249 if path[0:1] == '!':
254 250 if name not in _disabledextensions:
255 log(' - skipping disabled extension: %s\n', name)
251 ui.log(b'extension',
252 b' - skipping disabled extension: %s\n', name)
256 253 _disabledextensions[name] = path[1:]
257 254 continue
258 255 try:
259 load(ui, name, path, log, loadingtime)
256 load(ui, name, path, loadingtime)
260 257 except Exception as inst:
261 258 msg = stringutil.forcebytestr(inst)
262 259 if path:
@@ -269,8 +266,8 b' def loadall(ui, whitelist=None):'
269 266 ui.warn(_("*** (%s)\n") % inst.hint)
270 267 ui.traceback()
271 268
272 log('> loaded %d extensions, total time %s\n',
273 len(_order) - newindex, stats)
269 ui.log(b'extension', b'> loaded %d extensions, total time %s\n',
270 len(_order) - newindex, stats)
274 271 # list of (objname, loadermod, loadername) tuple:
275 272 # - objname is the name of an object in extension module,
276 273 # from which extra information is loaded
@@ -283,52 +280,55 b' def loadall(ui, whitelist=None):'
283 280 ('configtable', configitems, 'loadconfigtable'),
284 281 ]
285 282
286 log('- loading configtable attributes\n')
283 ui.log(b'extension', b'- loading configtable attributes\n')
287 284 _loadextra(ui, newindex, earlyextraloaders)
288 285
289 286 broken = set()
290 log('- executing uisetup hooks\n')
287 ui.log(b'extension', b'- executing uisetup hooks\n')
291 288 with util.timedcm('all uisetup') as alluisetupstats:
292 289 for name in _order[newindex:]:
293 log(' - running uisetup for %s\n', name)
290 ui.log(b'extension', b' - running uisetup for %s\n', name)
294 291 with util.timedcm('uisetup %s', name) as stats:
295 292 if not _runuisetup(name, ui):
296 log(' - the %s extension uisetup failed\n', name)
293 ui.log(b'extension',
294 b' - the %s extension uisetup failed\n', name)
297 295 broken.add(name)
298 log(' > uisetup for %s took %s\n', name, stats)
296 ui.log(b'extension', b' > uisetup for %s took %s\n', name, stats)
299 297 loadingtime[name] += stats.elapsed
300 log('> all uisetup took %s\n', alluisetupstats)
298 ui.log(b'extension', b'> all uisetup took %s\n', alluisetupstats)
301 299
302 log('- executing extsetup hooks\n')
300 ui.log(b'extension', b'- executing extsetup hooks\n')
303 301 with util.timedcm('all extsetup') as allextetupstats:
304 302 for name in _order[newindex:]:
305 303 if name in broken:
306 304 continue
307 log(' - running extsetup for %s\n', name)
305 ui.log(b'extension', b' - running extsetup for %s\n', name)
308 306 with util.timedcm('extsetup %s', name) as stats:
309 307 if not _runextsetup(name, ui):
310 log(' - the %s extension extsetup failed\n', name)
308 ui.log(b'extension',
309 b' - the %s extension extsetup failed\n', name)
311 310 broken.add(name)
312 log(' > extsetup for %s took %s\n', name, stats)
311 ui.log(b'extension', b' > extsetup for %s took %s\n', name, stats)
313 312 loadingtime[name] += stats.elapsed
314 log('> all extsetup took %s\n', allextetupstats)
313 ui.log(b'extension', b'> all extsetup took %s\n', allextetupstats)
315 314
316 315 for name in broken:
317 log(' - disabling broken %s extension\n', name)
316 ui.log(b'extension', b' - disabling broken %s extension\n', name)
318 317 _extensions[name] = None
319 318
320 319 # Call aftercallbacks that were never met.
321 log('- executing remaining aftercallbacks\n')
320 ui.log(b'extension', b'- executing remaining aftercallbacks\n')
322 321 with util.timedcm('aftercallbacks') as stats:
323 322 for shortname in _aftercallbacks:
324 323 if shortname in _extensions:
325 324 continue
326 325
327 326 for fn in _aftercallbacks[shortname]:
328 log(' - extension %s not loaded, notify callbacks\n',
329 shortname)
327 ui.log(b'extension',
328 b' - extension %s not loaded, notify callbacks\n',
329 shortname)
330 330 fn(loaded=False)
331 log('> remaining aftercallbacks completed in %s\n', stats)
331 ui.log(b'extension', b'> remaining aftercallbacks completed in %s\n', stats)
332 332
333 333 # loadall() is called multiple times and lingering _aftercallbacks
334 334 # entries could result in double execution. See issue4646.
@@ -352,7 +352,7 b' def loadall(ui, whitelist=None):'
352 352 # - loadermod is the module where loader is placed
353 353 # - loadername is the name of the function,
354 354 # which takes (ui, extensionname, extraobj) arguments
355 log('- loading extension registration objects\n')
355 ui.log(b'extension', b'- loading extension registration objects\n')
356 356 extraloaders = [
357 357 ('cmdtable', commands, 'loadcmdtable'),
358 358 ('colortable', color, 'loadcolortable'),
@@ -365,14 +365,15 b' def loadall(ui, whitelist=None):'
365 365 ]
366 366 with util.timedcm('load registration objects') as stats:
367 367 _loadextra(ui, newindex, extraloaders)
368 log('> extension registration object loading took %s\n', stats)
368 ui.log(b'extension', b'> extension registration object loading took %s\n',
369 stats)
369 370
370 371 # Report per extension loading time (except reposetup)
371 372 for name in sorted(loadingtime):
372 extension_msg = '> extension %s take a total of %s to load\n'
373 log(extension_msg, name, util.timecount(loadingtime[name]))
373 ui.log(b'extension', b'> extension %s take a total of %s to load\n',
374 name, util.timecount(loadingtime[name]))
374 375
375 log('extension loading complete\n')
376 ui.log(b'extension', b'extension loading complete\n')
376 377
377 378 def _loadextra(ui, newindex, extraloaders):
378 379 for name in _order[newindex:]:
@@ -160,23 +160,19 b' def _peerorrepo(ui, path, create=False, '
160 160 obj = _peerlookup(path).instance(ui, path, create, intents=intents,
161 161 createopts=createopts)
162 162 ui = getattr(obj, "ui", ui)
163 if ui.configbool('devel', 'debug.extensions'):
164 log = lambda msg, *values: ui.debug('debug.extensions: ',
165 msg % values, label='debug.extensions')
166 else:
167 log = lambda *a, **kw: None
168 163 for f in presetupfuncs or []:
169 164 f(ui, obj)
170 log('- executing reposetup hooks\n')
165 ui.log(b'extension', b'- executing reposetup hooks\n')
171 166 with util.timedcm('all reposetup') as allreposetupstats:
172 167 for name, module in extensions.extensions(ui):
173 log(' - running reposetup for %s\n' % (name,))
168 ui.log(b'extension', b' - running reposetup for %s\n', name)
174 169 hook = getattr(module, 'reposetup', None)
175 170 if hook:
176 171 with util.timedcm('reposetup %r', name) as stats:
177 172 hook(ui, obj)
178 log(' > reposetup for %s took %s\n', name, stats)
179 log('> all reposetup took %s\n', allreposetupstats)
173 ui.log(b'extension', b' > reposetup for %s took %s\n',
174 name, stats)
175 ui.log(b'extension', b'> all reposetup took %s\n', allreposetupstats)
180 176 if not obj.local():
181 177 for f in wirepeersetupfuncs:
182 178 f(ui, obj)
@@ -1,3 +1,7 b''
1 $ filterlog () {
2 > sed -e 's!^[0-9/]* [0-9:]* ([0-9]*)>!YYYY/MM/DD HH:MM:SS (PID)>!'
3 > }
4
1 5 ensure that failing ui.atexit handlers report sensibly
2 6
3 7 $ cat > $TESTTMP/bailatexit.py <<EOF
@@ -82,29 +86,30 b' show traceback for ImportError of hgext.'
82 86
83 87 $ (hg help help --traceback --debug --config devel.debug.extensions=yes 2>&1) \
84 88 > | grep -v '^ ' \
85 > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|not import|ModuleNotFound'
86 debug.extensions: loading extensions
87 debug.extensions: - processing 5 entries
88 debug.extensions: - loading extension: gpg
89 debug.extensions: > gpg extension loaded in * (glob)
90 debug.extensions: - validating extension tables: gpg
91 debug.extensions: - invoking registered callbacks: gpg
92 debug.extensions: > callbacks completed in * (glob)
93 debug.extensions: - loading extension: badext
89 > | filterlog \
90 > | egrep 'extension..[^p]|^Exception|Traceback|ImportError|^YYYY|not import|ModuleNotFound'
91 YYYY/MM/DD HH:MM:SS (PID)> loading extensions
92 YYYY/MM/DD HH:MM:SS (PID)> - processing 5 entries
93 YYYY/MM/DD HH:MM:SS (PID)> - loading extension: gpg
94 YYYY/MM/DD HH:MM:SS (PID)> > gpg extension loaded in * (glob)
95 YYYY/MM/DD HH:MM:SS (PID)> - validating extension tables: gpg
96 YYYY/MM/DD HH:MM:SS (PID)> - invoking registered callbacks: gpg
97 YYYY/MM/DD HH:MM:SS (PID)> > callbacks completed in * (glob)
98 YYYY/MM/DD HH:MM:SS (PID)> - loading extension: badext
94 99 *** failed to import extension badext from $TESTTMP/badext.py: bit bucket overflow
95 100 Traceback (most recent call last):
96 101 Exception: bit bucket overflow
97 debug.extensions: - loading extension: baddocext
98 debug.extensions: > baddocext extension loaded in * (glob)
99 debug.extensions: - validating extension tables: baddocext
100 debug.extensions: - invoking registered callbacks: baddocext
101 debug.extensions: > callbacks completed in * (glob)
102 debug.extensions: - loading extension: badext2
103 debug.extensions: - could not import hgext.badext2 (No module named *badext2*): trying hgext3rd.badext2 (glob)
102 YYYY/MM/DD HH:MM:SS (PID)> - loading extension: baddocext
103 YYYY/MM/DD HH:MM:SS (PID)> > baddocext extension loaded in * (glob)
104 YYYY/MM/DD HH:MM:SS (PID)> - validating extension tables: baddocext
105 YYYY/MM/DD HH:MM:SS (PID)> - invoking registered callbacks: baddocext
106 YYYY/MM/DD HH:MM:SS (PID)> > callbacks completed in * (glob)
107 YYYY/MM/DD HH:MM:SS (PID)> - loading extension: badext2
108 YYYY/MM/DD HH:MM:SS (PID)> - could not import hgext.badext2 (No module named *badext2*): trying hgext3rd.badext2 (glob)
104 109 Traceback (most recent call last):
105 110 ImportError: No module named badext2 (no-py3 !)
106 111 ModuleNotFoundError: No module named 'hgext.badext2' (py3 !)
107 debug.extensions: - could not import hgext3rd.badext2 (No module named *badext2*): trying badext2 (glob)
112 YYYY/MM/DD HH:MM:SS (PID)> - could not import hgext3rd.badext2 (No module named *badext2*): trying badext2 (glob)
108 113 Traceback (most recent call last):
109 114 ImportError: No module named badext2 (no-py3 !)
110 115 ModuleNotFoundError: No module named 'hgext.badext2' (py3 !)
@@ -118,27 +123,27 b' show traceback for ImportError of hgext.'
118 123 Traceback (most recent call last): (py3 !)
119 124 ModuleNotFoundError: No module named 'badext2' (py3 !)
120 125 ImportError: No module named badext2 (no-py3 !)
121 debug.extensions: > loaded 2 extensions, total time * (glob)
122 debug.extensions: - loading configtable attributes
123 debug.extensions: - executing uisetup hooks
124 debug.extensions: - running uisetup for gpg
125 debug.extensions: > uisetup for gpg took * (glob)
126 debug.extensions: - running uisetup for baddocext
127 debug.extensions: > uisetup for baddocext took * (glob)
128 debug.extensions: > all uisetup took * (glob)
129 debug.extensions: - executing extsetup hooks
130 debug.extensions: - running extsetup for gpg
131 debug.extensions: > extsetup for gpg took * (glob)
132 debug.extensions: - running extsetup for baddocext
133 debug.extensions: > extsetup for baddocext took * (glob)
134 debug.extensions: > all extsetup took * (glob)
135 debug.extensions: - executing remaining aftercallbacks
136 debug.extensions: > remaining aftercallbacks completed in * (glob)
137 debug.extensions: - loading extension registration objects
138 debug.extensions: > extension registration object loading took * (glob)
139 debug.extensions: > extension baddocext take a total of * to load (glob)
140 debug.extensions: > extension gpg take a total of * to load (glob)
141 debug.extensions: extension loading complete
126 YYYY/MM/DD HH:MM:SS (PID)> > loaded 2 extensions, total time * (glob)
127 YYYY/MM/DD HH:MM:SS (PID)> - loading configtable attributes
128 YYYY/MM/DD HH:MM:SS (PID)> - executing uisetup hooks
129 YYYY/MM/DD HH:MM:SS (PID)> - running uisetup for gpg
130 YYYY/MM/DD HH:MM:SS (PID)> > uisetup for gpg took * (glob)
131 YYYY/MM/DD HH:MM:SS (PID)> - running uisetup for baddocext
132 YYYY/MM/DD HH:MM:SS (PID)> > uisetup for baddocext took * (glob)
133 YYYY/MM/DD HH:MM:SS (PID)> > all uisetup took * (glob)
134 YYYY/MM/DD HH:MM:SS (PID)> - executing extsetup hooks
135 YYYY/MM/DD HH:MM:SS (PID)> - running extsetup for gpg
136 YYYY/MM/DD HH:MM:SS (PID)> > extsetup for gpg took * (glob)
137 YYYY/MM/DD HH:MM:SS (PID)> - running extsetup for baddocext
138 YYYY/MM/DD HH:MM:SS (PID)> > extsetup for baddocext took * (glob)
139 YYYY/MM/DD HH:MM:SS (PID)> > all extsetup took * (glob)
140 YYYY/MM/DD HH:MM:SS (PID)> - executing remaining aftercallbacks
141 YYYY/MM/DD HH:MM:SS (PID)> > remaining aftercallbacks completed in * (glob)
142 YYYY/MM/DD HH:MM:SS (PID)> - loading extension registration objects
143 YYYY/MM/DD HH:MM:SS (PID)> > extension registration object loading took * (glob)
144 YYYY/MM/DD HH:MM:SS (PID)> > extension baddocext take a total of * to load (glob)
145 YYYY/MM/DD HH:MM:SS (PID)> > extension gpg take a total of * to load (glob)
146 YYYY/MM/DD HH:MM:SS (PID)> extension loading complete
142 147 #endif
143 148
144 149 confirm that there's no crash when an extension's documentation is bad
@@ -41,54 +41,58 b' Test basic extension support'
41 41 $ echo '[extensions]' >> $HGRCPATH
42 42 $ echo "foobar = $abspath" >> $HGRCPATH
43 43
44 $ filterlog () {
45 > sed -e 's!^[0-9/]* [0-9:]* ([0-9]*)>!YYYY/MM/DD HH:MM:SS (PID)>!'
46 > }
47
44 48 Test extension setup timings
45 49
46 $ hg foo --traceback --config devel.debug.extensions=yes --debug 2>&1
47 debug.extensions: loading extensions
48 debug.extensions: - processing 1 entries
49 debug.extensions: - loading extension: foobar
50 debug.extensions: > foobar extension loaded in * (glob)
51 debug.extensions: - validating extension tables: foobar
52 debug.extensions: - invoking registered callbacks: foobar
53 debug.extensions: > callbacks completed in * (glob)
54 debug.extensions: > loaded 1 extensions, total time * (glob)
55 debug.extensions: - loading configtable attributes
56 debug.extensions: - executing uisetup hooks
57 debug.extensions: - running uisetup for foobar
50 $ hg foo --traceback --config devel.debug.extensions=yes --debug 2>&1 | filterlog
51 YYYY/MM/DD HH:MM:SS (PID)> loading extensions
52 YYYY/MM/DD HH:MM:SS (PID)> - processing 1 entries
53 YYYY/MM/DD HH:MM:SS (PID)> - loading extension: foobar
54 YYYY/MM/DD HH:MM:SS (PID)> > foobar extension loaded in * (glob)
55 YYYY/MM/DD HH:MM:SS (PID)> - validating extension tables: foobar
56 YYYY/MM/DD HH:MM:SS (PID)> - invoking registered callbacks: foobar
57 YYYY/MM/DD HH:MM:SS (PID)> > callbacks completed in * (glob)
58 YYYY/MM/DD HH:MM:SS (PID)> > loaded 1 extensions, total time * (glob)
59 YYYY/MM/DD HH:MM:SS (PID)> - loading configtable attributes
60 YYYY/MM/DD HH:MM:SS (PID)> - executing uisetup hooks
61 YYYY/MM/DD HH:MM:SS (PID)> - running uisetup for foobar
58 62 uisetup called [debug]
59 63 uisetup called
60 64 uisetup called [status]
61 debug.extensions: > uisetup for foobar took * (glob)
62 debug.extensions: > all uisetup took * (glob)
63 debug.extensions: - executing extsetup hooks
64 debug.extensions: - running extsetup for foobar
65 debug.extensions: > extsetup for foobar took * (glob)
66 debug.extensions: > all extsetup took * (glob)
67 debug.extensions: - executing remaining aftercallbacks
68 debug.extensions: > remaining aftercallbacks completed in * (glob)
69 debug.extensions: - loading extension registration objects
70 debug.extensions: > extension registration object loading took * (glob)
71 debug.extensions: > extension foobar take a total of * to load (glob)
72 debug.extensions: extension loading complete
73 debug.extensions: loading additional extensions
74 debug.extensions: - processing 1 entries
75 debug.extensions: > loaded 0 extensions, total time * (glob)
76 debug.extensions: - loading configtable attributes
77 debug.extensions: - executing uisetup hooks
78 debug.extensions: > all uisetup took * (glob)
79 debug.extensions: - executing extsetup hooks
80 debug.extensions: > all extsetup took * (glob)
81 debug.extensions: - executing remaining aftercallbacks
82 debug.extensions: > remaining aftercallbacks completed in * (glob)
83 debug.extensions: - loading extension registration objects
84 debug.extensions: > extension registration object loading took * (glob)
85 debug.extensions: extension loading complete
86 debug.extensions: - executing reposetup hooks
87 debug.extensions: - running reposetup for foobar
65 YYYY/MM/DD HH:MM:SS (PID)> > uisetup for foobar took * (glob)
66 YYYY/MM/DD HH:MM:SS (PID)> > all uisetup took * (glob)
67 YYYY/MM/DD HH:MM:SS (PID)> - executing extsetup hooks
68 YYYY/MM/DD HH:MM:SS (PID)> - running extsetup for foobar
69 YYYY/MM/DD HH:MM:SS (PID)> > extsetup for foobar took * (glob)
70 YYYY/MM/DD HH:MM:SS (PID)> > all extsetup took * (glob)
71 YYYY/MM/DD HH:MM:SS (PID)> - executing remaining aftercallbacks
72 YYYY/MM/DD HH:MM:SS (PID)> > remaining aftercallbacks completed in * (glob)
73 YYYY/MM/DD HH:MM:SS (PID)> - loading extension registration objects
74 YYYY/MM/DD HH:MM:SS (PID)> > extension registration object loading took * (glob)
75 YYYY/MM/DD HH:MM:SS (PID)> > extension foobar take a total of * to load (glob)
76 YYYY/MM/DD HH:MM:SS (PID)> extension loading complete
77 YYYY/MM/DD HH:MM:SS (PID)> loading additional extensions
78 YYYY/MM/DD HH:MM:SS (PID)> - processing 1 entries
79 YYYY/MM/DD HH:MM:SS (PID)> > loaded 0 extensions, total time * (glob)
80 YYYY/MM/DD HH:MM:SS (PID)> - loading configtable attributes
81 YYYY/MM/DD HH:MM:SS (PID)> - executing uisetup hooks
82 YYYY/MM/DD HH:MM:SS (PID)> > all uisetup took * (glob)
83 YYYY/MM/DD HH:MM:SS (PID)> - executing extsetup hooks
84 YYYY/MM/DD HH:MM:SS (PID)> > all extsetup took * (glob)
85 YYYY/MM/DD HH:MM:SS (PID)> - executing remaining aftercallbacks
86 YYYY/MM/DD HH:MM:SS (PID)> > remaining aftercallbacks completed in * (glob)
87 YYYY/MM/DD HH:MM:SS (PID)> - loading extension registration objects
88 YYYY/MM/DD HH:MM:SS (PID)> > extension registration object loading took * (glob)
89 YYYY/MM/DD HH:MM:SS (PID)> extension loading complete
90 YYYY/MM/DD HH:MM:SS (PID)> - executing reposetup hooks
91 YYYY/MM/DD HH:MM:SS (PID)> - running reposetup for foobar
88 92 reposetup called for a
89 93 ui == repo.ui
90 debug.extensions: > reposetup for foobar took * (glob)
91 debug.extensions: > all reposetup took * (glob)
94 YYYY/MM/DD HH:MM:SS (PID)> > reposetup for foobar took * (glob)
95 YYYY/MM/DD HH:MM:SS (PID)> > all reposetup took * (glob)
92 96 Foo
93 97
94 98 $ cd ..
General Comments 0
You need to be logged in to leave comments. Login now