41
41
back to working through the terminal.
44
from __future__ import absolute_import
47
48
from bzrlib.lazy_import import lazy_import
48
49
lazy_import(globals(), """
49
50
from bzrlib import (
145
147
"This may take some time. Upgrade the repositories to the "
146
148
"same format for better performance."
150
experimental_format_fetch=("Fetching into experimental format "
152
"This format may be unreliable or change in the future "
153
"without an upgrade path.\n"),
148
154
deprecated_command=(
149
155
"The command 'bzr %(deprecated_name)s' "
150
156
"has been deprecated in bzr %(deprecated_in_version)s. "
151
157
"Please use 'bzr %(recommended_name)s' instead."),
158
deprecated_command_option=(
159
"The option '%(deprecated_name)s' to 'bzr %(command)s' "
160
"has been deprecated in bzr %(deprecated_in_version)s. "
161
"Please use '%(recommended_name)s' instead."),
152
162
recommend_upgrade=("%(current_format_name)s is deprecated "
153
163
"and a better format is available.\n"
154
164
"It is recommended that you upgrade by "
155
165
"running the command\n"
156
166
" bzr upgrade %(basedir)s"),
168
u"Stole dead lock %(lock_url)s %(other_holder_info)s."),
159
171
def __init__(self):
242
254
# XXX: is the caller supposed to close the resulting object?
243
255
if encoding is None:
244
from bzrlib import config
245
encoding = config.GlobalConfig().get_user_option(
256
encoding = config.GlobalStack().get('output_encoding')
247
257
if encoding is None:
248
258
encoding = osutils.get_terminal_encoding(trace=True)
249
259
if encoding_type is None:
305
315
template = self._user_warning_templates[warning_id]
307
fail = "failed to format warning %r, %r" % (warning_id, message_args)
308
warnings.warn(fail) # so tests will fail etc
317
fail = "bzr warning: %r, %r" % (warning_id, message_args)
318
warnings.warn("no template for warning: " + fail) # so tests will fail etc
311
321
return template % message_args
312
322
except ValueError, e:
313
fail = "failed to format warning %r, %r: %s" % (
323
fail = "bzr unprintable warning: %r, %r, %s" % (
314
324
warning_id, message_args, e)
315
325
warnings.warn(fail) # so tests will fail etc
328
def choose(self, msg, choices, default=None):
329
"""Prompt the user for a list of alternatives.
331
:param msg: message to be shown as part of the prompt.
333
:param choices: list of choices, with the individual choices separated
334
by '\n', e.g.: choose("Save changes?", "&Yes\n&No\n&Cancel"). The
335
letter after the '&' is the shortcut key for that choice. Thus you
336
can type 'c' to select "Cancel". Shorcuts are case insensitive.
337
The shortcut does not need to be the first letter. If a shorcut key
338
is not provided, the first letter for the choice will be used.
340
:param default: default choice (index), returned for example when enter
341
is pressed for the console version.
343
:return: the index fo the user choice (so '0', '1' or '2' for
344
respectively yes/no/cancel in the previous example).
346
raise NotImplementedError(self.choose)
318
348
def get_boolean(self, prompt):
319
349
"""Get a boolean question answered from the user.
322
352
line without terminating \\n.
323
353
:return: True or False for y/yes or n/no.
325
raise NotImplementedError(self.get_boolean)
355
choice = self.choose(prompt + '?', '&yes\n&no', default=None)
327
358
def get_integer(self, prompt):
328
359
"""Get an integer from the user.
406
437
"""Show a warning to the user."""
407
438
raise NotImplementedError(self.show_warning)
409
def warn_cross_format_fetch(self, from_format, to_format):
410
"""Warn about a potentially slow cross-format transfer.
412
This is deprecated in favor of show_user_warning, but retained for api
413
compatibility in 2.0 and 2.1.
415
self.show_user_warning('cross_format_fetch', from_format=from_format,
418
def warn_experimental_format_fetch(self, inter):
419
"""Warn about fetching into experimental repository formats."""
420
if inter.target._format.experimental:
421
trace.warning("Fetching into experimental format %s.\n"
422
"This format may be unreliable or change in the future "
423
"without an upgrade path.\n" % (inter.target._format,))
426
441
class NoninteractiveUIFactory(UIFactory):
427
442
"""Base class for UIs with no user."""