Mercurial > hg
comparison mercurial/extensions.py @ 14317:660b0c1b6196
extensions: move moduledoc to break import loop with help
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Fri, 13 May 2011 11:04:51 -0500 |
parents | d5b525697ddb |
children | 1f46be4689ed |
comparison
equal
deleted
inserted
replaced
14316:d5b525697ddb | 14317:660b0c1b6196 |
---|---|
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 or any later version. | 6 # GNU General Public License version 2 or any later version. |
7 | 7 |
8 import imp, os | 8 import imp, os |
9 import util, cmdutil, help, error | 9 import util, cmdutil, error |
10 from i18n import _, gettext | 10 from i18n import _, gettext |
11 | 11 |
12 _extensions = {} | 12 _extensions = {} |
13 _order = [] | 13 _order = [] |
14 _ignore = ['hbisect', 'bookmarks', 'parentrevspec'] | 14 _ignore = ['hbisect', 'bookmarks', 'parentrevspec'] |
207 if name in exts or name in _order or name == '__init__': | 207 if name in exts or name in _order or name == '__init__': |
208 continue | 208 continue |
209 exts[name] = path | 209 exts[name] = path |
210 return exts | 210 return exts |
211 | 211 |
212 def _moduledoc(file): | |
213 '''return the top-level python documentation for the given file | |
214 | |
215 Loosely inspired by pydoc.source_synopsis(), but rewritten to | |
216 handle triple quotes and to return the whole text instead of just | |
217 the synopsis''' | |
218 result = [] | |
219 | |
220 line = file.readline() | |
221 while line[:1] == '#' or not line.strip(): | |
222 line = file.readline() | |
223 if not line: | |
224 break | |
225 | |
226 start = line[:3] | |
227 if start == '"""' or start == "'''": | |
228 line = line[3:] | |
229 while line: | |
230 if line.rstrip().endswith(start): | |
231 line = line.split(start)[0] | |
232 if line: | |
233 result.append(line) | |
234 break | |
235 elif not line: | |
236 return None # unmatched delimiter | |
237 result.append(line) | |
238 line = file.readline() | |
239 else: | |
240 return None | |
241 | |
242 return ''.join(result) | |
243 | |
212 def _disabledhelp(path): | 244 def _disabledhelp(path): |
213 '''retrieve help synopsis of a disabled extension (without importing)''' | 245 '''retrieve help synopsis of a disabled extension (without importing)''' |
214 try: | 246 try: |
215 file = open(path) | 247 file = open(path) |
216 except IOError: | 248 except IOError: |
217 return | 249 return |
218 else: | 250 else: |
219 doc = help.moduledoc(file) | 251 doc = moduledoc(file) |
220 file.close() | 252 file.close() |
221 | 253 |
222 if doc: # extracting localized synopsis | 254 if doc: # extracting localized synopsis |
223 return gettext(doc).splitlines()[0] | 255 return gettext(doc).splitlines()[0] |
224 else: | 256 else: |