当使用某些不安全或过时的函数时,有没有办法阻止开发人员提交代码?例如:
答案 0 :(得分:8)
我工作过的项目在每个文件中包含的标题中使用了一组简单的宏(一些编译器允许您在命令行中指定这样的标题,因此您可以强制它在makefile中使用):
#define strcpy strcpy_is_banned_use_strlcpy
#define strcat strcat_is_banned_use_strlcat
#define strncpy strncpy_is_banned_use_strlcpy
#define strncat strncat_is_banned_use_strlcat
#define sprintf sprintf_is_banned_use_snprintf
使用这些宏,如果您尝试使用禁用的函数,构建将失败(链接器会告诉您应该使用的是什么)。
因此,它本身不会在提交时进行检查,但只要您的团队成员确保在签入之前构建了一些内容,系统就可以正常工作。如果他们不这样做,那么每个人都会开始获得构建中断电子邮件,这可以快速纠正行为。
简单但有效。
答案 1 :(得分:6)
您可以使用Subversion预提交挂钩。示例:http://wordaligned.org/articles/a-subversion-pre-commit-hook
编写一些正则表达式来扫描你不想要的函数的提交应该不会太难
答案 2 :(得分:4)
你可以在post-commit钩子中使用“svnlook changed”然后“svnlook cat”获取部分路径,并使用grep来检查你感兴趣的函数。
这会给你一些误报,例如,如果在字符串或注释中提到函数。根据您的具体情况(即您有多少用户,以及他们有多挑剔;-),这对您来说可能是也可能不是问题。更完整的解决方案必须解析程序文本以找到被调用的函数。
作为替代方案,假设(因为您将它们称为过时函数)您正在使用Visual Studio,您可以将有关这些函数的警告更改为项目中的错误,以便代码甚至无法构建他们被使用了。
答案 3 :(得分:1)
编写一个预提交挂钩,执行您希望对代码强制执行的任何检查。 Info about pre-commit hooks.