##// END OF EJS Templates
py3: make color use absolute_import
Pulkit Goyal -
r28968:a5d449a7 default
parent child Browse files
Show More
@@ -1,655 +1,664 b''
1 # color.py color output for Mercurial commands
1 # color.py color output for Mercurial commands
2 #
2 #
3 # Copyright (C) 2007 Kevin Christen <kevin.christen@gmail.com>
3 # Copyright (C) 2007 Kevin Christen <kevin.christen@gmail.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 or any later version.
6 # GNU General Public License version 2 or any later version.
7
7
8 '''colorize output from some commands
8 '''colorize output from some commands
9
9
10 The color extension colorizes output from several Mercurial commands.
10 The color extension colorizes output from several Mercurial commands.
11 For example, the diff command shows additions in green and deletions
11 For example, the diff command shows additions in green and deletions
12 in red, while the status command shows modified files in magenta. Many
12 in red, while the status command shows modified files in magenta. Many
13 other commands have analogous colors. It is possible to customize
13 other commands have analogous colors. It is possible to customize
14 these colors.
14 these colors.
15
15
16 Effects
16 Effects
17 -------
17 -------
18
18
19 Other effects in addition to color, like bold and underlined text, are
19 Other effects in addition to color, like bold and underlined text, are
20 also available. By default, the terminfo database is used to find the
20 also available. By default, the terminfo database is used to find the
21 terminal codes used to change color and effect. If terminfo is not
21 terminal codes used to change color and effect. If terminfo is not
22 available, then effects are rendered with the ECMA-48 SGR control
22 available, then effects are rendered with the ECMA-48 SGR control
23 function (aka ANSI escape codes).
23 function (aka ANSI escape codes).
24
24
25 The available effects in terminfo mode are 'blink', 'bold', 'dim',
25 The available effects in terminfo mode are 'blink', 'bold', 'dim',
26 'inverse', 'invisible', 'italic', 'standout', and 'underline'; in
26 'inverse', 'invisible', 'italic', 'standout', and 'underline'; in
27 ECMA-48 mode, the options are 'bold', 'inverse', 'italic', and
27 ECMA-48 mode, the options are 'bold', 'inverse', 'italic', and
28 'underline'. How each is rendered depends on the terminal emulator.
28 'underline'. How each is rendered depends on the terminal emulator.
29 Some may not be available for a given terminal type, and will be
29 Some may not be available for a given terminal type, and will be
30 silently ignored.
30 silently ignored.
31
31
32 Labels
32 Labels
33 ------
33 ------
34
34
35 Text receives color effects depending on the labels that it has. Many
35 Text receives color effects depending on the labels that it has. Many
36 default Mercurial commands emit labelled text. You can also define
36 default Mercurial commands emit labelled text. You can also define
37 your own labels in templates using the label function, see :hg:`help
37 your own labels in templates using the label function, see :hg:`help
38 templates`. A single portion of text may have more than one label. In
38 templates`. A single portion of text may have more than one label. In
39 that case, effects given to the last label will override any other
39 that case, effects given to the last label will override any other
40 effects. This includes the special "none" effect, which nullifies
40 effects. This includes the special "none" effect, which nullifies
41 other effects.
41 other effects.
42
42
43 Labels are normally invisible. In order to see these labels and their
43 Labels are normally invisible. In order to see these labels and their
44 position in the text, use the global --color=debug option. The same
44 position in the text, use the global --color=debug option. The same
45 anchor text may be associated to multiple labels, e.g.
45 anchor text may be associated to multiple labels, e.g.
46
46
47 [log.changeset changeset.secret|changeset: 22611:6f0a53c8f587]
47 [log.changeset changeset.secret|changeset: 22611:6f0a53c8f587]
48
48
49 The following are the default effects for some default labels. Default
49 The following are the default effects for some default labels. Default
50 effects may be overridden from your configuration file::
50 effects may be overridden from your configuration file::
51
51
52 [color]
52 [color]
53 status.modified = blue bold underline red_background
53 status.modified = blue bold underline red_background
54 status.added = green bold
54 status.added = green bold
55 status.removed = red bold blue_background
55 status.removed = red bold blue_background
56 status.deleted = cyan bold underline
56 status.deleted = cyan bold underline
57 status.unknown = magenta bold underline
57 status.unknown = magenta bold underline
58 status.ignored = black bold
58 status.ignored = black bold
59
59
60 # 'none' turns off all effects
60 # 'none' turns off all effects
61 status.clean = none
61 status.clean = none
62 status.copied = none
62 status.copied = none
63
63
64 qseries.applied = blue bold underline
64 qseries.applied = blue bold underline
65 qseries.unapplied = black bold
65 qseries.unapplied = black bold
66 qseries.missing = red bold
66 qseries.missing = red bold
67
67
68 diff.diffline = bold
68 diff.diffline = bold
69 diff.extended = cyan bold
69 diff.extended = cyan bold
70 diff.file_a = red bold
70 diff.file_a = red bold
71 diff.file_b = green bold
71 diff.file_b = green bold
72 diff.hunk = magenta
72 diff.hunk = magenta
73 diff.deleted = red
73 diff.deleted = red
74 diff.inserted = green
74 diff.inserted = green
75 diff.changed = white
75 diff.changed = white
76 diff.tab =
76 diff.tab =
77 diff.trailingwhitespace = bold red_background
77 diff.trailingwhitespace = bold red_background
78
78
79 # Blank so it inherits the style of the surrounding label
79 # Blank so it inherits the style of the surrounding label
80 changeset.public =
80 changeset.public =
81 changeset.draft =
81 changeset.draft =
82 changeset.secret =
82 changeset.secret =
83
83
84 resolve.unresolved = red bold
84 resolve.unresolved = red bold
85 resolve.resolved = green bold
85 resolve.resolved = green bold
86
86
87 bookmarks.active = green
87 bookmarks.active = green
88
88
89 branches.active = none
89 branches.active = none
90 branches.closed = black bold
90 branches.closed = black bold
91 branches.current = green
91 branches.current = green
92 branches.inactive = none
92 branches.inactive = none
93
93
94 tags.normal = green
94 tags.normal = green
95 tags.local = black bold
95 tags.local = black bold
96
96
97 rebase.rebased = blue
97 rebase.rebased = blue
98 rebase.remaining = red bold
98 rebase.remaining = red bold
99
99
100 shelve.age = cyan
100 shelve.age = cyan
101 shelve.newest = green bold
101 shelve.newest = green bold
102 shelve.name = blue bold
102 shelve.name = blue bold
103
103
104 histedit.remaining = red bold
104 histedit.remaining = red bold
105
105
106 Custom colors
106 Custom colors
107 -------------
107 -------------
108
108
109 Because there are only eight standard colors, this module allows you
109 Because there are only eight standard colors, this module allows you
110 to define color names for other color slots which might be available
110 to define color names for other color slots which might be available
111 for your terminal type, assuming terminfo mode. For instance::
111 for your terminal type, assuming terminfo mode. For instance::
112
112
113 color.brightblue = 12
113 color.brightblue = 12
114 color.pink = 207
114 color.pink = 207
115 color.orange = 202
115 color.orange = 202
116
116
117 to set 'brightblue' to color slot 12 (useful for 16 color terminals
117 to set 'brightblue' to color slot 12 (useful for 16 color terminals
118 that have brighter colors defined in the upper eight) and, 'pink' and
118 that have brighter colors defined in the upper eight) and, 'pink' and
119 'orange' to colors in 256-color xterm's default color cube. These
119 'orange' to colors in 256-color xterm's default color cube. These
120 defined colors may then be used as any of the pre-defined eight,
120 defined colors may then be used as any of the pre-defined eight,
121 including appending '_background' to set the background to that color.
121 including appending '_background' to set the background to that color.
122
122
123 Modes
123 Modes
124 -----
124 -----
125
125
126 By default, the color extension will use ANSI mode (or win32 mode on
126 By default, the color extension will use ANSI mode (or win32 mode on
127 Windows) if it detects a terminal. To override auto mode (to enable
127 Windows) if it detects a terminal. To override auto mode (to enable
128 terminfo mode, for example), set the following configuration option::
128 terminfo mode, for example), set the following configuration option::
129
129
130 [color]
130 [color]
131 mode = terminfo
131 mode = terminfo
132
132
133 Any value other than 'ansi', 'win32', 'terminfo', or 'auto' will
133 Any value other than 'ansi', 'win32', 'terminfo', or 'auto' will
134 disable color.
134 disable color.
135
135
136 Note that on some systems, terminfo mode may cause problems when using
136 Note that on some systems, terminfo mode may cause problems when using
137 color with the pager extension and less -R. less with the -R option
137 color with the pager extension and less -R. less with the -R option
138 will only display ECMA-48 color codes, and terminfo mode may sometimes
138 will only display ECMA-48 color codes, and terminfo mode may sometimes
139 emit codes that less doesn't understand. You can work around this by
139 emit codes that less doesn't understand. You can work around this by
140 either using ansi mode (or auto mode), or by using less -r (which will
140 either using ansi mode (or auto mode), or by using less -r (which will
141 pass through all terminal control codes, not just color control
141 pass through all terminal control codes, not just color control
142 codes).
142 codes).
143
143
144 On some systems (such as MSYS in Windows), the terminal may support
144 On some systems (such as MSYS in Windows), the terminal may support
145 a different color mode than the pager (activated via the "pager"
145 a different color mode than the pager (activated via the "pager"
146 extension). It is possible to define separate modes depending on whether
146 extension). It is possible to define separate modes depending on whether
147 the pager is active::
147 the pager is active::
148
148
149 [color]
149 [color]
150 mode = auto
150 mode = auto
151 pagermode = ansi
151 pagermode = ansi
152
152
153 If ``pagermode`` is not defined, the ``mode`` will be used.
153 If ``pagermode`` is not defined, the ``mode`` will be used.
154 '''
154 '''
155
155
156 import os
156 from __future__ import absolute_import
157
157
158 from mercurial import cmdutil, commands, dispatch, extensions, subrepo, util
158 import os
159 from mercurial import ui as uimod
159 from mercurial import (
160 cmdutil,
161 commands,
162 dispatch,
163 extensions,
164 subrepo,
165 ui as uimod,
166 util,
167 )
160 from mercurial.i18n import _
168 from mercurial.i18n import _
161
169
162 cmdtable = {}
170 cmdtable = {}
163 command = cmdutil.command(cmdtable)
171 command = cmdutil.command(cmdtable)
164 # Note for extension authors: ONLY specify testedwith = 'internal' for
172 # Note for extension authors: ONLY specify testedwith = 'internal' for
165 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
173 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should
166 # be specifying the version(s) of Mercurial they are tested with, or
174 # be specifying the version(s) of Mercurial they are tested with, or
167 # leave the attribute unspecified.
175 # leave the attribute unspecified.
168 testedwith = 'internal'
176 testedwith = 'internal'
169
177
170 # start and stop parameters for effects
178 # start and stop parameters for effects
171 _effects = {'none': 0, 'black': 30, 'red': 31, 'green': 32, 'yellow': 33,
179 _effects = {'none': 0, 'black': 30, 'red': 31, 'green': 32, 'yellow': 33,
172 'blue': 34, 'magenta': 35, 'cyan': 36, 'white': 37, 'bold': 1,
180 'blue': 34, 'magenta': 35, 'cyan': 36, 'white': 37, 'bold': 1,
173 'italic': 3, 'underline': 4, 'inverse': 7, 'dim': 2,
181 'italic': 3, 'underline': 4, 'inverse': 7, 'dim': 2,
174 'black_background': 40, 'red_background': 41,
182 'black_background': 40, 'red_background': 41,
175 'green_background': 42, 'yellow_background': 43,
183 'green_background': 42, 'yellow_background': 43,
176 'blue_background': 44, 'purple_background': 45,
184 'blue_background': 44, 'purple_background': 45,
177 'cyan_background': 46, 'white_background': 47}
185 'cyan_background': 46, 'white_background': 47}
178
186
179 def _terminfosetup(ui, mode):
187 def _terminfosetup(ui, mode):
180 '''Initialize terminfo data and the terminal if we're in terminfo mode.'''
188 '''Initialize terminfo data and the terminal if we're in terminfo mode.'''
181
189
182 global _terminfo_params
190 global _terminfo_params
183 # If we failed to load curses, we go ahead and return.
191 # If we failed to load curses, we go ahead and return.
184 if not _terminfo_params:
192 if not _terminfo_params:
185 return
193 return
186 # Otherwise, see what the config file says.
194 # Otherwise, see what the config file says.
187 if mode not in ('auto', 'terminfo'):
195 if mode not in ('auto', 'terminfo'):
188 return
196 return
189
197
190 _terminfo_params.update((key[6:], (False, int(val)))
198 _terminfo_params.update((key[6:], (False, int(val)))
191 for key, val in ui.configitems('color')
199 for key, val in ui.configitems('color')
192 if key.startswith('color.'))
200 if key.startswith('color.'))
193
201
194 try:
202 try:
195 curses.setupterm()
203 curses.setupterm()
196 except curses.error as e:
204 except curses.error as e:
197 _terminfo_params = {}
205 _terminfo_params = {}
198 return
206 return
199
207
200 for key, (b, e) in _terminfo_params.items():
208 for key, (b, e) in _terminfo_params.items():
201 if not b:
209 if not b:
202 continue
210 continue
203 if not curses.tigetstr(e):
211 if not curses.tigetstr(e):
204 # Most terminals don't support dim, invis, etc, so don't be
212 # Most terminals don't support dim, invis, etc, so don't be
205 # noisy and use ui.debug().
213 # noisy and use ui.debug().
206 ui.debug("no terminfo entry for %s\n" % e)
214 ui.debug("no terminfo entry for %s\n" % e)
207 del _terminfo_params[key]
215 del _terminfo_params[key]
208 if not curses.tigetstr('setaf') or not curses.tigetstr('setab'):
216 if not curses.tigetstr('setaf') or not curses.tigetstr('setab'):
209 # Only warn about missing terminfo entries if we explicitly asked for
217 # Only warn about missing terminfo entries if we explicitly asked for
210 # terminfo mode.
218 # terminfo mode.
211 if mode == "terminfo":
219 if mode == "terminfo":
212 ui.warn(_("no terminfo entry for setab/setaf: reverting to "
220 ui.warn(_("no terminfo entry for setab/setaf: reverting to "
213 "ECMA-48 color\n"))
221 "ECMA-48 color\n"))
214 _terminfo_params = {}
222 _terminfo_params = {}
215
223
216 def _modesetup(ui, coloropt):
224 def _modesetup(ui, coloropt):
217 global _terminfo_params
225 global _terminfo_params
218
226
219 if coloropt == 'debug':
227 if coloropt == 'debug':
220 return 'debug'
228 return 'debug'
221
229
222 auto = (coloropt == 'auto')
230 auto = (coloropt == 'auto')
223 always = not auto and util.parsebool(coloropt)
231 always = not auto and util.parsebool(coloropt)
224 if not always and not auto:
232 if not always and not auto:
225 return None
233 return None
226
234
227 formatted = always or (os.environ.get('TERM') != 'dumb' and ui.formatted())
235 formatted = always or (os.environ.get('TERM') != 'dumb' and ui.formatted())
228
236
229 mode = ui.config('color', 'mode', 'auto')
237 mode = ui.config('color', 'mode', 'auto')
230
238
231 # If pager is active, color.pagermode overrides color.mode.
239 # If pager is active, color.pagermode overrides color.mode.
232 if getattr(ui, 'pageractive', False):
240 if getattr(ui, 'pageractive', False):
233 mode = ui.config('color', 'pagermode', mode)
241 mode = ui.config('color', 'pagermode', mode)
234
242
235 realmode = mode
243 realmode = mode
236 if mode == 'auto':
244 if mode == 'auto':
237 if os.name == 'nt':
245 if os.name == 'nt':
238 term = os.environ.get('TERM')
246 term = os.environ.get('TERM')
239 # TERM won't be defined in a vanilla cmd.exe environment.
247 # TERM won't be defined in a vanilla cmd.exe environment.
240
248
241 # UNIX-like environments on Windows such as Cygwin and MSYS will
249 # UNIX-like environments on Windows such as Cygwin and MSYS will
242 # set TERM. They appear to make a best effort attempt at setting it
250 # set TERM. They appear to make a best effort attempt at setting it
243 # to something appropriate. However, not all environments with TERM
251 # to something appropriate. However, not all environments with TERM
244 # defined support ANSI. Since "ansi" could result in terminal
252 # defined support ANSI. Since "ansi" could result in terminal
245 # gibberish, we error on the side of selecting "win32". However, if
253 # gibberish, we error on the side of selecting "win32". However, if
246 # w32effects is not defined, we almost certainly don't support
254 # w32effects is not defined, we almost certainly don't support
247 # "win32", so don't even try.
255 # "win32", so don't even try.
248 if (term and 'xterm' in term) or not w32effects:
256 if (term and 'xterm' in term) or not w32effects:
249 realmode = 'ansi'
257 realmode = 'ansi'
250 else:
258 else:
251 realmode = 'win32'
259 realmode = 'win32'
252 else:
260 else:
253 realmode = 'ansi'
261 realmode = 'ansi'
254
262
255 def modewarn():
263 def modewarn():
256 # only warn if color.mode was explicitly set and we're in
264 # only warn if color.mode was explicitly set and we're in
257 # an interactive terminal
265 # an interactive terminal
258 if mode == realmode and ui.interactive():
266 if mode == realmode and ui.interactive():
259 ui.warn(_('warning: failed to set color mode to %s\n') % mode)
267 ui.warn(_('warning: failed to set color mode to %s\n') % mode)
260
268
261 if realmode == 'win32':
269 if realmode == 'win32':
262 _terminfo_params = {}
270 _terminfo_params = {}
263 if not w32effects:
271 if not w32effects:
264 modewarn()
272 modewarn()
265 return None
273 return None
266 _effects.update(w32effects)
274 _effects.update(w32effects)
267 elif realmode == 'ansi':
275 elif realmode == 'ansi':
268 _terminfo_params = {}
276 _terminfo_params = {}
269 elif realmode == 'terminfo':
277 elif realmode == 'terminfo':
270 _terminfosetup(ui, mode)
278 _terminfosetup(ui, mode)
271 if not _terminfo_params:
279 if not _terminfo_params:
272 ## FIXME Shouldn't we return None in this case too?
280 ## FIXME Shouldn't we return None in this case too?
273 modewarn()
281 modewarn()
274 realmode = 'ansi'
282 realmode = 'ansi'
275 else:
283 else:
276 return None
284 return None
277
285
278 if always or (auto and formatted):
286 if always or (auto and formatted):
279 return realmode
287 return realmode
280 return None
288 return None
281
289
282 try:
290 try:
283 import curses
291 import curses
284 # Mapping from effect name to terminfo attribute name or color number.
292 # Mapping from effect name to terminfo attribute name or color number.
285 # This will also force-load the curses module.
293 # This will also force-load the curses module.
286 _terminfo_params = {'none': (True, 'sgr0'),
294 _terminfo_params = {'none': (True, 'sgr0'),
287 'standout': (True, 'smso'),
295 'standout': (True, 'smso'),
288 'underline': (True, 'smul'),
296 'underline': (True, 'smul'),
289 'reverse': (True, 'rev'),
297 'reverse': (True, 'rev'),
290 'inverse': (True, 'rev'),
298 'inverse': (True, 'rev'),
291 'blink': (True, 'blink'),
299 'blink': (True, 'blink'),
292 'dim': (True, 'dim'),
300 'dim': (True, 'dim'),
293 'bold': (True, 'bold'),
301 'bold': (True, 'bold'),
294 'invisible': (True, 'invis'),
302 'invisible': (True, 'invis'),
295 'italic': (True, 'sitm'),
303 'italic': (True, 'sitm'),
296 'black': (False, curses.COLOR_BLACK),
304 'black': (False, curses.COLOR_BLACK),
297 'red': (False, curses.COLOR_RED),
305 'red': (False, curses.COLOR_RED),
298 'green': (False, curses.COLOR_GREEN),
306 'green': (False, curses.COLOR_GREEN),
299 'yellow': (False, curses.COLOR_YELLOW),
307 'yellow': (False, curses.COLOR_YELLOW),
300 'blue': (False, curses.COLOR_BLUE),
308 'blue': (False, curses.COLOR_BLUE),
301 'magenta': (False, curses.COLOR_MAGENTA),
309 'magenta': (False, curses.COLOR_MAGENTA),
302 'cyan': (False, curses.COLOR_CYAN),
310 'cyan': (False, curses.COLOR_CYAN),
303 'white': (False, curses.COLOR_WHITE)}
311 'white': (False, curses.COLOR_WHITE)}
304 except ImportError:
312 except ImportError:
305 _terminfo_params = {}
313 _terminfo_params = {}
306
314
307 _styles = {'grep.match': 'red bold',
315 _styles = {'grep.match': 'red bold',
308 'grep.linenumber': 'green',
316 'grep.linenumber': 'green',
309 'grep.rev': 'green',
317 'grep.rev': 'green',
310 'grep.change': 'green',
318 'grep.change': 'green',
311 'grep.sep': 'cyan',
319 'grep.sep': 'cyan',
312 'grep.filename': 'magenta',
320 'grep.filename': 'magenta',
313 'grep.user': 'magenta',
321 'grep.user': 'magenta',
314 'grep.date': 'magenta',
322 'grep.date': 'magenta',
315 'bookmarks.active': 'green',
323 'bookmarks.active': 'green',
316 'branches.active': 'none',
324 'branches.active': 'none',
317 'branches.closed': 'black bold',
325 'branches.closed': 'black bold',
318 'branches.current': 'green',
326 'branches.current': 'green',
319 'branches.inactive': 'none',
327 'branches.inactive': 'none',
320 'diff.changed': 'white',
328 'diff.changed': 'white',
321 'diff.deleted': 'red',
329 'diff.deleted': 'red',
322 'diff.diffline': 'bold',
330 'diff.diffline': 'bold',
323 'diff.extended': 'cyan bold',
331 'diff.extended': 'cyan bold',
324 'diff.file_a': 'red bold',
332 'diff.file_a': 'red bold',
325 'diff.file_b': 'green bold',
333 'diff.file_b': 'green bold',
326 'diff.hunk': 'magenta',
334 'diff.hunk': 'magenta',
327 'diff.inserted': 'green',
335 'diff.inserted': 'green',
328 'diff.tab': '',
336 'diff.tab': '',
329 'diff.trailingwhitespace': 'bold red_background',
337 'diff.trailingwhitespace': 'bold red_background',
330 'changeset.public' : '',
338 'changeset.public' : '',
331 'changeset.draft' : '',
339 'changeset.draft' : '',
332 'changeset.secret' : '',
340 'changeset.secret' : '',
333 'diffstat.deleted': 'red',
341 'diffstat.deleted': 'red',
334 'diffstat.inserted': 'green',
342 'diffstat.inserted': 'green',
335 'histedit.remaining': 'red bold',
343 'histedit.remaining': 'red bold',
336 'ui.prompt': 'yellow',
344 'ui.prompt': 'yellow',
337 'log.changeset': 'yellow',
345 'log.changeset': 'yellow',
338 'patchbomb.finalsummary': '',
346 'patchbomb.finalsummary': '',
339 'patchbomb.from': 'magenta',
347 'patchbomb.from': 'magenta',
340 'patchbomb.to': 'cyan',
348 'patchbomb.to': 'cyan',
341 'patchbomb.subject': 'green',
349 'patchbomb.subject': 'green',
342 'patchbomb.diffstats': '',
350 'patchbomb.diffstats': '',
343 'rebase.rebased': 'blue',
351 'rebase.rebased': 'blue',
344 'rebase.remaining': 'red bold',
352 'rebase.remaining': 'red bold',
345 'resolve.resolved': 'green bold',
353 'resolve.resolved': 'green bold',
346 'resolve.unresolved': 'red bold',
354 'resolve.unresolved': 'red bold',
347 'shelve.age': 'cyan',
355 'shelve.age': 'cyan',
348 'shelve.newest': 'green bold',
356 'shelve.newest': 'green bold',
349 'shelve.name': 'blue bold',
357 'shelve.name': 'blue bold',
350 'status.added': 'green bold',
358 'status.added': 'green bold',
351 'status.clean': 'none',
359 'status.clean': 'none',
352 'status.copied': 'none',
360 'status.copied': 'none',
353 'status.deleted': 'cyan bold underline',
361 'status.deleted': 'cyan bold underline',
354 'status.ignored': 'black bold',
362 'status.ignored': 'black bold',
355 'status.modified': 'blue bold',
363 'status.modified': 'blue bold',
356 'status.removed': 'red bold',
364 'status.removed': 'red bold',
357 'status.unknown': 'magenta bold underline',
365 'status.unknown': 'magenta bold underline',
358 'tags.normal': 'green',
366 'tags.normal': 'green',
359 'tags.local': 'black bold'}
367 'tags.local': 'black bold'}
360
368
361
369
362 def _effect_str(effect):
370 def _effect_str(effect):
363 '''Helper function for render_effects().'''
371 '''Helper function for render_effects().'''
364
372
365 bg = False
373 bg = False
366 if effect.endswith('_background'):
374 if effect.endswith('_background'):
367 bg = True
375 bg = True
368 effect = effect[:-11]
376 effect = effect[:-11]
369 attr, val = _terminfo_params[effect]
377 attr, val = _terminfo_params[effect]
370 if attr:
378 if attr:
371 return curses.tigetstr(val)
379 return curses.tigetstr(val)
372 elif bg:
380 elif bg:
373 return curses.tparm(curses.tigetstr('setab'), val)
381 return curses.tparm(curses.tigetstr('setab'), val)
374 else:
382 else:
375 return curses.tparm(curses.tigetstr('setaf'), val)
383 return curses.tparm(curses.tigetstr('setaf'), val)
376
384
377 def render_effects(text, effects):
385 def render_effects(text, effects):
378 'Wrap text in commands to turn on each effect.'
386 'Wrap text in commands to turn on each effect.'
379 if not text:
387 if not text:
380 return text
388 return text
381 if not _terminfo_params:
389 if not _terminfo_params:
382 start = [str(_effects[e]) for e in ['none'] + effects.split()]
390 start = [str(_effects[e]) for e in ['none'] + effects.split()]
383 start = '\033[' + ';'.join(start) + 'm'
391 start = '\033[' + ';'.join(start) + 'm'
384 stop = '\033[' + str(_effects['none']) + 'm'
392 stop = '\033[' + str(_effects['none']) + 'm'
385 else:
393 else:
386 start = ''.join(_effect_str(effect)
394 start = ''.join(_effect_str(effect)
387 for effect in ['none'] + effects.split())
395 for effect in ['none'] + effects.split())
388 stop = _effect_str('none')
396 stop = _effect_str('none')
389 return ''.join([start, text, stop])
397 return ''.join([start, text, stop])
390
398
391 def extstyles():
399 def extstyles():
392 for name, ext in extensions.extensions():
400 for name, ext in extensions.extensions():
393 _styles.update(getattr(ext, 'colortable', {}))
401 _styles.update(getattr(ext, 'colortable', {}))
394
402
395 def valideffect(effect):
403 def valideffect(effect):
396 'Determine if the effect is valid or not.'
404 'Determine if the effect is valid or not.'
397 good = False
405 good = False
398 if not _terminfo_params and effect in _effects:
406 if not _terminfo_params and effect in _effects:
399 good = True
407 good = True
400 elif effect in _terminfo_params or effect[:-11] in _terminfo_params:
408 elif effect in _terminfo_params or effect[:-11] in _terminfo_params:
401 good = True
409 good = True
402 return good
410 return good
403
411
404 def configstyles(ui):
412 def configstyles(ui):
405 for status, cfgeffects in ui.configitems('color'):
413 for status, cfgeffects in ui.configitems('color'):
406 if '.' not in status or status.startswith('color.'):
414 if '.' not in status or status.startswith('color.'):
407 continue
415 continue
408 cfgeffects = ui.configlist('color', status)
416 cfgeffects = ui.configlist('color', status)
409 if cfgeffects:
417 if cfgeffects:
410 good = []
418 good = []
411 for e in cfgeffects:
419 for e in cfgeffects:
412 if valideffect(e):
420 if valideffect(e):
413 good.append(e)
421 good.append(e)
414 else:
422 else:
415 ui.warn(_("ignoring unknown color/effect %r "
423 ui.warn(_("ignoring unknown color/effect %r "
416 "(configured in color.%s)\n")
424 "(configured in color.%s)\n")
417 % (e, status))
425 % (e, status))
418 _styles[status] = ' '.join(good)
426 _styles[status] = ' '.join(good)
419
427
420 class colorui(uimod.ui):
428 class colorui(uimod.ui):
421 _colormode = 'ansi'
429 _colormode = 'ansi'
422 def write(self, *args, **opts):
430 def write(self, *args, **opts):
423 if self._colormode is None:
431 if self._colormode is None:
424 return super(colorui, self).write(*args, **opts)
432 return super(colorui, self).write(*args, **opts)
425
433
426 label = opts.get('label', '')
434 label = opts.get('label', '')
427 if self._buffers and not opts.get('prompt', False):
435 if self._buffers and not opts.get('prompt', False):
428 if self._bufferapplylabels:
436 if self._bufferapplylabels:
429 self._buffers[-1].extend(self.label(a, label) for a in args)
437 self._buffers[-1].extend(self.label(a, label) for a in args)
430 else:
438 else:
431 self._buffers[-1].extend(args)
439 self._buffers[-1].extend(args)
432 elif self._colormode == 'win32':
440 elif self._colormode == 'win32':
433 for a in args:
441 for a in args:
434 win32print(a, super(colorui, self).write, **opts)
442 win32print(a, super(colorui, self).write, **opts)
435 else:
443 else:
436 return super(colorui, self).write(
444 return super(colorui, self).write(
437 *[self.label(a, label) for a in args], **opts)
445 *[self.label(a, label) for a in args], **opts)
438
446
439 def write_err(self, *args, **opts):
447 def write_err(self, *args, **opts):
440 if self._colormode is None:
448 if self._colormode is None:
441 return super(colorui, self).write_err(*args, **opts)
449 return super(colorui, self).write_err(*args, **opts)
442
450
443 label = opts.get('label', '')
451 label = opts.get('label', '')
444 if self._bufferstates and self._bufferstates[-1][0]:
452 if self._bufferstates and self._bufferstates[-1][0]:
445 return self.write(*args, **opts)
453 return self.write(*args, **opts)
446 if self._colormode == 'win32':
454 if self._colormode == 'win32':
447 for a in args:
455 for a in args:
448 win32print(a, super(colorui, self).write_err, **opts)
456 win32print(a, super(colorui, self).write_err, **opts)
449 else:
457 else:
450 return super(colorui, self).write_err(
458 return super(colorui, self).write_err(
451 *[self.label(a, label) for a in args], **opts)
459 *[self.label(a, label) for a in args], **opts)
452
460
453 def showlabel(self, msg, label):
461 def showlabel(self, msg, label):
454 if label and msg:
462 if label and msg:
455 if msg[-1] == '\n':
463 if msg[-1] == '\n':
456 return "[%s|%s]\n" % (label, msg[:-1])
464 return "[%s|%s]\n" % (label, msg[:-1])
457 else:
465 else:
458 return "[%s|%s]" % (label, msg)
466 return "[%s|%s]" % (label, msg)
459 else:
467 else:
460 return msg
468 return msg
461
469
462 def label(self, msg, label):
470 def label(self, msg, label):
463 if self._colormode is None:
471 if self._colormode is None:
464 return super(colorui, self).label(msg, label)
472 return super(colorui, self).label(msg, label)
465
473
466 if self._colormode == 'debug':
474 if self._colormode == 'debug':
467 return self.showlabel(msg, label)
475 return self.showlabel(msg, label)
468
476
469 effects = []
477 effects = []
470 for l in label.split():
478 for l in label.split():
471 s = _styles.get(l, '')
479 s = _styles.get(l, '')
472 if s:
480 if s:
473 effects.append(s)
481 effects.append(s)
474 elif valideffect(l):
482 elif valideffect(l):
475 effects.append(l)
483 effects.append(l)
476 effects = ' '.join(effects)
484 effects = ' '.join(effects)
477 if effects:
485 if effects:
478 return '\n'.join([render_effects(s, effects)
486 return '\n'.join([render_effects(s, effects)
479 for s in msg.split('\n')])
487 for s in msg.split('\n')])
480 return msg
488 return msg
481
489
482 def uisetup(ui):
490 def uisetup(ui):
483 if ui.plain():
491 if ui.plain():
484 return
492 return
485 if not isinstance(ui, colorui):
493 if not isinstance(ui, colorui):
486 colorui.__bases__ = (ui.__class__,)
494 colorui.__bases__ = (ui.__class__,)
487 ui.__class__ = colorui
495 ui.__class__ = colorui
488 def colorcmd(orig, ui_, opts, cmd, cmdfunc):
496 def colorcmd(orig, ui_, opts, cmd, cmdfunc):
489 mode = _modesetup(ui_, opts['color'])
497 mode = _modesetup(ui_, opts['color'])
490 colorui._colormode = mode
498 colorui._colormode = mode
491 if mode and mode != 'debug':
499 if mode and mode != 'debug':
492 extstyles()
500 extstyles()
493 configstyles(ui_)
501 configstyles(ui_)
494 return orig(ui_, opts, cmd, cmdfunc)
502 return orig(ui_, opts, cmd, cmdfunc)
495 def colorgit(orig, gitsub, commands, env=None, stream=False, cwd=None):
503 def colorgit(orig, gitsub, commands, env=None, stream=False, cwd=None):
496 if gitsub.ui._colormode and len(commands) and commands[0] == "diff":
504 if gitsub.ui._colormode and len(commands) and commands[0] == "diff":
497 # insert the argument in the front,
505 # insert the argument in the front,
498 # the end of git diff arguments is used for paths
506 # the end of git diff arguments is used for paths
499 commands.insert(1, '--color')
507 commands.insert(1, '--color')
500 return orig(gitsub, commands, env, stream, cwd)
508 return orig(gitsub, commands, env, stream, cwd)
501 extensions.wrapfunction(dispatch, '_runcommand', colorcmd)
509 extensions.wrapfunction(dispatch, '_runcommand', colorcmd)
502 extensions.wrapfunction(subrepo.gitsubrepo, '_gitnodir', colorgit)
510 extensions.wrapfunction(subrepo.gitsubrepo, '_gitnodir', colorgit)
503
511
504 def extsetup(ui):
512 def extsetup(ui):
505 commands.globalopts.append(
513 commands.globalopts.append(
506 ('', 'color', 'auto',
514 ('', 'color', 'auto',
507 # i18n: 'always', 'auto', 'never', and 'debug' are keywords
515 # i18n: 'always', 'auto', 'never', and 'debug' are keywords
508 # and should not be translated
516 # and should not be translated
509 _("when to colorize (boolean, always, auto, never, or debug)"),
517 _("when to colorize (boolean, always, auto, never, or debug)"),
510 _('TYPE')))
518 _('TYPE')))
511
519
512 @command('debugcolor', [], 'hg debugcolor')
520 @command('debugcolor', [], 'hg debugcolor')
513 def debugcolor(ui, repo, **opts):
521 def debugcolor(ui, repo, **opts):
514 global _styles
522 global _styles
515 _styles = {}
523 _styles = {}
516 for effect in _effects.keys():
524 for effect in _effects.keys():
517 _styles[effect] = effect
525 _styles[effect] = effect
518 ui.write(('color mode: %s\n') % ui._colormode)
526 ui.write(('color mode: %s\n') % ui._colormode)
519 ui.write(_('available colors:\n'))
527 ui.write(_('available colors:\n'))
520 for label, colors in _styles.items():
528 for label, colors in _styles.items():
521 ui.write(('%s\n') % colors, label=label)
529 ui.write(('%s\n') % colors, label=label)
522
530
523 if os.name != 'nt':
531 if os.name != 'nt':
524 w32effects = None
532 w32effects = None
525 else:
533 else:
526 import re, ctypes
534 import ctypes
535 import re
527
536
528 _kernel32 = ctypes.windll.kernel32
537 _kernel32 = ctypes.windll.kernel32
529
538
530 _WORD = ctypes.c_ushort
539 _WORD = ctypes.c_ushort
531
540
532 _INVALID_HANDLE_VALUE = -1
541 _INVALID_HANDLE_VALUE = -1
533
542
534 class _COORD(ctypes.Structure):
543 class _COORD(ctypes.Structure):
535 _fields_ = [('X', ctypes.c_short),
544 _fields_ = [('X', ctypes.c_short),
536 ('Y', ctypes.c_short)]
545 ('Y', ctypes.c_short)]
537
546
538 class _SMALL_RECT(ctypes.Structure):
547 class _SMALL_RECT(ctypes.Structure):
539 _fields_ = [('Left', ctypes.c_short),
548 _fields_ = [('Left', ctypes.c_short),
540 ('Top', ctypes.c_short),
549 ('Top', ctypes.c_short),
541 ('Right', ctypes.c_short),
550 ('Right', ctypes.c_short),
542 ('Bottom', ctypes.c_short)]
551 ('Bottom', ctypes.c_short)]
543
552
544 class _CONSOLE_SCREEN_BUFFER_INFO(ctypes.Structure):
553 class _CONSOLE_SCREEN_BUFFER_INFO(ctypes.Structure):
545 _fields_ = [('dwSize', _COORD),
554 _fields_ = [('dwSize', _COORD),
546 ('dwCursorPosition', _COORD),
555 ('dwCursorPosition', _COORD),
547 ('wAttributes', _WORD),
556 ('wAttributes', _WORD),
548 ('srWindow', _SMALL_RECT),
557 ('srWindow', _SMALL_RECT),
549 ('dwMaximumWindowSize', _COORD)]
558 ('dwMaximumWindowSize', _COORD)]
550
559
551 _STD_OUTPUT_HANDLE = 0xfffffff5L # (DWORD)-11
560 _STD_OUTPUT_HANDLE = 0xfffffff5L # (DWORD)-11
552 _STD_ERROR_HANDLE = 0xfffffff4L # (DWORD)-12
561 _STD_ERROR_HANDLE = 0xfffffff4L # (DWORD)-12
553
562
554 _FOREGROUND_BLUE = 0x0001
563 _FOREGROUND_BLUE = 0x0001
555 _FOREGROUND_GREEN = 0x0002
564 _FOREGROUND_GREEN = 0x0002
556 _FOREGROUND_RED = 0x0004
565 _FOREGROUND_RED = 0x0004
557 _FOREGROUND_INTENSITY = 0x0008
566 _FOREGROUND_INTENSITY = 0x0008
558
567
559 _BACKGROUND_BLUE = 0x0010
568 _BACKGROUND_BLUE = 0x0010
560 _BACKGROUND_GREEN = 0x0020
569 _BACKGROUND_GREEN = 0x0020
561 _BACKGROUND_RED = 0x0040
570 _BACKGROUND_RED = 0x0040
562 _BACKGROUND_INTENSITY = 0x0080
571 _BACKGROUND_INTENSITY = 0x0080
563
572
564 _COMMON_LVB_REVERSE_VIDEO = 0x4000
573 _COMMON_LVB_REVERSE_VIDEO = 0x4000
565 _COMMON_LVB_UNDERSCORE = 0x8000
574 _COMMON_LVB_UNDERSCORE = 0x8000
566
575
567 # http://msdn.microsoft.com/en-us/library/ms682088%28VS.85%29.aspx
576 # http://msdn.microsoft.com/en-us/library/ms682088%28VS.85%29.aspx
568 w32effects = {
577 w32effects = {
569 'none': -1,
578 'none': -1,
570 'black': 0,
579 'black': 0,
571 'red': _FOREGROUND_RED,
580 'red': _FOREGROUND_RED,
572 'green': _FOREGROUND_GREEN,
581 'green': _FOREGROUND_GREEN,
573 'yellow': _FOREGROUND_RED | _FOREGROUND_GREEN,
582 'yellow': _FOREGROUND_RED | _FOREGROUND_GREEN,
574 'blue': _FOREGROUND_BLUE,
583 'blue': _FOREGROUND_BLUE,
575 'magenta': _FOREGROUND_BLUE | _FOREGROUND_RED,
584 'magenta': _FOREGROUND_BLUE | _FOREGROUND_RED,
576 'cyan': _FOREGROUND_BLUE | _FOREGROUND_GREEN,
585 'cyan': _FOREGROUND_BLUE | _FOREGROUND_GREEN,
577 'white': _FOREGROUND_RED | _FOREGROUND_GREEN | _FOREGROUND_BLUE,
586 'white': _FOREGROUND_RED | _FOREGROUND_GREEN | _FOREGROUND_BLUE,
578 'bold': _FOREGROUND_INTENSITY,
587 'bold': _FOREGROUND_INTENSITY,
579 'black_background': 0x100, # unused value > 0x0f
588 'black_background': 0x100, # unused value > 0x0f
580 'red_background': _BACKGROUND_RED,
589 'red_background': _BACKGROUND_RED,
581 'green_background': _BACKGROUND_GREEN,
590 'green_background': _BACKGROUND_GREEN,
582 'yellow_background': _BACKGROUND_RED | _BACKGROUND_GREEN,
591 'yellow_background': _BACKGROUND_RED | _BACKGROUND_GREEN,
583 'blue_background': _BACKGROUND_BLUE,
592 'blue_background': _BACKGROUND_BLUE,
584 'purple_background': _BACKGROUND_BLUE | _BACKGROUND_RED,
593 'purple_background': _BACKGROUND_BLUE | _BACKGROUND_RED,
585 'cyan_background': _BACKGROUND_BLUE | _BACKGROUND_GREEN,
594 'cyan_background': _BACKGROUND_BLUE | _BACKGROUND_GREEN,
586 'white_background': (_BACKGROUND_RED | _BACKGROUND_GREEN |
595 'white_background': (_BACKGROUND_RED | _BACKGROUND_GREEN |
587 _BACKGROUND_BLUE),
596 _BACKGROUND_BLUE),
588 'bold_background': _BACKGROUND_INTENSITY,
597 'bold_background': _BACKGROUND_INTENSITY,
589 'underline': _COMMON_LVB_UNDERSCORE, # double-byte charsets only
598 'underline': _COMMON_LVB_UNDERSCORE, # double-byte charsets only
590 'inverse': _COMMON_LVB_REVERSE_VIDEO, # double-byte charsets only
599 'inverse': _COMMON_LVB_REVERSE_VIDEO, # double-byte charsets only
591 }
600 }
592
601
593 passthrough = set([_FOREGROUND_INTENSITY,
602 passthrough = set([_FOREGROUND_INTENSITY,
594 _BACKGROUND_INTENSITY,
603 _BACKGROUND_INTENSITY,
595 _COMMON_LVB_UNDERSCORE,
604 _COMMON_LVB_UNDERSCORE,
596 _COMMON_LVB_REVERSE_VIDEO])
605 _COMMON_LVB_REVERSE_VIDEO])
597
606
598 stdout = _kernel32.GetStdHandle(
607 stdout = _kernel32.GetStdHandle(
599 _STD_OUTPUT_HANDLE) # don't close the handle returned
608 _STD_OUTPUT_HANDLE) # don't close the handle returned
600 if stdout is None or stdout == _INVALID_HANDLE_VALUE:
609 if stdout is None or stdout == _INVALID_HANDLE_VALUE:
601 w32effects = None
610 w32effects = None
602 else:
611 else:
603 csbi = _CONSOLE_SCREEN_BUFFER_INFO()
612 csbi = _CONSOLE_SCREEN_BUFFER_INFO()
604 if not _kernel32.GetConsoleScreenBufferInfo(
613 if not _kernel32.GetConsoleScreenBufferInfo(
605 stdout, ctypes.byref(csbi)):
614 stdout, ctypes.byref(csbi)):
606 # stdout may not support GetConsoleScreenBufferInfo()
615 # stdout may not support GetConsoleScreenBufferInfo()
607 # when called from subprocess or redirected
616 # when called from subprocess or redirected
608 w32effects = None
617 w32effects = None
609 else:
618 else:
610 origattr = csbi.wAttributes
619 origattr = csbi.wAttributes
611 ansire = re.compile('\033\[([^m]*)m([^\033]*)(.*)',
620 ansire = re.compile('\033\[([^m]*)m([^\033]*)(.*)',
612 re.MULTILINE | re.DOTALL)
621 re.MULTILINE | re.DOTALL)
613
622
614 def win32print(text, orig, **opts):
623 def win32print(text, orig, **opts):
615 label = opts.get('label', '')
624 label = opts.get('label', '')
616 attr = origattr
625 attr = origattr
617
626
618 def mapcolor(val, attr):
627 def mapcolor(val, attr):
619 if val == -1:
628 if val == -1:
620 return origattr
629 return origattr
621 elif val in passthrough:
630 elif val in passthrough:
622 return attr | val
631 return attr | val
623 elif val > 0x0f:
632 elif val > 0x0f:
624 return (val & 0x70) | (attr & 0x8f)
633 return (val & 0x70) | (attr & 0x8f)
625 else:
634 else:
626 return (val & 0x07) | (attr & 0xf8)
635 return (val & 0x07) | (attr & 0xf8)
627
636
628 # determine console attributes based on labels
637 # determine console attributes based on labels
629 for l in label.split():
638 for l in label.split():
630 style = _styles.get(l, '')
639 style = _styles.get(l, '')
631 for effect in style.split():
640 for effect in style.split():
632 try:
641 try:
633 attr = mapcolor(w32effects[effect], attr)
642 attr = mapcolor(w32effects[effect], attr)
634 except KeyError:
643 except KeyError:
635 # w32effects could not have certain attributes so we skip
644 # w32effects could not have certain attributes so we skip
636 # them if not found
645 # them if not found
637 pass
646 pass
638 # hack to ensure regexp finds data
647 # hack to ensure regexp finds data
639 if not text.startswith('\033['):
648 if not text.startswith('\033['):
640 text = '\033[m' + text
649 text = '\033[m' + text
641
650
642 # Look for ANSI-like codes embedded in text
651 # Look for ANSI-like codes embedded in text
643 m = re.match(ansire, text)
652 m = re.match(ansire, text)
644
653
645 try:
654 try:
646 while m:
655 while m:
647 for sattr in m.group(1).split(';'):
656 for sattr in m.group(1).split(';'):
648 if sattr:
657 if sattr:
649 attr = mapcolor(int(sattr), attr)
658 attr = mapcolor(int(sattr), attr)
650 _kernel32.SetConsoleTextAttribute(stdout, attr)
659 _kernel32.SetConsoleTextAttribute(stdout, attr)
651 orig(m.group(2), **opts)
660 orig(m.group(2), **opts)
652 m = re.match(ansire, m.group(3))
661 m = re.match(ansire, m.group(3))
653 finally:
662 finally:
654 # Explicitly reset original attributes
663 # Explicitly reset original attributes
655 _kernel32.SetConsoleTextAttribute(stdout, origattr)
664 _kernel32.SetConsoleTextAttribute(stdout, origattr)
@@ -1,180 +1,179 b''
1 #require test-repo
1 #require test-repo
2
2
3 $ cd "$TESTDIR"/..
3 $ cd "$TESTDIR"/..
4
4
5 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs python contrib/check-py3-compat.py
5 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs python contrib/check-py3-compat.py
6 hgext/color.py not using absolute_import
7 hgext/eol.py not using absolute_import
6 hgext/eol.py not using absolute_import
8 hgext/extdiff.py not using absolute_import
7 hgext/extdiff.py not using absolute_import
9 hgext/factotum.py not using absolute_import
8 hgext/factotum.py not using absolute_import
10 hgext/fetch.py not using absolute_import
9 hgext/fetch.py not using absolute_import
11 hgext/fsmonitor/pywatchman/__init__.py not using absolute_import
10 hgext/fsmonitor/pywatchman/__init__.py not using absolute_import
12 hgext/fsmonitor/pywatchman/__init__.py requires print_function
11 hgext/fsmonitor/pywatchman/__init__.py requires print_function
13 hgext/fsmonitor/pywatchman/capabilities.py not using absolute_import
12 hgext/fsmonitor/pywatchman/capabilities.py not using absolute_import
14 hgext/fsmonitor/pywatchman/pybser.py not using absolute_import
13 hgext/fsmonitor/pywatchman/pybser.py not using absolute_import
15 hgext/gpg.py not using absolute_import
14 hgext/gpg.py not using absolute_import
16 hgext/graphlog.py not using absolute_import
15 hgext/graphlog.py not using absolute_import
17 hgext/hgcia.py not using absolute_import
16 hgext/hgcia.py not using absolute_import
18 hgext/hgk.py not using absolute_import
17 hgext/hgk.py not using absolute_import
19 hgext/highlight/__init__.py not using absolute_import
18 hgext/highlight/__init__.py not using absolute_import
20 hgext/highlight/highlight.py not using absolute_import
19 hgext/highlight/highlight.py not using absolute_import
21 hgext/histedit.py not using absolute_import
20 hgext/histedit.py not using absolute_import
22 hgext/largefiles/__init__.py not using absolute_import
21 hgext/largefiles/__init__.py not using absolute_import
23 hgext/largefiles/basestore.py not using absolute_import
22 hgext/largefiles/basestore.py not using absolute_import
24 hgext/largefiles/lfcommands.py not using absolute_import
23 hgext/largefiles/lfcommands.py not using absolute_import
25 hgext/largefiles/lfutil.py not using absolute_import
24 hgext/largefiles/lfutil.py not using absolute_import
26 hgext/largefiles/localstore.py not using absolute_import
25 hgext/largefiles/localstore.py not using absolute_import
27 hgext/largefiles/overrides.py not using absolute_import
26 hgext/largefiles/overrides.py not using absolute_import
28 hgext/largefiles/proto.py not using absolute_import
27 hgext/largefiles/proto.py not using absolute_import
29 hgext/largefiles/remotestore.py not using absolute_import
28 hgext/largefiles/remotestore.py not using absolute_import
30 hgext/largefiles/reposetup.py not using absolute_import
29 hgext/largefiles/reposetup.py not using absolute_import
31 hgext/largefiles/uisetup.py not using absolute_import
30 hgext/largefiles/uisetup.py not using absolute_import
32 hgext/largefiles/wirestore.py not using absolute_import
31 hgext/largefiles/wirestore.py not using absolute_import
33 hgext/mq.py not using absolute_import
32 hgext/mq.py not using absolute_import
34 hgext/rebase.py not using absolute_import
33 hgext/rebase.py not using absolute_import
35 hgext/share.py not using absolute_import
34 hgext/share.py not using absolute_import
36 hgext/win32text.py not using absolute_import
35 hgext/win32text.py not using absolute_import
37 i18n/check-translation.py not using absolute_import
36 i18n/check-translation.py not using absolute_import
38 i18n/polib.py not using absolute_import
37 i18n/polib.py not using absolute_import
39 setup.py not using absolute_import
38 setup.py not using absolute_import
40 tests/heredoctest.py requires print_function
39 tests/heredoctest.py requires print_function
41 tests/md5sum.py not using absolute_import
40 tests/md5sum.py not using absolute_import
42 tests/readlink.py not using absolute_import
41 tests/readlink.py not using absolute_import
43 tests/readlink.py requires print_function
42 tests/readlink.py requires print_function
44 tests/run-tests.py not using absolute_import
43 tests/run-tests.py not using absolute_import
45 tests/svn-safe-append.py not using absolute_import
44 tests/svn-safe-append.py not using absolute_import
46 tests/test-atomictempfile.py not using absolute_import
45 tests/test-atomictempfile.py not using absolute_import
47 tests/test-demandimport.py not using absolute_import
46 tests/test-demandimport.py not using absolute_import
48
47
49 #if py3exe
48 #if py3exe
50 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs $PYTHON3 contrib/check-py3-compat.py
49 $ hg files 'set:(**.py)' | sed 's|\\|/|g' | xargs $PYTHON3 contrib/check-py3-compat.py
51 contrib/check-code.py: invalid syntax: (unicode error) 'unicodeescape' codec can't decode bytes in position *-*: malformed \N character escape (<unknown>, line *) (glob)
50 contrib/check-code.py: invalid syntax: (unicode error) 'unicodeescape' codec can't decode bytes in position *-*: malformed \N character escape (<unknown>, line *) (glob)
52 doc/hgmanpage.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
51 doc/hgmanpage.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
53 hgext/automv.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
52 hgext/automv.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
54 hgext/blackbox.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
53 hgext/blackbox.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
55 hgext/bugzilla.py: error importing module: <ImportError> No module named 'urlparse' (line *) (glob)
54 hgext/bugzilla.py: error importing module: <ImportError> No module named 'urlparse' (line *) (glob)
56 hgext/censor.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
55 hgext/censor.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
57 hgext/chgserver.py: error importing module: <ImportError> No module named 'SocketServer' (line *) (glob)
56 hgext/chgserver.py: error importing module: <ImportError> No module named 'SocketServer' (line *) (glob)
58 hgext/children.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
57 hgext/children.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
59 hgext/churn.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
58 hgext/churn.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
60 hgext/clonebundles.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
59 hgext/clonebundles.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
61 hgext/color.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
60 hgext/color.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
62 hgext/convert/bzr.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
61 hgext/convert/bzr.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
63 hgext/convert/common.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
62 hgext/convert/common.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
64 hgext/convert/convcmd.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
63 hgext/convert/convcmd.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
65 hgext/convert/cvs.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
64 hgext/convert/cvs.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
66 hgext/convert/cvsps.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
65 hgext/convert/cvsps.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
67 hgext/convert/darcs.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
66 hgext/convert/darcs.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
68 hgext/convert/filemap.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
67 hgext/convert/filemap.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
69 hgext/convert/git.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
68 hgext/convert/git.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
70 hgext/convert/gnuarch.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
69 hgext/convert/gnuarch.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
71 hgext/convert/hg.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
70 hgext/convert/hg.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
72 hgext/convert/monotone.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
71 hgext/convert/monotone.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
73 hgext/convert/p*.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
72 hgext/convert/p*.py: error importing module: <SystemError> Parent module 'hgext.convert' not loaded, cannot perform relative import (line *) (glob)
74 hgext/convert/subversion.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
73 hgext/convert/subversion.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
75 hgext/convert/transport.py: error importing module: <ImportError> No module named 'svn.client' (line *) (glob)
74 hgext/convert/transport.py: error importing module: <ImportError> No module named 'svn.client' (line *) (glob)
76 hgext/eol.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
75 hgext/eol.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
77 hgext/extdiff.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
76 hgext/extdiff.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
78 hgext/factotum.py: error importing: <ImportError> No module named 'httplib' (error at url.py:*) (glob)
77 hgext/factotum.py: error importing: <ImportError> No module named 'httplib' (error at url.py:*) (glob)
79 hgext/fetch.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
78 hgext/fetch.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
80 hgext/fsmonitor/watchmanclient.py: error importing module: <SystemError> Parent module 'hgext.fsmonitor' not loaded, cannot perform relative import (line *) (glob)
79 hgext/fsmonitor/watchmanclient.py: error importing module: <SystemError> Parent module 'hgext.fsmonitor' not loaded, cannot perform relative import (line *) (glob)
81 hgext/gpg.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
80 hgext/gpg.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
82 hgext/graphlog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
81 hgext/graphlog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
83 hgext/hgcia.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
82 hgext/hgcia.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
84 hgext/hgk.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
83 hgext/hgk.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
85 hgext/histedit.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
84 hgext/histedit.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
86 hgext/keyword.py: error importing: <ImportError> No module named 'BaseHTTPServer' (error at common.py:*) (glob)
85 hgext/keyword.py: error importing: <ImportError> No module named 'BaseHTTPServer' (error at common.py:*) (glob)
87 hgext/largefiles/basestore.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
86 hgext/largefiles/basestore.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
88 hgext/largefiles/lfcommands.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
87 hgext/largefiles/lfcommands.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
89 hgext/largefiles/lfutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
88 hgext/largefiles/lfutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
90 hgext/largefiles/localstore.py: error importing module: <ImportError> No module named 'lfutil' (line *) (glob)
89 hgext/largefiles/localstore.py: error importing module: <ImportError> No module named 'lfutil' (line *) (glob)
91 hgext/largefiles/overrides.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
90 hgext/largefiles/overrides.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
92 hgext/largefiles/proto.py: error importing: <ImportError> No module named 'httplib' (error at httppeer.py:*) (glob)
91 hgext/largefiles/proto.py: error importing: <ImportError> No module named 'httplib' (error at httppeer.py:*) (glob)
93 hgext/largefiles/remotestore.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at wireproto.py:*) (glob)
92 hgext/largefiles/remotestore.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at wireproto.py:*) (glob)
94 hgext/largefiles/reposetup.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
93 hgext/largefiles/reposetup.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
95 hgext/largefiles/uisetup.py: error importing module: <SyntaxError> invalid syntax (archival.py, line *) (line *) (glob)
94 hgext/largefiles/uisetup.py: error importing module: <SyntaxError> invalid syntax (archival.py, line *) (line *) (glob)
96 hgext/largefiles/wirestore.py: error importing module: <ImportError> No module named 'lfutil' (line *) (glob)
95 hgext/largefiles/wirestore.py: error importing module: <ImportError> No module named 'lfutil' (line *) (glob)
97 hgext/mq.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
96 hgext/mq.py: error importing module: <SyntaxError> invalid syntax (commands.py, line *) (line *) (glob)
98 hgext/notify.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
97 hgext/notify.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
99 hgext/pager.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
98 hgext/pager.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
100 hgext/patchbomb.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
99 hgext/patchbomb.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
101 hgext/purge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
100 hgext/purge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
102 hgext/rebase.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
101 hgext/rebase.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
103 hgext/record.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
102 hgext/record.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
104 hgext/relink.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
103 hgext/relink.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
105 hgext/schemes.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
104 hgext/schemes.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
106 hgext/share.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
105 hgext/share.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
107 hgext/shelve.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
106 hgext/shelve.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
108 hgext/strip.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
107 hgext/strip.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
109 hgext/transplant.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
108 hgext/transplant.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
110 mercurial/archival.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
109 mercurial/archival.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
111 mercurial/branchmap.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
110 mercurial/branchmap.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
112 mercurial/bundle*.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
111 mercurial/bundle*.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
113 mercurial/bundlerepo.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
112 mercurial/bundlerepo.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
114 mercurial/changegroup.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
113 mercurial/changegroup.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
115 mercurial/changelog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
114 mercurial/changelog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
116 mercurial/cmdutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
115 mercurial/cmdutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
117 mercurial/commands.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
116 mercurial/commands.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
118 mercurial/commandserver.py: error importing module: <ImportError> No module named 'SocketServer' (line *) (glob)
117 mercurial/commandserver.py: error importing module: <ImportError> No module named 'SocketServer' (line *) (glob)
119 mercurial/context.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
118 mercurial/context.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
120 mercurial/copies.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
119 mercurial/copies.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
121 mercurial/crecord.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
120 mercurial/crecord.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
122 mercurial/dirstate.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
121 mercurial/dirstate.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
123 mercurial/discovery.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
122 mercurial/discovery.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
124 mercurial/dispatch.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
123 mercurial/dispatch.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
125 mercurial/exchange.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
124 mercurial/exchange.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
126 mercurial/extensions.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
125 mercurial/extensions.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
127 mercurial/filelog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
126 mercurial/filelog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
128 mercurial/filemerge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
127 mercurial/filemerge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
129 mercurial/fileset.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
128 mercurial/fileset.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
130 mercurial/formatter.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
129 mercurial/formatter.py: error importing module: <ImportError> No module named 'cPickle' (line *) (glob)
131 mercurial/graphmod.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
130 mercurial/graphmod.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
132 mercurial/help.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
131 mercurial/help.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
133 mercurial/hg.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
132 mercurial/hg.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at bundlerepo.py:*) (glob)
134 mercurial/hgweb/common.py: error importing module: <ImportError> No module named 'BaseHTTPServer' (line *) (glob)
133 mercurial/hgweb/common.py: error importing module: <ImportError> No module named 'BaseHTTPServer' (line *) (glob)
135 mercurial/hgweb/hgweb_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
134 mercurial/hgweb/hgweb_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
136 mercurial/hgweb/hgwebdir_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
135 mercurial/hgweb/hgwebdir_mod.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
137 mercurial/hgweb/protocol.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
136 mercurial/hgweb/protocol.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
138 mercurial/hgweb/request.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
137 mercurial/hgweb/request.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
139 mercurial/hgweb/server.py: error importing module: <ImportError> No module named 'BaseHTTPServer' (line *) (glob)
138 mercurial/hgweb/server.py: error importing module: <ImportError> No module named 'BaseHTTPServer' (line *) (glob)
140 mercurial/hgweb/webcommands.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
139 mercurial/hgweb/webcommands.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
141 mercurial/hgweb/webutil.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
140 mercurial/hgweb/webutil.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
142 mercurial/hgweb/wsgicgi.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
141 mercurial/hgweb/wsgicgi.py: error importing module: <SystemError> Parent module 'mercurial.hgweb' not loaded, cannot perform relative import (line *) (glob)
143 mercurial/hook.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
142 mercurial/hook.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
144 mercurial/httpclient/_readers.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
143 mercurial/httpclient/_readers.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
145 mercurial/httpconnection.py: error importing: <ImportError> No module named 'httplib' (error at __init__.py:*) (glob)
144 mercurial/httpconnection.py: error importing: <ImportError> No module named 'httplib' (error at __init__.py:*) (glob)
146 mercurial/httppeer.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
145 mercurial/httppeer.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
147 mercurial/keepalive.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
146 mercurial/keepalive.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
148 mercurial/localrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
147 mercurial/localrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
149 mercurial/mail.py: error importing module: <AttributeError> module 'email' has no attribute 'Header' (line *) (glob)
148 mercurial/mail.py: error importing module: <AttributeError> module 'email' has no attribute 'Header' (line *) (glob)
150 mercurial/manifest.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
149 mercurial/manifest.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
151 mercurial/merge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
150 mercurial/merge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
152 mercurial/namespaces.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
151 mercurial/namespaces.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
153 mercurial/patch.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
152 mercurial/patch.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
154 mercurial/pure/mpatch.py: error importing module: <ImportError> cannot import name 'pycompat' (line *) (glob)
153 mercurial/pure/mpatch.py: error importing module: <ImportError> cannot import name 'pycompat' (line *) (glob)
155 mercurial/pure/parsers.py: error importing module: <ImportError> No module named 'mercurial.pure.node' (line *) (glob)
154 mercurial/pure/parsers.py: error importing module: <ImportError> No module named 'mercurial.pure.node' (line *) (glob)
156 mercurial/repair.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
155 mercurial/repair.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
157 mercurial/revlog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
156 mercurial/revlog.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
158 mercurial/revset.py: error importing module: <AttributeError> 'dict' object has no attribute 'iteritems' (line *) (glob)
157 mercurial/revset.py: error importing module: <AttributeError> 'dict' object has no attribute 'iteritems' (line *) (glob)
159 mercurial/scmutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
158 mercurial/scmutil.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
160 mercurial/scmwindows.py: error importing module: <ImportError> No module named '_winreg' (line *) (glob)
159 mercurial/scmwindows.py: error importing module: <ImportError> No module named '_winreg' (line *) (glob)
161 mercurial/simplemerge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
160 mercurial/simplemerge.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
162 mercurial/sshpeer.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at wireproto.py:*) (glob)
161 mercurial/sshpeer.py: error importing: <SyntaxError> invalid syntax (bundle*.py, line *) (error at wireproto.py:*) (glob)
163 mercurial/sshserver.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
162 mercurial/sshserver.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
164 mercurial/statichttprepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
163 mercurial/statichttprepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
165 mercurial/store.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
164 mercurial/store.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
166 mercurial/streamclone.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
165 mercurial/streamclone.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
167 mercurial/subrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
166 mercurial/subrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
168 mercurial/templatefilters.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
167 mercurial/templatefilters.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
169 mercurial/templatekw.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
168 mercurial/templatekw.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
170 mercurial/templater.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
169 mercurial/templater.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
171 mercurial/ui.py: error importing: <ImportError> No module named 'cPickle' (error at formatter.py:*) (glob)
170 mercurial/ui.py: error importing: <ImportError> No module named 'cPickle' (error at formatter.py:*) (glob)
172 mercurial/unionrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
171 mercurial/unionrepo.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
173 mercurial/url.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
172 mercurial/url.py: error importing module: <ImportError> No module named 'httplib' (line *) (glob)
174 mercurial/verify.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
173 mercurial/verify.py: error importing: <AttributeError> 'dict' object has no attribute 'iteritems' (error at revset.py:*) (glob)
175 mercurial/win*.py: error importing module: <ImportError> No module named 'msvcrt' (line *) (glob)
174 mercurial/win*.py: error importing module: <ImportError> No module named 'msvcrt' (line *) (glob)
176 mercurial/windows.py: error importing module: <ImportError> No module named '_winreg' (line *) (glob)
175 mercurial/windows.py: error importing module: <ImportError> No module named '_winreg' (line *) (glob)
177 mercurial/wireproto.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
176 mercurial/wireproto.py: error importing module: <SyntaxError> invalid syntax (bundle*.py, line *) (line *) (glob)
178 tests/readlink.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
177 tests/readlink.py: invalid syntax: invalid syntax (<unknown>, line *) (glob)
179
178
180 #endif
179 #endif
General Comments 0
You need to be logged in to leave comments. Login now