web-dev-qa-db-ja.com

bzrlibでブランチの改訂履歴を取得する方法

Bzrブランチへのコミッターのリストを取得しようとしています。私はこれらの行に沿って何かを使ってコマンドラインからそれを得ることができることを知っています:

bzr log -n0 | grep committer | sed -e 's/^[[:space:]]*committer: //' | uniq

ただし、プログラムでbzrlibを使用してそのリストを取得したいと思います。 bzrlibのドキュメントを見た後、ブランチからリビジョンの完全なリストを取得する方法を見つけることができません。

Bzrlibを使用してブランチからリビジョンの完全な履歴を取得する方法、または最終的にはコミッターのリストを取得する方法に関するヒントはありますか?

2
David Planella

私は今それを行う方法を見つけました。厳密には必要ではありませんが、ブランチのローカルコピーをチェックアウトするコードを追加しています(リビジョン情報は、チェックアウトされたローカルコピーから直接読み取ることができます)。重要なビットは、all_revision_ids()get_revisions()、およびget_apparent_authors()メソッドです。

import os
from bzrlib.branch import Branch
from bzrlib.plugin import load_plugins

# The location on your file system where you want to check out
# the branch to get revisions for 
local_path = '/path/to/local/checkout'

# The name of the project you want to get the branch from
project_name = 'launchpad-project-name'

# Load the bzr plugins - the "launchpad" plugin 
# provides support for the "lp:" shortcut
load_plugins()

remote_branch_url = 'lp:{0}'.format(project_name)
remote_branch = Branch.open(remote_branch_url)

# Check out and get an instance of the branch
local_branch = remote_branch.bzrdir.sprout(
                   os.path.join(local_path,
                   project_name)).open_branch()

# Get all revisions from the branch
all_revision_ids = local_branch.repository.get_revisions(
    local_branch.repository.all_revision_ids())

# Set up a set of unique author names
authors = set()

# Iterate all revisions and get the list of authors
# without duplicates
for revision in all_revision_ids:
    for author in revision.get_apparent_authors():
        authors.add(author)

print 'Authors:', authors
2
David Planella

もう1つのオプションは、bzr-statsパッケージをインストールし、ブランチのディレクトリ内で次のコマンドを実行することです。

bzr stats
1
David Planella