Я работаю над ловушкой .net post-commit для подачи данных в OnTime через их Soap SDK. Мой хук хорошо работает в Windows, но на нашем производственном сервере подрывной работы RHEL4 он не будет работать при вызове из сценария оболочки.
#!/bin/sh
/usr/bin/mono $1/hooks/post-commit.exe "$@"
Когда я выполняю его с параметрами из командной строки, он работает правильно. При выполнении через сценарий оболочки я получаю следующую ошибку: (похоже, что есть проблема с выполнением процесса SVN, который я использую для получения данных журнала для ревизии):
Unhandled Exception: System.InvalidOperationException: The process must exit before getting the requested information.
at System.Diagnostics.Process.get_ExitCode () [0x0003f] in /tmp/monobuild/build/BUILD/mono-1.9.1/mcs/class/System/System.Diagnostics/Process.cs:149
at (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_ExitCode ()
at SVNLib.SVN.Execute (System.String sCMD, System.String sParams, System.String sComment, System.String sUserPwd, SVNLib.SVNCallback callback) [0x00000]
at SVNLib.SVN.Log (System.String sUrl, Int32 nRevLow, Int32 nRevHigh, SVNLib.SVNCallback callback) [0x00000]
at SVNLib.SVN.LogAsString (System.String sUrl, Int32 nRevLow, Int32 nRevHigh) [0x00000]
at SVNCommit2OnTime.Program.Main (System.String[] args) [0x00000]
Я пытался использовать mkbundle
и mkbundle2
, чтобы создать отдельное приложение с именем post-commit
, но я получаю другое сообщение об ошибке:
Unhandled Exception: System.ArgumentNullException: Argument cannot be null.
Parameter name: Value cannot be null.
at System.Guid.CheckNull (System.Object o) [0x00000]
at System.Guid..ctor (System.String g) [0x00000]
at SVNCommit2OnTime.Program.Main (System.String[] args) [0x00000]
Есть идеи, почему он может не работать из скрипта оболочки или что может быть не так в комплектной версии?
Редактировать: @ Herms , я уже пробовал это с эхом, и это выглядит правильно. Что касается $1/hooks/post-commit.exe
, я пробовал скрипт с полным путем и без полного пути к сборке .net с теми же результатами.
Редактировать: @ Леон , я пробовал оба $1 $2
и "$@"
с одинаковыми результатами. Это ловушка пост-фиксации subversion, и она принимает два параметра, поэтому они должны быть переданы в сборку .net. "$@"
было то, что было рекомендовано на моно-сайте для вызова сборки .net из сценария оболочки. Сценарий оболочки - это , выполняющий сборку .net с правильными параметрами, но он вызывает исключение, которое не выдается при запуске непосредственно из командной строки.
Редактировать: @ Винко , я не вижу никаких отличий в окружающей среде, кроме таких вещей, как BASH_LINENO
и BASH_SOURCE
Редактировать: @ Люк , я устал, но это тоже не имеет значения. Я впервые заметил проблему при тестировании с TortoiseSVN на моем компьютере (когда он работает как подпроцесс демона subversion), но также обнаружил, что я получаю те же результаты при выполнении скрипта из каталога hooks (то есть ./post-commit REPOS REV
, где post-commit
- приведенный выше скрипт sh. Выполнение mono post-commit.exe REPOS REV
работает нормально. Основная проблема заключается в том, что для выполнения мне нужно иметь что-то с именем post-commit
, чтобы оно вызывалось. Но оно не работает из сценарий оболочки, и, как отмечено выше, mkbundle
не работает с другой проблемой.