capistrano-rbenv 0.0.8 → 0.0.9a

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.
@@ -1,8 +1,236 @@
1
- require "capistrano-rbenv/deploy"
2
1
  require "capistrano-rbenv/version"
2
+ require "capistrano/configuration"
3
+ require "capistrano/recipes/deploy/scm"
3
4
 
4
5
  module Capistrano
5
- module Rbenv
6
- # Your code goes here...
6
+ module RbEnv
7
+ def self.extended(configuration)
8
+ configuration.load {
9
+ namespace(:rbenv) {
10
+ _cset(:rbenv_path) {
11
+ capture("echo $HOME/.rbenv").chomp()
12
+ }
13
+ _cset(:rbenv_bin) {
14
+ File.join(rbenv_path, 'bin', 'rbenv')
15
+ }
16
+ _cset(:rbenv_cmd) { # to use custom rbenv_path, we use `env` instead of cap's default_environment.
17
+ "env RBENV_VERSION=#{rbenv_ruby_version.dump} #{rbenv_bin}"
18
+ }
19
+ _cset(:rbenv_repository, 'git://github.com/sstephenson/rbenv.git')
20
+ _cset(:rbenv_branch, 'master')
21
+
22
+ _cset(:rbenv_plugins) {{
23
+ "ruby-build" => { :repository => "git://github.com/sstephenson/ruby-build.git", :branch => "master" },
24
+ }}
25
+ _cset(:rbenv_plugins_options, {}) # for backward compatibility. plugin options can be configured from :rbenv_plugins.
26
+ _cset(:rbenv_plugins_path) {
27
+ File.join(rbenv_path, 'plugins')
28
+ }
29
+ _cset(:rbenv_ruby_version, "1.9.3-p327")
30
+
31
+ _cset(:rbenv_use_bundler, true)
32
+ set(:bundle_cmd) { # override bundle_cmd in "bundler/capistrano"
33
+ rbenv_use_bundler ? "#{rbenv_cmd} exec bundle" : 'bundle'
34
+ }
35
+
36
+ desc("Setup rbenv.")
37
+ task(:setup, :except => { :no_release => true }) {
38
+ dependencies
39
+ update
40
+ configure
41
+ build
42
+ setup_bundler if rbenv_use_bundler
43
+ }
44
+ after 'deploy:setup', 'rbenv:setup'
45
+
46
+ def rbenv_update_repository(destination, options={})
47
+ configuration = Capistrano::Configuration.new()
48
+ options = {
49
+ :source => proc { Capistrano::Deploy::SCM.new(configuration[:scm], configuration) },
50
+ :revision => proc { configuration[:source].head },
51
+ :real_revision => proc {
52
+ configuration[:source].local.query_revision(configuration[:revision]) { |cmd| with_env("LC_ALL", "C") { run_locally(cmd) } }
53
+ },
54
+ }.merge(options)
55
+ variables.merge(options).each do |key, val|
56
+ configuration.set(key, val)
57
+ end
58
+ source = configuration[:source]
59
+ revision = configuration[:real_revision]
60
+ #
61
+ # we cannot use source.sync since it cleans up untacked files in the repository.
62
+ # currently we are just calling git sub-commands directly to avoid the problems.
63
+ #
64
+ verbose = configuration[:scm_verbose] ? nil : "-q"
65
+ run((<<-EOS).gsub(/\s+/, ' ').strip)
66
+ if [ -d #{destination} ]; then
67
+ cd #{destination} &&
68
+ #{source.command} fetch #{verbose} #{source.origin} &&
69
+ #{source.command} fetch --tags #{verbose} #{source.origin} &&
70
+ #{source.command} reset #{verbose} --hard #{revision};
71
+ else
72
+ #{source.checkout(revision, destination)};
73
+ fi
74
+ EOS
75
+ end
76
+
77
+ desc("Update rbenv installation.")
78
+ task(:update, :except => { :no_release => true }) {
79
+ rbenv_update_repository(rbenv_path, :scm => :git, :repository => rbenv_repository, :branch => rbenv_branch)
80
+ plugins.update
81
+ }
82
+
83
+ desc("Purge rbenv.")
84
+ task(:purge, :except => { :no_release => true }) {
85
+ run("rm -rf #{rbenv_path}")
86
+ }
87
+
88
+ namespace(:plugins) {
89
+ desc("Update rbenv plugins.")
90
+ task(:update, :except => { :no_release => true }) {
91
+ rbenv_plugins.each do |name, repository|
92
+ # for backward compatibility, obtain plugin options from :rbenv_plugins_options first
93
+ options = rbenv_plugins_options.fetch(name, {})
94
+ options = options.merge(Hash === repository ? repository : {:repository => repository})
95
+ rbenv_update_repository(File.join(rbenv_plugins_path, name), options.merge(:scm => :git))
96
+ end
97
+ }
98
+ }
99
+
100
+ _cset(:rbenv_configure_home) { capture("echo $HOME").chomp }
101
+ _cset(:rbenv_configure_shell) { capture("echo $SHELL").chomp }
102
+ _cset(:rbenv_configure_files) {
103
+ if fetch(:rbenv_configure_basenames, nil)
104
+ [ rbenv_configure_basenames ].flatten.map { |basename|
105
+ File.join(rbenv_configure_home, basename)
106
+ }
107
+ else
108
+ bash_profile = File.join(rbenv_configure_home, '.bash_profile')
109
+ profile = File.join(rbenv_configure_home, '.profile')
110
+ case File.basename(rbenv_configure_shell)
111
+ when /bash/
112
+ [ capture("test -f #{profile.dump} && echo #{profile.dump} || echo #{bash_profile.dump}").chomp ]
113
+ when /zsh/
114
+ [ File.join(rbenv_configure_home, '.zshenv') ]
115
+ else # other sh compatible shell such like dash
116
+ [ profile ]
117
+ end
118
+ end
119
+ }
120
+ _cset(:rbenv_configure_script) {
121
+ (<<-EOS).gsub(/^\s*/, '')
122
+ # Configured by capistrano-rbenv. Do not edit directly.
123
+ export PATH="#{rbenv_path}/bin:$PATH"
124
+ eval "$(rbenv init -)"
125
+ EOS
126
+ }
127
+ _cset(:rbenv_configure_signature, '##rbenv:configure')
128
+ task(:configure, :except => { :no_release => true }) {
129
+ if fetch(:rbenv_use_configure, true)
130
+ script = File.join('/tmp', "rbenv.#{$$}")
131
+ config = [ rbenv_configure_files ].flatten
132
+ config_map = Hash[ config.map { |f| [f, File.join('/tmp', "#{File.basename(f)}.#{$$}")] } ]
133
+ begin
134
+ execute = []
135
+ put(rbenv_configure_script, script)
136
+ config_map.each { |file, temp|
137
+ ## (1) copy original config to temporaly file and then modify
138
+ execute << "( test -f #{file} || touch #{file} )"
139
+ execute << "cp -fp #{file} #{temp}"
140
+ execute << "sed -i -e '/^#{Regexp.escape(rbenv_configure_signature)}/,/^#{Regexp.escape(rbenv_configure_signature)}/d' #{temp}"
141
+ execute << "echo #{rbenv_configure_signature.dump} >> #{temp}"
142
+ execute << "cat #{script} >> #{temp}"
143
+ execute << "echo #{rbenv_configure_signature.dump} >> #{temp}"
144
+ ## (2) update config only if it is needed
145
+ execute << "cp -fp #{file} #{file}.orig"
146
+ execute << "( diff -u #{file} #{temp} || mv -f #{temp} #{file} )"
147
+ }
148
+ run(execute.join(' && '))
149
+ ensure
150
+ remove = [ script ] + config_map.values
151
+ run("rm -f #{remove.join(' ')}") rescue nil
152
+ end
153
+ end
154
+ }
155
+
156
+ _cset(:rbenv_platform) {
157
+ capture((<<-EOS).gsub(/\s+/, ' ')).strip
158
+ if test -f /etc/debian_version; then
159
+ if test -f /etc/lsb-release && grep -i -q DISTRIB_ID=Ubuntu /etc/lsb-release; then
160
+ echo ubuntu;
161
+ else
162
+ echo debian;
163
+ fi;
164
+ elif test -f /etc/redhat-release; then
165
+ echo redhat;
166
+ else
167
+ echo unknown;
168
+ fi;
169
+ EOS
170
+ }
171
+ _cset(:rbenv_ruby_dependencies) {
172
+ case rbenv_platform
173
+ when /(debian|ubuntu)/i
174
+ %w(git-core build-essential libreadline6-dev zlib1g-dev libssl-dev bison)
175
+ when /redhat/i
176
+ %w(git-core autoconf glibc-devel patch readline readline-devel zlib zlib-devel openssl bison)
177
+ else
178
+ []
179
+ end
180
+ }
181
+ task(:dependencies, :except => { :no_release => true }) {
182
+ unless rbenv_ruby_dependencies.empty?
183
+ case rbenv_platform
184
+ when /(debian|ubuntu)/i
185
+ begin
186
+ run("dpkg-query -s #{rbenv_ruby_dependencies.join(' ')} > /dev/null")
187
+ rescue
188
+ run("#{sudo} apt-get install -q -y #{rbenv_ruby_dependencies.join(' ')}")
189
+ end
190
+ when /redhat/i
191
+ begin
192
+ run("rpm -qi #{rbenv_ruby_dependencies.join(' ')} > /dev/null")
193
+ rescue
194
+ run("#{sudo} yum install -q -y #{rbenv_ruby_dependencies.join(' ')}")
195
+ end
196
+ else
197
+ # nop
198
+ end
199
+ end
200
+ }
201
+
202
+ desc("Build ruby within rbenv.")
203
+ task(:build, :except => { :no_release => true }) {
204
+ ruby = fetch(:rbenv_ruby_cmd, 'ruby')
205
+ if rbenv_ruby_version != 'system'
206
+ run("#{rbenv_bin} whence #{ruby} | fgrep -q #{rbenv_ruby_version} || #{rbenv_bin} install #{rbenv_ruby_version}")
207
+ end
208
+ run("#{rbenv_cmd} exec #{ruby} --version && #{rbenv_cmd} global #{rbenv_ruby_version}")
209
+ }
210
+
211
+ _cset(:rbenv_bundler_gem, 'bundler')
212
+ task(:setup_bundler, :except => { :no_release => true }) {
213
+ gem = "#{rbenv_cmd} exec gem"
214
+ if v = fetch(:rbenv_bundler_version, nil)
215
+ q = "-n #{rbenv_bundler_gem} -v #{v}"
216
+ f = "fgrep #{rbenv_bundler_gem} | fgrep #{v}"
217
+ i = "-v #{v} #{rbenv_bundler_gem}"
218
+ else
219
+ q = "-n #{rbenv_bundler_gem}"
220
+ f = "fgrep #{rbenv_bundler_gem}"
221
+ i = "#{rbenv_bundler_gem}"
222
+ end
223
+ run("unset -v GEM_HOME; #{gem} query #{q} 2>/dev/null | #{f} || #{gem} install -q #{i}")
224
+ run("#{rbenv_cmd} rehash && #{bundle_cmd} version")
225
+ }
226
+ }
227
+ }
228
+ end
7
229
  end
8
230
  end
231
+
232
+ if Capistrano::Configuration.instance
233
+ Capistrano::Configuration.instance.extend(Capistrano::RbEnv)
234
+ end
235
+
236
+ # vim:set ft=ruby ts=2 sw=2 :
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module RbEnv
3
- VERSION = "0.0.8"
3
+ VERSION = "0.0.9a"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-rbenv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
5
- prerelease:
4
+ version: 0.0.9a
5
+ prerelease: 5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Yamashita Yuu
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-18 00:00:00.000000000 Z
12
+ date: 2013-02-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano
@@ -41,7 +41,6 @@ files:
41
41
  - Rakefile
42
42
  - capistrano-rbenv.gemspec
43
43
  - lib/capistrano-rbenv.rb
44
- - lib/capistrano-rbenv/deploy.rb
45
44
  - lib/capistrano-rbenv/version.rb
46
45
  homepage: https://github.com/yyuu/capistrano-rbenv
47
46
  licenses: []
@@ -58,9 +57,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
57
  required_rubygems_version: !ruby/object:Gem::Requirement
59
58
  none: false
60
59
  requirements:
61
- - - ! '>='
60
+ - - ! '>'
62
61
  - !ruby/object:Gem::Version
63
- version: '0'
62
+ version: 1.3.1
64
63
  requirements: []
65
64
  rubyforge_project:
66
65
  rubygems_version: 1.8.23
@@ -1,228 +0,0 @@
1
-
2
- require "capistrano/configuration"
3
- require "capistrano/recipes/deploy/scm"
4
-
5
- module Capistrano
6
- module RbEnv
7
- def self.extended(configuration)
8
- configuration.load {
9
- namespace(:rbenv) {
10
- _cset(:rbenv_path) {
11
- capture("echo $HOME/.rbenv").chomp()
12
- }
13
- _cset(:rbenv_bin) {
14
- File.join(rbenv_path, 'bin', 'rbenv')
15
- }
16
- _cset(:rbenv_cmd) { # to use custom rbenv_path, we use `env` instead of cap's default_environment.
17
- "env RBENV_VERSION=#{rbenv_ruby_version.dump} #{rbenv_bin}"
18
- }
19
- _cset(:rbenv_repository, 'git://github.com/sstephenson/rbenv.git')
20
- _cset(:rbenv_branch, 'master')
21
-
22
- _cset(:rbenv_plugins) {{
23
- "ruby-build" => { :repository => "git://github.com/sstephenson/ruby-build.git", :branch => "master" },
24
- }}
25
- _cset(:rbenv_plugins_options, {}) # for backward compatibility. plugin options can be configured from :rbenv_plugins.
26
- _cset(:rbenv_plugins_path) {
27
- File.join(rbenv_path, 'plugins')
28
- }
29
- _cset(:rbenv_ruby_version, "1.9.3-p327")
30
-
31
- _cset(:rbenv_use_bundler, true)
32
- set(:bundle_cmd) { # override bundle_cmd in "bundler/capistrano"
33
- rbenv_use_bundler ? "#{rbenv_cmd} exec bundle" : 'bundle'
34
- }
35
-
36
- desc("Setup rbenv.")
37
- task(:setup, :except => { :no_release => true }) {
38
- dependencies
39
- update
40
- configure
41
- build
42
- setup_bundler if rbenv_use_bundler
43
- }
44
- after 'deploy:setup', 'rbenv:setup'
45
-
46
- def rbenv_update_repository(destination, options={})
47
- configuration = Capistrano::Configuration.new()
48
- options = {
49
- :source => proc { Capistrano::Deploy::SCM.new(configuration[:scm], configuration) },
50
- :revision => proc { configuration[:source].head },
51
- :real_revision => proc {
52
- configuration[:source].local.query_revision(configuration[:revision]) { |cmd| with_env("LC_ALL", "C") { run_locally(cmd) } }
53
- },
54
- }.merge(options)
55
- variables.merge(options).each do |key, val|
56
- configuration.set(key, val)
57
- end
58
- source = configuration[:source]
59
- revision = configuration[:real_revision]
60
- #
61
- # we cannot use source.sync since it cleans up untacked files in the repository.
62
- # currently we are just calling git sub-commands directly to avoid the problems.
63
- #
64
- verbose = configuration[:scm_verbose] ? nil : "-q"
65
- run((<<-EOS).gsub(/\s+/, ' ').strip)
66
- if [ -d #{destination} ]; then
67
- cd #{destination} &&
68
- #{source.command} fetch #{verbose} #{source.origin} &&
69
- #{source.command} fetch --tags #{verbose} #{source.origin} &&
70
- #{source.command} reset #{verbose} --hard #{revision};
71
- else
72
- #{source.checkout(revision, destination)};
73
- fi
74
- EOS
75
- end
76
-
77
- desc("Update rbenv installation.")
78
- task(:update, :except => { :no_release => true }) {
79
- rbenv_update_repository(rbenv_path, :scm => :git, :repository => rbenv_repository, :branch => rbenv_branch)
80
- plugins.update
81
- }
82
-
83
- desc("Purge rbenv.")
84
- task(:purge, :except => { :no_release => true }) {
85
- run("rm -rf #{rbenv_path}")
86
- }
87
-
88
- namespace(:plugins) {
89
- desc("Update rbenv plugins.")
90
- task(:update, :except => { :no_release => true }) {
91
- rbenv_plugins.each do |name, repository|
92
- # for backward compatibility, obtain plugin options from :rbenv_plugins_options first
93
- options = rbenv_plugins_options.fetch(name, {})
94
- options = options.merge(Hash === repository ? repository : {:repository => repository})
95
- rbenv_update_repository(File.join(rbenv_plugins_path, name), options.merge(:scm => :git))
96
- end
97
- }
98
- }
99
-
100
- _cset(:rbenv_configure_home) { capture("echo $HOME").chomp }
101
- _cset(:rbenv_configure_shell) { capture("echo $SHELL").chomp }
102
- _cset(:rbenv_configure_files) {
103
- if fetch(:rbenv_configure_basenames, nil)
104
- [ rbenv_configure_basenames ].flatten.map { |basename|
105
- File.join(rbenv_configure_home, basename)
106
- }
107
- else
108
- bash_profile = File.join(rbenv_configure_home, '.bash_profile')
109
- profile = File.join(rbenv_configure_home, '.profile')
110
- case File.basename(rbenv_configure_shell)
111
- when /bash/
112
- [ capture("test -f #{profile.dump} && echo #{profile.dump} || echo #{bash_profile.dump}") ]
113
- when /zsh/
114
- [ File.join(rbenv_configure_home, '.zshenv') ]
115
- else # other sh compatible shell such like dash
116
- [ profile ]
117
- end
118
- end
119
- }
120
- _cset(:rbenv_configure_script) {
121
- (<<-EOS).gsub(/^\s*/, '')
122
- # Configured by capistrano-rbenv. Do not edit directly.
123
- export PATH="#{rbenv_path}/bin:$PATH"
124
- eval "$(rbenv init -)"
125
- EOS
126
- }
127
- _cset(:rbenv_configure_signature, '##rbenv:configure')
128
- task(:configure, :except => { :no_release => true }) {
129
- if fetch(:rbenv_use_configure, true)
130
- script = File.join('/tmp', "rbenv.#{$$}")
131
- config = [ rbenv_configure_files ].flatten
132
- config_map = Hash[ config.map { |f| [f, File.join('/tmp', "#{File.basename(f)}.#{$$}")] } ]
133
- begin
134
- execute = []
135
- put(rbenv_configure_script, script)
136
- config_map.each { |file, temp|
137
- ## (1) copy original config to temporaly file and then modify
138
- execute << "( test -f #{file} || touch #{file} )"
139
- execute << "cp -fp #{file} #{temp}"
140
- execute << "sed -i -e '/^#{Regexp.escape(rbenv_configure_signature)}/,/^#{Regexp.escape(rbenv_configure_signature)}/d' #{temp}"
141
- execute << "echo #{rbenv_configure_signature.dump} >> #{temp}"
142
- execute << "cat #{script} >> #{temp}"
143
- execute << "echo #{rbenv_configure_signature.dump} >> #{temp}"
144
- ## (2) update config only if it is needed
145
- execute << "cp -fp #{file} #{file}.orig"
146
- execute << "( diff -u #{file} #{temp} || mv -f #{temp} #{file} )"
147
- }
148
- run(execute.join(' && '))
149
- ensure
150
- remove = [ script ] + config_map.values
151
- run("rm -f #{remove.join(' ')}") rescue nil
152
- end
153
- end
154
- }
155
-
156
- _cset(:rbenv_platform) {
157
- capture((<<-EOS).gsub(/\s+/, ' ')).strip
158
- if test -f /etc/debian_version; then
159
- if test -f /etc/lsb-release && grep -i -q DISTRIB_ID=Ubuntu /etc/lsb-release; then
160
- echo ubuntu;
161
- else
162
- echo debian;
163
- fi;
164
- elif test -f /etc/redhat-release; then
165
- echo redhat;
166
- else
167
- echo unknown;
168
- fi;
169
- EOS
170
- }
171
- _cset(:rbenv_ruby_dependencies) {
172
- case rbenv_platform
173
- when /(debian|ubuntu)/i
174
- %w(git-core build-essential libreadline6-dev zlib1g-dev libssl-dev bison)
175
- when /redhat/i
176
- %w(git-core autoconf glibc-devel patch readline readline-devel zlib zlib-devel openssl bison)
177
- else
178
- []
179
- end
180
- }
181
- task(:dependencies, :except => { :no_release => true }) {
182
- unless rbenv_ruby_dependencies.empty?
183
- case rbenv_platform
184
- when /(debian|ubuntu)/i
185
- run("#{sudo} apt-get install -q -y #{rbenv_ruby_dependencies.join(' ')}")
186
- when /redhat/i
187
- run("#{sudo} yum install -q -y #{rbenv_ruby_dependencies.join(' ')}")
188
- else
189
- # nop
190
- end
191
- end
192
- }
193
-
194
- desc("Build ruby within rbenv.")
195
- task(:build, :except => { :no_release => true }) {
196
- ruby = fetch(:rbenv_ruby_cmd, 'ruby')
197
- if rbenv_ruby_version != 'system'
198
- run("#{rbenv_bin} whence #{ruby} | fgrep -q #{rbenv_ruby_version} || #{rbenv_bin} install #{rbenv_ruby_version}")
199
- end
200
- run("#{rbenv_cmd} exec #{ruby} --version && #{rbenv_cmd} global #{rbenv_ruby_version}")
201
- }
202
-
203
- _cset(:rbenv_bundler_gem, 'bundler')
204
- task(:setup_bundler, :except => { :no_release => true }) {
205
- gem = "#{rbenv_cmd} exec gem"
206
- if v = fetch(:rbenv_bundler_version, nil)
207
- q = "-n #{rbenv_bundler_gem} -v #{v}"
208
- f = "fgrep #{rbenv_bundler_gem} | fgrep #{v}"
209
- i = "-v #{v} #{rbenv_bundler_gem}"
210
- else
211
- q = "-n #{rbenv_bundler_gem}"
212
- f = "fgrep #{rbenv_bundler_gem}"
213
- i = "#{rbenv_bundler_gem}"
214
- end
215
- run("unset -v GEM_HOME; #{gem} query #{q} 2>/dev/null | #{f} || #{gem} install -q #{i}")
216
- run("#{rbenv_cmd} rehash && #{bundle_cmd} version")
217
- }
218
- }
219
- }
220
- end
221
- end
222
- end
223
-
224
- if Capistrano::Configuration.instance
225
- Capistrano::Configuration.instance.extend(Capistrano::RbEnv)
226
- end
227
-
228
- # vim:set ft=ruby ts=2 sw=2 :