ivy4r 0.9.15 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,16 +3,20 @@ require 'facets/to_hash'
3
3
  require 'facets/hash/op'
4
4
  require 'facets/hash/update_values'
5
5
 
6
- module Ivy
6
+ require 'digest/md5'
7
7
 
8
+ module Ivy
9
+
8
10
  # Base class with general logic to call a Ivy ant target
9
11
  class Target
10
12
  attr_reader :params
11
-
12
- def initialize(ant)
13
+
14
+ def initialize(ant, cache_dir = nil)
15
+ raise "Cache result directory does not exists '#{cache_dir}'" if cache_dir != nil && !File.directory?(cache_dir)
13
16
  @ant = ant
17
+ @cache_dir = cache_dir
14
18
  end
15
-
19
+
16
20
  # Executes this ivy target with given parameters returning a result.
17
21
  # __params__ can be a single Hash or an Array with or without a Hash as last value.
18
22
  # every value in array will be converted to string and set to __true__.
@@ -23,7 +27,35 @@ module Ivy
23
27
  @params = {}
24
28
  params.pop.each { |key, value| @params[key] = value } if Hash === params.last
25
29
  params.each { |key| @params[key.to_s] = true }
26
-
30
+ if caching_enabled? && File.exists?(cache_file_path)
31
+ load_from_yaml
32
+ else
33
+ result = execute_target
34
+ dump_to_yaml(result) if caching_enabled?
35
+ result
36
+ end
37
+ end
38
+
39
+ protected
40
+
41
+ def caching_enabled?
42
+ @cache_dir != nil
43
+ end
44
+
45
+ def cache_file_path
46
+ @cache_file_path ||= File.expand_path(File.join(@cache_dir, Digest::MD5.hexdigest(self.class.to_s + @params.to_s) + '.yaml'))
47
+ end
48
+
49
+ def load_from_yaml
50
+ File.open(cache_file_path) {|f| YAML::load(f)}
51
+ end
52
+
53
+ def dump_to_yaml(result)
54
+ File.open(cache_file_path, 'w') {|f| YAML.dump(result, f)}
55
+ end
56
+
57
+ # The bare bone execution of this target without any crosscutting concerns.
58
+ def execute_target
27
59
  validate
28
60
  before_hook
29
61
  execute_ivy
@@ -31,8 +63,6 @@ module Ivy
31
63
  ensure
32
64
  after_hook
33
65
  end
34
-
35
- protected
36
66
 
37
67
  # Validates provided hash of parameters, raises an exception if any mandatory parameter is
38
68
  # missing or an unknown parameter has been provided.
@@ -42,17 +72,17 @@ module Ivy
42
72
  missing = symbols(mandatory_parameter).find_all { |p| params.keys.member?(p) == false }
43
73
  raise ArgumentError, "Missing mandatory parameters '#{missing.join(', ')}' for #{self.class}" unless missing.empty?
44
74
  end
45
-
75
+
46
76
  # Hook method called after validation but before #execute_ivy
47
77
  # overwrite for special actions needed
48
78
  def before_hook
49
79
  end
50
-
51
- # After hook is always called for #execute within +ensure+ block
80
+
81
+ # After hook is always called for #execute_target within +ensure+ block
52
82
  # overwrite for special clean up
53
83
  def after_hook
54
84
  end
55
-
85
+
56
86
  # Helper to call the nested ant targets recursively if nessecary. Must be called within +do+ +end+
57
87
  # block of ant target to work.
58
88
  def call_nested(nested)
@@ -70,7 +100,7 @@ module Ivy
70
100
  end
71
101
  end
72
102
  end
73
-
103
+
74
104
  # Creates the result for the execution by default it iterates of the ant properties and fetches
75
105
  # all properties that match the result properties for target as a hash. Overwrite to provide
76
106
  # a different result
@@ -83,49 +113,49 @@ module Ivy
83
113
  result = ant_properties.map do |p|
84
114
  rp = result_property_values.find { |rp| rp.matcher === p[0] }
