ฉันต้องการแก้ไขความคิดเห็นบันทึกในเบราว์เซอร์ที่เก็บและได้รับข้อความแสดงข้อผิดพลาดว่าไม่มีการขอ pre-revprop-change hook สำหรับที่เก็บ นอกจากชื่อที่น่ากลัวแล้วตะขอ pre-revprop-change คืออะไรและฉันจะสร้างมันได้อย่างไร
ฉันต้องการแก้ไขความคิดเห็นบันทึกในเบราว์เซอร์ที่เก็บและได้รับข้อความแสดงข้อผิดพลาดว่าไม่มีการขอ pre-revprop-change hook สำหรับที่เก็บ นอกจากชื่อที่น่ากลัวแล้วตะขอ pre-revprop-change คืออะไรและฉันจะสร้างมันได้อย่างไร
คำตอบ:
โดยพื้นฐานแล้วมันเป็นสคริปต์ที่เปิดตัวก่อนที่คุณสมบัติที่ไม่มีการเปลี่ยนแปลงจะถูกแก้ไขบนที่เก็บเพื่อให้คุณสามารถจัดการสิ่งที่เกิดขึ้นบนที่เก็บของคุณได้แม่นยำยิ่งขึ้น
มีเทมเพลตใน SVN distrib สำหรับ hooks ที่แตกต่างกันซึ่งอยู่ในไดเรกทอรีย่อย / hooks (* .tmpl ที่คุณต้องแก้ไขและเปลี่ยนชื่อทั้งนี้ขึ้นอยู่กับระบบปฏิบัติการของคุณเพื่อเปิดใช้งาน)
svnsync
มิเรอร์สคริปต์เริ่มต้นจะต้องเปลี่ยนเพราะอนุญาตการเปลี่ยนแปลง svn: log เท่านั้น Svnsync เปลี่ยนแปลงมากกว่านี้ดังนั้นฉันเพียงแค่ใส่เข้าไปที่exit 0
นั่นเพื่ออนุญาตการเปลี่ยนแปลงคุณสมบัติทั้งหมด (เนื่องจากนี่เป็นภาพสะท้อนสำหรับฉันเท่านั้น)
pre-revprop-change
ไดเรกทอรีเดียวกันและทำให้สามารถเรียกใช้งานได้สำหรับผู้ใช้เว็บเซิร์ฟเวอร์ (บน Linux)
สำหรับ Windows นี่คือลิงค์ไปยังไฟล์แบตช์ตัวอย่างที่อนุญาตการเปลี่ยนแปลงข้อความบันทึกเท่านั้น (ไม่ใช่คุณสมบัติอื่น):
http://ayria.livejournal.com/33438.html
โดยทั่วไปคัดลอกรหัสด้านล่างลงในไฟล์ข้อความและตั้งชื่อpre-revprop-change.bat
และบันทึกไว้ใน\hooks
ไดเรกทอรีย่อยสำหรับที่เก็บของคุณ
@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
สำหรับ Linux เพื่ออนุญาตรุ่นของข้อคิดเห็นการบันทึก
pre-revprop-change.tmpl
ในhooks
ไดเรกทอรีของที่เก็บของคุณpre-revprop-change
www-data
)แก้ไข: (ขอบคุณ lindes)
0
สำหรับประเภทการแก้ไขที่คุณต้องการอนุญาตนี่คือลิงค์ไปยังคำถามสแต็คล้นที่มี hooks ทั่วไปหลาย ๆประเภท Common of Subversion Hooksรวมถึงต้นฉบับดั้งเดิมของpre-revprop-change
hook สำหรับการโพสต์ไขว้ของ Windows ที่นี่
คุณควรอ้างอิงที่นั่นเนื่องจากอาจมีการปรับปรุงเมื่อเวลาผ่านไป
ขอบคุณ #patmortech
และฉันได้เพิ่มรหัสของคุณซึ่ง "ผู้ใช้เดียวกันเท่านั้นที่สามารถเปลี่ยนรหัสของเขา"
:: 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
ชื่อของสคริปต์เบ็ดคือไม่ได้น่ากลัวดังนั้นหากคุณจัดการถอดรหัสมัน: มันก่อนการแก้ไขเปลี่ยนแปลงคุณสมบัติเบ็ด ในระยะสั้นวัตถุประสงค์ของpre-revprop-change
hook script คือเพื่อควบคุมการเปลี่ยนแปลงคุณสมบัติ unversioned (revision) และเพื่อส่งการแจ้งเตือน (เช่นส่งอีเมลเมื่อมีการเปลี่ยนแปลงคุณสมบัติการแก้ไข)
คุณสมบัติการโค่นล้มมี 2 ประเภท:
svn:needs-lock
และsvn:mime-type
) ที่สามารถตั้งค่าในไฟล์และไดเรกทอรีsvn:log
และsvn:date
) ที่ตั้งอยู่บนพื้นที่เก็บข้อมูลการแก้ไขคุณสมบัติที่กำหนดเวอร์ชันมีประวัติและสามารถจัดการได้โดยผู้ใช้ทั่วไปที่มีสิทธิ์เข้าถึงแบบอ่าน / เขียนในที่เก็บ ในทางกลับกันคุณสมบัติที่ไม่มีการพลิกผันไม่มีประวัติใด ๆ และให้บริการเพื่อการบำรุงรักษาเป็นส่วนใหญ่ ตัวอย่างเช่นหากคุณยอมรับการแก้ไขจะได้รับทันทีsvn:date
ด้วยเวลา UTC ของการส่งมอบsvn:author
พร้อมชื่อผู้ใช้และsvn:log
ข้อความบันทึกการกระทำ (หากคุณระบุไว้)
ตามที่ฉันได้ระบุไว้วัตถุประสงค์ของpre-revprop-change
hook script คือเพื่อควบคุมการเปลี่ยนแปลงคุณสมบัติการแก้ไข คุณไม่ต้องการให้ทุกคนที่สามารถเข้าถึงที่เก็บสามารถแก้ไขคุณสมบัติการแก้ไขทั้งหมดได้ดังนั้นการแก้ไขคุณสมบัติการแก้ไขจะถูกห้ามโดยค่าเริ่มต้น เพื่อให้ผู้ใช้สามารถเปลี่ยนคุณสมบัติได้คุณต้องสร้างpre-revprop-change
เบ็ด
exit 0
เบ็ดง่ายสามารถมีเพียงหนึ่งบรรทัด: จะอนุญาตให้ผู้ใช้ที่ได้รับการรับรองความถูกต้องเปลี่ยนแปลงคุณสมบัติการแก้ไขใด ๆ และไม่ควรใช้ในสภาพแวดล้อมจริง บน Windows คุณสามารถใช้ชุดสคริปต์หรือสคริปต์ที่ใช้ PowerShell เพื่อใช้ตรรกะบางอย่างภายในpre-revprop-change
เบ็ด
สคริปต์ PowerShell นี้อนุญาตให้เปลี่ยนsvn:log
คุณสมบัติเท่านั้นและปฏิเสธข้อความบันทึกว่างเปล่า
# 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
ชุดสคริปต์นี้อนุญาตให้เฉพาะผู้ใช้ "svnmgr" เพื่อเปลี่ยนคุณสมบัติการแก้ไข:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0
สำหรับผู้ใช้พีซี: นามสกุล. bat ใช้ไม่ได้กับฉันเมื่อใช้กับ Windows Server maching ฉันใช้ VisualSvn ตามที่แนะนำ Django Reinhardt และสร้าง hook ด้วยนามสกุล. cmd
(วิธีนี้มีข้อเสียอย่างแน่นอนเนื่องจากไม่มีการตรวจสอบ / ต้องห้าม แต่สำหรับกรณีของฉัน - repo ในพื้นที่ที่ฉันใช้อยู่ - ดูเหมือนว่าจะใช้งานได้)