我正在开发一个 .net 提交后挂钩,以通过他们的 Soap SDK 将数据输入 OnTime。我的钩子在 Windows 上工作得很好,但在我们的生产 RHEL4 颠覆服务器上,当从 shell 脚本调用时它不会工作。
#!/bin/sh /usr/bin/mono $1/hooks/post-commit.exe "$@"
当我从命令行使用参数执行它时,它可以正常工作。当通过 shell 脚本执行时,我收到以下错误:(看起来我用来获取修订日志数据的 SVN 的进程执行存在一些问题):
未处理的异常:System.InvalidOperationException:进程必须退出才能获取请求的信息。 在 System.Diagnostics.Process.get_ExitCode () [0x0003f] 在 /tmp/monobuild/build/BUILD/mono-1.9.1/mcs/class/System/System.Diagnostics/Process.cs:149 在 (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
andmkbundle2
制作一个可以命名的独立设备post-commit
,但我收到一条不同的错误消息:
未处理的异常:System.ArgumentNullException:参数不能为空。 参数名称:值不能为空。 在 System.Guid.CheckNull (System.Object o) [0x00000] 在 System.Guid..ctor (System.String g) [0x00000] 在 SVNCommit2OnTime.Program.Main (System.String[] args) [0x00000]
任何想法为什么它可能会从 shell 脚本失败或捆绑版本可能有什么问题?
编辑: @Herms,我已经用回声试过了,看起来不错。至于$1/hooks/post-commit.exe
.net 程序集,我已经尝试了带有和不带有 .net 程序集的完整路径的脚本,结果相同。
编辑: @Leon,我都试过了$1 $2
,"$@"
结果都一样。它是一个颠覆后提交挂钩,它需要两个参数,因此需要将这些参数传递给 .net 程序集。这"$@"
是 mono 站点推荐的从 shell 脚本调用 .net 程序集的方法。shell 脚本正在执行 .net 程序集并使用正确的参数,但它抛出了一个异常,该异常在直接从命令行运行时不会抛出。
编辑: @Vinko,除了BASH_LINENO
和BASH_SOURCE
编辑: @Luke,我累了,但这也没什么区别。我首先在我的机器上从 TortoiseSVN 测试时注意到了这个问题(当它作为 subversion 守护进程的子进程运行时),但也发现从 hooks 目录执行脚本时我得到了相同的结果(即./post-commit REPOS REV
,在post-commit
哪里上面的 sh 脚本。mono post-commit.exe REPOS REV
工作正常。主要问题是要执行,我需要有一些名称post-commit
以便调用它。但它不能从 shell 脚本工作,如上所述,mkbundle
它不起作用有不同的问题。