Найти - Пользователи
Полная версия: svn hook как получить список файлов?
Начало » Python для экспертов » svn hook как получить список файлов?
1 2
severum
хочу проверить некоторые свойства файлов которые хотят закомитить.
делаю примерно так

def test_props(props):
if len(props)==0:
sys.stderr.write(“error…\n”)
return 1
return 0

def main(root_path, rn):
repository = svn.repos.open(root_path)
fs_ptr = svn.repos.fs(repository)

txn = svn.fs.open_txn(fs_ptr, rn)
txn_root = svn.fs.txn_root(txn)

youngest_revision_number = svn.fs.youngest_rev(fs_ptr)
root = svn.fs.revision_root(fs_ptr, youngest_revision_number)
#res = svn.fs.file_length(root, ‘')

retval = test_props(svn.fs.txn_proplist(txn))
if retval:
return retval

if __name__ == ’__main__':
sys.exit(main( os.path.abspath(sys.argv), sys.argv) )

Не уверен что делаю все это правильно.
И что то никак не догадаться как получить список файлов которые хотят закомитить чтобы потом вызвать res = svn.fs.file_length(root, path) и проверить их размер.
Заранее спасибо.
DarkAnthey
import pysvn
path = ‘TestInstaller/Plasma’
client = pysvn.Client()
client.exception_style = 1

def get_login( realm, username, may_save ):
return True, ‘XXX’, ‘***’, False
client.callback_get_login = get_login
status_list = client.status(path, recurse=True, get_all=False, update=False, ignore=False, ignore_externals=False)
severum
спасибо, а используя модуль svn-python-1.4.6.win32-py2.5 такой можно сделать, без pysvn?

попробовал pysvn, получатеся вроде даже короче но чтото не работает (говорит что “…” не рабочая копия ):)
список файлов которые хоятт закомитить получил.

import pysvn

def main(repos_path, transaction_name):
transaction = pysvn.Transaction( repos_path, transaction_name )

retval = test_props(transaction.revproplist())
if retval:
return retval

client = pysvn.Client()
client.exception_style = 1
client.callback_get_login = get_login

change_list = transaction.changed( )
for path in change_list:
status_list = client.status(path, recurse=True, get_all=False, update=False, ignore=False, ignore_externals=False)
print status_list

чтото у меня ощущение что как то не так надо делать…
например client.ls у меня сработал только когда я прописал реальный путь к папке на своей машине, а не относительный.
плюс он выдал список только уже добавленых файлов, а список еще не закомиченых не выдал.
а я хочу по списку файлов из транзакции получить их размеры при их первом добавлении.
такое можно сделать?
А client наверное должен использоваться на стороне пользователя?
Я изучаю как хуки писать.
severum
колитесь кто в svn-е понимает. :) такое вообще можно сделать?
DarkAnthey
Конечно можно. Почитай доку. http://pysvn.tigris.org/docs/pysvn_prog_ref.html . Скажу сразу я отказался от такого подхода он не вполне быстрый )
Есть смысл подсчитывать размер демоном ложить в файл. Файл вытаскивать и смотреть размер…
Обрати особое внимание на pysvn.Client.list . Есть еще pysvn.Client.info2 но он работает на новых версиях svn.
Прими во внимание что ето diff )))
Igreh
такой код:
# coding: utf-8
import pysvn, sys
txn = pysvn.Transaction( sys.argv, sys.argv )
ch = txn.changed()
for path in ch:
sys.stderr.write('Путь: ‘)
sys.stderr.write(path)

все бы хорошо, но когда путь до ресурса содержит русские символы - получаю ошибку: “UnicodeEncodeError: ’ascii' codec can't encode characters in position 14-18: ordinal not in range(128)”
несмотря на то, что вообще русские символы выводятся нормально(в частности: ‘Путь:’). как быть?
Ed
Traceback покажите? Если получате уже в вашем коде, то нужно просто перекодировать.
Igreh
Traceback ругает sys.stderr.write(path). как лучше перекодировать?
Ed
Если svn вернул path в unicode, что скорее всего так и есть, то нужно его перекодировать в текущую локаль.
Что-нибудь типа такого: path.encode('utf-8')
Igreh
Ed
Что-нибудь типа такого: path.encode('utf-8')
помогло, только в utf-8 вместо русских символов получаю неизвестное. а вот в cp1251 все норм. благодарю!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB