2015-08-03 7 views
1

Я знаю, что этот вопрос задают много раз здесь, но моя проблема в том, что я пробовал каждое решение, указанное здесь, и все еще имеет проблемы с выполнением крючка предварительной фиксации.svn pre-commit hook не выполняется.

Мой репозиторий SVN размещен в коробке Linux в этом пути/SVN/разработки/ Я изменил /svn/development/hooks/pre-commit.sh файл, как показано ниже

REPOS="$1" 
    TXN="$2" 
    SVNLOOK=/usr/bin/svnlook 
    SVNLOOKOK=1 

$SVNLOOK log -t "$TXN" "$REPOS" | \ 
grep "[a-zA-Z0-9]" > /dev/null || SVNLOOKOK=0 
if [ $SVNLOOKOK -eq 0 ]; then 
echo -e "Empty log messages are not allowed. Make sure you provide a valid JIRA number and a meaningful log message." 1>&2 || exit 1 
fi 
exit 0 

Пытался совершить локально из окна, где размещается мой svn-репозиторий, а также удаленно с помощью Tortoise svn. Я могу совершить с нулевым сообщением.

1) Modified /etc/selinux/config -> SELINUX=disabled to enforcing and restarted apache 
    2) Ran chcon -t httpd_exec_t pre-commit 
    3) Verified all the permissions. 

Может ли кто-нибудь сказать мне, что мне не хватает?

ответ

2

OK Я понял, в чем проблема, и я никогда не думал, что так будет. Мой скрипт был назван pre -comit.sh, но похоже, что он не должен иметь никакого расширения вообще. Я переименовал его в pre-commit, и он работал отлично. Варианты 1 и 2, которые я пробовал, также обязательны для работы сценария. Мой новый скрипт проверяет наличие нулевого сообщения и проверок в JIRA для действительного номера проблемы, за которым следует сообщение. Я дал сценарий ниже.

Ссылка: SVN hooks not working

чтения также Исполнительное Repository Крючки здесь http://svnbook.red-bean.com/en/1.8/svn.reposadmin.create.html#svn.reposadmin.create.hooks

#!/bin/bash 
REPOS="$1" 
TXN="$2" 

SVNLOOK=/usr/bin/svnlook 
CURL=/usr/bin/curl 
JIRAURL=http://host/rest/api/2/issue 
# Make sure that the log message is not null 
LOGMSG=$($SVNLOOK log -t "$TXN" "$REPOS") 
if [ `echo ${LOGMSG} | grep "[a-zA-Z0-9]" | wc -c` -lt 8 ] 
    then 
     echo "Provide a meaningful comment when committing changes" >&2 
     exit 1 
fi 
# check that log message starts with a JIRA issue number 
JIRAID=$(expr "${LOGMSG}" : '^\([A-Z]*-[0-9]*\)[: ].*') 
if [[ "$JIRAID" == "" ]] 
    then 
     echo "svn commit message should start with a valid JIRA id followed by a meaningful log message " >&2 
     exit 1 
fi 

# check if JIRA issue exists 
JIRAISSUE=$(${CURL} ${JIRAURL}/${JIRAID}) 
if [[ "${JIRAISSUE}" =~ "Issue Does Not Exist" ]] 
    then 
     echo "${JIRAID} is not a valid JIRA number." >&2 
     echo "svn commit message should start with a valid JIRA id followed by a meaningful log message" >&2 
     exit 1 
    fi 
0

Вы сравниваете свою переменную с номером некорректно. То, как вы это делаете, - это сравнение строк. См. https://superuser.com/q/688882/233630; есть несколько способов сделать это правильно, включая замену «=» на «-eq».

+0

Спасибо. Я попробую это. Но, отлаживая это, я прокомментировал весь скрипт и попытался просто коснуться файла в/tmp. Это в идеале должно быть создание файла в/tmp, когда я делаю svn commit right? Это не делает этого вообще. Поэтому я сомневаюсь, что этот сценарий запускается вообще. Теперь я изменил его, если [$ SVNLOOKOK -eq 0]; тогда – VRK