Убедитесь, что URL-адрес репозитория svn не существует
Я пишу script, который добавит новый проект в репозиторий, на основе имени, предоставленного пользователем. Часть этого требует проверки того, что URL-адрес с таким же именем еще не существует в репозитории.
В репозитории все проекты нашей команды хранятся в
https://developernetwork.repo.net/svn/Projects/
Скажем, что пользователь хочет вызвать проект "Калькулятор" и запускает script. В этом случае нам необходимо убедиться, что в репозитории не существует следующего
https://developernetwork.repo.net/svn/Projects/Calculator/
Есть ли команда svn, которую я могу использовать для этого? К сожалению, я не вижу соответствующей команды, которую я могу использовать в документации svn (http://svnbook.red-bean.com/en/1.0/svn-book.html).
Ответы
Ответ 1
Вы можете просто использовать
svn ls https://developernetwork.repo.net/svn/Projects/Calculator/
Он скажет вам, существует ли репозиторий (каталог) или нет.
Обновление
для каталогов со многими файлами:
svn ls http://server/svn/foo --depth empty
Ответ 2
Вместо проверки верных строк я просто проверил бы код возврата:
и
svn ls REPOSITORY/PATH
и
svn info REPOSITORY/PATH
возвращает 0, если все пошло нормально, и 1, если все пошло не так; вы можете быстро проверить:
echo $?
поэтому в bash script просто выполните что-то вроде:
error=$?
if [ $error -ne 0 ]; then
YOUR ERROR HANDLING
fi
работает как удовольствие!
Ответ 3
Чтобы получать информацию о любом существующем репозитории (например, для возможного обогащения сообщения об ошибке), вы также можете использовать
svn info https://developernetwork.repo.net/svn/Projects/Calculator/
Для несуществующего проекта он просто вернет
svn: Could not open the requested SVN filesystem
Ответ 4
Я столкнулся с вышеупомянутой проблемой, и я пробовал полностью. не работает для меня.. если мы получаем доступ к svn с пути, не связанным с svn, он не с ошибкой, а оболочка script сломается.
Вместо того, чтобы обращаться к неизвестному пути, то, что я сделал, это получить список каталогов родительской папки и проверить, не существует ли соответствующий.
Получите все проекты из родительского каталога (если вы хотите найти определенные теги, то путь родительского каталога должен быть 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
просто.
Ответ 5
Я бы прокомментировал существующий ответ, но у меня недостаточно репутации.
Я хотел найти, был ли файл успешно импортирован или нет, поэтому я попробовал "svn info" и "svn ls" с "echo $?". Я мог получить только нулевой/ненулевой код возврата, когда использовал "svn ls": "svn info" всегда возвращал нуль.
Это было с subversion 1.5.5 на Redhat RHEL6.
Ответ 6
Как и @A Скотт говорит, 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