<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -11,7 +11,7 @@ module MerbThorHelper
   private
     
   def working_dir
-    Merb.working_dir
+    @_working_dir ||= File.expand_path(options['merb-root'] || Dir.pwd)
   end
   
   def source_dir
@@ -21,17 +21,20 @@ module MerbThorHelper
   end
   
   def gem_dir
-   @_gem_dir = File.directory?(working_dir) ? File.join(working_dir, 'gems') : nil
-   create_if_missing(@_gem_dir)
-   @_gem_dir
+    File.directory?(working_dir) ? File.join(working_dir, 'gems') : nil
   end
   
   def create_if_missing(path)
-    FileUtils.mkdir(path) unless (path.nil? || File.exists?(path))
+    FileUtils.mkdir(path) unless File.exists?(path)
   end
   
 end
 
+# TODO
+# - a task to figure out an app's dependencies
+# - pulling a specific UUID/Tag (gitspec hash) with clone/update
+# - copy gem bin wrappers for Merb components to ./bin (bundled apps)
+# - a 'deploy' task (in addition to 'redeploy' ?)
 
 class Merb &lt; Thor
   
@@ -41,72 +44,268 @@ class Merb &lt; Thor
   class GemPathMissing &lt; Exception
   end
   
-
   class GemInstallError &lt; Exception
   end
   
   class GemUninstallError &lt; Exception
   end
+  
+  # Install a Merb stack from stable RubyForge gems. Optionally install a 
+  # suitable Rack adapter/server when setting --adapter to one of the 
+  # following: mongrel, emongrel, thin or ebb.
+  
+  desc 'stable', 'Install extlib, merb-core and merb-more from rubygems'
+  method_options &quot;--merb-root&quot; =&gt; :optional,
+                 &quot;--adapter&quot;   =&gt; :optional
+  def stable
+    adapters = %w[mongrel emongrel thin ebb]
+    stable = Stable.new
+    stable.options = options
+    if stable.core &amp;&amp; stable.more
+      puts &quot;Installed extlib, merb-core and merb-more&quot;
+      if options[:adapter] &amp;&amp; adapters.include?(options[:adapter]) &amp;&amp;
+        stable.refresh_from_gems(options[:adapter])
+        puts &quot;Installed #{options[:adapter]}&quot;
+      elsif options[:adapter]
+        puts &quot;Please specify one of the following adapters: #{adapters.join(' ')}&quot;
+      end
+    end  
+  end  
+
+  class Stable &lt; Thor
+
+    # The Stable tasks deal with known -stable- gems; available
+    # as shortcuts to Merb and DataMapper gems.
+    #
+    # These are pulled from rubyforge and installed into into the 
+    # desired gems dir (either system-wide or into the application's 
+    # gems directory).
+    
+    include MerbThorHelper
+    
+    # Gets latest gem versions from RubyForge and installs them.
+    #
+    # Examples:
+    #
+    # thor merb:edge:core
+    # thor merb:edge:core --merb-root ./path/to/your/app
+    # thor merb:edge:core --sources ./path/to/sources.yml
+    
+    desc 'core', 'Install extlib and merb-core from git HEAD'
+    method_options &quot;--merb-root&quot; =&gt; :optional
+    def core
+      refresh_from_gems 'extlib', 'merb-core'
+    end
+    
+    desc 'more', 'Install merb-more from rubygems'
+    method_options &quot;--merb-root&quot; =&gt; :optional
+    def more
+      refresh_from_gems 'merb-more'
+    end
+    
+    desc 'plugins', 'Install merb-plugins from rubygems'
+    method_options &quot;--merb-root&quot; =&gt; :optional
+    def plugins
+      refresh_from_gems 'merb-plugins'
+    end
+    
+    desc 'dm_core', 'Install dm-core from rubygems'
+    method_options &quot;--merb-root&quot; =&gt; :optional
+    def dm_core
+      refresh_from_gems 'extlib', 'merb-core'
+    end
+    
+    desc 'dm_more', 'Install dm-more from rubygems'
+    method_options &quot;--merb-root&quot; =&gt; :optional
+    def dm_more
+      refresh_from_gems 'extlib', 'merb-core'
+    end
+    
+    # Pull from RubyForge and install.
+    def refresh_from_gems(*components)
+      gems = Gems.new
+      gems.options = options
+      components.all? { |name| gems.install(name) rescue false }
+    end
+    
+  end
 
