nova/bzrplugins/novalog/__init__.py

61 lines
2.3 KiB
Python

# Copyright 2010 OpenStack LLC
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""Log format for Nova's changelog."""
import bzrlib.log
from bzrlib.osutils import format_date
class NovaLogFormat(bzrlib.log.GnuChangelogLogFormatter):
"""This is mostly stolen from bzrlib.log.GnuChangelogLogFormatter
The difference is that it logs the author rather than the committer
which for Nova always is Tarmac."""
preferred_levels = 1
def log_revision(self, revision):
"""Log a revision, either merged or not."""
to_file = self.to_file
date_str = format_date(revision.rev.timestamp,
revision.rev.timezone or 0,
self.show_timezone,
date_fmt='%Y-%m-%d',
show_offset=False)
authors = revision.rev.get_apparent_authors()
to_file.write('%s %s\n\n' % (date_str, ", ".join(authors)))
if revision.delta is not None and revision.delta.has_changed():
for c in revision.delta.added + revision.delta.removed + \
revision.delta.modified:
path, = c[:1]
to_file.write('\t* %s:\n' % (path,))
for c in revision.delta.renamed:
oldpath, newpath = c[:2]
# For renamed files, show both the old and the new path
to_file.write('\t* %s:\n\t* %s:\n' % (oldpath, newpath))
to_file.write('\n')
if not revision.rev.message:
to_file.write('\tNo commit message\n')
else:
message = revision.rev.message.rstrip('\r\n')
for l in message.split('\n'):
to_file.write('\t%s\n' % (l.lstrip(),))
to_file.write('\n')
bzrlib.log.register_formatter('novalog', NovaLogFormat)