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


168

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


16
이제이 링크는이 질문에 대한 링크 직후 두 번째 링크입니다 :)
ULysses

관련 링크는 매우 오래된 SVNBook 1.0으로 연결됩니다. 현재 하나는 1.7과 1.8입니다 (밤마다) : svnbook.red-bean.com/en/1.8
bahrep

답변:


52

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

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


2
모든 지시 사항은 후크 템플리트 스크립트에 있습니다. svnsync미러에 대한 후크가 필요한 경우 svn : log에 대한 변경 만 허용하므로 기본 스크립트를 변경해야합니다. Svnsync는 이것보다 더 많이 변경되므로 exit 0모든 속성 변경을 허용하기 위해 단순히 거기에 넣습니다 (이것은 나를 위해 거울이기 때문에).
Matt Connolly

... pre-revprop-change같은 디렉토리에 다른 이름으로 저장 하고 웹 서버 사용자 (Linux)에서 실행 가능하게하십시오.
Mateng

209

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

37
stackoverflow.com/questions/6155/… 의 버전에 링크했을 수 있습니다 . 나는 그 후크를 작성하고 SVN 포럼에 얼마 전에 게시했습니다. 나는 후크 주석에 약간의 크레딧을 넣어야한다고 생각합니다.
Philibert Perusse

1
VisualSVN 2.0.8 및 TortoiseSVN 1.6.11과 함께이 스크립트를 사용하고 있으며 잘 작동합니다.
Mark Biek

27
VisualSVN Server에서 저장소 이름을 마우스 오른쪽 단추로 클릭하고 "속성 ..."을 선택하여 VisualSVN에서 후크를 편집 할 수 있습니다. "후크"탭이 나타납니다. 거기에는 다양한 유형의 후크가 있습니다. 올바른 것을 선택하고 "편집"을 클릭 한 다음 위의 코드를 붙여 넣으십시오. VisualSVN 사용자에게 도움이되기를 바랍니다.
Chuck Le Butt

줄을 사용하지 않도록 설정했습니다 ./I "% action %"== "M"이 아닌 경우 ERROR_ACTION으로 이동하십시오. 다른 방법으로, 수정 만 허용한다고 계속 말하였습니다.
Nathan

6
창에 대한 신속하고 더러운 방법이라고 후크 사전 revprop-change.bat \ 빈 파일 생성하는 것입니다
벤 Claar

18

Linux가 로그 주석의 편집을 허용하려면

  • 저장소 pre-revprop-change.tmplhooks디렉토리 에서 파일 을 찾으십시오.
  • 파일을 같은 디렉토리에 복사하고 이름을 바꿉니다. pre-revprop-change
  • 파일에 대한 실행 권한 부여 (예 : 서버 사용자의 경우 www-data)

편집 : (린드 덕분에)

  • 그런 다음 0허용하려는 편집 종류에 대한 종료 값을 반환하도록 스크립트를 편집해야 할 수도 있습니다 .

이것은 충분하지 않습니다 ... 여전히 종료 값을 적절히 변경해야합니다. 그러나 어쨌든 도움이된다는 것을 알기 위해 올바른 장소에 대한 포인터 ... 다른 답변이 부족하거나 창 별 답변을 제공합니다. 감사합니다.
lindes

1
나는 Ubuntu Linux 버전에서 복사하고 권한을 부여하는 것으로 충분하다고 확신합니다. 그러나 나는 더 이상 확실하지 않다. 그에 따라 답변을 편집했습니다. 감사.
Alois Heimer

글쎄, 2 일 전에 시도했을 때 그대로 작동하지 않는다고 확신 하고이 의견을 추가했습니다. 그러나 편집을 통해이 답변이 효과적입니다.
lindes

11

여기에 크로스 게시 된 Windows 용 후크 의 원래 소스를 포함하여 많은 공통 후크 공통 유형의 Subversion 후크 가있는 스택 오버플로 질문에 대한 링크가 pre-revprop-change있습니다.

시간이 지남에 따라 개선 될 수 있으므로 참조하십시오.


7

감사합니다 #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

4

훅 스크립트의 이름은 해독 할 때 그렇게 두렵지 않습니다 : 사전 개정 속성 변경 훅 입니다. 즉, 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

2

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


0
  1. SVN repo 디렉토리로 이동하여 하위 폴더 "후크"(예 : "D : \ SVN \ hooks \")로 이동하십시오.
  2. 빈 파일 "pre-revprop-change.bat"를 작성하십시오.
  3. 파일에 "exit 0"( ""없이)을 작성하고 저장하십시오.
  4. 즐겨 :)

(이 솔루션은 확인되거나 금지 된 것이 없으므로 단점이 있습니다.하지만 내 경우-내가 사용하는 로컬 저장소-작동하는 것 같습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.