Хук перед фиксацией, который проверяет svn:externals на наличие каталога тегов

Я пытаюсь проверить свои внешние данные через крючок SVN Pre-commit. svn:external содержит общую библиотеку для нескольких проектов. В хуке Pre-commit я хочу проверить, указывает ли внешний объект на каталог тегов, а не на ствол или ветку.

На моей локальной машине в папке рабочей копии я смог успешно выполнить команду:

svn propget svn:externals

Это вернуло мне внешний вид:

https://SVNSERVER/svn/Test_Lib/trunk Test_Lib

Хотя это работает на моей локальной машине, я не могу использовать команду svn в хуке Pre-Commit, поэтому мне нужна команда svnlook.

И здесь начинается моя проблема, я пробовал несколько команд на своем хуке Pre-Commit, например:

svnlook propget %REPOS% svn:externals -t %TXN%

Полностью выписано, что это:

svnlook propget C:\Repositories\Test_Project svn:externals -t 31-2y

Я пробовал несколько способов размещения %REPOS% и %TXN%, с кавычками и без них ("%REPOS%", "%TXN%") и перемещая их до и после части svn:externals.

К сожалению, все, что я пробовал, приводит к сообщению об ошибке, что имя свойства или путь к репозиторию отсутствуют.

svnlook: E205001: Try 'svnlook help' for more info
svnlook: E205001: Missing propname or repository path argument

Я искал Stack Overflow и нашел 1 человека, у которого была такая же проблема, но он не получил ответа на свой вопрос:

Попытка создать хук перед фиксацией, который проверяет внешние

Кто-нибудь знает правильный синтаксис для этого или другой способ запросить svn:externals через хук Pre-commit?


person Roel Balink    schedule 26.10.2015    source источник
comment
Он получил ответ (от меня), просто не принял его. Какие проблемы возникают у вас с этим (старым) ответом? Видите ли вы ошибку в вашем списке параметров?   -  person Lazy Badger    schedule 26.10.2015
comment
@LazyBadger Хорошо, может быть, я неправильно понял ваш ответ. Насколько я понял, вы проверяете внешние svnlook pg rep svn:externals tags/1.0.1/ -r 7 и svnlook pg rep svn:externals trunk/ -r 6, но они уже зафиксированы и находятся в репозитории, верно? И я хочу проверить их перед тем, как передать в репозиторий. Пожалуйста, поправьте меня, если я ошибаюсь.   -  person Roel Balink    schedule 26.10.2015
comment
Ты прав. Для транзакции вам нужно начать с -t %TXN% и вашего пути к внешнему контейнеру в вашем репозитории.   -  person Lazy Badger    schedule 26.10.2015
comment
@LazyBadger, ваш путь, это путь к моей рабочей копии на моем локальном компьютере? Например, D:\Projects\Test_Project, который находится на моем локальном ПК, а не параметр %REPOS% в сценарии, который равен C:\Repositories\Test_Project на ПК SVN Server? Если да, то как мне разобрать этот локальный путь к скрипту? Потому что, насколько я знаю, единственные параметры, которые я получаю в скрипте ловушки Pre-Commit, это %TXN% и %REPOS%?   -  person Roel Balink    schedule 26.10.2015
comment
Нет, путь - это относительный путь внутри дерева репозиториев svnlook pg %REPOS% svn:externals %PATH/IN/REPO% -t %TXN%   -  person Lazy Badger    schedule 26.10.2015
comment
@LazyBadger А, это немного проясняет ситуацию. Теперь я могу создать рабочий пример, установив %PATH/IN/REPO% в trunk/. Когда я фиксирую с помощью этой команды svnlook pg %REPOS% svn:externals trunk -t %TXN%, похоже, она работает. Спасибо за помощь, я думаю, что это %PATH/IN/REPO% должно быть основано на текущей ветке, над которой я сейчас работаю. Я постараюсь исправить это и опубликую решение здесь.   -  person Roel Balink    schedule 26.10.2015