2011-07-06 17 views
5

Desen kullanarak yorum yapmayı kontrol eden kontrol için basit bir kancaya ihtiyacım var. İşte benim kanca:Kaplumbağa Hg günlük penceresinde kanca çıkışı nasıl gösterilir?

#!/usr/bin/env python 
# 
# save as .hg/check_whitespace.py and make executable 

import re 

def check_comment(comment): 
    # 
    print 'Checking comment...' 
    pattern = '^((Issue \d+:)|(No Issue:)).+' 
    if re.match(pattern, comment, flags=re.IGNORECASE): 
     return 1 
    else: 
     print >> sys.stderr, 'Comment does not match pattern. You must start it with "Issue 12323:" or "No Issue:"' 
     return 0 

if __name__ == '__main__': 
    import os, sys 
    comment=os.popen('hg tip --template "{desc}"').read() 
    if not check_comment(comment): 
     sys.exit(1) 
sys.exit(0) 

Çalışıyor. Konsoldan bağlandığımda bile 'Comment does not match pattern. You must start it with "Issue 12323:" or "No Issue:"' hata mesajını gösterir. Ancak, Tortoise Hg Workbench'ten işlem yapmaya çalıştığımda, yalnızca sistem iletisi görüntülenir: abort: pretxncommit.check_comment hook exited with status 1.

Ben sorunun ne kullanıcıyı bilgilendirmek gerekir. Tortoise Hg'yi çıkıştan kancaya göstermeye zorlamanın bir yolu var mı?

+0

, ancak bunun yerine sys.err ait sys.out yazılı çalıştı mı? – bbaja42

+0

Evet. Yardım etmedi. –

cevap

5

Bir dış kanca yerine işlem içi kancası yaparak işe aldım. Ancak işlem sırasında hooks oldukça farklı tanımlanmıştır.

Birincisi, piton dosya kanca tanımında adıyla çağrılır sadece tek işlevi ihtiyacı var. Kanca işlevi ui, repo ve hooktype nesnelerini geçirir. Ayrıca kanca türüne bağlı olarak ek nesneler geçirilir. pretrxncommit için, node, parent1 ve parent2 geçirilir, ancak düğüm sunduk, bu nedenle geri kalan kwargs toplanmıştır. ui nesnesi, durum ve hata iletilerini vermek için kullanılır. check_comment.py arasında

İçerik: hgrc olarak

#!/usr/bin/env python 

import re 

def check_comment(ui, repo, hooktype, node=None, **kwargs): 
    ui.status('Checking comment...\n') 
    comment = repo[node].description() 
    pattern = '^((Issue \d+:)|(No Issue:)).+' 
    if not re.match(pattern, comment, flags=re.IGNORECASE): 
     ui.warn('Comment does not match pattern. You must start it with "Issue 12323:" or "No Issue:"\n') 
     return True 

, kanca, bu gibi python:/path/to/file.py:function_name ile tanımlanacaktır: pretxncommit üzerine

[hooks] 
pretxncommit.check_comment = python:/path/to/check_comment.py:check_comment 

.suffix_name herhangi bir genel olarak tanımlanmış kanca geçersiz kılma önlemek için, özellikle bu, havuzun global yerine hgrc'da tanımlanmışsa. Son ekler, aynı kancaya birden fazla yanıt verilmesine nasıl izin verilir. Kanca örn aracılığıyla servis edilen depo üzerinde çalışan durumda

0

hgserve:
Ben

sunucu günlüğüne TortoiseHg tezgahı Günlüğü tavada

  • veya cmd hattında aynı çıktıyı

    • göstermek için bir pretxnchangegroup komut bu küçük Python işlevini kullanın:

      Sadece bir tahmin
      def log(ui, string): 
          print(string) # will show up as "remote:" on the client 
          ui.status("{0}\n".format(string)) # will show up in the same hg process: hgserve ; append newline 
          return