capistrano-pyenv 0.0.10 → 0.0.11
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.
- data/README.md +2 -0
- data/lib/capistrano-pyenv.rb +71 -26
- data/lib/capistrano-pyenv/version.rb +1 -1
- metadata +2 -2
data/README.md
CHANGED
@@ -37,6 +37,8 @@ Following options are available to manage your pyenv.
|
|
37
37
|
* `:pyenv_use_virtualenv` - create new virtualenv from `:pyenv_virtualenv_python_version`. `false` by default. `:pyenv_python_version` will be treated as the name of the virtualenv if this is turned `true`.
|
38
38
|
* `:pyenv_virtualenv_python_version` - the python version to create virtualenv. `2.7.3` by default.
|
39
39
|
* `:pyenv_virtualenv_options` - command-line options for virtualenv.
|
40
|
+
* `:pyenv_install_dependencies` - controls whether installing dependencies or not. `true` by default.
|
41
|
+
* `:pyenv_define_default_environment` - define `PYENV_ROOT` and update `PATH` to use pyenv over capistrano. `true` by default.
|
40
42
|
|
41
43
|
## Contributing
|
42
44
|
|
data/lib/capistrano-pyenv.rb
CHANGED
@@ -7,13 +7,17 @@ module Capistrano
|
|
7
7
|
def self.extended(configuration)
|
8
8
|
configuration.load {
|
9
9
|
namespace(:pyenv) {
|
10
|
+
_cset(:pyenv_root, "$HOME/.pyenv")
|
10
11
|
_cset(:pyenv_path) {
|
11
|
-
|
12
|
+
# expand to actual path to use this value since pyenv may be executed by users other than `:user`.
|
13
|
+
capture("echo #{pyenv_root.dump}").strip
|
12
14
|
}
|
15
|
+
_cset(:pyenv_bin_path) { File.join(pyenv_path, "bin") }
|
16
|
+
_cset(:pyenv_shims_path) { File.join(pyenv_path, "shims") }
|
13
17
|
_cset(:pyenv_bin) {
|
14
|
-
File.join(
|
18
|
+
File.join(pyenv_bin_path, "pyenv")
|
15
19
|
}
|
16
|
-
_cset(:pyenv_cmd) {
|
20
|
+
_cset(:pyenv_cmd) {
|
17
21
|
"env PYENV_VERSION=#{pyenv_python_version.dump} #{pyenv_bin}"
|
18
22
|
}
|
19
23
|
_cset(:pyenv_repository, 'git://github.com/yyuu/pyenv.git')
|
@@ -32,9 +36,11 @@ module Capistrano
|
|
32
36
|
_cset(:pyenv_virtualenv_python_version, '2.7.3')
|
33
37
|
_cset(:pyenv_virtualenv_options, %w(--distribute --quiet --system-site-packages))
|
34
38
|
|
39
|
+
_cset(:pyenv_install_dependencies, true)
|
40
|
+
|
35
41
|
desc("Setup pyenv.")
|
36
42
|
task(:setup, :except => { :no_release => true }) {
|
37
|
-
dependencies
|
43
|
+
dependencies if pyenv_install_dependencies
|
38
44
|
update
|
39
45
|
configure
|
40
46
|
build
|
@@ -78,9 +84,29 @@ module Capistrano
|
|
78
84
|
plugins.update
|
79
85
|
}
|
80
86
|
|
87
|
+
def setup_default_environment
|
88
|
+
env = fetch(:default_environment, {}).dup
|
89
|
+
env["PYENV_ROOT"] = pyenv_path
|
90
|
+
env["PATH"] = [ pyenv_shims_path, pyenv_bin_path, env.fetch("PATH", "$PATH") ].join(":")
|
91
|
+
set(:default_environment, env)
|
92
|
+
end
|
93
|
+
|
94
|
+
_cset(:pyenv_define_default_environment, true)
|
95
|
+
# workaround for `multistage` of capistrano-ext.
|
96
|
+
# https://github.com/yyuu/capistrano-rbenv/pull/5
|
97
|
+
if top.namespaces.key?(:multistage)
|
98
|
+
after "multistage:ensure" do
|
99
|
+
setup_default_environment if pyenv_define_default_environment
|
100
|
+
end
|
101
|
+
else
|
102
|
+
on :start do
|
103
|
+
setup_default_environment if pyenv_define_default_environment
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
81
107
|
desc("Purge pyenv.")
|
82
108
|
task(:purge, :except => { :no_release => true }) {
|
83
|
-
run("rm -rf #{pyenv_path}")
|
109
|
+
run("rm -rf #{pyenv_path.dump}")
|
84
110
|
}
|
85
111
|
|
86
112
|
namespace(:plugins) {
|
@@ -118,35 +144,49 @@ module Capistrano
|
|
118
144
|
_cset(:pyenv_configure_script) {
|
119
145
|
(<<-EOS).gsub(/^\s*/, '')
|
120
146
|
# Configured by capistrano-pyenv. Do not edit directly.
|
121
|
-
export PATH
|
147
|
+
export PATH=#{[ pyenv_bin_path, "$PATH"].join(":").dump}
|
122
148
|
eval "$(pyenv init -)"
|
123
149
|
EOS
|
124
150
|
}
|
151
|
+
|
152
|
+
def _update_config(script_file, file, tempfile)
|
153
|
+
execute = []
|
154
|
+
## (1) ensure copy source file exists
|
155
|
+
execute << "( test -f #{file.dump} || touch #{file.dump} )"
|
156
|
+
## (2) copy originao config to temporary file
|
157
|
+
execute << "rm -f #{tempfile.dump}" # remove tempfile to preserve permissions of original file
|
158
|
+
execute << "cp -fp #{file.dump} #{tempfile.dump}"
|
159
|
+
## (3) modify temporary file
|
160
|
+
execute << "sed -i -e '/^#{Regexp.escape(pyenv_configure_signature)}/,/^#{Regexp.escape(pyenv_configure_signature)}/d' #{tempfile.dump}"
|
161
|
+
execute << "echo #{pyenv_configure_signature.dump} >> #{tempfile.dump}"
|
162
|
+
execute << "cat #{script_file.dump} >> #{tempfile.dump}"
|
163
|
+
execute << "echo #{pyenv_configure_signature.dump} >> #{tempfile.dump}"
|
164
|
+
## (4) update config only if it is needed
|
165
|
+
execute << "cp -fp #{file.dump} #{(file + ".orig").dump}"
|
166
|
+
execute << "( diff -u #{file.dump} #{tempfile.dump} || mv -f #{tempfile.dump} #{file.dump} )"
|
167
|
+
run(execute.join(" && "))
|
168
|
+
end
|
169
|
+
|
170
|
+
def update_config(script_file, file)
|
171
|
+
begin
|
172
|
+
tempfile = capture("mktemp /tmp/pyenv.XXXXXXXXXX").strip
|
173
|
+
_update_config(script_file, file, tempfile)
|
174
|
+
ensure
|
175
|
+
run("rm -f #{tempfile.dump}") rescue nil
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
125
179
|
_cset(:pyenv_configure_signature, '##pyenv:configure')
|
126
180
|
task(:configure, :except => { :no_release => true }) {
|
127
181
|
if fetch(:pyenv_use_configure, true)
|
128
|
-
script = File.join('/tmp', "pyenv.#{$$}")
|
129
|
-
config = [ pyenv_configure_files ].flatten
|
130
|
-
config_map = Hash[ config.map { |f| [f, File.join('/tmp', "#{File.basename(f)}.#{$$}")] } ]
|
131
182
|
begin
|
132
|
-
|
133
|
-
put(pyenv_configure_script,
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
execute << "cp -fp #{file} #{temp}"
|
138
|
-
execute << "sed -i -e '/^#{Regexp.escape(pyenv_configure_signature)}/,/^#{Regexp.escape(pyenv_configure_signature)}/d' #{temp}"
|
139
|
-
execute << "echo #{pyenv_configure_signature.dump} >> #{temp}"
|
140
|
-
execute << "cat #{script} >> #{temp}"
|
141
|
-
execute << "echo #{pyenv_configure_signature.dump} >> #{temp}"
|
142
|
-
## (2) update config only if it is needed
|
143
|
-
execute << "cp -fp #{file} #{file}.orig"
|
144
|
-
execute << "( diff -u #{file} #{temp} || mv -f #{temp} #{file} )"
|
145
|
-
}
|
146
|
-
run(execute.join(' && '))
|
183
|
+
script_file = capture("mktemp /tmp/pyenv.XXXXXXXXXX").strip
|
184
|
+
top.put(pyenv_configure_script, script_file)
|
185
|
+
[ pyenv_configure_files ].flatten.each do |file|
|
186
|
+
update_config(script_file, file)
|
187
|
+
end
|
147
188
|
ensure
|
148
|
-
|
149
|
-
run("rm -f #{remove.join(' ')}") rescue nil
|
189
|
+
run("rm -f #{script_file.dump}") rescue nil
|
150
190
|
end
|
151
191
|
end
|
152
192
|
}
|
@@ -219,6 +259,11 @@ module Capistrano
|
|
219
259
|
|
220
260
|
run("#{pyenv_cmd} exec #{python} --version && #{pyenv_cmd} global #{pyenv_python_version}")
|
221
261
|
}
|
262
|
+
|
263
|
+
# call `pyenv rehash` to update shims.
|
264
|
+
def rehash()
|
265
|
+
run("#{pyenv_cmd} rehash")
|
266
|
+
end
|
222
267
|
}
|
223
268
|
}
|
224
269
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-pyenv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
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-
|
12
|
+
date: 2013-03-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: capistrano
|