rconf 0.6.25 → 0.6.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,6 +18,9 @@ module RightConf
18
18
  include Singleton
19
19
  include ProgressReporter
20
20
 
21
+ # Builtin RVM commands
22
+ RVM_COMMANDS = [ 'gem', 'rubygems' ]
23
+
21
24
  # Execute given command with given arguments
22
25
  #
23
26
  # === Parameters
@@ -34,7 +37,7 @@ module RightConf
34
37
  end
35
38
  res = Platform.dispatch(command, *args) { :execute }
36
39
  if @verbose
37
- msg = (([@prefix, command] + args).compact.join(' ') + ' => ' +
40
+ msg = (([command] + args).compact.join(' ') + ' => ' +
38
41
  res.status.to_s + ': ' + res.output).grey
39
42
  report(msg)
40
43
  end
@@ -44,6 +47,27 @@ module RightConf
44
47
  res
45
48
  end
46
49
 
50
+ # Execute command in context of activated ruby
51
+ #
52
+ # === Parameters
53
+ # command(String):: Command to run
54
+ # args(Array):: Command arguments
55
+ #
56
+ # === Return
57
+ # result(CommandResult):: Result of execution (output and exit status)
58
+ # NOTE: This is the result returned by RVM, not the underlying command
59
+ # and thus could be successful when the command actually failed...
60
+ def execute_in_ruby(command, *args)
61
+ report_fatal('Failed to run in ruby context, no ruby specified') unless @rvm_prefix
62
+ commands = if RVM_COMMANDS.include?(command)
63
+ [ @rvm_prefix, command ]
64
+ else
65
+ [ @rvm_prefix, 'exec', '--', command ]
66
+ end
67
+ args = commands + args
68
+ execute('rvm', *args)
69
+ end
70
+
47
71
  # Execute given command with given arguments using 'sudo'
48
72
  #
49
73
  # === Parameters
@@ -66,7 +90,7 @@ module RightConf
66
90
  # === Return
67
91
  # result(CommandResult):: Result of execution (output and exit status)
68
92
  def execute_linux(command, *args)
69
- out = `#{@prefix} #{Shellwords.join([command, *args])} 2>&1`
93
+ out = `#{Shellwords.join([command, *args])} 2>&1`
70
94
  result = CommandResult.new(out, $?.exitstatus)
71
95
  end
72
96
  alias :execute_darwin :execute_linux
@@ -83,15 +107,16 @@ module RightConf
83
107
  raise 'TBD!'
84
108
  end
85
109
 
86
- # Set prefix to be used for all commands
110
+ # Set ruby to be used by 'execute_in_ruby'
87
111
  #
88
112
  # === Parameters
89
- # prefix(String):: Commands prefix
113
+ # ruby(String):: RVM ruby
114
+ # gemset(String):: RVM gemset
90
115
  #
91
116
  # === Return
92
117
  # true:: Always return true
93
- def set_prefix(prefix)
94
- @prefix = prefix
118
+ def set_ruby(ruby, gemset)
119
+ @rvm_prefix = "#{ruby}@#{gemset}"
95
120
  true
96
121
  end
97
122
 
@@ -34,7 +34,7 @@ module RightConf
34
34
  # true:: Always return true
35
35
  def run_linux
36
36
  report_check("Checking for bundler #{version}")
37
- res = Command.execute('bundle', '--version')
37
+ res = Command.execute_in_ruby('bundle', '--version')
38
38
  success = (res.output =~ /#{version}/)
39
39
  report_result(success)
40
40
  install_bundler unless success
@@ -43,7 +43,7 @@ module RightConf
43
43
  options << "--without=#{exclusions}" unless exclusions.nil?
44
44
  options << "--path #{bundle_path}" unless bundle_path.nil?
45
45
  options << { :abort_on_failure => 'Failed to install gems' }
46
- res = Command.execute('bundle', *options)
46
+ res = Command.execute_in_ruby('bundle', *options)
47
47
  report_success
48
48
  true
49
49
  end
@@ -67,11 +67,11 @@ module RightConf
67
67
  # === Raise
68
68
  # (Exception):: If bundler gem cannot be found or installed
69
69
  def install_bundler
70
- res = Command.execute('bundle', '--version')
70
+ res = Command.execute_in_ruby('bundle', '--version')
71
71
  exists = res.success? && res.output !~ /exec: bundle: not found/
72
72
  if exists
73
73
  report_check('Uninstalling existing versions of bundler')
74
- Command.execute('gem', 'uninstall', 'bundler', '-a', '-x')
74
+ Command.execute_in_ruby('gem', 'uninstall', 'bundler', '-a', '-x')
75
75
  report_success
76
76
  end
77
77
  report_check("Installing bundler #{version}")
@@ -84,7 +84,7 @@ module RightConf
84
84
  options = [ 'gem','install' ]
85
85
  options += bundler_file
86
86
  options += [ '--no-ri', '--no-rdoc', { :abort_on_failure => 'Failed to install bundler' } ]
87
- res = Command.execute(*options)
87
+ res = Command.execute_in_ruby(*options)
88
88
  report_success
89
89
  true
90
90
  end
@@ -31,7 +31,7 @@ module RightConf
31
31
  def run_linux
32
32
  unless mercurial_installed
33
33
  opts = { :report => true }.merge(abort_option('Failed to install Mercurial'))
34
- PackageInstaller.install('mercurial', opts)
34
+ PackageInstaller.install('mercurial', opts) { !mercurial_installed }
35
35
  end
36
36
  end
37
37
 
@@ -42,17 +42,21 @@ module RightConf
42
42
  def run_darwin
43
43
  unless mercurial_installed
44
44
  report_check('Installing Mercurial')
45
- tempdir = File.join(ENV['HOME'], '.rconf', 'temp')
45
+ tempdir = File.join(ENV['HOME'], '.rconf_temp')
46
46
  FileUtils.mkdir_p(tempdir)
47
- Dir.chdir(tempdir) do
48
- Command.execute('curl', '-O', '-f', MAC_MERCURIAL_URL,
49
- abort_option('Failed to download Mercurial'))
50
- Command.execute('unzip', File.basename(MAC_MERCURIAL_URL),
51
- abort_option('Failed to unzip Mercurial'))
52
- end
53
- Dir.chdir(File.join(tempdir, MAC_MERCURIAL_FILE)) do
54
- Command.sudo('installer', '-pkg', MAC_MERCURIAL_FILE.gsub('_', '+') + '.mpkg', '-target', '/',
55
- abort_option('Failed to install Mercurial'))
47
+ begin
48
+ Dir.chdir(tempdir) do
49
+ Command.execute('curl', '-O', '-f', MAC_MERCURIAL_URL,
50
+ abort_option('Failed to download Mercurial'))
51
+ Command.execute('unzip', File.basename(MAC_MERCURIAL_URL),
52
+ abort_option('Failed to unzip Mercurial'))
53
+ end
54
+ Dir.chdir(File.join(tempdir, MAC_MERCURIAL_FILE)) do
55
+ Command.sudo('installer', '-pkg', MAC_MERCURIAL_FILE.gsub('_', '+') + '.mpkg', '-target', '/',
56
+ abort_option('Failed to install Mercurial'))
57
+ end
58
+ ensure
59
+ FileUtils.rm_rf(tempdir)
56
60
  end
57
61
  report_success
58
62
  end
@@ -40,7 +40,7 @@ module RightConf
40
40
  def run_linux
41
41
  set_defaults
42
42
  report_check("Checking for passenger gem #{gem_version}")
43
- res = Command.execute('gem', 'list', 'passenger')
43
+ res = Command.execute_in_ruby('gem', 'list', 'passenger')
44
44
  success = (res.output =~ /^passenger \(#{gem_version}\)$/)
45
45
  report_result(success)
46
46
  install_gem unless success
@@ -112,7 +112,7 @@ module RightConf
112
112
  # true:: Always return true
113
113
  def install_gem
114
114
  report_check('Installing passenger gem')
115
- Command.execute('gem', 'install', 'passenger', '-v', gem_version,
115
+ Command.execute_in_ruby('gem', 'install', 'passenger', '-v', gem_version,
116
116
  :abort_on_failure => "Failed to install passenger gem version #{gem_version}")
117
117
  report_success
118
118
  end
@@ -126,7 +126,7 @@ module RightConf
126
126
  # Grrrrr passenger installer expect rake where it's not... HACK
127
127
  ruby_dir = File.dirname(`which ruby`.chomp)
128
128
  FileUtils.cp(`which rake`.chomp, ruby_dir) unless rake_exist = File.exist?(File.join(ruby_dir, 'rake'))
129
- Command.execute('passenger-install-nginx-module', '--auto',
129
+ Command.execute_in_ruby('passenger-install-nginx-module', '--auto',
130
130
  '--auto-download', '--prefix', install_path,
131
131
  :abort_on_failure => "Failed to install nginx into #{install_path}")
132
132
  FileUtils.mkdir_p(File.join(install_path, 'sites-enabled'))
@@ -173,8 +173,8 @@ module RightConf
173
173
  # === Return
174
174
  # config(String):: Nginx config
175
175
  def nginx_config
176
- ruby_bin = Command.execute('which', 'ruby').output.chomp
177
- res = Command.execute('ruby', '-e', "require 'rubygems';puts Gem.source_index.find_name('passenger').detect { |g| g.version.to_s == '#{PASSENGER_GEM_VERSION}' }.full_gem_path",
176
+ ruby_bin = Command.execute_in_ruby('which', 'ruby').output.chomp
177
+ res = Command.execute_in_ruby('ruby', '-e', "require 'rubygems';puts Gem.source_index.find_name('passenger').detect { |g| g.version.to_s == '#{PASSENGER_GEM_VERSION}' }.full_gem_path",
178
178
  :abort_on_failure => 'Could not find passenger gem to build passenger_root')
179
179
  passenger_root = res.output.chomp
180
180
  report_fatal('Could not find passenger gem') if passenger_root.empty?
@@ -36,6 +36,7 @@ module RightConf
36
36
  # true:: Always return true
37
37
  def run_linux
38
38
  check_rvm(RVM_VERSION)
39
+ Command.set_ruby(version, gemset)
39
40
  report_check("Checking whether #{version} is the active ruby")
40
41
  out = Command.execute('rvm', 'list').output
41
42
  if out =~ /^=> #{version.gsub('.', '\\.')}/
@@ -47,8 +48,10 @@ module RightConf
47
48
  case out
48
49
  when /is not installed\./
49
50
  report_failure
50
- report_fatal "Failed to install #{ruby}: #{@out}" if @out
51
- @out = install_ruby(version)
51
+ report_fatal "Failed to install #{ruby}" if @tried
52
+ install_ruby(version)
53
+ @tried = true
54
+ Command.execute_in_ruby('gem', 'install', 'rconf') unless gemset
52
55
  run
53
56
  return true
54
57
  when /^Using /
@@ -69,7 +72,7 @@ module RightConf
69
72
  report_check("Creating gemset #{gemset} for #{version}")
70
73
  Command.execute('rvm', version, 'gemset', 'create', gemset,
71
74
  :abort_on_failure => "Failed to create gemset '#{gemset}'")
72
- Command.execute('rvm', "#{version}@#{gemset}", 'gem', 'install', 'rconf')
75
+ Command.execute_in_ruby('gem', 'install', 'rconf')
73
76
  report_success
74
77
  end
75
78
  report_check("Switching to gemset #{gemset}")
@@ -77,6 +80,16 @@ module RightConf
77
80
  :abort_on_failure => "Failed to switch to gemset '#{gemset}'")
78
81
  report_success
79
82
  end
83
+ report_check("Checking whether rubygems #{rubygems} is installed")
84
+ res = Command.execute_in_ruby('gem', '--version')
85
+ if res.success? && res.output.chomp == rubygems
86
+ report_success
87
+ else
88
+ report_failure
89
+ report_check("Installing rubygems #{rubygems}")
90
+ Command.execute_in_ruby('rubygems', rubygems, :abort_on_failure => 'Failed to install rubygems')
91
+ report_success
92
+ end
80
93
  true
81
94
  end
82
95
  alias :run_darwin :run_linux
@@ -95,7 +108,7 @@ module RightConf
95
108
  # === Return
96
109
  # true:: Always return true
97
110
  def post_process
98
- Command.set_prefix("rvm #{version}@#{gemset} exec --")
111
+ Command.set_ruby(version, gemset)
99
112
  check_rvmrc
100
113
  true
101
114
  end
@@ -142,14 +155,13 @@ module RightConf
142
155
  # ruby(String):: Ruby version compatible with rvm
143
156
  #
144
157
  # === Return
145
- # out(String):: Installation output
158
+ # true:: Always return true
146
159
  def install_ruby(ruby)
147
160
  Platform.dispatch(ruby) { :install_ruby_prerequesites }
148
161
  report_check("Installing #{ruby} (this will take a while, please be patient)")
149
162
  Command.execute('rvm', 'install', ruby, :abort_on_failure => 'Failed to install ruby')
150
- res = Command.execute('rvm', ruby, 'gem', 'install', 'rconf')
151
163
  report_success
152
- res.output
164
+ true
153
165
  end
154
166
 
155
167
  # Make sure to install all required linux packages first
@@ -24,14 +24,30 @@ module RightConf
24
24
  # and display given error message if install fails when set
25
25
  # opts[:report](TrueClass|FalseClass):: Whether to report installation
26
26
  #
27
+ # === Block
28
+ # If a block is given it will get called with no argument prior to the
29
+ # packages being installed. If the block returns true then installation
30
+ # will proceed otherwise it won't. Use the block to check whether
31
+ # installation is required or whether the packages are already installed.
32
+ # If no block is given then installation will always occur.
33
+ #
27
34
  # === Return
28
35
  # true:: Always return true
29
- def install(packages, opts=nil)
36
+ def install(packages, opts=nil, &install_check)
30
37
  packages = [ packages ].flatten
31
38
  report = opts && opts.delete(:report)
32
- report_check("Installing the following packages:\n#{packages.join(' ')}\nThis could take a while") if report
33
- Platform.dispatch(packages, opts) { :install }
34
- report_success if report
39
+ must_install = true
40
+ if install_check
41
+ report_check("Checking for #{packages.join(', ')}") if report
42
+ must_install = install_check.call
43
+ report_result(must_install) if report
44
+ end
45
+ if must_install
46
+ report_check("Installing #{packages.join(', ')}") if report
47
+ Platform.dispatch(packages, opts) { :install }
48
+ report_success if report
49
+ end
50
+ true
35
51
  end
36
52
 
37
53
  protected
@@ -13,7 +13,7 @@ module RightConf
13
13
 
14
14
  MAJOR = 0
15
15
  MINOR = 6
16
- BUILD = 25
16
+ BUILD = 30
17
17
 
18
18
  VERSION = [MAJOR, MINOR, BUILD].map(&:to_s).join('.')
19
19
 
@@ -20,27 +20,33 @@ describe RightConf::BundlerConfigurator do
20
20
  before(:each) do
21
21
  lang = RightConf::Language.parse('bundler { version "0" }')
22
22
  @configurator = lang.configurators.first
23
- [:report_check, :report_result, :report_fatal, :report_success].each do |meth|
23
+ [:report_check, :report_result, :report_success].each do |meth|
24
24
  flexmock(@configurator).should_receive(meth)
25
25
  end
26
+ flexmock(@configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
27
+ RightConf::Command.instance.instance_variable_set(:@rvm_prefix, 'r@g')
28
+ end
29
+
30
+ after(:each) do
31
+ RightConf::Command.instance.instance_variable_set(:@rvm_prefix, nil)
26
32
  end
27
33
 
28
34
  it 'should succeed when bundler succeeds' do
29
- flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
35
+ flexmock(RightConf::Command.instance).should_receive(:execute_in_ruby).once.with(
30
36
  'bundle', '--version').and_return(success_result('0'))
31
- flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
37
+ flexmock(RightConf::Command.instance).should_receive(:execute_in_ruby).once.with(
32
38
  'bundle','_0_', 'install', {:abort_on_failure=>"Failed to install gems"}).and_return(success_result)
33
39
  @configurator.run_linux
34
40
  end
35
41
 
36
42
  it 'should install bunlder if needed' do
37
- flexmock(RightConf::Command.instance).should_receive(:execute).twice.with(
43
+ flexmock(RightConf::Command.instance).should_receive(:execute_in_ruby).twice.with(
38
44
  'bundle', '--version').and_return(success_result('1'))
39
- flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
45
+ flexmock(RightConf::Command.instance).should_receive(:execute_in_ruby).once.with(
40
46
  'bundle','_0_', 'install', {:abort_on_failure=>"Failed to install gems"}).and_return(success_result)
41
- flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
47
+ flexmock(RightConf::Command.instance).should_receive(:execute_in_ruby).once.with(
42
48
  'gem', 'uninstall', 'bundler', '-a', '-x').and_return(success_result)
43
- flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
49
+ flexmock(RightConf::Command.instance).should_receive(:execute_in_ruby).once.with(
44
50
  'gem', 'install', 'bundler', '-v', '0', '--no-ri', '--no-rdoc',
45
51
  {:abort_on_failure=>"Failed to install bundler"}).once.and_return(success_result)
46
52
  @configurator.run_linux
@@ -20,9 +20,10 @@ describe RightConf::PackagesConfigurator do
20
20
  before(:each) do
21
21
  lang = RightConf::Language.parse('packages { debian %w(deb1 deb2); centos %w(cent1 cent2); darwin %w(mac1 mac2) }')
22
22
  @configurator = lang.configurators.first
23
- [:report_check, :report_result, :report_fatal, :report_success].each do |meth|
23
+ [:report_check, :report_result, :report_success].each do |meth|
24
24
  flexmock(@configurator).should_receive(meth)
25
25
  end
26
+ flexmock(@configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
26
27
  end
27
28
 
28
29
  it 'should install packages on Ubuntu' do
@@ -16,9 +16,10 @@ describe RightConf::PassengerConfigurator do
16
16
  before(:each) do
17
17
  lang = RightConf::Language.parse('passenger {}')
18
18
  @configurator = lang.configurators.first
19
- [:report_check, :report_result, :report_fatal, :report_success].each do |meth|
19
+ [:report_check, :report_result, :report_success].each do |meth|
20
20
  flexmock(@configurator).should_receive(meth)
21
21
  end
22
+ flexmock(@configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
22
23
  end
23
24
 
24
25
  it 'should set defaults' do
@@ -22,9 +22,10 @@ describe RightConf::RubyConfigurator do
22
22
  before(:each) do
23
23
  lang = RightConf::Language.parse('ruby { version "0"; rubygems "1" }')
24
24
  @configurator = lang.configurators.first
25
- [:report_check, :report_result, :report_fatal, :report_success, :report].each do |meth|
25
+ [:report_check, :report_result, :report_success, :report].each do |meth|
26
26
  flexmock(@configurator).should_receive(meth)
27
27
  end
28
+ flexmock(@configurator).should_receive(:report_fatal).and_return { |*args| raise args.join(' ') }
28
29
  end
29
30
 
30
31
  it 'should succeed on linux when rvm succeeds' do
@@ -33,7 +34,9 @@ describe RightConf::RubyConfigurator do
33
34
  flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
34
35
  'rvm', 'list').and_return(success_result("=> rvm #{RVM_VERSION}"))
35
36
  flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
36
- 'rvm', 'use', '0').and_return(success_result('Using'))
37
+ 'rvm', 'use', '0').and_return(success_result('Using '))
38
+ flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
39
+ 'rvm', '0@', 'gem', '--version').and_return(success_result('1'))
37
40
  @configurator.run_linux
38
41
  end
39
42
 
@@ -54,8 +57,25 @@ describe RightConf::RubyConfigurator do
54
57
  flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
55
58
  './install', {:abort_on_failure=>"Failed to install rvm #{RVM_VERSION}"}).and_return(success_result)
56
59
  flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
57
- 'rvm', 'use', '0').and_return(success_result('Using'))
58
- flexmock(@configurator).should_receive(:setup_bashrc).once.and_return(true)
60
+ 'rvm', 'use', '0').and_return(success_result('Using '))
61
+ flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
62
+ 'rvm', '0@', 'gem', '--version').and_return(success_result('1'))
63
+ flexmock(@configurator).should_receive(:setup_bashrc).once.and_return(true)
64
+ @configurator.run_linux
65
+ end
66
+
67
+ it 'should install rubygems if needed' do
68
+ flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
69
+ 'rvm', '--version').and_return(success_result("rvm #{RVM_VERSION}"))
70
+ flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
71
+ 'rvm', 'list').and_return(success_result("=> rvm #{RVM_VERSION}"))
72
+ flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
73
+ 'rvm', 'use', '0').and_return(success_result('Using '))
74
+ flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
75
+ 'rvm', '0@', 'gem', '--version').and_return(success_result('0'))
76
+ flexmock(RightConf::Command.instance).should_receive(:execute).once.with(
77
+ 'rvm', '0@', 'rubygems', '1',
78
+ {:abort_on_failure=>'Failed to install rubygems'}).and_return(success_result)
59
79
  @configurator.run_linux
60
80
  end
61
81
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rconf
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.6.25
5
+ version: 0.6.30
6
6
  platform: ruby
7
7
  authors:
8
8
  - Raphael Simon