-  desc 'edge', 'Install extlib, merb-core and merb-more from git HEAD, pass an optional component name to only install this one'
-  method_options &quot;--merb-root&quot; =&gt; :optional, &quot;--component&quot; =&gt; :optional
+  # Retrieve latest Merb versions from git and optionally install them.
+  #
+  # Note: the --sources option takes a path to a YAML file
+  # with a regular Hash mapping gem names to git urls.
+  #
+  # Examples:
+  #
+  # thor merb:edge
+  # thor merb:edge --install
+  # thor merb:edge --merb-root ./path/to/your/app
+  # thor merb:edge --sources ./path/to/sources.yml
+
+  desc 'edge', 'Install extlib, merb-core and merb-more from git HEAD'
+  method_options &quot;--merb-root&quot; =&gt; :optional, 
+                 &quot;--sources&quot;   =&gt; :optional,
+                 &quot;--install&quot;   =&gt; :boolean
   def edge
-     component = options[:component]
-     git_tool = Merb::Source.new
-     unless component
-       %W{merb-core merb-more merb-plugins extlib}.each do |component|
-         puts &quot;fetching #{component}&quot;
-         git_tool.clone(Merb.repos[component], options)
-         git_tool.install(component, options)
-       end
-     else
-        puts &quot;fetching #{component}&quot;
-        git_tool.clone(Merb.repos[component], options)
-        git_tool.install(component, options)
-     end
+    edge = Edge.new
+    edge.options = options
+    edge.core &amp;&amp; edge.more
+  end
+
+  class Edge &lt; Thor
+    
+    # The Edge tasks deal with known gems from the bleeding edge; available
+    # as shortcuts to Merb and DataMapper gems.
+    #
+    # These are pulled from git and optionally installed into into the 
+    # desired gems dir (either system-wide or into the application's 
+    # gems directory).
+    
+    include MerbThorHelper
+    
+    # Gets latest gem versions from git - optionally installs them.
+    #
+    # Note: the --sources option takes a path to a YAML file
+    # with a regular Hash mapping gem names to git urls,
+    # allowing pulling forks of the official repositories.
+    #
+    # Examples:
+    #
+    # thor merb:edge:core
+    # thor merb:edge:core --install
+    # thor merb:edge:core --merb-root ./path/to/your/app
+    # thor merb:edge:core --sources ./path/to/sources.yml
+    
+    desc 'core', 'Update extlib and merb-core from git HEAD'
+    method_options &quot;--merb-root&quot; =&gt; :optional, 
+                   &quot;--sources&quot;   =&gt; :optional,
+                   &quot;--install&quot;   =&gt; :boolean
+    def core
+      refresh_from_source 'extlib', 'merb-core'
+    end
+    
+    desc 'more', 'Update merb-more from git HEAD'
+    method_options &quot;--merb-root&quot; =&gt; :optional, 
+                   &quot;--sources&quot;   =&gt; :optional,
+                   &quot;--install&quot;   =&gt; :boolean
+    def more
+      refresh_from_source 'merb-more'
+    end
+    
+    desc 'plugins', 'Update merb-plugins from git HEAD'
+    method_options &quot;--merb-root&quot; =&gt; :optional, 
+                   &quot;--sources&quot;   =&gt; :optional,
+                   &quot;--install&quot;   =&gt; :boolean
+    def plugins
+      refresh_from_source 'merb-plugins'
+    end
+    
+    desc 'dm_core', 'Update dm-core from git HEAD'
+    method_options &quot;--merb-root&quot; =&gt; :optional, 
+                   &quot;--sources&quot;   =&gt; :optional,
+                   &quot;--install&quot;   =&gt; :boolean
+    def dm_core
+      refresh_from_source 'extlib', 'merb-core'
+    end
+    
+    desc 'dm_more', 'Update dm-more from git HEAD'
+    method_options &quot;--merb-root&quot; =&gt; :optional, 
+                   &quot;--sources&quot;   =&gt; :optional,
+                   &quot;--install&quot;   =&gt; :boolean
+    def dm_more
+      refresh_from_source 'extlib', 'merb-core'
+    end
+    
+    private
+    
+    # Pull from git and optionally install the resulting gems.
+    def refresh_from_source(*components)
+      source = Source.new
+      source.options = options
+      components.all? do |name|
+        if url = Merb.repos(options[:sources])[name]
+          source.clone(url)
+          source.install(name) if options[:install]
+          true
+        else
+          puts &quot;No repository url found for '#{name}'&quot;
+          false
+        end
+      end
+    end
+    
   end
