You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildr.apache.org by vb...@apache.org on 2008/09/24 21:17:27 UTC
svn commit: r698692 - /incubator/buildr/trunk/rakelib/setup.rake
Author: vborja
Date: Wed Sep 24 12:17:27 2008
New Revision: 698692
URL: http://svn.apache.org/viewvc?rev=698692&view=rev
Log:
Modified setup.rake:install_gem to fetch gem cache only once.
Use sudo if no Gem.path is writable.
Modified:
incubator/buildr/trunk/rakelib/setup.rake
Modified: incubator/buildr/trunk/rakelib/setup.rake
URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/rakelib/setup.rake?rev=698692&r1=698691&r2=698692&view=diff
==============================================================================
--- incubator/buildr/trunk/rakelib/setup.rake (original)
+++ incubator/buildr/trunk/rakelib/setup.rake Wed Sep 24 12:17:27 2008
@@ -16,7 +16,7 @@
require 'rubygems/source_info_cache'
require 'stringio' # for Gem::RemoteFetcher
-
+require 'jruby' if RUBY_PLATFORM[/java/]
# True if running on the Windows operating sytem. Different from Gem.win_platform?
# which returns true if running on the Windows platform of MRI, false when using JRuby.
@@ -24,11 +24,20 @@
Config::CONFIG['host_os'] =~ /windows|cygwin|bccwin|cygwin|djgpp|mingw|mswin|wince/i
end
+def set_java_home
+ if !ENV['JAVA_HOME'] && RUBY_PLATFORM[/java/]
+ ENV['JAVA_HOME'] = java.lang.System.getProperty('java.home')
+ end
+ fail "Please set JAVA_HOME first #{'(no need to run as sudo)' if ENV['USER'] == 'root'}" unless ENV['JAVA_HOME']
+end
-def sudo_needed?
- !windows? && (ENV['GEM_HOME'].nil?)
+def set_gem_home
+ ENV['GEM_HOME'] ||= Gem.path.find { |f| File.writable?(f) }
end
+def sudo_needed?
+ !( windows? || set_gem_home )
+end
# Finds and returns path to executable. Consults PATH environment variable.
# Returns nil if executable not found.
@@ -41,18 +50,26 @@
FileList[path].existing.first
end
+# Execute a GemRunner command
+def gem_run(*args)
+ rb_bin = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
+ args.unshift rb_bin, '-S', 'gem'
+ args.unshift 'sudo', 'env', 'JAVA_HOME=' + ENV['JAVA_HOME'] if sudo_needed?
+ sh *args.map{ |a| a.inspect }.join(' ')
+end
def install_gem(name, ver_requirement = ['> 0'])
dep = Gem::Dependency.new(name, ver_requirement)
- rb_bin = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
+ @load_cache = true
if Gem::SourceIndex.from_installed_gems.search(dep).empty?
- spec = Gem::SourceInfoCache.search(dep, true, true).last
+ spec = Gem::SourceInfoCache.search(dep, true, @load_cache).last
fail "#{dep} not found in local or remote repository!" unless spec
puts "Installing #{spec.full_name} ..."
- args = [rb_bin, '-S', 'gem', 'install', spec.name, '-v', spec.version.to_s]
- fail "Please set JAVA_HOME first #{'(no need to run as sudo)' if ENV['USER'] == 'root'}" unless ENV['JAVA_HOME']
- args.unshift('sudo', 'env', 'JAVA_HOME=' + ENV['JAVA_HOME']) if sudo_needed?
- sh *args.map{ |a| a.inspect }.join(' ')
+ args = ['install']
+ args.push '--install-dir', ENV['GEM_HOME'] if ENV['GEM_HOME']
+ args.push spec.name, '-v', spec.version.to_s
+ gem_run *args
+ @load_cache = false # Just update the Gem cache once
end
end
@@ -60,6 +77,8 @@
desc "If you're building from sources, run this task first to setup the necessary dependencies."
missing = spec.dependencies.select { |dep| Gem::SourceIndex.from_installed_gems.search(dep).empty? }
task 'setup' do
+ set_java_home
+ set_gem_home
missing.each do |dep|
install_gem dep.name, dep.version_requirements
end
Re: svn commit: r698692 - /incubator/buildr/trunk/rakelib/setup.rake
Posted by Assaf Arkin <ar...@intalio.com>.
def set_gem_home
ENV['GEM_HOME'] ||= Gem.path.find { |f| File.writable?(f) }
end
Unfortunately this doesn't work as a reliable sudo detector. I tried
it before only to realize it works for some gems, but not others:
buildr, rake, rubyforge all install executables, typically in
/usr/bin, and so require sudo to install properly.
also, sudo_needed? (question mark = no side effects) calling
set_gem_home (set = side effects) ? :-)
assaf
On Wed, Sep 24, 2008 at 12:17 PM, <vb...@apache.org> wrote:
> Author: vborja
> Date: Wed Sep 24 12:17:27 2008
> New Revision: 698692
>
> URL: http://svn.apache.org/viewvc?rev=698692&view=rev
> Log:
> Modified setup.rake:install_gem to fetch gem cache only once.
> Use sudo if no Gem.path is writable.
>
> Modified:
> incubator/buildr/trunk/rakelib/setup.rake
>
> Modified: incubator/buildr/trunk/rakelib/setup.rake
> URL: http://svn.apache.org/viewvc/incubator/buildr/trunk/rakelib/setup.rake?rev=698692&r1=698691&r2=698692&view=diff
> ==============================================================================
> --- incubator/buildr/trunk/rakelib/setup.rake (original)
> +++ incubator/buildr/trunk/rakelib/setup.rake Wed Sep 24 12:17:27 2008
> @@ -16,7 +16,7 @@
>
> require 'rubygems/source_info_cache'
> require 'stringio' # for Gem::RemoteFetcher
> -
> +require 'jruby' if RUBY_PLATFORM[/java/]
>
> # True if running on the Windows operating sytem. Different from Gem.win_platform?
> # which returns true if running on the Windows platform of MRI, false when using JRuby.
> @@ -24,11 +24,20 @@
> Config::CONFIG['host_os'] =~ /windows|cygwin|bccwin|cygwin|djgpp|mingw|mswin|wince/i
> end
>
> +def set_java_home
> + if !ENV['JAVA_HOME'] && RUBY_PLATFORM[/java/]
> + ENV['JAVA_HOME'] = java.lang.System.getProperty('java.home')
> + end
> + fail "Please set JAVA_HOME first #{'(no need to run as sudo)' if ENV['USER'] == 'root'}" unless ENV['JAVA_HOME']
> +end
>
> -def sudo_needed?
> - !windows? && (ENV['GEM_HOME'].nil?)
> +def set_gem_home
> + ENV['GEM_HOME'] ||= Gem.path.find { |f| File.writable?(f) }
> end
>
> +def sudo_needed?
> + !( windows? || set_gem_home )
> +end
>
> # Finds and returns path to executable. Consults PATH environment variable.
> # Returns nil if executable not found.
> @@ -41,18 +50,26 @@
> FileList[path].existing.first
> end
>
> +# Execute a GemRunner command
> +def gem_run(*args)
> + rb_bin = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
> + args.unshift rb_bin, '-S', 'gem'
> + args.unshift 'sudo', 'env', 'JAVA_HOME=' + ENV['JAVA_HOME'] if sudo_needed?
> + sh *args.map{ |a| a.inspect }.join(' ')
> +end
>
> def install_gem(name, ver_requirement = ['> 0'])
> dep = Gem::Dependency.new(name, ver_requirement)
> - rb_bin = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
> + @load_cache = true
> if Gem::SourceIndex.from_installed_gems.search(dep).empty?
> - spec = Gem::SourceInfoCache.search(dep, true, true).last
> + spec = Gem::SourceInfoCache.search(dep, true, @load_cache).last
> fail "#{dep} not found in local or remote repository!" unless spec
> puts "Installing #{spec.full_name} ..."
> - args = [rb_bin, '-S', 'gem', 'install', spec.name, '-v', spec.version.to_s]
> - fail "Please set JAVA_HOME first #{'(no need to run as sudo)' if ENV['USER'] == 'root'}" unless ENV['JAVA_HOME']
> - args.unshift('sudo', 'env', 'JAVA_HOME=' + ENV['JAVA_HOME']) if sudo_needed?
> - sh *args.map{ |a| a.inspect }.join(' ')
> + args = ['install']
> + args.push '--install-dir', ENV['GEM_HOME'] if ENV['GEM_HOME']
> + args.push spec.name, '-v', spec.version.to_s
> + gem_run *args
> + @load_cache = false # Just update the Gem cache once
> end
> end
>
> @@ -60,6 +77,8 @@
> desc "If you're building from sources, run this task first to setup the necessary dependencies."
> missing = spec.dependencies.select { |dep| Gem::SourceIndex.from_installed_gems.search(dep).empty? }
> task 'setup' do
> + set_java_home
> + set_gem_home
> missing.each do |dep|
> install_gem dep.name, dep.version_requirements
> end
>
>
>