Svn pre-commit hook


#1

OK, I give up.

Can someone (Kou?) please sketch out how to intercept
a Subversion transaction with a pre-commit hook and
throw each file matching, say, /.rb$/ to some StyleChecker?

Based on Kou’s svnlook,

https://svn.collab.net/repos/svn/trunk/tools/examples/svnlook.rb

and the bindings,

http://svn.collab.net/repos/svn/trunk/subversion/bindings/swig/ruby/svn/

it seems that Svn:Fs might be the answer, but I’m having
trouble figuring out SVN transactions – the manual says
very little about these creatures.

Thanks,


#2

Bil K. wrote:

and the bindings,
http://fun3d.larc.nasa.gov

I don’t know about pre-commit hooks, but here’s a post-commit hook I
wrote the other day. Not fancy or anything, but will maybe give you an
idea?
I just used the normal ‘svnlook’.

deleted = Array.new
modified << changed[1…-1]

end
repository = ARGV[0]
From: SVN removed_email_address@domain.invalid

  smtp.send_message(message, 'removed_email_address@domain.invalid', recipients)

}

-Justin


#3

Justin C. wrote:

I don’t know about pre-commit hooks, but here’s a post-commit hook I
wrote the other day. Not fancy or anything, but will maybe give you an
idea?

Thanks.

I just used the normal ‘svnlook’.

If you have the SVN Ruby bindings compiled, you could use Kouhei’s
commit-email.rb for post-hook mailings (and RSS feed):

https://svn.collab.net/repos/svn/trunk/tools/hook-scripts/commit-email.rb

If you want HTML output also, see

https://svn.collab.net/repos/svn/trunk/tools/examples/svnlog2html.rb

Regards,


#4

Hi,

In dusqov$mbv$removed_email_address@domain.invalid
“svn pre-commit hook” on Sat, 11 Mar 2006 06:28:43 +0900,
Bil K. removed_email_address@domain.invalid wrote:

Can someone (Kou?) please sketch out how to intercept
a Subversion transaction with a pre-commit hook and
throw each file matching, say, /.rb$/ to some StyleChecker?

What about attached script?

You can use the attached script with the following
pre-commit script:

#!/bin/sh

REPOS="$1"
TXN="$2"

/…/ruby
/…/pre-check-file.rb “$REPOS” “$TXN”
-p PATTERN1 -c CHECK_COMMAND1
-p PATTERN2 -c CHECK_COMMAND2

|| exit 1

exit 0

For example (reject space indented Ruby scripts and C programs):

#!/bin/sh

REPOS="$1"
TXN="$2"

/usr/bin/ruby
~/work/ruby/pre-check-file.rb “$REPOS” “$TXN”
-p .rb$ -c 'grep -v ^ ’
-p .c$ -c 'grep -v ^ ’
|| exit 1

exit 0

Thanks,


#5

Kouhei S. wrote:

Hi,

Hello.

What about attached script?

Excellent, Thanks!

This is the nugget I most craved:

def changed_paths(base_rev=nil)
base_rev ||= @txn.base_revision
base_root = @fs.root(base_rev)
editor = Svn::Delta::ChangedEditor.new(@root, base_root)
base_root.dir_delta(’’, ‘’, @root, ‘’, editor)
(editor.added_files + editor.updated_files).uniq.sort
end

Thanks again,