85
115
  rp ? [p[0], rp.parse(p[1])].flatten : nil
86
- end.compact.to_h(:multi)
87
- result.update_values do |v|
88
- case v.size
89
- when 0
90
- nil
91
- when 1
92
- v[0]
93
- else
94
- v
116
+ end.compact.to_h(:multi)
117
+ result.update_values do |v|
118
+ case v.size
119
+ when 0
120
+ nil
121
+ when 1
122
+ v[0]
123
+ else
124
+ v
125
+ end
95
126
  end
127
+
128
+ result
129
+ end
130
+
131
+ def mandatory_parameter
132
+ parameter.find_all {|p| p.mandatory? }
133
+ end
134
+
135
+ def symbols(params)
136
+ params.map{|p| p.symbol}
137
+ end
138
+
139
+ def ant_properties
140
+ @ant.project.properties
141
+ end
142
+
143
+ def ant_references
144
+ @ant.project.references
96
145
  end
97
-
98
- result
99
- end
100
-
101
- def mandatory_parameter
102
- parameter.find_all {|p| p.mandatory? }
103
- end
104
-
105
- def symbols(params)
106
- params.map{|p| p.symbol}
107
146
  end
108
147
 
109
- def ant_properties
110
- @ant.project.properties
111
- end
112
-
113
- def ant_references
114
- @ant.project.references
115
- end
116
- end
117
-
118
148
  COMMA_SPLITTER = Proc.new {|value| value.to_s.split(',').map(&:strip)}
119
-
120
- Parameter = Struct.new(:symbol, :mandatory) do
121
- def mandatory?
122
- mandatory
149
+
150
+ Parameter = Struct.new(:symbol, :mandatory) do
151
+ def mandatory?
152
+ mandatory
153
+ end
123
154
  end
124
- end
125
-
126
- ResultValue = Struct.new(:matcher, :parser) do
127
- def parse(value)
128
- parser ? parser.call(value) : value
155
+
156
+ ResultValue = Struct.new(:matcher, :parser) do
157
+ def parse(value)
158
+ parser ? parser.call(value) : value
159
+ end
129
160
  end
130
161
  end
131
- end
@@ -35,129 +35,142 @@ is
35
35
  }
36
36
  =end
37
37
  class Ivy4r
38
- VERSION = '0.9.15'
39
-
38
+ VERSION = '0.10.0'
39
+
40
40
  # Set the ant home directory to load ant classes from if no custom __antwrap__ is provided
41
41
  # and the default provided ant version 1.7.1 should not be used.
42
42
  # Must be set before any call to method that uses the ivy is made.
43
43
  attr_accessor :ant_home
44
-
44
+
45
45
  # Defines the directory to load ivy libs and its dependencies from
46
46
  attr_accessor :lib_dir
47
-
47
+
48
48
  # Optional ant variable <tt>ivy.project.dir</tt> to add to ant environment before loading ivy
49
49
  # defaults to the __lib_dir__
50
50
  attr_accessor :project_dir
51
-
51
+
52
52
  # The ant property name to use for references to environment properties in ant and ivy,
53
53
  # defaults to 'env'
54
54
  attr_accessor :environment_property
55
-
55
+
56
56
  # To provide a custom __antwrap__ to use instead of default one
57
- attr_writer :ant
58
-
57
+ attr_accessor :ant
58
+
59
59
  # Access to ivy settings set via configure or settings method.
60
60
  attr_accessor :settings_file
61
-
61
+
62
+ # Donates the base directory for the cached files, if nil no caching is enabled
63
+ attr_accessor :cache_dir
64
+
62
65
  # Initalizes ivy4r with optional ant wrapper object. Sets ant home dir and ivy lib dir
63
66
  # to default values from __Ivy4rJars__ gem.
64
- def initialize(ant = nil)
67
+ def initialize(ant_instance = nil, &block)
65
68
  @ant_home = ::Ivy4rJars.ant_home_dir
