----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)----