rconf 1.0.8 → 1.0.9

Sign up to get free protection for your applications and to get access to all the features.
data/bin/rconf CHANGED
@@ -153,6 +153,14 @@ where [options] are:
153
153
  report_success
154
154
  report('Latest rconf version is ' + version.blue)
155
155
  update_rconf(version)
156
+ ConfiguratorRegistry.each do |_, configurator|
157
+ updater = configurator.updater
158
+
159
+ if updater
160
+ # Do not invoke "call" when no updater is available
161
+ updater.call
162
+ end
163
+ end
156
164
  end
157
165
 
158
166
  # Calls given block with all combination of installed rubies
@@ -0,0 +1,4 @@
1
+ require_gcc
2
+ configure_opts=--no-tcmalloc
3
+ CFLAGS="-O2 -fno-tree-dce -fno-optimize-sibling-calls"
4
+ install_package "ruby-enterprise-1.8.7-2012.02" "https://tools-engineer.s3.amazonaws.com/ree-1.8.7-2012.02-patched.tar.gz" ree_installer
@@ -72,6 +72,21 @@ module RightConf
72
72
  true
73
73
  end
74
74
 
75
+ # Define code to be run whenever rconf gets updated. Acts as a getter and setter
76
+ #
77
+ # === Parameters
78
+ # val(Proc):: Code to run when rconf is updated
79
+ #
80
+ # === Return
81
+ # true:: The updater if no parameter is passed, true otherwise
82
+ def updater(val=nil)
83
+ if val
84
+ @updater = val
85
+ true
86
+ else
87
+ @updater
88
+ end
89
+ end
75
90
  end
76
91
 
77
92
  # Extend base class with ClassMethods module methods
@@ -111,6 +111,7 @@ module RightConf
111
111
  options += [ '--no-ri', '--no-rdoc', { :abort_on_failure => 'Failed to install bundler' } ]
112
112
  Command.execute(*options)
113
113
  report_success
114
+ Command.execute('rbenv', 'rehash') # this is optional; don't bother to report failures
114
115
  true
115
116
  end
116
117
 
@@ -11,6 +11,18 @@
11
11
 
12
12
  module RightConf
13
13
 
14
+ # Specify rbenv and ruby-build git revision for installation
15
+ RBENV_GIT_REPO = 'git://github.com/sstephenson/rbenv.git'
16
+ RBENV_GIT_REVISION = "9375e99f921f428849f19efe2a2e500b3295d1a7"
17
+
18
+ RUBYBUILD_GIT_REPO = 'git://github.com/sstephenson/ruby-build.git'
19
+ RUBY_BUILD_GIT_REVISION = "28b9bcb6df1bc18fb2b06e25ee65f397ac3d4632"
20
+
21
+ # Local installation target folders
22
+ RBENV_INSTALL_TARGET = "#{ENV['HOME']}/.rbenv"
23
+ RUBYBUILD_TARGET = "#{RBENV_INSTALL_TARGET}/plugins/ruby-build"
24
+
25
+
14
26
  class RubyConfigurator
15
27
 
16
28
  include Configurator
@@ -22,13 +34,15 @@ module RightConf
22
34
 
23
35
  setting 'version', 'Ruby version using rbenv notation (see "rbenv versions")', :required => true
24
36
 
37
+ updater lambda { update_rbenv_installation }
38
+
39
+
25
40
  # Message to display to the user when rbenv isn't in the path.
26
- PATH_ADVICE = "You should add 'eval \"$(rbenv init -)\"' to your .bash_profile / .bashrc etc. " +
27
- "so rbenv is properly initialized in new shells.\n\n" +
28
- "If you are a bash user (e.g. Mac OS X), you can add the following to ~/.bash_profile:\n\n" +
29
- " echo 'eval \"$(rbenv init -)\"' >> ~/.bash_profile\n\n" +
30
- "You should also update your PATH environment variable with:\n\n" +
31
- " echo 'export PATH=\"$HOME/.rbenv/shims:$PATH\" >> ~/.bash_profile'\n"
41
+ PATH_ADVICE = "You should add rbenv to your path and 'eval \"$(rbenv init -)\"' to your .bash_profile / .bashrc etc. " +
42
+ "so rbenv is properly initialized in new shells.\n\n" +
43
+ "If you are a bash user (e.g. Mac OS X), you can add the following to ~/.bash_profile:\n\n" +
44
+ " echo 'export PATH=\"$HOME/.rbenv/bin:$PATH\"' >> ~/.bash_profile\n" +
45
+ " echo 'eval \"$(rbenv init -)\"' >> ~/.bash_profile\n\n"
32
46
 
33
47
  # Let configurator run, it is idempotent
34
48
  #
@@ -90,7 +104,7 @@ module RightConf
90
104
  # Bail if rbenv isn't correctly initialized (we can't use it in this state)
