执行另一个脚本时Git预提交钩子错误

时间:2015-08-10 13:27:28

标签: git groovy hook smartgit pre-commit

我使用groovy脚本编写了git pre-commit hook。我使用的是Windows 7.因为文件位于

  

.git/hooks/pre-commit

不受版本控制,我已将这些预提交挂钩移动到项目子存储库。

  

${PROJECT_REPO}/git-hooks目录。

这是文件@ .git/hooks/pre-commit

中的脚本
#!/usr/bin/env groovy
public class PreCommitHooks
{
    public static boolean CheckBannedFilesToCommit() 
    {
        def process = "cmd /c groovy ../../git-hooks/pre-commit".execute();
        process.waitFor();
        if (process.exitValue())
        { 
            return false;
        }
        return true;
    }
}

// Create an instance of PreCommitHooks() class and execute list of hooks.
preCommitHook = new PreCommitHooks();
if (!preCommitHook.CheckBannedFilesToCommit())
{
    System.exit(1);
}
else
{
    System.exit(0);
}

文件@ git-hooks/pre-commit

中的脚本
#!/usr/bin/env groovy

This is pseudo code only 
process all the hook info.
.... 
if (!bSuccess)
    system.exit(1);
else
    system.exit(0);

我已正确安装了所有${GROOVY_HOME}${JAVA_HOME}路径,并使用Windows命令行进行了验证。使用Windows命令行调用时,我的脚本运行完美。

${PROJECT_REPO}/.git/hooks>groovy pre-commit

由于所有脚本都在工作,我继续使用smart-git测试我的预提交钩子

文件@ .git/hooks/pre-commit正确执行,可以正确找到${GROOVY_HOME}${JAVA_HOME}路径。但是在执行以下行

def process = "cmd /c groovy ../../git-hooks/pre-commit".execute();

失败并出现以下错误。

  

错误:JAVA_HOME设置为无效目录:   C:\ Program Files(x86)\ Java \ Jdk1.8.0_51   请在您的环境中设置JAVA_HOME变量以匹配其位置   你的Java安装。

有人可以帮我解决这个错误吗?

我正在寻找一个groovy脚本解决方案而不是bash脚本。

1 个答案:

答案 0 :(得分:0)

我最终使用了Windows符号链接。

cmd /c mklink /H ${link_file_full_path} ${Target_file_full_path}

从位于$WORK_TREE的另一个groovy脚本调用一个groovy脚本(位于$GIT_DIR})不起作用。

我认为必须与环境变量有关。 Smartgit将所有环境变量传递给第一个脚本,并在调用另一个脚本时丢失该信息。