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