/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/ui/text.py

  • Committer: John Arbash Meinel
  • Date: 2006-08-18 22:17:03 UTC
  • mto: This revision was merged to the branch mainline in revision 1989.
  • Revision ID: john@arbash-meinel.com-20060818221703-958786fafe340fd9
2 changes to knits. Delay creating the .knit or .kndx file until we have actually tried to write data. Because of this, we must allow the Knit to create the prefix directories

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2005 Canonical Ltd
 
2
#
 
3
# This program is free software; you can redistribute it and/or modify
 
4
# it under the terms of the GNU General Public License as published by
 
5
# the Free Software Foundation; either version 2 of the License, or
 
6
# (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
16
 
 
17
 
 
18
 
 
19
"""Text UI, write output to the console.
 
20
"""
 
21
 
 
22
import getpass
 
23
import sys
 
24
 
 
25
import bzrlib.progress
 
26
from bzrlib.symbol_versioning import (deprecated_method, 
 
27
        zero_eight)
 
28
from bzrlib.ui import CLIUIFactory
 
29
 
 
30
 
 
31
class TextUIFactory(CLIUIFactory):
 
32
    """A UI factory for Text user interefaces."""
 
33
 
 
34
    def __init__(self,
 
35
                 bar_type=None,
 
36
                 stdout=None,
 
37
                 stderr=None):
 
38
        """Create a TextUIFactory.
 
39
 
 
40
        :param bar_type: The type of progress bar to create. It defaults to 
 
41
                         letting the bzrlib.progress.ProgressBar factory auto
 
42
                         select.
 
43
        """
 
44
        super(TextUIFactory, self).__init__()
 
45
        self._bar_type = bar_type
 
46
        if stdout is None:
 
47
            self.stdout = sys.stdout
 
48
        else:
 
49
            self.stdout = stdout
 
50
        if stderr is None:
 
51
            self.stderr = sys.stderr
 
52
        else:
 
53
            self.stderr = stderr
 
54
 
 
55
    def prompt(self, prompt):
 
56
        """Emit prompt on the CLI."""
 
57
        self.stdout.write(prompt + "? [y/n]:")
 
58
        
 
59
    @deprecated_method(zero_eight)
 
60
    def progress_bar(self):
 
61
        """See UIFactory.nested_progress_bar()."""
 
62
        # this in turn is abstract, and creates either a tty or dots
 
63
        # bar depending on what we think of the terminal
 
64
        return bzrlib.progress.ProgressBar()
 
65
 
 
66
    def get_password(self, prompt='', **kwargs):
 
67
        """Prompt the user for a password.
 
68
 
 
69
        :param prompt: The prompt to present the user
 
70
        :param kwargs: Arguments which will be expanded into the prompt.
 
71
                       This lets front ends display different things if
 
72
                       they so choose.
 
73
        :return: The password string, return None if the user 
 
74
                 canceled the request.
 
75
        """
 
76
        prompt = (prompt % kwargs).encode(sys.stdout.encoding, 'replace')
 
77
        prompt += ': '
 
78
        # There's currently no way to say 'i decline to enter a password'
 
79
        # as opposed to 'my password is empty' -- does it matter?
 
80
        return getpass.getpass(prompt)
 
81
 
 
82
    def nested_progress_bar(self):
 
83
        """Return a nested progress bar.
 
84
        
 
85
        The actual bar type returned depends on the progress module which
 
86
        may return a tty or dots bar depending on the terminal.
 
87
        """
 
88
        if self._progress_bar_stack is None:
 
89
            self._progress_bar_stack = bzrlib.progress.ProgressBarStack(
 
90
                klass=self._bar_type)
 
91
        return self._progress_bar_stack.get_nested()
 
92
 
 
93
    def clear_term(self):
 
94
        """Prepare the terminal for output.
 
95
 
 
96
        This will, clear any progress bars, and leave the cursor at the
 
97
        leftmost position."""
 
98
        if self._progress_bar_stack is None:
 
99
            return
 
100
        overall_pb = self._progress_bar_stack.bottom()
 
101
        if overall_pb is not None:
 
102
            overall_pb.clear()