【问题标题】:Automatic software updates from a local SVN repository从本地 SVN 存储库自动更新软件
【发布时间】:2012-11-02 23:19:58
【问题描述】:

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

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

【问题讨论】:

    标签: linux svn cron auto-update


    【解决方案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 开关来获取这些路径下的路径列表。从那里,您可以遍历第一级路径并检查每个路径的修订,以确定是否有新路径。注意输出包含 cmets、最后更改的时间戳、修订和节点类型;这应该是使脚本正常工作所需的一切。

    【讨论】:

    • 这取决于脚本将路径限定为一级路径还是有一个开关? svn 循环遍历 all 目录的时间太长了..
    • 据我所知没有单独的开关,脚本必须对其进行限定(不应该太难计算路径中的斜杠数量)
    【解决方案2】:
    • 如果“...在本地存储库...”的意思是“在Subversion服务器中,我可以管理和配置”,那么:

      • 编写提交后挂钩,它将查看 /tags|/branches (svnlook dirs-changed REPO-PATH, f.e) 的变化并在需要时运行一些操作
    • 如果你只有普通的远程访问 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 日志的路径值 | 使用来自 text-log 的 /tags 解析的行)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-24
      • 2013-11-29
      • 2018-02-07
      • 1970-01-01
      • 2010-11-29
      相关资源
      最近更新 更多