66
69
  @lib_dir = ::Ivy4rJars.lib_dir
67
70
  @project_dir = @lib_dir
68
71
  @environment_property = 'env'
69
- @ant = ant
72
+ @ant = ant_instance
73
+
74
+ if block
75
+ if block.arity > 1
76
+ raise ArgumentError, "To many arguments expected=1 given=#{block.arity}"
77
+ elsif block.arity == 1
78
+ yield self
79
+ else
80
+ instance_eval(&block)
81
+ end
82
+ end
70
83
  end
71
-
84
+
72
85
  # Calls the __cleancache__ ivy target with given parameters.
73
86
  def cleancache(*params)
74
- Ivy::Cleancache.new(ant).execute(*params)
87
+ Ivy::Cleancache.new(ant, cache_dir).execute(*params)
75
88
  end
76
-
89
+
77
90
  # Calls the __settings__ ivy target with given parameters.
78
91
  def settings(*params)
79
- settings_task = Ivy::Settings.new(ant)
92
+ settings_task = Ivy::Settings.new(ant, nil) # do not cache settings
80
93
  result = settings_task.execute(*params)
81
94
  @settings_file = settings_task.params[:file]
82
95
  result
83
96
  end
84
-
97
+
85
98
  # Calls the __configure__ ivy target with given parameters.
86
99
  def configure(*params)
87
- configure_task = Ivy::Configure.new(ant)
100
+ configure_task = Ivy::Configure.new(ant, nil) # do not cache configure
88
101
  result = configure_task.execute(*params)
89
102
  @settings_file = configure_task.params[:file]
90
103
  result
91
104
  end
92
-
105
+
93
106
  # Calls the __info__ ivy target with given parameters and returns info as hash.
94
107
  def info(*params)
95
- Ivy::Info.new(ant).execute(*params)
108
+ Ivy::Info.new(ant, cache_dir).execute(*params)
96
109
  end
97
-
110
+
98
111
  # Calls the __buildnumber__ ivy target with given parameters and returns info as hash.
99
112
  def buildnumber(*params)
100
- Ivy::Buildnumber.new(ant).execute(*params)
113
+ Ivy::Buildnumber.new(ant, cache_dir).execute(*params)
101
114
  end
102
-
115
+
103
116
  # Calls the __listmodules__ ivy target with given parameters and returns info as hash.
104
117
  def listmodules(*params) #:nodoc:
105
- Ivy::Listmodules.new(ant).execute(*params)
118
+ Ivy::Listmodules.new(ant, cache_dir).execute(*params)
106
119
  end
107
-
120
+
108
121
  # Calls the __makepom__ ivy target with given parameters and returns pom content.
109
122
  def makepom(*params)
110
- Ivy::Makepom.new(ant).execute(*params)
123
+ Ivy::Makepom.new(ant, cache_dir).execute(*params)
111
124
  end
112
-
125
+
113
126
  # Calls the __resolve__ ivy target with given parameters and returns info as hash.
114
127
  def resolve(*params)
115
- Ivy::Resolve.new(ant).execute(*params)
128
+ Ivy::Resolve.new(ant, cache_dir).execute(*params)
116
129
  end
117
-
130
+
118
131
  # Calls the __retrieve__ ivy target with given parameters.
119
132
  def retrieve(*params)
120
- Ivy::Retrieve.new(ant).execute(*params)
133
+ Ivy::Retrieve.new(ant, cache_dir).execute(*params)
121
134
  end
122
-
135
+
123
136
  # Calls the __publish__ ivy target with given parameters.
124
137
  def publish(*params)
125
- Ivy::Publish.new(ant).execute(*params)
138
+ Ivy::Publish.new(ant, cache_dir).execute(*params)
126
139
  end
127
-
140
+
128
141
  # Calls the __cachepath__ ivy target with given parameters and returns
129
142
  # array containing absolute file paths to all artifacts contained in result
130
143
  def cachepath(*params)
