Soap SDK を介して OnTime にデータをフィードする .net ポストコミット フックに取り組んでいます。私のフックは Windows では問題なく動作しますが、本番環境の RHEL4 サブバージョン サーバーでは、シェル スクリプトから呼び出されたときに機能しません。
#!/ビン/sh /usr/bin/mono $1/hooks/post-commit.exe "$@"
コマンドラインからパラメータを指定して実行すると、正常に動作します。シェル スクリプトを介して実行すると、次のエラーが発生します: (リビジョンのログ データを取得するために使用する SVN のプロセス実行に問題があるようです):
未処理の例外: System.InvalidOperationException: 要求された情報を取得する前にプロセスを終了する必要があります。 /tmp/monobuild/build/BUILD/mono-1.9.1/mcs/class/System/System.Diagnostics/Process.cs:149 の System.Diagnostics.Process.get_ExitCode () [0x0003f] で at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_ExitCode () SVNLib.SVN.Execute (System.String sCMD、System.String sParams、System.String sComment、System.String sUserPwd、SVNLib.SVNCallback コールバック) [0x00000] で SVNLib.SVN.Log (System.String sUrl、Int32 nRevLow、Int32 nRevHigh、SVNLib.SVNCallback コールバック) [0x00000] で SVNLib.SVN.LogAsString (System.String sUrl、Int32 nRevLow、Int32 nRevHigh) で [0x00000] SVNCommit2OnTime.Program.Main (System.String[] args) [0x00000] で
と を使用して、 という名前のスタンドアロンを作成しようとしましmkbundle
たが、別のエラー メッセージが表示されます。mkbundle2
post-commit
未処理の例外: System.ArgumentNullException: 引数を null にすることはできません。 パラメーター名: 値を null にすることはできません。 System.Guid.CheckNull (System.Object o) で [0x00000] System.Guid..ctor で (System.String g) [0x00000] SVNCommit2OnTime.Program.Main (System.String[] args) [0x00000] で
シェル スクリプトで失敗する理由や、バンドルされているバージョンの何が問題なのか、何か考えはありますか?
編集: @Herms、私はすでにエコーで試しましたが、正しく見えます。については$1/hooks/post-commit.exe
、スクリプトを .net アセンブリへのフル パスの有無にかかわらず試してみましたが、結果は同じでした。
編集: @Leon$1 $2
、両方を試してみまし"$@"
たが、同じ結果が得られました。これは Subversion ポスト コミット フックであり、2 つのパラメーターを使用するため、これらを .net アセンブリに渡す必要があります。これ"$@"
は、シェル スクリプトから .net アセンブリを呼び出すために mono サイトで推奨されていたものでした。シェル スクリプトは、正しいパラメーターを使用して .net アセンブリを実行していますが、コマンド ラインから直接実行した場合にはスローされない例外をスローしています。
編集: @VinkoBASH_LINENO
、次のようなもの以外に環境に違いは見られませんBASH_SOURCE
編集: @Luke、疲れましたが、それでも違いはありません。自分のマシンで TortoiseSVN からテストしたとき (Subversion デーモンのサブプロセスとして実行されたとき) に最初に問題に気付きましたが、フック ディレクトリからスクリプトを実行したときにも同じ結果が得られることがわかりました (つまり./post-commit REPOS REV
、post-commit
上記のshスクリプト.mono post-commit.exe REPOS REV
正常に動作します. 主な問題は、実行するには、post-commit
呼び出されるように名前の何かが必要であることです. しかし、シェルスクリプトからは機能しませんmkbundle
.別の問題で。