3

次のツールが用意されています。

  • Subversion(バージョン1.5.9)
  • Polarion(バージョン3.2.2)

PolarionはSubversionに基づいているため、何かを変更するすべてのアクション(多くの場合)で、PolarionはSubversionコミットを使用して何かを変更します。現在、すべてのものが1つのリポジトリにのみ保存されているため、すべてのユーザー(同じリポジトリで約100〜200)がコミットするたびに、pre-commitフックがトリガーされます。

では、コミット前のフックを提供するための最良の戦略は何ですか?

  • すべてではなく一部のプロジェクトに対してのみトリガーする
  • すべてのpre-commitフックは他のすべてのコミットをブロックするため、できるだけ速く実行します。

Javaで(SVNKitを使用して)pre-commitフックを実装しようとしましたが、これはJavaVMをコミットするたびに開始されます。それで、それをうまく実装する方法はありますか?

4

5 に答える 5

3

私は最近Pythonを使用して、同じリポジトリ内のさまざまなプロジェクトをスキャンし、それに応じて動作するコミット後フックを実装しました。私はPythonを初めて使用するので、次のスクリプトにはいくつかの非効率性(または完全なエラー)があるかもしれませんが、それは私たちの目的には機能します:

#!/usr/bin/env python

import commands
from subprocess import *
import os
import sys

# This is a post-commit hook.  The arguments passed to the hook
# are different than a pre-commit hook, and the syntax/use for
# svnlook will probably be different too.

def check_repo_and_do_stuff(repos, rev):

    dirs_changed_cmd =
    p1 = Popen('%s dirs-changed %s -r %s' % (SVNLOOK, repos, rev)
    dirs_changed = p1.communicate[0]

    for line in dirs_changed:

        if line.find('/part-of-path-for/project1') >= 0:
            do_stuff_for_project1()

        if line.find('/part-of-path-for/project2') >= 0:
            do_stuff_for_project2()

def do_stuff_for_project1()...

def do_stuff_for_project2()...

SVNLOOK='/usr/bin/svnlook'

# Take the arguments that svnserve passes on the command-line
repos = sys.argv[1]
rev = sys.argv[2]

check_repo_and_do_stuff(repos, rev)

これがお役に立てば幸いです。

-ザカリー

于 2010-01-13T20:38:08.660 に答える
2

Javaが処理速度を低下させているが、Javaが使用される時間はごくわずかである場合は、軽量なものでフックを記述します。つまり、Windowsでは、.batファイルを使用します。次に、それを必要とするプロジェクト(またはファイルまたはユーザー)の場合、軽量フックからより高価なJavaフックを呼び出します。そうすれば、必要なときにのみコミットの速度を落とすことができます。

于 2010-03-20T00:27:56.710 に答える
1

Javaに基づくフックスクリプトは遅く、一般的にSubversionの応答時間に影響を与えます。負荷の高いサーバーで作業する場合。品質を向上させるための監査とメトリックを実装することで、最高のパフォーマンスが達成されます。監査でトレーサビリティを追跡することにより、プロジェクトチームは、進捗状況を追跡して、より良いレベルを得ることができます。

于 2010-01-13T20:19:48.957 に答える
1

多くの場合、重いタスクは、リポジトリの変更を監視する継続的インテグレーションサーバーによってより適切に処理されます。これにより、スクリプトによってリポジトリの速度が低下することはなく、これらのツールでは通常、ビルド、検証、および更新タスクのエラーレポートが改善されます。

欠点は、コミットの発生を拒否できないことです...これらのタスクはフックとして処理する必要がありますが、実際には、ほとんどの作業をコミット後の処理に遅らせることができます。

于 2010-03-20T18:49:36.827 に答える
0

あなたができる最善のことは、すべてに1つのリポジトリを使用するのをやめることです。

パフォーマンスの向上に加えて、これによりリポジトリをきめ細かく制御できるようになり、個別のアクセス制御、リポジトリ(プロジェクト)ごとの個別のフックなどを使用できるようになります。

于 2010-01-12T17:36:51.160 に答える