[svnbook] r4420 committed - Finish issue 178 ("document ephemeral txnprops (new in 1.8) and how...
Daniel Shahaf
d.s at daniel.shahaf.name
Sat Feb 9 07:22:23 CST 2013
svnbook at googlecode.com wrote on Sat, Feb 09, 2013 at 06:35:00 +0000:
> Revision: 4420
> Author: cmpilato at gmail.com
> Date: Fri Feb 8 22:33:40 2013
> Log: Finish issue 178 ("document ephemeral txnprops (new in 1.8) and
> how
> hook scripts might use them.")
>
> * en/book/ch05-repository-admin.xml
> (svn.reposadmin.hooks): Was svn.reposadmin.create.hooks. Completely
> rework this section to give some more useful examples of
> implementing hook scripts. Include hereing an example of checking
> ephemeral transaction properties, and move the (short) list of
> such props here from Chapter 3.
> + <example id="svn.reposadmin.hooks.configuration.ex-1">
> + <title>hooks-env (custom hook script environment
> + configuration)</title>
> +
> + <programlisting>
> +# All scripts should use a UTF-8 locale and have our hook script
> +# utilities directory on the search path.
> +
> +[default]
> +LANG = en_US.UTF-8
> +PATH = /usr/local/svn/tools:/usr/bin
> +
> +
> +# The post-commit and post-revprop-change scripts want to run
> +# programs from our custom synctools replication software suite, too.
> +
> +[post-commit]
> +PATH = /usr/local/synctools-1.1/bin:/usr/local/svn/tools:/usr/bin
> +
Isn't this the perfect place to use %()s substitutions?
(subversion/tests/libsvn_subr/config-test.cfg)
PATH = /usr/local/synctools-1.1/bin:%(PATH)s
(untested)
> +[post-revprop-change]
> +PATH = /usr/local/synctools-1.1/bin:/usr/local/svn/tools:/usr/bin
> +</programlisting>
> + </example>
> + <sect3 id="svn.reposadmin.hooks.uses">
> + <title>Common uses for hook scripts</title>
> +
> + <para>Repository hook scripts can offer a wide range of
> + utility, but most tend to fall into a couple of categories:
> + notification and change validation.</para>
> +
Another task that comes to mind is backup scripts (incremental dump in
post-commit, for example). Not sure if it merits being listed in this
short paragraph.
> + <para>
> + <indexterm>
> + <primary>properties</primary>
> + <secondary>ephemeral transaction properties</secondary>
> + </indexterm>Beginning in Subversion 1.8, clients committing
> + against a Subversion 1.8 server will still provide the
> + feature capabilities string, but will also provide
> + additional information about themselves by way
> + of <firstterm>ephemeral transaction properties</firstterm>.
> + These are essentially commit transaction properties which
Perhaps just say "revision properties" instead of "commit txn
properties"? i.e., avoid introducing a new term, "txnprops"; just say
"revprops that get automagically removed as the commit txn becomes
a revision".
> + are set by the client at the earliest opportunity during the
> + commit process, but which are then automatically removed by
> + the server prior to the promotion of the transaction into a
> + new revision. You can inspect these properties using the
> + same tools with which you'd inspect other unversioned
> + properties set on commit transactions during the timeframe
> + between which the start-commit and pre-commit repository
> + hook scripts would operate.</para>
> + <programlisting>
> +#!/bin/sh
> +
> +REPOS="$1"
> +TXN_NAME="$4"
> +
> +# Check the c
Incomplete comment.
> +CLIENT=`svnlook propget --revprop $REPOS -t $TXN_NAME svn:txn-user-agent`
Will fail silently since $PATH is empty.
> +if [ ! `echo $CLIENT | grep 'BogusSVN'` ]; then
Not a good idea. $CLIENT is "tainted", so
if [ ! "`printf %s "$CLIENT" | grep BogusSVN`" ]
would be better. (But at that point you can just do
if printf %s "$CLIENT" | grep BogusSVN > /dev/null
.)
Also, you false negative for BogusSVN/libsvn-1.7 clients: $CLIENT will
be set to empty, grep will fail, if block won't be entered. I think
this deserves at least a code comment. (As to fixing: one way is to
check txnprop existence, but it would be better if there were
ephemeral-txnprops capability argument to start-commit. (if it exists,
how would pre-commit access it? If pre-commit doesn't get capabilities,
start-commit could communicate it to pre-commit via a txnprop (and call
the txnprop svn:txn-* to have it autoremoved)))
> + <note>
> + <para>While most clients will transmit ephemeral transaction
> + properties early enough in the commit process that they
> + may be inspected by the start-commit hook script, some
> + configurations of Subversion will cause those properties
Which configurations? Are they server-side or client-side? I think it
would be useful to be more specific here, even if we don't make forward
guarantees of not introducing further such situations down the road.
> + to not be set on the transaction until later in the commit
> + process. Administrators should consider performing any
> + validation based on ephemeral transaction properties in
> + both the start-commit and pre-commit hooks—the
> + former to rule out invalid clients before those clients
> + transmit the commit payload; the latter <quote>just in
> + case</quote> the validation checks couldn't be performed
> + by the start-commit hook.</para>
> + </note>
More information about the svnbook-dev
mailing list