0

我一直在阅读人们使用 post-commit 钩子提出的其他一些类似问题。但是还没有找到一个与我的问题足够接近以提供答案的问题:(。我有一个可以签出的 SVN 存储库,当我提交时,我试图挂钩它,以便它自动更新 webroot文件夹。

目前我的提交后脚本如下所示:

#!/bin/sh

#REPOS="$1"
#REV="$2"

cd /var/www/thecruisein.com_dev/ && /usr/bin/svn update --username anon --password anon

具有以下权限:

-rwxr--r--. 1 apache apache 122 Jan 28 10:00 post-commit

但是,当我尝试通过 NetBeans 提交对文件的更改时,出现以下错误:

org.apache.subversion.javahl.ClientException: E175002: Commit failed (details follow):
E175002: Processing MERGE request response failed: Element type "http:" must be followed by either attribute specifications, ">" or "/>". (/subversion/thecruisein_dev) 
E175002: MERGE request failed on '/subversion/thecruisein_dev'

我暂时禁用了 SELinux(行为没有改变 :( )并且 /usr/bin/svn 文件的权限是:

-rwxr-xr-x. 1 apache apache 181500 Apr 11  2013 /usr/bin/svn

当我完全删除提交后脚本时,事情会按预期运行(当然,webroot 没有得到更新)。因此,启用此提交后脚本似乎是颠覆的问题。

任何帮助将不胜感激,因为我不确定下一步该去哪里:(

4

1 回答 1

0

原来我需要在 post-commit 钩子中执行一个已编译的程序。

我编译的程序是“自动更新”,它有:

#include <stddef.h>
#include <stdlib.h>
#include <unistd.h>

int main(void) {
  execl("/usr/bin/svn", "svn", "update", "/var/www/thecruisein.com_dev/", "--username", "anon", "--password", "anon",
    (const char *) NULL);
  return(EXIT_FAILURE);
}

我的提交后脚本如下所示:

#!/bin/sh

REPOS="$1"
REV="$2"

/var/svn/thecruisein_dev-autoupdate &>/dev/null

(&>/dev/null ---这会重定向任何输出以防止干扰)

编译出来的C程序的文件权限是这样的:

-rwsr-sr-x   1 apache apache 4813 Jan 28 11:40 thecruisein_dev-autoupdate

这解决了问题并允许提交并自动显示在预期的 webroot 文件夹中。

于 2014-01-28T17:13:47.030 回答