Skip to content

Commit

Permalink
Make script/plugin install <plugin> -r <revision> option work with gi…
Browse files Browse the repository at this point in the history
…t based plugins. [#257 state:resolved]

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
  • Loading branch information
tpope authored and lifo committed Jul 14, 2008
1 parent e0750d6 commit 5c08607
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 15 deletions.
5 changes: 5 additions & 0 deletions railties/CHANGELOG
@@ -1,5 +1,10 @@
*Edge*

* Make script/plugin install <plugin> -r <revision> option work with git based plugins. #257. [Tim Pope Jakub Kuźma]. Example:

script/plugin install git://github.com/mislav/will_paginate.git -r agnostic # Installs 'agnostic' branch
script/plugin install git://github.com/dchelimsky/rspec.git -r 'tag 1.1.4'

* Added Rails.initialized? flag [Josh Peek]

* Make rake test:uncommitted work with Git. [Tim Pope]
Expand Down
47 changes: 32 additions & 15 deletions railties/lib/commands/plugin.rb
Expand Up @@ -43,6 +43,16 @@
# plugin is pulled via `svn checkout` or `svn export` but looks
# exactly the same.
#
# Specifying revisions:
#
# * Subversion revision is a single integer.
#
# * Git revision format:
# - full - 'refs/tags/1.8.0' or 'refs/heads/experimental'
# - short: 'experimental' (equivalent to 'refs/heads/experimental')
# 'tag 1.8.0' (equivalent to 'refs/tags/1.8.0')
#
#
# This is Free Software, copyright 2005 by Ryan Tomayko (rtomayko@gmail.com)
# and is licensed MIT: (http://www.opensource.org/licenses/mit-license.php)

Expand Down Expand Up @@ -175,7 +185,7 @@ def install(method=nil, options = {})
method ||= rails_env.best_install_method?
if :http == method
method = :export if svn_url?
method = :clone if git_url?
method = :git if git_url?
end

uninstall if installed? and options[:force]
Expand Down Expand Up @@ -255,8 +265,25 @@ def install_using_http(options = {})
end
end

def install_using_clone(options = {})
git_command :clone, options
def install_using_git(options = {})
root = rails_env.root
install_path = mkdir_p "#{root}/vendor/plugins/#{name}"
Dir.chdir install_path do
init_cmd = "git init"
init_cmd += " -q" if options[:quiet] and not $verbose
puts init_cmd if $verbose
system(init_cmd)
base_cmd = "git pull --depth 1 #{uri}"
base_cmd += " -q" if options[:quiet] and not $verbose
base_cmd += " #{options[:revision]}" if options[:revision]
puts base_cmd if $verbose
if system(base_cmd)
puts "removing: .git" if $verbose
rm_rf ".git"
else
rm_rf install_path
end
end
end

def svn_command(cmd, options = {})
Expand All @@ -268,16 +295,6 @@ def svn_command(cmd, options = {})
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)
Expand Down Expand Up @@ -756,8 +773,8 @@ def options
"Suppresses the output from installation.",
"Ignored if -v is passed (./script/plugin -v install ...)") { |v| @options[:quiet] = true }
o.on( "-r REVISION", "--revision REVISION",
"Checks out the given revision from subversion.",
"Ignored if subversion is not used.") { |v| @options[:revision] = v }
"Checks out the given revision from subversion or git.",
"Ignored if subversion/git is not used.") { |v| @options[:revision] = v }
o.on( "-f", "--force",
"Reinstalls a plugin if it's already installed.") { |v| @options[:force] = true }
o.separator ""
Expand Down

0 comments on commit 5c08607

Please sign in to comment.