ユーザーが指定した名前に基づいて、リポジトリに新しいプロジェクトを追加するスクリプトを作成しています。これには、同じ名前のURLがまだリポジトリに存在しないことの確認が含まれます。
リポジトリでは、私たちのチームのすべてのプロジェクトがに保存されます
https://developernetwork.repo.net/svn/Projects/
ユーザーがプロジェクト「Calculator」を呼び出してスクリプトを実行したいとします。この場合、以下がリポジトリに存在しないことを確認する必要があります
https://developernetwork.repo.net/svn/Projects/Calculator/
それを達成するために使用できるsvnコマンドはありますか?残念ながら、svnドキュメント( http://svnbook.red-bean.com/en/1.0/svn-book.html )で使用できる適切なコマンドがまったく表示されません。
あなただけを使用することができます
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
御treat走のように動作します!
既存のリポジトリに関する情報を受信するには(たとえば、エラーメッセージを充実させるため)
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/)
次に、プロジェクトフォルダーが存在することを確認します。 add /
プロジェクト名の後。
projectName="Calculator/"
for i in $projects; do
if [ "$i" == "$projectName/" ];
then
echo Project Exist
else
echo Project does not exist
fi
done
シンプル。
既存の回答についてコメントしていましたが、十分な評判はありません。
ファイルが正常にインポートされたかどうかを確認したかったので、「echo $?」で「svn info」と「svn ls」を試しました。 「svn ls」を使用した場合にのみゼロ/ゼロ以外のリターンコードを取得できました。「svn info」は常にゼロを返しました。
これは、Redhat RHEL6上のSubversion 1.5.5で発生しました。
@A Scottが言うように、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