Автоматически добавлять svn: needs-lock - PullRequest
21 голосов
/ 02 апреля 2009

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

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

Ответы [ 5 ]

22 голосов
/ 02 сентября 2013

В Apache Subversion 1.8 появилась функция Repository 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=*
14 голосов
/ 02 апреля 2009

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

EDIT:

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

5 голосов
/ 03 апреля 2009

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

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

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

Если у вас есть Python-fu, RepoGuard (преемник SVNChecker ) выглядит так, как будто он тоже может быть полезен.

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

2 голосов
/ 15 января 2010

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

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

1 голос
/ 25 сентября 2014

Использовать хук до фиксации

#!/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's no lock, allow the lock to
# happen:
if [ "$LOCK_OWNER" = "" ]; then
  exit 0
fi

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