131
- Ivy::Cachepath.new(ant).execute(*params)
144
+ Ivy::Cachepath.new(ant, cache_dir).execute(*params)
132
145
  end
133
-
146
+
134
147
  # Calls the __findrevision__ ivy target with given parameters and returns
135
148
  # array containing absolute file paths to all artifacts contained in result
136
149
  def findrevision(*params)
137
- Ivy::Findrevision.new(ant).execute(*params)
150
+ Ivy::Findrevision.new(ant, cache_dir).execute(*params)
138
151
  end
139
-
152
+
140
153
  # Calls the __artifactproperty__ ivy target with given parameters and returns
141
154
  # map with all defined properties
142
155
  def artifactproperty(*params)
143
- Ivy::Artifactproperty.new(ant).execute(*params)
156
+ Ivy::Artifactproperty.new(ant, cache_dir).execute(*params)
144
157
  end
145
-
158
+
146
159
  # Calls the __buildlist__ ivy target with given parameters and returns
147
160
  # the resulting buildlist
148
161
  def buildlist(*params)
149
- Ivy::Buildlist.new(ant).execute(*params)
162
+ Ivy::Buildlist.new(ant, cache_dir).execute(*params)
150
163
  end
151
-
164
+
152
165
  # Calls the __artifactreport__ ivy target with given parameters and returns
153
166
  # the created xml.
154
167
  def artifactreport(*params)
155
- Ivy::Artifactreport.new(ant).execute(*params)
168
+ Ivy::Artifactreport.new(ant, cache_dir).execute(*params)
156
169
  end
157
-
170
+
158
171
  # Calls the __report__ ivy target with given parameters
159
172
  def report(*params)
160
- Ivy::Report.new(ant).execute(*params)
173
+ Ivy::Report.new(ant, cache_dir).execute(*params)
161
174
  end
162
175
 
163
176
  # Used to get or set ant properties.
@@ -166,7 +179,7 @@ class Ivy4r
166
179
  def property
167
180
  AntPropertyHelper.new(ant, ant_properties)
168
181
  end
169
-
182
+
170
183
  # Returns the __antwrap__ instance to use for all internal calls creates a default
171
184
  # instance if no instance has been set before.
172
185
  def ant
@@ -175,12 +188,12 @@ class Ivy4r
175
188
  init(@ant) if should_init?
176
189
  @ant
177
190
  end
178
-
191
+
179
192
  private
180
193
  def should_init?
181
194
  @init_done.nil? || @init_done == false
182
195
  end
183
-
196
+
184
197
  def init(ant)
185
198
  @init_done = true
186
199
  ant.property :environment => environment_property
@@ -188,7 +201,7 @@ class Ivy4r
188
201
  ant.path :id => 'ivy.lib.path' do
189
202
  ant.fileset :dir => lib_dir, :includes => '*.jar'
190
203
  end
191
-
204
+
192
205
  ant.typedef :name => "ivy_settings", :classname => "org.apache.ivy.ant.IvyAntSettings", :classpathref => "ivy.lib.path", :loaderRef => 'ivy.lib.path.loader', :loaderRef => 'ivy.lib.path.loader'
193
206
  ant.taskdef :name => "ivy_configure", :classname => "org.apache.ivy.ant.IvyConfigure", :classpathref => "ivy.lib.path", :loaderRef => 'ivy.lib.path.loader'
194
207
  ant.taskdef :name => "ivy_resolve", :classname => "org.apache.ivy.ant.IvyResolve", :classpathref => "ivy.lib.path", :loaderRef => 'ivy.lib.path.loader'
@@ -215,7 +228,7 @@ class Ivy4r
215
228
  ant.taskdef :name => "ivy_buildnumber", :classname => "org.apache.ivy.ant.IvyBuildNumber", :classpathref => "ivy.lib.path", :loaderRef => 'ivy.lib.path.loader'
216
229
  ant.taskdef :name => "ivy_cleancache", :classname => "org.apache.ivy.ant.IvyCleanCache", :classpathref => "ivy.lib.path", :loaderRef => 'ivy.lib.path.loader'
