[svn] SVN의 사전 개정판 변경 후크 란 무엇이며 어떻게 작성합니까?

리포지토리 브라우저에서 로그 주석을 편집하고 리포지토리에 대한 pre-revprop-change 훅이 없다는 오류 메시지가 표시되었습니다. 무서운 이름 외에도 pre-revprop-change 후크는 무엇이며 어떻게 만들 수 있습니까?



답변

기본적으로 리포지토리에서 버전없는 속성을 수정하기 전에 시작되는 스크립트이므로 리포지토리에서 발생하는 상황을보다 정확하게 관리 할 수 ​​있습니다.

/ hooks 서브 디렉토리 (OS에 따라 편집하고 이름을 바꾸고 활성화해야하는 * .tmpl)에있는 다른 후크에 대한 SVN 분배에는 템플리트가 있습니다.


답변

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.tmplhooks디렉토리 에서 파일 을 찾으십시오.
  • 파일을 같은 디렉토리에 복사하고 이름을 바꿉니다. 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-locksvn:mime-type)
  • 버전없는 (개정) 속성 (예 : svn:logsvn:date저장소에 설정된) 개정 .

버전이 지정된 속성에는 기록이 있으며 리포지토리에 대한 읽기 / 쓰기 액세스 권한이있는 일반 사용자가 조작 할 수 있습니다. 반면, 버전이없는 속성에는 기록이 없으며 대부분 유지 관리 목적으로 사용됩니다. 예를 들어, 개정판을 커밋하면 커밋의 svn:dateUTC 시간 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


답변

PC 사용자의 경우 : Windows Server Maching에서 .bat 확장자가 작동하지 않았습니다. Django Reinhardt가 제안한 것처럼 VisualSvn을 사용했으며 확장명이 .cmd 인 후크를 만들었습니다.