comparison mercurial/help.py @ 8871:20a25042fadc

extensions: move extensions listing functions from mercurial.help Includes some small fix-ups to comments in enabled() and disabled().
author C?dric Duval <cedricduval@free.fr>
date Sun, 21 Jun 2009 16:32:00 +0200
parents 37d8a5ddd499
children d0a3eadfbdb3
comparison
equal deleted inserted replaced
8870:c3e4d3c1d48b 8871:20a25042fadc
3 # Copyright 2006 Matt Mackall <mpm@selenic.com> 3 # Copyright 2006 Matt Mackall <mpm@selenic.com>
4 # 4 #
5 # This software may be used and distributed according to the terms of the 5 # This software may be used and distributed according to the terms of the
6 # GNU General Public License version 2, incorporated herein by reference. 6 # GNU General Public License version 2, incorporated herein by reference.
7 7
8 import os, sys 8 from i18n import _
9 from i18n import _, gettext
10 import extensions 9 import extensions
11 10
12
13 # borrowed from pydoc
14 def pathdirs():
15 '''Convert sys.path into a list of absolute, existing, unique paths.'''
16 dirs = []
17 normdirs = []
18 for dir in sys.path:
19 dir = os.path.abspath(dir or '.')
20 normdir = os.path.normcase(dir)
21 if normdir not in normdirs and os.path.isdir(dir):
22 dirs.append(dir)
23 normdirs.append(normdir)
24 return dirs
25 11
26 # loosely inspired by pydoc.source_synopsis() 12 # loosely inspired by pydoc.source_synopsis()
27 # rewritten to handle ''' as well as """ 13 # rewritten to handle ''' as well as """
28 # and to return the whole text instead of just the synopsis 14 # and to return the whole text instead of just the synopsis
29 def moduledoc(file): 15 def moduledoc(file):
51 else: 37 else:
52 return None 38 return None
53 39
54 return ''.join(result) 40 return ''.join(result)
55 41
56 def additionalextensions():
57 '''Find the extensions shipped with Mercurial but not enabled
58
59 Returns extensions names and descriptions, and the max name length
60 '''
61 exts = {}
62 maxlength = 0
63
64 for dir in filter(os.path.isdir,
65 (os.path.join(pd, 'hgext') for pd in pathdirs())):
66 for e in os.listdir(dir):
67 if e.endswith('.py'):
68 name = e.rsplit('.', 1)[0]
69 path = os.path.join(dir, e)
70 else:
71 name = e
72 path = os.path.join(dir, e, '__init__.py')
73
74 if name in exts or name == '__init__' or not os.path.exists(path):
75 continue
76
77 try:
78 extensions.find(name)
79 except KeyError:
80 pass
81 else:
82 continue # enabled extension
83
84 try:
85 file = open(path)
86 except IOError:
87 continue
88 else:
89 doc = moduledoc(file)
90 file.close()
91
92 if doc: # extracting localized synopsis
93 exts[name] = gettext(doc).splitlines()[0]
94 else:
95 exts[name] = _('(no help text available)')
96 if len(name) > maxlength:
97 maxlength = len(name)
98
99 return exts, maxlength
100
101 def enabledextensions():
102 '''Return the list of enabled extensions, and max name length'''
103 enabled = list(extensions.extensions())
104 exts = {}
105 maxlength = 0
106
107 if enabled:
108 exthelps = []
109 for ename, ext in enabled:
110 doc = (gettext(ext.__doc__) or _('(no help text available)'))
111 ename = ename.split('.')[-1]
112 maxlength = max(len(ename), maxlength)
113 exts[ename] = doc.splitlines(0)[0].strip()
114
115 return exts, maxlength
116
117 def extensionslisting(header, exts, maxlength): 42 def extensionslisting(header, exts, maxlength):
118 '''Return a text listing of the given extensions''' 43 '''Return a text listing of the given extensions'''
119 result = '' 44 result = ''
120 45
121 if exts: 46 if exts:
158 hgext.bar = !/path/to/extension/bar.py 83 hgext.bar = !/path/to/extension/bar.py
159 # ditto, but no path was supplied for extension baz 84 # ditto, but no path was supplied for extension baz
160 hgext.baz = ! 85 hgext.baz = !
161 ''') 86 ''')
162 87
163 exts, maxlength = enabledextensions() 88 exts, maxlength = extensions.enabled()
164 doc += extensionslisting(_('enabled extensions:'), exts, maxlength) 89 doc += extensionslisting(_('enabled extensions:'), exts, maxlength)
165 90
166 exts, maxlength = additionalextensions() 91 exts, maxlength = extensions.disabled()
167 doc += extensionslisting(_('non-enabled extensions:'), exts, maxlength) 92 doc += extensionslisting(_('non-enabled extensions:'), exts, maxlength)
168 93
169 return doc 94 return doc
170 95
171 helptable = ( 96 helptable = (