capistrano-maven 0.0.3 → 0.0.4

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,5 +1,6 @@
1
1
 
2
2
  require 'capistrano'
3
+ require 'tempfile'
3
4
  require 'uri'
4
5
 
5
6
  module Capistrano
@@ -20,6 +21,21 @@ module Capistrano
20
21
  _cset(:mvn_archive_file_local) {
21
22
  File.join(File.expand_path('.'), 'tools', 'mvn', File.basename(URI.parse(mvn_archive_url).path))
22
23
  }
24
+ _cset(:mvn_checksum_url) {
25
+ "#{mvn_archive_url}.md5"
26
+ }
27
+ _cset(:mvn_checksum_file) {
28
+ File.join(shared_path, 'tools', 'mvn', File.basename(URI.parse(mvn_checksum_url).path))
29
+ }
30
+ _cset(:mvn_checksum_file_local) {
31
+ File.join(File.expand_path('.'), 'tools', 'mvn', File.basename(URI.parse(mvn_checksum_url).path))
32
+ }
33
+ _cset(:mvn_checksum_cmd) {
34
+ case File.extname(File.basename(URI.parse(mvn_checksum_url).path))
35
+ when '.md5' then 'md5sum'
36
+ when '.sha1' then 'sha1sum'
37
+ end
38
+ }
23
39
  _cset(:mvn_path) {
24
40
  File.join(shared_path, 'tools', 'mvn', File.basename(URI.parse(mvn_archive_url).path, "-bin.tar.gz"))
25
41
  }
@@ -108,78 +124,103 @@ module Capistrano
108
124
  }
109
125
  }
110
126
 
