2017-12-18 14 views
1

私たちはソース管理にMercurialを使用しており、QAプロセスの自動マージと変更履歴を紹介したいと思います。この議論の目的のために 、ちょうど私たちは以下のようなシンプルな3分岐フローを使用することを想定してみましょう:水銀でマージログを生成

\ = forward merge 
| = back merge of fix 

Default --O--A--*--B--*--- 
      \ ^ \ 
      \ |  \ 
QA  -----M--X--C--*--N--- 
       ^ \ 
       |  \ 
Master --------H--------*--- 

そこで質問です: それは、マージNでrevsetクエリを構築することが可能です、好ましくは実際にそれを実行する前に、それ以外の場合は、QAブランチにはまだ入っていないDefaultブランチ上のすべてのコミットのログを生成します(上記の図ではAとBです)。

代替策: DefaultをQAにマージした場合にマージされるすべてのチェンジセットを返すリボセットクエリを作成することは可能ですか?

私はデフォルトブランチ上のコミットだけに興味があり、デフォルトに統合されたフィーチャーブランチ内の個々のコミットではありません(図に含まれていないフィーチャーブランチ)。 QAブランチのコミットにも興味はありません。

リポジトリはかなり維持されていますが、数年前で約13000のノードが含まれています。

私は祖先と祖先を実験していましたが、Xを最新の共通祖先または非常に古いノードとして取得します。更新は「HGを使用して

hg log --rev "((heads(branch('Default')) and !closed()) % heads(branch('QA'))) and branch('Default') and p2(!branch('QA'))" 
hg log --rev "((heads(branch('Default')) and !closed()) % heads(branch('QA'))) and branch('Default') and !children(branch('QA'))" 

:私が持っていたほとんどの運はこれのバリエーションである私はXを得るためのロジックを理解し、私はO.

後に本当によいずれかの超楽しい

changeset: 13070:7e59fc16aa4e 
branch:  Default 
parent:  13068:5b9409ad504f 
parent:  13069:849bd43d2023 
user:  ******* 
date:  Mon Dec 18 18:40:46 2017 +0200 
summary:  Merged Feature branch A 

changeset: 13071:07470ff919ff 
branch:  Feature branch B 
parent:  13061:540eda2c959b 
parent:  13068:5b9409ad504f 
user:  ***** 
date:  Mon Dec 18 18:49:42 2017 +0200 
summary:  Merge with Default 

changeset: 13072:a53260ffabca 
branch:  Feature branch B 
user:  ***** 
date:  Mon Dec 18 18:58:05 2017 +0200 
summary:  Some text 

changeset: 13073:37c895f2abf0 
branch:  Default 
parent:  13070:7e59fc16aa4e 
parent:  13072:a53260ffabca 
user:  ******* 
date:  Mon Dec 18 18:58:05 2017 +0200 
summary:  Merged Feature branch B 

それほど悪くはなく、未:トムによって示唆されているように、--preview --rev XYZ」をマージし、このような出力を生成します。少なくとも、単純なgrep/slsよりも多くのロジックが必要です。事前に

おかげで、 ジョン

+0

プレビューをマージしませんか?例えば。 hg update -b QA; hg merge -P -r REV – Tom

+0

マージプレビューは、すべての機能ブランチのコミットと、それらの機能ブランチのマージコミットを返します。 --templateオプションもないので、そのまま出力を解析する必要があります。 あなたのコメントは私が検索の早い段階で放棄した、私がhgログを使ってうまくいくと確信していたので、私が再結合するようにしました。 私は、プレビューログを解析して、デフォルトブランチ上の最初のノードを見つけ出し、それに基づいてhgログを使用すると、うまくいくと思います。 – JJJ

+0

シンプルなgrep:hg merge -P -r REV | grep --before-context 1 'branch:。*デフォルト' | ' grep changeset – Tom

答えて

1

は、私はほとんど私が何をしたいん解決策を見つけた:

hg log --rev "branch('Default') & !ancestors(branch('QA')) & ancestors(heads(branch('Default')) & !closed()) & !children(branch('QA'))" 

、彼らはただの雑音だので、今不足している唯一のことは、複数のヘッドのマージを除外することです変更履歴で

関連する問題