<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>assets/print.css</filename>
    </added>
    <added>
      <filename>assets/styles.css</filename>
    </added>
    <added>
      <filename>config.ru</filename>
    </added>
    <added>
      <filename>templates/404.rhtml</filename>
    </added>
    <added>
      <filename>templates/_comment_form.rhtml</filename>
    </added>
    <added>
      <filename>templates/_comments.rhtml</filename>
    </added>
    <added>
      <filename>templates/archive.rhtml</filename>
    </added>
    <added>
      <filename>templates/category.rhtml</filename>
    </added>
    <added>
      <filename>templates/category.rxml</filename>
    </added>
    <added>
      <filename>templates/index.rhtml</filename>
    </added>
    <added>
      <filename>templates/index.rxml</filename>
    </added>
    <added>
      <filename>templates/layout.rhtml</filename>
    </added>
    <added>
      <filename>templates/page.rhtml</filename>
    </added>
    <added>
      <filename>templates/post.rhtml</filename>
    </added>
    <added>
      <filename>test/templates/templates/_comments.rhtml</filename>
    </added>
    <added>
      <filename>test/templates/templates/archive.rhtml</filename>
    </added>
    <added>
      <filename>test/templates/templates/category.rhtml</filename>
    </added>
    <added>
      <filename>test/templates/templates/category.rxml</filename>
    </added>
    <added>
      <filename>test/templates/templates/index.rhtml</filename>
    </added>
    <added>
      <filename>test/templates/templates/index.rxml</filename>
    </added>
    <added>
      <filename>test/templates/templates/layout.rhtml</filename>
    </added>
    <added>
      <filename>test/templates/templates/page.rhtml</filename>
    </added>
    <added>
      <filename>test/templates/templates/post.rhtml</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -7,16 +7,22 @@ when 'init'
   Shinmun::Blog.init ARGV[1]
 
 when 'post'
-  post = Shinmun::Post.new(:title =&gt; ARGV[1], :date =&gt; Date.today)
-  FileUtils.mkpath(File.dirname(post.path))
-  open(post.path, 'w') { |io| io.write post.dump }
-  puts &quot;created #{post.path}&quot;
+  blog = Shinmun::Blog.new('.')
+  post = blog.create_post(:title =&gt; ARGV[1], :date =&gt; Date.today)
+  path = blog.post_file(post)
+  
+  `git checkout #{path}`
+  
+  exec &quot;#{ENV['EDITOR']} #{path}&quot;
 
 when 'page'
-  post = Shinmun::Post.new(:title =&gt; ARGV[1])
-  FileUtils.mkpath(File.dirname(post.path))
-  open(post.path, 'w') { |io| io.write post.dump }
-  puts &quot;created #{post.path}&quot;
+  blog = Shinmun::Blog.new('.')
+  post = blog.create_page(:title =&gt; ARGV[1])
+  path = blog.post_file(post)
+
+  `git checkout #{path}`
+
+  exec &quot;#{ENV['EDITOR']} #{path}&quot;
 
 else
   puts &quot;Usage:&quot;</diff>
      <filename>bin/shinmun</filename>
    </modified>
    <modified>
      <diff>@@ -1,104 +1,71 @@
 module Shinmun
+  ROOT = File.expand_path(File.dirname(__FILE__) + '/../..')
 
   class Blog &lt; Kontrol::Application
-    
-    EXAMPLE_DIR = File.expand_path(File.dirname(__FILE__) + '/../../example')
-
     include Helpers
 
-    attr_reader :aggregations, :categories, :comments, :repo, :store
+    attr_accessor :config, :store, :posts, :pages
 
-    %w[ assets comments config posts pages templates ].each do |name|
-      define_method(name) { store.root.tree(name) }
-    end
-
-    %w[ title description language author url base_path categories ].each do |name|
-      define_method(name) { config['blog.yml'][name] }
+    %w[ base_path title description language author categories ].each do |name|
+      define_method(name) { @config[name.to_sym] }
     end
 
     # Initialize the blog
     def initialize(path)
       super
 
-      @aggregations = {}
-
       if ENV['RACK_ENV'] == 'production'
         @store = GitStore.new(path)
       else
         @store = GitStore::FileStore.new(path)
       end
-      
+
+      @store.handler['md'] = PostHandler.new      
       @store.load
