【转】使用svn pre-commit hook限制提交文件名为中文的文件
2012-07-16 18:43
1331 查看
我知道标题很令人犯晕, 但是这样说是合理的. 今天无聊着翻了一下svn book, 于是想看一下神奇的svnlook的源码是长怎么样子的. 翻看一看, 发现了新的大陆.
原来svnlook里面定义了一个叫changed的命令, 可以查看被修改的文件的路径
相关的函数如下:
subcommand_changed(apr_getopt_t *os, void *baton, apr_pool_t *pool)
{
struct svnlook_opt_state *opt_state = baton;
svnlook_ctxt_t *c;
SVN_ERR(get_ctxt_baton(&c, opt_state, pool));
SVN_ERR(do_changed(c, pool));
return SVN_NO_ERROR;
}
命令的说明如下:
{"changed", subcommand_changed, {0},
N_("usage: svnlook changed REPOS_PATH\n\n"
"Print the paths that were changed.\n"),
{'r', 't', svnlook__copy_info} },
看一下svn的帮助, 果然有这个命令, 以前我是忽略了, 呵呵.
Print the paths that were changed.
Valid options:
-r [--revision] arg : specify revision number ARG
-t [--transaction] arg : specify transaction name ARG
这个时候pre-commit的就好写好多了, 可以用任何语言都可以, 说明一下其中变量REPOS是项目仓库的路径, TXN则是这次提交的事务号名称. pre-commit返回非零表示失败, svnserve会根据返回值决定是否提交该事务.
#!/bin/bash
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
$SVNLOOK changed -t "$TXN" "$REPOS" | awk '{print $2}' | grep "[^a-zA-Z0-9._/]" > /dev/null
if [ $? -eq 0 ]; then
echo "Chinese filename are not allow!" >&2
exit 1;
fi
原来svnlook里面定义了一个叫changed的命令, 可以查看被修改的文件的路径
相关的函数如下:
subcommand_changed(apr_getopt_t *os, void *baton, apr_pool_t *pool)
{
struct svnlook_opt_state *opt_state = baton;
svnlook_ctxt_t *c;
SVN_ERR(get_ctxt_baton(&c, opt_state, pool));
SVN_ERR(do_changed(c, pool));
return SVN_NO_ERROR;
}
命令的说明如下:
{"changed", subcommand_changed, {0},
N_("usage: svnlook changed REPOS_PATH\n\n"
"Print the paths that were changed.\n"),
{'r', 't', svnlook__copy_info} },
看一下svn的帮助, 果然有这个命令, 以前我是忽略了, 呵呵.
#svnlook changed -h changed: usage: svnlook changed REPOS_PATH
Print the paths that were changed.
Valid options:
-r [--revision] arg : specify revision number ARG
-t [--transaction] arg : specify transaction name ARG
这个时候pre-commit的就好写好多了, 可以用任何语言都可以, 说明一下其中变量REPOS是项目仓库的路径, TXN则是这次提交的事务号名称. pre-commit返回非零表示失败, svnserve会根据返回值决定是否提交该事务.
#!/bin/bash
REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook
$SVNLOOK changed -t "$TXN" "$REPOS" | awk '{print $2}' | grep "[^a-zA-Z0-9._/]" > /dev/null
if [ $? -eq 0 ]; then
echo "Chinese filename are not allow!" >&2
exit 1;
fi
相关文章推荐
- 【转】使用svn pre-commit hook限制提交文件名为中文的文件
- 工作随笔——pre-commit钩子限制日志长度和提交的文件类型
- SVN提交报错"Commit blocked by pre-commit hook"的解决办法
- 使用SVN钩子强制提交日志和限制提交文件类型
- 使用SVN钩子强制提交日志和限制提交文件类型
- 使用kdesvn提交文件出现Aborting commit:'.lcd1602.ko.cmd' remains in conflict错误提示
- 使用kdesvn提交文件出现Aborting commit:'.lcd1602.ko.cmd' remains in conflict错误提示
- 使用SVN钩子强制提交日志和限制提交文件类型
- iOS开发中,使用svn进行commit提交时,出现文件冲突
- SVN使用笔记——commit是出现e155010:提交失败
- linux下,使用svn commit提交时,提示无法使用外部编辑器获得日志信息
- eclipse与myeclipse恢复已删除的文件和代码、svn使用还原,但本地的没有提交找回
- 中文乱码问题(使用Servlet3.0新特性实现文件上传——上传文件名中文乱码问题)
- svn强制要求提交注释--pre-commit钩子
- 如何使用 SVN 找到一段时间内提交的代码文件
- Eclipse恢复已删除的文件和代码、svn使用了还原,但本地的没有提交找回没提交代码的方法
- 解决HttpClient的FilePart上传文件中使用中文名称文件名乱码问题
- svn: Commit blocked by pre-commit hook (exit code 1) with output: Log format error 提交Log格式错误
- svn 要求commit提交必须加注释(日志) hook
- svn强制要求提交注释--pre-commit钩子