web-dev-qa-db-ja.com

svn:needs-lockを自動的に追加します

こんにちは私は、SVNサーバーがバイナリでテキストではないファイルにsvn:needs-lockプロパティを自動的に割り当てる方法があるかどうか疑問に思いました。

私たちにはかなり小さな開発者チームがいますが、新しく作成されたバイナリファイルにこのプロパティを設定することを忘れないでください。そのようなことを忘れがちなので、意味がありません。

21

Svn構成ファイルを編集して自動小道具のエントリを追加するか、SVN1.8以降のクライアントでsvn:auto-propsバージョン管理されたプロパティを使用します。 SVNBookを読む

編集:

SVN 1.8から、リポジトリのルートパスにsvn:auto-propsプロパティを適用できます。これを参照してください リリースノート そして更新されました SVNBook 1.8の章

14
Stefan

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=*
22
bahrep

Auto propsメソッドは、使用されている各SVNクライアントで構成する必要があることに注意してください。したがって、新しい開発者、または新しいマシンで既存の開発者をセットアップするときは、この構成を実行することを忘れないでください。

すべて TortoiseSVN を使用している場合は、各チェックアウトのベースフォルダーに tsvn:autoprops プロパティを設定でき、すべてのTortoiseSVNクライアントに適用されます。

本当に釘付けにしたい場合は、各リポジトリに pre-commit フックを配置する必要があります。 enforcer スクリプトは、このために簡単に作成できる可能性があります。

Python-fuがある場合、 RepoGuardSVNChecker の後継)も役立つようです。

どちらを選んだとしても、リポジトリ内の既存のファイルにプロパティをさかのぼって適用する方法はないと思います。ただし、ファイルの次のコミット時に強制することはできます。

5
Evan

このSubversionwikiには、ニーズロックを自動的に追加する方法とそれが設定されていることを保証する方法に関するさまざまなオプションをすべて説明するページがあります。このページには、サンプルスクリプトと構成の詳細も記載されています。

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

2
joelittlejohn

事前コミットフックを使用する

#!/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
2
Felix