Ruby path for SVN log XML -> HTML

B

Bil Kleb

So what's the Ruby way to go from

svn log --limit 40 --xml --verbose

to HTML?

Thanks,
 
K

Kouhei Sutou

----Next_Part(Tue_Feb_28_21_22_58_2006_128)--
Content-Type: Multipart/Mixed;
boundary="--Next_Part(Tue_Feb_28_21_22_58_2006_128)--"

----Next_Part(Tue_Feb_28_21_22_58_2006_128)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

Hi,

In <[email protected]>
"Ruby path for SVN log XML -> HTML" on Mon, 27 Feb 2006 22:28:34 +0900,
Bil Kleb said:
So what's the Ruby way to go from

svn log --limit 40 --xml --verbose

to HTML?

Here is my answer.

A sample output is here:
http://pub.cozmixng.org/~kou/archives/svnlog2html-sample.html


----Next_Part(Tue_Feb_28_21_22_58_2006_128)--
Content-Type: Text/Plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline; filename="svnlog2html.rb"

#!/usr/bin/env ruby

require "erb"
require "svn/client"

include ERB::Util

path = File.expand_path(ARGV.shift || $PWD)

html = <<-HEADER
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
div.entry
{
border: 1px solid red;
border-width: 1px 0 0 1px;
margin: 2em 2em 2em 3em;
padding: 0 2em;
}

pre.message
{
border-left: 1px solid red;
margin: 1em 2em;
padding-left: 1em;
}

div.info
{
text-align: right;
}

span.info
{
border-bottom: 1px solid red;
padding: 0 5px 1px 1em;
}

span.author
{
font-style: italic;
}

span.date
{
color: #999;
}

li.action-A
{
color: blue;
}

li.action-M
{
color: green;
}

li.action-D
{
color: red;
text-decoration: line-through;
}
</style>
<title>#{h path}</title>
</head>
<body>
<h1>#{h path}</h1>
HEADER

ctx = Svn::Client::Context.new
ctx.log(path, "HEAD", 0, 40, true, true) do
|changed_paths, rev, author, date, message|

html << <<-ENTRY_HEADER

<div class="entry">
<h2>r#{h rev}</h2>
<pre class="message">#{h message}</pre>
<div class="info">
<span class="info">
by <span class="author">#{h author}</span>
at <span class="date">#{date}</span>
</span>
</div>
<div class="changed-path">
ENTRY_HEADER

changed_paths.sort.each do |path, changed_path|
if changed_path.is_a?(String) # known bug of Ruby bindings for 1.3.0
action = changed_path
else
action = changed_path.action
end
html << <<-ENTRY_PATH
<ul>
<li class="action-#{h action}">
<span class="action">#{h action}</span>:
<span class="changed-path">#{h path}</span>
</li>
</ul>
ENTRY_PATH
end

html << <<-ENTRY_FOOTER
</div>
</div>

ENTRY_FOOTER
end

html << <<-FOOTER
</body>
</html>
FOOTER

puts html

----Next_Part(Tue_Feb_28_21_22_58_2006_128)----
----Next_Part(Tue_Feb_28_21_22_58_2006_128)----
 
B

Bil Kleb

Kouhei said:
Here is my answer.

Question: why isn't this part of our commit-email.rb? Don't
you use it as part of your post-commit hook?

BTW: I got a nil String error from $PWD. Here's my patch,

Index: svnlog2html.rb
===================================================================
--- svnlog2html.rb (revision 18105)
+++ svnlog2html.rb (working copy)
@@ -5,7 +5,7 @@

include ERB::Util

-path = File.expand_path(ARGV.shift || $PWD)
+path = File.expand_path(ARGV.shift || ENV['PWD'])

html = <<-HEADER
<?xml version="1.0" encoding="utf-8"?>

Regards,
 
K

Kouhei Sutou

Hi,

In <[email protected]>
"Re: Ruby path for SVN log XML -> HTML" on Thu, 2 Mar 2006 03:58:37 +0900,
Bil Kleb said:
Question: why isn't this part of our commit-email.rb? Don't
you use it as part of your post-commit hook?

No. I made the script only for you. ;)

I added the script to trunk Subversion repository as
example:
https://svn.collab.net/repos/svn/trunk/tools/examples/svnlog2html.rb
BTW: I got a nil String error from $PWD. Here's my patch,

Thanks. I used Dir.pwd instead of ENV['PWD'].


Regards,
 
B

Bil Kleb

Kouhei said:
Hi,
Hello.

I added the script to trunk Subversion repository as example:
https://svn.collab.net/repos/svn/trunk/tools/examples/svnlog2html.rb

Excellent, the world will thank you.

Are you hording any other svn gems?

My next project is to figure out how to check inbound
files as part of a pre-commit hook ... care to sketch
that out?
BTW: I got a nil String error from $PWD. Here's my patch,

Thanks. I used Dir.pwd instead of ENV['PWD'].

Ah, much better.

Thanks again,
 
K

Kouhei Sutou

Hi,
Are you hording any other svn gems?

All of my gems are committed in Subversion repository:
* https://svn.collab.net/repos/svn/trunk/tools/examples/svnlook.rb
* https://svn.collab.net/repos/svn/trunk/tools/examples/svnshell.rb

And you have already seen scripts:

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

My next project is to figure out how to check inbound
files as part of a pre-commit hook ... care to sketch
that out?

I can't show you any sample scripts without check condition
details. But svnlook.rb may help you.


Thanks,
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,051
Latest member
CarleyMcCr

Latest Threads

Top