-      
-      @repo = Grit::Repo.new(path) if defined?(Grit)
-      
-      Thread.start do
-        loop do
-          load_aggregations
-          sleep 300
-        end
-      end
-    end
 
-    def self.init(name)
-      Dir.mkdir name      
-      Dir.chdir name
-      FileUtils.cp_r EXAMPLE_DIR + '/.', '.'
-      `git init`
-      `git add .`
-      `git commit -m 'init'`
+      @config = {}
     end
 
-    def load_template(file)
-      templates[file] or raise &quot;template #{file} not found&quot;
-    end    
+    def self.init(path)
+      path = File.expand_path(path)
+      Dir.mkdir(path)
 
-    def render(name, vars = {})
-      super(name, vars.merge(:blog =&gt; self))
-    end
+      FileUtils.cp_r &quot;#{ROOT}/assets&quot;, path
+      FileUtils.cp_r &quot;#{ROOT}/templates&quot;, path
+      FileUtils.cp &quot;#{ROOT}/config.ru&quot;, path
 
-    def call(env)
-      store.refresh!      
-      super
-    end
+      Dir.mkdir(&quot;#{path}/posts&quot;)
+      Dir.mkdir(&quot;#{path}/pages&quot;)
+      Dir.mkdir(&quot;#{path}/comments&quot;)
+      Dir.mkdir(&quot;#{path}/public&quot;)
 
-    def load_aggregations
-      config['aggregations.yml'].to_a.each do |c|
-        aggregations[c['name']] = Object.const_get(c['class']).new(c['url'])
-      end
-    end
+      FileUtils.ln_s(&quot;../assets&quot;, &quot;#{path}/public/assets&quot;)
 
-    def posts_by_date
-      posts.sort_by { |post| post.date.to_s }.reverse
+      Dir.chdir(path) do
+        `git init`
+        `git add .`
+        `git commit -m 'init'`
+      end
     end
 
-    def recent_posts
-      posts_by_date[0, 20]
+    def render(name, vars = {})
+      super(name, vars.merge(:blog =&gt; self))
     end
 
-    # Return all posts for a given month.
-    def posts_for_month(year, month)
-      posts_by_date.select { |p| p.year == year and p.month == month }
+    def load
+      store.load
+      @pages = store['pages'].values
+      @posts = store['posts'].values.sort_by { |post| post.date.to_s }.reverse
     end
 
-    # Return all posts with any of given tags.
-    def posts_with_tags(tags)
-      return [] if tags.nil? or tags.empty?
-      tags = tags.split(',').map { |t| t.strip } if tags.is_a?(String)
-      posts.select do |post|
-        tags.any? do |tag| 
-          post.tag_list.include?(tag)
-        end
-      end
-    end
-
-    # Return all archives as tuples of [year, month].
-    def archives
-      posts.map { |p| [p.year, p.month] }.uniq.sort
+    def call(env)
+      load if store.changed?
+      
+      super
     end
-
-    def tree(post)
-      post.date ? posts.tree(post.year).tree(post.month) : pages
+    
+    def url
+      &quot;http://#{request.host}&quot;
     end
 
     def symbolize_keys(hash)      
@@ -112,36 +79,54 @@ module Shinmun
       store.transaction(message, &amp;block)
     end
 
-    # Create a new post with given attributes.
-    def create_post(atts)
-      post = Post.new(atts)
-      transaction &quot;create '#{post.title}'&quot; do
-        store[post.path] = post
-      end
+    def post_file(post)
+      'posts' + post_path(post) + '.' + post.type
+    end
+
+    def page_file(post)
+      'pages' + page_path(post) + '.' + post.type
+    end
+
+    def comment_file(post)
+      'comments/' + post_path(post) + '.yml'
     end
 
-    def update_post(post, data)
-      transaction &quot;update '#{post.title}'&quot; do
-        store.delete(post.path)
-        post.parse data
-        store[post.path] = post
+    def create_post(attr)
+      post = Post.new(attr)
+      path = post_file(post)
+      
+      transaction &quot;create post '#{post.title}'&quot; do
+        store[path] = post
       end
+
+      post
     end
 
-    def delete_post(post)
-      transaction &quot;delete '#{post.title}'&quot; do
-        store.delete(post.path)
+    def create_page(attr)
+      post = Post.new(attr)
+      path = page_file(post)
+
+      transaction &quot;create page '#{post.title}'&quot; do
+        store[path] = post
       end
+
+      post
     end
 
-    def comments_for(path)
-      comments[path + '.yml'] || []
+    def comments_for(post)
+      store[comment_file post] || []
     end
 
-    def post_comment(path, params)
-      transaction &quot;new comment for '#{path}'&quot; do
-        comments[path + '.yml'] = comments[path + '.yml'].to_a + [ Comment.new(params) ]
+    def create_comment(post, params)
+      path = comment_file(post)
+      comments = comments_for(post)
+      comment = Comment.new(params)
+      
+      transaction &quot;new comment for '#{post.title}'&quot; do
+        store[path] = comments + [comment]
       end
+      
+      comment
     end
 
     def find_page(name)
@@ -149,22 +134,42 @@ module Shinmun
     end
 
     def find_post(year, month, name)
-      tree = posts[year, month] and tree.find { |p| p.name == name }
+      posts.find { |p| p.year == year and p.month == month and p.name == name }
     end
 
     def find_category(permalink)
-      name = categories.find { |name| urlify(name) == permalink } or raise &quot;category not found&quot;
-      posts = self.posts.select { |p| p.category == name }.sort_by { |p| p.date }.reverse
-      { :name =&gt; name, :posts =&gt; posts, :permalink =&gt; permalink }
+      name = categories.find { |name| urlify(name) == permalink }
+      
+      { :name =&gt; name,
+        :posts =&gt; posts.select { |p| p.category == name },
+        :permalink =&gt; permalink }
+    end
+    
+    def recent_posts
+      posts[0, 20]
     end
 
-    def write(file, template, vars={})
-      file = &quot;public/#{base_path}/#{file}&quot;
-      FileUtils.mkdir_p(File.dirname(file))
-      open(file, 'wb') do |io|
-        io &lt;&lt; render(template, vars)
+    # Return all posts for a given month.
+    def posts_for_month(year, month)
+      posts.select { |p| p.year == year and p.month == month }
+    end
+    
+    # Return all posts with any of given tags.
+    def posts_with_tags(tags)
+      return [] if tags.nil? or tags.empty?
+      tags = tags.split(',').map { |t| t.strip } if tags.is_a?(String)
+      
+      posts.select do |post|
+        tags.any? do |tag| 
+          post.tag_list.include?(tag)
+        end
       end
     end
+
+    # Return all archives as tuples of [year, month].
+    def archives
+      posts.map { |p| [p.year, p.month] }.uniq.sort
+    end
     
   end  
   </diff>
      <filename>lib/shinmun/blog.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,7 +1,7 @@
 module Shinmun
 
   class Comment
-
+    
     attr_accessor :time, :name, :email, :website, :text
 
     def initialize(attributes)</diff>
      <filename>lib/shinmun/comment.rb</filename>
    </modified>
    <modified>
      <diff>@@ -35,7 +35,7 @@ module Shinmun
 
     def post_path(post)
       &quot;#{base_path}/#{post.year}/#{post.month}/#{post.name}&quot;
-    end
+    end    
 
     def archive_path(year, month)
       &quot;#{base_path}/#{year}/#{month}&quot;</diff>
      <filename>lib/shinmun/helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,16 +1,13 @@
 module Shinmun
 
   class PostHandler
-    def read(path, data)
-      Post.new(:path =&gt; path, :src =&gt; data)
+    def read(data)
+      Post.new(:src =&gt; data)
     end
 
-    def write(path, post)
-      post.dump
+    def write(post)
+      post.dump      
     end    
   end
   
 end
-
-GitStore::Handler['md'] = Shinmun::PostHandler.new
-GitStore::Handler['html'] = Shinmun::PostHandler.new</diff>
      <filename>lib/shinmun/post_handler.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,12 +9,24 @@ Shinmun::Blog.map do
   end
 
   tag '/tags/(.*)' do |tag|
-    render 'category.rhtml', :name =&gt; &quot;Tag: #{tag}&quot;, :posts =&gt; posts.select { |p| p.tag_list.include?(tag)  }
+    render 'category.rhtml', :name =&gt; &quot;Tag: #{tag}&quot;, :posts =&gt; posts_with_tags(tag)
+  end
+
+  comments '/(\d+)/(\d+)/(.*)/comments' do |year, month, name|
+    post = find_post(year.to_i, month.to_i, name) or raise &quot;post not found #{request.path_info}&quot;
+    
+    if params['preview']
+      comments = comments_for(post).push(Shinmun::Comment.new(params))
+      render 'post.rhtml', :post =&gt; post, :comments =&gt; comments
+    else
+      create_comment(post, params)
+      render 'post.rhtml', :post =&gt; post, :comments =&gt; comments_for(post)
+    end
   end
 
   post '/(\d+)/(\d+)/(.*)' do |year, month, name|
-    post = find_post(year.to_i, month.to_i, name)
-    render 'post.rhtml', :post =&gt; post, :comments =&gt; comments_for(post.path)
+    post = find_post(year.to_i, month.to_i, name) or raise &quot;post not found #{request.path_info}&quot;
+    render 'post.rhtml', :post =&gt; post, :comments =&gt; comments_for(post)
   end
 
   archive '/(\d+)/(\d+)' do |year, month|
@@ -25,47 +37,21 @@ Shinmun::Blog.map do
     render 'index.rxml', :layout =&gt; false
   end
 
-  comments '/comments' do
-    if params['preview'] == 'true'
-      render 'comments.rhtml', :comments =&gt; [Shinmun::Comment.new(params)], :layout =&gt; false
-    else
-      post_comment(params['path'], params)
-      render 'comments.rhtml', :comments =&gt; comments_for(params['path']), :layout =&gt; false
-    end    
-  end
-
-  javascripts '/assets/javascripts\.js' do
-    scripts = assets['javascripts'].to_a.join
-    if_none_match(etag(scripts)) do
-      text scripts
-    end
-  end
-
-  stylesheets '/assets/stylesheets\.css' do
-    styles = assets['stylesheets'].to_a.join
-    if_none_match(etag(styles)) do
-      text styles
-    end
-  end
-
-  assets '/assets/(.*)' do |path|
-    file = assets[path] or raise &quot;#{path} not found&quot;
-    if_none_match(etag(file)) do
-      text file
-    end
-  end
-
-  get '/$' do
+  index '/$' do
     render 'index.rhtml'
   end
 
-  get '/(.*)' do |path|
+  page '/(.*)' do |path|
+    path = path.gsub('..', '')
     page = find_page(path)
           
     if page
       render 'page.rhtml', :page =&gt; page
+      
+    elsif File.exist?(path)
+      text File.read(&quot;#{self.path}/public/#{path}&quot;)
     else
-      raise &quot;page '#{path}' not found&quot;
+      render '404.rhtml', :path =&gt; path
     end
   end
   </diff>
      <filename>lib/shinmun/routes.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,70 +1,51 @@
 require 'shinmun'
 require 'rack/mock'
+require 'rexml/document'
 require 'rexml/xpath'
 require 'pp'
 
 describe Shinmun::Blog do
 
-  TEMPLATES_DIR = File.expand_path(File.dirname(__FILE__) + '/templates')
-  REPO = '/tmp/shinmun-test'
+  DIR = '/tmp/shinmun-test'
 
   before do
-    FileUtils.rm_rf REPO
-    Dir.mkdir REPO
-    Dir.chdir REPO
-    initialize_blog
-  end
-  
-  def file(file, data)
-    FileUtils.mkpath(File.dirname(file))
-    open(file, 'w') { |io| io &lt;&lt; data }
-    `git add #{file}`
-  end
-
-  def initialize_blog
-    `git init`
+    FileUtils.rm_rf DIR
+    
+    Shinmun::Blog.init(DIR)
     
-    file 'config/blog.yml', {
-      'title' =&gt; 'Title',
-      'description' =&gt; 'Description',
-      'language' =&gt; 'en',
-      'author' =&gt;  'The Author',
-      'url' =&gt; 'http://www.my-blog-url.com',
-      'categories' =&gt; ['Ruby', 'Javascript']
-    }.to_yaml
-
     ENV['RACK_ENV'] = 'production'
-    @blog = Shinmun::Blog.new(REPO)
-    @request = Rack::MockRequest.new(@blog)
-
-    Dir.mkdir 'templates'
     
-    Dir[TEMPLATES_DIR + '/*'].each do |path|      
-      unless path.include?('~')
-        file 'templates/' + File.basename(path), File.read(path)
-      end
-    end
-
-    `git commit -m 'spec'` 
+    @blog = Shinmun::Blog.new(DIR)
+    
+    @blog.config = {
+      :title =&gt; 'Title',
+      :description =&gt; 'Description',
+      :language =&gt; 'en',
+      :author =&gt;  'The Author',
+      :categories =&gt; ['Ruby', 'Javascript']
+    }
     
-    @blog.store.load
-
     @posts = [@blog.create_post(:title =&gt; 'New post', :date =&gt; '2008-10-10', :category =&gt; 'Ruby', :body =&gt; 'Body1'),
               @blog.create_post(:title =&gt; 'And this', :date =&gt; '2008-10-11', :category =&gt; 'Ruby', :body =&gt; 'Body2'),
               @blog.create_post(:title =&gt; 'Again',    :date =&gt; '2008-11-10', :category =&gt; 'Javascript', :body =&gt; 'Body3')]
 
-    @pages = [@blog.create_post(:title =&gt; 'Page 1', :body =&gt; 'Body1'),
-              @blog.create_post(:title =&gt; 'Page 2', :body =&gt; 'Body2')]
+    @pages = [@blog.create_page(:title =&gt; 'Page 1', :body =&gt; 'Body1'),
+              @blog.create_page(:title =&gt; 'Page 2', :body =&gt; 'Body2')]
 
-    @blog.store.load
+    @blog.load
+  end
+
+  def request(method, uri, options={})
+    @request = Rack::MockRequest.new(@blog)    
+    @response = @request.request(method, uri, options)
   end
 
   def get(*args)
-    @request.get(*args)
+    request(:get, *args)
   end
 
   def post(*args)
-    @request.post(*args)
+    request(:post, *args)
   end  
 
   def xpath(xml, path)
@@ -98,9 +79,9 @@ describe Shinmun::Blog do
   end
 
   it &quot;should create a post&quot; do
-    @blog.create_post(:title =&gt; 'New post', :date =&gt; '2008-10-10')
-    @blog.store.load
-    
+    post = @blog.create_post(:title =&gt; 'New post', :date =&gt; '2008-10-10')
+    @blog.load
+
     post = @blog.find_post(2008, 10, 'new-post')
     post.should_not be_nil
     post.title.should == 'New post'
@@ -108,26 +89,6 @@ describe Shinmun::Blog do
     post.name.should == 'new-post'
   end
 
-  it &quot;should update a post&quot; do
-    post = @blog.create_post(:title =&gt; 'New post', :date =&gt; '2008-10-10')
-    @blog.update_post(post, &quot;---\ndate: 2008-11-11\ntitle: The title\n---&quot;)
-    @blog.store.load
-
-    post = @blog.find_post(2008, 11, 'new-post')
-    post.should_not be_nil
-    post.title.should == 'The title'
-    post.date.should == Date.new(2008, 11, 11)
-    post.name.should == 'new-post'
-  end
-
-  it &quot;should delete a post&quot; do
-    post = @blog.create_post(:title =&gt; 'New post', :date =&gt; '2008-10-10')
-    @blog.delete_post(post)        
-    @blog.store.load
-
-    @blog.find_post(2008, 10, 'new-post').should be_nil
-  end
-
   it &quot;should render posts&quot; do
     xml = get('/2008/10/new-post').body
 
@@ -143,10 +104,10 @@ describe Shinmun::Blog do
     xpath(xml, '/rss/channel/title')[0].text.should == 'Ruby'
     xpath(xml, '/rss/channel/item/title')[0].text.should == 'And this'
     xpath(xml, '/rss/channel/item/pubDate')[0].text.should == &quot;Sat, 11 Oct 2008 00:00:00 +0000&quot;
-    xpath(xml, '/rss/channel/item/link')[0].text.should == &quot;http://www.my-blog-url.com/2008/10/and-this&quot;
+    xpath(xml, '/rss/channel/item/link')[0].text.should == &quot;http://example.org/2008/10/and-this&quot;
     xpath(xml, '/rss/channel/item/title')[1].text.should == 'New post'
     xpath(xml, '/rss/channel/item/pubDate')[1].text.should == &quot;Fri, 10 Oct 2008 00:00:00 +0000&quot;
-    xpath(xml, '/rss/channel/item/link')[1].text.should == &quot;http://www.my-blog-url.com/2008/10/new-post&quot;
+    xpath(xml, '/rss/channel/item/link')[1].text.should == &quot;http://example.org/2008/10/new-post&quot;
     
     assert_listing(get('/categories/ruby').body, [['And this', 'Body2'], ['New post', 'Body1']])
   end
@@ -170,12 +131,10 @@ describe Shinmun::Blog do
   end
 
   it &quot;should post a comment&quot; do    
-    post &quot;/comments?path=posts/2008/10/new-post.md&amp;name=Hans&amp;text=Hallo&quot;
-    post &quot;/comments?path=posts/2008/10/new-post.md&amp;name=Peter&amp;text=Servus&quot;
+    post &quot;/2008/10/new-post/comments?name=Hans&amp;text=Hallo&quot;
+    post &quot;/2008/10/new-post/comments?name=Peter&amp;text=Servus&quot;
     
-    @blog.store.load
-
-    comments = @blog.comments_for(@posts[0].path)
+    comments = @blog.comments_for(@posts[0])
 
     comments[0].should_not be_nil
     comments[0].name.should == 'Hans'</diff>
      <filename>test/blog_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>example/Rakefile</filename>
    </removed>
    <removed>
      <filename>example/assets/images/favicon.ico</filename>
    </removed>
    <removed>
      <filename>example/assets/images/loading.gif</filename>
    </removed>
    <removed>
      <filename>example/assets/javascripts/1-jquery.min.js</filename>
    </removed>
    <removed>
      <filename>example/assets/javascripts/2-jquery-form.min.js</filename>
    </removed>
    <removed>
      <filename>example/assets/javascripts/3-comments.js</filename>
    </removed>
    <removed>
      <filename>example/assets/javascripts/4-coderay.js</filename>
    </removed>
    <removed>
      <filename>example/assets/print.css</filename>
    </removed>
    <removed>
      <filename>example/assets/stylesheets/1-reset.css</filename>
    </removed>
    <removed>
      <filename>example/assets/stylesheets/2-typo.css</filename>
    </removed>
    <removed>
      <filename>example/assets/stylesheets/3-table.css</filename>
    </removed>
    <removed>
      <filename>example/assets/stylesheets/4-article.css</filename>
    </removed>
    <removed>
      <filename>example/assets/stylesheets/5-comments.css</filename>
    </removed>
    <removed>
      <filename>example/assets/stylesheets/6-diff.css</filename>
    </removed>
    <removed>
      <filename>example/assets/stylesheets/7-blog.css</filename>
    </removed>
    <removed>
      <filename>example/config.ru</filename>
    </removed>
    <removed>
      <filename>example/config/blog.yml</filename>
    </removed>
    <removed>
      <filename>example/pages/about.md</filename>
    </removed>
    <removed>
      <filename>example/templates/_comment_form.rhtml</filename>
    </removed>
    <removed>
      <filename>example/templates/_comments.rhtml</filename>
    </removed>
    <removed>
      <filename>example/templates/_pagination.rhtml</filename>
    </removed>
    <removed>
      <filename>example/templates/archive.rhtml</filename>
    </removed>
    <removed>
      <filename>example/templates/category.rhtml</filename>
    </removed>
    <removed>
      <filename>example/templates/category.rxml</filename>
    </removed>
    <removed>
      <filename>example/templates/comments.rhtml</filename>
    </removed>
    <removed>
      <filename>example/templates/index.rhtml</filename>
    </removed>
    <removed>
      <filename>example/templates/index.rxml</filename>
    </removed>
    <removed>
      <filename>example/templates/layout.rhtml</filename>
    </removed>
    <removed>
      <filename>example/templates/page.rhtml</filename>
    </removed>
    <removed>
      <filename>example/templates/post.rhtml</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>6c472da81642c0d24040d2d9b3be949aaf6f15ca</id>
    </parent>
  </parents>
  <author>
    <name>Matthias Georgi</name>
    <email>matti.georgi@gmail.com</email>
  </author>
  <url>http://github.com/georgi/shinmun/commit/f9304707fe84188f607cfbc45c76b5d19d75c174</url>
  <id>f9304707fe84188f607cfbc45c76b5d19d75c174</id>
  <committed-date>2009-04-27T03:40:25-07:00</committed-date>
  <authored-date>2009-04-27T03:40:25-07:00</authored-date>
  <message>reorganized directory structure</message>
  <tree>e0db0cfa4d96a91cf0c246de88d1780449c5ec78</tree>
  <committer>
    <name>Matthias Georgi</name>
    <email>matti.georgi@gmail.com</email>
  </committer>
</commit>
