1

我需要在我的 Linux 机器上创建一个 cron 作业,以自动检查通过 Subversion 维护的某些系统关键软件的新版本。我已经完成了结帐,所以现在我只需要更新源代码的本地副本并使用 cron 脚本定期从最新版本构建。

因此,问题是,是否有一种简单的方法可以确定软件的新版本是否出现在本地存储库中,可能可以选择查看其中一个branchestags子目录,以及获取子目录的路径最新版本(在branches或中tags),也许还应用自定义关键字,例如“安全”来过滤掉任何非安全更新?

4

2 回答 2

1

您可以编写一个脚本来调用svn info和解析修订和/或时间戳以确定是否有更新。示例输出:

$ svn info http://svn.red-bean.com/repos/test/readme.doc
Path: readme.doc
Name: readme.doc
URL: http://svn.red-bean.com/repos/test/readme.doc
Repository Root: http://svn.red-bean.com/repos/test
Repository UUID: 5e7d134a-54fb-0310-bd04-b611643e5c25
Revision: 1
Node Kind: file
Schedule: normal
Last Changed Author: sally
Last Changed Rev: 42
Last Changed Date: 2003-01-14 23:21:19 -0600 (Tue, 14 Jan 2003)
Lock Token: opaquelocktoken:14011d4b-54fb-0310-8541-dbd16bd471b2
Lock Owner: harry
Lock Created: 2003-01-15 17:35:12 -0600 (Wed, 15 Jan 2003)
Lock Comment (1 line):
My test lock comment

您可以轻松地在 URL 中包含一个分支/标签,并使用-R开关来获取这些路径下的路径列表。从那里,您可以遍历第一级路径并检查每个路径的修订,以确定是否有新路径。注意输出包含注释、最后更改的时间戳、修订和节点类型;这应该是使脚本正常工作所需的一切。

于 2012-11-02T23:33:35.833 回答
1
  • 如果“...在本地存储库中...”的意思是“在我可以管理和配置的 Subversion 服务器中”,那么:

    • 编写提交后挂钩,它将查看 /tags|/branches ( svnlook dirs-changed REPO-PATH, fe) 的变化并在需要时运行一些操作
  • 如果您只有普通的远程访问 repo,您​​可以:

    • 工作副本中有最新标签 (?)
    • 检查 cron 中存储库 /tags 的日志(或按需求)

之后,您将解析结果svn infosvn log -q REPO-URL/tags/ -v -l 1检测新标签的出现,您可以切换|重新定位+更新或 mkdir+checkout

样本:

标签 1.0

>svn info
Path: .
Working Copy Root Path: Z:\1.0
URL: http://mayorat.ursinecorner.ru:8088/svn/Hello/tags/1.0
Repository Root: http://mayorat.ursinecorner.ru:8088/svn/Hello
Repository UUID: 65c3f143-cc60-1d4e-9546-1f0378d96c08
Revision: 34
Node Kind: directory
Schedule: normal
Last Changed Author: lazybadger
Last Changed Rev: 11
Last Changed Date: 2010-07-17 04:45:05 +0600 (Сб, 17 июл 2010)

日志

>svn log -q http://mayorat.ursinecorner.ru:8088/svn/Hello/tags/ -v -l 1
------------------------------------------------------------------------
r22 | lazybadger | 2010-07-17 05:31:00 +0600 (Сб, 17 июл 2010)
Changed paths:
   A /tags/1.1 (from /trunk:21)
------------------------------------------------------------------------

或 XML 版本

>svn log -q http://mayorat.ursinecorner.ru:8088/svn/Hello/tags/ -v -l 1 --xml --incremental
<logentry
   revision="22">
<author>lazybadger</author>
<date>2010-07-16T23:31:00.513125Z</date>
<paths>
<path
   text-mods="false"
   kind="dir"
   copyfrom-path="/trunk"
   copyfrom-rev="21"
   action="A"
   prop-mods="true">/tags/1.1</path>
</paths>
</logentry>

在任何情况下,从日志中提取修订号,如果它超过 WC 的修订(“Last Changed Rev”):我们必须有新版本。URL 是 Repository Root+(来自 XML 日志的路径值 | 使用文本日志中的 /tags 解析的行)

于 2012-11-03T01:04:24.390 回答