2012-03-19 195 views
0

私はリポジトリをチームファウンデーションサーバにエクスポートするためのsvnの投稿コミットフックスクリプトを書こうとしています。 (コードをコミットすると、コードの最新バージョンがチームファンデーションのレポにコピーされます)svnフックスクリプトを書く方法

私が使用する言語はC++とCであり、スクリプトを作成したことはありません。誰も私にこのステップの指示を与えることができますか?どの言語を使用するか、どのようなものを読むかなど...いくつかのサンプルコードと一緒に可能でしょうか?

C++でフックスクリプトを記述することはできますか?または私はあなたがここに事前にコミットフックを定義する方法の手順を見つけることができますどのようにPythonやルビーなどを使用する。..

+1

まず、(http://stackoverflow.com/questions [答えがここに既に利用されています]/139315/can-i-run-a-script-when-i-commit-to-subversion)を実行します。第二に:いいえ。それは "スクリプト"である必要はありません。実行可能ビットを持つものはすべて動作します。 CやC++でフックを書くこともできます。 –

答えて

5

好きな場合は、CまたはC++を使用してフックを書くことができます。ほとんどの人はPerlやPythonを使います。

svnlookは、svnではなく、フックスクリプトで使用することが重要です。 svnlookはsvnより速くて安全です。実際、プリコミットスクリプトでは、リポジトリリビジョンを持っていないので、svnlookを使用する必要があります。

はここにあなたのpost-commitフックについて心に留めておくべきいくつかのものです:

  • あなたがリビジョンを変更することはできませんし、変更をコミットしようとしないでください。あなたのコミット後のフックは、それ自身を呼び出すことになります。開発者が特定のパラメータを守るようにするには、開発者が正しく実行しないと失敗するpre-commitフックが必要です。
  • Subversionがpost-commitフックを呼び出すと、PATH環境変数が削除されました。別のコマンドまたはファイルにアクセスする必要がある場合は、完全なパスを自分で指定する必要があります。
  • Subversionはコマンドラインから特定のパラメータを渡します。実際のコマンドラインではありませんが、これらのパラメータはARGVにあります。 2つのパラメーターがユーザーに渡されます。
    1. サーバーのリポジトリー・パス(svnlookコマンドの場合)。
    2. リポジトリのリビジョン。

あなたがsystemコマンド経由で実行できる(svnlookかかわら推測しなければなりません。あなたが実際にCとC++で物事を書いているので、あなたがSubversion APIで構築を使用することができるかもしれない他のすべて)。

別の可能性:汚れた作業を行うには、Jenkinsのような連続ビルドシステムを使用してください。コミット後のフックがこのタスクをどのように達成するかを心配するのではなく、Jenkinsを使って作業する方が簡単かもしれません。 Jenkinsの利点の1つは、何かがうまくいかない場合、コミットされていないコミットメッセージをユーザに返信しないことです。代わりに、猫は起こったことの完全なログを取得し、実際に問題を解決できる人に警告します。

私はPerlに書いたsample of oneです。あなたに何か良いことができるかどうかは分かりません。ここで

+0

私たちはJenkinsやTeam Foundation Serverの使用を検討しています。チームファンデーションサーバーを使用する場合は、svnとTFSを同期させる必要があります。その理由は私がpost-commit hookを探している理由です。チームファンデーションサーバ(svn - チームファンデーションサーバ)に同期機能を使用する方法はありますか? – kiki

+0

@kiki - 実際には、Jenkinsを使ってビルドだけでなく、ビルドにも使わないこともあります。私はこの場合、JenkinsをSubversionとTeamFoundationの間の同期を行うためだけに使用することを意味しました。 –

1

学ぶべき: http://wordaligned.org/articles/a-subversion-pre-commit-hook

ポストコミットの作成は、その命令に似ています。

コミット後のテンプレートを新しいファイルにコピーしたら、単にC++で作成したプログラムを呼び出すための行を追加して、単純にその引数をプログラムに渡すことができます。

これは、あなたが何をしているかによって異なりますが、ほとんどの場合、シェルスクリプトやPythonとしてスクリプト言語を使用して仕事をするのに時間がかかります。

+0

結果を別の場所にエクスポートするか、コードを別の場所にコピーする(バックアップする)既存のコミット後のフックがありますか? – kiki

+0

はい、svnソースにテンプレートがあります:http://svn.apache.org/repos/asf/continuum/trunk/continuum-release/src/test/scm/hooks/post-commit.tmplリポジトリとリビジョンを持っている場合は、単純に 'svn'を呼び出して、コミットに必要なすべての情報を取得できます。 – devsnd

+0

私は実際にスクリプトを書くのに助けが必要だと思います。私が読めるか見ることができる良い資源はありますか?それを試してその感触を得るための小さな例がありますか? – kiki

0

は、ネイティブウィンドウを使用して、Windows上でポストコミットフック用のサンプルとここstackoverflowの答えですコマンドシェル - https://stackoverflow.com/a/3630534/7984

関連する問題