Устанавливаем из репозитория:
# yum list pysvn ... pysvn.x86_64 1.7.6-1.el6 epel
# yum -y install pysvn ... Installed: pysvn.x86_64 0:1.7.6-1.el6
pysvn
является модулем, который работает с SVN-клиентом, установленным в системе. Т.е., настройки прокси для SVN, авторизация – будут использовать из файла /etc/subversion/servers
,.
Созадим первый скрипт – для проcмотра содержимого репозитория:
#!/usr/bin/env python import pysvn client = pysvn.Client() dirlist = client.list( 'http://svnurl.com/svn/' ) print(dirlist)
Запускаем:
# ./svn_1.py [(<PysvnList u'http://svnurl.com/svn'>, None), (<PysvnList u'http://svnurl.com/svn/PROJ_APP_05112013'>, None), (<PysvnList u'http://svnurl.com/svn/autotest'>, None), (<PysvnList u'http://svnurl.com/svn/database-test'>, None), (<PysvnList u'http://svnurl.com/svn/kievapp'>, None), (<PysvnList u'http://svnurl.com/svn/local_database_source'>, None)]
Метод list
возвращает кортеж, который содержит два объекта – путь и имя директории, и значение Lock для неё.
Что бы упорядочить вывод – можно вспользоваться такой конструкцией:
#!/usr/bin/env python import pysvn client = pysvn.Client() dirlist = client.list ('http://svnurl.com/svn/') for dir in dirlist: for i in dir: if i: print(i['repos_path'])
Имя repos_path
– поле для объекта, возвращаемого в кортеже.
Можно использовать например поле created_rev
, для получения номера последней ревизии:
for dir in dirlist: for i in dir: if i: print(i['repos_path']) print(i['created_rev'])
# ./svn_1.py / <Revision kind=number 129> //PROJ_APP_05112013 <Revision kind=number 113> //autotest <Revision kind=number 115> //database-test <Revision kind=number 128> //kievapp <Revision kind=number 129> //local_database_source <Revision kind=number 106>
Другой метод для получения списка – ls
:
#!/usr/bin/env python import pysvn client = pysvn.Client() dirlist = client.ls ('http://svnurl.com/svn/') print(dirlist)
# ./svn_1.py [<PysvnDirent u'http://svnurl.com/svn/PROJ_APP_05112013'>, <PysvnDirent u'http://svnurl.com/svn/autotest'>, <PysvnDirent u'http://svnurl.com/svn/database-test'>, <PysvnDirent u'http://svnurl.com/svn/kievapp'>, <PysvnDirent u'http://svnurl.com/svn/local_database_source'>]
ls
возвращает словарь, в отличии от list
.
Что бы вывести только имена – вызовем поле name
словаря:
#!/usr/bin/env python import pysvn client = pysvn.Client() dirlist = client.ls ('http://svnurl.com/svn/') for dir in dirlist: print(dir['name'])
И результат:
# ./svn_1.py http://svnurl.com/svn/PROJ_APP_05112013 http://svnurl.com/svn/autotest http://svnurl.com/svn/database-test http://svnurl.com/svn/kievapp http://svnurl.com/svn/local_database_source
Ещё пример – выполнение export
файла из SVN-репозитория:
#!/usr/bin/env python import os import pysvn svn_file = ('http://svnurl.com/svn/file.properties') local_file = '/tmp/file.properties' client = pysvn.Client() try: client.export(svn_file, local_file) except pysvn._pysvn.ClientError as e: print('ERROR: %s' % e) if os.path.isfile('%s' % local_file): print('File %s saved.' % local_file) else: print("ERROR: can't find file %s." % local_file)
$ ./svn_2.py File /tmp/file.properties saved.
Возможностей у модуля очень много, подробности смотрите тут>>>.