buildr 1.3.3-java → 1.3.4-java
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/CHANGELOG +76 -0
- data/NOTICE +1 -1
- data/README.rdoc +9 -21
- data/Rakefile +17 -34
- data/_buildr +3 -12
- data/{doc/print.toc.yaml → _jbuildr} +14 -14
- data/addon/buildr/cobertura.rb +5 -219
- data/addon/buildr/drb.rb +281 -0
- data/addon/buildr/emma.rb +5 -221
- data/addon/buildr/nailgun.rb +93 -689
- data/bin/buildr +0 -9
- data/buildr.buildfile +4 -4
- data/buildr.gemspec +27 -21
- data/doc/_layouts/default.html +82 -0
- data/doc/_layouts/preface.html +22 -0
- data/doc/{pages/artifacts.textile → artifacts.textile} +82 -42
- data/doc/{pages/building.textile → building.textile} +89 -47
- data/doc/{pages/contributing.textile → contributing.textile} +53 -45
- data/doc/css/default.css +6 -5
- data/doc/css/print.css +17 -24
- data/doc/css/syntax.css +7 -36
- data/doc/download.textile +68 -0
- data/doc/{pages/extending.textile → extending.textile} +45 -24
- data/doc/{pages/getting_started.textile → getting_started.textile} +158 -88
- data/doc/images/asf-logo.gif +0 -0
- data/doc/images/note.png +0 -0
- data/doc/index.textile +47 -0
- data/doc/{pages/languages.textile → languages.textile} +108 -54
- data/doc/mailing_lists.textile +25 -0
- data/doc/{pages/more_stuff.textile → more_stuff.textile} +152 -73
- data/doc/{pages/packaging.textile → packaging.textile} +181 -96
- data/doc/preface.textile +28 -0
- data/doc/{pages/projects.textile → projects.textile} +55 -40
- data/doc/scripts/buildr-git.rb +364 -264
- data/doc/scripts/gitflow.rb +296 -0
- data/doc/scripts/install-jruby.sh +2 -2
- data/doc/scripts/install-linux.sh +6 -6
- data/doc/scripts/install-osx.sh +2 -2
- data/doc/{pages/settings_profiles.textile → settings_profiles.textile} +83 -45
- data/doc/{pages/testing.textile → testing.textile} +77 -41
- data/lib/buildr.rb +5 -5
- data/lib/buildr/core.rb +2 -0
- data/lib/buildr/core/application.rb +321 -151
- data/lib/buildr/core/build.rb +298 -167
- data/lib/buildr/core/checks.rb +4 -132
- data/lib/buildr/core/common.rb +1 -5
- data/lib/buildr/core/compile.rb +3 -9
- data/lib/buildr/core/environment.rb +12 -3
- data/lib/buildr/core/filter.rb +20 -18
- data/lib/buildr/core/generate.rb +36 -36
- data/lib/buildr/core/help.rb +2 -1
- data/lib/buildr/core/osx.rb +46 -0
- data/lib/buildr/core/progressbar.rb +1 -1
- data/lib/buildr/core/project.rb +7 -34
- data/lib/buildr/core/test.rb +12 -6
- data/lib/buildr/core/transports.rb +13 -11
- data/lib/buildr/core/util.rb +14 -23
- data/lib/buildr/groovy/bdd.rb +3 -2
- data/lib/buildr/groovy/compiler.rb +1 -1
- data/lib/buildr/ide/eclipse.rb +31 -21
- data/lib/buildr/ide/idea.rb +3 -2
- data/lib/buildr/ide/idea7x.rb +6 -4
- data/lib/buildr/java/ant.rb +3 -1
- data/lib/buildr/java/bdd.rb +9 -7
- data/lib/buildr/java/cobertura.rb +243 -0
- data/lib/buildr/java/compiler.rb +5 -4
- data/lib/buildr/java/emma.rb +244 -0
- data/lib/buildr/java/packaging.rb +11 -8
- data/lib/buildr/java/pom.rb +0 -4
- data/lib/buildr/java/rjb.rb +1 -1
- data/lib/buildr/java/test_result.rb +5 -7
- data/lib/buildr/java/tests.rb +17 -11
- data/lib/buildr/packaging.rb +5 -2
- data/lib/buildr/packaging/archive.rb +488 -0
- data/lib/buildr/packaging/artifact.rb +48 -29
- data/lib/buildr/packaging/artifact_namespace.rb +6 -6
- data/lib/buildr/packaging/gems.rb +4 -4
- data/lib/buildr/packaging/package.rb +3 -2
- data/lib/buildr/packaging/tar.rb +85 -3
- data/lib/buildr/packaging/version_requirement.rb +172 -0
- data/lib/buildr/packaging/zip.rb +24 -682
- data/lib/buildr/packaging/ziptask.rb +313 -0
- data/lib/buildr/scala.rb +5 -0
- data/lib/buildr/scala/bdd.rb +100 -0
- data/lib/buildr/scala/compiler.rb +45 -4
- data/lib/buildr/scala/tests.rb +12 -59
- data/rakelib/checks.rake +57 -0
- data/rakelib/doc.rake +58 -68
- data/rakelib/jekylltask.rb +110 -0
- data/rakelib/package.rake +35 -37
- data/rakelib/release.rake +119 -35
- data/rakelib/rspec.rake +29 -39
- data/rakelib/setup.rake +21 -59
- data/rakelib/stage.rake +184 -26
- data/spec/addon/drb_spec.rb +328 -0
- data/spec/core/application_spec.rb +32 -25
- data/spec/core/build_spec.rb +336 -126
- data/spec/core/checks_spec.rb +292 -310
- data/spec/core/common_spec.rb +8 -2
- data/spec/core/compile_spec.rb +17 -1
- data/spec/core/generate_spec.rb +3 -3
- data/spec/core/project_spec.rb +18 -10
- data/spec/core/test_spec.rb +8 -1
- data/spec/core/transport_spec.rb +40 -3
- data/spec/core/util_spec.rb +67 -0
- data/spec/ide/eclipse_spec.rb +96 -28
- data/spec/ide/idea7x_spec.rb +84 -0
- data/spec/java/ant.rb +5 -0
- data/spec/java/bdd_spec.rb +12 -3
- data/spec/{addon → java}/cobertura_spec.rb +6 -6
- data/spec/{addon → java}/emma_spec.rb +5 -6
- data/spec/java/java_spec.rb +12 -2
- data/spec/java/packaging_spec.rb +31 -2
- data/spec/{addon → java}/test_coverage_spec.rb +3 -3
- data/spec/java/tests_spec.rb +5 -0
- data/spec/packaging/archive_spec.rb +11 -1
- data/spec/{core → packaging}/artifact_namespace_spec.rb +10 -2
- data/spec/packaging/artifact_spec.rb +44 -3
- data/spec/packaging/packaging_spec.rb +1 -1
- data/spec/sandbox.rb +17 -14
- data/spec/scala/bdd_spec.rb +150 -0
- data/spec/scala/compiler_spec.rb +27 -0
- data/spec/scala/scala.rb +38 -0
- data/spec/scala/tests_spec.rb +78 -33
- data/spec/spec_helpers.rb +29 -5
- data/spec/version_requirement_spec.rb +6 -0
- metadata +176 -172
- data/DISCLAIMER +0 -7
- data/doc/images/apache-incubator-logo.png +0 -0
- data/doc/pages/download.textile +0 -51
- data/doc/pages/index.textile +0 -42
- data/doc/pages/mailing_lists.textile +0 -17
- data/doc/pages/recipes.textile +0 -103
- data/doc/pages/troubleshooting.textile +0 -103
- data/doc/pages/whats_new.textile +0 -323
- data/doc/print.haml +0 -51
- data/doc/site.haml +0 -56
- data/doc/site.toc.yaml +0 -47
- data/etc/git-svn-authors +0 -16
- data/lib/buildr/core/application_cli.rb +0 -139
- data/rakelib/apache.rake +0 -191
- data/rakelib/changelog.rake +0 -57
- data/rakelib/rubyforge.rake +0 -53
- data/rakelib/scm.rake +0 -49
data/addon/buildr/nailgun.rb
CHANGED
|
@@ -13,103 +13,39 @@
|
|
|
13
13
|
# License for the specific language governing permissions and limitations under
|
|
14
14
|
# the License.
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
|
|
17
17
|
require 'jruby'
|
|
18
|
-
require 'monitor'
|
|
19
|
-
require 'ostruct'
|
|
20
18
|
require 'rbconfig'
|
|
21
|
-
require '
|
|
22
|
-
require 'buildr/
|
|
19
|
+
require 'tmpdir'
|
|
20
|
+
require 'buildr/drb'
|
|
23
21
|
|
|
24
|
-
module Buildr #:nodoc:
|
|
25
22
|
|
|
23
|
+
module Buildr
|
|
24
|
+
|
|
25
|
+
# This addon is provided for fast interaction with a DRb BuildrServer (buildr/drb).
|
|
26
|
+
#
|
|
27
|
+
# This module delegates task invocation to the BuildrServer, it only implements
|
|
28
|
+
# nailgun required logic (server/client).
|
|
29
|
+
#
|
|
30
|
+
# Usage:
|
|
31
|
+
#
|
|
32
|
+
# buildr -r buildr/nailgun nailgun:start
|
|
33
|
+
#
|
|
34
|
+
# Once the server has been started you can invoke tasks using the nailgun client
|
|
35
|
+
# installed on $JRUBY_HOME/tool/nailgun. It's recommended to add this path to
|
|
36
|
+
# your PATH environment variable, so that the ng command is available at any dir.
|
|
37
|
+
#
|
|
38
|
+
# ng build # invoke the build task
|
|
39
|
+
#
|
|
26
40
|
module Nailgun
|
|
27
|
-
|
|
28
41
|
extend self
|
|
29
|
-
|
|
30
|
-
attr_reader :ng
|
|
31
|
-
@ng ||= OpenStruct.new
|
|
32
42
|
|
|
33
43
|
VERSION = '0.7.1'
|
|
34
44
|
NAME = "nailgun-#{VERSION}"
|
|
35
45
|
URL = "http://downloads.sourceforge.net/nailgun/#{NAME}.zip"
|
|
36
46
|
ARTIFACT_SPEC = "com.martiansoftware:nailgun:jar:#{VERSION}"
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
BUILDR_PATHS = [File.expand_path('../', File.dirname(__FILE__)),
|
|
40
|
-
File.expand_path('../../lib', File.dirname(__FILE__))]
|
|
41
|
-
|
|
42
|
-
HELP = <<-HELP.strip.gsub(/ *\n +/, "\n ")
|
|
43
|
-
NailGun is a client, protocol, and server for running Java
|
|
44
|
-
programs from the command line without incurring the JVM
|
|
45
|
-
startup overhead. Nailgun integration is currently available
|
|
46
|
-
only when running Buildr with JRuby.
|
|
47
|
-
|
|
48
|
-
Buildr provides a custom nailgun server, allowing you to
|
|
49
|
-
start a single JVM and let buildr create a queue of runtimes.
|
|
50
|
-
These JRuby runtimes can be cached (indexed by buildfile path)
|
|
51
|
-
and are automatically reloaded when the buildfile has been modified.
|
|
52
|
-
Runtime caching allows you to execute tasks without
|
|
53
|
-
spending time creating the buildr environment. Some nailgun
|
|
54
|
-
tasks have been provided to manage the cached runtimes.
|
|
55
|
-
|
|
56
|
-
To start the buildr server execute the following task:
|
|
57
|
-
|
|
58
|
-
nailgun:start
|
|
59
|
-
|
|
60
|
-
Server output will display a message when it becomes ready, you
|
|
61
|
-
will also see messages when the JRuby runtimes are being created,
|
|
62
|
-
or when a new buildr environment is being loaded on them.
|
|
63
|
-
After the runtime queues have been populated, you can start calling
|
|
64
|
-
buildr as you normally do, by invoking the $NAILGUN_HOME/ng binary:
|
|
65
|
-
|
|
66
|
-
# on another terminal, change directory to a project.
|
|
67
|
-
# if this project is the same nailgun:start was invoked on, it's
|
|
68
|
-
# runtime has been cached, so no loading is performed unless
|
|
69
|
-
# the buildfile has been modified. otherwise the buildfile
|
|
70
|
-
# will be loaded on a previously loaded fresh-buildr runtime
|
|
71
|
-
# and it will be cached.
|
|
72
|
-
cd /some/buildr/project
|
|
73
|
-
ng nailgun:help # display nailgun help
|
|
74
|
-
ng nailgun:tasks # display overview of ng tasks
|
|
75
|
-
ng clean compile # just invoke those two tasks
|
|
76
|
-
|
|
77
|
-
Configuration and Environment Variables.
|
|
78
|
-
|
|
79
|
-
Before starting the server, buildr will check if you have
|
|
80
|
-
nailgun already installed by seeking the nailgun jar under
|
|
81
|
-
|
|
82
|
-
$NAILGUN_HOME
|
|
83
|
-
|
|
84
|
-
You can override this environment variable to tell buildr where
|
|
85
|
-
to find or where to install nailgun. If missing, NAILGUN_HOME
|
|
86
|
-
defaults to the $JRUBY_HOME/tool/nailgun directory.
|
|
87
|
-
|
|
88
|
-
Buildr will also check that the nailgun client binary (ng.exe for
|
|
89
|
-
Windows systems, ng otherwise) is installed on NAILGUN_HOME.
|
|
90
|
-
If no binary is found, buildr will download nailgun and
|
|
91
|
-
compile+install it.
|
|
92
|
-
|
|
93
|
-
The buildr server binds itself to localhost, port 2113. You can
|
|
94
|
-
override this when starting the nailgun server:
|
|
95
|
-
|
|
96
|
-
buildr nailgun:start[4444,127.0.0.1]
|
|
97
|
-
|
|
98
|
-
If you provided custom host/port settings you need
|
|
99
|
-
to tell the nailgun client where to connect:
|
|
100
|
-
|
|
101
|
-
ng --nailgun-server 127.0.0.1 --nailgun-port 4444 nailgun:tasks
|
|
102
|
-
|
|
103
|
-
The buildr server starts a RuntimeFactory responsible for providing
|
|
104
|
-
a pool of preloaded Buildr runtimes ready for task execution.
|
|
105
|
-
You can provide a third argument to the nailgun:start task, to set
|
|
106
|
-
the buildr queue size. You may want to increase this value if you
|
|
107
|
-
need to load many buildfiles on the same server.
|
|
108
|
-
|
|
109
|
-
Execute nailgun:tasks get an overview of available nailgun tasks.
|
|
110
|
-
HELP
|
|
111
|
-
|
|
112
|
-
private
|
|
47
|
+
PORT = DRbApplication::PORT + 2
|
|
48
|
+
ADDON_BIN = File.dirname(__FILE__)
|
|
113
49
|
|
|
114
50
|
# Returns the path to JRUBY_HOME.
|
|
115
51
|
def jruby_home
|
|
@@ -125,152 +61,9 @@ module Buildr #:nodoc:
|
|
|
125
61
|
File.join(Dir.tmpdir, 'nailgun', *paths)
|
|
126
62
|
end
|
|
127
63
|
|
|
128
|
-
file_tasks = lambda do
|
|
129
|
-
|
|
130
|
-
dist_zip = Buildr.download(tmp_path(NAME + '.zip') => URL)
|
|
131
|
-
dist_dir = Buildr.unzip(tmp_path(NAME) => dist_zip)
|
|
132
|
-
|
|
133
|
-
nailgun_jar = file(tmp_path(NAME, NAME, NAME + '.jar'))
|
|
134
|
-
ng.artifact = Buildr.artifact(ARTIFACT_SPEC).from(nailgun_jar)
|
|
135
|
-
unless File.exist?(nailgun_jar.to_s)
|
|
136
|
-
nailgun_jar.enhance [dist_dir]
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
compiled_bin = file(tmp_path(NAME, NAME, 'ng' + Config::CONFIG['EXEEXT']) => dist_dir.target) do |task|
|
|
140
|
-
unless task.to_s.pathmap('%x') == '.exe'
|
|
141
|
-
Dir.chdir(task.to_s.pathmap('%d')) do
|
|
142
|
-
info "Compiling #{task.to_s}"
|
|
143
|
-
system('make', task.to_s.pathmap('%f')) or
|
|
144
|
-
fail "Nailgun binary compilation failed."
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
ng.installed_bin = file(File.expand_path(compiled_bin.to_s.pathmap('%f'), nailgun_home) => compiled_bin) do |task|
|
|
150
|
-
mkpath task.to_s.pathmap('%d'), :verbose => false
|
|
151
|
-
cp compiled_bin.to_s, task.to_s, :verbose => false
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
end # file_tasks
|
|
155
|
-
|
|
156
|
-
server_tasks = lambda do
|
|
157
|
-
|
|
158
|
-
desc 'Start the nailgun server'
|
|
159
|
-
task('start', :port, :iface, :queue_size) do |task, args|
|
|
160
|
-
|
|
161
|
-
[ng.installed_bin, ng.artifact].map(&:invoke)
|
|
162
|
-
|
|
163
|
-
iface = args[:iface].to_s.empty? ? '127.0.0.1' : args[:iface]
|
|
164
|
-
port = args[:port].to_s.empty? ? 2113 : args[:port].to_i
|
|
165
|
-
queue_size = args[:queue_size].to_s.empty? ? 3 : args[:queue_size].to_i
|
|
166
|
-
|
|
167
|
-
fail "Already running on Nailgun server: #{ng.server || ng.nail}" if ng.server || ng.client
|
|
168
|
-
|
|
169
|
-
info 'Booting Buildr nailgun server...'
|
|
170
|
-
top_level = Buildr.application.instance_eval { @top_level_tasks.dup }
|
|
171
|
-
top_level.delete_if { |t| t[/nailgun/] }
|
|
172
|
-
unless top_level.empty?
|
|
173
|
-
raise 'Don\'t specify more targets when starting Nailgun server: #{top_level}'
|
|
174
|
-
end
|
|
175
|
-
ng.server_setup.call
|
|
176
|
-
|
|
177
|
-
factory = RuntimeFactory.new(queue_size, queue_size)
|
|
178
|
-
ng.server = NGServer.new(iface, port, factory)
|
|
179
|
-
|
|
180
|
-
ng.server.start
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
desc 'Show nailgun help'
|
|
184
|
-
task('help') do
|
|
185
|
-
info HELP
|
|
186
|
-
exit(0)
|
|
187
|
-
end
|
|
188
|
-
|
|
189
|
-
desc 'List nailgun tasks'
|
|
190
|
-
task('tasks') do
|
|
191
|
-
task_hash = Buildr.application.instance_variable_get(:@tasks)
|
|
192
|
-
tasks = task_hash.keys.select { |k| k =~ /^nailgun:/ }
|
|
193
|
-
width = [tasks.map { |t| task_hash[t].name_with_args.size }, 20].flatten.max
|
|
194
|
-
tasks.each do |name|
|
|
195
|
-
task = task_hash[name]
|
|
196
|
-
title = task.name_with_args
|
|
197
|
-
comment = task.full_comment
|
|
198
|
-
info comment.empty? ? title : (" %-#{width}s # %s" % [title, comment])
|
|
199
|
-
end
|
|
200
|
-
exit(0)
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
desc 'List currently cached runtimes'
|
|
204
|
-
task('list') do
|
|
205
|
-
if Nailgun.ng.server
|
|
206
|
-
Nailgun.ng.server.cached_stamps.each_pair do |bf, time|
|
|
207
|
-
loaded = Nailgun.ng.server.loaded_times[bf]
|
|
208
|
-
ary = [bf, "Load Timestamp", loaded, "Modification Timestamp", time]
|
|
209
|
-
info("* %s\n %-25s %s\n %-25s %s\n\n" % ary)
|
|
210
|
-
end
|
|
211
|
-
else
|
|
212
|
-
info "Not running on nailgun server"
|
|
213
|
-
end
|
|
214
|
-
exit(0)
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
desc 'Remove all cached runtimes'
|
|
218
|
-
task('clear') do
|
|
219
|
-
if Nailgun.ng.server
|
|
220
|
-
Nailgun.ng.server.cached_runtimes.clear
|
|
221
|
-
Nailgun.ng.server.cached_stamps.clear
|
|
222
|
-
Nailgun.ng.server.loaded_times.clear
|
|
223
|
-
info "Cleared all cached runtimes"
|
|
224
|
-
else
|
|
225
|
-
info "Not running on nailgun server"
|
|
226
|
-
end
|
|
227
|
-
exit(0)
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
desc 'Remove runtime for this buildfile'
|
|
231
|
-
task('delete', :buildfile) do |task, args|
|
|
232
|
-
if Nailgun.ng.server
|
|
233
|
-
if args[:buildfile]
|
|
234
|
-
buildfile = File.expand_path(args[:buildfile])
|
|
235
|
-
else
|
|
236
|
-
buildfile = Buildr.application.buildfile.to_s
|
|
237
|
-
end
|
|
238
|
-
Nailgun.ng.server.cached_runtimes.delete(buildfile)
|
|
239
|
-
Nailgun.ng.server.cached_stamps.delete(buildfile)
|
|
240
|
-
Nailgun.ng.server.loaded_times.delete(buildfile)
|
|
241
|
-
info "Deleted #{buildfile} from runtime cache"
|
|
242
|
-
else
|
|
243
|
-
info "Not running on nailgun server"
|
|
244
|
-
end
|
|
245
|
-
exit(0)
|
|
246
|
-
end
|
|
247
|
-
|
|
248
|
-
end # server_tasks
|
|
249
|
-
|
|
250
|
-
# Load java classes on server side.
|
|
251
|
-
ng.server_setup = lambda do
|
|
252
|
-
|
|
253
|
-
module Util
|
|
254
|
-
include Buildr::Util
|
|
255
|
-
end
|
|
256
|
-
|
|
257
|
-
Util.add_to_sysloader ng.artifact.to_s
|
|
258
|
-
Util.add_to_sysloader File.dirname(__FILE__)
|
|
259
|
-
|
|
260
|
-
class NGClient
|
|
261
|
-
include org.apache.buildr.BuildrNail
|
|
262
|
-
include Client
|
|
263
|
-
end
|
|
264
|
-
|
|
265
|
-
class NGServer < com.martiansoftware.nailgun.NGServer
|
|
266
|
-
include Server
|
|
267
|
-
end
|
|
268
|
-
|
|
269
|
-
end # server_setup
|
|
270
|
-
|
|
271
64
|
module Util
|
|
272
65
|
extend self
|
|
273
|
-
|
|
66
|
+
|
|
274
67
|
def add_to_sysloader(path)
|
|
275
68
|
sysloader = java.lang.ClassLoader.getSystemClassLoader
|
|
276
69
|
add_url_method = java.lang.Class.forName('java.net.URLClassLoader').
|
|
@@ -279,43 +72,6 @@ module Buildr #:nodoc:
|
|
|
279
72
|
add_url_method.invoke(sysloader, [java.io.File.new(path).toURI.toURL].to_java(java.net.URL))
|
|
280
73
|
end
|
|
281
74
|
|
|
282
|
-
def benchmark(action = ['Completed'], verbose = true)
|
|
283
|
-
result = nil
|
|
284
|
-
times = Benchmark.measure do
|
|
285
|
-
result = yield(action)
|
|
286
|
-
end
|
|
287
|
-
if verbose
|
|
288
|
-
real = []
|
|
289
|
-
real << ("%ih" % (times.real / 3600)) if times.real >= 3600
|
|
290
|
-
real << ("%im" % ((times.real / 60) % 60)) if times.real >= 60
|
|
291
|
-
real << ("%.3fs" % (times.real % 60))
|
|
292
|
-
trace "#{[action].flatten.join(' ')} in #{real.join}"
|
|
293
|
-
end
|
|
294
|
-
result
|
|
295
|
-
end
|
|
296
|
-
|
|
297
|
-
def find_file(pwd, candidates, nosearch=false)
|
|
298
|
-
candidates = [candidates].flatten
|
|
299
|
-
buildfile = candidates.find { |c| File.file?(File.expand_path(c, pwd)) }
|
|
300
|
-
return File.expand_path(buildfile, pwd) if buildfile
|
|
301
|
-
return nil if nosearch
|
|
302
|
-
updir = File.dirname(pwd)
|
|
303
|
-
return nil if File.expand_path(updir) == File.expand_path(pwd)
|
|
304
|
-
find_file(updir, candidates)
|
|
305
|
-
end
|
|
306
|
-
|
|
307
|
-
def exception_handling(raise_again = true, show_error = true)
|
|
308
|
-
begin
|
|
309
|
-
yield
|
|
310
|
-
rescue => e
|
|
311
|
-
if show_error
|
|
312
|
-
error "#{e.backtrace.shift}: #{e.message}"
|
|
313
|
-
e.backtrace.each { |i| error "\tfrom #{i}" }
|
|
314
|
-
end
|
|
315
|
-
raise if raise_again
|
|
316
|
-
end
|
|
317
|
-
end
|
|
318
|
-
|
|
319
75
|
# invoke a java constructor
|
|
320
76
|
def ctor(on_class, *args)
|
|
321
77
|
parameters = []
|
|
@@ -341,300 +97,36 @@ module Buildr #:nodoc:
|
|
|
341
97
|
ctor.newInstance(parameters.to_java(java.lang.Object))
|
|
342
98
|
end
|
|
343
99
|
|
|
344
|
-
|
|
345
|
-
raise_error = lambda do |cls, msg, trace|
|
|
346
|
-
raise RuntimeError.new(cls + ": "+ msg.to_s).tap { |e| e.set_backtrace(trace.map(&:to_s)) }
|
|
347
|
-
end
|
|
348
|
-
executor = runtime.object.const_get(:Module).new do
|
|
349
|
-
extend self
|
|
350
|
-
def runtime_exec(*args, &prc)
|
|
351
|
-
define_method(:runtime_exec, &prc)
|
|
352
|
-
runtime_exec(*args)
|
|
353
|
-
rescue => e
|
|
354
|
-
[:error, e.class.name, e.message, e.backtrace]
|
|
355
|
-
end
|
|
356
|
-
end
|
|
357
|
-
result = executor.runtime_exec(*args, &block)
|
|
358
|
-
raise_error.call(*result[1..-1]) if result.kind_of?(Array) && result.first == :error
|
|
359
|
-
result
|
|
360
|
-
end
|
|
361
|
-
|
|
362
|
-
def set_stdio(runtime, dev)
|
|
363
|
-
set_global = lambda do |global, constant, stream|
|
|
364
|
-
runtime.global_variables.set(global, stream)
|
|
365
|
-
runtime.object.send(:remove_const, constant)
|
|
366
|
-
runtime.object.send(:const_set, constant, stream)
|
|
367
|
-
end
|
|
368
|
-
stdin = runtime.global_variables.get('$stdin')
|
|
369
|
-
stdout = runtime.global_variables.get('$stdout')
|
|
370
|
-
stderr = runtime.global_variables.get('$stderr')
|
|
371
|
-
#stdin.close; stdout.close; stderr.close;
|
|
372
|
-
output = Util.ctor(org.jruby.RubyIO, runtime, java.io.OutputStream => dev.out)
|
|
373
|
-
error = Util.ctor(org.jruby.RubyIO, runtime, java.io.OutputStream => dev.err)
|
|
374
|
-
input = Util.ctor(org.jruby.RubyIO, runtime, java.io.InputStream => dev.in)
|
|
375
|
-
#stdin.reopen(input, 'r') # not working on jruby, :(
|
|
376
|
-
#stdout.reopen(output, 'w')
|
|
377
|
-
#stderr.reopen(error, 'w')
|
|
378
|
-
set_global.call('$stdin', 'STDIN', input)
|
|
379
|
-
set_global.call('$stdout', 'STDOUT', output)
|
|
380
|
-
set_global.call('$stderr', 'STDERR', error)
|
|
381
|
-
end
|
|
382
|
-
|
|
383
|
-
end # module Util
|
|
384
|
-
|
|
385
|
-
class FieldAccessor
|
|
386
|
-
def initialize(obj, clazz = nil)
|
|
387
|
-
@obj = obj
|
|
388
|
-
clazz ||= obj.class
|
|
389
|
-
@cls = [clazz.java_class].to_java(java.lang.Class)[0]
|
|
390
|
-
end
|
|
391
|
-
|
|
392
|
-
def [](name)
|
|
393
|
-
field = @cls.getDeclaredField(name.to_s)
|
|
394
|
-
field.setAccessible(true)
|
|
395
|
-
field.get(@obj)
|
|
396
|
-
end
|
|
397
|
-
|
|
398
|
-
def []=(name, value)
|
|
399
|
-
field = @cls.getDeclaredField(name.to_s)
|
|
400
|
-
field.setAccessible(true)
|
|
401
|
-
field.set(@obj, value)
|
|
402
|
-
end
|
|
403
|
-
|
|
404
|
-
def method_missing(name, value =nil)
|
|
405
|
-
if name.to_s =~ /=$/
|
|
406
|
-
self[name.to_s.chomp('=')] = value
|
|
407
|
-
else
|
|
408
|
-
self[name]
|
|
409
|
-
end
|
|
410
|
-
end
|
|
411
|
-
end
|
|
412
|
-
|
|
413
|
-
module NailMethods
|
|
414
|
-
|
|
415
|
-
def self.extend_object(obj)
|
|
416
|
-
super
|
|
417
|
-
(class << obj; self; end).module_eval do
|
|
418
|
-
alias_method :pwd, :getWorkingDirectory
|
|
419
|
-
alias_method :server, :getNGServer
|
|
420
|
-
end
|
|
421
|
-
end
|
|
422
|
-
|
|
423
|
-
def argv
|
|
424
|
-
[command] + args
|
|
425
|
-
end
|
|
426
|
-
|
|
427
|
-
def attach_runtime(runtime)
|
|
428
|
-
runtime.extend RuntimeMixin
|
|
429
|
-
runtime.evalScriptlet %q{
|
|
430
|
-
require 'ostruct'
|
|
431
|
-
module Buildr
|
|
432
|
-
module Nailgun
|
|
433
|
-
extend self
|
|
434
|
-
attr_reader :ng
|
|
435
|
-
@ng = OpenStruct.new
|
|
436
|
-
end
|
|
437
|
-
end
|
|
438
|
-
}
|
|
439
|
-
runtime.Buildr::Nailgun.ng.nail = self
|
|
440
|
-
runtime.load_service.require __FILE__
|
|
441
|
-
runtime
|
|
442
|
-
end
|
|
443
|
-
private :attach_runtime
|
|
444
|
-
|
|
445
|
-
def jruby
|
|
446
|
-
@jruby ||= server.runtime_factory.new_jruby.tap do |runtime|
|
|
447
|
-
attach_runtime(runtime)
|
|
448
|
-
end
|
|
449
|
-
end
|
|
450
|
-
|
|
451
|
-
def buildr
|
|
452
|
-
@buildr ||= server.runtime_factory.new_buildr.tap do |runtime|
|
|
453
|
-
attach_runtime(runtime)
|
|
454
|
-
end
|
|
455
|
-
end
|
|
456
|
-
|
|
457
|
-
def options
|
|
458
|
-
@options ||= OpenStruct.new
|
|
459
|
-
end
|
|
460
|
-
|
|
461
|
-
end # NailMethods
|
|
462
|
-
|
|
463
|
-
module RuntimeMixin
|
|
464
|
-
def Buildr
|
|
465
|
-
object.const_get(:Buildr)
|
|
466
|
-
end
|
|
467
|
-
end
|
|
468
|
-
|
|
469
|
-
module AppMixin
|
|
470
|
-
def load_tasks
|
|
471
|
-
trace "Not loading tasks again"
|
|
472
|
-
end
|
|
473
|
-
|
|
474
|
-
def load_buildfile
|
|
475
|
-
trace "Not loading buildfile again"
|
|
476
|
-
end
|
|
477
|
-
end
|
|
100
|
+
end # Util
|
|
478
101
|
|
|
479
102
|
module Client
|
|
480
103
|
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
def options
|
|
485
|
-
Nailgun.ng.nail.options
|
|
486
|
-
end
|
|
487
|
-
|
|
488
|
-
def rakefiles
|
|
489
|
-
Nailgun.ng.nail.options.rakefiles
|
|
490
|
-
end
|
|
491
|
-
|
|
492
|
-
def requires
|
|
493
|
-
Nailgun.ng.nail.options.requires
|
|
494
|
-
end
|
|
495
|
-
|
|
496
|
-
def help
|
|
497
|
-
super
|
|
498
|
-
puts
|
|
499
|
-
puts 'To get a summary of Nailgun features use'
|
|
500
|
-
puts ' nailgun:help'
|
|
501
|
-
end
|
|
502
|
-
|
|
503
|
-
def version
|
|
504
|
-
puts super
|
|
505
|
-
end
|
|
104
|
+
def main(nail)
|
|
105
|
+
nail.out.println "Connected to #{nail.getNGServer}"
|
|
506
106
|
|
|
507
|
-
|
|
508
|
-
case opt
|
|
509
|
-
when '--help'
|
|
510
|
-
options.exit = :help
|
|
511
|
-
when '--version'
|
|
512
|
-
options.exit = :version
|
|
513
|
-
when '--nosearch'
|
|
514
|
-
options.nosearch = true
|
|
515
|
-
else
|
|
516
|
-
super
|
|
517
|
-
end
|
|
518
|
-
end
|
|
107
|
+
runtime = JRuby.runtime
|
|
519
108
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
109
|
+
stdout = Util.ctor(org.jruby.RubyIO, runtime, java.io.OutputStream => nail.out)
|
|
110
|
+
stderr = Util.ctor(org.jruby.RubyIO, runtime, java.io.OutputStream => nail.err)
|
|
111
|
+
stdin = Util.ctor(org.jruby.RubyIO, runtime, java.io.InputStream => nail.in)
|
|
523
112
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
ARGV.replace nail.argv
|
|
527
|
-
Dir.chdir nail.pwd
|
|
528
|
-
nail.env.each { |k, v| ENV[k.to_s] = v.to_s }
|
|
529
|
-
|
|
530
|
-
Buildr.const_set(:VERSION, sBuildr::VERSION) unless Buildr.const_defined?(:VERSION)
|
|
531
|
-
nail.options.rakefiles = sBuildr::Application::DEFAULT_BUILDFILES.dup
|
|
532
|
-
nail.options.requires = []
|
|
533
|
-
end
|
|
113
|
+
dir = nail.getWorkingDirectory
|
|
114
|
+
argv = [nail.command] + nail.args
|
|
534
115
|
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
nailgun_module::Client.instance_eval(&block)
|
|
541
|
-
end
|
|
542
|
-
end
|
|
543
|
-
|
|
544
|
-
def main(nail)
|
|
545
|
-
nail.extend NailMethods
|
|
546
|
-
info "Got connection from #{nail.pwd}"
|
|
547
|
-
|
|
548
|
-
Client.client(nail.jruby, nail) do
|
|
549
|
-
|
|
550
|
-
parse_options
|
|
551
|
-
if options.exit
|
|
552
|
-
send(options.exit)
|
|
553
|
-
nail.exit(0)
|
|
554
|
-
end
|
|
555
|
-
|
|
556
|
-
if options.project && File.directory?(options.project)
|
|
557
|
-
Dir.chdir(options.project)
|
|
558
|
-
end
|
|
559
|
-
|
|
560
|
-
bf = Util.find_file(Dir.pwd, options.rakefiles, options.nosearch)
|
|
561
|
-
unless bf
|
|
562
|
-
nail.out.println "No buildfile found at #{Dir.pwd}"
|
|
563
|
-
nail.exit(0)
|
|
564
|
-
end
|
|
565
|
-
|
|
566
|
-
rt = nail.server.cached_runtimes[bf]
|
|
567
|
-
old_stamp = nail.server.cached_stamps[bf] || Rake::EARLY
|
|
568
|
-
new_stamp = rt ? rt.Buildr.application.buildfile.timestamp : Rake::EARLY
|
|
569
|
-
|
|
570
|
-
if rt.nil? || new_stamp > old_stamp
|
|
571
|
-
rt = nail.buildr
|
|
572
|
-
app = rt.Buildr.application
|
|
573
|
-
app.instance_variable_set(:@rakefile, bf)
|
|
574
|
-
nail.out.println "Currently nailgun has issues reloading buildfiles, will get fixed in next release."
|
|
575
|
-
nail.out.println "Restart your nailgun server."
|
|
576
|
-
return nail.exit(1)
|
|
577
|
-
else
|
|
578
|
-
app = rt.Buildr.application.extend AppMixin
|
|
579
|
-
app.lookup('buildr:initialize').instance_eval do
|
|
580
|
-
@already_invoked = false
|
|
581
|
-
@actions = []
|
|
582
|
-
end
|
|
583
|
-
app.instance_eval do
|
|
584
|
-
@tasks.values.each do |task|
|
|
585
|
-
is_project = rt.Buildr::Project.instance_variable_get(:@projects).key?(task.name)
|
|
586
|
-
task.instance_variable_set(:@already_invoked, false) unless is_project
|
|
587
|
-
end
|
|
588
|
-
end
|
|
589
|
-
end
|
|
590
|
-
|
|
591
|
-
app.instance_eval do
|
|
592
|
-
@original_dir = nail.pwd
|
|
593
|
-
end
|
|
594
|
-
|
|
595
|
-
Client.client(rt, nail) do
|
|
596
|
-
Util.exception_handling do
|
|
597
|
-
begin
|
|
598
|
-
app.parse_options
|
|
599
|
-
app.collect_tasks
|
|
600
|
-
app.run
|
|
601
|
-
rescue SystemExit => e
|
|
602
|
-
nail.exit(1)
|
|
603
|
-
end
|
|
604
|
-
end
|
|
605
|
-
end
|
|
606
|
-
|
|
607
|
-
nail.server.cache(rt, app.buildfile)
|
|
608
|
-
end
|
|
116
|
+
DRbApplication.remote_run :dir => dir, :argv => argv,
|
|
117
|
+
:in => stdin, :out => stdout, :err => stderr
|
|
118
|
+
rescue => e
|
|
119
|
+
nail.err.println e unless SystemExit === e
|
|
120
|
+
nail.exit 1
|
|
609
121
|
end
|
|
610
122
|
|
|
611
|
-
end #
|
|
123
|
+
end # Client
|
|
612
124
|
|
|
613
125
|
module Server
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
attr_reader :loaded_times
|
|
619
|
-
|
|
620
|
-
def initialize(host = 'localhost', port = 2113, buildr_factory = nil)
|
|
621
|
-
super(java.net.InetAddress.get_by_name(host), port)
|
|
622
|
-
@cached_runtimes = {}
|
|
623
|
-
@cached_stamps = {}
|
|
624
|
-
@loaded_times = {}
|
|
625
|
-
cache(runtime, Buildr.application.buildfile)
|
|
626
|
-
@runtime_factory = buildr_factory
|
|
627
|
-
@host, @port = host, port
|
|
628
|
-
end
|
|
629
|
-
|
|
630
|
-
def cache(runtime, buildfile)
|
|
631
|
-
cached_runtimes[buildfile.to_s] = runtime
|
|
632
|
-
cached_stamps[buildfile.to_s] = buildfile.timestamp
|
|
633
|
-
loaded_times[buildfile.to_s] = Time.now
|
|
634
|
-
end
|
|
635
|
-
|
|
636
|
-
def runtime
|
|
637
|
-
JRuby.runtime.extend RuntimeMixin
|
|
126
|
+
def initialize(host, port)
|
|
127
|
+
@host = host || "*"
|
|
128
|
+
@port = port
|
|
129
|
+
super(host, port)
|
|
638
130
|
end
|
|
639
131
|
|
|
640
132
|
def start
|
|
@@ -642,7 +134,6 @@ module Buildr #:nodoc:
|
|
|
642
134
|
|
|
643
135
|
NGClient::Main.nail = NGClient.new
|
|
644
136
|
self.default_nail_class = NGClient::Main
|
|
645
|
-
runtime_factory.start
|
|
646
137
|
|
|
647
138
|
@thread = java.lang.Thread.new(self)
|
|
648
139
|
@thread.setName(to_s)
|
|
@@ -653,165 +144,78 @@ module Buildr #:nodoc:
|
|
|
653
144
|
end
|
|
654
145
|
|
|
655
146
|
def stop
|
|
656
|
-
runtime_factory.stop
|
|
657
147
|
@thread.kill
|
|
658
148
|
end
|
|
659
149
|
|
|
660
150
|
def to_s
|
|
661
|
-
|
|
151
|
+
version = "Buildr #{Buildr::VERSION} #{RUBY_PLATFORM[/java/] && '(JRuby '+JRUBY_VERSION+')'}"
|
|
152
|
+
self.class.name+'('+[version, @host, @port].join(', ')+')'
|
|
662
153
|
end
|
|
663
|
-
end #
|
|
664
|
-
|
|
665
|
-
class RuntimeFactory
|
|
666
|
-
|
|
667
|
-
attr_accessor :buildrs_size, :jrubys_size
|
|
668
|
-
|
|
669
|
-
def initialize(buildrs_size = 1, jrubys_size = nil)
|
|
670
|
-
# jrubys_size ||= buildrs_size
|
|
671
|
-
@buildrs_size = buildrs_size < 1 ? 1 : buildrs_size
|
|
672
|
-
# @jrubys_size = jrubys_size < 1 ? 1 : jrubys_size
|
|
154
|
+
end # Server
|
|
673
155
|
|
|
674
|
-
|
|
675
|
-
@buildrs_ready = @buildrs.new_cond
|
|
676
|
-
@buildrs_needed = @buildrs.new_cond
|
|
677
|
-
|
|
678
|
-
@buildrs_creators = [].extend(MonitorMixin)
|
|
156
|
+
namespace(:nailgun) do
|
|
679
157
|
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
# @jrubys_needed = @jrubys.new_cond
|
|
683
|
-
|
|
684
|
-
# @jrubys_creators = [].extend(MonitorMixin)
|
|
685
|
-
end
|
|
158
|
+
dist_zip = Buildr.download(tmp_path(NAME + '.zip') => URL)
|
|
159
|
+
dist_dir = Buildr.unzip(tmp_path(NAME) => dist_zip)
|
|
686
160
|
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
end
|
|
161
|
+
nailgun_jar = file(tmp_path(NAME, NAME, NAME + '.jar'))
|
|
162
|
+
nailgun_jar.enhance [dist_dir] unless File.exist?(nailgun_jar.to_s)
|
|
690
163
|
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
164
|
+
attr_reader :artifact
|
|
165
|
+
@artifact = Buildr.artifact(ARTIFACT_SPEC).from(nailgun_jar)
|
|
166
|
+
|
|
167
|
+
compiled_bin = file(tmp_path(NAME, NAME, 'ng' + Config::CONFIG['EXEEXT']) => dist_dir.target) do |task|
|
|
168
|
+
unless task.to_s.pathmap('%x') == '.exe'
|
|
169
|
+
Dir.chdir(task.to_s.pathmap('%d')) do
|
|
170
|
+
info "Compiling #{task.to_s}"
|
|
171
|
+
system('make', task.to_s.pathmap('%f')) or
|
|
172
|
+
fail "Nailgun binary compilation failed."
|
|
173
|
+
end
|
|
174
|
+
end
|
|
694
175
|
end
|
|
695
176
|
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
@buildr_creator = Thread.new { loop { create :buildr } }
|
|
701
|
-
@buildr_creator.priority = 1
|
|
177
|
+
attr_reader :installed_bin
|
|
178
|
+
@installed_bin = file(File.expand_path(compiled_bin.to_s.pathmap('%f'), nailgun_home) => compiled_bin) do |task|
|
|
179
|
+
mkpath task.to_s.pathmap('%d'), :verbose => false
|
|
180
|
+
cp compiled_bin.to_s, task.to_s, :verbose => false
|
|
702
181
|
end
|
|
703
182
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
183
|
+
task('drb-notice') do
|
|
184
|
+
info ''
|
|
185
|
+
info 'Running in JRuby, a nailgun server will be started so that'
|
|
186
|
+
info 'you can use your nailgun client to invoke buildr tasks: '
|
|
187
|
+
info ''
|
|
188
|
+
info ' '+Nailgun.installed_bin.to_s
|
|
189
|
+
info ''
|
|
707
190
|
end
|
|
708
191
|
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
collection.synchronize do
|
|
716
|
-
if collection.empty?
|
|
717
|
-
trace "no #{thing} available, ask to create more"
|
|
718
|
-
needs.broadcast
|
|
719
|
-
trace "should be creating #{thing}"
|
|
720
|
-
ready.wait_while { collection.empty? }
|
|
721
|
-
end
|
|
722
|
-
trace "Getting my #{thing}"
|
|
723
|
-
result = collection.shift
|
|
724
|
-
trace "would need more #{thing}s"
|
|
725
|
-
needs.broadcast
|
|
726
|
-
trace "got my #{thing}: #{result.inspect}"
|
|
727
|
-
Thread.pass
|
|
728
|
-
end
|
|
729
|
-
trace "returning #{result.inspect}"
|
|
730
|
-
result
|
|
192
|
+
task('drb' => ['drb-notice', 'start'])
|
|
193
|
+
|
|
194
|
+
desc 'Start the nailgun server'
|
|
195
|
+
task('start' => [installed_bin, 'setup']) do |task|
|
|
196
|
+
server = NGServer.new(nil, PORT)
|
|
197
|
+
server.start
|
|
731
198
|
end
|
|
732
199
|
|
|
733
|
-
|
|
734
|
-
Util
|
|
735
|
-
|
|
736
|
-
collection = instance_variable_get("@#{thing}s")
|
|
737
|
-
ready = instance_variable_get("@#{thing}s_ready")
|
|
738
|
-
needs = instance_variable_get("@#{thing}s_needed")
|
|
739
|
-
unless creator
|
|
740
|
-
collection.synchronize do
|
|
741
|
-
trace "awake those wanting a #{thing}"
|
|
742
|
-
ready.broadcast
|
|
743
|
-
Thread.pass
|
|
744
|
-
trace "wait until more #{thing}s are needed"
|
|
745
|
-
# needs.wait(1); return
|
|
746
|
-
needs.wait_until { creator = needed(thing) }
|
|
747
|
-
end
|
|
748
|
-
end
|
|
749
|
-
trace "About to create #{thing} # #{creator}"
|
|
750
|
-
method = "create_#{thing}"
|
|
751
|
-
creators = instance_variable_get("@#{thing}s_creators")
|
|
752
|
-
trace "registering creator for #{thing} #{creator}"
|
|
753
|
-
creators.synchronize { creators << creator }
|
|
754
|
-
result = send(method, creator, *args, &block)
|
|
755
|
-
trace "created #{thing}[#{creator}] => #{result.inspect}"
|
|
756
|
-
creators.synchronize do
|
|
757
|
-
trace "unregistering creator for #{thing} #{creator}"
|
|
758
|
-
creators.delete(creator)
|
|
759
|
-
collection.synchronize do
|
|
760
|
-
trace "adding object on queue for #{thing} #{creator}"
|
|
761
|
-
collection << result
|
|
762
|
-
end
|
|
763
|
-
end
|
|
200
|
+
task('setup' => artifact) do
|
|
201
|
+
module Util
|
|
202
|
+
include Buildr::Util
|
|
764
203
|
end
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
count = collection.size
|
|
773
|
-
if count < size
|
|
774
|
-
count += creators.synchronize { creators.size }
|
|
775
|
-
end
|
|
776
|
-
count if count < size
|
|
204
|
+
|
|
205
|
+
Util.add_to_sysloader artifact.to_s
|
|
206
|
+
Util.add_to_sysloader ADDON_BIN
|
|
207
|
+
|
|
208
|
+
class NGClient
|
|
209
|
+
include org.apache.buildr.BuildrNail
|
|
210
|
+
include Client
|
|
777
211
|
end
|
|
212
|
+
|
|
213
|
+
class NGServer < com.martiansoftware.nailgun.NGServer
|
|
214
|
+
include Server
|
|
215
|
+
end
|
|
778
216
|
end
|
|
779
217
|
|
|
780
|
-
|
|
781
|
-
Util.exception_handling do
|
|
782
|
-
trace "Creating jruby[#{creator}]"
|
|
783
|
-
Util.benchmark do |header|
|
|
784
|
-
cfg = org.jruby.RubyInstanceConfig.new
|
|
785
|
-
yield cfg if block_given?
|
|
786
|
-
jruby = org.jruby.Ruby.newInstance(cfg)
|
|
787
|
-
jruby.load_service.load_path.unshift *BUILDR_PATHS
|
|
788
|
-
header.replace ["Created jruby[#{creator}]", jruby]
|
|
789
|
-
jruby
|
|
790
|
-
end
|
|
791
|
-
end
|
|
792
|
-
end
|
|
793
|
-
|
|
794
|
-
def create_buildr(creator)
|
|
795
|
-
Util.exception_handling do
|
|
796
|
-
trace "Obtaining jruby to load buildr[#{creator}] on it"
|
|
797
|
-
jruby = new_jruby
|
|
798
|
-
trace "Loading buildr[#{creator}] on #{jruby} ..."
|
|
799
|
-
Util.benchmark ["Loaded buildr[#{creator}] on #{jruby}"] do
|
|
800
|
-
load_service = jruby.load_service
|
|
801
|
-
load_service.require 'rubygems'
|
|
802
|
-
load_service.require 'buildr'
|
|
803
|
-
end
|
|
804
|
-
jruby
|
|
805
|
-
end
|
|
806
|
-
end
|
|
218
|
+
end # ng_tasks
|
|
807
219
|
|
|
808
|
-
end # RuntimeFactory
|
|
809
|
-
|
|
810
|
-
if Buildr.respond_to?(:application) && ng.nail.nil?
|
|
811
|
-
Buildr.application.in_namespace(:nailgun, &file_tasks)
|
|
812
|
-
Buildr.application.in_namespace(:nailgun, &server_tasks)
|
|
813
|
-
end
|
|
814
|
-
|
|
815
220
|
end # module Nailgun
|
|
816
|
-
|
|
817
221
|
end
|