diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2008-03-17 21:44:16 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2008-03-17 21:44:16 +0000 |
commit | d07d6e900c1919bfafd4e2382b31cfe0faeebaa0 (patch) | |
tree | face3028efda86a569571ad771c6af5597966e7c /railties/lib | |
parent | 54ccdd334385fea706eb8d5b3ed95d7102a9d0d4 (diff) | |
download | rails-d07d6e900c1919bfafd4e2382b31cfe0faeebaa0.tar.gz rails-d07d6e900c1919bfafd4e2382b31cfe0faeebaa0.tar.bz2 rails-d07d6e900c1919bfafd4e2382b31cfe0faeebaa0.zip |
Added support for installing plugins hosted at git repositories (closes #11294) [danger]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@9049 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'railties/lib')
-rw-r--r-- | railties/lib/commands/plugin.rb | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/railties/lib/commands/plugin.rb b/railties/lib/commands/plugin.rb index a6303e36db..d12d002c4e 100644 --- a/railties/lib/commands/plugin.rb +++ b/railties/lib/commands/plugin.rb @@ -162,6 +162,10 @@ class Plugin @uri =~ /svn(?:\+ssh)?:\/\/*/ end + def git_url? + @uri =~ /^git:\/\// || @url =~ /\.git$/ + end + def installed? File.directory?("#{rails_env.root}/vendor/plugins/#{name}") \ or rails_env.externals.detect{ |name, repo| self.uri == repo } @@ -169,7 +173,10 @@ class Plugin def install(method=nil, options = {}) method ||= rails_env.best_install_method? - method = :export if method == :http and svn_url? + if :http == method + method = :export if svn_url? + method = :clone if git_url? + end uninstall if installed? and options[:force] @@ -247,6 +254,10 @@ class Plugin fetcher.fetch end end + + def install_using_clone(options = {}) + git_command :clone, options + end def svn_command(cmd, options = {}) root = rails_env.root @@ -257,12 +268,23 @@ class Plugin puts base_cmd if $verbose system(base_cmd) end + + def git_command(cmd, options = {}) + root = rails_env.root + mkdir_p "#{root}/vendor/plugins" + base_cmd = "git #{cmd} --depth 1 #{uri} \"#{root}/vendor/plugins/#{name}\"" + puts base_cmd if $verbose + puts "removing: #{root}/vendor/plugins/#{name}/.git" + system(base_cmd) + rm_rf "#{root}/vendor/plugins/#{name}/.git" + end def guess_name(url) @name = File.basename(url) if @name == 'trunk' || @name.empty? @name = File.basename(File.dirname(url)) end + @name.gsub!(/\.git$/, '') if @name =~ /\.git$/ end def rails_env @@ -447,6 +469,8 @@ module Commands o.separator " #{@script_name} install continuous_builder\n" o.separator " Install a plugin from a subversion URL:" o.separator " #{@script_name} install http://dev.rubyonrails.com/svn/rails/plugins/continuous_builder\n" + o.separator " Install a plugin from a git URL:" + o.separator " #{@script_name} install git://github.com/SomeGuy/my_awesome_plugin.git\n" o.separator " Install a plugin and add a svn:externals entry to vendor/plugins" o.separator " #{@script_name} install -x continuous_builder\n" o.separator " List all available plugins:" |