Убедитесь, что URL-адрес хранилища SVN не существует - PullRequest
41 голосов
/ 15 мая 2009

Я пишу скрипт, который добавит новый проект в репозиторий на основе имени, предоставленного пользователем. Частично это включает проверку того, что 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 ]

45 голосов
/ 17 августа 2010

Вместо проверки строк возврата я бы просто проверил код возврата:

и

svn ls REPOSITORY/PATH

и

svn info REPOSITORY/PATH

вернуть 0, если все прошло нормально, и 1, если что-то пошло не так; Вы можете быстро проверить это:

echo $?

так что в bash-скрипте просто сделайте что-то вроде:

error=$?
if [ $error -ne 0 ]; then
      YOUR ERROR HANDLING
fi

работает как удовольствие!

44 голосов
/ 15 мая 2009

Вы можете просто использовать

svn ls https://developernetwork.repo.net/svn/Projects/Calculator/

Он сообщит вам, существует ли хранилище (каталог) или нет.

Обновление

для каталогов с большим количеством файлов:

svn ls http://server/svn/foo --depth empty
9 голосов
/ 15 мая 2009

Для получения информации о любом существующем хранилище (например, для возможного дополнения сообщения об ошибке) вы также можете использовать

svn info https://developernetwork.repo.net/svn/Projects/Calculator/

Для несуществующего проекта он просто вернет

svn: Could not open the requested SVN filesystem
2 голосов
/ 28 июля 2014

Я столкнулся с вышеуказанной проблемой, и я пытался все время. не работает для меня .. если мы обращаемся к 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 

простой.

1 голос
/ 17 августа 2016

Я бы прокомментировал существующий ответ, но у меня недостаточно репутации.

Я хотел узнать, был ли файл успешно импортирован или нет, поэтому я попытался "svn info" и "svn ls" с "echo $?". Я мог получить только нулевой / ненулевой код возврата, когда использовал «svn ls»: «svn info» всегда возвращал ноль.

Это было с Subversion 1.5.5 на Redhat RHEL6.

0 голосов
/ 21 июля 2017

Как говорит @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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...