buildr 1.4.4 → 1.4.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +46 -0
- data/Rakefile +0 -1
- data/addon/buildr/bnd.rb +147 -0
- data/addon/buildr/jaxb_xjc.rb +72 -0
- data/addon/buildr/protobuf.rb +14 -1
- data/buildr.gemspec +6 -2
- data/doc/artifacts.textile +6 -0
- data/doc/contributing.textile +3 -0
- data/doc/download.textile +60 -0
- data/doc/index.textile +9 -15
- data/doc/installing.textile +23 -6
- data/doc/mailing_lists.textile +4 -0
- data/doc/more_stuff.textile +333 -6
- data/doc/packaging.textile +187 -1
- data/lib/buildr.rb +8 -1
- data/lib/buildr/clojure.rb +34 -0
- data/lib/buildr/clojure/shell.rb +52 -0
- data/lib/buildr/core.rb +3 -0
- data/lib/buildr/core/#application.rb# +700 -0
- data/lib/buildr/core/application.rb +18 -8
- data/lib/buildr/core/build.rb +2 -2
- data/lib/buildr/core/cc.rb +57 -63
- data/lib/buildr/core/checks.rb +4 -5
- data/lib/buildr/core/doc.rb +3 -1
- data/lib/buildr/core/generate.rb +2 -0
- data/lib/buildr/core/jrebel.rb +42 -0
- data/lib/buildr/core/linux.rb +30 -0
- data/lib/buildr/core/project.rb +9 -8
- data/lib/buildr/core/run.rb +3 -3
- data/lib/buildr/core/shell.rb +29 -90
- data/lib/buildr/core/test.rb +3 -3
- data/lib/buildr/core/transports.rb +5 -5
- data/lib/buildr/core/util.rb +2 -2
- data/lib/buildr/groovy.rb +1 -0
- data/lib/buildr/groovy/compiler.rb +12 -1
- data/lib/buildr/groovy/doc.rb +76 -0
- data/lib/buildr/groovy/shell.rb +24 -15
- data/lib/buildr/ide.rb +1 -1
- data/lib/buildr/ide/idea.rb +527 -141
- data/lib/buildr/java/bdd.rb +18 -13
- data/lib/buildr/java/ecj.rb +1 -3
- data/lib/buildr/java/jtestr_result.rb +295 -0
- data/lib/buildr/java/jtestr_runner.rb.erb +4 -6
- data/lib/buildr/java/packaging.rb +14 -3
- data/lib/buildr/java/pom.rb +6 -2
- data/lib/buildr/java/test_result.rb +15 -243
- data/lib/buildr/java/tests.rb +1 -1
- data/lib/buildr/packaging.rb +2 -1
- data/lib/buildr/packaging/#package.rb.rej# +19 -0
- data/lib/buildr/packaging/archive.rb +13 -3
- data/lib/buildr/packaging/artifact.rb +11 -12
- data/lib/buildr/packaging/tar.rb +4 -1
- data/lib/buildr/packaging/zip.rb +106 -1
- data/lib/buildr/resources/completed.png +0 -0
- data/lib/buildr/resources/failed.png +0 -0
- data/lib/buildr/resources/icons-license.txt +17 -0
- data/lib/buildr/run.rb +7 -14
- data/lib/buildr/scala/#Untitled-2# +7 -0
- data/lib/buildr/scala/bdd.rb +1 -1
- data/lib/buildr/scala/compiler.rb +1 -1
- data/lib/buildr/scala/doc.rb +20 -2
- data/lib/buildr/scala/shell.rb +14 -22
- data/lib/buildr/scala/tests.rb +2 -2
- data/lib/buildr/shell.rb +113 -108
- data/lib/buildr/version.rb +1 -1
- data/rakelib/checks.rake +9 -7
- data/rakelib/doc.rake +10 -0
- data/rakelib/release.rake +9 -0
- data/rakelib/rspec.rake +27 -28
- data/rakelib/setup.rake +1 -1
- data/rakelib/stage.rake +2 -2
- data/spec/addon/bnd_spec.rb +330 -0
- data/spec/addon/jaxb_xjc_spec.rb +125 -0
- data/spec/core/application_spec.rb +1 -1
- data/spec/core/build_spec.rb +7 -7
- data/spec/core/cc_spec.rb +154 -104
- data/spec/core/compile_spec.rb +3 -3
- data/spec/core/project_spec.rb +10 -0
- data/spec/core/run_spec.rb +1 -0
- data/spec/core/shell_spec.rb +146 -0
- data/spec/groovy/doc_spec.rb +65 -0
- data/spec/ide/eclipse_spec.rb +1 -1
- data/spec/ide/idea_spec.rb +1145 -0
- data/spec/java/bdd_spec.rb +3 -3
- data/spec/java/emma_spec.rb +2 -0
- data/spec/java/packaging_spec.rb +40 -11
- data/spec/java/test_coverage_helper.rb +1 -1
- data/spec/packaging/archive_spec.rb +76 -21
- data/spec/packaging/artifact_namespace_spec.rb +1 -1
- data/spec/packaging/artifact_spec.rb +14 -7
- data/spec/sandbox.rb +11 -4
- data/spec/scala/bdd_spec.rb +2 -2
- data/spec/scala/compiler_spec.rb +2 -2
- data/spec/scala/doc_spec.rb +24 -4
- data/spec/scala/scala.rb +2 -2
- data/spec/scala/tests_spec.rb +2 -2
- data/spec/spec_helpers.rb +9 -8
- data/spec/xpath_matchers.rb +121 -0
- metadata +248 -164
- data/lib/buildr/ide/idea.ipr.template +0 -300
- data/lib/buildr/ide/idea7x.ipr.template +0 -290
- data/lib/buildr/ide/idea7x.rb +0 -231
- data/spec/ide/idea7x_spec.rb +0 -96
@@ -160,11 +160,11 @@ module Buildr
|
|
160
160
|
def install
|
161
161
|
invoke
|
162
162
|
in_local_repository = Buildr.repositories.locate(self)
|
163
|
+
if pom && pom != self && classifier.nil?
|
164
|
+
pom.invoke
|
165
|
+
pom.install
|
166
|
+
end
|
163
167
|
if name != in_local_repository
|
164
|
-
if pom && pom != self
|
165
|
-
pom.invoke
|
166
|
-
pom.install
|
167
|
-
end
|
168
168
|
mkpath File.dirname(in_local_repository)
|
169
169
|
cp name, in_local_repository, :preserve => false
|
170
170
|
info "Installed #{name} to #{in_local_repository}"
|
@@ -174,7 +174,7 @@ module Buildr
|
|
174
174
|
def uninstall
|
175
175
|
installed = Buildr.repositories.locate(self)
|
176
176
|
rm installed if File.exist?(installed)
|
177
|
-
pom.uninstall if pom && pom != self
|
177
|
+
pom.uninstall if pom && pom != self && classifier.nil?
|
178
178
|
end
|
179
179
|
|
180
180
|
# :call-seq:
|
@@ -208,7 +208,7 @@ module Buildr
|
|
208
208
|
|
209
209
|
unless task = Buildr.application.lookup(uri+path)
|
210
210
|
deps = [self]
|
211
|
-
deps << pom.upload_task( upload_to ) if pom && pom != self
|
211
|
+
deps << pom.upload_task( upload_to ) if pom && pom != self && classifier.nil?
|
212
212
|
|
213
213
|
task = Rake::Task.define_task uri + path => deps do
|
214
214
|
# Upload artifact relative to base URL, need to create path before uploading.
|
@@ -353,7 +353,7 @@ module Buildr
|
|
353
353
|
if download_needed? task
|
354
354
|
info "Downloading #{to_spec}"
|
355
355
|
download
|
356
|
-
pom.invoke rescue nil if pom && pom != self
|
356
|
+
pom.invoke rescue nil if pom && pom != self && classifier.nil?
|
357
357
|
end
|
358
358
|
end
|
359
359
|
end
|
@@ -869,16 +869,15 @@ module Buildr
|
|
869
869
|
# install artifact('group:id:jar:1.0').from('some_jar.jar')
|
870
870
|
# $ buildr install
|
871
871
|
def install(*args, &block)
|
872
|
-
artifacts = artifacts(args)
|
872
|
+
artifacts = artifacts(args).uniq
|
873
873
|
raise ArgumentError, 'This method can only install artifacts' unless artifacts.all? { |f| f.respond_to?(:to_spec) }
|
874
|
-
all = (artifacts + artifacts.map { |artifact| artifact.pom }).uniq
|
875
874
|
task('install').tap do |install|
|
876
|
-
install.enhance(
|
877
|
-
|
875
|
+
install.enhance(artifacts) do
|
876
|
+
artifacts.each(&:install)
|
878
877
|
end
|
879
878
|
install.enhance &block if block
|
880
879
|
task('uninstall') do
|
881
|
-
|
880
|
+
artifacts.map(&:to_s ).each { |file| rm file if File.exist?(file) }
|
882
881
|
end
|
883
882
|
end
|
884
883
|
end
|
data/lib/buildr/packaging/tar.rb
CHANGED
@@ -95,7 +95,10 @@ module Buildr
|
|
95
95
|
file_map.each do |path, content|
|
96
96
|
if content.respond_to?(:call)
|
97
97
|
tar.add_file(path, options) { |os, opts| content.call os }
|
98
|
-
elsif content.nil?
|
98
|
+
elsif content.nil?
|
99
|
+
elsif File.directory?(content.to_s)
|
100
|
+
stat = File.stat(content.to_s)
|
101
|
+
tar.mkdir(path, options.merge(:mode=>stat.mode, :mtime=>stat.mtime))
|
99
102
|
else
|
100
103
|
File.open content.to_s, 'rb' do |is|
|
101
104
|
tar.add_file path, options.merge(:mode=>is.stat.mode, :mtime=>is.stat.mtime, :uid=>is.stat.uid, :gid=>is.stat.gid) do |os, opts|
|
data/lib/buildr/packaging/zip.rb
CHANGED
@@ -17,17 +17,19 @@
|
|
17
17
|
if RUBY_VERSION >= '1.9.0' # Required to properly load RubyZip under Ruby 1.9
|
18
18
|
$LOADED_FEATURES.unshift 'ftools'
|
19
19
|
require 'fileutils'
|
20
|
+
|
20
21
|
def File.move(source, dest)
|
21
22
|
FileUtils.move source, dest
|
22
23
|
end
|
24
|
+
|
23
25
|
def File.rm_rf(path)
|
24
26
|
FileUtils.rm_rf path
|
25
27
|
end
|
26
28
|
end
|
29
|
+
|
27
30
|
require 'zip/zip'
|
28
31
|
require 'zip/zipfilesystem'
|
29
32
|
|
30
|
-
|
31
33
|
module Zip #:nodoc:
|
32
34
|
|
33
35
|
class ZipCentralDirectory #:nodoc:
|
@@ -69,5 +71,108 @@ module Zip #:nodoc:
|
|
69
71
|
all? { |pattern| content =~ pattern }
|
70
72
|
end
|
71
73
|
|
74
|
+
# Override of write_c_dir_entry to fix comments being set to a fixnum instead of string
|
75
|
+
def write_c_dir_entry(io) #:nodoc:all
|
76
|
+
case @fstype
|
77
|
+
when FSTYPE_UNIX
|
78
|
+
ft = nil
|
79
|
+
case @ftype
|
80
|
+
when :file
|
81
|
+
ft = 010
|
82
|
+
@unix_perms ||= 0644
|
83
|
+
when :directory
|
84
|
+
ft = 004
|
85
|
+
@unix_perms ||= 0755
|
86
|
+
when :symlink
|
87
|
+
ft = 012
|
88
|
+
@unix_perms ||= 0755
|
89
|
+
else
|
90
|
+
raise ZipInternalError, "unknown file type #{self.inspect}"
|
91
|
+
end
|
92
|
+
|
93
|
+
@externalFileAttributes = (ft << 12 | (@unix_perms & 07777)) << 16
|
94
|
+
end
|
95
|
+
|
96
|
+
io <<
|
97
|
+
[0x02014b50,
|
98
|
+
@version, # version of encoding software
|
99
|
+
@fstype, # filesystem type
|
100
|
+
10, # @versionNeededToExtract
|
101
|
+
0, # @gp_flags
|
102
|
+
@compression_method,
|
103
|
+
@time.to_binary_dos_time, # @lastModTime
|
104
|
+
@time.to_binary_dos_date, # @lastModDate
|
105
|
+
@crc,
|
106
|
+
@compressed_size,
|
107
|
+
@size,
|
108
|
+
@name ? @name.length : 0,
|
109
|
+
@extra ? @extra.c_dir_length : 0,
|
110
|
+
@comment ? comment.to_s.length : 0,
|
111
|
+
0, # disk number start
|
112
|
+
@internalFileAttributes, # file type (binary=0, text=1)
|
113
|
+
@externalFileAttributes, # native filesystem attributes
|
114
|
+
@localHeaderOffset,
|
115
|
+
@name,
|
116
|
+
@extra,
|
117
|
+
@comment
|
118
|
+
].pack('VCCvvvvvVVVvvvvvVV')
|
119
|
+
|
120
|
+
io << @name
|
121
|
+
io << (@extra ? @extra.to_c_dir_bin : "")
|
122
|
+
io << @comment
|
123
|
+
end
|
124
|
+
|
125
|
+
# Override write_c_dir_entry to fix comments being set to a fixnum instead of string
|
126
|
+
def write_c_dir_entry(io) #:nodoc:all
|
127
|
+
@comment = "" if @comment.nil? || @comment == -1 # Hack fix @comment being nil or fixnum -1
|
128
|
+
|
129
|
+
case @fstype
|
130
|
+
when FSTYPE_UNIX
|
131
|
+
ft = nil
|
132
|
+
case @ftype
|
133
|
+
when :file
|
134
|
+
ft = 010
|
135
|
+
@unix_perms ||= 0644
|
136
|
+
when :directory
|
137
|
+
ft = 004
|
138
|
+
@unix_perms ||= 0755
|
139
|
+
when :symlink
|
140
|
+
ft = 012
|
141
|
+
@unix_perms ||= 0755
|
142
|
+
else
|
143
|
+
raise ZipInternalError, "unknown file type #{self.inspect}"
|
144
|
+
end
|
145
|
+
|
146
|
+
@externalFileAttributes = (ft << 12 | (@unix_perms & 07777)) << 16
|
147
|
+
end
|
148
|
+
|
149
|
+
io <<
|
150
|
+
[0x02014b50,
|
151
|
+
@version, # version of encoding software
|
152
|
+
@fstype, # filesystem type
|
153
|
+
10, # @versionNeededToExtract
|
154
|
+
0, # @gp_flags
|
155
|
+
@compression_method,
|
156
|
+
@time.to_binary_dos_time, # @lastModTime
|
157
|
+
@time.to_binary_dos_date, # @lastModDate
|
158
|
+
@crc,
|
159
|
+
@compressed_size,
|
160
|
+
@size,
|
161
|
+
@name ? @name.length : 0,
|
162
|
+
@extra ? @extra.c_dir_length : 0,
|
163
|
+
@comment ? @comment.length : 0,
|
164
|
+
0, # disk number start
|
165
|
+
@internalFileAttributes, # file type (binary=0, text=1)
|
166
|
+
@externalFileAttributes, # native filesystem attributes
|
167
|
+
@localHeaderOffset,
|
168
|
+
@name,
|
169
|
+
@extra,
|
170
|
+
@comment].pack('VCCvvvvvVVVvvvvvVV')
|
171
|
+
|
172
|
+
io << @name
|
173
|
+
io << (@extra ? @extra.to_c_dir_bin : "")
|
174
|
+
io << @comment
|
175
|
+
|
176
|
+
end
|
72
177
|
end
|
73
178
|
end
|
Binary file
|
Binary file
|
@@ -0,0 +1,17 @@
|
|
1
|
+
|
2
|
+
MouseRunner.com Green/Red icons
|
3
|
+
-------------------------------
|
4
|
+
|
5
|
+
The graphics contained in the 'completed.png' and 'failed.png' files are
|
6
|
+
licensed under the Creative Commons Attribution-ShareAlike 2.5 License
|
7
|
+
|
8
|
+
Furthermore,
|
9
|
+
You may not claim the works as your own.
|
10
|
+
You must provide a link back to www.MouseRunner.com when using on a website,
|
11
|
+
for commercial purposes, and for applications.
|
12
|
+
|
13
|
+
Visit the address below to learn more about the Creative Commons license.
|
14
|
+
http://creativecommons.org/licenses/by-nc-sa/2.5/legalcode
|
15
|
+
|
16
|
+
|
17
|
+
|
data/lib/buildr/run.rb
CHANGED
@@ -43,15 +43,15 @@ module Buildr
|
|
43
43
|
attr_reader :project
|
44
44
|
|
45
45
|
class << self
|
46
|
-
attr_accessor :
|
46
|
+
attr_accessor :runner_name, :languages
|
47
47
|
|
48
48
|
def specify(options)
|
49
|
-
@
|
49
|
+
@runner_name ||= options[:name]
|
50
50
|
@languages ||= options[:languages]
|
51
51
|
end
|
52
52
|
|
53
53
|
def to_sym
|
54
|
-
@
|
54
|
+
@runner_name || name.split('::').last.downcase.to_sym
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
@@ -128,19 +128,12 @@ module Buildr
|
|
128
128
|
@runner ||= guess_runner
|
129
129
|
end
|
130
130
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
# Check if the underlying runner is an instance of the given class.
|
135
|
-
# If no class is supplied, simply check if runner is defined.
|
136
|
-
def runner?(clazz = nil)
|
137
|
-
begin
|
138
|
-
@runner ||= guess_runner if project.compile.language
|
131
|
+
def runner?
|
132
|
+
@runner ||= begin
|
133
|
+
guess_runner if project.compile.language
|
139
134
|
rescue
|
140
|
-
|
135
|
+
nil
|
141
136
|
end
|
142
|
-
return !@runner.nil? unless clazz
|
143
|
-
@runner.is_a?(clazz) if @runner
|
144
137
|
end
|
145
138
|
|
146
139
|
def run
|
data/lib/buildr/scala/bdd.rb
CHANGED
data/lib/buildr/scala/doc.rb
CHANGED
@@ -61,8 +61,11 @@ module Buildr
|
|
61
61
|
info "Generating Scaladoc for #{project.name}"
|
62
62
|
trace (['scaladoc'] + cmd_args).join(' ')
|
63
63
|
Java.load
|
64
|
-
|
65
|
-
|
64
|
+
begin
|
65
|
+
Java.scala.tools.nsc.ScalaDoc.process(cmd_args.to_java(Java.java.lang.String))
|
66
|
+
rescue => e
|
67
|
+
fail 'Failed to generate Scaladocs, see errors above: ' + e
|
68
|
+
end
|
66
69
|
end
|
67
70
|
end
|
68
71
|
end
|
@@ -115,8 +118,23 @@ module Buildr
|
|
115
118
|
end
|
116
119
|
end
|
117
120
|
|
121
|
+
module Packaging
|
122
|
+
module Scala
|
123
|
+
def package_as_scaladoc_spec(spec) #:nodoc:
|
124
|
+
spec.merge(:type=>:jar, :classifier=>'scaladoc')
|
125
|
+
end
|
126
|
+
|
127
|
+
def package_as_scaladoc(file_name) #:nodoc:
|
128
|
+
ZipTask.define_task(file_name).tap do |zip|
|
129
|
+
zip.include :from=>doc.target
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
118
135
|
class Project
|
119
136
|
include ScaladocDefaults
|
137
|
+
include Packaging::Scala
|
120
138
|
end
|
121
139
|
end
|
122
140
|
|
data/lib/buildr/scala/shell.rb
CHANGED
@@ -20,41 +20,33 @@ require 'buildr/java/commands'
|
|
20
20
|
module Buildr
|
21
21
|
module Scala
|
22
22
|
class ScalaShell < Buildr::Shell::Base
|
23
|
-
include Buildr::
|
23
|
+
include Buildr::JRebel
|
24
24
|
|
25
|
-
|
26
|
-
def lang
|
27
|
-
:scala
|
28
|
-
end
|
25
|
+
specify :name => :scala, :languages => [:scala]
|
29
26
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
end
|
27
|
+
def launch(task)
|
28
|
+
jline = [File.expand_path("lib/jline.jar", Scalac.scala_home)].find_all { |f| File.exist? f }
|
29
|
+
jline = ['jline:jline:jar:0.9.94'] if jline.empty?
|
34
30
|
|
35
|
-
def launch
|
36
31
|
cp = project.compile.dependencies +
|
37
|
-
|
38
|
-
|
32
|
+
Scalac.dependencies +
|
33
|
+
project.test.dependencies +
|
34
|
+
task.classpath
|
39
35
|
|
40
|
-
|
41
|
-
'scala.home' => Scalac.scala_home
|
42
|
-
}
|
36
|
+
java_args = jrebel_args + task.java_args
|
43
37
|
|
44
|
-
|
45
|
-
File.exist? f
|
46
|
-
end
|
38
|
+
props = jrebel_props(project).merge(task.properties)
|
47
39
|
|
48
40
|
Java::Commands.java 'scala.tools.nsc.MainGenericRunner',
|
49
41
|
'-cp', cp.join(File::PATH_SEPARATOR),
|
50
42
|
{
|
51
|
-
:properties => props
|
52
|
-
:classpath =>
|
53
|
-
:java_args =>
|
43
|
+
:properties => props,
|
44
|
+
:classpath => cp + jline,
|
45
|
+
:java_args => java_args
|
54
46
|
}
|
55
47
|
end
|
56
48
|
end
|
57
49
|
end
|
58
50
|
end
|
59
51
|
|
60
|
-
Buildr::
|
52
|
+
Buildr::Shell.providers << Buildr::Scala::ScalaShell
|
data/lib/buildr/scala/tests.rb
CHANGED
@@ -23,7 +23,7 @@ require 'buildr/java/tests'
|
|
23
23
|
module Buildr::Scala
|
24
24
|
# Scala::Check is available when using Scala::Test or Scala::Specs
|
25
25
|
module Check
|
26
|
-
VERSION = '1.
|
26
|
+
VERSION = '1.8'
|
27
27
|
|
28
28
|
class << self
|
29
29
|
def version
|
@@ -60,7 +60,7 @@ module Buildr::Scala
|
|
60
60
|
# * :java_args -- Arguments passed as is to the JVM.
|
61
61
|
class ScalaTest < Buildr::TestFramework::Java
|
62
62
|
|
63
|
-
VERSION = '1.
|
63
|
+
VERSION = '1.3'
|
64
64
|
|
65
65
|
class << self
|
66
66
|
def version
|
data/lib/buildr/shell.rb
CHANGED
@@ -15,49 +15,73 @@
|
|
15
15
|
|
16
16
|
|
17
17
|
module Buildr
|
18
|
-
module
|
18
|
+
module Shell
|
19
|
+
include Extension
|
20
|
+
|
19
21
|
class << self
|
20
|
-
def
|
21
|
-
@providers ||=
|
22
|
-
|
23
|
-
if p.lang == :none
|
24
|
-
@providers[:none] ||= []
|
25
|
-
@providers[:none] << p
|
26
|
-
else
|
27
|
-
@providers[p.lang] = p
|
28
|
-
end
|
22
|
+
def providers
|
23
|
+
@providers ||= []
|
29
24
|
end
|
30
|
-
alias :<< :add
|
31
25
|
|
32
|
-
def
|
33
|
-
|
26
|
+
def select_by_lang(lang)
|
27
|
+
fail 'Unable to define shell task for nil language' if lang.nil?
|
28
|
+
providers.detect { |e| e.languages.nil? ? false : e.languages.include?(lang.to_sym) }
|
29
|
+
end
|
30
|
+
|
31
|
+
alias_method :select, :select_by_lang
|
32
|
+
|
33
|
+
def select_by_name(name)
|
34
|
+
fail 'Unable to define run task for nil' if name.nil?
|
35
|
+
providers.detect { |e| e.to_sym == name.to_sym }
|
34
36
|
end
|
35
37
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
else
|
43
|
-
yield p
|
38
|
+
def define_task(project, name, provider = nil)
|
39
|
+
ShellTask.define_task(name).tap do |t|
|
40
|
+
t.send(:associate_with, project)
|
41
|
+
t.enhance([project.compile]) do |t|
|
42
|
+
# double-enhance to execute the provider last
|
43
|
+
t.enhance { |t| t.run }
|
44
44
|
end
|
45
|
+
t.using provider.to_sym if provider
|
45
46
|
end
|
46
47
|
end
|
47
48
|
end
|
48
|
-
end
|
49
49
|
|
50
|
-
|
50
|
+
first_time do
|
51
|
+
Project.local_task 'shell'
|
52
|
+
|
53
|
+
providers.each { |provider| Project.local_task "shell:#{provider.to_sym}" }
|
54
|
+
end
|
55
|
+
|
56
|
+
before_define(:shell => :compile) do |project|
|
57
|
+
define_task(project, "shell")
|
58
|
+
providers.each { |provider| define_task(project, "shell:#{provider.to_sym}", provider) }
|
59
|
+
end
|
60
|
+
|
61
|
+
after_define(:shell => :compile) do |project|
|
62
|
+
unless project.shell.provider
|
63
|
+
provider = providers.find { |p| p.languages.include? project.compile.language if p.languages }
|
64
|
+
if provider
|
65
|
+
project.shell.using provider.to_sym
|
66
|
+
project.shell.with project.test.compile.dependencies
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Base class for any shell provider.
|
51
72
|
class Base
|
52
|
-
attr_reader :project
|
73
|
+
attr_reader :project # :nodoc:
|
53
74
|
|
54
75
|
class << self
|
55
|
-
|
56
|
-
|
76
|
+
attr_accessor :shell_name, :languages
|
77
|
+
|
78
|
+
def specify(options)
|
79
|
+
@shell_name ||= options[:name]
|
80
|
+
@languages ||= options[:languages]
|
57
81
|
end
|
58
82
|
|
59
83
|
def to_sym
|
60
|
-
@
|
84
|
+
@shell_name || name.split('::').last.downcase.to_sym
|
61
85
|
end
|
62
86
|
end
|
63
87
|
|
@@ -65,116 +89,97 @@ module Buildr
|
|
65
89
|
@project = project
|
66
90
|
end
|
67
91
|
|
68
|
-
def
|
69
|
-
true
|
70
|
-
end
|
71
|
-
|
72
|
-
def launch
|
92
|
+
def launch(task)
|
73
93
|
fail 'Not implemented'
|
74
94
|
end
|
95
|
+
|
75
96
|
end
|
76
97
|
|
77
|
-
|
78
|
-
|
79
|
-
unless @rebel_home
|
80
|
-
@rebel_home = ENV['REBEL_HOME'] || ENV['JREBEL'] || ENV['JREBEL_HOME']
|
98
|
+
class ShellTask < Rake::Task
|
99
|
+
attr_reader :project # :nodoc:
|
81
100
|
|
82
|
-
|
83
|
-
|
84
|
-
end
|
85
|
-
end
|
101
|
+
# Classpath dependencies.
|
102
|
+
attr_accessor :classpath
|
86
103
|
|
87
|
-
|
88
|
-
|
89
|
-
else
|
90
|
-
nil
|
91
|
-
end
|
92
|
-
end
|
104
|
+
# Returns the run options.
|
105
|
+
attr_reader :options
|
93
106
|
|
94
|
-
|
95
|
-
|
96
|
-
[
|
97
|
-
'-noverify',
|
98
|
-
"-javaagent:#{rebel_home}"
|
99
|
-
]
|
100
|
-
else
|
101
|
-
[]
|
102
|
-
end
|
103
|
-
end
|
107
|
+
# Underlying shell provider
|
108
|
+
attr_reader :provider
|
104
109
|
|
105
|
-
def
|
106
|
-
|
110
|
+
def initialize(*args) # :nodoc:
|
111
|
+
super
|
112
|
+
@options = {}
|
113
|
+
@classpath = []
|
107
114
|
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
module ShellExtension
|
112
|
-
include Extension
|
113
115
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
name = p.to_sym
|
123
|
-
|
124
|
-
trace "Defining task #{project.name}:shell:#{name}"
|
116
|
+
# :call-seq:
|
117
|
+
# with(*artifacts) => self
|
118
|
+
#
|
119
|
+
# Adds files and artifacts as classpath dependencies, and returns self.
|
120
|
+
def with(*specs)
|
121
|
+
@classpath |= Buildr.artifacts(specs.flatten).uniq
|
122
|
+
self
|
123
|
+
end
|
125
124
|
|
126
|
-
|
127
|
-
|
125
|
+
# :call-seq:
|
126
|
+
# using(options) => self
|
127
|
+
#
|
128
|
+
# Sets the run options from a hash and returns self.
|
129
|
+
#
|
130
|
+
# For example:
|
131
|
+
# shell.using :properties => {'foo' => 'bar'}
|
132
|
+
# shell.using :bsh
|
133
|
+
def using(*args)
|
134
|
+
if Hash === args.last
|
135
|
+
args.pop.each { |key, value| @options[key.to_sym] = value }
|
136
|
+
end
|
128
137
|
|
129
|
-
|
130
|
-
|
131
|
-
|
138
|
+
until args.empty?
|
139
|
+
new_shell = Shell.select_by_name(args.pop)
|
140
|
+
@provider = new_shell.new(project) unless new_shell.nil?
|
132
141
|
end
|
133
|
-
end
|
134
|
-
end
|
135
142
|
|
136
|
-
|
137
|
-
|
143
|
+
self
|
144
|
+
end
|
138
145
|
|
139
|
-
|
140
|
-
|
146
|
+
def run
|
147
|
+
fail "No shell provider defined in project '#{project.name}' for language '#{project.compile.language.inspect}'" unless provider
|
148
|
+
provider.launch(self)
|
149
|
+
end
|
141
150
|
|
142
|
-
|
143
|
-
|
144
|
-
else
|
145
|
-
project.task :shell do
|
146
|
-
fail "No shell provider defined for language '#{project.compile.language}'"
|
147
|
-
end
|
151
|
+
def prerequisites #:nodoc:
|
152
|
+
super + classpath
|
148
153
|
end
|
149
|
-
end
|
150
154
|
|
151
|
-
|
152
|
-
|
153
|
-
@project = project
|
155
|
+
def java_args
|
156
|
+
@options[:java_args] || (ENV['JAVA_OPTS'] || ENV['JAVA_OPTIONS']).to_s.split
|
154
157
|
end
|
155
158
|
|
156
|
-
def
|
157
|
-
|
158
|
-
@using ||= args.first
|
159
|
-
else
|
160
|
-
@using ||= find_shell_task
|
161
|
-
end
|
159
|
+
def properties
|
160
|
+
@options[:properties] || {}
|
162
161
|
end
|
163
162
|
|
164
163
|
private
|
165
|
-
def
|
166
|
-
|
167
|
-
ShellProviders.providers[lang]
|
164
|
+
def associate_with(project)
|
165
|
+
@project ||= project
|
168
166
|
end
|
167
|
+
|
169
168
|
end
|
170
169
|
|
171
|
-
#
|
172
|
-
|
173
|
-
|
170
|
+
# :call-seq:
|
171
|
+
# shell(&block) => ShellTask
|
172
|
+
#
|
173
|
+
# This method returns the project's shell task. It also accepts a block to be executed
|
174
|
+
# when the shell task is invoked.
|
175
|
+
def shell(&block)
|
176
|
+
task('shell').tap do |t|
|
177
|
+
t.enhance &block if block
|
178
|
+
end
|
174
179
|
end
|
175
180
|
end
|
176
181
|
|
177
182
|
class Project
|
178
|
-
include
|
183
|
+
include Shell
|
179
184
|
end
|
180
185
|
end
|