-  
     
   class Source &lt; Thor
     
+    # The Source tasks deal with gem source packages - mainly from github.
+    # Any directory inside ./src is regarded as a gem that can be packaged
+    # and installed from there into the desired gems dir (either system-wide
+    # or into the application's gems directory).
+    
     include MerbThorHelper
     
+    # Install a particular gem from source. 
+    #
+    # If a local ./gems dir is found, or --merb-root is given
+    # the gems will be installed locally into that directory.
+    #
+    # Examples:
+    # 
+    # thor merb:source:install merb-core
+    # thor merb:source:install merb-more
+    # thor merb:source:install merb-more/merb-slices
+    # thor merb:source:install merb-plugins/merb_helpers
+    # thor merb:source:install merb-core --merb-root ./path/to/your/app
+    
+    desc 'install GEM_NAME', 'Install a rubygem from (git) source'
+    method_options &quot;--merb-root&quot; =&gt; :optional
+    def install(name)
+      puts &quot;Installing #{name}...&quot;
+      gem_src_dir = File.join(source_dir, name)
+      Merb.install_gem_from_src(gem_src_dir, gem_dir)
+    rescue Merb::SourcePathMissing
+      puts &quot;Missing rubygem source path: #{gem_src_dir}&quot;
+    rescue Merb::GemPathMissing
+      puts &quot;Missing rubygems path: #{gem_dir}&quot;
+    rescue =&gt; e
+      puts &quot;Failed to install #{name} (#{e.message})&quot;
+    end
+    
+    # Clone a git repository into ./src.
+    
     desc 'clone REPOSITORY_URL', 'Clone a git repository into ./src'
-    def clone(repository_url, options={})
-      Merb.set_working_dir(options[&quot;merb-root&quot;])
+    def clone(repository_url)
       repository_name = repository_url[/([\w+|-]+)\.git/u, 1]
+      fork_name = repository_url[/.com\/+?(.+)\/.+\.git/u, 1]
       local_repo_path =  &quot;#{source_dir}/#{repository_name}&quot;
       
       if File.directory?(local_repo_path)
         puts &quot;\n#{repository_name} repository exists, updating or branching instead of cloning...&quot;
         FileUtils.cd(local_repo_path) do
-       
+
           # to avoid conflicts we need to set a remote branch for non official repos
-          #
-          existing_repos = `git remote -v`.split(&quot;\n&quot;).map{|branch| branch.split(/\s+/)}
-          origin_repo_url     = existing_repos.detect{|r| r.first == &quot;origin&quot;}.last
+          existing_repos  = `git remote -v`.split(&quot;\n&quot;).map{|branch| branch.split(/\s+/)}
+          origin_repo_url = existing_repos.detect{ |r| r.first == &quot;origin&quot; }.last
         
+          # pull from the original repository - no branching needed
           if repository_url == origin_repo_url
+            puts &quot;Pulling from #{repository_url}&quot;            
             system %{
               git fetch
               git checkout master
               git rebase origin/master
             }
-          # update and switch to the branch
-          #
-          elsif existing_repos.map{|r| r.last}.include?(repository_url)
-            branch_name = repository_url[/.com\/+?(.+)\/.+\.git/u, 1]
-            print &quot;switching to remote branch: #{branch_name}\n&quot;
-            `git checkout -b #{branch_name} #{branch_name}/master`
-            `git rebase #{branch_name}/master`
-          
+          # update and switch to a branch for a particular github fork
+          elsif existing_repos.map{ |r| r.last }.include?(repository_url)
+            puts &quot;Switching to remote branch: #{fork_name}&quot;
+            `git checkout -b #{fork_name} #{fork_name}/master`
+            `git rebase #{fork_name}/master`            
+          # create a new remote branch for a particular github fork 
           else
-            # create a new remote branch
-            #
-            branch_name = repository_url[/.com\/+?(.+)\/.+\.git/u, 1]
-            print &quot;Add a new remote branch: #{branch_name}\n&quot;
-            `git remote add -f #{branch_name} #{repository_url}`
-            `git checkout -b#{branch_name}  #{branch_name}/master`
+            puts &quot;Add a new remote branch: #{fork_name}&quot;
+            `git remote add -f #{fork_name} #{repository_url}`
+            `git checkout -b#{fork_name} #{fork_name}/master`
           end
         end
       else
