1

私たちのシステムを自動的に更新するためのスクリプトを書いています。基本的に、リモートの hg リポジトリからプルして更新し、いくつかの更新スクリプトを実行したいと考えています。問題は、これらの更新スクリプトの実行に時間がかかり、ほとんどのスクリプトは、構成に変更があった場合にのみ実行する必要があることです。

今、私のスクリプトは次のようになります。

if hg pull -u
  then
    run scripts
fi

私が欲しいのは次のようなものです

if hg pull -u && 'some changes was introduces in my/configuration/directory/*'
   then
      run scripts
fi

これを行う方法はありますか?

4

3 に答える 3

1

status コマンドを使用して、変更されたファイルのリストを取得できます -- 異なるリビジョン間でも同様です:

HERE=`hg log --template '{node}' -r.`
hg pull -u
if hg st --rev $HERE:. | grep -q .
then
  run scripts
fi
于 2013-11-10T08:58:34.537 に答える
1

リビジョン間でhg status変更されたファイルのリストを取得するために使用できます。tiptip^my\configuration\directory

hg status my\configuration\directory\** -m  --rev "tip^:tip"

pullこれらのファイルが現在のリビジョンセットから変更されているかどうかを確認し、構成が変更されているupdate場合はスクリプトを実行することをお勧めします。私には、開始したリビジョンセットを保存して、更新後にそれを把握しようとするよりも簡単に見えます。(私は bash/grep が得意ではないことに注意してください。したがって、これは概算であり、テストされていません):

hg pull
cfgChngd = hg status -m my\config\dir\** -m  --rev tip | grep "M my\config\"
hg update
if cfgChngd
    runAllTheScripts
fi
于 2013-11-07T17:05:19.093 に答える
1

テンプレート化された出力をhg incoming使用すると、プルの前にどのファイルが変更されるか (変更される場合)、それに応じて動作するかを確認できます。

hg incoming --template "{files % '{file}\n'}" | grep SOMESTRING

于 2013-11-09T05:34:04.573 に答える