217
230
  end
218
-
231
+
219
232
  # Returns the ant properties, note that this are java objects.
220
233
  def ant_properties
221
234
  ant.project.properties
@@ -226,7 +239,7 @@ AntPropertyHelper = Struct.new(:ant, :ant_properties) do #:nodoc:
226
239
  def []=(name, value) #:nodoc:
227
240
  ant.property :name => name, :value => value
228
241
  end
229
-
242
+
230
243
  def [](matcher) #:nodoc:
231
244
  property = ant_properties.find {|p| matcher === p[0] }
232
245
  property ? property[1] : nil
@@ -7,35 +7,50 @@ end
7
7
  module Rake
8
8
  module Ivy
9
9
  class IvyConfig
10
-
10
+
11
11
  # The directory to load ivy jars and its dependencies from, leave __nil__ to use default
12
12
  attr_accessor :lib_dir
13
-
13
+
14
14
  # The extension directory containing ivy settings, the local repository and cache
15
15
  attr_accessor :extension_dir
16
-
16
+
17
17
  # Returns the resolve result
18
18
  attr_reader :resolved
19
19
 
20
20
  attr_reader :post_resolve_tasks
21
-
21
+
22
22
  # Store the current rake application and initialize ivy ant wrapper
23
23
  def initialize(application)
24
24
  @application = application
25
25
  @extension_dir = File.join("#{@application.original_dir}", "#{ENV['IVY_EXT_DIR']}")
26
26
  @post_resolve_tasks = []
27
27
  end
28
-
28
+
29
29
  # Returns the correct ant instance to use.
30
30
  def ivy4r
31
31
  unless @ivy4r
32
- @ivy4r = ::Ivy4r.new
32
+ @ivy4r = ::Ivy4r.new do |i|
33
+ if caching_enabled?
34
+ end
35
+ end
33
36
  @ivy4r.lib_dir = lib_dir if lib_dir
34
37
  @ivy4r.project_dir = @extension_dir
35
38
  end
36
39
  @ivy4r
37
40
  end
38
-
41
+
42
+ # Returns if ivy result caching is enabled by existence of the marker file.
43
+ def caching_enabled?
44
+ File.exists? 'use_ivy_caching'
45
+ end
46
+
47
+ # Returns the dir to store ivy caching results in.
48
+ def result_cache_dir
49
+ dir = File.expand_path('ivycaching')
50
+ FileUtils.mkdir_p dir
51
+ dir
52
+ end
53
+
39
54
  # Returns the artifacts for given configurations as array
40
55
  # this is a post resolve task.
41
56
  # the arguments are checked for the following:
@@ -59,17 +74,17 @@ module Rake
59
74
  pathid = "ivy.deps." + confs.join('.') + '.' + types.join('.')
60
75
  params = {:conf => confs.join(','), :pathid => pathid}
61
76
  params[:type] = types.join(',') unless types.nil? || types.size == 0
62
-
77
+
63
78
  ivy4r.cachepath params
64
79
  end
65
80
  end
66
-
81
+
67
82
  # Returns ivy info for configured ivy file.
68
83
  def info
69
84
  ivy4r.settings :id => 'ivy.info.settingsref'
70
85
  ivy4r.info :file => file, :settingsRef => 'ivy.info.settingsref'
71
86
  end
72
-
87
+
73
88
  # Configures the ivy instance with additional properties and loading the settings file if it was provided
74
89
  def configure
75
90
  unless @configured
@@ -79,7 +94,7 @@ module Rake
79
94
  @configured = ivy4r.settings :file => settings if settings
80
95
  end
81
96
  end
82
-
97
+
83
98
  # Resolves the configured file once.
84
99
  def __resolve__
85
100
  unless @resolved
@@ -88,12 +103,12 @@ module Rake
88
103
  end
89
104
  @resolved
90
105
  end
91
-
106
+
92
107
  # Creates the standard ivy dependency report
