buildr 1.3.5-x86-mswin32 → 1.4.0-x86-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +153 -8
- data/README.rdoc +1 -1
- data/addon/buildr/antlr.rb +5 -5
- data/addon/buildr/drb.rb +18 -18
- data/addon/buildr/hibernate.rb +18 -14
- data/addon/buildr/javacc.rb +4 -4
- data/addon/buildr/jetty.rb +5 -5
- data/addon/buildr/nailgun.rb +23 -23
- data/addon/buildr/openjpa.rb +1 -1
- data/addon/buildr/org/apache/buildr/BuildrNail$Main.class +0 -0
- data/addon/buildr/org/apache/buildr/BuildrNail.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$1.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
- data/addon/buildr/protobuf.rb +75 -0
- data/addon/buildr/xmlbeans.rb +5 -5
- data/buildr.buildfile +2 -2
- data/buildr.gemspec +8 -7
- data/doc/_layouts/default.html +2 -2
- data/doc/artifacts.textile +4 -4
- data/doc/building.textile +35 -3
- data/doc/contributing.textile +5 -0
- data/doc/download.textile +16 -5
- data/doc/extending.textile +38 -12
- data/doc/installing.textile +6 -5
- data/doc/languages.textile +182 -42
- data/doc/more_stuff.textile +2 -2
- data/doc/packaging.textile +14 -15
- data/doc/projects.textile +7 -2
- data/doc/quick_start.textile +4 -4
- data/doc/scripts/buildr-git.rb +63 -63
- data/doc/scripts/gitflow.rb +21 -21
- data/doc/settings_profiles.textile +9 -2
- data/doc/testing.textile +16 -5
- data/etc/KEYS +38 -0
- data/lib/buildr.rb +1 -1
- data/lib/buildr/core.rb +1 -0
- data/lib/buildr/core/application.rb +33 -27
- data/lib/buildr/core/build.rb +41 -28
- data/lib/buildr/core/cc.rb +172 -0
- data/lib/buildr/core/checks.rb +1 -1
- data/lib/buildr/core/common.rb +7 -6
- data/lib/buildr/core/compile.rb +7 -8
- data/lib/buildr/core/doc.rb +263 -0
- data/lib/buildr/core/environment.rb +6 -6
- data/lib/buildr/core/filter.rb +77 -35
- data/lib/buildr/core/generate.rb +7 -7
- data/lib/buildr/core/help.rb +1 -1
- data/lib/buildr/core/osx.rb +6 -6
- data/lib/buildr/core/progressbar.rb +4 -4
- data/lib/buildr/core/project.rb +144 -36
- data/lib/buildr/core/shell.rb +34 -34
- data/lib/buildr/core/test.rb +89 -20
- data/lib/buildr/core/transports.rb +8 -7
- data/lib/buildr/core/util.rb +77 -23
- data/lib/buildr/groovy/bdd.rb +5 -5
- data/lib/buildr/groovy/compiler.rb +19 -15
- data/lib/buildr/groovy/shell.rb +6 -6
- data/lib/buildr/ide/eclipse.rb +148 -75
- data/lib/buildr/ide/eclipse/java.rb +3 -3
- data/lib/buildr/ide/eclipse/plugin.rb +8 -5
- data/lib/buildr/ide/eclipse/scala.rb +4 -2
- data/lib/buildr/ide/idea.rb +2 -2
- data/lib/buildr/ide/idea7x.rb +23 -4
- data/lib/buildr/java.rb +1 -0
- data/lib/buildr/java/ant.rb +4 -4
- data/lib/buildr/java/bdd.rb +51 -54
- data/lib/buildr/java/cobertura.rb +57 -35
- data/lib/buildr/java/commands.rb +14 -5
- data/lib/buildr/java/compiler.rb +3 -217
- data/lib/buildr/java/deprecated.rb +4 -4
- data/lib/buildr/java/doc.rb +70 -0
- data/lib/buildr/java/emma.rb +22 -22
- data/lib/buildr/java/jruby.rb +4 -4
- data/lib/buildr/java/jtestr_runner.rb.erb +27 -25
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.class +0 -0
- data/lib/buildr/java/org/apache/buildr/JavaTestFilter.java +8 -3
- data/lib/buildr/java/packaging.rb +30 -29
- data/lib/buildr/java/pom.rb +4 -4
- data/lib/buildr/java/rjb.rb +6 -6
- data/lib/buildr/java/test_result.rb +61 -85
- data/lib/buildr/java/tests.rb +44 -27
- data/lib/buildr/java/version_requirement.rb +8 -8
- data/lib/buildr/packaging/archive.rb +55 -22
- data/lib/buildr/packaging/artifact.rb +75 -36
- data/lib/buildr/packaging/artifact_namespace.rb +90 -78
- data/lib/buildr/packaging/artifact_search.rb +5 -5
- data/lib/buildr/packaging/gems.rb +11 -7
- data/lib/buildr/packaging/package.rb +10 -7
- data/lib/buildr/packaging/tar.rb +14 -14
- data/lib/buildr/packaging/version_requirement.rb +30 -10
- data/lib/buildr/packaging/ziptask.rb +51 -13
- data/lib/buildr/scala.rb +1 -0
- data/lib/buildr/scala/bdd.rb +25 -20
- data/lib/buildr/scala/compiler.rb +87 -40
- data/lib/buildr/scala/doc.rb +106 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.class +0 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.java +57 -0
- data/lib/buildr/scala/shell.rb +14 -9
- data/lib/buildr/scala/tests.rb +33 -26
- data/lib/buildr/shell.rb +33 -33
- data/rakelib/all-in-one.rake +113 -0
- data/rakelib/checks.rake +1 -1
- data/rakelib/doc.rake +7 -0
- data/rakelib/package.rake +1 -1
- data/rakelib/release.rake +9 -6
- data/rakelib/rspec.rake +26 -7
- data/rakelib/setup.rake +15 -3
- data/rakelib/stage.rake +18 -11
- data/spec/addon/drb_spec.rb +25 -25
- data/spec/core/application_spec.rb +111 -21
- data/spec/core/build_spec.rb +16 -15
- data/spec/core/cc_spec.rb +174 -0
- data/spec/core/checks_spec.rb +34 -34
- data/spec/core/common_spec.rb +51 -5
- data/spec/core/compile_spec.rb +89 -14
- data/spec/core/extension_spec.rb +127 -19
- data/spec/core/generate_spec.rb +2 -2
- data/spec/core/project_spec.rb +10 -10
- data/spec/core/test_spec.rb +144 -35
- data/spec/core/transport_spec.rb +8 -8
- data/spec/core/util_spec.rb +63 -5
- data/spec/groovy/bdd_spec.rb +5 -5
- data/spec/groovy/compiler_spec.rb +29 -18
- data/spec/ide/eclipse_spec.rb +185 -9
- data/spec/ide/idea7x_spec.rb +22 -10
- data/spec/java/ant_spec.rb +9 -5
- data/spec/java/bdd_spec.rb +29 -37
- data/spec/java/cobertura_spec.rb +12 -12
- data/spec/java/commands_spec.rb +34 -0
- data/spec/java/compiler_spec.rb +53 -53
- data/spec/java/emma_spec.rb +11 -11
- data/spec/java/java_spec.rb +10 -10
- data/spec/java/packaging_spec.rb +67 -20
- data/spec/java/test_coverage_helper.rb +18 -18
- data/spec/java/tests_spec.rb +13 -9
- data/spec/packaging/archive_spec.rb +187 -20
- data/spec/packaging/artifact_namespace_spec.rb +172 -83
- data/spec/packaging/artifact_spec.rb +83 -18
- data/spec/packaging/packaging_spec.rb +41 -14
- data/spec/sandbox.rb +23 -12
- data/spec/scala/bdd_spec.rb +13 -8
- data/spec/scala/compiler_spec.rb +18 -13
- data/spec/scala/scala.rb +3 -3
- data/spec/scala/tests_spec.rb +46 -24
- data/spec/spec_helpers.rb +28 -10
- data/spec/version_requirement_spec.rb +25 -11
- metadata +149 -133
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner$.class +0 -0
- data/lib/buildr/scala/org/apache/buildr/SpecsSingletonRunner.scala +0 -35
- data/rakelib/stage.rake~ +0 -213
@@ -18,7 +18,7 @@ require 'buildr/packaging/version_requirement'
|
|
18
18
|
|
19
19
|
|
20
20
|
module Buildr
|
21
|
-
|
21
|
+
|
22
22
|
# An ArtifactNamespace is a hierarchical dictionary used to manage ArtifactRequirements.
|
23
23
|
# It can be used to have different artifact versions per project
|
24
24
|
# or to allow users to select a version for addons or modules.
|
@@ -31,27 +31,27 @@ module Buildr
|
|
31
31
|
# The method_missing method for instances provides some syntactic sugar to these.
|
32
32
|
# See the following examples, and the methods for ArtifactRequirement.
|
33
33
|
#
|
34
|
-
# = Avoiding constant
|
34
|
+
# = Avoiding constant pollution on buildfile
|
35
35
|
#
|
36
|
-
# Each project has its own ArtifactNamespace inheriting the one from the
|
36
|
+
# Each project has its own ArtifactNamespace inheriting the one from the
|
37
37
|
# parent project up to the root namespace.
|
38
|
-
#
|
39
|
-
# Consider the following snippet, as project grows, each subproject
|
40
|
-
# may need
|
38
|
+
#
|
39
|
+
# Consider the following snippet, as project grows, each subproject
|
40
|
+
# may need different artifact combinations and/or versions. Assigning
|
41
41
|
# artifact specifications to constants can make it painful to maintain
|
42
42
|
# their references even if using structs/hashes.
|
43
43
|
#
|
44
44
|
# -- buildfile --
|
45
45
|
# SPRING = 'org.springframework:spring:jar:2.5'
|
46
46
|
# SPRING_OLD = 'org.springframework:spring:jar:1.0'
|
47
|
-
# LOGGING = ['comons-logging:commons-logging:jar:1.1.1',
|
47
|
+
# LOGGING = ['comons-logging:commons-logging:jar:1.1.1',
|
48
48
|
# 'log4j:log4j:jar:1.2.15']
|
49
49
|
# WL_LOGGING = artifact('bea:wlcommons-logging:jar:8.1').from('path/to/wlcommons-logging.jar')
|
50
|
-
# LOGGING_WEBLOGIC = ['comons-logging:commons-logging:jar:1.1.1',
|
50
|
+
# LOGGING_WEBLOGIC = ['comons-logging:commons-logging:jar:1.1.1',
|
51
51
|
# WL_LOGGING]
|
52
52
|
# COMMONS = struct :collections => 'commons-collection:commons-collection:jar:3.1',
|
53
53
|
# :net => 'commons-net:commons-net:jar:1.4.0'
|
54
|
-
#
|
54
|
+
#
|
55
55
|
# define 'example1' do
|
56
56
|
# define 'one' do
|
57
57
|
# compile.with SPRING, LOGGING_WEBLOGIC, COMMONS
|
@@ -64,11 +64,11 @@ module Buildr
|
|
64
64
|
# end
|
65
65
|
# end
|
66
66
|
#
|
67
|
-
#
|
67
|
+
#
|
68
68
|
# With ArtifactNamespace you can do some more advanced stuff, the following
|
69
69
|
# annotated snipped could still be reduced if default artifact definitions were
|
70
|
-
# loaded from yaml file (see section
|
71
|
-
#
|
70
|
+
# loaded from yaml file (see section below and ArtifactNamespace.load).
|
71
|
+
#
|
72
72
|
# -- buildfile --
|
73
73
|
# artifact_ns do |ns| # the current namespace (root if called outside a project)
|
74
74
|
# # default artifacts
|
@@ -83,15 +83,15 @@ module Buildr
|
|
83
83
|
# :logging => 'comons-logging:commons-logging:jar:1.1.1'
|
84
84
|
#
|
85
85
|
#
|
86
|
-
# # When a child namespace asks for the :log artifact,
|
86
|
+
# # When a child namespace asks for the :log artifact,
|
87
87
|
# # these artifacts will be searched starting from the :current namespace.
|
88
88
|
# ns.virtual :log, :logger, :commons_logging
|
89
89
|
# end
|
90
|
-
#
|
90
|
+
#
|
91
91
|
# artifact_ns('example2:one') do |ns| # namespace for the one subproject
|
92
92
|
# ns.logger = artifact('bea:wlcommons-logging:jar:8.1').from('path/to/wlcommons-logging.jar')
|
93
93
|
# end
|
94
|
-
# artifact_ns('example2:two') do |ns|
|
94
|
+
# artifact_ns('example2:two') do |ns|
|
95
95
|
# ns.spring = '1.0' # for project two use an older spring version (just for an example)
|
96
96
|
# end
|
97
97
|
# artifact_ns('example2:three').commons_collections = 2.2'
|
@@ -100,8 +100,8 @@ module Buildr
|
|
100
100
|
# ns.ns(:compilation).use :commons_logging, :beanutils, :spring # compile time dependencies
|
101
101
|
# ns.ns(:testing).use :log, :beanutils, 'cglib:cglib-nodep:jar:2.1.3' # run time dependencies
|
102
102
|
# end
|
103
|
-
#
|
104
|
-
# define 'example2' do
|
103
|
+
#
|
104
|
+
# define 'example2' do
|
105
105
|
# define 'one' do
|
106
106
|
# compile.with :spring, :log, :commons # uses weblogic logging
|
107
107
|
# end
|
@@ -130,14 +130,14 @@ module Buildr
|
|
130
130
|
# An example usage is documented on the ArtifactNamespace.load method.
|
131
131
|
#
|
132
132
|
# = For addon/plugin writers & Customizing artifact versions
|
133
|
-
#
|
133
|
+
#
|
134
134
|
# Sometimes users would need to change the default artifact versions used by some
|
135
135
|
# module, for example, the XMLBeans compiler needs this, because of compatibility
|
136
136
|
# issues. Another example would be to select the groovy version to use on all our
|
137
137
|
# projects so that Buildr modules requiring groovy jars can use user prefered versions.
|
138
138
|
#
|
139
|
-
# To meet this goal, an ArtifactNamespace allows to specify
|
140
|
-
# In fact the only
|
139
|
+
# To meet this goal, an ArtifactNamespace allows to specify ArtifactRequirement objects.
|
140
|
+
# In fact the only difference with the examples you have already seen is that requirements
|
141
141
|
# have an associated VersionRequirement, so that each time a user tries to select a version,
|
142
142
|
# buildr checks if it satisfies the requirements.
|
143
143
|
#
|
@@ -145,14 +145,14 @@ module Buildr
|
|
145
145
|
# syntactic sugar is provided by ArtifactNamespace#method_missing.
|
146
146
|
#
|
147
147
|
# The following example is taken from the XMLBeans compiler module.
|
148
|
-
# And illustrates how addon authors should specify their requirements,
|
148
|
+
# And illustrates how addon authors should specify their requirements,
|
149
149
|
# provide default versions, and document the namespace for users to customize.
|
150
|
-
#
|
150
|
+
#
|
151
151
|
# module Buildr::XMLBeans
|
152
152
|
#
|
153
153
|
# # You need to document this constant, giving users some hints
|
154
|
-
# # about when are (maybe some of) these artifacts used. I mean,
|
155
|
-
# # some modules, add jars to the Buildr classpath when its file
|
154
|
+
# # about when are (maybe some of) these artifacts used. I mean,
|
155
|
+
# # some modules, add jars to the Buildr classpath when its file
|
156
156
|
# # is required, you would need to tell your users, so that they
|
157
157
|
# # can open the namespace and specify their defaults. Of course
|
158
158
|
# # when the requirements are defined, buildr checks if any compatible
|
@@ -174,29 +174,29 @@ module Buildr
|
|
174
174
|
# ns.need " some_name -> ar:ti:fact:3.2.5 -> ( >2 & <4)"
|
175
175
|
#
|
176
176
|
# # As you can see it's just an artifact spec, prefixed with
|
177
|
-
# # ' some_name -> ', this means users can use that name to
|
177
|
+
# # ' some_name -> ', this means users can use that name to
|
178
178
|
# # reference the requirement, also this string has a VersionRequirement
|
179
179
|
# # just after another ->.
|
180
180
|
# end
|
181
181
|
#
|
182
|
-
# # The REQUIRES constant is an ArtifactNamespace instance,
|
183
|
-
# # that means we can use it directly. Note that calling
|
182
|
+
# # The REQUIRES constant is an ArtifactNamespace instance,
|
183
|
+
# # that means we can use it directly. Note that calling
|
184
184
|
# # Buildr.artifact_ns would lead to the currently executing context,
|
185
185
|
# # not the one for this module.
|
186
186
|
# def use
|
187
187
|
# # test if user specified his own version, if so, we could perform some
|
188
188
|
# # functionallity based on this.
|
189
|
-
# REQUIRES.some_name.selected? # => false
|
190
|
-
#
|
189
|
+
# REQUIRES.some_name.selected? # => false
|
190
|
+
#
|
191
191
|
# REQUIRES.some_name.satisfied_by?('1.5') # => false
|
192
192
|
# puts REQUIRES.some_name.requirement # => ( >2 & <4 )
|
193
193
|
#
|
194
194
|
# REQUIRES.artifacts # get the Artifact tasks
|
195
195
|
# end
|
196
196
|
#
|
197
|
-
# end
|
197
|
+
# end
|
198
198
|
#
|
199
|
-
# A more advanced example using ArtifactRequirement listeners is included
|
199
|
+
# A more advanced example using ArtifactRequirement listeners is included
|
200
200
|
# in the artifact_namespace_spec.rb description for 'Extension using ArtifactNamespace'
|
201
201
|
# That's it for addon writers, now, users can select their prefered version with
|
202
202
|
# something like:
|
@@ -210,8 +210,8 @@ module Buildr
|
|
210
210
|
#
|
211
211
|
# Buildr::XMLBeans::REQUIRES.parent = :current
|
212
212
|
#
|
213
|
-
# Now, provided that the compiler does not caches its artifacts, it will
|
214
|
-
# select the correct version. (See the first section for how to select per project
|
213
|
+
# Now, provided that the compiler does not caches its artifacts, it will
|
214
|
+
# select the correct version. (See the first section for how to select per project
|
215
215
|
# artifacts).
|
216
216
|
#
|
217
217
|
#
|
@@ -224,7 +224,7 @@ module Buildr
|
|
224
224
|
const_set(:ROOT, new('root'))
|
225
225
|
end
|
226
226
|
|
227
|
-
# Populate namespaces from a hash of hashes.
|
227
|
+
# Populate namespaces from a hash of hashes.
|
228
228
|
# The following example uses the profiles yaml to achieve this.
|
229
229
|
#
|
230
230
|
# -- profiles.yaml --
|
@@ -235,8 +235,8 @@ module Buildr
|
|
235
235
|
# groovy: org.codehaus.groovy:groovy:jar:1.5.4
|
236
236
|
# logging: # define a named group
|
237
237
|
# - log4j:log4j:jar:1.2.15
|
238
|
-
# - commons-logging:commons-logging:1.1.1
|
239
|
-
#
|
238
|
+
# - commons-logging:commons-logging:jar:1.1.1
|
239
|
+
#
|
240
240
|
# # open Buildr::XMLBeans namespace
|
241
241
|
# Buildr::XMLBeans:
|
242
242
|
# xmlbeans: 2.2
|
@@ -246,11 +246,11 @@ module Buildr
|
|
246
246
|
# spring: org.springframework:spring:jar:1.0
|
247
247
|
#
|
248
248
|
# -- buildfile --
|
249
|
-
# ArtifactNamespace.load(Buildr.profile['artifacts'])
|
249
|
+
# ArtifactNamespace.load(Buildr.settings.profile['artifacts'])
|
250
250
|
def load(namespaces = {})
|
251
251
|
namespaces.each_pair { |name, uses| instance(name).use(uses) }
|
252
252
|
end
|
253
|
-
|
253
|
+
|
254
254
|
# :call-seq:
|
255
255
|
# ArtifactNamespace.instance { |current_ns| ... } -> current_ns
|
256
256
|
# ArtifactNamespace.instance(name) { |ns| ... } -> ns
|
@@ -274,17 +274,20 @@ module Buildr
|
|
274
274
|
end
|
275
275
|
end
|
276
276
|
name = name.to_s
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
277
|
+
if name.size == 0
|
278
|
+
instance = ROOT
|
279
|
+
else
|
280
|
+
name = name.to_s
|
281
|
+
@instances ||= Hash.new { |h, k| h[k] = new(k) }
|
282
|
+
instance = @instances[name]
|
283
|
+
end
|
281
284
|
yield(instance) if block_given?
|
282
285
|
instance
|
283
286
|
end
|
284
287
|
|
285
288
|
alias_method :[], :instance
|
286
289
|
alias_method :for, :instance
|
287
|
-
|
290
|
+
|
288
291
|
# :call-seq:
|
289
292
|
# ArtifactNamespace.root { |ns| ... } -> ns
|
290
293
|
#
|
@@ -296,9 +299,9 @@ module Buildr
|
|
296
299
|
end
|
297
300
|
|
298
301
|
module DClone #:nodoc:
|
299
|
-
def dclone
|
302
|
+
def dclone
|
300
303
|
clone = self.clone
|
301
|
-
clone.instance_variables.each do |i|
|
304
|
+
clone.instance_variables.each do |i|
|
302
305
|
value = clone.instance_variable_get(i)
|
303
306
|
value = value.dclone rescue
|
304
307
|
clone.instance_variable_set(i, value)
|
@@ -325,7 +328,7 @@ module Buildr
|
|
325
328
|
end
|
326
329
|
obj
|
327
330
|
end
|
328
|
-
|
331
|
+
|
329
332
|
def aliases(name)
|
330
333
|
return [] unless name
|
331
334
|
name = name.to_sym
|
@@ -338,7 +341,7 @@ module Buildr
|
|
338
341
|
end
|
339
342
|
|
340
343
|
def get(key, include_parent = nil)
|
341
|
-
[].tap { |a| aliases(key).select { |n| a[0] = self[n] } }.first ||
|
344
|
+
[].tap { |a| aliases(key).select { |n| a[0] = self[n] } }.first ||
|
342
345
|
(include_parent && parent && parent.get(key, include_parent))
|
343
346
|
end
|
344
347
|
|
@@ -361,17 +364,17 @@ module Buildr
|
|
361
364
|
end
|
362
365
|
|
363
366
|
# An artifact requirement is an object that ActsAsArtifact and has
|
364
|
-
# an associated VersionRequirement. It also knows the name (some times equal to the
|
367
|
+
# an associated VersionRequirement. It also knows the name (some times equal to the
|
365
368
|
# artifact id) that is used to store it in an ArtifactNamespace.
|
366
369
|
class ArtifactRequirement
|
367
370
|
attr_accessor :version
|
368
371
|
attr_reader :name, :requirement
|
369
372
|
|
370
373
|
include DClone
|
371
|
-
|
374
|
+
|
372
375
|
# Create a requirement from an `artifact requirement spec`.
|
373
|
-
# This spec has three parts, separated by ->
|
374
|
-
#
|
376
|
+
# This spec has three parts, separated by ->
|
377
|
+
#
|
375
378
|
# some_name -> ar:ti:fact:3.2.5 -> ( >2 & <4)
|
376
379
|
#
|
377
380
|
# As you can see it's just an artifact spec, prefixed with
|
@@ -387,7 +390,7 @@ module Buildr
|
|
387
390
|
#
|
388
391
|
# The last part consist of a VersionRequirement.
|
389
392
|
# -> ( >2 & <4)
|
390
|
-
#
|
393
|
+
#
|
391
394
|
# VersionRequirement supports RubyGem's comparision operators
|
392
395
|
# in adition to parens, logical and, logical or and negation.
|
393
396
|
# See the docs for VersionRequirement for more info on operators.
|
@@ -416,7 +419,7 @@ module Buildr
|
|
416
419
|
def name=(name)
|
417
420
|
@name = name.to_s
|
418
421
|
end
|
419
|
-
|
422
|
+
|
420
423
|
# Set a the requirement, this must be an string formatted for
|
421
424
|
# VersionRequirement#create to parse.
|
422
425
|
def requirement=(version_requirement)
|
@@ -426,7 +429,7 @@ module Buildr
|
|
426
429
|
# Return a hash consisting of :name, :spec, :requirement
|
427
430
|
def requirement_hash(spec = self)
|
428
431
|
result = {}
|
429
|
-
if String === spec
|
432
|
+
if String === spec
|
430
433
|
parts = spec.split(/\s*->\s*/, 3).map(&:strip)
|
431
434
|
case parts.size
|
432
435
|
when 1
|
@@ -451,7 +454,7 @@ module Buildr
|
|
451
454
|
result[:requirement] ||= VersionRequirement.create(result[:spec][:version])
|
452
455
|
result
|
453
456
|
end
|
454
|
-
|
457
|
+
|
455
458
|
# Test if this requirement is satisfied by an artifact spec.
|
456
459
|
def satisfied_by?(spec)
|
457
460
|
return false unless requirement
|
@@ -502,7 +505,7 @@ module Buildr
|
|
502
505
|
ary = ary[0...-1] if ary.size > 3
|
503
506
|
ary.join(':')
|
504
507
|
end
|
505
|
-
|
508
|
+
|
506
509
|
class << self
|
507
510
|
# Return an artifact spec without the version part.
|
508
511
|
def unversioned_spec(spec)
|
@@ -522,16 +525,17 @@ module Buildr
|
|
522
525
|
include DClone
|
523
526
|
include Enumerable
|
524
527
|
attr_reader :name
|
525
|
-
|
528
|
+
|
526
529
|
def initialize(name = nil) #:nodoc:
|
527
530
|
@name = name.to_s if name
|
528
531
|
end
|
529
532
|
clear
|
530
|
-
|
533
|
+
|
531
534
|
def root
|
535
|
+
yield ROOT if block_given?
|
532
536
|
ROOT
|
533
537
|
end
|
534
|
-
|
538
|
+
|
535
539
|
# ROOT namespace has no parent
|
536
540
|
def parent
|
537
541
|
if root?
|
@@ -547,22 +551,22 @@ module Buildr
|
|
547
551
|
root
|
548
552
|
end
|
549
553
|
end
|
550
|
-
|
554
|
+
|
551
555
|
# Set the parent for the current namespace, except if it is ROOT
|
552
556
|
def parent=(other)
|
553
557
|
raise 'Cannot set parent of root namespace' if root?
|
554
558
|
@parent = other
|
555
559
|
@registry = nil
|
556
560
|
end
|
557
|
-
|
561
|
+
|
558
562
|
# Is this the ROOT namespace?
|
559
563
|
def root?
|
560
564
|
ROOT == self
|
561
565
|
end
|
562
566
|
|
563
|
-
# Create a named sub-namespace, sub-namespaces are themselves
|
567
|
+
# Create a named sub-namespace, sub-namespaces are themselves
|
564
568
|
# ArtifactNamespace instances but cannot be referenced by
|
565
|
-
# the Buildr.artifact_ns, ArtifactNamespace.instance methods.
|
569
|
+
# the Buildr.artifact_ns, ArtifactNamespace.instance methods.
|
566
570
|
# Reference needs to be through this object using the given +name+
|
567
571
|
#
|
568
572
|
# artifact_ns('foo').ns(:bar).need :thing => 'some:thing:jar:1.0'
|
@@ -617,7 +621,7 @@ module Buildr
|
|
617
621
|
end
|
618
622
|
named.each_pair do |name, artifact|
|
619
623
|
if Array === artifact # a group
|
620
|
-
artifact.each do |a|
|
624
|
+
artifact.each do |a|
|
621
625
|
unvers = a.unversioned_spec
|
622
626
|
previous = registry[unvers]
|
623
627
|
if previous && previous.selected? && a.satisfied_by?(previous)
|
@@ -645,7 +649,7 @@ module Buildr
|
|
645
649
|
# artifact_ns.use :name => 'org:foo:bar:jar:1.2.3'
|
646
650
|
# artifact_ns.use :name => '2.5.6'
|
647
651
|
#
|
648
|
-
# First and second form are equivalent, the third is used when an
|
652
|
+
# First and second form are equivalent, the third is used when an
|
649
653
|
# ArtifactRequirement has been previously defined with :name, so it
|
650
654
|
# just selects the version.
|
651
655
|
#
|
@@ -686,7 +690,7 @@ module Buildr
|
|
686
690
|
is_group = Array === artifact
|
687
691
|
artifact = [artifact].flatten.map do |artifact|
|
688
692
|
unvers = artifact.unversioned_spec
|
689
|
-
previous = get(unvers, false) || get(name, false)
|
693
|
+
previous = get(unvers, false) || get(name, false)
|
690
694
|
if previous # have previous on current namespace
|
691
695
|
if previous.requirement # we must satisfy the requirement
|
692
696
|
unless unvers # we only have the version
|
@@ -697,7 +701,7 @@ module Buildr
|
|
697
701
|
raise "Unsatisfied dependency #{previous} " +
|
698
702
|
"not satisfied by #{artifact}" unless satisfied
|
699
703
|
previous.version = artifact.version # OK, set new version
|
700
|
-
artifact = previous # use the same object for aliases
|
704
|
+
artifact = previous # use the same object for aliases
|
701
705
|
else # not a requirement, set the new values
|
702
706
|
unless artifact.id == previous.id && name != previous.name
|
703
707
|
previous.copy_attrs(artifact)
|
@@ -711,13 +715,13 @@ module Buildr
|
|
711
715
|
artifact.copy_attrs(previous)
|
712
716
|
artifact.version = version
|
713
717
|
end
|
714
|
-
artifact.requirement = nil
|
718
|
+
artifact.requirement = nil
|
715
719
|
end
|
716
720
|
artifact.selected!
|
717
721
|
end
|
718
722
|
artifact = artifact.first unless is_group
|
719
723
|
if is_group
|
720
|
-
names = artifact.map do |art|
|
724
|
+
names = artifact.map do |art|
|
721
725
|
unv = art.unversioned_spec
|
722
726
|
registry[unv] = art
|
723
727
|
unv
|
@@ -792,7 +796,7 @@ module Buildr
|
|
792
796
|
|
793
797
|
# Return only the named requirements
|
794
798
|
def values_at(*names)
|
795
|
-
names.map do |name|
|
799
|
+
names.map do |name|
|
796
800
|
catch :artifact do
|
797
801
|
unless name.to_s[/^[\w\-\.]+$/]
|
798
802
|
unvers = ArtifactRequirement.unversioned_spec(name)
|
@@ -816,11 +820,19 @@ module Buildr
|
|
816
820
|
registry.key?(name, include_parents)
|
817
821
|
end
|
818
822
|
|
823
|
+
def keys
|
824
|
+
values.map(&:name)
|
825
|
+
end
|
826
|
+
|
819
827
|
def delete(name, include_parents = false)
|
820
828
|
registry.delete(name, include_parents)
|
821
829
|
self
|
822
830
|
end
|
823
|
-
|
831
|
+
|
832
|
+
def clear
|
833
|
+
keys.each { |k| delete(k) }
|
834
|
+
end
|
835
|
+
|
824
836
|
# :call-seq:
|
825
837
|
# group :who, :me, :you
|
826
838
|
# group :them, :me, :you, :namespace => ns
|
@@ -828,7 +840,7 @@ module Buildr
|
|
828
840
|
# Create a virtual group on this namespace. When the namespace
|
829
841
|
# is asked for the +who+ artifact, it's value is an array made from
|
830
842
|
# the remaining names. These names are searched by default from the current
|
831
|
-
# namespace.
|
843
|
+
# namespace.
|
832
844
|
# Second form specified the starting namespace to search from.
|
833
845
|
def group(group_name, *members)
|
834
846
|
namespace = (Hash === members.last && members.pop[:namespace]) || :current
|
@@ -867,7 +879,7 @@ module Buildr
|
|
867
879
|
# and is equivalent to:
|
868
880
|
# artifact_ns.use :cool_aid => '1.0'
|
869
881
|
#
|
870
|
-
# Third form obtains the named ArtifactRequirement, can be
|
882
|
+
# Third form obtains the named ArtifactRequirement, can be
|
871
883
|
# used to test if a named requirement has been defined.
|
872
884
|
# It is equivalent to:
|
873
885
|
# artifact_ns.fetch(:cool_aid) { nil }
|
@@ -892,7 +904,7 @@ module Buildr
|
|
892
904
|
when /\?$/ then
|
893
905
|
name = $`.gsub(/^(has|have)_/, '').intern
|
894
906
|
[get(name)].flatten.all? { |a| a && a.selected? }
|
895
|
-
else
|
907
|
+
else
|
896
908
|
if block || args.size > 0
|
897
909
|
raise ArgumentError.new("wrong number of arguments #{args.size} for 0 or block given")
|
898
910
|
end
|
@@ -900,7 +912,7 @@ module Buildr
|
|
900
912
|
end
|
901
913
|
end
|
902
914
|
|
903
|
-
# Return an anonymous module
|
915
|
+
# Return an anonymous module
|
904
916
|
# # first create a requirement
|
905
917
|
# artifact_ns.cool_aid! 'cool:aid:jar:>=1.0'
|
906
918
|
#
|
@@ -911,7 +923,7 @@ module Buildr
|
|
911
923
|
# artifact_ns.cool_aid.version # -> '2.0'
|
912
924
|
def accessor(*names)
|
913
925
|
ns = self
|
914
|
-
Module.new do
|
926
|
+
Module.new do
|
915
927
|
names.each do |name|
|
916
928
|
define_method("#{name}") { ns.send("#{name}") }
|
917
929
|
define_method("#{name}?") { ns.send("#{name}?") }
|
@@ -950,7 +962,7 @@ module Buildr
|
|
950
962
|
m.parent = parent.send(:registry) unless root?
|
951
963
|
end
|
952
964
|
end
|
953
|
-
|
965
|
+
|
954
966
|
end # ArtifactNamespace
|
955
967
|
|
956
968
|
# :call-seq:
|
@@ -966,7 +978,7 @@ module Buildr
|
|
966
978
|
name = self if name.nil? && self.kind_of?(Project)
|
967
979
|
ArtifactNamespace.instance(name, &block)
|
968
980
|
end
|
969
|
-
|
981
|
+
|
970
982
|
end
|
971
983
|
|
972
984
|
|