Получить номер версии HEAD репозитория SVN с помощью PYSVN - PullRequest
5 голосов
/ 03 апреля 2011

Я использую pysvn для мониторинга изменений в каталоге Subversion. Вот как я получаю информацию из ревизий:

(...)
svn_root = "http://svn/"
client = pysvn.Client()
from_revision = pysvn.Revision(pysvn.opt_revision_kind.number, 1500)
to_revision = pysvn.Revision( pysvn.opt_revision_kind.head )

revisions = client.log(svn_root, to_revision, to_revision, discover_changed_paths=True)

Теперь я хочу получить изменения не от конкретной ревизии, как в моем примере, а от изменений в последних 5 ревизиях (от head - 5 до head). Как я могу это сделать? Как я могу получить НОМЕР головной ревизии?

Я мог бы сделать это, вызвав Shell из Python. Но я думаю, что для этого есть "Pythonic" способ с использованием pysvn.

Ответы [ 3 ]

7 голосов
/ 03 апреля 2011

Понял.При указании пути к извлеченному источнику SVN я могу запросить ревизию HEAD следующим образом:

headrev = client.info(svnroot).get("revision").number

Альтернативой может быть следующее:

headrev = pysvn.Revision( pysvn.opt_revision_kind.head )            
revlog = svnclient.log( url, revision_start=headrev, revision_end=headrev, discover_changed_paths=False)
headrev = revlog[0].revision.number

( Внимание, последний работает, только если вы используете корень SVN-репозитория в качестве URL-адреса. Revlog будет пустым, если вы укажите под-URL-адрес хранилища, если он не является HEAD)

6 голосов
/ 30 января 2013

Лучший (и более быстрый) метод такой:

client.revpropget("revision", url=svn_url)[0].number
3 голосов
/ 09 сентября 2011

Вы можете получить номер ревизии головы следующим образом:

client = pysvn.Client()
headrev = client.info(svn_url).revision.number

Затем вам нужно определить редакции так, как вы хотите:

from_revision = pysvn.Revision(pysvn.opt_revision_kind.number, headrev -5)
to_revision = pysvn.Revision( pysvn.opt_revision_kind.head )

Наконец, вы можете использовать вывод журнала (который представляет собой список) внутри цикла и извлечь нужную информацию:

for l in log:
    print i.date
    print i.author   
...