On Fri, Aug 20, 2010 at 12:42 PM, Ryan Schmidt
<subversion-20...@ryandesign.com> wrote:
> On Aug 19, 2010, at 19:25, David Weintraub wrote:
>> On Wed, Aug 18, 2010 at 6:56 PM, Greg Alexander wrote:
>>> I am a very new Subversion user and am trying to get a post commit hook 
>>> script
>>> working. My Subversion is running on linux. The script I want to add would 
>>> add the
>>> needs-lock property to every file that didn't have a lock. Any pointers on 
>>> this would
>>> be great. I have searched and not found any good, working, examples on how 
>>> to
>>> do this.
>>
>> A couple of things: First of all, your attempt to modify code in a
>> hook script: Not cool.
>>
>> In Subversion, a hook script runs on the server and doesn't have
>> access to the developer's working directory. You COULD do a checkout,
>> modify the files, then recommit, but that would mean your hook script
>> is modifying code which could cause an error. The whole idea is to
>> have the developers responsible for their code and making sure their
>> code is tested and everything is right. Yet, your hook script modifies
>> the code and never tests it.
>
> Well, no, he's not proposing modifying the content of the files, only adding 
> a property.

"Properties" of file are part of the file content in the necessary
Subversion database. They require a revision to commit. Doing that as
a post-commit is.... potentially quite awkward and destructive if a
bug creeps into the script and it recurses, spewing hundreds or
thousands of revisions into unattended operation that you, as a remote
Subversion user, have no graceful way to stop.

It's a very dangerous idea.


>> Also imagine the logs: Bob did a fix, hook script did a fix. Robert
>> did a fix, hook script did a fix. Alice did a fix, hook script did a
>> fix. Every other log entry is your hook script modifying code.
>
> Only commits immediately after adding a new file will be a commit by the hook 
> script, to add the property. For commits that just modify existing files, 
> there will be no need for the hook script to commit anything.

And you'll be able to detect this, reliably, how? Remember that the
data available to a post-commit script has to be parsed, and with
multilingual file names or non-7-bit ASCII filenames it can get
tricky.

>> If you want to make sure that the code is correctly formatted, or
>> there's a certain property on the file, you use a pre-commit hook to
>> fail the commit if the developer doesn't have things done correctly.
>> After a couple of times, the developers learns to make these checks
>> before a commit.
>
> Yes, I too would recommend he use this strategy instead. Reject bad commits 
> entirely; soon developers will learn how to make good commits on the first 
> try.

Amen. I wouldn't necessarily call them "good" commits, but you need
compliant commits for this.

>> Now, about the svn:needs-lock property. For 20 or so years, developers
>> had to lock their files before editing. This was part of the design of
>> the first version control system, SCCS and later RCS. You were suppose
>> to get all of the files, then mark the ones you want to edit, modify
>> them, and commit them. It was thought this was the only way you could
>> run a version control system.
>>
>> And, it was a pain. People would lock files and forget to unlock them.
>> Development would be delayed while locks had to be broken. CVS changed
>> all of this. In CVS, you made your changes and committed them. If
>> someone committed before you did, you simply updated that file and
>> tried again.
>>
>> Developers loved it. Development was faster and easier, and all modern
>> version control systems followed suit. You simply edit and commit.
>>
>> You can do what you want, but why? It means you, as the administrator
>> will be spending much of your time breaking locks. You'll see
>> developers get into fights about file editing. And for what? CVS has
>> been around now for 20 years and has shown that lockless version
>> control not only works, but is vastly superior to the kind that made
>> you lock files before editing.
>
> Right. The user should explain to us in more detail, with examples, why he 
> believes locking is necessary.

As opposed to having tag, or a release tag area, be locked.

Reply via email to