SVN'de revprop değiştirme öncesi kanca nedir ve nasıl oluştururum?


169

Depo tarayıcısında bir günlük açıklamasını düzenlemek istedim ve depo için ön-değişiklik-değiştirme kancasının bulunmadığına dair bir hata iletisi aldım. Korkunç bir isme sahip olmanın yanı sıra, revprop değiştirme öncesi kanca nedir ve nasıl oluştururum?


16
şimdi bu bağlantı bu soruna bir bağlantı hemen sonra ikinci bağlantı :)
ULysses

Hakkında bağlantı ÇOK eski SVNBook 1.0 yol açar. Şu anki 1.7 ve 1.8 (gece): svnbook.red-bean.com/en/1.8
bahrep

Yanıtlar:


52

Temel olarak, depoda sürümlenmemiş özellik değiştirilmeden önce başlatılan bir komut dosyasıdır, böylece deponuzda olanları daha kesin bir şekilde yönetebilirsiniz.

SVN dağıtımında, / hooks alt dizininde (etkinleştirmek için işletim sisteminize bağlı olarak düzenlemek ve yeniden adlandırmanız gereken * .tmpl) bulunan farklı kancalar için şablonlar vardır.


2
Tüm talimatlar kanca şablonu komut dosyasındadır. Bir svnsyncayna için kancaya ihtiyacınız varsa , varsayılan komut dosyasının değiştirilmesi gerekir, çünkü yalnızca svn: log değişikliklerine izin verir. Svnsync bundan daha fazla değişir, bu yüzden sadece exit 0tüm özellik değişikliklerine izin vermek için oraya koydum (çünkü bu sadece benim için bir ayna).
Matt Connolly

