warbler 1.3.0.beta1 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +9 -0
- data/LICENSE.txt +1 -1
- data/Manifest.txt +22 -0
- data/README.txt +6 -3
- data/Rakefile +2 -2
- data/bin/warble +1 -1
- data/ext/JarMain.java +3 -2
- data/ext/WarMain.java +3 -2
- data/ext/WarblerJar.java +2 -1
- data/ext/WarblerJarService.java +2 -1
- data/lib/warbler.rb +1 -1
- data/lib/warbler/application.rb +17 -1
- data/lib/warbler/config.rb +12 -3
- data/lib/warbler/gems.rb +1 -1
- data/lib/warbler/jar.rb +17 -12
- data/lib/warbler/task.rb +6 -15
- data/lib/warbler/templates/bundler.erb +3 -0
- data/lib/warbler/templates/jar.erb +5 -0
- data/lib/warbler/templates/rack.erb +1 -1
- data/lib/warbler/templates/war.erb +1 -0
- data/lib/warbler/traits.rb +5 -3
- data/lib/warbler/traits/bundler.rb +52 -14
- data/lib/warbler/traits/gemspec.rb +6 -11
- data/lib/warbler/traits/jar.rb +4 -1
- data/lib/warbler/traits/merb.rb +2 -1
- data/lib/warbler/traits/nogemspec.rb +2 -1
- data/lib/warbler/traits/rack.rb +3 -1
- data/lib/warbler/traits/rails.rb +13 -8
- data/lib/warbler/traits/war.rb +12 -6
- data/lib/warbler/version.rb +2 -2
- data/lib/warbler/war.rb +7 -0
- data/lib/warbler_jar.jar +0 -0
- data/spec/drb_helper.rb +41 -0
- data/spec/sample_bundler/Gemfile.lock +10 -0
- data/spec/sample_bundler/config.ru +0 -0
- data/spec/sample_bundler/vendor/bundle/jruby/1.8/cache/rake-0.8.7.gem +0 -0
- data/spec/sample_bundler/vendor/bundle/jruby/1.8/gems/rake-0.8.7/lib/rake.rb +2506 -0
- data/spec/sample_bundler/vendor/bundle/jruby/1.8/specifications/rake-0.8.7.gemspec +31 -0
- data/spec/sample_bundler/vendor/bundle/ruby/1.8/cache/rake-0.8.7.gem +0 -0
- data/spec/sample_bundler/vendor/bundle/ruby/1.8/gems/rake-0.8.7/lib/rake.rb +2506 -0
- data/spec/sample_bundler/vendor/bundle/ruby/1.8/specifications/rake-0.8.7.gemspec +30 -0
- data/spec/sample_bundler/vendor/bundle/ruby/1.9.1/cache/rake-0.8.7.gem +0 -0
- data/spec/sample_bundler/vendor/bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb +2506 -0
- data/spec/sample_bundler/vendor/bundle/ruby/1.9.1/specifications/rake-0.8.7.gemspec +30 -0
- data/spec/sample_jar/sample_jar.gemspec +0 -1
- data/spec/sample_war/config/environments/production.rb +3 -0
- data/spec/spec_helper.rb +32 -5
- data/spec/warbler/application_spec.rb +11 -2
- data/spec/warbler/bundler_spec.rb +136 -0
- data/spec/warbler/config_spec.rb +2 -2
- data/spec/warbler/gems_spec.rb +2 -2
- data/spec/warbler/jar_spec.rb +63 -108
- data/spec/warbler/task_spec.rb +29 -20
- data/spec/warbler/traits_spec.rb +3 -2
- data/spec/warbler/war_spec.rb +3 -2
- data/warble.rb +3 -0
- data/web.xml.erb +2 -2
- metadata +179 -177
data/History.txt
CHANGED
@@ -2,6 +2,15 @@
|
|
2
2
|
|
3
3
|
- Warbler can now package regular Ruby projects as executable jar
|
4
4
|
files. See the README.txt file for details.
|
5
|
+
- WARBLER-18: Heed BUNDLE_GEMFILE in environment
|
6
|
+
- WARBLER-17: Allow config.excludes to work for files in public/
|
7
|
+
- GH#3, #12, #17: Properly bundle when BUNDLE_PATH is set or
|
8
|
+
--deployment flag is used
|
9
|
+
- JRUBY-5077, WARBLER-24: Gems from git repositories are now packaged
|
10
|
+
correctly
|
11
|
+
- GH#20: Ruby 1.9.2 support
|
12
|
+
- GH#8: Clean up compiled .class files after building war
|
13
|
+
- GH#15: Simplify detection of thread-safe Rails
|
5
14
|
|
6
15
|
== 1.2.1
|
7
16
|
|
data/LICENSE.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -17,9 +17,12 @@ lib/warbler/gems.rb
|
|
17
17
|
lib/warbler/jar.rb
|
18
18
|
lib/warbler/task.rb
|
19
19
|
lib/warbler/templates
|
20
|
+
lib/warbler/templates/bundler.erb
|
20
21
|
lib/warbler/templates/config.erb
|
22
|
+
lib/warbler/templates/jar.erb
|
21
23
|
lib/warbler/templates/rack.erb
|
22
24
|
lib/warbler/templates/rails.erb
|
25
|
+
lib/warbler/templates/war.erb
|
23
26
|
lib/warbler/traits
|
24
27
|
lib/warbler/traits.rb
|
25
28
|
lib/warbler/traits/bundler.rb
|
@@ -33,6 +36,24 @@ lib/warbler/traits/war.rb
|
|
33
36
|
lib/warbler/version.rb
|
34
37
|
lib/warbler/war.rb
|
35
38
|
lib/warbler_jar.jar
|
39
|
+
spec/drb_helper.rb
|
40
|
+
spec/sample_bundler/Gemfile.lock
|
41
|
+
spec/sample_bundler/config.ru
|
42
|
+
spec/sample_bundler/vendor/bundle/jruby/1.8
|
43
|
+
spec/sample_bundler/vendor/bundle/jruby/1.8/cache/rake-0.8.7.gem
|
44
|
+
spec/sample_bundler/vendor/bundle/jruby/1.8/gems/rake-0.8.7
|
45
|
+
spec/sample_bundler/vendor/bundle/jruby/1.8/gems/rake-0.8.7/lib/rake.rb
|
46
|
+
spec/sample_bundler/vendor/bundle/jruby/1.8/specifications/rake-0.8.7.gemspec
|
47
|
+
spec/sample_bundler/vendor/bundle/ruby/1.8
|
48
|
+
spec/sample_bundler/vendor/bundle/ruby/1.8/cache/rake-0.8.7.gem
|
49
|
+
spec/sample_bundler/vendor/bundle/ruby/1.8/gems/rake-0.8.7
|
50
|
+
spec/sample_bundler/vendor/bundle/ruby/1.8/gems/rake-0.8.7/lib/rake.rb
|
51
|
+
spec/sample_bundler/vendor/bundle/ruby/1.8/specifications/rake-0.8.7.gemspec
|
52
|
+
spec/sample_bundler/vendor/bundle/ruby/1.9.1
|
53
|
+
spec/sample_bundler/vendor/bundle/ruby/1.9.1/cache/rake-0.8.7.gem
|
54
|
+
spec/sample_bundler/vendor/bundle/ruby/1.9.1/gems/rake-0.8.7
|
55
|
+
spec/sample_bundler/vendor/bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb
|
56
|
+
spec/sample_bundler/vendor/bundle/ruby/1.9.1/specifications/rake-0.8.7.gemspec
|
36
57
|
spec/sample_jar/History.txt
|
37
58
|
spec/sample_jar/Manifest.txt
|
38
59
|
spec/sample_jar/README.txt
|
@@ -60,6 +81,7 @@ spec/sample_war/public/index.html
|
|
60
81
|
spec/sample_war/public/robots.txt
|
61
82
|
spec/spec_helper.rb
|
62
83
|
spec/warbler/application_spec.rb
|
84
|
+
spec/warbler/bundler_spec.rb
|
63
85
|
spec/warbler/config_spec.rb
|
64
86
|
spec/warbler/gems_spec.rb
|
65
87
|
spec/warbler/jar_spec.rb
|
data/README.txt
CHANGED
@@ -93,8 +93,7 @@ require paths, and the files to be included in the archive. For best
|
|
93
93
|
results make sure your gemspec specifies all of the following
|
94
94
|
attributes:
|
95
95
|
|
96
|
-
* +
|
97
|
-
* +files+
|
96
|
+
* +executables+
|
98
97
|
* +require_paths+
|
99
98
|
* runtime dependencies added with +add_dependency+
|
100
99
|
|
@@ -111,6 +110,10 @@ archive along with the Gemfile. The Bundler groups named
|
|
111
110
|
+:development+ and +:test+ will be excluded by default, unless you
|
112
111
|
specify with +config.bundle_without+ in +config/warble.rb+.
|
113
112
|
|
113
|
+
Warbler supports Bundler for gems and git repositories, but not for
|
114
|
+
plain path components. Warbler will warn when a +:path+ component is
|
115
|
+
found in the +Gemfile+ and will refuse to include it in the archive.
|
116
|
+
|
114
117
|
== War Files
|
115
118
|
|
116
119
|
=== Rails applications
|
@@ -248,5 +251,5 @@ After that, simply run "rake".
|
|
248
251
|
|
249
252
|
Warbler is provided under the terms of the MIT license.
|
250
253
|
|
251
|
-
Warbler (c) 2010 Engine Yard, Inc.
|
254
|
+
Warbler (c) 2010-2011 Engine Yard, Inc.
|
252
255
|
Warbler (c) 2007-2009 Sun Microsystems, Inc.
|
data/Rakefile
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010 Engine Yard, Inc.
|
2
|
+
# Copyright (c) 2010-2011 Engine Yard, Inc.
|
3
3
|
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
4
4
|
# This source code is available under the MIT license.
|
5
5
|
# See the file LICENSE.txt for details.
|
@@ -20,7 +20,7 @@ MANIFEST = FileList["History.txt", "Manifest.txt", "README.txt", "Gemfile",
|
|
20
20
|
].to_a.reject{|f| f=~%r{spec/sample/(MANIFEST|link|web.xml)}}.sort.uniq
|
21
21
|
|
22
22
|
begin
|
23
|
-
File.open("Manifest.txt", "
|
23
|
+
File.open("Manifest.txt", "wb") {|f| MANIFEST.each {|n| f << "#{n}\n"} }
|
24
24
|
require 'hoe'
|
25
25
|
require File.dirname(__FILE__) + '/lib/warbler/version'
|
26
26
|
hoe = Hoe.spec("warbler") do |p|
|
data/bin/warble
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
3
|
#--
|
4
|
-
# Copyright (c) 2010 Engine Yard, Inc.
|
4
|
+
# Copyright (c) 2010-2011 Engine Yard, Inc.
|
5
5
|
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
6
6
|
# This source code is available under the MIT license.
|
7
7
|
# See the file LICENSE.txt for details.
|
data/ext/JarMain.java
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
/**
|
2
|
-
* Copyright (c) 2010 Engine Yard, Inc.
|
2
|
+
* Copyright (c) 2010-2011 Engine Yard, Inc.
|
3
|
+
* Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
3
4
|
* This source code is available under the MIT license.
|
4
5
|
* See the file LICENSE.txt for details.
|
5
6
|
*/
|
@@ -29,7 +30,7 @@ public class JarMain implements Runnable {
|
|
29
30
|
this.args = args;
|
30
31
|
URL mainClass = getClass().getResource(MAIN);
|
31
32
|
this.path = mainClass.toURI().getSchemeSpecificPart();
|
32
|
-
this.jarfile =
|
33
|
+
this.jarfile = this.path.replace("!" + MAIN, "").replace("file:", "");
|
33
34
|
this.debug = isDebug();
|
34
35
|
this.extractRoot = File.createTempFile("jruby", "extract");
|
35
36
|
this.extractRoot.delete();
|
data/ext/WarMain.java
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
/**
|
2
|
-
* Copyright (c) 2010 Engine Yard, Inc.
|
2
|
+
* Copyright (c) 2010-2011 Engine Yard, Inc.
|
3
|
+
* Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
3
4
|
* This source code is available under the MIT license.
|
4
5
|
* See the file LICENSE.txt for details.
|
5
6
|
*/
|
@@ -26,7 +27,7 @@ public class WarMain implements Runnable {
|
|
26
27
|
this.args = args;
|
27
28
|
URL mainClass = getClass().getResource(MAIN);
|
28
29
|
this.path = mainClass.toURI().getSchemeSpecificPart();
|
29
|
-
this.warfile =
|
30
|
+
this.warfile = this.path.replace("!" + MAIN, "").replace("file:", "");
|
30
31
|
this.debug = isDebug();
|
31
32
|
this.webroot = File.createTempFile("winstone", "webroot");
|
32
33
|
this.webroot.delete();
|
data/ext/WarblerJar.java
CHANGED
data/ext/WarblerJarService.java
CHANGED
data/lib/warbler.rb
CHANGED
data/lib/warbler/application.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010 Engine Yard, Inc.
|
2
|
+
# Copyright (c) 2010-2011 Engine Yard, Inc.
|
3
3
|
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
4
4
|
# This source code is available under the MIT license.
|
5
5
|
# See the file LICENSE.txt for details.
|
@@ -67,4 +67,20 @@ class Warbler::Application < Rake::Application
|
|
67
67
|
Rake.application = self
|
68
68
|
super
|
69
69
|
end
|
70
|
+
|
71
|
+
# Remap the version option to display Warbler version.
|
72
|
+
def standard_rake_options
|
73
|
+
super.map do |opt|
|
74
|
+
if opt.first == '--version'
|
75
|
+
['--version', '-V', "Display the program version.",
|
76
|
+
lambda { |value|
|
77
|
+
puts "Warbler version #{Warbler::VERSION}"
|
78
|
+
exit
|
79
|
+
}
|
80
|
+
]
|
81
|
+
else
|
82
|
+
opt
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
70
86
|
end
|
data/lib/warbler/config.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010 Engine Yard, Inc.
|
2
|
+
# Copyright (c) 2010-2011 Engine Yard, Inc.
|
3
3
|
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
4
4
|
# This source code is available under the MIT license.
|
5
5
|
# See the file LICENSE.txt for details.
|
@@ -184,15 +184,24 @@ module Warbler
|
|
184
184
|
@gem_path[1..-1]
|
185
185
|
end
|
186
186
|
|
187
|
+
def define_tasks
|
188
|
+
task "gemjar" do
|
189
|
+
self.features << "gemjar"
|
190
|
+
end
|
191
|
+
task "executable" do
|
192
|
+
self.features << "executable"
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
187
196
|
# Deprecated
|
188
197
|
def war_name
|
189
|
-
|
198
|
+
$stderr.puts "config.war_name deprecated; replace with config.jar_name" #:nocov:
|
190
199
|
jar_name #:nocov:
|
191
200
|
end
|
192
201
|
|
193
202
|
# Deprecated
|
194
203
|
def war_name=(w)
|
195
|
-
|
204
|
+
$stderr.puts "config.war_name deprecated; replace with config.jar_name" #:nocov:
|
196
205
|
self.jar_name = w #:nocov:
|
197
206
|
end
|
198
207
|
|
data/lib/warbler/gems.rb
CHANGED
data/lib/warbler/jar.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010 Engine Yard, Inc.
|
2
|
+
# Copyright (c) 2010-2011 Engine Yard, Inc.
|
3
|
+
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
3
4
|
# This source code is available under the MIT license.
|
4
5
|
# See the file LICENSE.txt for details.
|
5
6
|
#++
|
@@ -24,6 +25,11 @@ module Warbler
|
|
24
25
|
@files = {}
|
25
26
|
end
|
26
27
|
|
28
|
+
def contents(entry)
|
29
|
+
file = files[entry]
|
30
|
+
file.respond_to?(:read) ? file.read : File.open(file) {|f| f.read }
|
31
|
+
end
|
32
|
+
|
27
33
|
def compile(config)
|
28
34
|
# Compiling all Ruby files we can find -- do we need to allow an
|
29
35
|
# option to configure what gets compiled?
|
@@ -125,16 +131,15 @@ module Warbler
|
|
125
131
|
spec = matched.last
|
126
132
|
end
|
127
133
|
|
128
|
-
|
129
|
-
|
134
|
+
full_gem_path = Pathname.new(spec.full_gem_path)
|
135
|
+
|
136
|
+
# skip gems whose full_gem_path does not exist
|
137
|
+
($stderr.puts "warning: skipping #{spec.name} (#{full_gem_path.to_s} does not exist)" ; return) unless full_gem_path.exist?
|
130
138
|
|
131
|
-
|
132
|
-
|
133
|
-
f =
|
139
|
+
@files[apply_pathmaps(config, "#{spec.full_name}.gemspec", :gemspecs)] = StringIO.new(spec.to_ruby)
|
140
|
+
FileList["#{full_gem_path.to_s}/**/*"].each do |src|
|
141
|
+
f = Pathname.new(src).relative_path_from(full_gem_path).to_s
|
134
142
|
next if config.gem_excludes && config.gem_excludes.any? {|rx| f =~ rx }
|
135
|
-
src = File.join(spec.full_gem_path, f)
|
136
|
-
# some gemspecs may have incorrect file listings
|
137
|
-
next unless File.exist?(src)
|
138
143
|
@files[apply_pathmaps(config, File.join(spec.full_name, f), :gems)] = src
|
139
144
|
end
|
140
145
|
|
@@ -145,7 +150,7 @@ module Warbler
|
|
145
150
|
def find_application_files(config)
|
146
151
|
config.dirs.select do |d|
|
147
152
|
exists = File.directory?(d)
|
148
|
-
|
153
|
+
$stderr.puts "warning: application directory `#{d}' does not exist or is not a directory; skipping" unless exists
|
149
154
|
exists
|
150
155
|
end.each do |d|
|
151
156
|
@files[apply_pathmaps(config, d, :application)] = nil
|
@@ -214,7 +219,7 @@ module Warbler
|
|
214
219
|
if src.respond_to?(:read)
|
215
220
|
zipfile.get_output_stream(entry) {|f| f << src.read }
|
216
221
|
elsif src.nil? || File.directory?(src)
|
217
|
-
|
222
|
+
$stderr.puts "directory symlinks are not followed unless using JRuby; #{entry} contents not in archive" \
|
218
223
|
if File.symlink?(entry) && !defined?(JRUBY_VERSION)
|
219
224
|
zipfile.mkdir(entry)
|
220
225
|
elsif File.symlink?(src)
|
@@ -241,7 +246,7 @@ module Warbler
|
|
241
246
|
class War < Jar
|
242
247
|
def initialize(*)
|
243
248
|
super
|
244
|
-
|
249
|
+
$stderr.puts "Warbler::War is deprecated. Please replace all occurrences with Warbler::Jar."
|
245
250
|
end
|
246
251
|
end
|
247
252
|
end
|
data/lib/warbler/task.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010 Engine Yard, Inc.
|
2
|
+
# Copyright (c) 2010-2011 Engine Yard, Inc.
|
3
3
|
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
4
4
|
# This source code is available under the MIT license.
|
5
5
|
# See the file LICENSE.txt for details.
|
@@ -45,7 +45,7 @@ module Warbler
|
|
45
45
|
end
|
46
46
|
@config ||= Config.new
|
47
47
|
unless @config.kind_of? Config
|
48
|
-
|
48
|
+
$stderr.puts "Warbler::Config not provided by override in initializer or #{Config::FILE}; using defaults"
|
49
49
|
@config = Config.new
|
50
50
|
end
|
51
51
|
@name = name || @config.jar_extension
|
@@ -66,11 +66,10 @@ module Warbler
|
|
66
66
|
define_files_task
|
67
67
|
define_jar_task
|
68
68
|
define_debug_task
|
69
|
-
define_gemjar_task
|
70
69
|
define_config_task
|
71
70
|
define_pluginize_task
|
72
|
-
define_executable_task
|
73
71
|
define_version_task
|
72
|
+
define_extra_tasks
|
74
73
|
end
|
75
74
|
end
|
76
75
|
|
@@ -81,7 +80,7 @@ module Warbler
|
|
81
80
|
@config.features.each do |feature|
|
82
81
|
t = "#@name:#{feature}"
|
83
82
|
unless Rake.application.lookup(t)
|
84
|
-
|
83
|
+
$stderr.puts "unknown feature `#{feature}', ignoring"
|
85
84
|
next
|
86
85
|
end
|
87
86
|
Rake::Task[t].invoke
|
@@ -141,10 +140,8 @@ module Warbler
|
|
141
140
|
end
|
142
141
|
end
|
143
142
|
|
144
|
-
def
|
145
|
-
|
146
|
-
@config.features << "gemjar"
|
147
|
-
end
|
143
|
+
def define_extra_tasks
|
144
|
+
@config.define_tasks
|
148
145
|
end
|
149
146
|
|
150
147
|
def define_config_task
|
@@ -177,12 +174,6 @@ module Warbler
|
|
177
174
|
end
|
178
175
|
end
|
179
176
|
|
180
|
-
def define_executable_task
|
181
|
-
task "executable" do
|
182
|
-
@config.features << "executable"
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
177
|
def define_version_task
|
187
178
|
task "version" do
|
188
179
|
puts "Warbler version #{Warbler::VERSION}"
|
@@ -1 +1 @@
|
|
1
|
-
ENV['RACK_ENV'] = '<%= (params = config.webxml.context_params; params['rack.env']
|
1
|
+
ENV['RACK_ENV'] = '<%= (params = config.webxml.context_params; params['rack.env']) %>'
|
@@ -0,0 +1 @@
|
|
1
|
+
ENV['GEM_HOME'] ||= $servlet_context.getRealPath('<%= config.gem_path %>')
|
data/lib/warbler/traits.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010 Engine Yard, Inc.
|
2
|
+
# Copyright (c) 2010-2011 Engine Yard, Inc.
|
3
|
+
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
3
4
|
# This source code is available under the MIT license.
|
4
5
|
# See the file LICENSE.txt for details.
|
5
6
|
#++
|
@@ -87,8 +88,9 @@ module Warbler
|
|
87
88
|
if config.gem_path != default_gem_path
|
88
89
|
config.gem_path = "/#{config.gem_path}" unless config.gem_path =~ %r{^/}
|
89
90
|
sub_gem_path = config.gem_path[1..-1]
|
90
|
-
config.pathmaps.
|
91
|
-
|
91
|
+
config.pathmaps.marshal_dump.keys.each do |pm|
|
92
|
+
config.pathmaps.send(pm).each {|p| p.sub!(default_gem_path[1..-1], sub_gem_path)}
|
93
|
+
end
|
92
94
|
config.webxml["gem"]["path"] = config.gem_path if config.webxml
|
93
95
|
end
|
94
96
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
#--
|
2
|
-
# Copyright (c) 2010 Engine Yard, Inc.
|
2
|
+
# Copyright (c) 2010-2011 Engine Yard, Inc.
|
3
|
+
# Copyright (c) 2007-2009 Sun Microsystems, Inc.
|
3
4
|
# This source code is available under the MIT license.
|
4
5
|
# See the file LICENSE.txt for details.
|
5
6
|
#++
|
@@ -12,7 +13,7 @@ module Warbler
|
|
12
13
|
include Trait
|
13
14
|
|
14
15
|
def self.detect?
|
15
|
-
File.exist?("Gemfile")
|
16
|
+
File.exist?(ENV['BUNDLE_GEMFILE'] || "Gemfile")
|
16
17
|
end
|
17
18
|
|
18
19
|
def self.requires?(trait)
|
@@ -31,26 +32,63 @@ module Warbler
|
|
31
32
|
def add_bundler_gems
|
32
33
|
config.gems.clear
|
33
34
|
config.gem_dependencies = false # Bundler takes care of these
|
34
|
-
|
35
|
+
config.bundler = {}
|
36
|
+
ENV['BUNDLE_WITHOUT'] ||= config.bundle_without.join(':')
|
35
37
|
require 'bundler'
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
::Bundler.setup.requested_specs.each do |spec|
|
39
|
+
# Bundler HAX -- fixup bad #loaded_from attribute in fake
|
40
|
+
# bundler gemspec from bundler/source.rb
|
41
|
+
if spec.name == "bundler"
|
42
|
+
full_gem_path = Pathname.new(spec.full_gem_path)
|
43
|
+
tries = 2
|
44
|
+
(full_gem_path = full_gem_path.dirname; tries -= 1) while tries > 0 && !full_gem_path.join('bundler.gemspec').exist?
|
45
|
+
spec.loaded_from = full_gem_path.to_s
|
46
|
+
end
|
47
|
+
|
48
|
+
case spec.source
|
49
|
+
when ::Bundler::Source::Git
|
50
|
+
config.bundler[:git_specs] ||= []
|
51
|
+
config.bundler[:git_specs] << spec
|
52
|
+
when ::Bundler::Source::Path
|
53
|
+
$stderr.puts("warning: Bundler `path' components are not currently supported.",
|
54
|
+
"The `#{spec.full_name}' component was not bundled.",
|
55
|
+
"Your application may fail to boot!")
|
56
|
+
else
|
57
|
+
config.gems << spec
|
58
|
+
end
|
59
|
+
end
|
60
|
+
config.bundler[:gemfile] = ::Bundler.default_gemfile
|
61
|
+
config.bundler[:lockfile] = ::Bundler.default_lockfile
|
62
|
+
config.bundler[:frozen] = ::Bundler.settings[:frozen]
|
63
|
+
config.excludes += [::Bundler.settings[:path]] if ::Bundler.settings[:path]
|
64
|
+
config.init_contents << "#{config.warbler_templates}/bundler.erb"
|
43
65
|
end
|
44
66
|
|
45
67
|
def update_archive(jar)
|
46
68
|
add_bundler_files(jar) if config.bundler
|
47
69
|
end
|
48
70
|
|
49
|
-
# Add Bundler Gemfiles to the archive.
|
71
|
+
# Add Bundler Gemfiles and git repositories to the archive.
|
50
72
|
def add_bundler_files(jar)
|
51
|
-
|
52
|
-
|
53
|
-
|
73
|
+
pwd = Pathname.new(Dir.pwd)
|
74
|
+
gemfile = config.bundler[:gemfile].relative_path_from(pwd).to_s
|
75
|
+
lockfile = config.bundler[:lockfile].relative_path_from(pwd).to_s
|
76
|
+
jar.files[jar.apply_pathmaps(config, gemfile, :application)] = config.bundler[:gemfile].to_s
|
77
|
+
if File.exist?(lockfile)
|
78
|
+
jar.files[jar.apply_pathmaps(config, lockfile, :application)] = config.bundler[:lockfile].to_s
|
79
|
+
end
|
80
|
+
if config.bundler[:git_specs]
|
81
|
+
pathmap = "#{config.relative_gem_path}/bundler/gems/%p"
|
82
|
+
pathmap.sub!(%r{^/+}, '')
|
83
|
+
config.pathmaps.git = [pathmap]
|
84
|
+
config.bundler[:git_specs].each do |spec|
|
85
|
+
full_gem_path = Pathname.new(spec.full_gem_path)
|
86
|
+
FileList["#{full_gem_path.to_s}/**/*"].each do |src|
|
87
|
+
f = Pathname.new(src).relative_path_from(full_gem_path).to_s
|
88
|
+
next if config.gem_excludes && config.gem_excludes.any? {|rx| f =~ rx }
|
89
|
+
jar.files[jar.apply_pathmaps(config, File.join(full_gem_path.basename, f), :git)] = src
|
90
|
+
end
|
91
|
+
end
|
54
92
|
end
|
55
93
|
end
|
56
94
|
end
|