2010-10-18 14 views
8

nasıl adlandırılmış dalına kaydedilmesini kısıtlamak için bir Mercurial sunucusu yapılandırabilirsiniz kapalı dallarına eklemek kaydedilmesini itme? Ben sadece depo yöneticisinin şubeyi yeniden açma yetkisine sahip olmasını istiyorum. önle kapatıldıktan sonra

https://www.mercurial-scm.org/wiki/PruningDeadBranches

kapalı changesets "değişiklik kümesi ekstra alanda yakın = 1" tarafından tespit edilebileceğini söylüyor. Mercurial API'u kullanarak bir değişimin ek alanını nasıl okuyacağı net değil.

+0

Lanet olsun! İnsanları yanlışlıkla şubelere teslim etmeyi durdurmak daha kolay olabilir. – Rory

+2

Herkes "taahhüt" diyerek devam ediyor ama sen "itmek" demek istiyorsun. Belirlenen bir göndericiyi asla engellemezsiniz, sadece itmeyi reddedersiniz. –

cevap

7

Mercurial birlikte dağıtıldığı bir ACL uzantısı yok. Yöneticiler dışında her birine taahhüt vermeyi reddederek dondurulmuş dalları belirtebilirsiniz. Adlandırılmış şubelerin bu özelliği kullanıp kullanamayacağından emin değilim.

Yapılandırılması acls: Bir sunucu kaydedilmesini kısıtlamaz, ancak kısıtlamaları ihlal iter kabul etmeyebilir

[acl.deny.branches] 
frozen-branch = * 

[acl.allow.branches] 
branch_name = admin 
4

. Burada kapalı bir dal üzerinde hiçbir changesets sahip herhangi iter reddetmek için bir sunucu üzerinde koyabileceğiniz bir kanca:

#!/bin/sh 
for thenode in $(hg log -r $HG_NODE:tip --template '{node}\n') ; do 
    if hg branches --closed | grep -q "^$(hg id --branch -r $thenode).*\(closed\)" ; then 
      echo Commits to closed branches are not allowed -- bad changeset $thenode 
      exit 1 
    fi 
done 

Böyle kancayı yüklemek istiyorum:

[hooks] 
prechangegroup = /path/to/that.sh 

neredeyse kesin var Başvuruda bulunduğunuz API ile in-python kancalarını kullanmanın bir yolu, ancak kabuk kancaları da gayet iyi çalışıyor.

+0

Bu cevabı reddetmesem de, bunun işe yaramayacağını belirtmek gerekir çünkü $ HG_NODE prechangegroup için mevcut değildir. Kancayı pretxnchangegroup'a sabitlemek maalesef çalışmaz, çünkü o zaman şubenin kapalı olup olmadığının değişmesi artık pretxnchangegroup'un değişim kümelerini geçici olarak eklediğinden ve böylelikle şube halihazırda yeniden açıldığından çalışmaz. Bir kabuk çengelini yazmayı tercih ediyorum ama yine de burada tartışılan belirli bir amaç için bunu nasıl yapacağını merak ediyorum. –

+0

Çalışmak için bu işi aldım. Yapabilecekleriniz, pretxnchangegroup hookunu kullanmak ve yukarıda listelenenlere benzer bir betik kullanmaktır. Her bir düğüm $ HG_NODE cinsinden olup olmadığını kontrol eder: ebeveynlerinden birinin ek alanlarında "close = 1" olup olmadığına dair ipucu. Hg log -r $ parentNode --template '{extras}' kullanabilirsiniz. grep -q "close = 1" son kontrolünü yapmak için. –

1

İşte kapalı dal üzerinde ek changesets reddetmek gereken bir işlem içi kanca bu.

from mercurial import context, ui 
def run(ui, repo, node, **kwargs): 
    ctx = repo[node] 
    for rev in xrange(ctx.rev(), len(repo)): 
     ctx = context.changectx(repo, rev) 
     parent1 = ctx.parents()[0] 
     if parent1 != None and parent1.extra().get('close'): 
      ui.warn("Commit to closed branch is forbidden!\n") 
      return True 
    return False 

(Yerel sırasında kontrol işlem taahhüt) pretxncommit modu veya pretxnchangegroup modunda çalışabilir kanca (işaretlendiğinde dış repo eklenen changesets) Aşağıdaki hgrc girişlerle:

[hooks] 
pretxncommit.forbid_commit_closed_branch = python:/path/to/forbid_commit_closed_branch.py:run 
pretxnchangegroup.forbid_commit_closed_branch = python:/path/to/forbid_commit_closed_branch.py:run 

emin değilim Bu kanca 2.2'den önce Mercurial sürümleriyle çalışacaktır.

İlgili konular