127
+ def _validate_archive(archive_file, checksum_file)
128
+ if cmd = fetch(:mvn_checksum_cmd, nil)
129
+ "test `#{cmd} #{archive_file} | cut -d' ' -f1` = `cat #{checksum_file}`"
130
+ else
131
+ "true"
132
+ end
133
+ end
134
+
135
+ def _install(options={})
136
+ path = options.delete(:path)
137
+ bin = options.delete(:bin)
138
+ checksum_file = options.delete(:checksum_file)
139
+ checksum_url = options.delete(:checksum_url)
140
+ archive_file = options.delete(:archive_file)
141
+ archive_url = options.delete(:archive_url)
142
+ dirs = [ File.dirname(checksum_file), File.dirname(archive_file), File.dirname(path) ].uniq()
143
+ execute = []
144
+ execute << "mkdir -p #{dirs.join(' ')}"
145
+ execute << (<<-EOS).gsub(/\s+/, ' ').strip
146
+ if ! test -f #{archive_file}; then
147
+ ( rm -f #{checksum_file}; wget --no-verbose -O #{checksum_file} #{checksum_url} ) &&
148
+ wget --no-verbose -O #{archive_file} #{archive_url} &&
149
+ #{_validate_archive(archive_file, checksum_file)} || ( rm -f #{archive_file}; false ) &&
150
+ test -f #{archive_file};
151
+ fi
152
+ EOS
153
+ execute << (<<-EOS).gsub(/\s+/, ' ').strip
154
+ if ! test -x #{bin}; then
155
+ ( test -d #{path} || tar xf #{archive_file} -C #{File.dirname(path)} ) &&
156
+ test -x #{bin};
157
+ fi
158
+ EOS
159
+ execute.join(' && ')
160
+ end
161
+
111
162
  task(:install, :roles => :app, :except => { :no_release => true }) {
112
- dirs = [ File.dirname(mvn_archive_file), File.dirname(mvn_path) ].uniq()
113
- run(<<-E)
114
- if ! test -x #{mvn_bin}; then
115
- mkdir -p #{dirs.join(' ')} &&
116
- ( test -f #{mvn_archive_file} || wget --no-verbose -O #{mvn_archive_file} #{mvn_archive_url} ) &&
117
- ( test -d #{mvn_path} || tar xf #{mvn_archive_file} -C #{File.dirname(mvn_path)} ) &&
118
- test -x #{mvn_bin};
119
- fi &&
120
- #{mvn_cmd} --version;
121
- E
122
- }
123
-
124
- task(:install_locally, :except => { :no_release => true }) { # TODO: make install and install_locally together
125
- dirs = [ File.dirname(mvn_archive_file_local), File.dirname(mvn_path_local) ].uniq()
126
- run_locally(<<-E)
127
- if ! test -x #{mvn_bin_local}; then
128
- mkdir -p #{dirs.join(' ')} &&
129
- ( test -f #{mvn_archive_file_local} || wget --no-verbose -O #{mvn_archive_file_local} #{mvn_archive_url} ) &&
130
- ( test -d #{mvn_path_local} || tar xf #{mvn_archive_file_local} -C #{File.dirname(mvn_path_local)} ) &&
131
- test -x #{mvn_bin_local};
132
- fi &&
133
- #{mvn_cmd_local} --version;
134
- E
163
+ run(_install(:path => mvn_path, :bin => mvn_bin,
164
+ :checksum_file => mvn_checksum_file, :checksum_url => mvn_checksum_url,
165
+ :archive_file => mvn_archive_file, :archive_url => mvn_archive_url))
166
+ run("#{mvn_cmd} --version")
167
+ }
168
+
169
+ task(:install_locally, :except => { :no_release => true }) {
170
+ run_locally(_install(:path => mvn_path_local, :bin => mvn_bin_local,
171
+ :checksum_file => mvn_checksum_file_local, :checksum_url => mvn_checksum_url,
172
+ :archive_file => mvn_archive_file_local, :archive_url => mvn_archive_url))
173
+ run_locally("#{mvn_cmd_local} --version")
135
174
  }
136
175
 
176
+ def template(file)
177
+ if File.file?(file)
178
+ File.read(file)
179
+ elsif File.file?("#{file}.erb")
180
+ ERB.new(File.read(file)).result(binding)
181
+ else
182
+ abort("No such template: #{file} or #{file}.erb")
183
+ end
184
+ end
185
+
186
+ def _update_settings(files_map, options={})
187
+ execute = []
188
+ dirs = files_map.map { |src, dst| File.dirname(dst) }.uniq
189
+ execute << "mkdir -p #{dirs.join(' ')}" unless dirs.empty?
190
+ files_map.each do |src, dst|
191
+ execute << "( diff -u #{dst} #{src} || mv -f #{src} #{dst} )"
192
+ cleanup = options.fetch(:cleanup, [])
193
+ execute << "rm -f #{cleanup.join(' ')}" unless cleanup.empty?
194
+ end
195
+ execute.join(' && ')
196
+ end
197
+
137
198
  task(:update_settings, :roles => :app, :except => { :no_release => true }) {
138
- tmp_files = []
139
- on_rollback {
140
- run("rm -f #{tmp_files.join(' ')}") unless tmp_files.empty?
141
- }
142
- mvn_settings.each { |file|
143
- tmp_files << tmp_file = File.join('/tmp', File.basename(file))
144
- src_file = File.join(mvn_template_path, file)
145
- dst_file = File.join(mvn_project_path, file)
146
- run(<<-E)
147
- ( test -d #{File.dirname(dst_file)} || mkdir -p #{File.dirname(dst_file)} ) &&
148
- ( test -f #{dst_file} && mv -f #{dst_file} #{dst_file}.orig; true );
149
- E
150
- if File.file?(src_file)
151
- put(File.read(src_file), tmp_file)
152
- elsif File.file?("#{src_file}.erb")
153
- put(ERB.new(File.read("#{src_file}.erb")).result(binding), tmp_file)
154
- else
155
- abort("mvn:update_settings: no such template found: #{src_file} or #{src_file}.erb")
199
+ srcs = mvn_settings.map { |f| File.join(mvn_template_path, f) }
200
+ tmps = mvn_settings.map { |f| t=Tempfile.new('mvn');s=t.path;t.close(true);s }
201
+ dsts = mvn_settings.map { |f| File.join(mvn_settings_path, f) }
202
+ begin
203
+ srcs.zip(tmps).each do |src, tmp|
204
+ put(template(src), tmp)
156
205
  end
157
- run("diff #{dst_file} #{tmp_file} || mv -f #{tmp_file} #{dst_file}")
158
- }
159
- run("rm -f #{mvn_cleanup_settings.join(' ')}") unless mvn_cleanup_settings.empty?
206
+ run(_update_settings(tmps.zip(dsts), :cleanup => mvn_cleanup_settings)) unless tmps.empty?
207
+ ensure
208
+ run("rm -f #{tmps.join(' ')}") unless tmps.empty?
209
+ end
160
210
  }
161
211
 
162
212
  task(:update_settings_locally, :except => { :no_release => true }) {
163
- mvn_settings_local.each { |file|
164
- src_file = File.join(mvn_template_path, file)
165
- dst_file = File.join(mvn_project_path_local, file)
166
- run_locally(<<-E)
167
- ( test -d #{File.dirname(dst_file)} || mkdir -p #{File.dirname(dst_file)} ) &&
168
- ( test -f #{dst_file} && mv -f #{dst_file} #{dst_file}.orig; true );
169
- E
170
- if File.file?(src_file)
171
- File.open(dst_file, 'w') { |fp|
172
- fp.write(File.read(src_file))
173
- }
174
- elsif File.file?("#{src_file}.erb")
175
- File.open(dst_file, 'w') { |fp|
176
- fp.write(ERB.new(File.read("#{src_file}.erb")).result(binding))
177
- }
178
- else
179
- abort("mvn:update_settings_locally: no such template: #{src_file} or #{src_file}.erb")
213
+ srcs = mvn_settings_local.map { |f| File.join(mvn_template_path, f) }
214
+ tmps = mvn_settings.map { |f| t=Tempfile.new('mvn');s=t.path;t.close(true);s }
215
+ dsts = mvn_settings_local.map { |f| File.join(mvn_settings_path_local, f) }
216
+ begin
217
+ srcs.zip(tmps).each do |src, tmp|
218
+ File.open(tmp, 'wb') { |fp| fp.write(template(src)) }
180
219
  end
181
- }
182
- run_locally("rm -f #{mvn_cleanup_settings_local.join(' ')}") unless mvn_cleanup_settings_local.empty?
220
+ run_locally(_update_settings(tmps.zip(dsts), :cleanup => mvn_cleanup_settings_local)) unless tmps.empty?
221
+ ensure
222
+ run_locally("rm -f #{tmps.join(' ')}") unless tmps.empty?
223
+ end
183
224
  }
184
225
 
185
226
  desc("Update maven build.")
@@ -212,7 +253,6 @@ module Capistrano
212
253
 
213
254
  desc("Perform maven build locally.")
214
255
  task(:execute_locally, :roles => :app, :except => { :no_release => true }) {
215
- setup_locally
216
256
  on_rollback {
217
257
  run_locally("cd #{mvn_project_path_local} && #{mvn_cmd_local} clean")
218
258
  }
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Maven
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-maven
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
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: 2012-09-12 00:00:00.000000000 Z
12
+ date: 2012-10-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: capistrano