# HG changeset patch # User Brodie Rao # Date 1265538728 -3600 # Node ID c07974215b3da2fd3455425c7630216028f88cea # Parent 2e3ec7ef5349b949079453783c551a71f79426cb extensions: refactor disabled() diff -r 2e3ec7ef5349 -r c07974215b3d mercurial/extensions.py --- a/mercurial/extensions.py Sun Feb 07 14:06:05 2010 +0100 +++ b/mercurial/extensions.py Sun Feb 07 11:32:08 2010 +0100 @@ -131,22 +131,17 @@ setattr(container, funcname, wrap) return origfn -def disabled(): - '''find disabled extensions from hgext - returns a dict of {name: desc}, and the max name length''' - +def _disabledpaths(): + '''find paths of disabled extensions. returns a dict of {name: path}''' import hgext extpath = os.path.dirname(os.path.abspath(hgext.__file__)) - try: # might not be a filesystem path files = os.listdir(extpath) except OSError: - return None, 0 + return {} exts = {} - maxlength = 0 for e in files: - if e.endswith('.py'): name = e.rsplit('.', 1)[0] path = os.path.join(extpath, e) @@ -155,23 +150,42 @@ path = os.path.join(extpath, e, '__init__.py') if not os.path.exists(path): continue + if name in exts or name in _order or name == '__init__': + continue + exts[name] = path + return exts - if name in exts or name in _order or name == '__init__': +def _disabledhelp(path): + '''retrieve help synopsis of a disabled extension (without importing)''' + try: + file = open(path) + except IOError: + return + else: + doc = help.moduledoc(file) + file.close() + + if doc: # extracting localized synopsis + return gettext(doc).splitlines()[0] + else: + return _('(no help text available)') + +def disabled(): + '''find disabled extensions from hgext + returns a dict of {name: desc}, and the max name length''' + + paths = _disabledpaths() + if not paths: + return None, 0 + + exts = {} + maxlength = 0 + for name, path in paths.iteritems(): + doc = _disabledhelp(path) + if not doc: continue - try: - file = open(path) - except IOError: - continue - else: - doc = help.moduledoc(file) - file.close() - - if doc: # extracting localized synopsis - exts[name] = gettext(doc).splitlines()[0] - else: - exts[name] = _('(no help text available)') - + exts[name] = doc if len(name) > maxlength: maxlength = len(name)