91
105
  post_note "rconf detected rbenv is installed in #{rbenv_path} but it is not in the PATH.\n" + PATH_ADVICE
92
106
  aborting(true)
93
- elsif rbenv_present && rbenv_in_path
107
+ elsif rbenv_in_path
94
108
  # rbenv is installed and initialized; make sure we have a suitable version
95
109
  res.output =~ /^rbenv ([0-9]+)\.([0-9]+)\.([0-9]+)$/
96
110
  maj, min, build = [$1.to_i, $2.to_i, $3.to_i]
@@ -100,15 +114,92 @@ module RightConf
100
114
  end
101
115
  else
102
116
  # No sign of rbenv; try to install it
103
- opts = { :report => true, :post_install => update_msg }.merge(abort_option('Failed to install rbenv'))
104
- PackageInstaller.install('rbenv', opts)
105
- opts = { :report => true }.merge(abort_option('Failed to install ruby-build'))
106
- PackageInstaller.install('ruby-build', opts)
117
+ install_rbenv_from_git
107
118
  end
108
119
 
109
120
  true
110
121
  end
111
122
 
123
+
124
+ # Overwrite ruby-build definition file to use our own, patched version of REE and to set certain compile options
125
+ # so that it REE works with newer versions of GCC as well.
126
+ #
127
+ # === Return
128
+ # true:: Always return true
129
+ def self.add_custom_ree_definition
130
+ curr_dir=File.dirname(__FILE__)
131
+ patched_ree = "#{curr_dir}/../../patches/ree-1.8.7-2012.02-rs-custom"
132
+ FileUtils.cp patched_ree, "#{RUBYBUILD_TARGET}/share/ruby-build/ree-1.8.7-2012.02"
133
+
134
+ true
135
+ end
136
+
137
+
138
+ # Update rbenv and ruby-build to the version specified through the git commit version constant
139
+ #
140
+ # === Return
141
+ # true:: Always return true
142
+ def self.update_rbenv_installation
143
+ puts "Updating rbenv ..."
144
+ if File.directory?("#{RBENV_INSTALL_TARGET}/.git")
145
+ # Perform the pull only if rbenv has been installed by using a git pull (and not through a package manager)
146
+ system("cd #{RBENV_INSTALL_TARGET}; git fetch -q; git checkout -q #{RBENV_GIT_REVISION}")
147
+ end
148
+
149
+ puts "Updating ruby-build ..."
150
+ if File.directory?("#{RUBYBUILD_TARGET}/.git")
151
+ # Perform the pull only if ruby-build has been installed by using a git pull (and not through a package manager)
152
+ # Before checking out the new branch, reset the repository to avoid conflicts
153
+ system("cd #{RUBYBUILD_TARGET}; git reset -q --hard; git fetch -q; git checkout -q #{RUBY_BUILD_GIT_REVISION}")
154
+
155
+ # Add our ree definition again because the repository has been reset
156
+ RubyConfigurator.add_custom_ree_definition
157
+ end
158
+
159
+ true
160
+ end
161
+
162
+
163
+ # Install rbenv
164
+ # 1. Fetch rbenv from repository and install it
165
+ # 2. Fetch ruby-build from repository and install it
166
+ # 3. Install custom ree installation definition into ruby-build so that our patched REE gets installed
167
+ #
168
+ # === Return
169
+ # true:: Always return true
170
+ def install_rbenv_from_git
171
+
172
+ # Require: git
173
+ res = Command.execute('git', '--version').success?
174
+ if !res
175
+ # Install git
176
+ opts = { :report => true, :post_install => update_msg }.merge(abort_option('Failed to install git, required for rbenv'))
177
+ PackageInstaller.install('git', opts)
178
+ end
179
+
180
+
181
+ # Fetch and install rbenv
182
+ # ***********************
183
+
184
+ # Fetch rbenv from git repo
185
+ Command.execute('git', 'clone', RBENV_GIT_REPO, RBENV_INSTALL_TARGET, {:abort_on_failure => 'Git clone of rbnev failed - server down?'})
186
+ Kernel.system("cd #{RBENV_INSTALL_TARGET}; git checkout #{RBENV_GIT_REVISION}")
187
+
188
+ # Fetch, install and patch ruby-build
189
+ # ***********************************
190
+
191
+ # Create plugins directory (target for ruby-build)
192
+ ret = FileUtils.mkdir_p(RUBYBUILD_TARGET)
193
+ if !ret
194
+ report_fatal("Could not create directory: #{RUBYBUILD_TARGET}");
195
+ end
196
+
197
+ Command.execute('git', 'clone', RUBYBUILD_GIT_REPO, RUBYBUILD_TARGET, {:abort_on_failure => 'Git clone of ruby-build failed - server down?'})
198
+ Kernel.system("cd #{RUBYBUILD_TARGET}; git checkout #{RUBY_BUILD_GIT_REVISION}")
199
+
200
+ RubyConfigurator.add_custom_ree_definition
201
+ end
202
+
112
203
  # Check .ruby-version and its content
