Подтвердить что ты не робот

Svn pre-commit hook для запрета svn: mergeinfo в каталогах, отличных от root

Я хотел бы использовать привязку pre-commit, которая запрещает разработчикам устанавливать svn: mergeinfo в каталогах, отличных от root. То есть, я хочу обеспечить, чтобы svn: mergeinfo можно было установить только в таких каталогах, как "trunk" или "branch/branchName". Разработчикам иногда нужно "напомнить", что не рекомендуется использовать подкаталог корня в качестве цели слияния (в соответствии с передовыми методами, перечисленными здесь). У кого-нибудь есть такой крючок script или знаете, где я могу его найти? Я нахожусь в среде Windows, поэтому было бы предпочтительнее пакетная или powershell, но все было бы полезно.

4b9b3361

Ответ 1

Прежде всего, я бы рекомендовал использовать perl или python для выполнения задачи, так как пакет окон оставляет желать лучшего.

Вы можете использовать пример script из http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ для начала. Например, verify-po.py script проверяет кодировки файлов, а commit -access-control.pl.in проверяет, имеет ли автор права на фиксацию. Вы, вероятно, использовали бы svnlook diff в своем script (как и в последнем), чтобы получить измененные свойства для каталогов и пройти через соответствующие пути, являются ли они ветвями или тегами, использующими регулярное выражение.

Обновление

Найден принудительный pre-commit hook script, который, как представляется, вы ищете.

Что делает этот script, он использует svnlook заглянет в транзакцию это прогресс. Когда он просеивается через транзакции, он вызывает набор крючки, которые позволяют хранилище администратора проверить, что происходит и решить, является ли это приемлемым.

Он содержит несколько методов и verify_property_line_added() среди них, поскольку он вызвал для каждой строки, добавленной к свойству в файл.

Ответ 2

Если вы можете использовать CPAN на сервере:

https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl

Если нет (на основе http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969):

REPOS="$1"
TXN="$2"
SVNLOOK=/usr/bin/svnlook

if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q '\[override] ';) then

    # Get list of paths which have changed      
    TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS")

    # Filter those which are allowed: /trunk, /branches/*,...
    TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$")

    # Iterate over all paths, which are not allowed to have mergeinfo
    while IFS= read -r TXN_PATH; do
      ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-)

      MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null)
      if [ ! "$MERGEINFO" = "" ]; then 
        echo "  Cannot merge into directory that is not trunk or a branch:" >&2;
        echo "  $ELEM_PATH" >&2;
        echo "  Override by using [override]." >&2;
        exit 1;
      fi      
    done <<< "$TXN_PATHS"

    # echo "Merge info check: OK"
fi