помочь с сценарием ловушки Subversion (SVN) - PullRequest
2 голосов
/ 18 декабря 2009

Как создать скрипт ловушки сервера Subversion, который запрещает людям вносить изменения, если они не владеют блокировкой файла вначале?

Svn сервер работает на Windows.

Спасибо.

P.S. Дополнительная информация в этом вопросе

Subversion (svn + tortoiseSvn) фиксирует не заблокированный файл

Ответы [ 2 ]

4 голосов
/ 18 декабря 2009

Используйте хук перед фиксацией. Хук Pre-commit получает 2 аргумента:

#   [1] REPOS-PATH   (the path to this repository)
#   [2] TXN-NAME     (the name of the txn about to be committed)

Вам нужно использовать svnlook, чтобы определить, есть ли файлы svn: needs-lock, которые не заблокированы.

Чтобы определить пути, измененные этим коммитом:

svnlook changed $1 --transaction $2

Проходить по файлам ($PATH как элемент цикла) в «измененном» и определять svn: needs-lock, и если они в данный момент заблокированы:

svnlook propget $REPOS-PATH svn:needs-lock $PATH
svnlook lock $1 $PATH

Напишите в stderr и верните ненулевое значение, чтобы прервать этот коммит при необходимости.

1 голос
/ 18 декабря 2009

Вы можете использовать <your repos directory>/hooks/pre-commit и использовать некоторые пакетные сценарии (или даже полноценную программу, если она будет выполняться). Если он вернет 0 , фиксация будет успешной; в противном случае это не удастся.

См. post-lock.tmpl в том же каталоге для примера.

# PRE-COMMIT HOOK
#
# The pre-commit hook is invoked before a Subversion txn is
# committed.  Subversion runs this hook by invoking a program
# (script, executable, binary, etc.) named 'pre-commit' (for which
# this file is a template), with the following ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] TXN-NAME     (the name of the txn about to be committed)
#
# The default working directory for the invocation is undefined, so
# the program should set one explicitly if it cares.
#
# If the hook program exits with success, the txn is committed; but
# if it exits with failure (non-zero), the txn is aborted, no commit
# takes place, and STDERR is returned to the client.   The hook
# program can use the 'svnlook' utility to help it examine the txn.
#
# On a Unix system, the normal procedure is to have 'pre-commit'
# invoke other programs to do the real work, though it may do the
# work itself too.
...