SVN预提交钩子,用于限制提交文件扩展名

SVN预提交钩子,用于限制提交文件扩展名,svn,pre-commit-hook,collabnet,Svn,Pre Commit Hook,Collabnet,在Collabnet SVN的预提交脚本中使用以下代码来限制要提交的特定文件扩展名,但它正在提交所有文件。你能告诉我哪里出了问题吗 #!/bin/sh REPOS="$1" TXN="$2" SVNLOOK=/home/csvn/csvn/bin/svnlook LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c` if [ "$LOGMSG" -lt 10 ]; then echo -e "\n=

在Collabnet SVN的预提交脚本中使用以下代码来限制要提交的特定文件扩展名,但它正在提交所有文件。你能告诉我哪里出了问题吗

#!/bin/sh

REPOS="$1"
TXN="$2"

SVNLOOK=/home/csvn/csvn/bin/svnlook

LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | grep "[a-zA-Z0-9]" | wc -c`

if [ "$LOGMSG" -lt 10 ];
then
  echo -e "\n===========================================================" 1>&2
  echo -e "|| COMMENTS ARE MADE MANDATORY.PLEASE ENTER RELEVANT COMMENT & COMMIT AGAIN Sanjeev sas||" 1>&2
  echo -e "===========================================================" 1>&2
  exit 1
fi

$SVNLOOK changed -t $TXN $REPOS | awk '
BEGIN {
FILTER=".(sh|xls|xlsx|pdf|jpg|JPG|gif|GIF|png|PNG|doc|DOC|docx|DOCX|mpg|swf|avi|mp3|mp4|zip|rar|gz|csv|o|obj|tar|gz|JPEG|jpeg|WMV|wmv|DAT|dat|3GP|3gp|MPEG|mpeg|VOD|vod|ear|jar|war|exe|ppt|PPT|PPTX|pptx|7z|iso|ISO|EAR|WAR|JAR|msg|MSG|rtf|RTF|xlsm|XLSM|vsd|VSD|dot|DOT|camrec|ECF|ecf|mff|MFF|class|CLASS)$"
}
{
 for (i = 1; i < 2; i++) $i = ""; sub(/^ */, "");
 if(match(tolower($1),FILTER))
 { 
     print "File" $1 "is not allowed file type to commit" 
     exit 1
 }
}'    

exit 0
#/垃圾箱/垃圾箱
REPOS=“$1”
TXN=“$2”
SVNLOOK=/home/csvn/csvn/bin/SVNLOOK
LOGMSG=`$SVNLOOK log-t“$TXN”“$REPOS”| grep“[a-zA-Z0-9]”wc-c`
如果[“$LOGMSG”-lt 10];
然后
echo-e“\n================================================================================================”1>&2
echo-e“| |注释为必填项。请输入相关注释并再次提交Sanjeev sas | |”1>&2
echo-e“======================================================================================================“1>&2
出口1
fi
$SVNLOOK变更-t$TXN$REPOS | awk'
开始{
该国政府(12月24日)吉吉方方(12月24日)吉方(12月24日)吉方(12月24日)吉方(12月24日)吉方(12月24日)吉方(12月24日)吉方(png)PN方(12月24日)吉方(12月24日)吉方(12月24日)吉方(12月24日)吉方)吉方(PN日)PN方(png)png(12日日)png(12日)PNG1244日)png(12日日)png(12日日)png(png\1244号,官方官方官方官方官方(12日日日日)文件文件文件文件(12日日日日)的官方官方官方(12日日日日,文件文件文件文件文件,文件(12日日日日日日)文件文件文件,DO方方方(12号号号号号号号号,文件文件文件文件,文件(12日日)的3个GP(1244)gp-3个gp(1244)gp政政政政政政政政政政政政院院院院政政政政政政政协(1244)P政政政政政政政协(1244)P政政协(1244)公公公会政协(1244)P政协(1244)P政协,mpg(1244)政政协,mpg,MPEG(1244)政政政政协,mpg,mpg,mpg,mpg,mpg(1244)政政政政政政政政协,政政协,政协(1244)政政政协,政政政政协,政政政协,政协,政政协,政政协,政政协,政政协,政政协,政政协,政政协,政政协,政政协,政政协,政政协,政政协,政政协,政协,政政政协,政协,政协,政协,F |级|级|级)$”
}
{
对于(i=1;i<2;i++)$i=“”;sub(/^*/,”);
如果(匹配(tolower($1),过滤器))
{ 
打印“文件“$1”不允许提交文件类型”
出口1
}
}'    
出口0

下面的脚本适合我!!
一定要让我知道你的想法

#!/bin/bash

REPOS=$1
TXN=$2
AWK=/bin/awk
SVNLOOK="/usr/bin/svnlook";

#Put all the restricted formats in variable FILTER
FILTER=".(sh|xls|xlsx|exe|xlsm|XLSM|vsd|VSD|bak|BAK|class|CLASS)$"

# Figure out what directories have changed using svnlook.
FILES=`${SVNLOOK} changed ${REPOS} -t ${TXN} | ${AWK} '{ print $2 }'` > /dev/null

for FILE in $FILES; do

#Get the base Filename to extract its extension
NAME=`basename "$FILE"`

#Get the extension of the current file
EXTENSION=`echo "$NAME" | cut -d'.' -f2-`

#Checks if it contains the restricted format
if [[ "$FILTER" == *"$EXTENSION"* ]]; then
    echo "Your commit has been blocked because you are trying to commit a restricted file." 1>&2
    echo "Please contact SVN Admin. -- Thank you" 1>&2
    exit 1

fi

done
exit 0

我的问题与@San相同,但是@Jijo的回答对我的案例没有直接帮助,因为脚本不适合我,因为我在
AIX
上运行SVN服务器,我已经对脚本进行了增强,如下所示,可以适合我的案例。无论如何,谢谢@Jijo分享剧本

#Put all the restricted formats in variable FILTER
FILTER=".(xls|xlsx|exe|pptx|PPTX|vsd|VSD|bak|BAK|class|CLASS|zip|ZIP|doc|DOC|docx|DOCX)$"

# Figure out what directories have changed using svnlook.
FILES=$(${SVNLOOK} changed -t ${TXN} ${REPOS} | ${AWK} '{ print $NF }') > /dev/null

for FILE in $FILES 
do
  EXTENSION=`echo "$FILE" | cut -d'.' -f2-`

  if [[ "$FILTER" == *"$EXTENSION"* ]]; then
    echo "Your commit has been blocked because you are trying to commit a restricted file." 1>&2
    echo "Please contact SVN Admin. -- Thank you" 1>&2
    exit 1
  fi
done

Windows pre-commit.bat的解决方案

@ECHO OFF

set REPOS=%1
set TXN=%2
set SVNLOOK="path\to\svnlook.exe"

set FORMATS=*.ext1, *.ext2, *.ext3
:CHECK1
%SVNLOOK% changed -t %TXN% %REPOS% | findstr /R /I ".ext1$" 
if %ERRORLEVEL% EQU 1 goto CHECK2
echo Your commit has been blocked because you are trying to commit a restricted file. Restricted formats %FORMATS% >&2
exit /b 1

:CHECK2
%SVNLOOK% changed -t %TXN% %REPOS% | findstr /R /I ".ext2$" 
if %ERRORLEVEL% EQU 1 goto CHECK3
echo Your commit has been blocked because you are trying to commit a restricted file. Restricted formats %FORMATS% >&2
exit /b 1

:CHECK3
%SVNLOOK% changed -t %TXN% %REPOS% | findstr /R /I ".ext3$" 
if %ERRORLEVEL% EQU 1 goto OK
echo Your commit has been blocked because you are trying to commit a restricted file. Restricted formats %FORMATS% >&2
exit /b 1

:OK
exit /b 0