Subversion の属性値もコピーしてくるシェルスクリプト
Subversion でベンダブランチを作る際、一次開発元も Subversion を使っている場合には、属性値も全部そのまま持ってきたい。なんか、そういうツールは絶対どこかにあるんじゃないかとは思うんだが、探せなくて作ってしまった:
適当なワーキングコピー中にあるディレクトリを引数に指定して実行すると、そのディレクトリ以下の全内容・全属性をカレントディレクトリの下に再現する:
#! /bin/sh set -e if [ "$1" != "--sub" ] then VENDOR_ROOT="$1" if [ -z "$VENDOR_ROOT" ] then echo "usage: ${0##*/} <vendor-root>" 1>&2 exit 1 fi svn info "$VENDOR_ROOT" >/dev/null # checking whether $VENDOR_ROOT is a working copy. if echo "$VENDOR_ROOT" |grep -v '/$' >/dev/null then VENDOR_ROOT="${VENDOR_ROOT}/" fi exec find "$VENDOR_ROOT" ! -name '.svn' ! -path '*/.svn/*' \ -exec "$0" --sub "$VENDOR_ROOT" '{}' \; fi VENDOR_ROOT="$2" function CopyProperty() { local NODE_FROM="$1" local PROPERTY="$2" local NODE_TO="$3" if echo $PROPERTY |grep -E "^'" >/dev/null 2>&1 then return fi if echo $PROPERTY |grep -E '^の属性:' >/dev/null 2>&1 then return fi local VALUE="$( svn propget "$PROPERTY" "$NODE_FROM" )" svn propset "$PROPERTY" "$VALUE" "$NODE_TO" } function CopyNode() { local NODE_FROM="$1" local NODE_TO="$( echo -n "$NODE_FROM" |sed -e "s|^$VENDOR_ROOT||" )" if [ -z "$NODE_TO" ] then NODE_TO='.' fi if [ -L "$NODE_FROM" ] then ln -s "$( readlink "$NODE_FROM" )" "$NODE_TO" svn add "$NODE_TO" return fi if [ -d "$NODE_FROM" ] then if [ "$NODE_TO" != '.' ] then svn mkdir "$NODE_TO" fi else cp -p "$NODE_FROM" "$NODE_TO" svn add "$NODE_TO" fi for PROPERTY in $( svn proplist "$NODE_FROM" ) do CopyProperty "$NODE_FROM" "$PROPERTY" "$NODE_TO" done } CopyNode "$3" exit 0