capistrano-sbt 0.0.2 → 0.0.3

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 CHANGED
@@ -20,9 +20,9 @@ Or install it yourself as:
20
20
 
21
21
  This recipes will try to do following things during Capistrano `deploy:setup` and `deploy` tasks.
22
22
 
23
- (1) Download and install sbt for current project
24
- (2) Prepare optional `*.sbt` for current project (optional)
25
- (3) Build sbt project remotely (default) or locally
23
+ 1. Download and install sbt for current project
24
+ 2. Prepare optional `*.sbt` for current project (optional)
25
+ 3. Build sbt project remotely (default) or locally
26
26
 
27
27
  To build you sbt projects during Capistrano `deploy` tasks, add following in you `config/deploy.rb`. By default, sbt build will run after the Capistrano's `deploy:finalize_update`.
28
28
 
@@ -1,5 +1,6 @@
1
1
 
2
2
  require 'capistrano'
3
+ require 'tempfile'
3
4
  require 'uri'
4
5
 
5
6
  module Capistrano
@@ -8,8 +9,16 @@ module Capistrano
8
9
  configuration.load {
9
10
  namespace(:sbt) {
10
11
  _cset(:sbt_version, '0.11.2')
12
+ _cset(:sbt_group_id) {
13
+ case sbt_version
14
+ when /^0\.(?:7|10)\.\d+$/, /^0\.11\.[0-2]$/
15
+ 'org.scala-tools.sbt'
16
+ else
17
+ 'org.scala-sbt'
18
+ end
19
+ }
11
20
  _cset(:sbt_jar_url) {
12
- "http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/#{sbt_version}/sbt-launch.jar"
21
+ "http://typesafe.artifactoryonline.com/typesafe/ivy-releases/#{sbt_group_id}/sbt-launch/#{sbt_version}/sbt-launch.jar"
13
22
  }
14
23
  _cset(:sbt_jar_file) {
15
24
  File.join(shared_path, 'tools', 'sbt', "sbt-#{sbt_version}", File.basename(URI.parse(sbt_jar_url).path))
@@ -88,68 +97,72 @@ module Capistrano
88
97
  }
89
98
  }
90
99
 
100
+ def _install(options={})
101
+ execute = []
102
+ jar_file = options.delete(:jar_file)
103
+ jar_url = options.delete(:jar_url)
104
+ execute << "mkdir -p #{File.dirname(jar_file)}"
105
+ execute << "( test -f #{jar_file} || wget --no-verbose -O #{jar_file} #{jar_url} )"
106
+ execute << "test -f #{jar_file}"
107
+ execute.join(' && ')
108
+ end
109
+
91
110
  task(:install, :roles => :app, :except => { :no_release => true }) {
92
- run(<<-E)
93
- ( test -d #{File.dirname(sbt_jar_file)} || mkdir -p #{File.dirname(sbt_jar_file)} ) &&
94
- ( test -f #{sbt_jar_file} || wget --no-verbose -O #{sbt_jar_file} #{sbt_jar_url} ) &&
95
- test -f #{sbt_jar_file};
96
- E
111
+ run(_install(:jar_file => sbt_jar_file, :jar_url => sbt_jar_url))
97
112
  }
98
113
 
99
- task(:install_locally, :except => { :no_release => true }) { # TODO: make install and install_locally together
100
- run_locally(<<-E)
101
- ( test -d #{File.dirname(sbt_jar_file_local)} || mkdir -p #{File.dirname(sbt_jar_file_local)} ) &&
102
- ( test -f #{sbt_jar_file_local} || wget --no-verbose -O #{sbt_jar_file_local} #{sbt_jar_url} ) &&
103
- test -f #{sbt_jar_file_local};
104
- E
114
+ task(:install_locally, :except => { :no_release => true }) {
115
+ run_locally(_install(:jar_file => sbt_jar_file_local, :jar_url => sbt_jar_url))
105
116
  }
106
117
 
118
+ def template(file)
119
+ if File.file?(file)
120
+ File.read(file)
121
+ elsif File.file?("#{file}.erb")
122
+ ERB.new(File.read(file)).result(binding)
123
+ else
124
+ abort("No such template: #{file} or #{file}.erb")
125
+ end
126
+ end
127
+
128
+ def _update_settings(files_map, options={})
129
+ execute = []
130
+ dirs = files_map.map { |src, dst| File.dirname(dst) }.uniq
131
+ execute << "mkdir -p #{dirs.join(' ')}" unless dirs.empty?
132
+ files_map.each do |src, dst|
133
+ execute << "( diff -u #{dst} #{src} || mv -f #{src} #{dst} )"
134
+ cleanup = options.fetch(:cleanup, [])
135
+ execute << "rm -f #{cleanup.join(' ')}" unless cleanup.empty?
136
+ end
137
+ execute.join(' && ')
138
+ end
139
+
107
140
  task(:update_settings, :roles => :app, :except => { :no_release => true }) {
108
- tmp_files = []
109
- on_rollback {
110
- run("rm -f #{tmp_files.join(' ')}") unless tmp_files.empty?
111
- }
112
- sbt_settings.each { |file|
113
- tmp_files << tmp_file = File.join('/tmp', File.basename(file))
114
- src_file = File.join(sbt_template_path, file)
115
- dst_file = File.join(sbt_settings_path, file)
116
- run(<<-E)
117
- ( test -d #{File.dirname(dst_file)} || mkdir -p #{File.dirname(dst_file)} ) &&
118
- ( test -f #{dst_file} && mv -f #{dst_file} #{dst_file}.orig; true );
119
- E
120
- if File.file?(src_file)
121
- put(File.read(src_file), tmp_file)
122
- elsif File.file?("#{src_file}.erb")
123
- put(ERB.new(File.read("#{src_file}.erb")).result(binding), tmp_file)
124
- else
125
- abort("sbt:update_settings: no such template found: #{src_file} or #{src_file}.erb")
141
+ srcs = sbt_settings.map { |f| File.join(sbt_template_path, f) }
142
+ tmps = sbt_settings.map { |f| t=Tempfile.new('sbt');s=t.path;t.close(true);s }
143
+ dsts = sbt_settings.map { |f| File.join(sbt_settings_path, f) }
144
+ begin
145
+ srcs.zip(tmps).each do |src, tmp|
146
+ put(template(src), tmp)
126
147
  end
127
- run("diff #{dst_file} #{tmp_file} || mv -f #{tmp_file} #{dst_file}")
128
- }
129
- run("rm -f #{sbt_cleanup_settings.join(' ')}") unless sbt_cleanup_settings.empty?
148
+ run(_update_settings(tmps.zip(dsts), :cleanup => sbt_cleanup_settings)) unless tmps.empty?
149
+ ensure
150
+ run("rm -f #{tmps.join(' ')}") unless tmps.empty?
151
+ end
130
152
  }
131
153
 
132
154
  task(:update_settings_locally, :except => { :no_release => true }) {
133
- sbt_settings_local.each { |file|
134
- src_file = File.join(sbt_template_path, file)
135
- dst_file = File.join(sbt_settings_path_local, file)
136
- run_locally(<<-E)
137
- ( test -d #{File.dirname(dst_file)} || mkdir -p #{File.dirname(dst_file)} ) &&
138
- ( test -f #{dst_file} && mv -f #{dst_file} #{dst_file}.orig; true );
139
- E
140
- if File.file?(src_file)
141
- File.open(dst_file, 'w') { |fp|
142
- fp.write(File.read(src_file))
143
- }
144
- elsif File.file?("#{src_file}.erb")
145
- File.open(dst_file, 'w') { |fp|
146
- fp.write(ERB.new(File.read("#{src_file}.erb")).result(binding))
147
- }
148
- else
149
- abort("sbt:update_settings_locally: no such template: #{src_file} or #{src_file}.erb")
155
+ srcs = sbt_settings_local.map { |f| File.join(sbt_template_path, f) }
156
+ tmps = sbt_settings.map { |f| t=Tempfile.new('sbt');s=t.path;t.close(true);s }
157
+ dsts = sbt_settings_local.map { |f| File.join(sbt_settings_path_local, f) }
158
+ begin
159
+ srcs.zip(tmps).each do |src, tmp|
160
+ File.open(tmp, 'wb') { |fp| fp.write(template(src)) }
150
161
  end
151
- }
152
- run_locally("rm -f #{sbt_cleanup_settings_local.join(' ')}") unless sbt_cleanup_settings_local.empty?
162
+ run_locally(_update_settings(tmps.zip(dsts), :cleanup => sbt_cleanup_settings_local)) unless tmps.empty?
163
+ ensure
164
+ run_locally("rm -f #{tmps.join(' ')}") unless tmps.empty?
165
+ end
153
166
  }
154
167
 
155
168
  desc("Update sbt build.")
@@ -182,7 +195,6 @@ module Capistrano
182
195
 
183
196
  desc("Perform sbt build locally.")
184
197
  task(:execute_locally, :roles => :app, :except => { :no_release => true }) {
185
- setup_locally
186
198
  on_rollback {
187
199
  run_locally("cd #{sbt_project_path_local} && #{sbt_cmd_local} clean")
188
200
  }
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Sbt
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-sbt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
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-08-14 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
@@ -69,4 +69,3 @@ signing_key:
69
69
  specification_version: 3
70
70
  summary: a capistrano recipe to deploy sbt based projects.
71
71
  test_files: []
72
- has_rdoc: