~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/log.py

  • Committer: Martin Pool
  • Date: 2005-06-27 06:09:34 UTC
  • Revision ID: mbp@sourcefrog.net-20050627060934-42a3c6aad57d8093
- Merge John's nice short-log format.

- Change log code to produce output through a LogFormatter object, 
  constructed from a factory method, to allow for more easily adding
  multiple formats in the future.

Show diffs side-by-side

added added

removed removed

Lines of Context:
84
84
 
85
85
 
86
86
def show_log(branch,
 
87
             lf,
87
88
             specific_fileid=None,
88
 
             show_timezone='original',
89
89
             verbose=False,
90
 
             show_ids=False,
91
 
             to_file=None,
92
90
             direction='reverse',
93
91
             start_revision=None,
94
92
             end_revision=None):
95
93
    """Write out human-readable log of commits to this branch.
96
94
 
 
95
    lf
 
96
        LogFormatter object to show the output.
 
97
 
97
98
    specific_fileid
98
99
        If true, list only the commits affecting the specified
99
100
        file, rather than all commits.
100
101
 
101
 
    show_timezone
102
 
        'original' (committer's timezone),
103
 
        'utc' (universal time), or
104
 
        'local' (local user's timezone)
105
 
 
106
102
    verbose
107
103
        If true show added/changed/deleted/renamed files.
108
104
 
109
 
    show_ids
110
 
        If true, show revision and file ids.
111
 
 
112
 
    to_file
113
 
        File to send log to; by default stdout.
114
 
 
115
105
    direction
116
106
        'reverse' (default) is latest to earliest;
117
107
        'forward' is earliest to latest.
122
112
    end_revision
123
113
        If not None, only show revisions <= end_revision
124
114
    """
125
 
    from osutils import format_date
126
 
    from errors import BzrCheckError
127
 
    from textui import show_status
 
115
    from bzrlib.osutils import format_date
 
116
    from bzrlib.errors import BzrCheckError
 
117
    from bzrlib.textui import show_status
 
118
    
 
119
    from warnings import warn
128
120
 
 
121
    if not isinstance(lf, LogFormatter):
 
122
        warn("not a LogFormatter instance: %r" % lf)
129
123
 
130
124
    if specific_fileid:
131
125
        mutter('get log for file_id %r' % specific_fileid)
132
126
 
133
 
    if to_file == None:
134
 
        import sys
135
 
        to_file = sys.stdout
136
 
 
137
127
    which_revs = branch.enum_history(direction)
138
128
 
139
129
    if not (verbose or specific_fileid):
158
148
        if not verbose:
159
149
            # although we calculated it, throw it away without display
160
150
            delta = None
161
 
            
162
 
        show_one_log(revno, rev, delta, show_ids, to_file, show_timezone)
 
151
 
 
152
        lf.show(revno, rev, delta)
163
153
 
164
154
 
165
155
 
200
190
 
201
191
 
202
192
 
203
 
def show_one_log(revno, rev, delta, show_ids, to_file, show_timezone):
204
 
    from osutils import format_date
 
193
class LogFormatter(object):
 
194
    """Abstract class to display log messages."""
 
195
    def __init__(self, to_file, show_ids=False, show_timezone=False):
 
196
        self.to_file = to_file
 
197
        self.show_ids = show_ids
 
198
        self.show_timezone = show_timezone
 
199
        
 
200
 
 
201
 
 
202
 
 
203
 
 
204
 
 
205
class LongLogFormatter(LogFormatter):
 
206
    def show(self, revno, rev, delta):
 
207
        from osutils import format_date
 
208
 
 
209
        to_file = self.to_file
 
210
 
 
211
        print >>to_file,  '-' * 60
 
212
        print >>to_file,  'revno:', revno
 
213
        if self.show_ids:
 
214
            print >>to_file,  'revision-id:', rev.revision_id
 
215
        print >>to_file,  'committer:', rev.committer
 
216
        print >>to_file,  'timestamp: %s' % (format_date(rev.timestamp, rev.timezone or 0,
 
217
                                             self.show_timezone))
 
218
 
 
219
        print >>to_file,  'message:'
 
220
        if not rev.message:
 
221
            print >>to_file,  '  (no message)'
 
222
        else:
 
223
            for l in rev.message.split('\n'):
 
224
                print >>to_file,  '  ' + l
 
225
 
 
226
        if delta != None:
 
227
            delta.show(to_file, self.show_ids)
 
228
 
 
229
 
 
230
 
 
231
class ShortLogFormatter(LogFormatter):
 
232
    def show(self, revno, rev, delta):
 
233
        from bzrlib.osutils import format_date
 
234
 
 
235
        to_file = self.to_file
 
236
 
 
237
        print >>to_file, "%5d %s\t%s" % (revno, rev.committer,
 
238
                format_date(rev.timestamp, rev.timezone or 0,
 
239
                            self.show_timezone))
 
240
        if self.show_ids:
 
241
            print >>to_file,  '      revision-id:', rev.revision_id
 
242
        if not rev.message:
 
243
            print >>to_file,  '      (no message)'
 
244
        else:
 
245
            for l in rev.message.split('\n'):
 
246
                print >>to_file,  '      ' + l
 
247
 
 
248
        if delta != None:
 
249
            delta.show(to_file, self.show_ids)
 
250
        print
 
251
 
 
252
 
 
253
 
 
254
FORMATTERS = {'long': LongLogFormatter,
 
255
              'short': ShortLogFormatter,
 
256
              }
 
257
 
 
258
 
 
259
def log_formatter(name, *args, **kwargs):
 
260
    from bzrlib.errors import BzrCommandError
205
261
    
206
 
    print >>to_file,  '-' * 60
207
 
    print >>to_file,  'revno:', revno
208
 
    if show_ids:
209
 
        print >>to_file,  'revision-id:', rev.revision_id
210
 
    print >>to_file,  'committer:', rev.committer
211
 
    print >>to_file,  'timestamp: %s' % (format_date(rev.timestamp, rev.timezone or 0,
212
 
                                         show_timezone))
213
 
 
214
 
    print >>to_file,  'message:'
215
 
    if not rev.message:
216
 
        print >>to_file,  '  (no message)'
217
 
    else:
218
 
        for l in rev.message.split('\n'):
219
 
            print >>to_file,  '  ' + l
220
 
 
221
 
    if delta != None:
222
 
        delta.show(to_file, show_ids)
 
262
    try:
 
263
        return FORMATTERS[name](*args, **kwargs)
 
264
    except IndexError:
 
265
        raise BzrCommandError("unknown log formatter: %r" % name)