Я пытаюсь получить список коммиттеров в ветке bzr. Я знаю, что могу получить это через командную строку с чем-то вроде этого:
bzr log -n0 | grep committer | sed -e 's/^[[:space:]]*committer: //' | uniq
Однако я хотел бы получить этот список программно с помощью bzrlib
. Изучив документацию по bzrlib, я не могу понять, как получить полный список ревизий из моей ветки.
Любые советы о том, как получить полную историю изменений из ветки с помощью bzrlib или, в конечном итоге, из списка коммиттеров?
Другой вариант - установить пакет bzr-stats
и запустить следующую команду в каталоге филиала:
bzr stats
Теперь я узнал, как это сделать. Я добавляю код для проверки локальной копии ветви, хотя это и не является строго необходимым (информацию о редакции можно прочитать из извлеченной локальной копии напрямую). Важными битами являются методы 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