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

Автоматически добавлять svn: require-lock

Привет, мне было интересно, есть ли способ, чтобы SVN-сервер автоматически назначал свойство svn: needs-lock для любого файла, который является двоичным, а не текстовым.

У нас довольно небольшая команда разработчиков, но все, чтобы помнить о том, чтобы установить это свойство на вновь созданных двоичных файлах, не имеет смысла, так как очень легко забыть об этом.

4b9b3361

Ответ 1

Отредактируйте конфигурационный файл svn и добавьте запись для автоматического реквизита или используйте свойство svn:auto-props versioned с SVN 1.8 и более новыми клиентами. Прочитать SVNBook!

EDIT:

Из SVN 1.8 вы можете применить свойство svn:auto-props к корневому пути вашего репозитория. Смотрите примечание к выпуску и обновленный глава SVNBook 1.8.

Ответ 2

Apache Subversion 1.8 внедрила функцию репозитория Dictated Configuration, которая требует клиента SVN 1.8, но сервер 1.8 не нужен потому что это клиентская функция.

С Subversion 1.8 вы можете настроить шаблоны автоподпрограмм в репозитории, используя новое свойство Subversion svn:auto-props.

Например, установите значение svn:auto-props в значение *.exe = svn:needs-lock=* в корне вашего репозитория (или путь к репозиторию, представляющий корень проекта). Это приведет к каждому добавленному *.exe файлу, имеющему свойство svn:needs-lock=*.

Вы можете хранить многострочные значения в свойствах Subversion, поэтому вы можете добавить следующие стандартные параметры svn: needs-lock и MIME к svn:auto-props:

*.bmp = svn:mime-type=image/bmp;svn:needs-lock=*
*.gif = svn:mime-type=image/gif;svn:needs-lock=*
*.ico = svn:mime-type=image/x-icon;svn:needs-lock=*
*.jpeg = svn:mime-type=image/jpeg;svn:needs-lock=*
*.jpg = svn:mime-type=image/jpeg;svn:needs-lock=*
*.png = svn:mime-type=image/png;svn:needs-lock=*
*.tif = svn:mime-type=image/tiff;svn:needs-lock=*
*.tiff = svn:mime-type=image/tiff;svn:needs-lock=*    
*.doc = svn:mime-type=application/x-msword;svn:needs-lock=*
*.docx = svn:mime-type=application/x-msword;svn:needs-lock=*
*.jar = svn:mime-type=application/octet-stream;svn:needs-lock=*
*.odc = svn:mime-type=application/vnd.oasis.opendocument.chart;svn:needs-lock=*
*.odf = svn:mime-type=application/vnd.oasis.opendocument.formula;svn:needs-lock=*
*.odg = svn:mime-type=application/vnd.oasis.opendocument.graphics;svn:needs-lock=*
*.odi = svn:mime-type=application/vnd.oasis.opendocument.image;svn:needs-lock=*
*.odp = svn:mime-type=application/vnd.oasis.opendocument.presentation;svn:needs-lock=*
*.ods = svn:mime-type=application/vnd.oasis.opendocument.spreadsheet;svn:needs-lock=*
*.odt = svn:mime-type=application/vnd.oasis.opendocument.text;svn:needs-lock=*
*.pdf = svn:mime-type=application/pdf;svn:needs-lock=*
*.ppt = svn:mime-type=application/vnd.ms-powerpoint;svn:needs-lock=*
*.ser = svn:mime-type=application/octet-stream;svn:needs-lock=*
*.swf = svn:mime-type=application/x-shockwave-flash;svn:needs-lock=*
*.vsd = svn:mime-type=application/x-visio;svn:needs-lock=*
*.xls = svn:mime-type=application/vnd.ms-excel;svn:needs-lock=*
*.zip = svn:mime-type=application/zip;svn:needs-lock=*

Ответ 3

Следует отметить, что метод автоматического реквизита должен быть настроен для каждого используемого клиента SVN. Поэтому, когда вы настраиваете нового разработчика или существующего разработчика на новом компьютере, вам нужно запомнить эту конфигурацию.

Если вы все используете TortoiseSVN, вы можете установить tsvn: autoprops в базовой папке каждой проверки, и она будет выполняться всеми клиентами TortoiseSVN.

Если вы действительно хотите прибить его, вам нужно поместить pre-commit в каждый репозиторий. enforcer script может быть легко применен для этого.

Если у вас есть python-fu, RepoGuard (преемник SVNChecker), похоже, что это тоже может быть полезно.

Независимо от того, что вы выбираете, нет способа ретроактивно применить свойство к существующим файлам в репозитории, я думаю. Однако, возможно, вы можете применить его к следующему фиксации файла.

Ответ 4

Там находится страница в этой вики Subversion, в которой описываются все различные опции, как автоматически добавлять блокировку потребностей и как их гарантировать. На странице также приведены примеры сценариев и детали конфигурации:

http://www.orcaware.com/svn/wiki/Automatic_lock-modify-unlock

Ответ 5

Использовать крюк предварительной фиксации

#!/bin/bash

REPOS="$1"
TXN="$2"

SVNLOOK=/usr/bin/svnlook
ICONV=/usr/bin/iconv

SVNLOOKOK=1

# Check files for svn:needs-lock property
# Exit on all errors.
set -e

echo "`$SVNLOOK changed -t "$TXN" "$REPOS"`" | while read REPOS_PATH
do
 if [[ $REPOS_PATH =~ (A|M|U)[[:blank:]]{3}(.*)\.(.*) ]]
 then
  if [ ${#BASH_REMATCH[*]} -ge 2 ]
    then
  FILENAME=${BASH_REMATCH[2]}.${BASH_REMATCH[3]};

  # Make sure every file has the svn:needs-lock property set
   if [ "" == "`$SVNLOOK propget -t \"$TXN\" \"$REPOS\" svn:needs-lock \"$FILENAME\" 2> /dev/null`" ]
    then
    ERROR=1;
    echo "" >&2
    echo "svn:needs-lock property has to be set on \"$FILENAME\"" >&2
    echo "" >&2
   fi
  fi
 fi
 test -z $ERROR || (exit 1)
done

# All checks passed, so allow the commit.
exit 0

и крюк предварительной блокировки

#!/bin/bash

REPOS="$1"
PATH="$2"
USER="$3"

# If a lock exists and is owned by a different person, don't allow it
# to be stolen (e.g., with 'svn lock --force ...').

# (Maybe this script could send email to the lock owner?)
SVNLOOK=/usr/bin/svnlook
GREP=/bin/grep
SED=/bin/sed

LOCK_OWNER=`$SVNLOOK lock "$REPOS" "$PATH" | \
            $GREP '^Owner: ' | $SED 's/Owner: //'`

# If we get no result from svnlook, there no lock, allow the lock to
# happen:
if [ "$LOCK_OWNER" = "" ]; then
  exit 0
fi

# If the person locking matches the lock owner, allow the lock to
# happen:
if [ "$LOCK_OWNER" = "$USER" ]; then
  exit 0
fi