Подтвердить что ты не робот

Убедитесь, что 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).

4b9b3361

Ответ 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