Работа с SVN сервером

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Работа с SVN сервером

Сообщение sts » 09.07.2008 15:04:53

Народ, тут такая задача возникла, в проге надо получить список изменненых файлов по номеру ревизии SVN (минимум).
Отсюда вопрос - а если какие компоненты\исходники на паскале по работе с сервером SVN (1.5)?
поиск дал только это http://sourceforge.net/projects/delphisvn/, но там поддерживается версия Subversion 1.4 а стоит 1.5, с ней не хочет, некоторые функции, например, были переименованы.
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Работа с SVN сервером

Сообщение B4rr4cuda » 09.07.2008 16:34:30

Аватара пользователя
B4rr4cuda
энтузиаст
 
Сообщения: 693
Зарегистрирован: 28.12.2007 07:48:35

Re: Работа с SVN сервером

Сообщение Attid » 09.07.2008 16:35:11

http://shamangrad.net/project.php?act=view&prj=mxlib

Добавлено спустя 1 минуту 48 секунд:
B4rr4cuda
вот блин, на кнопке обошел =)
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Работа с SVN сервером

Сообщение sts » 09.07.2008 17:12:32

Спасибо
:)
скачать чето не получается, сижу за прокси а клиент (TortoiseSVN) чето не хочет подключатся к svn.shamangrad.net, хотя вроде настроил у него прокси...
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Работа с SVN сервером

Сообщение Attid » 09.07.2008 18:24:04

держи
Вложения
mxlib.zip
(361.8 КБ) Скачиваний: 555
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Работа с SVN сервером

Сообщение shade » 09.07.2008 20:55:24

sts писал(а):но там поддерживается версия Subversion 1.4 а стоит 1.5, с ней не хочет, некоторые функции, например, были переименованы.

в mxlib тоже 1.4, хотя думаю не принципиально, 1.5 обратно совместим с 1.4, потому с этими должно работать.
А использование API 1.4 даже лучше пока 1.5 не вытеснил 1.4

sts писал(а):Народ, тут такая задача возникла, в проге надо получить список изменненых файлов по номеру ревизии SVN (минимум).

1.4 я думаю, для этого хватит
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Работа с SVN сервером

Сообщение sts » 10.07.2008 08:52:39

в том то и дело, что не хочет клиент (dll) 1.4 работать с 1.5 а delphisvn"нехочет" загружать клиент(dll) 1.5

Добавлено спустя 45 секунд:
Спасибо Attid, скачал.

Добавлено спустя 42 минуты 39 секунд:
не работает
например в
uses mxapr;

const
// libraries:
libsvn_client = 'svn_client-1';
libsvn_auth = 'svn_subr-1';
libsvn_subr = 'svn_subr-1';
libsvn_fs = 'svn_fs-1';

но таких dll вообще нету в Subversion, а есть

libsvn_client-1.dll
libsvn_fs-1.dll
libsvn_subr-1.dll

но в них функции называются по другому
аналогичная проблема с delphisvn

Вопрос где взять
svn_client-1.dll
svn_subr-1.dll
svn_fs-1.dll
...
?
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Работа с SVN сервером

Сообщение shade » 10.07.2008 10:09:27

sts писал(а):const
// libraries:
libsvn_client = 'svn_client-1';
libsvn_auth = 'svn_subr-1';
libsvn_subr = 'svn_subr-1';
libsvn_fs = 'svn_fs-1';

но таких dll вообще нету в Subversion, а есть

libsvn_client-1.dll
libsvn_fs-1.dll

Я тестировал только под Linux. Укажи полные имена dll-ок
libsvn_client = 'libsvn_client-1.dll';
libsvn_auth = 'libsvn_subr-1.dll';
libsvn_subr = 'libsvn_subr-1.dll';
libsvn_fs = 'libsvn_fs-1.dll';
...
Если будет работать, я добавлю $IFDEF-ы

sts писал(а):в том то и дело, что не хочет клиент (dll) 1.4 работать с 1.5 а delphisvn"нехочет" загружать клиент(dll) 1.5

хм... боюсь что не понял кто с кем не хочет работать...
да и в чем проявляется это "нежелание"?
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Работа с SVN сервером

Сообщение sts » 10.07.2008 10:15:49

да я так и сделал
Код: Выделить всё
libsvn_client = 'libsvn_client-1.dll';
libsvn_auth = 'libsvn_subr-1.dll';
libsvn_subr = 'libsvn_subr-1.dll';
libsvn_fs = 'libsvn_fs-1.dll';
libapr = 'libapr-1.dll';

но, например, в коде есть
Код: Выделить всё
procedure apr_hash_this(hi: apr_hash_index_p; out key: pointer; out klen: apr_ssize_t; out val: pointer); cdecl;
    external libapr name 'apr_hash_this';

а реально в libapr-1.dll есть только '_apr_hash_this@16'
'apr_hash_this' вообще нету в дллках

Добавлено спустя 4 минуты 56 секунд:
ща инет ройю, уже штук 10 вариантов libsvn*dll накачал, все разного размера и даты хотя в версии стоит одно и тоже 1.5.0.31699
маразм какойто.
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Работа с SVN сервером

Сообщение Attid » 10.07.2008 10:37:24

sts писал(а):ща инет ройю, уже штук 10 вариантов libsvn*dll накачал

заголовки проще было-бы перевести
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Re: Работа с SVN сервером

Сообщение sts » 10.07.2008 10:51:10

