2017-12-18 19 views
1

우리는 소스 제어에 Mercurial을 사용하고 있으며 QA 프로세스의 자동 병합 및 변경 내역을 소개하고자합니다. N 병합에 그, revset 쿼리를 구성 할 수있다 :수은으로 병합 로그 생성

\ = forward merge 
| = back merge of fix 

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

그래서 질문은 :이 토론의 목적 은 그냥 우리가 다음과 같은 간단한 3 분기 유동를 사용하는 것으로 가정하자 , 바람직하게는 실제로 수행 한 후에 그렇지 않으면 QA 브랜치에 아직없는 디폴트 브랜치 (모든 브랜치에 대한 로그)를 생성합니다 (위 그림에서 A와 B가됩니다).

다른 형식 : 기본값을 QA로 병합하면 병합 될 모든 변경 집합을 반환하는 revset 쿼리를 생성 할 수 있습니까?

기본 분기에서 커밋에만 관심이 있습니다. 기능 분기에서 개별 커밋이 이미 기본값으로 병합되지 않았습니다 (그림에 포함되지 않은 기능 분기). 나는 또한 QA 분과의 커밋에 관심이 없다.

리포 지 토리는 꽤 잘 유지되었지만 몇 살이고 약 13000 개의 노드를 포함합니다.

나는 조상과 조상을 실험 해 왔지만 X를 최신 공통 조상 또는 매우 오래된 노드로 가져옵니다. 나는 X를 얻기의 논리를 이해하지만, 정말이야 O.

내가 먹어 본 가장 운이의 변화와 후 :

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'))" 

업데이트

이 사용 "HG 톰에 의해 제안, "--preview --rev XYZ 병합과 같은 출력을 생성 : 너무 나쁜,하지만 두 슈퍼 재미없는

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 

합니다. 최소한 단순한 grep/sls보다 더 많은 논리가 필요합니다. 유일한 것은 지금없는

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

여러 머리를 병합 제외하는 것입니다, 그들은 단지 소음있어 이후 : 사전에

감사합니다, 존

+0

미리보기를 병합하지 않으실 겁니까? 예. hg update -b QA; hg merge -P -r REV – Tom

+0

병합 미리보기는 모든 기능 분기에 대한 모든 단일 커밋과 해당 기능 분기의 병합 커밋을 반환합니다. 또한 --template 옵션이 없으므로 출력을 파싱해야합니다. 귀하의 의견은 내가 hg 로그로 더 잘할 수 있다고 확신했기 때문에 내가 검색에서 일찍 포기한 병합 뷰를 재검토하게 만들었습니다. 이제 미리보기 로그를 구문 분석하여 기본 분기에서 첫 번째 노드를 찾은 다음이를 기반으로 hg 로그를 사용할 수 있다고 생각합니다. – JJJ

+0

간단한 grep : hg merge -P -r REV | grep - 이전 - 컨텍스트 1 'branch :. * Default'| grep changeset – Tom

답변

1

나는 주로 내가 원하는 것을 그 해결책을 발견 변경 내역.