2014-09-18:解决Subversion edge 的hook中文乱码问题

近期检查SVN时发现备份好的文件体积异常庞大。才跑2个月备份出来的大小就有4G多。仔细查询发现很多很多IDE自动生成的二进制文件。。。我类个去。好吧,开发不自觉就只有强制限制了。

google的时候发现这篇文章:http://blog.csdn.net/clever101/article/details/8560833

自己动手丰衣足食。脚本如下:

#!/bin/bash
export LANG="zh_CN.UTF-8" #确保中文日志显示正常,便于统计日志
REPOS="$1"
TXN="$2"
#限制日志长度
LENGTH= SVNLOOK="/usr/local/csvn/bin/svnlook"
BLACKLIST="target build classes bin/target .* *.iml *.ipr *.iws *.class " function error_exit(){
echo -e "1.Not allowed empty log " >&
echo -e "2.Logs must be greater than ${LENGTH} characters or chinese" >&
exit
} function blacklist_exit(){
if [ ! -z "${INBLACKLIST}" ] ;then
echo -e "some files in the blacklist , please cheack again !" >&
echo -e "blacklist:\n ${BLACKLIST}" >&
exit
fi
} # 获取字符数量(包括换行符)
TEMP_LENGTH=`${SVNLOOK} log -t "${TXN}" "${REPOS}"|sed 's/\s*$//g'|sed 's/^\s*//g'| wc --chars`
# 统计换行符
TEMP_LINE=`${SVNLOOK} log -t "${TXN}" "${REPOS}"| wc --lines`
# 真实字符数量
LOGMSG_LENGTH=`expr ${TEMP_LENGTH} - ${TEMP_LINE}`
# 文件黑名单过滤
# 过滤文件夹
INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/target/"`" #文件夹前后必须有/,否则匹配会有误伤
blacklist_exit
INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/build/"`"
blacklist_exit
INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/classes/"`"
blacklist_exit
INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/bin/target/"`"
blacklist_exit
# 过滤所有已点开头的文件和文件夹
INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "/\."`"
blacklist_exit
# 过滤文件尾缀
INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "\.iml$"`"
blacklist_exit
INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "\.ipr$"`"
blacklist_exit
INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "\.iws$"`"
blacklist_exit
INBLACKLIST="`${SVNLOOK} changed -t "${TXN}" "${REPOS}" | grep "\.class$"`"
blacklist_exit # 判断日志长度是否满足要求
if [ "${LOGMSG_LENGTH}" -lt ${LENGTH} ];then
error_exit
fi exit

PS:Subversion edge需要在高级管理中开启hooks编码为UTF-8,否则。会导致客户端无法解析返回的日志直接报错。默认为ASCII。

UTF-8 Encoding      Assume UTF-8 encoded messages from hooks; default is ASCII.

