리포지토리 브라우저에서 로그 주석을 편집하고 리포지토리에 대한 pre-revprop-change 훅이 없다는 오류 메시지가 표시되었습니다. 무서운 이름 외에도 pre-revprop-change 후크는 무엇이며 어떻게 만들 수 있습니까?
리포지토리 브라우저에서 로그 주석을 편집하고 리포지토리에 대한 pre-revprop-change 훅이 없다는 오류 메시지가 표시되었습니다. 무서운 이름 외에도 pre-revprop-change 후크는 무엇이며 어떻게 만들 수 있습니까?
답변:
기본적으로 리포지토리에서 버전없는 속성을 수정하기 전에 시작되는 스크립트이므로 리포지토리에서 발생하는 상황을보다 정확하게 관리 할 수 있습니다.
/ hooks 서브 디렉토리 (OS에 따라 편집하고 이름을 바꾸고 활성화해야하는 * .tmpl)에있는 다른 후크에 대한 SVN 분배에는 템플리트가 있습니다.
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
)편집 : (린드 덕분에)
0
허용하려는 편집 종류에 대한 종료 값을 반환하도록 스크립트를 편집해야 할 수도 있습니다 .여기에 크로스 게시 된 Windows 용 후크 의 원래 소스를 포함하여 많은 공통 후크 공통 유형의 Subversion 후크 가있는 스택 오버플로 질문에 대한 링크가 pre-revprop-change
있습니다.
시간이 지남에 따라 개선 될 수 있으므로 참조하십시오.
감사합니다 #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
후크 스크립트 의 목적은 버전이없는 (수정) 속성의 변경 사항을 제어하고 알림을 보내는 것입니다 (예 : 수정 속성이 변경 될 때 전자 메일 보내기).
Subversion에는 두 가지 유형의 속성이 있습니다.
svn:needs-lock
및 svn:mime-type
)svn:log
및 svn:date
저장소에 설정된) 개정 .버전이 지정된 속성에는 기록이 있으며 리포지토리에 대한 읽기 / 쓰기 액세스 권한이있는 일반 사용자가 조작 할 수 있습니다. 반면, 버전이없는 속성에는 기록이 없으며 대부분 유지 관리 목적으로 사용됩니다. 예를 들어, 개정판을 커밋하면 커밋의 svn:date
UTC 시간 svn:author
과 사용자 이름 및 svn:log
커밋 로그 메시지 (지정한 경우) 가 즉시 표시됩니다.
이미 지정한 것처럼 pre-revprop-change
후크 스크립트 의 목적 은 개정 속성의 변경을 제어하는 것입니다. 리포지토리에 액세스하는 모든 사람이 모든 개정 속성을 수정할 수 없도록하려면 개정 속성을 변경하는 것이 기본적으로 금지됩니다. 사용자가 속성을 변경할 수있게하려면 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