... daha sonra pre-revprop-changeaynı dizine kaydedin ve web sunucusu kullanıcısı için çalıştırılabilir hale getirin (Linux'ta).
Mateng

209

Windows için, yalnızca günlük iletisinde değişiklik yapılmasına izin veren örnek bir toplu iş dosyasına bağlantı (diğer özelliklerde değil):

http://ayria.livejournal.com/33438.html

Temel olarak aşağıdaki kodu bir metin dosyasına kopyalayın ve adlandırın pre-revprop-change.batve \hookshavuzunuz için alt dizine kaydedin.

@ECHO OFF
:: Set all parameters. Even though most are not used, in case you want to add
:: changes that allow, for example, editing of the author or addition of log messages.
set repository=%1
set revision=%2
set userName=%3
set propertyName=%4
set action=%5

:: Only allow the log message to be changed, but not author, etc.
if /I not "%propertyName%" == "svn:log" goto ERROR_PROPNAME

:: Only allow modification of a log message, not addition or deletion.
if /I not "%action%" == "M" goto ERROR_ACTION

:: Make sure that the new svn:log message is not empty.
set bIsEmpty=true
for /f "tokens=*" %%g in ('find /V ""') do (
set bIsEmpty=false
)
if "%bIsEmpty%" == "true" goto ERROR_EMPTY

goto :eof

:ERROR_EMPTY
echo Empty svn:log messages are not allowed. >&2
goto ERROR_EXIT

:ERROR_PROPNAME
echo Only changes to svn:log messages are allowed. >&2
goto ERROR_EXIT

:ERROR_ACTION
echo Only modifications to svn:log revision properties are allowed. >&2
goto ERROR_EXIT

:ERROR_EXIT
exit /b 1

37
Buradaki sürüme bağlanmış olabilir stackoverflow.com/questions/6155/… . Bu kancayı yazdım ve bir süre önce SVN forumuna gönderdim. Sanırım kanca yorumlarına bir miktar kredi koymalıydım.
Philibert Perusse

1
Bu komut dosyasını VisualSVN 2.0.8 ve TortoiseSVN 1.6.11 ile kullanıyorum ve güzel çalışıyor.
Mark Biek

27
VisualSVN sunucusunda havuz adınızı sağ tıklatıp "Özellikler ..." seçeneğini belirleyerek VisualSVN'deki kancaları düzenleyebilirsiniz. Bir "Kancalar" sekmesi göreceksiniz. Orada farklı kanca türlerini göreceksiniz. Doğru olanı seçin, "Düzenle" yi tıklayın ve yukarıdaki kodu buraya yapıştırın. VisualSVN kullanıcılarına yardımcı olacağını umuyoruz!
Chuck Le Butt

Benim için çalıştı satır: devre dışı / ben "% action%" == "M" ERROR_ACTION gidin. Aksi takdirde, sadece değişikliklere izin verildiğini söylemeye devam etti.
Nathan

6
Pencereler için hızlı ve kirli yöntem, hooks \ pre-revprop-change.bat adlı boş bir dosya oluşturmaktır
Ben Claar

18

Linux'un bir günlük yorumu yayınlamasına izin vermesi için,

  • dosyayı bulmak pre-revprop-change.tmpliçinde hooksDeponuzun dizinine
  • dosyayı aynı dizine kopyalayın ve yeniden adlandırın pre-revprop-change
  • dosyaya yürütme izni verme (sunucu kullanıcısı için, örneğin www-data)

Düzenlendi: (lindes sayesinde)

  • bundan sonra 0izin vermek istediğiniz düzenleme türünün çıkış değerini döndürmek için komut dosyasını düzenlemeniz gerekebilir .

Bu yetersiz ... hala çıkış değerlerini uygun şekilde değiştirmek gerekiyor. Ama yine de yararlı buldum, bakmak için doğru yere bir işaretçi olarak ... diğer cevaplardan bazılarının eksik olduğunu veya pencerelere özgü cevaplar verdiğini gördüm. Bunun için teşekkürler.
16'da

1
Eminim, Ubuntu Linux versiyonumda kopyalama ve izin verme yeterliydi. Ama artık kesin olarak bilmiyorum. Cevabı buna göre düzenledim. Teşekkürler.
Alois Heimer

2 gün önce denediğimde olduğu gibi benim için işe yaramadığından eminim ve bu yorumu ekledim. Düzenleme ile birlikte, bu cevap benim için çalışıyor.
16:50

11

Burada birçok çapraz kanca ile yığın taşma sorusuna bağlantı Burada çapraz çapraz Windows için kanca orijinal kaynağı da dahil olmak üzere Yaygın Subversion Kanca Türleripre-revprop-change .

Zaman içinde gelişebileceğinden oraya başvurmalısınız.


7

Teşekkürler #patmortech

Ve "sadece aynı kullanıcı kodunu değiştirebilir" kodunu ekledim.

:: Only allow editing of the same user.
for /f "tokens=*" %%a in ( 
'"%VISUALSVN_SERVER%\bin\svnlook.exe" author -r %revision% %repository%') do ( 
set orgAuthor=%%a
)
if /I not "%userName%" == "%orgAuthor%" goto ERROR_SAME_USER

4

Şifre komut dosyasının adı, deşifre etmeyi yönetirseniz çok korkutucu değildir: revizyon öncesi özellik değiştirme kancasıdır . Kısacası, pre-revprop-changekanca komut dosyasının amacı, sürüm (özellik) özelliklerindeki değişiklikleri kontrol etmek ve bildirim göndermek (ör. Revizyon özelliği değiştirildiğinde e-posta göndermek).

Subversion'da 2 tip mülk vardır:

  • dosyalarda ve dizinlerde ayarlanabilen sürüm özellikleri (ör. svn:needs-lockve svn:mime-type),
  • depo revizyonlarında ayarlanmış sürüm (revizyon) özellikleri (ör. svn:logve svn:date) .

Sürümlendirilmiş özelliklerin geçmişi vardır ve bir depoya Okuma / Yazma erişimi olan sıradan kullanıcılar tarafından değiştirilebilir. Öte yandan, sürüm bilgisi olmayan mülklerin geçmişi yoktur ve çoğunlukla bakım amacına hizmet ederler. Örneğin, bir düzeltme yaparsanız derhal işleminizin svn:dateUTC saati, svn:authorkullanıcı adınız ve işlem svn:logkaydı iletiniz (varsa) ile birlikte gelir.

Daha önce belirttiğim gibi, pre-revprop-changekanca betiğinin amacı revizyon özelliklerindeki değişiklikleri kontrol etmektir. Bir depoya erişimi olan herkesin tüm düzeltme özelliklerini değiştirmesini istemezsiniz, bu nedenle varsayılan olarak düzeltme özelliklerini değiştirmek yasaktır. Kullanıcıların özellikleri değiştirmesine izin vermek için pre-revprop-changekanca oluşturmanız gerekir .

En basit kanca sadece bir satır içerebilir: exit 0. Kimliği doğrulanmış herhangi bir kullanıcının herhangi bir revizyon özelliğini değiştirmesine izin verir ve gerçek ortamda kullanılmamalıdır. Windows'da, pre-revprop-changekanca içine bazı mantık uygulamak için toplu komut dosyasını veya PowerShell tabanlı komut dosyasını kullanabilirsiniz .

Bu PowerShell betiği svn:logyalnızca özelliği değiştirmeye izin verir ve boş günlük iletilerini reddeder.

# Store hook arguments into variables with mnemonic names
$repos    = $args[0]
$rev      = $args[1]
$user     = $args[2]
$propname = $args[3]
$action   = $args[4]

# Only allow changes to svn:log. The author, date and other revision
# properties cannot be changed
if ($propname -ne "svn:log")
{
  [Console]::Error.WriteLine("Only changes to 'svn:log' revision properties are allowed.")
  exit 1
}

# Only allow modifications to svn:log (no addition/overwrite or deletion)
if ($action -ne "M")
{
  [Console]::Error.WriteLine("Only modifications to 'svn:log' revision properties are allowed.")
  exit 2
}

# Read from the standard input while the first non-white-space characters
$datalines = ($input | where {$_.trim() -ne ""})
if ($datalines.length -lt 25)
{
  # Log message is empty. Show the error.
  [Console]::Error.WriteLine("Empty 'svn:log' properties are not allowed.")
  exit 3
}

exit 0

Bu toplu komut dosyası yalnızca "svnmgr" kullanıcısının düzeltme özelliklerini değiştirmesine izin verir:

IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )

exit 1
goto :eof

:label1
exit 0

2

PC kullanıcıları için: Windows Server işlemede kullanıldığında .bat uzantısı benim için çalışmadı. VisualSvn'ı Django Reinhardt'ın önerdiği gibi kullandım ve .cmd uzantılı bir kanca oluşturdu.


0
  1. SVN repo dizinine "hooks" alt klasörüne gidin, örneğin "D: \ SVN \ hooks \"
  2. orada "pre-revprop-change.bat" boş dosyasını oluşturun
  3. dosyaya "çıkış 0" yaz ("" olmadan) ve kaydet
  4. zevk almak :)

(Bu çözüm kesinlikle hiçbir şey kontrol edilmediği / yasaklanmadığı için dezavantajlara sahiptir. Ama benim durumum için - sadece kullandığım yerel bir repo - işe yarıyor gibi görünüyor.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.