工作随笔——pre-commit钩子限制日志长度和提交的文件类型的更多相关文章

  1. Apache 日志设置不记录指定文件类型的方法和日志轮

    Apache日志精准的记录了Web访问的记录,但对于访问量很大的站来说,日志文件过大对于分析和保存很不方便.可以在http.conf(或虚拟主机设置文件httpd-vhosts.conf)中进行设置, ...

  2. [转] 利用git钩子,使用python语言获取提交的文件列表

    项目有个需求,需要获取push到远程版本库的文件列表,并对文件进行特定分析.很自然的想到,要利用git钩子来触发一个脚本,实现获取文件列表的功能.比较着急使用该功能,就用python配合一些git命令 ...

  3. 使用SVN钩子强制提交日志和限制提交文件类型

    Subversion本身有很好的扩展性,用户可以通过钩子实现一些自定义的功能.所谓钩子实际上是一种事件机制,当系统执行到某个特殊事件时,会触发我们预定义的动作,这样的特殊事件在Subversion里有 ...

  4. git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题

    在同步本地文件到线上仓库的时候 报错 pre -commit hook failed (add --no-verify to bypass) 当你在终端输入git commit -m "xx ...

  5. 记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用

    记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用 目录 大文件无法push到远程仓库 问题 commit的大文件无法push到远程库解决办法 git filter ...

  6. 营销MM让我讲MySQL日志顺序读写及数据文件随机读写原理

    摘要:你知道吗,MySQL在实际工作时候的两种数据读写机制? 本文分享自华为云社区<MySQL日志顺序读写及数据文件随机读写原理>,作者:JavaEdge . MySQL在实际工作时候的两 ...

  7. ruby脚本打印日志到rspec的报告文件中

    在通过ruby+webdriver+rspec做自动化测试的时候,为了便于观察用例执行情况,我基本上都会用 rspec XX.rb --format doc -o result.log 如果遇到失败的 ...

  8. log4j学习(二)不同类的日志输出到不同的文件

    目的:一个应用中有两个不同作用的后台服务,我们需要把他们的日志分开,存放到2个不同的日志文件中. 办法:需要在log4j.properties文件中配置两个不同的logger和对应的appender ...

  9. Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件

    Shell 命令行 从日志文件中根据将符合内容的日志输出到另一个文件 前面我写了一篇博文Shell 从日志文件中选择时间段内的日志输出到另一个文件,利用循环实现了我想要实现的内容. 但是用这个脚本的同 ...

随机推荐

  1. Tableau——BI software

    Tableau 8权威指南 (权威的数据可视化实战手册,中国传媒大学教授沈浩.北京大学研究员袁晓如 联袂推荐) 触手可及的大数据分析工具——Tableau案例集 写给专业数据分析师的丛书,无门槛的大数 ...

  2. 分组函数 ----group by 使用总结

    总结:1,在where子句中不能用分组聚合函数.       2,如果没有group by 子句,select 不能同时出现字段与分组的聚合函数.       3,在有 group by 的子句的查询 ...

  3. jqGrid 学习笔记--数据异步加载方法(转)

    var commonQuery = '../importantInfoReport/pageQueryImportantInfoReport.action?type=0'; jQuery(" ...

  4. Linux运行等级,根目录,文件类型etc

    Linux的Runlevel Linux默认有6个Terminal(Ctrl+Alt+F1~F6)和1个X window(Ctrl+Alt+F7,图形化界面)让用户登录 Linux的runlevel一 ...

  5. dpdk在虚拟机上出错处理

    目录 1. 所用系统与软件版本 2. 虚拟机配置 3. Ubuntu 12.04上的配置 3.1 准备 3.2 通过setup脚本进行配置 3.3 通过命令配置 4. CentOS 7.0上的配置 4 ...

  6. JAVA构造函数(方法)与方法是啥意思

    成员方法必须有返回类型即使是没有返回,也要写上void 构造函数(方法)没有返回类型,而且和类名一样!一个类里面,一看就知道了譬如:public class Test{public Test(){} ...

  7. 关于Leetcode上二叉树的算法总结

    二叉树,结构很简单,只是比单链表复杂了那么一丢丢而已.我们先来看看它们结点上的差异: /* 单链表的结构 */ struct SingleList{ int element; struct Singl ...

  8. AI(Adobe Illustrator)简单入门——骷髅

    成果: 步骤如下: 一.椭圆工具画正圆 按住shift+alt画一个正圆. 二.圆角矩形工具画矩形 用圆角矩形工具画一个矩形,然后全选水平垂直对齐. 三.画眼睛 利用椭圆工具画一只眼睛,然后按住alt ...

  9. Pairs Forming LCM(素因子分解)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=109329#problem/B    全题在文末. 题意:在a,b中(a,b<=n) ...

  10. Qt5 发布的exe应用程序Windows下无法执行的问题解决方案

    本解决方案着重解决报错为: This application has requested the Runtime to terminate it in an unusual way. 的错误. 即: ...