2016-08-24 4 views
1

質問:私の作業ディレクトリをあるリビジョンから別のリビジョンに更新すると、渡されたリビジョンごとにスクリプトを実行したいと思います。これどうやってするの?Mercurialでは、更新を行う際に各チェンジセットのジョブをどのように実行するのですか?

重要な制約

  • スクリプトは同じ
  • トラバーサルは
  • (私は100回の改訂のために手でこのすべてを行うにはしたくない...)繰り返し起こるはずは常にありますincomingフックはオプションではありません。それはプッシュまたはプルだけでなく、すべての更新のために、リビジョン間でどのくらいの頻度で切り替わっても発生する必要があります。
  • 説明のため

r1(*) -- r2 -- r3 -- r4(head)

基本的に、私は私の作業ディレクトリは今r1で現在、そして、のは、言ってみましょう

r1(*) --> r2 (then run script) --> r3 (then run script) --> r4 (then...

をやってみたいです私はそれをr4に更新したいと思います。直接更新する代わりに(hg updateなど)、r2に更新してから、スクリプト(update-my-databaseなど)を実行します。その後、私はr3に更新して、同じスクリプトを実行したいと思います。

+0

こんにちは、私の答えをチェックしましたか? –

+0

はい、私はそうしたと思います。私は何よりも何かできますか?もしそうなら、そうしたいと思います。あなたの答えは本当に役に立ちました。 –

+0

私はあなたが答えを受け入れる以上の何かをすることができるとは思わない。私はそれが参考になったことを嬉しく思う:-) –

答えて

1

リビジョングラフからlinearを選択するように注意しなければなりません。

二つのヘッド(2本の枝または2つのブックマークあれば同じことのようになります)で、最小限のリポジトリを考えてみましょう:

$ hg log -G --template "{rev}\n" 
o 4 
| 
| o 3 
| | 
| o 2 
|/ 
o 1 
| 
o 0 

は、我々はヘッド4(その線形部分のいずれかに沿って移動したい1から始めると言います:1,4)または頭部3に沿って(線状の部分は1,2,3)となります。

したがって、2つのパラメータ(直線部分の先頭と最後)を持つスクリプトを使用します。

これは最低限ですが、動作します。ここでは

for rev in `hg log -r "descendants(1) and ancestors(3)" --template "{rev}\n"` 
do 
    echo Updating to $rev: 
    hg update $rev 
    echo Executing our script: 
    hg id --id --num 
done 

が出力されます。

Updating to 1: 
0 files updated, 0 files merged, 2 files removed, 0 files unresolved 
Executing our script: 
4d5aba4313ce 1 
Updating to 2: 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
Executing our script: 
f0de0712ec00 2 
Updating to 3: 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
Executing our script: 
d052bd7c310b 3 

スクリプトは関係なく、作業ディレクトリの現在のリビジョンは何か機能しません。

開始する前に、作業ディレクトリに適用せずにリモートからの変更を取得するためにはを実行し、トポロジを理解して線形ピースの開始点と終了点を選択する必要があります。

あなたはまた、我々は水銀の機能を使用し、$1$2シェルの位置パラメータを持つハードコードさ13を交換し、それがどのように動作するかを理解するに

:-)あなたの実際のスクリプトでhg idラインを交換する必要が(詳細はhg help revsets)履歴グラフ(SQL :-)のようなビットでクエリを実行できるようにする

関連する問題