~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzr-man.py

  • Committer: Martin Pool
  • Date: 2005-09-05 08:00:35 UTC
  • Revision ID: mbp@sourcefrog.net-20050905080035-e0439293f8b6b9f9
- start splitting code for xml (de)serialization away from objects
  preparatory to supporting multiple formats by a single library

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
 
22
22
import os, sys
23
23
 
 
24
try:
 
25
    version_info = sys.version_info
 
26
except AttributeError:
 
27
    version_info = 1, 5 # 1.5 or older
 
28
 
 
29
 
 
30
REINVOKE = "__BZR_REINVOKE"    
 
31
NEED_VERS = (2, 3)
 
32
 
 
33
if version_info < NEED_VERS:
 
34
    if not os.environ.has_key(REINVOKE):
 
35
        # mutating os.environ doesn't work in old Pythons
 
36
        os.putenv(REINVOKE, "1")
 
37
        for python in 'python2.4', 'python2.3':
 
38
            try:
 
39
                os.execvp(python, [python] + sys.argv)
 
40
            except OSError:
 
41
                pass
 
42
    print >>sys.stderr, "bzr-man.py: error: cannot find a suitable python interpreter"
 
43
    print >>sys.stderr, "  (need %d.%d or later)" % NEED_VERS
 
44
    sys.exit(1)
 
45
os.unsetenv(REINVOKE)
 
46
 
24
47
import bzrlib, bzrlib.help
25
48
 
26
49
#>>> code taken from bzr (C) Canonical
67
90
 
68
91
    def parse_line(self, line):
69
92
        m = self.usage_exp.match(line)
70
 
        if line == '':
71
 
                return
72
93
        if m:
73
94
            if self.state == 0:
74
95
                if self.usage:
75
96
                    self.command_usage.append((self.command,self.usage,self.descr))
76
97
                    self.all_commands.append(self.command)
77
 
                self.usage = " ".join(line.split(" ")[1:])
 
98
                self.usage = line
78
99
                self.command = m.groups()[0]
79
100
            else:
80
 
                raise RuntimeError, "matching usage line in state %d" % state
 
101
                raise Error, "matching usage line in state %d" % state
81
102
            self.state = 1
82
103
            return
83
104
        m = self.descr_exp.match(line)
85
106
            if self.state == 1:
86
107
                self.descr = m.groups()[0]
87
108
            else:
88
 
                raise RuntimeError, "matching descr line in state %d" % state
 
109
                raise Error, "matching descr line in state %d" % state
89
110
            self.state = 0
90
111
            return
91
 
        raise RuntimeError, "Cannot parse this line ('%s')." % line
 
112
        raise Error, "Cannot parse this line"
92
113
 
93
114
    def end_parse(self):
94
115
        if self.state == 0:
96
117
                self.command_usage.append((self.command,self.usage,self.descr))
97
118
                self.all_commands.append(self.command)
98
119
        else:
99
 
            raise RuntimeError, "ending parse in state %d" % state
 
120
            raise Error, "ending parse in state %d" % state
100
121
 
101
122
    def write_to_manpage(self, outfile):
102
123
        bzrcmd = self.params["bzrcmd"]
103
124
        outfile.write('.SH "COMMAND OVERVIEW"\n')
104
125
        for (command,usage,descr) in self.command_usage:
105
 
            outfile.write('.TP\n.B "%s %s"\n%s\n' % (bzrcmd, usage, descr))
 
126
            outfile.write('.TP\n.B "%s %s"\n%s\n\n' % (bzrcmd, usage, descr))
106
127
 
107
128
 
108
129
class HelpReader:
172
193
Path where
173
194
.B "%(bzrcmd)s"
174
195
is to look for external command.
 
196
 
175
197
.TP
176
198
.I "BZREMAIL"
177
199
E-Mail address of the user. Overrides
179
201
.IR "EMAIL" .
180
202
Example content:
181
203
.I "John Doe <john@example.com>"
 
204
 
182
205
.TP
183
206
.I "EMAIL"
184
207
E-Mail address of the user. Overridden by the content of the file
185
208
.I "~/.bzr.conf/email"
186
209
and of the environment variable
187
210
.IR "BZREMAIL" .
 
211
 
188
212
.SH "FILES"
189
213
.TP
190
214
.I "~/.bzr.conf/"
195
219
.I "EMAIL"
196
220
environment variable. Example content:
197
221
.I "John Doe <john@example.com>"
 
222
 
198
223
.SH "SEE ALSO"
199
224
.UR http://www.bazaar-ng.org/
200
225
.BR http://www.bazaar-ng.org/,
202
227
.BR http://www.bazaar-ng.org/doc/
203
228
"""
204
229
 
205
 
def main(args=[]):
206
 
    """ main function
207
 
    :param  args:   command-line arguments (sys.argv[1:])
208
 
    :type   args:   list
209
 
    """
 
230
def main():
210
231
    t = time.time()
211
232
    tt = time.gmtime(t)
212
233
    params = \
221
242
    clp.end_parse()
222
243
 
223
244
    filename = "bzr.1"
224
 
    if len(args) == 1:
225
 
        filename = args[0]
 
245
    if len(sys.argv) == 2:
 
246
        filename = sys.argv[1]
226
247
    if filename == "-":
227
248
        outfile = sys.stdout
228
249
    else:
242
263
 
243
264
 
244
265
if __name__ == '__main__':
245
 
    main(sys.argv[1:])
 
266
    main()
246
267
 
247
268
 
248
269
#>>> code by HUN