Уведомления

Группа в Telegram: @pythonsu

#1 Июль 22, 2008 16:43:34

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

хочу проверить некоторые свойства файлов которые хотят закомитить.
делаю примерно так

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) и проверить их размер.
Заранее спасибо.



Отредактировано (Июль 22, 2008 16:47:50)

Офлайн

#2 Июль 22, 2008 17:57:13

DarkAnthey
От:
Зарегистрирован: 2008-07-22
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

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)



Офлайн

#3 Июль 23, 2008 10:00:41

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

спасибо, а используя модуль 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 наверное должен использоваться на стороне пользователя?
Я изучаю как хуки писать.



Отредактировано (Июль 23, 2008 11:34:10)

Офлайн

#4 Июль 24, 2008 10:04:13

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

колитесь кто в svn-е понимает. :) такое вообще можно сделать?



Отредактировано (Июль 24, 2008 10:04:38)

Офлайн

#5 Июль 24, 2008 14:02:58

DarkAnthey
От:
Зарегистрирован: 2008-07-22
Сообщения: 19
Репутация: +  0  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

Конечно можно. Почитай доку. http://pysvn.tigris.org/docs/pysvn_prog_ref.html . Скажу сразу я отказался от такого подхода он не вполне быстрый )
Есть смысл подсчитывать размер демоном ложить в файл. Файл вытаскивать и смотреть размер…
Обрати особое внимание на pysvn.Client.list . Есть еще pysvn.Client.info2 но он работает на новых версиях svn.
Прими во внимание что ето diff )))



Офлайн

#6 Дек. 18, 2008 13:59:15

Igreh
От:
Зарегистрирован: 2008-12-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

такой код:
# 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)”
несмотря на то, что вообще русские символы выводятся нормально(в частности: ‘Путь:’). как быть?



Офлайн

#7 Дек. 18, 2008 16:21:22

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

Traceback покажите? Если получате уже в вашем коде, то нужно просто перекодировать.



Офлайн

#8 Дек. 19, 2008 05:39:49

Igreh
От:
Зарегистрирован: 2008-12-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

Traceback ругает sys.stderr.write(path). как лучше перекодировать?



Офлайн

#9 Дек. 19, 2008 21:49:14

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

Если svn вернул path в unicode, что скорее всего так и есть, то нужно его перекодировать в текущую локаль.
Что-нибудь типа такого: path.encode('utf-8')



Отредактировано (Дек. 20, 2008 08:17:27)

Офлайн

#10 Дек. 20, 2008 08:55:30

Igreh
От:
Зарегистрирован: 2008-12-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

svn hook как получить список файлов?

Ed
Что-нибудь типа такого: path.encode('utf-8')
помогло, только в utf-8 вместо русских символов получаю неизвестное. а вот в cp1251 все норм. благодарю!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version