添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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配置错啦,实际上是你忽略了一些小细节。正文:第一步:如果,点击右上角提交按钮第二步:如果出现以下界面不要慌,实际上是你没有展开第三步:你可以把鼠标悬停在附近,当鼠标变成下拉的形状时,就可以展开这个界面,你...