93
108
  def report
94
109
  ivy4r.report :todir => report_dir
95
110
  end
96
-
111
+
97
112
  # Publishs the project as defined in ivy file if it has not been published already
98
113
  def __publish__
99
114
  unless @published
@@ -105,19 +120,19 @@ module Rake
105
120
  @published = true
106
121
  end
107
122
  end
108
-
123
+
109
124
  def home
110
125
  @ivy_home_dir ||= "#{@extension_dir}/ivy-home"
111
126
  end
112
-
127
+
113
128
  def settings
114
129
  @settings ||= "#{@extension_dir}/ant-scripts/ivysettings.xml"
115
130
  end
116
-
131
+
117
132
  def file
118
133
  @ivy_file ||= 'ivy.xml'
119
134
  end
120
-
135
+
121
136
  # Sets the revision to use for the project, this is useful for development revisions that
122
137
  # have an appended timestamp or any other dynamic revisioning.
123
138
  #
@@ -142,7 +157,7 @@ module Rake
142
157
  self
143
158
  end
144
159
  end
145
-
160
+
146
161
  # Sets the status to use for the project, this is useful for custom status handling
147
162
  # like integration, alpha, gold.
148
163
  #
@@ -167,7 +182,7 @@ module Rake
167
182
  self
168
183
  end
169
184
  end
170
-
185
+
171
186
  # Sets the publish options to use for the project. The options are merged with the default
172
187
  # options including value set via #publish_from and overwrite all of them.
173
188
  #
@@ -194,7 +209,7 @@ module Rake
194
209
  end
195
210
  end
196
211
  end
197
-
212
+
198
213
  # Sets the additional properties for the ivy process use a Hash with the properties to set.
199
214
  def properties(*properties)
200
215
  if properties.empty?
@@ -205,7 +220,7 @@ module Rake
205
220
  self
206
221
  end
207
222
  end
208
-
223
+
209
224
  # Sets the local repository for ivy files
210
225
  def local_repository(*local_repository)
211
226
  if local_repository.empty?
@@ -216,7 +231,7 @@ module Rake
216
231
  self
217
232
  end
218
233
  end
219
-
234
+
220
235
  # Sets the directory to publish artifacts from.
221
236
  def publish_from(*publish_dir)
222
237
  if publish_dir.empty?
@@ -227,7 +242,7 @@ module Rake
227
242
  self
228
243
  end
229
244
  end
230
-
245
+
231
246
  # Sets the directory to create dependency reports in.
232
247
  def report_dir(*report_dir)
233
248
  if report_dir.empty?
@@ -239,46 +254,46 @@ module Rake
239
254
  end
240
255
  end
241
256
  end
242
-
243
- # Adds given block as post resolve action that is executed directly after #resolve has been called.
244
- # Yields this ivy config object into block.
245
- # <tt>project.ivy.post_resolve { |ivy| p "all deps:" + ivy.deps('all').join(", ") }</tt>
246
- def post_resolve(&block)
247
- post_resolve_tasks << block if block
257
+
258
+ # Adds given block as post resolve action that is executed directly after #resolve has been called.
259
+ # Yields this ivy config object into block.
260
+ # <tt>project.ivy.post_resolve { |ivy| p "all deps:" + ivy.deps('all').join(", ") }</tt>
261
+ def post_resolve(&block)
262
+ post_resolve_tasks << block if block
263
+ end
264
+
265
+ # Filter artifacts for given configuration with provided filter values, this is a post resolve
266
+ # task like #deps.
267
+ # <tt>project.ivy.filter('server', 'client', :include => /b.*.jar/, :exclude => [/a\.jar/, /other.*\.jar/])</tt>
268
+ def filter(*confs)
269
+ filter = confs.last.kind_of?(Hash) ? confs.pop : {}
270
+ unless (filter.keys - (TYPES - [:conf])).empty?
271
+ raise ArgumentError, "Invalid filter use :include and/or :exclude only: given #{filter.keys.inspect}"
248
272
  end
