使用 SVN 挂钩对提交的文件应用 astyle

使用 SVN 挂钩对提交的文件应用 astyle

每当有人提交到 SVN 存储库时,我想对代码应用一些样式,为此我使用astylesvn 钩子对提交的更改使用pre-commit

我可以获取这样的文件名,但是当我应用 astyle 时,程序似乎无法从文件中获取数据:

for FILE in $($SVNLOOK changed -t "$TXN" "$REPOS" | cut -b 5-); do 
        # echo $REPOS/$FILE 1>&2             # prints the files' paths
        astyle --style=gnu -n $FILE
done

# commit the changes from astyle here

知道我怎样才能实现这个目标吗?

答案1

恐怕,但我有一个坏消息要告诉你:你做不到

正如中提到的SVN-图书在“实现存储库挂钩”一章中,在带有 Stop-Sign 的评论中(你知道,它的意思是)

虽然钩子脚本几乎可以做任何事情,但钩子脚本作者应该在一个方面表现出克制:不要使用钩子脚本修改提交事务。虽然使用挂钩脚本来自动纠正正在提交的文件中存在的错误、缺陷或策略违规可能很诱人,但这样做可能会导致问题。 Subversion 保留存储库数据某些位的客户端缓存,如果您以这种方式更改提交事务,这些缓存就会变得难以察觉的陈旧状态。这种不一致可能会导致令人惊讶和意外的行为。您应该简单地在预提交挂钩中验证事务,并在不满足所需要求时拒绝提交,而不是修改事务。作为奖励,您的用户将了解谨慎、合规的工作习惯的价值。

CollabNet 首席技术官 Jack Repenning 也表示提到

...遗憾的是我必须告诉你,不,你不能那样做。正在提交的文件的文件内容您可以在钩子脚本中使用(通过 svnlook 的“changed”和“cat”命令),但是您看到的是已经输入到数据库中的数据的副本(尽管尚未实际提交),并且您没有可以修改它,仅允许或拒绝最终事务提交。

如果你仍然勇敢尝试,你可以尝试从而不是理解代码老话题(2009 年),作者声称“它修改交易内容”

相关内容