0

SVN の下のディレクトリ、特にパターンに一致するディレクトリを調べて、プロジェクトのリリース履歴を自動的に生成する PHP スクリプトがあります^/*/tags/*

例えば

^/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あまり多くの作業をせずに (そして理想的には 2 回目の呼び出しを行わずに)、代わりに" " と " " をsvn求めることはできますか?First Changed RevFirst Changed Date


関連:SVN: ファイルの最初のリビジョンを取得する方法は?svn info 」 に近づいていますが、可能であれば単一の呼び出しでこれを実行したいと考えています。(「Subversion から最も早いチェックアウト可能なリビジョン情報を取得するにはどうすればよいですか?」も近いですが、最終的には役に立ちません。)

1実は、初期タグ作成を禁止せずにこれを行うのに苦労しましたが、それは別の機会に…

4

1 に答える 1

0

理想的には 2 回目のsvn呼び出しなし

この「制約」に違反するが、それ以外はニーズを満たし、非常に単純なアプローチの 1 つは、最初の前処理ステップを実行して、そのリビジョン番号を明示的に取得することです。

[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'`

もちろん、実際には、これはまだ の 2 つの呼び出しを実行していますsvn

于 2013-06-19T11:03:05.857 に答える