249
-
250
- # Filter artifacts for given configuration with provided filter values, this is a post resolve
251
- # task like #deps.
252
- # <tt>project.ivy.filter('server', 'client', :include => /b.*.jar/, :exclude => [/a\.jar/, /other.*\.jar/])</tt>
253
- def filter(*confs)
254
- filter = confs.last.kind_of?(Hash) ? confs.pop : {}
255
- unless (filter.keys - (TYPES - [:conf])).empty?
256
- raise ArgumentError, "Invalid filter use :include and/or :exclude only: given #{filter.keys.inspect}"
257
- end
258
- includes, excludes, types = filter[:include] || [], filter[:exclude] || [], filter[:type] || []
259
-
260
- artifacts = deps(confs.flatten, types.flatten)
261
- if artifacts
262
- artifacts = artifacts.find_all do |lib|
263
- lib = File.basename(lib)
264
- includes = includes.reject {|i| i.nil? || i.blank? }
265
- should_include = includes.empty? || includes.any? {|include| include === lib }
266
- should_include && !excludes.any? {|exclude| exclude === lib}
267
- end
273
+ includes, excludes, types = filter[:include] || [], filter[:exclude] || [], filter[:type] || []
274
+
275
+ artifacts = deps(confs.flatten, types.flatten)
276
+ if artifacts
277
+ artifacts = artifacts.find_all do |lib|
278
+ lib = File.basename(lib)
279
+ includes = includes.reject {|i| i.nil? || i.blank? }
280
+ should_include = includes.empty? || includes.any? {|include| include === lib }
281
+ should_include && !excludes.any? {|exclude| exclude === lib}
268
282
  end
269
-
270
- artifacts
271
283
  end
272
-
284
+
285
+ artifacts
286
+ end
287
+
273
288
  class Tasks < ::Rake::TaskLib
274
289
  def initialize(ivy = nil, &block)
275
290
  @ivy = ivy || Rake::Ivy::IvyConfig.new(Rake.application)
276
291
  yield @ivy if block_given?
277
292
  Rake.application.ivy = @ivy
278
-
293
+
279
294
  define
280
295
  end
281
-
296
+
282
297
  private
283
298
  def define
284
299
  namespace 'ivy' do
@@ -290,21 +305,39 @@ module Rake
290
305
  task :resolve => "ivy:configure" do
291
306
  Rake.application.ivy.__resolve__
292
307
  end
293
-
308
+
294
309
  desc 'Publish the artifacts to ivy repository'
295
310
  task :publish => "ivy:resolve" do
296
311
  Rake.application.ivy.__publish__
297
312
  end
298
-
313
+
299
314
  desc 'Creates a dependency report for the project'
300
315
  task :report => "ivy:resolve" do
301
316
  Rake.application.ivy.report
302
317
  end
303
-
318
+
304
319
  desc 'Clean the local Ivy cache and the local ivy repository'
305
320
  task :clean do
306
321
  Rake.application.ivy.ivy4r.clean
307
322
  end
323
+
324
+ desc 'Clean the local Ivy result cache to force execution of ivy targets'
325
+ task :cleanresultcache do
326
+ puts "Deleting IVY result cache dir '#{Rake.application.ivy.result_cache_dir}'"
327
+ rm_rf Rake.application.ivy.result_cache_dir
328
+ end
329
+
330
+ desc 'Enable the local Ivy result cache by creating the marker file'
331
+ task :enableresultcache do
332
+ puts "Creating IVY caching marker file '#{Rake.application.ivy.caching_marker}'"
333
+ touch Rake.application.ivy.caching_marker
334
+ end
335
+
336
+ desc 'Disable the local Ivy result cache by removing the marker file'
337
+ task :disableresultcache do
338
+ puts "Deleting IVY aching marker file '#{Rake.application.ivy.caching_marker}'"
339
+ rm_f Rake.application.ivy.caching_marker
340
+ end
308
341
  end
309
342
  end
310
343
  end