Я написал хук перед фиксацией, который проверяет, обновлен ли файл транка version.txt по сравнению с version.txt в теге. Когда я запускаю скрипт в консоли, все в порядке, но когда я пытаюсь зафиксировать, я получаю это
Authentication realm: http://localhost:80 Subversion Repository Password for 'www-data': svn: E070014: Unable to connect to a repository at URL 'http://localhost/svn/myrepo2/tags'
А также это, если --force-interactive выключен
svn: E215004: Authentication failed and interactive prompting is disabled; see the --force-interactive option
Я проверил все шаг за шагом, и похоже, что эта строка вызывает проблему:
tag=$(svn list /some/path/tags --force-interactive | sort -n | tail -n 1 )
Есть ли альтернатива svn ls для проверки последнего тега или файлов в тегах папок?
#!/bin/bash
#get latest tag
tag=$(svn ls /some/path/tags --force-interactive | sort -n | tail -n 1)
#get content of file from the latest tag
fileFromTag=$(svn cat /some/path/tags/$tag/version.txt)
#get content of file from trunk
file=$(svn cat some/path/trunk/version.txt)
#compare current file with file from latest tag
if [ "$fileFromTag" == "$file" ]
then
echo "Update version.txt"
exit 1
fi
А вот структура репозитория
tags/
1.1.0/
version.txt
1.1.3/
version.txt
1.1.5/
version.txt
1.1.6/
version.txt
1.2.0/
version.txt
rel_1.0/
version.txt
trunk/
version.txt
🤔 А знаете ли вы, что...
Bash позволяет использовать условные операторы, циклы и функции в скриптах.
Ошибка означает, что клиент svn
не проходит аутентификацию на сервере и нет кэшированных учетных данных. Но главная проблема — это команды, которые вы запускаете в своем хуковом скрипте:
svn
клиента командной строки на svnlook
.svn
клиент командной строки в хуках, используйте URL-адреса file:// вместо URL-адресов HTTP (S). Хук запускается локально на том же компьютере, что и ваши репозитории и сервер, поэтому имеет смысл обращаться к репозиториям напрямую.