lib/stevenson/templates/git.rb in stevenson-2.1.0 vs lib/stevenson/templates/git.rb in stevenson-2.2.0

- old
+ new

@@ -1,26 +1,35 @@ require 'git' module Stevenson module Template - class Git < Base + class Git < Local attr_reader :template_url, :options def initialize(template_url, options) @template_url, @options = template_url, options end def local_directory - @_local_directory ||= Dir.mktmpdir.tap do |dir| - # Clone the repo to a temporary directory for later use - ::Git.clone(template_url, dir).tap do |repo| - # Switch_branch if set - repo.checkout(options[:branch]) if options.has_key?(:branch) + @_local_directory ||= begin + @template_path ||= Dir.mktmpdir.tap do |dir| + # Clone the repo to a temporary directory for later use + ::Git.clone(template_url, dir).tap do |repo| + # Switch_branch if set + repo.checkout(options[:branch]) if options.has_key?(:branch) + end end + + super end rescue ::Git::GitExecuteError # If the given repo URL is not valid, raise an exception - raise InvalidTemplateException.new('Failed to clone the repository') + raise InvalidTemplateException.new('Failed to clone the repository and/or branch') + end + + def close + FileUtils.rm_rf template_path if template_path + super end end end end