svnperms.py не работает в Windows с Collabnet Subversion Edge

У меня установлена ​​Windows Collabnet Subversion Edge v3.3.1. У меня уже включено базовое ограничение доступа, но это не дает мне возможности сделать следующее: 1. Отменить удаление файла / папки пользователями 2. Использование подстановочных знаков для указания разрешений на уровне файлов в хранилище

Следовательно, я гуглил и нашел svnperms.py, чтобы удовлетворить мои требования. Я следовал инструкциям в интернете и настроил svnperms.py для ограничений доступа.

Мой хук предварительной фиксации выглядит так:

set REPOS=%1
set TXN=%2

REM "C:\csvn\Python25\python.exe" "C:\csvn\data\repositories\repos\hooks\svnperms.py" -r "%repos%" -t "%txn%" -    f "C:\csvn\data\repositories\repos\hooks\svnperms.conf" 

"C:\csvn\Python25\python.exe" "C:\csvn\data\repositories\repos\hooks\svnperms.py" -  f "C:\csvn\data\repositories\repos\hooks\svnperms.conf" -r "%REPOS%" -t "%TXN%"||exit 1;
exit 0;

Мой файл конфигурации выглядит

[groups]
group1 = sowmya.dass
group2 = m.b
[repos]
a/.* = @group1(update)
a/.* = @group2(delete)

Я попытался проверить это, заставив пользователя mb удалить файл в папке a в хранилище. Так как у пользователя есть доступ, он должен иметь возможность сделать это, но затем я получаю следующую ошибку, когда он пытается зафиксировать:

Команда: Фиксация
Удаление: C: \ m_ws_edge \ a \ pom.xml
Ошибка: не удалось выполнить фиксацию (подробности приведены ниже):
Ошибка: фиксация заблокирована ловушкой предварительной фиксации (код выхода 1) с выводом:
Ошибка: автор svnlook C:\csvn\data\repositories\repos -t 5-c
Ошибка: "{" не распознается как внутренняя или внешняя команда,
Ошибка: работающая программа или пакетный файл. Ошибка: команда не выполнена: svnlook author
Ошибка: C:\csvn\data\repositories\repos -t 5-c
Ошибка: "{" не распознается как внутренняя или внешняя команда,
Ошибка: работающая программа или командный файл.
Завершена!:

Та же ошибка возникает, когда любой пользователь пытается выполнить какую-либо операцию независимо от того, имеет ли пользователь доступ или нет.

Я посмотрел более раннюю статью " Как контролировать изменения тегов на сервере SVN в Windows", где обсуждалась похожая проблема. Но решение не соответствует моему требованию. Также упоминается, что svnperms.py не работает в Windows из-за базовых команд svnlook, которые работают только в Unix. Мне также довелось увидеть другие посты в интернете, в которых упоминались подобные проблемы, но я не смог найти никакого решения, как заставить svnperms.py работать с Windows.

Кто-нибудь может мне помочь с: 1. Исправить вышеуказанную ошибку и заставить svnperms.py работать на окнах и / или 2. Альтернативное решение, удовлетворяющее моим вышеупомянутым требованиям, состоящее в том, чтобы отказаться от удаления пользователя из файлов / папок и использовать подстановочные знаки в ограничениях доступа на основе файлов.

Спасибо!

С уважением

Совмия Дасс

2 ответа

Я не верю, что хук не находит исполняемый файл. Вы получили код выхода 1 и не 255,

Вот вывод ошибки, которую ваш хук передает вам:

svnlook author C:\csvn\data\repositories\repos -t 5-c
'{' is not recognized as an internal or external command,
operable program or batch file.error: command failed: svnlook author

C:\csvn\data\repositories\repos -t 5-c
'{' is not recognized as an internal or external command,
operable program or batch file.

Я вижу выход command failed: svnlook author генерируется в строке 187 вашего скрипта Python.

Операция выглядит довольно прямо. SVNLook класс создан для выполнения svnlook команды. Это определено в строке № 174. Есть author Метод для этого класса определен в строке #233. Строка #243 выполняет эту строку и находит автора.

Если svnlook author не возвращает ненулевой статус, (строка № 183), командная строка записана:

svnlook author C:\csvn\data\repositories\repos -t 5-c

Тогда возвращаемая строка ошибки:

'{' is not recognized as an internal or external command,
 operable program or batch file.error: 

И наконец,

command failed: svnlook author

Я не уверен на 100%, откуда взялись последние три строки.

svn author C:\csvn\data\repositories\repos -t 5-c выглядит правильно для меня. '{' is not recognized as an internal or external command Строка не должна быть ответом на svnlook команда.

Интересно, есть ли версия Perl svnlook таится где-то в вашей системе. Я считаю, что в системах Windows, %PATH% а также %PATHEXEC% переменные окружения не обнуляются.

Посмотрите, сможете ли вы распечатать%PATH% при выполнении pre-commit.bat скрипт. Я думаю, что все, что вам нужно сделать, это добавить:

PATH 1>&2

или что-то похожее на precommit.bat скрипт. Затем посмотрите, есть ли еще svnlook.bat в вашей системе, которая может быть выполнена до svnlook команда в C:\csvn,

Вы также можете попробовать мой скрипт pre-commit hook. Он написан на Perl, но также использует контрольный файл для определения разрешений и может делать все, что вы просили. Мой скрипт требует от вас указать где svnlook находится, и это исключит вероятность того, что вы выполняете плохой svnlook Команда где-то в вашей системе.

Проблема не в том, чтобы быть в вашей ловушке. Это выглядит как svnperms.py.

Возможно, что путь к одной из программ не найден. Крючки начинаются с голой среды. (Даже путь не установлен)

Это также не относится к Subversion Edge. Крюки обрабатываются нижележащим "движком" Subversion.

-Редактировать-
Вы можете посмотреть статью здесь. Это порт.Net svnperms.

Вот еще кое-что, что нужно проверить (связано с чистой средой). Настроить svnperms pre-commit hook

Другие вопросы по тегам