pepijnve-ivy4r 0.12.11

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.
Files changed (50) hide show
  1. data/.autotest +14 -0
  2. data/.gitignore +7 -0
  3. data/.project +17 -0
  4. data/.rspec +2 -0
  5. data/CHANGELOG +280 -0
  6. data/Gemfile +5 -0
  7. data/README.txt +124 -0
  8. data/Rakefile +36 -0
  9. data/autotest/discover.rb +1 -0
  10. data/ivy4r.gemspec +30 -0
  11. data/lib/buildr/ivy_extension.rb +808 -0
  12. data/lib/ivy/artifactproperty.rb +34 -0
  13. data/lib/ivy/artifactreport.rb +24 -0
  14. data/lib/ivy/buildlist.rb +37 -0
  15. data/lib/ivy/buildnumber.rb +34 -0
  16. data/lib/ivy/cachepath.rb +30 -0
  17. data/lib/ivy/cleancache.rb +20 -0
  18. data/lib/ivy/configure.rb +29 -0
  19. data/lib/ivy/findrevision.rb +34 -0
  20. data/lib/ivy/info.rb +36 -0
  21. data/lib/ivy/install.rb +33 -0
  22. data/lib/ivy/java/all_version_matcher.rb +31 -0
  23. data/lib/ivy/java/java_object_wrapper.rb +160 -0
  24. data/lib/ivy/listmodules.rb +35 -0
  25. data/lib/ivy/makepom.rb +30 -0
  26. data/lib/ivy/publish.rb +37 -0
  27. data/lib/ivy/report.rb +33 -0
  28. data/lib/ivy/resolve.rb +44 -0
  29. data/lib/ivy/retrieve.rb +27 -0
  30. data/lib/ivy/settings.rb +15 -0
  31. data/lib/ivy/target.rb +162 -0
  32. data/lib/ivy/targets.rb +50 -0
  33. data/lib/ivy4r.rb +252 -0
  34. data/lib/ivy4r/version.rb +3 -0
  35. data/lib/ivy4r_java_extensions.rb +42 -0
  36. data/lib/rake/ivy_extension.rb +349 -0
  37. data/spec/ivy/target_spec.rb +86 -0
  38. data/spec/ivy/targets_spec.rb +27 -0
  39. data/spec/ivy4r_spec.rb +50 -0
  40. data/spec/spec_helper.rb +10 -0
  41. data/spec_files/buildlist/p1/buildfile +0 -0
  42. data/spec_files/buildlist/p1/ivy.xml +7 -0
  43. data/spec_files/buildlist/sub/p2/buildfile +0 -0
  44. data/spec_files/buildlist/sub/p2/ivy.xml +11 -0
  45. data/spec_files/buildlist/sub/p3/buildfile +0 -0
  46. data/spec_files/buildlist/sub/p3/ivy.xml +11 -0
  47. data/spec_files/ivy.xml +18 -0
  48. data/spec_files/ivysettings.xml +11 -0
  49. data/spec_functional/ivy4r_spec.rb +131 -0
  50. metadata +214 -0