дело не в том - проще\непроще
а в том что таких проблем вообще не должнобыть
а то как сапожники без сапог - немогут отследить версии дллек для системы контроля версии

Добавлено спустя 1 час 14 минут 49 секунд:
А где можно почитать доку на этот СВН АПИ?
коекак библиотека завелась, теперь стоит вопрос а что собствено надо вызвать и в каком порядке чтоб получить список измененных файлов по номеру ревизии
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Работа с SVN сервером

Сообщение shade » 10.07.2008 12:12:56

sts писал(а):а реально в libapr-1.dll есть только '_apr_hash_this@16'
'apr_hash_this' вообще нету в дллках

Это не Subversion, это APR...

_apr_hash_this@16 - это декорированный вариант apr_hash_this
Похоже в винде вместо cdecl нужно указывать stdcall

Т.е.
Код: Выделить всё
procedure apr_hash_this(hi: apr_hash_index_p; out key: pointer; out klen: apr_ssize_t; out val: pointer); stdcall;
    external libapr name 'apr_hash_this';


Попробуй в модулях apr из mxlib заменить все вхождения cdecl на stdcall

Добавлено спустя 6 минут 26 секунд:
sts писал(а):А где можно почитать доку на этот СВН АПИ?

Я изучал заголовки из исходников Subversion и собственно исходники. Простые примеры можешь посмотреть в mxlib, да и среди исходников subversion тоже было несколько примеров. Можешь ещё глянуть там же на Шаманграде mxcmd - там пример того, как выводить окошки с запросом логина/пароля когда требуется авторизация.

sts писал(а):коекак библиотека завелась

Поделись опытом, я подкорректирую mxlib, чтобы меньше мучались

Добавлено спустя 19 минут 52 секунды:
sts писал(а):теперь стоит вопрос а что собствено надо вызвать и в каком порядке чтоб получить список измененных файлов по номеру ревизии

1. иницаилизация контекста (см. примеры)
2. получение данных, в твоем случае нужно использовать функцию svn_client_log*, я думаю пока стоит ориентироваться на svn_client_log3 (subversion 1.4) - её будет достаточно.
3. финализация (см. примеры)

Практически все функции используют функции обратного вызова, которые принимает информацию через аргументы и svn_client_log* одна из них.

Например, для svn_client_status*
Код: Выделить всё
/**
* Функция обратного вызова для svn_client_status2() для метода svn::status(), который узнает статус файла в рабочей копии
*/
// Статитческий метод! В Pascal нет нормальной поддержки статических методов,
// потому нужно будет делать имено функцию.
void svn::status_func2(void *baton, const char *, svn_wc_status2_t *status)
{
   svn *self = static_cast<svn *>(baton); // это указатель на класс-обретку
// структура status описывает статус файла
   if ( status->text_status == svn_wc_status_normal && status->prop_status != svn_wc_status_normal )
   {
// записываем статус в поле объекта нашей обертки
      self->fStatus = svn_wc_status_modified;
   }
   else
   {
      self->fStatus = status->text_status;
   }
}


И собственно реализация svn::status();
Код: Выделить всё
/**
* Вернуть статус файла
* @param path путь к файлу/каталогу
* @return статус файла/каталога
*/
svn_wc_status_kind svn::status(const QString &path)
{
// в fStatus будет записан статус файла, none - типа нет файла
   fStatus = svn_wc_status_none;
// собственно вызов svn_client_status
   svn_client_status2(NULL, path.toUtf8().data(), NULL, svn::status_func2, this, FALSE, TRUE, FALSE, TRUE, FALSE, ctx, pool);
// в fStatus был записан статус файла, мы его и вернем
   return fStatus;
}


В твоем случае я тоже посоветовал бы сделать класс (или объект) обёртку
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Работа с SVN сервером

Сообщение sts » 10.07.2008 12:57:15

замена cdecl на stdcall привела к катастрофической потере работоспособности :), местами никакой.
примеры из (mxlib) стали слетать на svn_pool_create(nil) с AV0 хотя функция импортнулась

'_apr_hash_this@16' пришлось оставить

Добавлено спустя несколько часов:
Заработало.
Под D6
libsvn_client-1.dll 1.5.0.31699
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Работа с SVN сервером

Сообщение shade » 10.07.2008 18:52:56

Хм. попробую повторить (на винде)...
Какая версия APR? где брали?

Удалось завести mxlib или delphisvn?
Аватара пользователя
shade
энтузиаст
 
Сообщения: 879
Зарегистрирован: 21.02.2006 20:15:48
Откуда: http://shamangrad.net/

Re: Работа с SVN сервером

Сообщение sts » 10.07.2008 20:34:45

Завелась mxlib.
Суть в том что не все cdecl надо менять на stdcall, callback функции должны быть cdecl, что логично, а все импортируемы из дллек stdcall, но некоторые функции импортируемые из APR почемуто тоже должны быть cdecl.
Выяснено методом научного тыка :)
Имхо, APR (libapr-1.dll) както криво компильнули.
Ну там еще с типами немного было...
Работает на уровне исходной задачи - получить список ревизий с автором, описанием и т.п. + по номеру ревизии список файлов. Другое не проверялось.
Завтра подготовлю и вышлю исходники.

Да, дллки шли вместе с сервером SVN 1.5, в клиенте TortoiseSVN ими (аналогичными) и не пахнет.
sts
постоялец
 
Сообщения: 415
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

След.

Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru