Better log formatter for Nova. It's just like gnuchangelog, but logs the author rather than the committer.

This commit is contained in:
Soren Hansen 2010-08-31 21:17:48 +02:00
parent e185a95ae6
commit 921d9d01d7
2 changed files with 63 additions and 2 deletions

View File

@ -0,0 +1,59 @@
# 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
#
# 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.
#
class NovaLogFormat(bzrlib.log.GnuChangelogLogFormatter):
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)

View File

@ -29,8 +29,10 @@ class local_sdist(sdist):
def run(self):
if os.path.isdir('.bzr'):
# We're in a bzr branch
log_cmd = subprocess.Popen(["bzr", "log", "--gnu"],
stdout=subprocess.PIPE)
env = os.environ.copy()
env['BZR_PLUGIN_PATH'] = os.path.abspath('./bzrplugins')
log_cmd = subprocess.Popen(["bzr", "log", "--novalog"],
stdout=subprocess.PIPE, env=env)
changelog = log_cmd.communicate()[0]
with open("ChangeLog", "w") as changelog_file:
changelog_file.write(changelog)