From 01c04035f1c83c379b8bf9e617b8a5628740f1d9 Mon Sep 17 00:00:00 2001 From: Tony Duckles Date: Fri, 20 Jan 2012 21:53:36 -0600 Subject: [PATCH] Split pre-revprop-change example from make-replay-repo.sh to pre-revprop-change.example.sh --- tests/make-replay-repo.sh | 77 +---------------------------- tests/pre-revprop-change.example.sh | 72 +++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 75 deletions(-) create mode 100644 tests/pre-revprop-change.example.sh diff --git a/tests/make-replay-repo.sh b/tests/make-replay-repo.sh index 8634a81..bcb5cd2 100755 --- a/tests/make-replay-repo.sh +++ b/tests/make-replay-repo.sh @@ -13,82 +13,9 @@ rm -rf $REPO _dup_wc echo "Creating _repo_replay..." svnadmin create $REPO # Add pre-revprop-change hook script, which is required by svn2svn -cat > $REPO/hooks/pre-revprop-change << EOF -#!/bin/sh - -# PRE-REVPROP-CHANGE HOOK - -# The pre-revprop-change hook is invoked before a revision property -# is added, modified or deleted. Subversion runs this hook by invoking -# a program (script, executable, binary, etc.) named 'pre-revprop-change' -# (for which this file is a template), with the following ordered -# arguments: -# -# [1] REPOS-PATH (the path to this repository) -# [2] REVISION (the revision being tweaked) -# [3] USER (the username of the person tweaking the property) -# [4] PROPNAME (the property being set on the revision) -# [5] ACTION (the property is being 'A'dded, 'M'odified, or 'D'eleted) -# -# [STDIN] PROPVAL ** the new property value is passed via STDIN. -# -# If the hook program exits with success, the propchange happens; but -# if it exits with failure (non-zero), the propchange doesn't happen. -# The hook program can use the 'svnlook' utility to examine the -# existing value of the revision property. -# -# WARNING: unlike other hooks, this hook MUST exist for revision -# properties to be changed. If the hook does not exist, Subversion -# will behave as if the hook were present, but failed. The reason -# for this is that revision properties are UNVERSIONED, meaning that -# a successful propchange is destructive; the old value is gone -# forever. We recommend the hook back up the old value somewhere. -# -# On a Unix system, the normal procedure is to have 'pre-revprop-change' -# invoke other programs to do the real work, though it may do the -# work itself too. -# -# Note that 'pre-revprop-change' must be executable by the user(s) who will -# invoke it (typically the user httpd runs as), and that user must -# have filesystem-level permission to access the repository. -# -# On a Windows system, you should name the hook program -# 'pre-revprop-change.bat' or 'pre-revprop-change.exe', -# but the basic idea is the same. -# -# The hook program typically does not inherit the environment of -# its parent process. For example, a common problem is for the -# PATH environment variable to not be set to its usual value, so -# that subprograms fail to launch unless invoked via absolute path. -# If you're having unexpected problems with a hook program, the -# culprit may be unusual (or missing) environment variables. -# -# Here is an example hook script, for a Unix /bin/sh interpreter. -# For more examples and pre-written hooks, see those in -# the Subversion repository at -# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and -# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ - -REPOS="\$1" -REV="\$2" -USER="\$3" -PROPNAME="\$4" -ACTION="\$5" - -echo "pre-revprop-change: REPOS=\$1 REV=\$2 USER=\$3 PROPNAME=\$4 ACTION=\$5" >&2 - -# Allow modifying svn:log -if [ "\$ACTION" = "M" -a "\$PROPNAME" = "svn:log" ]; then exit 0; fi -# Allow svn2svn to add svn2svn source-tracking properties -if [ "\$ACTION" = "A" -a "\$PROPNAME" = "svn2svn:source_uuid" ]; then exit 0; fi -if [ "\$ACTION" = "A" -a "\$PROPNAME" = "svn2svn:source_url" ]; then exit 0; fi -if [ "\$ACTION" = "A" -a "\$PROPNAME" = "svn2svn:source_rev" ]; then exit 0; fi - -echo "Changing revision property \$PROPNAME is prohibited" >&2 -exit 1 -EOF +cat > $REPO/hooks/pre-revprop-change < pre-revprop-change.example.sh chmod 755 $REPO/hooks/pre-revprop-change -svn mkdir -q -m "Add /trunk" $REPOURL/trunk # svn2svn +svn mkdir -q -m "Add /trunk" $REPOURL/trunk ../svn2svn.py -a file://$PWD/_repo_ref/trunk file://$PWD/_repo_replay/trunk diff --git a/tests/pre-revprop-change.example.sh b/tests/pre-revprop-change.example.sh new file mode 100644 index 0000000..a11e393 --- /dev/null +++ b/tests/pre-revprop-change.example.sh @@ -0,0 +1,72 @@ +#!/bin/sh + +# PRE-REVPROP-CHANGE HOOK + +# The pre-revprop-change hook is invoked before a revision property +# is added, modified or deleted. Subversion runs this hook by invoking +# a program (script, executable, binary, etc.) named 'pre-revprop-change' +# (for which this file is a template), with the following ordered +# arguments: +# +# [1] REPOS-PATH (the path to this repository) +# [2] REVISION (the revision being tweaked) +# [3] USER (the username of the person tweaking the property) +# [4] PROPNAME (the property being set on the revision) +# [5] ACTION (the property is being 'A'dded, 'M'odified, or 'D'eleted) +# +# [STDIN] PROPVAL ** the new property value is passed via STDIN. +# +# If the hook program exits with success, the propchange happens; but +# if it exits with failure (non-zero), the propchange doesn't happen. +# The hook program can use the 'svnlook' utility to examine the +# existing value of the revision property. +# +# WARNING: unlike other hooks, this hook MUST exist for revision +# properties to be changed. If the hook does not exist, Subversion +# will behave as if the hook were present, but failed. The reason +# for this is that revision properties are UNVERSIONED, meaning that +# a successful propchange is destructive; the old value is gone +# forever. We recommend the hook back up the old value somewhere. +# +# On a Unix system, the normal procedure is to have 'pre-revprop-change' +# invoke other programs to do the real work, though it may do the +# work itself too. +# +# Note that 'pre-revprop-change' must be executable by the user(s) who will +# invoke it (typically the user httpd runs as), and that user must +# have filesystem-level permission to access the repository. +# +# On a Windows system, you should name the hook program +# 'pre-revprop-change.bat' or 'pre-revprop-change.exe', +# but the basic idea is the same. +# +# The hook program typically does not inherit the environment of +# its parent process. For example, a common problem is for the +# PATH environment variable to not be set to its usual value, so +# that subprograms fail to launch unless invoked via absolute path. +# If you're having unexpected problems with a hook program, the +# culprit may be unusual (or missing) environment variables. +# +# Here is an example hook script, for a Unix /bin/sh interpreter. +# For more examples and pre-written hooks, see those in +# the Subversion repository at +# http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ and +# http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/ + +REPOS="$1" +REV="$2" +USER="$3" +PROPNAME="$4" +ACTION="$5" + +echo "pre-revprop-change: REPOS=$1 REV=$2 USER=$3 PROPNAME=$4 ACTION=$5" >&2 + +# Allow modifying svn:log +if [ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi +# Allow svn2svn to add svn2svn source-tracking properties +if [ "$ACTION" = "A" -a "$PROPNAME" = "svn2svn:source_uuid" ]; then exit 0; fi +if [ "$ACTION" = "A" -a "$PROPNAME" = "svn2svn:source_url" ]; then exit 0; fi +if [ "$ACTION" = "A" -a "$PROPNAME" = "svn2svn:source_rev" ]; then exit 0; fi + +echo "Changing revision property $PROPNAME is prohibited" >&2 +exit 1 -- 2.43.0