从本地SVN存储库自动更新软件

时间:2012-11-02 23:19:58

标签: linux svn cron auto-update

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

因此,问题是,是否有一种简单的方法可以确定是否在本地存储库中出现了新版本的软件,可能选择查看branchestags子目录,以及获取具有最新版本(在branchestags内)的子目录的路径,也可能应用自定义关键字,例如&# 34; SECUR"过滤掉任何非安全更新?

2 个答案:

答案 0 :(得分: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

您可以在网址中轻松添加分支/标记,并使用-R开关获取其下方的路径列表。从那里,您可以遍历第一级路径并检查每个路径的修订以确定是否有新的路径。注意输出包含注释,上次更改的时间戳,修订版和节点类型;这应该是让脚本运行所需的一切。

答案 1 :(得分:1)

  • 如果“......在本地存储库中......”表示“在Subversion服务器中,我可以管理和配置”,则:

    • 编写post-commit钩子,它会看到/ tags | / branches(svnlook dirs-changed REPO-PATH,f.e)中的更改,并在需要时运行一些操作
  • 如果您只有普通的远程访问回购,您可以:

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

之后,您已经解析了svn infosvn log -q REPO-URL/tags/ -v -l 1的结果,并检测到新标记的显示,您可以切换,重新定位+更新或mkdir +结帐

<强>示例:

标签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-version

>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日志的路径值|解析行,带有来自text-log的/ tags)