1

Linux マシンで cron ジョブを作成して、Subversion で管理されているシステム クリティカルなソフトウェアの新しいバージョンを自動的にチェックする必要があります。すでにチェックアウトを行っているので、ソース コードのローカル コピーを更新し、cron スクリプトを使用して定期的に最新バージョンからビルドする必要があります。

したがって、問題は、ソフトウェアの新しいバージョンがローカルリポジトリに表示されているかどうかを判断する簡単な方法があるかどうかです。おそらく、サブディレクトリのいずれbranchesかを調べることを選択するオプションがあり、最新バージョン ( または のいずれか) に、「セキュリティ」などのカスタム キーワードを適用して、セキュリティ以外の更新プログラムを除外することもできますか?tagsbranchestags

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スイッチを使用してそれらの下のパスのリストを取得できます。そこから、第 1 レベルのパスをループし、それぞれのリビジョンをチェックして、新しいパスがあるかどうかを判断できます。出力には、コメント、最終変更のタイムスタンプ、リビジョン、およびノー​​ドの種類が含まれていることに注意してください。スクリプトを機能させるために必要なものはこれですべてです。

于 2012-11-02T23:33:35.833 に答える
1
  • 「... ローカル リポジトリ内...」が「管理および構成できる Subversion サーバー内」を意味する場合、次のようになります。

    • /tags|/branches ( svnlook dirs-changed REPO-PATH, fe) の変更を確認し、必要に応じていくつかのアクションを実行するpost-commit フックを作成します。
  • レポへの通常のリモートアクセスしかない場合は、次のことができます。

    • 作業コピーに最新のタグ (?) がある
    • cron で (または必要に応じて) リポジトリ /tags のログを確認します

その後、switch|relocate+update または mkdir+checkoutの解析結果を取得svn infoし、新しいタグの出現を検出しますsvn log -q REPO-URL/tags/ -v -l 1

サンプル:

タグ 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 はリポジトリ ルート + (XML ログからのパス値 | テキスト ログからの /tags を含む解析された行)

于 2012-11-03T01:04:24.390 に答える