4

hudson ビルド URL を要求してビルドをトリガーするポストコミット スクリプトを Subversion リポジトリにセットアップしました。

これは期待どおりに機能しますが、コミットがトランクに対して行われた場合にのみ、このビルドをトリガーしたいと考えています。

コミット後のスクリプトは次のようになります。

SET REPOS=%1
SET REV=%2

SET DIR=%REPOS%/hooks
SET PATH=%PATH%;%DIR%
wget http://circus-09:8080/job/UE/build?delay=0sec

コミットがトランクに対するものであることを確認するにはどうすればよいですか?

4

4 に答える 4

7

これは、トランク内の何かが変更された場合、または何も変更されていない場合に異なるメッセージを出力する簡単なコード スニペットです。

set repos=%~1
set rev=%~2

call :did_it_change "%repos%" "%rev%" "trunk"
if %ERRORLEVEL%==1 (
    echo trunk changed
) else (
    echo no changes in trunk
)
exit /B 0

:did_it_change
    set repos=%~1
    set rev=%~2
    set dir=%~3
    set found=0
    for /F "delims=/" %%p in ('svnlook dirs-changed "%repos%" -r %rev% 2^>NUL') do call :check "%%p" "%dir%"
    exit /B %found%

:check
    set check_string=%~1
    set must_match=%~2
    if "$%check_string%" == "$%must_match%" set found=1
    exit /B 0

:did_it_change 関数は、トランクだけでなく、任意のリポジトリ ルート レベルのサブディレクトリで使用できることに注意してください。新しいタグやブランチを検出するのに非常に便利です。また、この関数は何度でも呼び出すことができることに注意してください。

注: これは、ソース ファイルが変更されたかどうかを実際にチェックするのではなく、リビジョンの変更されたディレクトリ リストにトランクが記載されているかどうかをチェックするだけです。一部のディレクトリまたはファイルの svn 属性が変更された可能性があります。

于 2009-07-20T08:19:51.643 に答える
2

パウリウスの答えが言うように、svnlook はリビジョンの詳細を提供します。少し操作するだけで済みます。python pysvnライブラリを使用すると、これを実行する際の内部構造から保護され、より高度な統合への扉が開かれます。

開始するための例:

import sys;
import urllib;
import svnlook;

#duckpunch to get access to the relative path for the revision
def relativePath(self):
    return self.path

baseUrl = sys.argv[1]
repo = sys.argv[2]
revision = sys.argv[3]

l = svnlook.changed(repo, revision);
#TODO this assumes all enries in the commit are against one project, so the first item found is sufficient
#May want to iterate the entries and check for any different paths
out = l[0]

changePath = relativePath(out)

print changePath

#TODO if 'trunk' is found in changePath, trigger build
于 2009-07-20T09:11:27.530 に答える
2

私が知る限り、Subversion でこれを行う簡単な方法はありません。ポストコミット スクリプトは、トランクにあるかブランチにあるかに関係なく、リポジトリへのコミット後に実行されます。

もちろん、スクリプトで変更されたファイルの場所を特定することもできます (おそらくsvnlook changed正規表現を使用)。

于 2009-07-20T07:42:35.493 に答える
0

bash では、次の方法で実行できます。

REPOS="$1"
REV="$2"
TXN_NAME="$3"
SVN=/usr/bin/svn
SVNLOOK=/usr/bin/svnlook
export LANG=en_US.UTF-8

RES=$($SVNLOOK dirs-changed $REPOS -r $REV)
if [[ $RES == *"trunk"* ]]
then
   Call whichever command you want to call when there are changes in trunk
fi
于 2016-05-11T16:15:22.263 に答える