2011-10-04 2 views
3

로컬 수은 저장소에 몇 가지 pretxncommit 후크가 있습니다. 이러한 후크는 커밋 메시지에 티켓 및 기타 다른 정상 검사에 대한 참조가 포함되어 있는지 확인하는 데 사용됩니다.mercurial queue 또는 histedit에서 pretxncommit 후크를 비활성화하는 방법은 무엇입니까?

내 문제는 수은 대기열을 사용할 때 qnew과 같은 명령이 이러한 후크를 실행하려고 시도하고 티켓 검사 중 하나가 실패하면 histedit 및 이와 유사한 확장과 동일한 문제가 발생했습니다.

왜 이러한 명령으로 pretxncommit 후크가 실행됩니까? 그들은 어떤 종류의 내부 커밋을 실행합니까?

이러한 훅을 커밋에서만 실행하도록하려면 어떻게해야합니까? 즉, qparent/QBASE 태그의 후손 을의 경우 또는

당신이 MQ-작업을 무시하려는 경우 환매 특약
  • 내부 모든 변경 (기록)와 함께 작동 pretxncommit
  • 답변

    2

    은 예, QNEW 실제 커밋 생성하고, 따라서 모든 관련 후크를 저지 호출합니다. MQ 패치를 적용하고 로그를보고있을 때 MQ를 일시적으로 비활성화하여 직접 확인할 수 있습니다.

    pretxncommit 후크 다른 후크 배심원 담합 것을 제외하고 일부 명령에 적용 할 수있는 방법이 없다 : 우리 pretxncommit 후크 실행하기 전에 특정 파일이 반드시 존재하지 않는하게 여기

    $ cat .hg/hgrc 
    [hooks] 
    pre-qnew = touch .hg/skiphook 
    post-qnew = rm .hg/skiphook 
    pretxncommit = test -e .hg/skiphook || echo not skipping 
    $ hg rm README # make some change 
    $ hg qnew asdf # no hook 
    $ hg qpop 
    $ hg rm README 
    $ hg ci -m asdf 
    not skipping 
    

    그 (사소한) 후크, 그리고 pre/post-qnew 후크는 파일을 생성하고 그것을 정리합니다.

    +0

    이 솔루션은 해킹의 의미가 있다고 생각하지 않습니다. 다른 한편, 당신은 이것을 해결할 수 있다고 생각할 것입니다 : pre-commit = do-your-hook pre-qfinish = do-your-hook pre-qfinish는 qfinish를 차단하지 않는 것처럼 보입니다. \ – stantonk

    0
    • , 당신은 변경 집합의 부모를 찾아 볼 수있다 WC에서 확인하십시오. Smth. (헤드에서 더러워지며 테스트에서가 아니라) hg id -tr.

    또는 MQ로 작업 할 때 항상 qtip으로 작업합니까?

    >hg parents 
    ... 
    tag:   qtip 
    tag:   tip 
    .. 
    
    +0

    에서 함수 newcommit에서 언급 당신이 만약 그들이 그들이하는 MQ-작업으로 실행되는 경우 후크 theirselves에서 확인하는 의미합니까, 그들을 취소합니까? –

    +0

    예, 중단하지만 오류 수준은 양호합니다. BTW, 발견 된 것보다 늦게 발견 된 - qfinish이 경우에도 큰 두통이 될 것입니다. –

    1

    https://stackoverflow.com/a/19349636/350713 에있는 abort_commit_to_wrong_branch 함수는 MQ 커밋이 아닌 "실제"커밋에서만 후크를 실행하는 방법을 보여줍니다. _committingpatchrepo에 있는지 확인하는 것이 좋습니다.

    repo에 '_committingpatch'속성이있는 경우 진행중인 MQ 커밋입니다. 관련 라인은

    if hasattr(repo, "_committingpatch"): 
    

    이이 http://hg.intevation.org/mercurial/crew/file/7032dcff290c/hgext/mq.py#l293