2009-11-10 13 views
23

Jakie są przydatne haki Mercurial, z którymi się zetknąłeś?Przydatne haki rtęciowe

kilka przykładów haki znajdują się w Mercurial book:

Ja osobiście nie znaleźć te bardzo przydatne. Chciałbym zobaczyć:

  • Odrzuć wiele głowic
  • Odrzuć Changegroups z scala (przydatne, jeśli użytkownicy zawsze rebase)
    • Odrzuć Changegroups z scala, chyba popełnić komunikat ma specjalny ciąg
  • Automatyczne linki do Fogbugz lub TFS (podobne do haka bugzilli)
  • Czarna lista, odmówiłaby wypychania, które miały pewne identyfikatory zestawu zmian. (Przydatne, jeśli używasz MQ do pobierania zmian z innych klonów)

Trzymaj się haków, które mają nietoperza i bash, lub Python. W ten sposób mogą być używane przez użytkowników * nix i Windows.

+0

Być może więcej pomysłów można uzyskać z tych pytań Subversion: http://stackoverflow.com/questions/6155/common-types-of-subversion-hooks i http://stackoverflow.com/questions/884608/share- common-useful-svn-pre-commit-hooks ... – Macke

Odpowiedz

16

Mój ulubiony haczyk do oficjalnych repozytoriów to ten, który odmawia wielu głów. To wspaniale, gdy masz system ciągłej integracji, który potrzebuje końcówki po scaleniu do automatycznego tworzenia.

kilka przykładów tutaj: MercurialWiki: TipsAndTricks - prevent a push that would create multiple heads

używam tej wersji z Netbeans:

# This software may be used and distributed according to the terms 
# of the GNU General Public License, incorporated herein by reference. 
# 
# To forbid pushes which creates two or more headss 
# 
# [hooks] 
# pretxnchangegroup.forbid_2heads = python:forbid2_head.forbid_2heads 

from mercurial import ui 
from mercurial.i18n import gettext as _ 

def forbid_2heads(ui, repo, hooktype, node, **kwargs): 
    if len(repo.heads()) > 1: 
     ui.warn(_('Trying to push more than one head, try run "hg merge" before it.\n')) 
     return True 
+4

http://hg.python.org/hooks/file/tips/checkheads.py - to lepiej, niż pozwolić na rozgałęzianie ... – gavenkoa

+0

Rzeczywiście, istnieją kilka fajnych wariantów, które umożliwiają tylko jedną głowę na nazwaną gałąź (rozgałęzienie anonimowe również się rozgałęzia). –

+1

@gavenkoa: Link powinien być http://hg.python.org/hooks/file/tip/checkheads.py (not/tips /) – Macke

8

Właśnie stworzył mały haczyk pretxncommit który sprawdza zakładek i końcowe białe znaki i raportów raczej ładnie do użytkownika. Zawiera również polecenie czyszczenia tych plików (lub wszystkich plików).

Zobacz rozszerzenie .

5

Kolejny dobry haczyk to ten. Pozwala na wiele głowic, ale tylko wtedy, gdy znajdują się w różnych gałęziach.

Single head per branch

def hook(ui, repo, **kwargs): 
    for b in repo.branchtags(): 
     if len(repo.branchheads(b)) > 1: 
      print "Two heads detected on branch '%s'" % b 
      print "Only one head per branch is allowed!" 
      return 1 
    return 0 
0

Lubię jednolitego sztuk na haku Oddziału wymienionych powyżej; jednak należy zastąpić branchtags() przez branchmap(), ponieważ branchtags() nie jest już dostępny. (Nie mogłem tego skomentować, więc go tu umieściłem).

Podoba mi się również hak z https://bobhood.wordpress.com/2012/12/14/branch-freezing-with-mercurial/ dla Frozen Oddziałów.Dodasz sekcję w hgrc tak:

[frozen_branches] 
freeze_list = BranchFoo, BranchBar 

i dodać haczyk:

def frozenbranches(ui, repo, **kwargs): 
    hooktype = kwargs['hooktype'] 
    if hooktype != 'pretxnchangegroup': 
     ui.warn('frozenbranches: Only "pretxnchangegroup" hooks are supported by this hook\n') 
     return True 
    frozen_list = ui.configlist('frozen_branches', 'freeze_list') 
    if frozen_list is None: 
     # no frozen branches listed; allow all changes 
     return False 
    try: 
     ctx = repo[kwargs['node']] 
     start = ctx.rev() 
     end = len(repo) 

     for rev in xrange(start, end): 
      node = repo[rev] 
      branch = node.branch() 
      if branch in frozen_list: 
       ui.warn("abort: %d:%s includes modifications to frozen branch: '%s'!\n" % (rev, node.hex()[:12], branch)) 
       # reject the entire changegroup 
       return True 
    except: 
     e = sys.exc_info()[0] 
     ui.warn("\nERROR !!!\n%s" % e) 
     return True 

    # allow the changegroup 
    return False 

Jeśli ktoś próbuje zaktualizować zamrożone oddziałów (np BranchFoo, BranchBar) transakcja zostanie przerwana.