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.tmpl
의hooks
디렉토리 에서 파일 을 찾으십시오. - 파일을 같은 디렉토리에 복사하고 이름을 바꿉니다.
pre-revprop-change
- 파일에 대한 실행 권한 부여 (예 : 서버 사용자의 경우
www-data
)
편집 : (린드 덕분에)
- 그런 다음
0
허용하려는 편집 종류에 대한 종료 값을 반환하도록 스크립트를 편집해야 할 수도 있습니다 .
여기에 크로스 게시 된 Windows 용 후크 의 원래 소스를 포함하여 많은 공통 후크 공통 유형의 Subversion 후크 가있는 스택 오버플로 질문에 대한 링크가 pre-revprop-change
있습니다.
You should refer there as they may get improved over time.
Thanks #patmortech
And I added your code which "only the same user can change his code".
:: 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
The name of the hook script is not so scary if you manage decipher it: it's pre revision property change hook. In short, the purpose of pre-revprop-change
hook script is to control changes of unversioned (revision) properties and to send notifications (e.g. to send an email when revision property is changed).
There are 2 types of properties in Subversion:
- versioned properties (e.g
svn:needs-lock
andsvn:mime-type
) that can be set on files and directories, - unversioned (revision) properties (e.g.
svn:log
andsvn:date
) that are set on repository revisions.
Versioned properties have history and can be manipulated by ordinary users who have Read / Write access to a repository. On the other hand, unversioned properties do not have any history and serve mostly maintenance purpose. For example, if you commit a revision it immediately gets svn:date
with UTC time of your commit, svn:author
with your username and svn:log
with your commit log message (if you specified any).
As I already specified, the purpose of pre-revprop-change
hook script is to control changes of revision properties. You don't want everyone who has access to a repository to be able to modify all revision properties, so changing revision properties is forbidden by default. To allow users to change properties, you have to create pre-revprop-change
hook.
The simplest hook can contain just one line: exit 0
. It will allow any authenticated user to change any revision property and it should not be used in real environment. On Windows, you can use batch script or PowerShell-based script to implement some logic within pre-revprop-change
hook.
This PowerShell script allows to change svn:log
property only and denies empty log messages.
# 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
This batch script allows only "svnmgr" user to change revision properties:
IF "%3" == "svnmgr" (goto :label1) else (echo "Only the svnmgr user may change revision properties" >&2 )
exit 1
goto :eof
:label1
exit 0
For PC users: The .bat extension did not work for me when used on Windows Server maching. I used VisualSvn as Django Reinhardt suggested, and it created a hook with a .cmd extension.
'IT박스' 카테고리의 다른 글
특정 작업 공간에서 Eclipse 시작 (0) | 2020.05.31 |
---|---|
c ++ 11 반환 값 최적화 또는 이동? (0) | 2020.05.31 |
공통 라인을 표시하는 방법 (역방향 diff)? (0) | 2020.05.31 |
Ubuntu에서 32 비트에서 64 비트 프로그램을 크로스 컴파일 할 때 "bits / c ++ config.h"가 누락되었습니다. (0) | 2020.05.31 |
Visual Studio 2010에서 콘솔의 출력을보고 있습니까? (0) | 2020.05.31 |