Убедитесь, что 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
Другие вопросы по тегам