@@ -0,0 +1,35 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Listmodules < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:organisation, true),
8
+ Parameter.new(:module, true),
9
+ Parameter.new(:branch, false),
10
+ Parameter.new(:revision, true),
11
+ Parameter.new(:matcher, false),
12
+ Parameter.new(:property, true),
13
+ Parameter.new(:value, true),
14
+ Parameter.new(:settingsRef, false),
15
+ ]
16
+ end
17
+
18
+ protected
19
+ def before_hook
20
+ @cached_property_names = ant_properties.map {|key, value| key }
21
+ end
22
+
23
+ def after_hook
24
+ @cached_property_names = nil
25
+ end
26
+
27
+ def execute_ivy
28
+ call_nested :ivy_listmodules => params
29
+ end
30
+
31
+ def create_return_values
32
+ ant_properties.reject { |key, value| @cached_property_names.member? key }
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,30 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Makepom < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:ivyfile, true),
8
+ Parameter.new(:pomfile, true),
9
+ Parameter.new(:templatefile, false),
10
+ Parameter.new(:artifactName, false),
11
+ Parameter.new(:artifactPackaging, false),
12
+ Parameter.new(:conf, false),
13
+ Parameter.new(:settingsRef, false),
14
+ Parameter.new(:printIvyInfo, false),
15
+ Parameter.new(:headerFile, false),
16
+ Parameter.new(:description, false),
17
+ Parameter.new(:nested, false)
18
+ ]
19
+ end
20
+
21
+ protected
22
+ def execute_ivy
23
+ call_nested :ivy_makepom => params
24
+ end
25
+
26
+ def create_return_values
27
+ IO.read(params[:pomfile])
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,37 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Publish < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:artifactspattern, false),
8
+ Parameter.new(:resolver, true),
9
+ Parameter.new(:pubrevision, false),
10
+ Parameter.new(:pubbranch, false),
11
+ Parameter.new(:forcedeliver, false),
12
+ Parameter.new(:update, false),
13
+ Parameter.new(:validate, false),
14
+ Parameter.new(:replacedynamicrev, false),
15
+ Parameter.new(:publishivy, false),
16
+ Parameter.new(:conf, false),
17
+ Parameter.new(:overwrite, false),
18
+ Parameter.new(:warnonmissing, false),
19
+ Parameter.new(:srcivypattern, false),
20
+ Parameter.new(:srcivypattern, false),
21
+ Parameter.new(:pubdate, false),
22
+ Parameter.new(:status, false),
23
+ Parameter.new(:delivertarget, false),
24
+ Parameter.new(:settingsRef, false)
25
+ ]
26
+ end
27
+
28
+ protected
29
+ def execute_ivy
30
+ call_nested :ivy_publish => params
31
+ end
32
+
33
+ def create_return_values
34
+ nil
35
+ end
36
+ end
37
+ end
data/lib/ivy/report.rb ADDED
@@ -0,0 +1,33 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Report < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:todir, false),
8
+ Parameter.new(:nested, false),
9
+ Parameter.new(:outputpattern, false),
10
+ Parameter.new(:xsl, false),
11
+ Parameter.new(:xml, false),
12
+ Parameter.new(:graph, false),
13
+ Parameter.new(:dot, false),
14
+ Parameter.new(:conf, false),
15
+ Parameter.new(:organisation, false),
16
+ Parameter.new(:module, false),
17
+ Parameter.new(:validate, false),
18
+ Parameter.new(:xslfile, false),
19
+ Parameter.new(:settingsRef, false),
20
+ Parameter.new(:resolveId, false)
21
+ ]
22
+ end
23
+
24
+ protected
25
+ def execute_ivy
26
+ call_nested :ivy_report => params
27
+ end
28
+
29
+ def create_return_values
30
+ nil
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,44 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Resolve < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:file, false),
8
+ Parameter.new(:conf, false),
9
+ Parameter.new(:refresh, false),
10
+ Parameter.new(:resolveMode, false),
11
+ Parameter.new(:inline, false),
12
+ Parameter.new(:keep, false),
13
+ Parameter.new(:organisation, false),
14
+ Parameter.new(:module, false),
15
+ Parameter.new(:revision, false),
16
+ Parameter.new(:branch, false),
17
+ Parameter.new(:type, false),
18
+ Parameter.new(:haltonfailure, false),
19
+ Parameter.new(:failureproperty, false),
20
+ Parameter.new(:transitive, false),
21
+ Parameter.new(:showprogress, false),
22
+ Parameter.new(:validate, false),
23
+ Parameter.new(:settingsRef, false),
24
+ Parameter.new(:resolveId, false),
25
+ Parameter.new(:log, false)
26
+ ]
27
+ end
28
+
29
+ def result_property_values
30
+ property = params[:resolveId] ? ".#{params[:resolveId]}" : ''
31
+ [
32
+ ResultValue.new("ivy.organisation#{property}", nil),
33
+ ResultValue.new("ivy.module#{property}", nil),
34
+ ResultValue.new("ivy.revision#{property}", nil),
35
+ ResultValue.new("ivy.resolved.configurations#{property}", Ivy::COMMA_SPLITTER)
36
+ ]
37
+ end
38
+
39
+ protected
40
+ def execute_ivy
41
+ call_nested :ivy_resolve => params
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,27 @@
1
+ require 'ivy/target'
2
+
3
+ module Ivy
4
+ class Retrieve < Ivy::Target
5
+ def parameter
6
+ [
7
+ Parameter.new(:pattern, false),
8
+ Parameter.new(:ivypattern, false),
9
+ Parameter.new(:conf, false),
10
+ Parameter.new(:sync, false),
11
+ Parameter.new(:type, false),
12
+ Parameter.new(:symlink, false),
13
+ Parameter.new(:settingsRef, false),
14
+ Parameter.new(:log, false)
15
+ ]
16
+ end
17
+
18
+ protected
19
+ def execute_ivy
20
+ call_nested :ivy_retrieve => params
21
+ end
22
+
23
+ def create_return_values
24
+ nil
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ require 'ivy/configure'
2
+
3
+ module Ivy
4
+ class Settings < Ivy::Configure
5
+
6
+ def create_return_values
7
+ nil
8
+ end
9
+
10
+ protected
11
+ def execute_ivy
12
+ call_nested :ivy_settings => params
13
+ end
14
+ end
15
+ end
data/lib/ivy/target.rb ADDED
@@ -0,0 +1,162 @@
1
+ require 'digest/md5'
2
+
3
+ require 'ivy/java/java_object_wrapper'
4
+
5
+ module Ivy
6
+
7
+ # Base class with general logic to call a Ivy ant target
8
+ class Target
9
+ attr_reader :params
10
+
11
+ def initialize(ant, cache_dir = nil)
12
+ raise "Cache result directory does not exists '#{cache_dir}'" if cache_dir != nil && !File.directory?(cache_dir)
13
+ @ant = ant
14
+ @cache_dir = cache_dir
15
+ end
16
+
17
+ # Executes this ivy target with given parameters returning a result.
18
+ # __params__ can be a single Hash or an Array with or without a Hash as last value.
19
+ # every value in array will be converted to string and set to __true__.
20
+ #
21
+ # I.e. <tt>[:force, 'validate', {'name' => 'Blub'}]</tt>
22
+ # results in parameters <tt>{'force'=>true, 'validate' => true, 'name'=>'Blub'}</tt>
23
+ def execute(*params)
24
+ @params = {}
25
+ params.pop.each { |key, value| @params[key] = value } if Hash === params.last
26
+ params.each { |key| @params[key.to_s] = true }
27
+ if caching_enabled? && File.exists?(cache_file_path)
28
+ load_from_yaml
29
+ else
30
+ result = execute_target
31
+ dump_to_yaml(result) if caching_enabled?
32
+ result
33
+ end
34
+ end
35
+
36
+ protected
37
+
38
+ def caching_enabled?
39
+ @cache_dir != nil
40
+ end
41
+
42
+ def cache_file_path
43
+ @cache_file_path ||= File.expand_path(File.join(@cache_dir, Digest::MD5.hexdigest(self.class.to_s + @params.to_s) + '.yaml'))
44
+ end
45
+
46
+ def load_from_yaml
47
+ File.open(cache_file_path) {|f| YAML::load(f)}
48
+ end
49
+
50
+ def dump_to_yaml(result)
51
+ File.open(cache_file_path, 'w') {|f| YAML.dump(result, f)}
52
+ end
53
+
54
+ # The bare bone execution of this target without any crosscutting concerns.
55
+ def execute_target
56
+ validate
57
+ before_hook
58
+ execute_ivy
59
+ create_return_values
60
+ ensure
61
+ after_hook
62
+ end
63
+
64
+ # Validates provided hash of parameters, raises an exception if any mandatory parameter is
65
+ # missing or an unknown parameter has been provided.
66
+ def validate
67
+ unknown = params.keys - symbols(parameter)
68
+ raise ArgumentError, "Unknown parameters '#{unknown.join(', ')}' for #{self.class}" unless unknown.empty?
69
+ missing = symbols(mandatory_parameter).find_all { |p| params.keys.member?(p) == false }
70
+ raise ArgumentError, "Missing mandatory parameters '#{missing.join(', ')}' for #{self.class}" unless missing.empty?
71
+ end
72
+
73
+ # Hook method called after validation but before #execute_ivy
74
+ # overwrite for special actions needed
75
+ def before_hook
76
+ end
77
+
78
+ # After hook is always called for #execute_target within +ensure+ block
79
+ # overwrite for special clean up
80
+ def after_hook
81
+ end
82
+
83
+ # Helper to call the nested ant targets recursively if nessecary. Must be called within +do+ +end+
84
+ # block of ant target to work.
85
+ def call_nested(nested)
86
+ if nested
87
+ nested.each do |method, paramlist|
88
+ [paramlist].flatten.each do |params|
89
+ if params.member? :nested
90
+ p = params.dup
91
+ nest = p.delete(:nested)
92
+ @ant.send(method, p, &lambda { |*_| call_nested(nest)})
93
+ else
94
+ @ant.send(method, params)
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
100
+
101
+ # Creates the result for the execution by default it iterates of the ant properties and fetches
102
+ # all properties that match the result properties for target as a hash. Overwrite to provide
103
+ # a different result
104
+ def create_return_values
105
+ result_properties
106
+ end
107
+
108
+ # Fetches all result properties for called target and returns them as hash
109
+ def result_properties
110
+ result = ant_properties.map do |p|
111
+ rp = result_property_values.find { |rp| rp.matcher === p[0] }
112
+ rp ? [p[0], rp.parse(p[1])].flatten : nil
113
+ end.compact.inject({}) do |h,v|
114
+ k = v.shift
115
+ h[k] ||= []
116
+ h[k].concat(v)
117
+ h
118
+ end
119
+ result.each do |k,v|
120
+ result[k] = case v.size
121
+ when 0 then nil
122
+ when 1 then v[0]
123
+ else v
124
+ end
125
+ end
126
+
127
+ result
128
+ end
129
+
130
+ def mandatory_parameter
131
+ parameter.find_all {|p| p.mandatory? }
132
+ end
133
+
134
+ def symbols(params)
135
+ params.map{|p| p.symbol}
136
+ end
137
+
138
+ def ant_properties
139
+ Rjb::JavaObjectWrapper.wrap_java_object @ant.project.properties
140
+ end
141
+
142
+ def ant_references
143
+ Rjb::JavaObjectWrapper.wrap_java_object @ant.project.references
144
+ end
145
+ end
146
+
147
+
148
+
149
+ COMMA_SPLITTER = Proc.new {|value| value.to_s.split(',').map(&:strip)}
150
+
151
+ Parameter = Struct.new(:symbol, :mandatory) do
152
+ def mandatory?
153
+ mandatory
154
+ end
155
+ end
156
+
157
+ ResultValue = Struct.new(:matcher, :parser) do
158
+ def parse(value)
159
+ parser ? parser.call(value) : value
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,50 @@
1
+ require 'ivy/target'
2
+ require 'ivy/info'
3
+ require 'ivy/settings'
4
+ require 'ivy/configure'
5
+ require 'ivy/cleancache'
6
+ require 'ivy/resolve'
7
+ require 'ivy/makepom'
8
+ require 'ivy/cachepath'
9
+ #require 'ivy/listmodules'
10
+ require 'ivy/artifactproperty'
11
+ require 'ivy/artifactreport'
12
+ require 'ivy/findrevision'
13
+ require 'ivy/install'
14
+ require 'ivy/buildnumber'
15
+ require 'ivy/retrieve'
16
+ require 'ivy/publish'
17
+ require 'ivy/report'
18
+ require 'ivy/buildlist'
19
+
20
+ =begin
21
+ finished
22
+ * info
23
+ * settings
24
+ * configure
25
+ * cleancache
26
+ * buildnumber
27
+ * findrevision
28
+ * cachepath
29
+ * artifactreport
30
+ * resolve
31
+ * makepom
32
+ * retrieve
33
+ * publish
34
+ * artifactproperty
35
+ * report
36
+ o Using yEd to layout report graphs
37
+ * buildlist
38
+
39
+ TODO
40
+ * deliver
41
+ * install
42
+ * repreport
43
+
44
+ not working:
45
+ * listmodules
46
+
47
+ makes no sense:
48
+ * cachefileset
49
+ * var
50
+ =end