我有一个PHP脚本,通过检查SVN下的目录,特别是那些匹配模式^/*/tags/*
的目录,自动生成项目发布历史。
e.g。
^/myproject/tags/v1-00
^/myproject/tags/v1-01
^/myproject/tags/v1-02
......等等。
除此之外,脚本还解析svn info
:
[tomalak@cat ~]$ svn info https://localhost/svn/myproject/tags/v8-11/
Path: v8-11
URL: https://localhost/svn/myproject/tags/v8-11
Repository Root: https://localhost/svn
Repository UUID: ***
Revision: 15198
Node Kind: directory
Last Changed Author: ***
Last Changed Rev: 15192
Last Changed Date: 2013-06-17 12:31:52 +0100 (Mon, 17 Jun 2013)
以获取SVN修订版和标签创建日期。
这很有效......直到有人提交到标签上。它发生了。较新版本的TortoiseSVN警告你,你可以创建预提交钩子以试图物理禁止提交到标签 1 ,但我想处理这种情况,无论如何。
我们被告知“Last Changed Rev
”和“Last Changed Date
”; 可以,如果没有太多工作(理想情况下没有第二次svn
调用),请求“First Changed Rev
”和“First Changed Date
”代替吗? < / p>
相关: “SVN: How to get the first revision of a file?”即将结束,但我特别希望通过单svn info
次来电来执行此操作所有可能的。 (“How to get the earliest checkout-able revision info from subversion?”也很接近,但最终没用。)
1 实际上,在没有禁止创建初始标签的情况下,我很难做到这一点,尽管这是另一天的故事......
答案 0 :(得分:0)
理想情况下没有第二次
svn
调用
一种违反这种“约束”但又满足您需求并且非常简单的方法是执行初始预处理步骤以明确检索该修订号:
[tomalak@cat ~]$ svn log https://localhost/svn/myproject/tags/v8-11/ \
--stop-on-copy --quiet | grep ^r | tail -n 1 | sed -r -e 's/^r|\s.*//g'
15000
然后,您的自动svn info
调用可以使用此修订号来提供您想要的详细信息:
[tomalak@cat ~]$ svn info https://localhost/svn/myproject/tags/v8-11/ -r 15000
Path: v8-11
URL: https://localhost/svn/myproject/tags/v8-11
Repository Root: https://localhost/svn
Repository UUID: ***
Revision: 15000
Node Kind: directory
Last Changed Author: ***
Last Changed Rev: 15000
Last Changed Date: 2013-04-30 12:01:30 +0100 (Tue, 30 Apr 2013)
如果您确实只需要一个命令,那么您始终可以使用反引号在svn log
调用中内联svn info
:
[tomalak@cat ~]$ svn info https://localhost/svn/myproject/tags/v8-11/ \
-r `svn log https://localhost/svn/myproject/tags/v8-11/ \
--stop-on-copy --quiet | grep ^r | tail -n 1 | sed -r -e 's/^r|\s.*//g'`
但是,当然,实际上这仍然是svn
的两次调用。