Работа с SVN сервером
Модератор: Модераторы
Работа с SVN сервером
Народ, тут такая задача возникла, в проге надо получить список изменненых файлов по номеру ревизии SVN (минимум).
Отсюда вопрос - а если какие компоненты\исходники на паскале по работе с сервером SVN (1.5)?
поиск дал только это http://sourceforge.net/projects/delphisvn/, но там поддерживается версия Subversion 1.4 а стоит 1.5, с ней не хочет, некоторые функции, например, были переименованы.
Отсюда вопрос - а если какие компоненты\исходники на паскале по работе с сервером SVN (1.5)?
поиск дал только это http://sourceforge.net/projects/delphisvn/, но там поддерживается версия Subversion 1.4 а стоит 1.5, с ней не хочет, некоторые функции, например, были переименованы.
- Attid
- долгожитель
- Сообщения: 2589
- Зарегистрирован: 27.10.2006 17:29:15
- Откуда: 44°32′23.63″N 41°2′25.2″E
- Контактная информация:
http://shamangrad.net/project.php?act=view&prj=mxlib
Добавлено спустя 1 минуту 48 секунд:
B4rr4cuda
вот блин, на кнопке обошел =)
Добавлено спустя 1 минуту 48 секунд:
B4rr4cuda
вот блин, на кнопке обошел =)
Спасибо

скачать чето не получается, сижу за прокси а клиент (TortoiseSVN) чето не хочет подключатся к svn.shamangrad.net, хотя вроде настроил у него прокси...
скачать чето не получается, сижу за прокси а клиент (TortoiseSVN) чето не хочет подключатся к svn.shamangrad.net, хотя вроде настроил у него прокси...
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
sts писал(а):но там поддерживается версия Subversion 1.4 а стоит 1.5, с ней не хочет, некоторые функции, например, были переименованы.
в mxlib тоже 1.4, хотя думаю не принципиально, 1.5 обратно совместим с 1.4, потому с этими должно работать.
А использование API 1.4 даже лучше пока 1.5 не вытеснил 1.4
sts писал(а):Народ, тут такая задача возникла, в проге надо получить список изменненых файлов по номеру ревизии SVN (минимум).
1.4 я думаю, для этого хватит
в том то и дело, что не хочет клиент (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
...
?
Добавлено спустя 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
...
?
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
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
хм... боюсь что не понял кто с кем не хочет работать...
да и в чем проявляется это "нежелание"?
да я так и сделал
но, например, в коде есть
а реально в libapr-1.dll есть только '_apr_hash_this@16'
'apr_hash_this' вообще нету в дллках
Добавлено спустя 4 минуты 56 секунд:
ща инет ройю, уже штук 10 вариантов libsvn*dll накачал, все разного размера и даты хотя в версии стоит одно и тоже 1.5.0.31699
маразм какойто.
Код: Выделить всё
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
маразм какойто.
дело не в том - проще\непроще
а в том что таких проблем вообще не должнобыть
а то как сапожники без сапог - немогут отследить версии дллек для системы контроля версии
Добавлено спустя 1 час 14 минут 49 секунд:
А где можно почитать доку на этот СВН АПИ?
коекак библиотека завелась, теперь стоит вопрос а что собствено надо вызвать и в каком порядке чтоб получить список измененных файлов по номеру ревизии
а в том что таких проблем вообще не должнобыть
а то как сапожники без сапог - немогут отследить версии дллек для системы контроля версии
Добавлено спустя 1 час 14 минут 49 секунд:
А где можно почитать доку на этот СВН АПИ?
коекак библиотека завелась, теперь стоит вопрос а что собствено надо вызвать и в каком порядке чтоб получить список измененных файлов по номеру ревизии
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
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;
}
В твоем случае я тоже посоветовал бы сделать класс (или объект) обёртку
замена cdecl на stdcall привела к катастрофической потере работоспособности
, местами никакой.
примеры из (mxlib) стали слетать на svn_pool_create(nil) с AV0 хотя функция импортнулась
'_apr_hash_this@16' пришлось оставить
Добавлено спустя несколько часов:
Заработало.
Под D6
libsvn_client-1.dll 1.5.0.31699
примеры из (mxlib) стали слетать на svn_pool_create(nil) с AV0 хотя функция импортнулась
'_apr_hash_this@16' пришлось оставить
Добавлено спустя несколько часов:
Заработало.
Под D6
libsvn_client-1.dll 1.5.0.31699
- shade
- энтузиаст
- Сообщения: 879
- Зарегистрирован: 21.02.2006 19:15:48
- Откуда: http://shamangrad.net/
- Контактная информация:
Хм. попробую повторить (на винде)...
Какая версия APR? где брали?
Удалось завести mxlib или delphisvn?
Какая версия APR? где брали?
Удалось завести mxlib или delphisvn?
Завелась mxlib.
Суть в том что не все cdecl надо менять на stdcall, callback функции должны быть cdecl, что логично, а все импортируемы из дллек stdcall, но некоторые функции импортируемые из APR почемуто тоже должны быть cdecl.
Выяснено методом научного тыка
Имхо, APR (libapr-1.dll) както криво компильнули.
Ну там еще с типами немного было...
Работает на уровне исходной задачи - получить список ревизий с автором, описанием и т.п. + по номеру ревизии список файлов. Другое не проверялось.
Завтра подготовлю и вышлю исходники.
Да, дллки шли вместе с сервером SVN 1.5, в клиенте TortoiseSVN ими (аналогичными) и не пахнет.
Суть в том что не все cdecl надо менять на stdcall, callback функции должны быть cdecl, что логично, а все импортируемы из дллек stdcall, но некоторые функции импортируемые из APR почемуто тоже должны быть cdecl.
Выяснено методом научного тыка
Имхо, APR (libapr-1.dll) както криво компильнули.
Ну там еще с типами немного было...
Работает на уровне исходной задачи - получить список ревизий с автором, описанием и т.п. + по номеру ревизии список файлов. Другое не проверялось.
Завтра подготовлю и вышлю исходники.
Да, дллки шли вместе с сервером SVN 1.5, в клиенте TortoiseSVN ими (аналогичными) и не пахнет.
