import sys,urllib
default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
reload(sys)
sys.setdefaultencoding(default_encoding)
s = '项目迁移到'
print sys.stdin.encoding
print urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
print urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))
print urllib.quote(s.decode(sys.stdin.encoding).encode('gb2312'))
print urllib.quote(s.decode('utf-8').encode('utf8'))
str = '项目迁移到'
str = str.encode('utf8')
d = {'name':str}
q = urllib.urlencode(d)
print q
unicode_str = unicode('中文', encoding='utf-8')
print unicode_str.encode('utf-8')
参考
https://blog.phpgao.com/svn_pre_commit.html
检查提交日志是否为空
检查提交日志最少需要N个字符
检查提交文件是否是UTF-8格式
检查新文件的换行模式是否为LF
检查提交的文件是否含有TABs换行符
#!/bin/bash
REPOS="$1"
TXN="$2"
# Make sure that the log message contains some text.
SVNLOOK=/usr/bin/svnlook
ICONV=/usr/bin/iconv
SVNLOOKOK=1
LOGMSG=`$SVNLOOK log -t "$TXN" "$REPOS" | wc -c`
if [ "$LOGMSG" -lt 2 ];
echo -e "\t That logmessage contains at least 2 alphanumeric characters. Commit aborted!" 1>&2
exit 1
# Make sure that all files to be committed are encoded in UTF-8.
while read changeline;
# Get just the file (not the add / update / etc. status).
file=${changeline:4}
# Only check source files.
if [[ $file == *.java || $file == *.xhtml || $file == *.css || $file == *.xml || $file == *.js ]] ; then
$SVNLOOK cat -t "$TXN" "$REPOS" "$file" | $ICONV -f UTF-8 -t UTF-8 -o /dev/null
if [ "${PIPESTATUS[1]}" != 0 ] ; then
echo "Only UTF-8 files can be committed ("$file")" 1>&2
exit 1
done < <($SVNLOOK changed -t "$TXN" "$REPOS")
# Check files for svn:eol-style property
# Exit on all errors.
set -e
EOL_STYLE="LF"
echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
if [[ $REPOS_PATH =~ A[[:blank:]]{3}(.*)\.(java|css|properties|xhtml|xml|js) ]]
if [ ${#BASH_REMATCH[*]} -ge 2 ]
FILENAME=${BASH_REMATCH[1]}.${BASH_REMATCH[2]};
# Make sure every file has the right svn:eol-style property set
if [ $EOL_STYLE != "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:eol-style \"$FILENAME\" 2> /dev/null`" ]
ERROR=1;
echo "svn ps svn:eol-style $EOL_STYLE \"$FILENAME\"" >&2
test -z $ERROR || (echo "Please execute above commands to correct svn property settings. EOL Style LF must be used!" >& 2; exit 1)
# Block commits with tabs
# This is coded in python
# Exit on all errors
set -e
$SVNLOOK diff -t "$TXN" "$REPOS" | python /dev/fd/3 3<<'EOF'
import sys
ignore = True
SUFFIXES = [ ".java", ".css", ".xhtml", ".js", ".xml", ".properties" ]
filename = None
for ln in sys.stdin:
if ignore and ln.startswith("+++ "):
filename = ln[4:ln.find("\t")].strip()
ignore = not reduce(lambda x, y: x or y, map(lambda x: filename.endswith(x), SUFFIXES))
elif not ignore:
if ln.startswith("+"):
if ln.count("\t") > 0:
sys.stderr.write("\n*** Transaction blocked, %s contains tab character:\n\n%s" % (filename, ln))
sys.exit(1)
if not (ln.startswith("@") or \
ln.startswith("-") or \
ln.startswith("+") or \
ln.startswith(" ")):
ignore = True
sys.exit(0)
# All checks passed, so allow the commit.
exit 0
使用Python写服务器端的SVN Hook
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
import re
def main(argv):
# 从参数中取出来代码库和事务信息
(repos, txn) = argv
# svnlook log拿到的是用户提交时填写的log信息,然后随便你想做什么
message = "".join(os.popen("svnlook log '%s' -t '%s'" % (repos, txn)).readlines()).strip()
# svnlook changed拿到的是用户提交的文件,这个列表中有文件的状态(A,U,D之类的)和文件名
changelist = os.popen("svnlook changed '%s' -t '%s'" % (repos, txn)).readlines()
# svnlook cat能读出用户提交文件的内容
fileContent = "".join(os.popen("svnlook cat -t %s %s %s" % (txn, repos, filename)).readlines()).strip()
if msg == '':
sys.exit(0)
else:
# 输出返回信息
sys.stderr.write(msg)
sys.exit(1)
if __name__ == "__main__":
# sys.stderr.write(os.getcwd())
# 发现默认的工作目录竟然是跟目录“/”,这里要换一下当前工作目录
os.chdir(sys.path[0])
# sys.stderr.write(os.getcwd())
main(sys.argv[1:])
我自己做的,我只是提供给接口判断
cat pre-commit
#!/bin/bash
REPOS="$1"
TXN="$2"
RES="OK"
SVNLOOK='/svn/csvn/bin/svnlook'
USER=`$SVNLOOK author -t $TXN $REPOS`
LOG=`$SVNLOOK log -t "$TXN" "$REPOS"`
var=`python /svn/csvn/data/repositories/xx/hooks/check.py "${LOG}" "${REPOS}" "${USER}" "${REPOS}"`
if [ "$var" == "success" ];then
exit 0
echo "$result" 1>&2
exit 1
fi
shell
curl -v -L -G --data-urlencode 'wd=手机' "http://www.baidu.com/s"
curl -s -d
cat check.py
# !/usr/bin/env python
# coding:utf-8
import urllib
import urllib2
import sys
message = sys.argv[1]
repos = sys.argv[2]
user=sys.argv[3]
project=sys.argv[4]
def postHttp(message=None,repos=None,user=None,project=None):
url="
#上面是java接口,去判断和过滤提交的信息
postdata=dict(message=message,repos=repos,user=user,project=project)
postdata=urllib.urlencode(postdata)
request = urllib2.Request(url,postdata)
response=urllib2.urlopen(request)
print response.read()
#postHttp('a b','/svn/csvn/data/repositories/xx','test','/svn/csvn/data/repositories/xx')
#'a b' 中间空格,意味着提交可以有空格字符
postHttp(message,repos,user,project)
另外说下post几个参数
#REPOS="$1"
#REV="$2"
#AUTHOR=$(svnlook author -r $REV $REPOS)
#MESSAGE=$(svnlook log $REPOS -r $REV)
#MESSAGE=$(svnlook propget --revprop -r $REV $REPOS svn:log)
具体实例
cat pre-commit.sh
cd /svn/csvn/data/repositories/
for i in `ls -l|grep ^d|awk '{print $NF}'`
yes|cp -r /home/back/pre-commit ./$i/hooks/
yes|cp -r /home/back/check.py ./$i/hooks/
sed -i 's/sadoc/$i/g' ./$i/hooks/check.py
cd /svn/csvn/data/repositories/sadoc/hooks
rm -rf pre-commit
cat pre-commit
#!/bin/bash
REPOS="$1"
TXN="$2"
RES="OK"
SVNLOOK='/svn/csvn/bin/svnlook'
USER=`$SVNLOOK author -t $TXN $REPOS`
LOG=`$SVNLOOK log -t "$TXN" "$REPOS"`
var=`python /svn/csvn/data/repositories/sadoc/hooks/check.py "${LOG}" "${REPOS}" "${USER}" "${REPOS}"`
if [ "$var" == "success" ];then
exit 0
echo "$var" 1>&2
exit 1
cat check.py
# !/usr/bin/env python
# coding:utf-8
import urllib
import urllib2
import sys
message = sys.argv[1]
repos = sys.argv[2]
user=sys.argv[3]
project=sys.argv[4]
def postHttp(message=None,repos=None,user=None,project=None):
url="http://xx/hooks/svn/pre-commit/verify"
postdata=dict(message=message,repos=repos,user=user,project=project)
postdata=urllib.urlencode(postdata)
request = urllib2.Request(url,postdata)
response=urllib2.urlopen(request)
print response.read()
#postHttp('xx-1 将git上项目迁移到svn上','/svn/csvn/data/repositories/ued-resource','xx','/svn/csvn/data/repositories/ued-resource')
postHttp(message,repos,user,project)
svn: E165001: Commit failed (details follow): svn: E165001: Commit blocked by pre-commit h
2020/3/308:51 Spring Configuration Check Unmapped Spring configuration files found. Please configure Spring facet or us
svn: E165001: Commit failed (details follow): svn: E165001: Commit blocked by pre-commit hook (ex
今天在项目SVN提交的时候出现了这样一个问题:出现这种情况一般是交的注释后可以提交成功了。...
Idea集成svn后提交代码提交不成功,报错为:svn: E165001: Commit blocked by pre-commit hook (exit code 1) with output。
前言:这篇文章主要解决,如果你熟悉idea的界面,很可能会遇到这个情况,在提交代码时,发现没有写提交记录和选择提交文件的地方,你也许会怀疑自己的idea是不是集成svn配置错啦,实际上是你忽略了一些小细节。正文:第一步:如果,点击右上角提交按钮第二步:如果出现以下界面不要慌,实际上是你没有展开第三步:你可以把鼠标悬停在附近,当鼠标变成下拉的形状时,就可以展开这个界面,你...