SVN预提交钩子拒绝不一致制表符使用的Python文件
你可以用 -tt
这个选项启动 Python 解释器,这样如果你要检查的文件里有不一致的制表符使用,就会抛出一个 TabError
错误。
我想为 SVN 写一个预提交钩子,目的是拒绝那些会引发这个错误的文件。我可以把要提交的文件传给 python -tt
来检查,但我的问题是,这个文件不仅会被检查,还会被执行。有没有办法告诉 Python “只分析这个文件,不要运行它”?或者说,也许有其他更好的方法来实现我想要的效果。
2 个回答
2
在Python中,推荐的缩进方式是不要使用制表符(也就是Tab键),而是用四个空格来进行缩进。如果你是这样写代码的,那么你可以简单地检查一下代码里有没有Tab字符。这可以通过一些简单的正则表达式来完成,甚至用'grep'命令也可以,所以根本不需要运行解释器。
不过,使用'py_compile'的方法还有其他好处:它还会检查Python代码的语法,这样可以确保代码没有错误(虽然这会消耗一些SVN服务器的计算资源)。
6
你可以使用 py_compile
这个模块来实现这个功能:
$ python -tt -c "import py_compile; py_compile.compile('test.py', doraise=True)"
这里的 doraise=True
会让程序在出错时抛出一个异常,并且返回一个非零的退出代码,这样你就可以在你的预提交钩子中轻松测试这个情况。