Thanks Ben for a detailed answer. A few follow-up questions below:

On Sunday, August 10, 2014 06:21:04 PM Ben Reser wrote:
[... snip ...]
> Here's the most important sentence form the book:
> 
> "While hook scripts can do almost anything, there is one dimension in which
> hook script authors should show restraint: do not modify a commit
> transaction using hook scripts."
> 
> Yes the word should appears in that sentence.  But we really are intending
> to tell you not to modify a transaction.  I suspect the word should is
> there because there is actually one thing that is ok to modify in a hook
> script and that's the unversioned properties that will become revision
> properties. Perhaps the language could be improved, but I do think that
> italics on the word "not" and the following text should give you a pretty
> good idea that this is not a supported operation.

So, the unversioned properties are ok to modify? Our scripts do that, too - so 
I'd like to 
know if it's ok to depend on this not to be broken by future releases.

Also, I think it would be a good idea to have the transaction-modifying 
functions return an 
error once the transaction reached the stage of pre-commit hooks from functions 
like 
svn_fs_change_node_prop() - to avoid getting one's hopes high because it works 
in the 
current release. Something like SVN_TXN_READONLY. What do you think?

[... snip ...]
> Actually this still makes the client that's doing the commit have a stale
> cache of the property.  It will believe that "myprop" either has no value
> or whatever the previous value is.
> 
> You probably won't pick up any change to this property until the next time
> the node changes.  However, you can get away this if you're not terribly
> concerned about the client having the correct state of the property because
> we never send deltas for property changes.  We just send the whole property
> value.
> 
> If that ever changes (which is entirely conceivable since there are property
> use case that quite honestly have probably grown beyond the original intent
> of properties, including svn:mergeinfo) you will be in a world of hurt
> since your existing working copies when upgraded and run with clients that
> understand this and servers that handle this will suddenly be busted. 
> Every commit until you remove this will break the working copy.

I understand why it's bad for properties that Subversion interprets. In our 
case - as I 
explained, we don't care if the developer's build environment keeps a stale 
version of that 
property forever.

But back to use case: I am thinking about alternative approaches to doing such 
auto-
updates of properties and/or other content. I assume that it is not possible to 
create a 
transaction B based on a transaction A in the pre-commit hook (so that when 
transaction A 
becomes a revision, transaction B uses that new revision as a base), is it?

It seems that the only supported way to do that would be to schedule the 
"update tasks" 
to be done in the pre-commit script, but actually execute them in a new 
transaction. 
Hence, another question - is a post-commit hook allowed to create and commit a 
transaction, or does it have to be deferred until after the post-commit hook 
finishes?

And finally, is there a way to prevent further transactions from being created 
and/or 
turned into revisions until the post-commit hook has finished performing the 
scheduled 
tasks? In other words, can Subversion start another transaction before the 
post-commit 
hook finishes on the revision just created?

[... snip ...]
> I haven't dug in to the specifics of how we broke this particular use case.
> But I suspect you'll find that if you create a transaction, call
> svn_fs_change_node_prop() and commit the transaction that this call works
> just fine.  So I'd bet that the problem only happens when you try to do
> this from the pre-commit hook.

Indeed. So because of this it makes even more sense to have functions like 
svn_fs_change_node_prop() fail explicitly with an error, rather than modifying 
a transaction 
in an unpredictable way.

Thanks again,
Alexey.

Reply via email to