Убедитесь, что URL-адрес хранилища SVN не существует
Я пишу сценарий, который добавит новый проект в хранилище на основе имени, предоставленного пользователем. Частично это включает проверку того, что URL-адрес с таким именем еще не существует в хранилище.
В репозитории все проекты нашей команды хранятся в
https://developernetwork.repo.net/svn/Projects/
Допустим, пользователь хочет вызвать проект "Калькулятор" и запускает скрипт. В этом случае нам нужно убедиться, что в хранилище не существует следующего
https://developernetwork.repo.net/svn/Projects/Calculator/
Есть ли команда SVN, которую я могу использовать для этого? К сожалению, я не вижу подходящей команды, которую могу использовать в документации svn ( http://svnbook.red-bean.com/en/1.0/svn-book.html).
6 ответов
Вы можете просто использовать
svn ls https://developernetwork.repo.net/svn/Projects/Calculator/
Он сообщит вам, существует ли хранилище (каталог) или нет.
Обновить
для каталогов с большим количеством файлов используйте:
svn ls http://server/svn/foo --depth empty
Вместо того, чтобы проверять строки возврата, я бы просто проверял код возврата:
и то и другое
svn ls REPOSITORY/PATH
а также
svn info REPOSITORY/PATH
вернуть 0, если все прошло нормально, и 1, если что-то пошло не так; Вы можете быстро проверить это:
echo $?
так что в скрипте bash просто сделайте что-то вроде:
error=$?
if [ $error -ne 0 ]; then
YOUR ERROR HANDLING
fi
работает как удовольствие!
Чтобы получить информацию о любом существующем хранилище (например, для возможного обогащения сообщения об ошибке), вы также можете использовать
svn info https://developernetwork.repo.net/svn/Projects/Calculator/
Для несуществующего проекта он просто вернется
svn: Could not open the requested SVN filesystem
Я сталкиваюсь с вышеупомянутой проблемой, и я попробовал полностью. не работает для меня.. если мы обращаемся к SVN с пути не в SVN, это не удалось с ошибкой, и сценарий оболочки сломается.
Вместо того, чтобы получить доступ к неизвестному пути, я получил список каталогов родительской папки и проверил, содержит ли он один или нет.
Получить все проекты из вашего родительского каталога (если вы хотите найти определенные теги, тогда ваш родительский каталог должен быть https://developernetwork.repo.net/svn/Projects/Calculator/tags
)
projects=$(svn ls https://developernetwork.repo.net/svn/Projects/)
затем проверьте, что папка вашего проекта существует. Не забудьте добавить/
после названия вашего проекта.
projectName="Calculator/"
for i in $projects; do
if [ "$i" == "$projectName/" ];
then
echo Project Exist
else
echo Project does not exist
fi
done
просто.
Я бы прокомментировал существующий ответ, но у меня недостаточно репутации.
Я хотел выяснить, был ли файл успешно импортирован или нет, поэтому я попытался "svn info" и "svn ls" с "echo $?". Я мог получить только нулевой / ненулевой код возврата, когда использовал "svn ls": "svn info" всегда возвращал ноль.
Это было с Subversion 1.5.5 на Redhat RHEL6.
Как говорит Скотт, echo $?
не может использоваться, чтобы узнать, является ли URL правильным (я на Mac OS 10.11 и клиенте SVN 1.9.5).
Для потенциальных будущих читателей я использую этот обходной путь:
content=$(svn info $SVN_TAG_URL)
if [[ -z $content ]]; then
echo "The SVN URL doesn't exist"; exit
fi