2009-11-10 4 views
23

कुछ उपयोगी Mercurial हुक क्या हैं जो आप पार आए हैं?उपयोगी Mercurial हुक

कुछ उदाहरण हुक Mercurial book में स्थित हैं:

मैं व्यक्तिगत रूप से इन बहुत उपयोगी नहीं मिल रहा है। मैं देखना चाहेंगे:

  • एकाधिक प्रमुखों
  • अस्वीकार मर्ज के साथ Changegroups (उपयोगी यदि आप उपयोगकर्ताओं को हमेशा rebase करना चाहते हैं)
    • , मर्ज के साथ Changegroups अस्वीकार जब तक संदेश प्रतिबद्ध विशेष स्ट्रिंग है अस्वीकार
  • फोगबगज़ या टीएफएस (बगजिला हुक के समान) के स्वचालित लिंक
  • ब्लैकलिस्ट, उन कुछ धक्काओं से इनकार कर देगा जिनमें कुछ बदलाव आईड्स थे। (उपयोगी अगर आप अन्य क्लोन से परिवर्तन खींचने के लिए एमक्यू का उपयोग करते हैं)

कृपया ऐसे हुक तक चिपके रहें जिनमें बैट और बैश, या पायथन है। इस तरह वे * निक्स और विंडोज उपयोगकर्ताओं दोनों द्वारा उपयोग किया जा सकता है।

+0

शायद इन सबवर्जन प्रश्नों से अधिक विचारों को प्राप्त किया जा सकता है: http://stackoverflow.com/questions/6155/common-types-of-subversion-hooks और http://stackoverflow.com/questions/884608/share- सामान्य-उपयोगी-svn-pre-commit-hooks ... – Macke

उत्तर

16

औपचारिक भंडारों के लिए मेरा पसंदीदा हुक वह है जो कई सिरों से इनकार करता है। यह बहुत अच्छा है जब आपके पास एक सतत एकीकरण प्रणाली है जिसे स्वचालित रूप से बनाने के लिए पोस्ट-मर्ज टिप की आवश्यकता होती है।

कुछ उदाहरण यहां हैं: MercurialWiki: TipsAndTricks - prevent a push that would create multiple heads

मैं 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 - यह शाखाकरण की अनुमति के रूप में और अधिक अच्छा है .... – gavenkoa

+0

दरअसल, वहां हैं कुछ अच्छे रूप हैं जो नामित शाखा में केवल एक ही सिर की अनुमति देते हैं (अज्ञात शाखाकरण भी शाखाकरण कर रहा है)। –

+1

@gavenkoa: लिंक http://hg.python.org/hooks/file/tip/checkheads.py (नहीं/टिप्स /) – Macke

8

मैं सिर्फ एक छोटे से pretxncommit हुक कि टैब और पिछली श्वेत रिक्ति और यह नहीं बल्कि अच्छी तरह से रिपोर्ट के लिए जाँच करता है बना लिया है उपयोगकर्ता को यह उन फ़ाइलों को साफ़ करने के लिए एक आदेश भी प्रदान करता है (या सभी फाइलें)।

CheckFiles एक्सटेंशन देखें।

5

यह एक और अच्छा हुक यह है। यह कई सिर की अनुमति देता है, लेकिन केवल तभी जब वे विभिन्न शाखाओं में हैं।

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

मैं शाखा हुक ऊपर उल्लेख प्रति एकल सिर की तरह है; हालांकि, branchtags() को branchmap() के साथ प्रतिस्थापित किया जाना चाहिए क्योंकि शाखाएं() अब उपलब्ध नहीं है। (मैं उस पर टिप्पणी नहीं कर सका इसलिए मैंने इसे यहां फंस लिया)।

मुझे फ्रोजन शाखाओं के लिए https://bobhood.wordpress.com/2012/12/14/branch-freezing-with-mercurial/ से हुक भी पसंद है।आप इस तरह से अपनी hgrc में एक अनुभाग जोड़ने:

[frozen_branches] 
freeze_list = BranchFoo, BranchBar 

और हुक जोड़ें:

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 

किसी को भी जमे हुए शाखाओं को अद्यतन करने का प्रयास करता है (उदाहरण के लिए, BranchFoo, BranchBar) लेन-देन निरस्त कर दिया जाएगा।