2011-12-11 6 views
2

からファイルを生成するために、私は、私は、ユーザーwww-dataが所有するトランク(/var/www/trunk)の作業コピーのチェックアウトを持って、サーバー上でSVNフックがコミットファイル

trunk/file1.txt 
trunk/file2.txt 
trunk/fileR.txt 

を持ってSVNリポジトリを持っています。

fileR.txtはユーザーのみwww-dataauthzまたはsvnlook authorによるアクセスの制限)を除き、すべての人のために読まれます。 fileR.txtfile1.txtfile2.txtをconcatentatingによって生成されなければならない:cat file1.txt file2.txt > fileR.txt

私が欲しいのスクリプトはサーバー上の作業コピーを更新している実行する必要があり、trunk/file1.txtまたはtrunk/file2.txtのいずれかにコミットがあるたびに、ファイルを連結していることで、新しいfileR.txtをリポジトリにコミットします。

私が気にしていたのは、上記のすべてを行うコミット後のフックでしたが、前回のコミットが確定されるまで、SVNが新しいコミットを処理できるかどうか、およびわかりません。

例:file1.txtへの変更を伴うcommit1が入り、pre-commitフックが実行されていれば、トランザクションがデータベースにコミットされ、コミット後のフックが実行されます。ポスト・コミット・フックは実際にcommit2を作成します。このcommit2は、commit1からのポスト・コミット・フックが実際に終了する前にファイナライズする必要があります。

SVNはこれを実行できますか?そうでない場合は、他にどのようなツールやワークフローを提案していますか?

おかげ

+1

通常、ファイルをリポジトリ内の他のファイルから派生させることができる場合、そのファイルをリポジトリにまったくコミットしません。そのファイルを必要とする人は、必要に応じてそれを派生させることができます。他の2つを連結するだけで、リポジトリにfileRファイルを格納する必要があるのはなぜですか? –

+0

1つの質問:fileRはなぜ存在する必要がありますか?ユーザーはfile1とfile2を別々に扱うことはできませんか?なぜあなたはこれをやりたいのかを理解するためには、もう少し文脈が必要だと思います。 –

+0

'fileR'は従来の理由から存在する必要があります。私たちの研究グループでは、BibTeXを使って論文のすべての参考文献を作成しました(これはfileRです)。最近では、私たちが発行した論文と他の人が発行した論文の両方で 'fileR'を保つことは良い考えではなく、2つの別々のファイル(私たちのためのもの、世界の他のもの)に切り替えました。残念ながら、いくつかのスクリプトを使用して、研究グループ内の個々の人のための出版リストを自動的に生成します(変更したくない)。しかし、我々はまだレガシーファイルを保持したい。 – cdavid

答えて

1

は私がFILE1.TXTの変更をコミット

  1. ...のは、あなたが欲しいものを行うには、ポストコミットフックを作りましょう。
  2. 変更をピックアップして新しいファイルfileR.txtを作成します。
  3. コミット後の変更により、この変更がコミットされ、コミット前のフックが起動します。
  4. そして、あなたはあなたのポストはフックが動作可能なコミットどこも、サーバー上の作業コピーを作成する問題があります#1

ステップするためにすぐに戻っています。誰かがコミットをしたときは、サーバー上の作業コピーを更新したりチェックアウトしたりして、変更を連結してからコミットフックを起動せずに新しいコミットを行わなければなりません。人々はブランチを作成するかもしれないので、複数の作業コピーを持たなければならないかもしれないことを忘れないでください。

あなたのポストコミットフックがこれをすべて実行している間に、ユーザーはポストコミットフックが完了するまで待つ必要があります。

また、私がコミットすると、私の作業コピーは古くなりました。私は今コミットしてから、サーバーがコミットしたために更新を行います。

私はこれが本当に良いアイデアではないことをあなたに納得させていただきたいと思います。 ですが、確かにそれはお勧めできません。実際、ビルドエンジニアがこのようなことをするのを見た場合、私はそれらを発射します。


Jenkinsをご覧ください。Jenkinsは継続的な構築サーバーです。あなたができることは、コミットが行われるたびに、JenkinsにfileR.txtファイルを作成させることです。このファイルはJenkinsサーバーから簡単にダウンロードして公開することができます。また、ファイルRB.txtを入手して、その人に向けてPDFを作成することもできます。

したがって、結合されたファイルは引き続き使用でき、他のプロセスによってダウンロードできますが、コミット後のフックで別のラウンドのフックが発生することはありません。そして、fileR.txtは、その特定のJenkinsジョブにアクセスできるすべての人が読み取ります。

+0

答えとポインタをありがとう。私はあなたが言及したものを試してみます。 – cdavid

関連する問題