Tortoise SVN 预提交脚本允许提交包含定义的字符串

Tortoise SVN pre-commit script allow commit that contains defined string

创建一个预提交脚本,只允许在文件某处包含特定字符串的提交 Test.cfg

目前我正在使用它,因为它将查看每个提交的文件并阻止包含指定字符串的提交

REPOS=""
TXN=""
SVNLOOK=/usr/bin/svnlook


$SVNLOOK diff -t "$TXN" "$REPOS" | \
   grep -i "Sting to search here" > /dev/null && { echo "String exists so block commit" 1>&2; exit 1; }

我所追求的是让上面的代码完全相反,如果字符串存在则允许提交,如果不存在则阻止提交。如果我可以指定应该搜索哪个文件也很好,因为目前它搜索每个文件并且一些提交可以包含 1000 个文件

请原谅,但 svnlook diff 在您的情况下是丑陋愚蠢的方式。重新阅读svnlook子命令topic in SVNBook,注意svnlook tree/svnlook changed + svnlook cat

你的测试的完整业务逻辑可以|必须是这样的(我懒得在这里写完整的 bashism,这将是你的职责)

IF $FILENAME 存在于事务中(我更喜欢 svnlook tree --full-paths ... 只是因为 svnlook changed ... 需要额外的 | gawk {print }干净的文件名) AND $FILENAME 包含 $STRING (svnlook cat "$FILENAME" | grep "STRING" ...) 做点什么

别忘了处理可能的边缘情况:

  • $FILENAME 在事务中不存在,但在 WC 中显示为正确的 $STRING,但文件 未修改 根据 svn 状态
  • 同上,但修改
  • pp 1-2,但不允许 $STRING

由于上述注意事项,我建议通过测试 自定义修订版的 属性 来探索|检查替换文件+字符串的可能性(更短,更容易,更易于管理)