2010-07-22 16 views
18

kök olmayan dizinlerde mergeinfo. Ben o svn zorlamak istiyoruz geçerli: mergeinfo sadece "gövde" veya "dallar/BRANCHNAME" gibi dizinler ayarlanabilir olabilir. Geliştiricilerin bazen, birleştirme hedefi olarak kökün bir alt dizinini kullanmanın iyi bir uygulama olmadığını ("here listelenen en iyi uygulamalar)" hatırlatması gerekir. Herkesin böyle bir çete betiği var mı, nerede bulabileceğimi biliyor mu? Windows ortamındayım, bu yüzden parti veya powershell tercih edilebilir, ama her şey kesinlikle yardımcı olacaktır. Her şeydenSvn ön işlemeye svn izin vermemek için kanca: kök olmayan dizinlerde mergeinfo: Ben önceden taahhüt ayarı svn gelen geliştiriciler engeller kanca kullanmak istiyorum

+0

Kesin merakı - Eğer Subversion 1.5 veya 1.6 kullanıyor? (Ben de svn ellerinde acı çekmişti: mergeinfos, kök dizinlere/dizinlere bağlanan her türlü dizin/dosyada, ancak 1.5) –

+1

1,6'dayız. Sahip olduğum sorunlar, svn istemcisinin görünürdeki her şey için mergeinfo ayarladığı eski 1.5 hatalarından kaynaklanmıyor. Bunun yerine, bir kullanıcı "birleştirme hedefi olarak" trunk/mySubProject "gibi bir kök olmayan dizini kullanarak bir birleştirme gerçekleştiren" kullanıcı hatası "nedeniyle oluşur, bu nedenle bu dizinde birleştirme bilgisi ayarlayın. Bu, farkında olduğunuzdan emin olduğum gibi, sonraki birleşmeleri zorluyor. –

+0

Gerçekten - bilgi için teşekkürler. Biz sadece son zamanlarda 1,6'dayız, bu yüzden şeylerin nasıl değiştiğini gözlemlemek için zamanım olmadı. Yine de aynı sorunu ele almam gerekiyor. + Sık Kullanılan –

cevap

7

Birincisi, görevi yapmaya Perl veya Python kullanarak tavsiye ediyoruz, windows toplu çok arzulanan bırakır.

Sen başlamak http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ alınan bazı örnek komut dosyasını kullanabilirsiniz. Örneğin, verify-po.py komut kontrolleri kodlamalar ve yazar işlemeye izinlere sahip olup olmadığını commit-access-control.pl.in çek dosyası. Muhtemelen dizinleri özelliklerini değişmiş (ikincisi birinde gibi) komut fark svnlook istihdam ve düzenli ifade kullanarak şube veya etiket ister tekabül yolları aracılığıyla gider.

Güncelleme

Eğer aradığınızı gibi görünüyor enforcer pre-commit hook script buldum.

Bu kodun yaptığı o ilerleme işlem gözetleme svnlook kullanır. işleminden geçirilirken, yöneticisinin yöneticisinin nolu olup olmadığına bakmasını ve kabul edilebilir olup olmadığına karar vermesini sağlayan bir kanca setine çağrı yapar. bir dosya bir özellik eklendiğinde her satır için çağrıda beri

İçerdiği çeşitli yöntemler ve , aralarında() verify_property_line_added.

+0

görünüyor. Bu arada – Charles

+0

, Sorunuzun sonra svn kanca ile ilgilenen başladı ve ben (günlük mesaj ile kaydedilmesini yasaklayan ile başlayan) bazı uygulamak için gidiyorum ve muhtemelen taahhüt üzerine kontrol özelliklerini ulaşacak - o zaman burada bir başka güncelleştirme koyacağız . – pmod

0

sunucuda CPAN yapabiliyorsanız:

https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl

Değilse (http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969 göre):

REPOS="$1" 
TXN="$2" 
SVNLOOK=/usr/bin/svnlook 

if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q '\[override] ';) then 

    # Get list of paths which have changed  
    TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS") 

    # Filter those which are allowed: /trunk, /branches/*,... 
    TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$") 

    # Iterate over all paths, which are not allowed to have mergeinfo 
    while IFS= read -r TXN_PATH; do 
     ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-) 

     MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null) 
     if [ ! "$MERGEINFO" = "" ]; then 
     echo " Cannot merge into directory that is not trunk or a branch:" >&2; 
     echo " $ELEM_PATH" >&2; 
     echo " Override by using [override]." >&2; 
     exit 1; 
     fi  
    done <<< "$TXN_PATHS" 

    # echo "Merge info check: OK" 
fi