@@ -117,52 +316,36 @@ class Merb &lt; Thor
       end
     end
     
-    desc 'update REPOSITORY_URL', 'Update a git repository from ./src'
+    # Update a specific gem source directory from git.
+    
+    desc 'update REPOSITORY_URL', 'Update a git repository in ./src'
     alias :update :clone
     
-    desc 'refresh', 'Pull fresh copies of all source gems and install them'
+    # Update all gem sources from git - based on the current branch.
+    
+    desc 'refresh', 'Pull fresh copies of all source gems'
     def refresh
       repos = Dir[&quot;#{source_dir}/*&quot;]
       repos.each do |repo|
+        next unless File.directory?(repo) &amp;&amp; File.exists?(File.join(repo, '.git'))
         FileUtils.cd(repo) do
+          puts &quot;Refreshing #{File.basename(repo)}&quot;
           branch = `git branch --no-color 2&gt; /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /'`[/\* (.+)/, 1]
-          system %{ git rebase #{branch}}
+          system %{git rebase #{branch}}
         end
       end
     end
-    
-    # Install a particular gem from source. 
-    #
-    # If a local ./gems dir is found, or --merb-root is given
-    # the gems will be installed locally into that directory.
-    #
-    # Examples:
-    # 
-    # thor merb:source:install merb-core
-    # thor merb:source:install merb-more
-    # thor merb:source:install merb-more/merb-slices
-    # thor merb:source:install merb-plugins/merb_helpers
-    # thor merb:source:install merb-core --merb-root ./path/to/your/app
-    
-    desc 'install GEM_NAME', 'Install a rubygem from (git) source'
-    method_options &quot;--merb-root&quot; =&gt; :optional
-    def install(name, options={})
-      Merb.set_working_dir(options[&quot;merb-root&quot;])
-      puts &quot;Installing #{name}...&quot;
-      gem_src_dir = File.join(source_dir, name)
-      Merb.install_gem_from_src(gem_src_dir, gem_dir)
-    rescue Merb::SourcePathMissing
-      puts &quot;Missing rubygem source path: #{gem_src_dir}&quot;
-    rescue Merb::GemPathMissing
-      puts &quot;Missing rubygems path: #{gem_dir}&quot;
-    rescue =&gt; e
-      puts &quot;Failed to install #{name} (#{e.message})&quot;
-    end
 
   end
   
   class Gems &lt; Thor
     
+    # The Gems tasks deal directly with rubygems, either through remotely
+    # available sources (rubyforge for example) or by searching the
+    # system-wide gem cache for matching gems. The gems are installed from 
+    # there into the desired gems dir (either system-wide or into the 
+    # application's gems directory).
+    
     include MerbThorHelper
     
     # Install a gem and its dependencies.
@@ -170,20 +353,28 @@ class Merb &lt; Thor
     # If a local ./gems dir is found, or --merb-root is given
     # the gems will be installed locally into that directory.
     #
+    # The option --cache will look in the system's gem cache
+    # for the latest version and install it in the apps' gems.
+    # This is particularly handy for gems that aren't available
+    # through rubyforge.org - like in-house merb slices etc.
+    #
     # Examples:
     #
     # thor merb:gems:install merb-core
+    # thor merb:gems:install merb-core --cache
     # thor merb:gems:install merb-core --version 0.9.7
     # thor merb:gems:install merb-core --merb-root ./path/to/your/app
     
     desc 'install GEM_NAME', 'Install a gem from rubygems'
     method_options &quot;--version&quot;   =&gt; :optional, 
-                   &quot;--merb-root&quot; =&gt; :optional
+                   &quot;--merb-root&quot; =&gt; :optional,
+                   &quot;--cache&quot;     =&gt; :boolean
     def install(name)
       puts &quot;Installing #{name}...&quot;
       opts = {}
       opts[:version] = options[:version]
-      opts[:install_dir] = gem_dir if gem_dir
+      opts[:install_dir] = gem_dir   if gem_dir
+      opts[:cache] = options[:cache] if gem_dir
       Merb.install_gem(name, opts)
     rescue =&gt; e
       puts &quot;Failed to install #{name} (#{e.message})&quot;
@@ -194,21 +385,30 @@ class Merb &lt; Thor
     # If a local ./gems dir is found, or --merb-root is given
     # the gems will be installed locally into that directory.
     #
+    # The option --cache will look in the system's gem cache
+    # for the latest version and install it in the apps' gems.
+    # This is particularly handy for gems that aren't available
+    # through rubyforge.org - like in-house merb slices etc.
+    #
     # Examples:
     #
     # thor merb:gems:update merb-core
+    # thor merb:gems:update merb-core --cache
     # thor merb:gems:update merb-core --merb-root ./path/to/your/app
     
     desc 'update GEM_NAME', 'Update a gem from rubygems'
-    method_options &quot;--merb-root&quot; =&gt; :optional
+    method_options &quot;--merb-root&quot; =&gt; :optional,
+                   &quot;--cache&quot;     =&gt; :boolean
     def update(name)
       puts &quot;Updating #{name}...&quot;
       opts = {}
-      if gem_dir &amp;&amp;
-        (gemspec_path = Dir[File.join(gem_dir, 'specifications', &quot;#{name}-*.gemspec&quot;)].last)
-        gemspec = Gem::Specification.load(gemspec_path)
-        opts[:version] = Gem::Requirement.new [&quot;&gt;=#{gemspec.version}&quot;]
+      if gem_dir
+        if gemspec_path = Dir[File.join(gem_dir, 'specifications', &quot;#{name}-*.gemspec&quot;)].last
+          gemspec = Gem::Specification.load(gemspec_path)
+          opts[:version] = Gem::Requirement.new [&quot;&gt;#{gemspec.version}&quot;]
+        end
         opts[:install_dir] = gem_dir
+        opts[:cache] = options[:cache]
       end
       Merb.install_gem(name, opts)
     rescue =&gt; e
@@ -269,29 +469,6 @@ class Merb &lt; Thor
       puts &quot;Failed to wipe #{name} (#{e.message})&quot;  
     end
     
-    # Remove a gem then install a fresh version.
-    #
-    # If a local ./gems dir is found, or --merb-root is given
-    # the gems will be installed locally into that directory.
-    #
-    # Examples:
-    #
-    # thor merb:gems:refresh merb-core
-    # thor merb:gems:refresh merb-core --version 0.9.7
-    # thor merb:gems:refresh merb-core --merb-root ./path/to/your/app
-
-    desc 'refresh GEM_NAME', 'Wipe then install a gem'
-    method_options &quot;--version&quot;   =&gt; :optional,
-                   &quot;--merb-root&quot; =&gt; :optional
-    def refresh(name)
-      begin
-        self.wipe(name)
-      rescue Merb::GemUninstallError
-        puts &quot;The gem '#{name}' wasn't installed before.&quot;
-      end
-      self.install(name)
-    end
-    
     # This task should be executed as part of a deployment setup, where
     # the deployment system runs this after the app has been installed.
     # Usually triggered by Capistrano, God...
@@ -326,53 +503,78 @@ class Merb &lt; Thor
   
   class &lt;&lt; self
     
-    # Default Git repositories.
-    def repos
-      @_repos ||= {
+    # Default Git repositories - pass source_config option
+    # to load a yaml configuration file.
+    def repos(source_config = nil)
+      @_repos ||= begin
+        repositories = {
         'merb-core'     =&gt; &quot;git://github.com/wycats/merb-core.git&quot;,
         'merb-more'     =&gt; &quot;git://github.com/wycats/merb-more.git&quot;,
         'merb-plugins'  =&gt; &quot;git://github.com/wycats/merb-plugins.git&quot;,
         'extlib'        =&gt; &quot;git://github.com/sam/extlib.git&quot;,
         'dm-core'       =&gt; &quot;git://github.com/sam/dm-core.git&quot;,
         'dm-more'       =&gt; &quot;git://github.com/sam/dm-more.git&quot;
-      }
-    end
-    
-    # Have to be set for every task requiring the working dir otherwise task dependent on others break
-    def set_working_dir(path=nil)
-      @@working_dir ||= File.expand_path(path || Dir.pwd)
+        }
+      end
+      if source_config &amp;&amp; File.exists?(source_config)
+        @_repos.merge(YAML.load(File.read(source_config)))
+      else
+        @_repos
+      end
     end
     
-    def working_dir
-      @@working_dir
+    # Install a gem - looks remotely and local gem cache;
+    # won't process rdoc or ri options.
+    def install_gem(gem, options = {})
+      from_cache = (options.key?(:cache) &amp;&amp; options.delete(:cache))
+      if from_cache
+        install_gem_from_cache(gem, options)
+      else
+        version = options.delete(:version)
+        Gem.configuration.update_sources = false
+        installer = Gem::DependencyInstaller.new(options)
+        exception = nil
+        begin
+          installer.install gem, version
+        rescue Gem::InstallError =&gt; e
+          exception = e
+        rescue Gem::GemNotFoundException =&gt; e
+          if from_cache &amp;&amp; gem_file = find_gem_in_cache(gem, version)
+            puts &quot;Located #{gem} in gem cache...&quot;
+            installer.install gem_file
+          else
+            exception = e
+          end
+        rescue =&gt; e
+          exception = e
+        end
+        if installer.installed_gems.empty? &amp;&amp; exception
+          puts &quot;Failed to install gem '#{gem}' (#{exception.message})&quot;
+        end
+        installer.installed_gems.each do |spec|
+          puts &quot;Successfully installed #{spec.full_name}&quot;
+        end
+      end
     end
     
-    
-    # Install a gem - looks remotely and locally;
+    # Install a gem - looks in the system's gem cache instead of remotely;
     # won't process rdoc or ri options.
-    def install_gem(gem, options = {})
+    def install_gem_from_cache(gem, options = {})
       version = options.delete(:version)
       Gem.configuration.update_sources = false
       installer = Gem::DependencyInstaller.new(options)
       exception = nil
       begin
-        installer.install gem, version
-      rescue Gem::InstallError =&gt; e
-        exception = e
-      rescue Gem::GemNotFoundException =&gt; e
-        puts &quot;Locating #{gem} in local gem path cache...&quot;
-        spec = if version
-          version = Gem::Requirement.new [&quot;= #{version}&quot;] unless version.is_a?(Gem::Requirement)
-          Gem.source_index.find_name(gem, version).first
-        else
-          Gem.source_index.find_name(gem).sort_by { |g| g.version }.last
-        end
-        if spec &amp;&amp; File.exists?(gem_file = &quot;#{spec.installation_path}/cache/#{spec.full_name}.gem&quot;)
+        if gem_file = find_gem_in_cache(gem, version)
+          puts &quot;Located #{gem} in gem cache...&quot;
           installer.install gem_file
+        else
+          raise Gem::InstallError, &quot;Unknown gem #{gem}&quot; 
         end
+      rescue Gem::InstallError =&gt; e
         exception = e
       end
-      if installer.installed_gems.empty? &amp;&amp; e
+      if installer.installed_gems.empty? &amp;&amp; exception
         puts &quot;Failed to install gem '#{gem}' (#{e.message})&quot;
       end
       installer.installed_gems.each do |spec|
@@ -442,6 +644,20 @@ class Merb &lt; Thor
       end
     end
     
+    private
+    
+    def find_gem_in_cache(gem, version)
+      spec = if version
+        version = Gem::Requirement.new [&quot;= #{version}&quot;] unless version.is_a?(Gem::Requirement)
+        Gem.source_index.find_name(gem, version).first
+      else
+        Gem.source_index.find_name(gem).sort_by { |g| g.version }.last
+      end
+      if spec &amp;&amp; File.exists?(gem_file = &quot;#{spec.installation_path}/cache/#{spec.full_name}.gem&quot;)
+        gem_file
+      end
+    end
+    
   end
   
   class Tasks &lt; Thor</diff>
      <filename>merb.thor</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c80fa3bd5f72e5f95bfd62d676cbd4693ae24379</id>
    </parent>
  </parents>
  <author>
    <name>Matt Aimonetti</name>
    <email>mattaimonetti@gmail.com</email>
  </author>
  <url>http://github.com/mattetti/merb-thor/commit/f382ea84bfa78fa7fde32858b6c2499978ed3070</url>
  <id>f382ea84bfa78fa7fde32858b6c2499978ed3070</id>
  <committed-date>2008-09-12T09:16:20-07:00</committed-date>
  <authored-date>2008-09-12T09:16:20-07:00</authored-date>
  <message>Merge branch 'master' of git@github.com:fabien/merb-thor

Conflicts:

	merb.thor</message>
  <tree>19c0b963035e2063c9bad0bb352fc7d6e611628a</tree>
  <committer>
    <name>Matt Aimonetti</name>
    <email>mattaimonetti@gmail.com</email>
  </committer>
</commit>
