リポジトリが特定の既知の以前の状態にあった場合に完全に適用される順次パッチのリストを出力するコマンドを探しています。これは、私が遭遇したいくつかのhg glog
問題を含むリポジトリです (自分のクローンでプレイしたい場合は、 https://bitbucket.org/dusty/funny_repo/からも入手できます):
@ changeset: 8:ffd749c92f3b
| tag: tip
| summary: h
|
o changeset: 7:bc959885f6aa
|\ parent: 6:dfe021fa52a4
| | parent: 5:4d8bc738f0ab
| | summary: MERGE
| |
| o changeset: 6:dfe021fa52a4
| | parent: 3:1374ea53e7b7
| | summary: e
| |
o | changeset: 5:4d8bc738f0ab
| | branch: branch2
| | summary: g
| |
o | changeset: 4:e46fa4632d36
|/ branch: branch2
| summary: f
|
o changeset: 3:1374ea53e7b7
| summary: d
|
o changeset: 2:59712a781f0c
| branch: branch1
| summary: c
|
o changeset: 1:ff7f8724ad17
| branch: branch1
| summary: b
|
o changeset: 0:a3b3a87aa422
summary: a
hg export
基本的に、変更セット 0、1、2、3、6、7、および 8 を出力するために、どのリビジョンセットに渡すかを知りたいのです。これらの変更セットの「効果」が適用されるため、変更セット 4 および 5 は必要ありません。変更セット 6 のマージ コミットで。
ancestors(default)
すべての変更セットを出力しますが、変更branch('default')
セット 1 と 2 を無視します。変更セット 1 と 2 は、別のブランチ上にあり、パッチを完全に適用するために必要です。
明らかに、このインスタンスでは使用できますhg log -r "0..default and not branch(branch2)"
が、すべてのケースで機能するより一般的なコマンド revset を探しています。
テストのために、コマンドhg export -r "0..default and not branch(branch2)" -o ../%R.patch
と次の for ループを使用して、結果のパッチを適用しています。
cd ../
mkdir patched
cd patched
for n in ../*.patch ; do
patch -p1 <$n
done