113
204
  #
114
205
  # === Return
@@ -190,9 +281,7 @@ module RightConf
190
281
  def install_ruby_prerequisites_linux_ubuntu(ruby)
191
282
  report_check("Installing required packages, this could take a while")
192
283
  packages = []
193
- if ruby =~ /^ree-|^ruby-/
194
- packages = %w(build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev)
195
- end # TBD Define packages needed for other rubies
284
+ packages = %w(build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev)
196
285
  Command.sudo('apt-get', 'install', '-y', *packages)
197
286
  report_success
198
287
  end
@@ -13,7 +13,7 @@ module RightConf
13
13
 
14
14
  MAJOR = 1
15
15
  MINOR = 0
16
- BUILD = 8
16
+ BUILD = 9
17
17
 
18
18
  VERSION = [MAJOR, MINOR, BUILD].map(&:to_s).join('.')
19
19
 
@@ -46,7 +46,7 @@ describe RightConf::BundlerConfigurator do
46
46
  {:abort_on_failure=>"Failed to install bundler"}).once.and_return(success_result)
47
47
  should_execute('bundle','_0_', 'install',
48
48
  {:abort_on_failure=>"Failed to install gems"}).once.and_return(success_result)
49
- should_execute('rbenv', 'rehash').once.and_return(success_result)
49
+ should_execute('rbenv', 'rehash').times(2).and_return(success_result)
50
50
  @configurator.run_linux
51
51
  end
52
52
 
@@ -52,22 +52,27 @@ describe RightConf::RubyConfigurator do
52
52
 
53
53
  context "without rbenv installed" do
54
54
  before(:each) do
55
+ should_execute("git", "--version").once.and_return(success_result)
56
+ should_execute("git", "clone", "git://github.com/sstephenson/rbenv.git", "#{ENV['HOME']}/.rbenv", {:abort_on_failure=>"Git clone of rbnev failed - server down?"}).once.and_return(success_result)
57
+ should_execute("git", "clone", "git://github.com/sstephenson/ruby-build.git", "#{ENV['HOME']}/.rbenv/plugins/ruby-build", {:abort_on_failure=>"Git clone of ruby-build failed - server down?"}).once.and_return(success_result)
58
+
55
59
  should_execute('rvm').once.and_return(failure_result)
56
60
  should_execute('rbenv').once.and_return(failure_result)
57
61
  flexmock(File).should_receive(:exist?).with(File.join(ENV['HOME'], '.rbenv', 'bin', 'rbenv')).and_return(false)
62
+
63
+ flexmock(FileUtils).should_receive(:cp).with(/.*\/patches\/ree-1.8.7-2012.02-rs-custom/, "#{ENV['HOME']}/.rbenv/plugins/ruby-build/share/ruby-build/ree-1.8.7-2012.02").and_return(true)
64
+ flexmock(FileUtils).should_receive(:mkdir_p).with("#{ENV['HOME']}/.rbenv/plugins/ruby-build").and_return(true)
65
+ flexmock(Kernel).should_receive(:system).and_return(true)
58
66
  should_execute('which', 'ruby').and_return(success_result(File.join(ENV['HOME'], '.rbenv', 'shims', 'ruby')))
59
67
  end
60
68
 
61
69
  it 'should install rbenv and ruby-build' do
62
- flexmock(RightConf::PackageInstaller).should_receive(:install).with('rbenv', Hash).once
63
- flexmock(RightConf::PackageInstaller).should_receive(:install).with('ruby-build', Hash).once
64
70
  should_execute('rbenv', 'local', '42').and_return(success_result)
65
71
  @configurator.run_linux
66
72
  end
67
73
 
68
74
  it 'should install ruby if needed' do
69
- flexmock(RightConf::PackageInstaller).should_receive(:install).with('rbenv', Hash).once
70
- flexmock(RightConf::PackageInstaller).should_receive(:install).with('ruby-build', Hash).once
75
+ flexmock(RightConf::Platform).should_receive(:dispatch).with(Proc)
71
76
  should_execute('rbenv', 'local', '42').and_return(failure_result)
72
77
  flexmock(RightConf::Platform).should_receive(:dispatch).with('42', Proc)
73
78
  should_execute('rbenv', 'local', '42').and_return(success_result)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rconf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8
4
+ version: 1.0.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-12 00:00:00.000000000 Z
12
+ date: 2013-06-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -73,6 +73,7 @@ files:
73
73
  - Rakefile
74
74
  - bin/rconf
75
75
  - examples/sample.rconf
76
+ - lib/patches/ree-1.8.7-2012.02-rs-custom
76
77
  - lib/rconf.rb
77
78
  - lib/rconf/command.rb
78
79
  - lib/rconf/configurator.rb