2012-01-23 31 views
1

我写一个pre-commit钩子,我想执行基于文件交易之前的一些内容规则。因此,交易开始时,我想是svnlook猫的任何文件的内容标记为“U”,“UU”,或“d” 未决的改变。我是否可以安全地使用所提供的事务标识符(第二个参数预先提交)并去掉破折号及其后的任何字符并考虑“基本修订”?有没有更好的方式来获取这些信息?确定交易的基础版本预提交

回答

2

直接的答案是没有。交易号码可以是任何东西。但是,svnlook youngest <repos>将返回最后一个应该是你正在寻找的版本。

小心预提交钩子:

  • 确保你没有做的东西,将需要很长的时间。开发人员必须等待预提交钩子才能完成,如果您花费7到10秒处理某些事情,开发人员会感到非常沮丧。
  • 您不能(也不应该)更改提交的数据。如果它匹配你想要的,允许提交。如果没有,请不要提交。
  • 确保你不会停止可能是合法活动的东西。例如,某些站点使用预提交挂钩来阻止某人提交更改,除非他们在提交消息中放置了一个票证,并且该提交消息是分配给该开发者的票证,并且该票证处于打开状态。您能想象当开发人员因为将票分配给其他人而无法提交更改时发生的闹剧,并且唯一可以更改分配的人在本周内关闭吗?

有时候最好使用持续集成服务器来验证提交而不是预提交或提交后提交钩子。例如,允许开发人员提交文件,但如果开发人员不在合适的组中,可以发送电子邮件给开发负责人。

有90%的可能性,开发商可能是做正确的事。这位发展主管可能已经知道这个问题。而且,如果有问题,您可以恢复更改。直到修订致力于

+0

乍一看这似乎是它引入了竞争条件的可能性。如果在交易正在进行时“最年轻”发生了变化,那么svn会不会适当地确定交易是过时的并被拒绝? – tuckermi

+0

如果你看一下Subversion版本库的结构,它看起来Subversion的提交过程一次只能处理一个提交。每个修订版都是以前版本的差异,所以直到先前的修订版已经提交,您不能提交下一个修订版。尤其是存储库而不修改文件。这不应该成为揪住“svnlook最年轻”的问题。 –

+0

这个答案似乎与Bert写的有点不同,尽管在实践中它对我来说不应该是个问题,因为查看最新的修订似乎确保能够提供与我正在更改的基本修订相匹配的内容。我有兴趣在更改之前查看修改后的文件内容。谢谢。 – tuckermi

0

基础版本未定。如果另一个更改不会更改相同的节点,则可以在提交过程中进行提交。只有提交的最后部分是排他性的。

0

加1到最小。 例如:

the_revision=$(svnlook youngest ${REPOS}) 
((the_revision++)) 
+0

只有一段代码是不够的,请给出文字解释! – peterh