ivy4r 0.2.0
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/History.txt +12 -0
- data/Manifest.txt +36 -0
- data/README.txt +92 -0
- data/Rakefile +25 -0
- data/bin/ivy4r +3 -0
- data/lib/buildr/ivy_extension.rb +566 -0
- data/lib/ivy/artifactproperty.rb +34 -0
- data/lib/ivy/artifactreport.rb +24 -0
- data/lib/ivy/buildlist.rb +37 -0
- data/lib/ivy/buildnumber.rb +34 -0
- data/lib/ivy/cachepath.rb +30 -0
- data/lib/ivy/cleancache.rb +20 -0
- data/lib/ivy/configure.rb +29 -0
- data/lib/ivy/findrevision.rb +34 -0
- data/lib/ivy/info.rb +36 -0
- data/lib/ivy/listmodules.rb +35 -0
- data/lib/ivy/makepom.rb +23 -0
- data/lib/ivy/publish.rb +37 -0
- data/lib/ivy/report.rb +33 -0
- data/lib/ivy/resolve.rb +44 -0
- data/lib/ivy/retrieve.rb +27 -0
- data/lib/ivy/settings.rb +15 -0
- data/lib/ivy/target.rb +128 -0
- data/lib/ivy/targets.rb +49 -0
- data/lib/ivy4r.rb +176 -0
- data/test/buildlist/p1/buildfile +0 -0
- data/test/buildlist/p1/ivy.xml +7 -0
- data/test/buildlist/sub/p2/buildfile +0 -0
- data/test/buildlist/sub/p2/ivy.xml +11 -0
- data/test/buildlist/sub/p3/buildfile +0 -0
- data/test/buildlist/sub/p3/ivy.xml +11 -0
- data/test/ivy/ivysettings.xml +11 -0
- data/test/ivy/ivytest.xml +18 -0
- data/test/ivy/test_target.rb +97 -0
- data/test/ivy/test_targets.rb +36 -0
- data/test/test_ivy4r.rb +196 -0
- metadata +113 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'ivy/target'
|
2
|
+
|
3
|
+
module Ivy
|
4
|
+
class Cachepath < Ivy::Target
|
5
|
+
def parameter
|
6
|
+
[
|
7
|
+
Parameter.new(:pathid, true),
|
8
|
+
Parameter.new(:conf, false),
|
9
|
+
Parameter.new(:inline, false),
|
10
|
+
Parameter.new(:organisation, false),
|
11
|
+
Parameter.new(:module, false),
|
12
|
+
Parameter.new(:revision, false),
|
13
|
+
Parameter.new(:branch, false),
|
14
|
+
Parameter.new(:type, false),
|
15
|
+
Parameter.new(:settingsRef, false),
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_return_values
|
20
|
+
path = ant_references.find { |current| current[0] == params[:pathid] }[1]
|
21
|
+
raise "Could not get path for confs: #{params.inspect}" unless path && path.respond_to?(:list)
|
22
|
+
path.list.map {|a| a.to_s }
|
23
|
+
end
|
24
|
+
|
25
|
+
protected
|
26
|
+
def execute_ivy
|
27
|
+
call_nested :ivy_cachepath => params
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'ivy/target'
|
2
|
+
|
3
|
+
module Ivy
|
4
|
+
class Cleancache < Ivy::Target
|
5
|
+
def parameter
|
6
|
+
[
|
7
|
+
Parameter.new(:settingsRef, false)
|
8
|
+
]
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
def execute_ivy
|
13
|
+
call_nested :ivy_cleancache => params
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_return_values
|
17
|
+
nil
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'ivy/target'
|
2
|
+
|
3
|
+
module Ivy
|
4
|
+
class Configure < Ivy::Target
|
5
|
+
def parameter
|
6
|
+
[
|
7
|
+
Parameter.new(:id, false),
|
8
|
+
Parameter.new(:file, false),
|
9
|
+
Parameter.new(:url, false),
|
10
|
+
Parameter.new(:host, false),
|
11
|
+
Parameter.new(:realm,false),
|
12
|
+
Parameter.new(:username, false),
|
13
|
+
Parameter.new(:passwd, false)
|
14
|
+
]
|
15
|
+
end
|
16
|
+
|
17
|
+
def result_property_values
|
18
|
+
property = params[:id] || 'ivy.instance'
|
19
|
+
[
|
20
|
+
ResultValue.new(/.*\.#{property}/, nil)
|
21
|
+
]
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
25
|
+
def execute_ivy
|
26
|
+
call_nested :ivy_configure => params
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'ivy/target'
|
2
|
+
|
3
|
+
module Ivy
|
4
|
+
class Findrevision < 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(:property, false),
|
12
|
+
Parameter.new(:settingsRef, false)
|
13
|
+
]
|
14
|
+
end
|
15
|
+
|
16
|
+
def result_property_values
|
17
|
+
property = params[:property] || 'ivy.revision'
|
18
|
+
[
|
19
|
+
ResultValue.new("#{property}", nil)
|
20
|
+
]
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
def execute_ivy
|
25
|
+
call_nested :ivy_findrevision => params
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_return_values
|
29
|
+
values = result_properties.values
|
30
|
+
raise "Could not retrieve revision for '#{params.inspect}'" if values.size > 1
|
31
|
+
values.size == 1 ? values[0] : nil
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/ivy/info.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'ivy/target'
|
2
|
+
|
3
|
+
module Ivy
|
4
|
+
class Info < Ivy::Target
|
5
|
+
def parameter
|
6
|
+
[
|
7
|
+
Parameter.new(:file, true),
|
8
|
+
Parameter.new(:organisation, false),
|
9
|
+
Parameter.new(:module, false),
|
10
|
+
Parameter.new(:branch, false),
|
11
|
+
Parameter.new(:revision, false),
|
12
|
+
Parameter.new(:property, false),
|
13
|
+
Parameter.new(:settingsRef, false)
|
14
|
+
]
|
15
|
+
end
|
16
|
+
|
17
|
+
def result_property_values
|
18
|
+
property = params[:property] || 'ivy'
|
19
|
+
[
|
20
|
+
ResultValue.new("#{property}.organisation", nil),
|
21
|
+
ResultValue.new("#{property}.module", nil),
|
22
|
+
ResultValue.new("#{property}.branch", nil),
|
23
|
+
ResultValue.new("#{property}.revision", nil),
|
24
|
+
ResultValue.new("#{property}.status", nil),
|
25
|
+
ResultValue.new(/#{property}.extra\..*/, nil),
|
26
|
+
ResultValue.new("#{property}.configurations", Ivy::COMMA_SPLITTER),
|
27
|
+
ResultValue.new("#{property}.public.configurations", Ivy::COMMA_SPLITTER)
|
28
|
+
]
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
def execute_ivy
|
33
|
+
call_nested :ivy_info => params
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -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
|
data/lib/ivy/makepom.rb
ADDED
@@ -0,0 +1,23 @@
|
|
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(:nested, true),
|
10
|
+
Parameter.new(:settingsRef, false)
|
11
|
+
]
|
12
|
+
end
|
13
|
+
|
14
|
+
protected
|
15
|
+
def execute_ivy
|
16
|
+
call_nested :ivy_makepom => params
|
17
|
+
end
|
18
|
+
|
19
|
+
def create_return_values
|
20
|
+
IO.read(params[:pomfile])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/ivy/publish.rb
ADDED
@@ -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
|
data/lib/ivy/resolve.rb
ADDED
@@ -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
|
data/lib/ivy/retrieve.rb
ADDED
@@ -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
|
data/lib/ivy/settings.rb
ADDED
data/lib/ivy/target.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'facets'
|
2
|
+
|
3
|
+
module Ivy
|
4
|
+
|
5
|
+
# Base class with general logic to call a Ivy ant target
|
6
|
+
class Target
|
7
|
+
attr_reader :params
|
8
|
+
|
9
|
+
def initialize(ant)
|
10
|
+
@ant = ant
|
11
|
+
end
|
12
|
+
|
13
|
+
# Executes this ivy target with given parameters returning a result.
|
14
|
+
# __params__ can be a single Hash or an Array with or without a Hash as last value.
|
15
|
+
# every value in array will be converted to string and set to __true__.
|
16
|
+
#
|
17
|
+
# I.e. <tt>[:force, 'validate', {'name' => 'Blub'}]</tt>
|
18
|
+
# results in parameters <tt>{'force'=>true, 'validate' => true, 'name'=>'Blub'}</tt>
|
19
|
+
def execute(*params)
|
20
|
+
@params = {}
|
21
|
+
params.pop.each { |key, value| @params[key] = value } if Hash === params.last
|
22
|
+
params.each { |key| @params[key.to_s] = true }
|
23
|
+
|
24
|
+
validate
|
25
|
+
before_hook
|
26
|
+
execute_ivy
|
27
|
+
create_return_values
|
28
|
+
ensure
|
29
|
+
after_hook
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
# Validates provided hash of parameters, raises an exception if any mandatory parameter is
|
35
|
+
# missing or an unknown parameter has been provided.
|
36
|
+
def validate
|
37
|
+
unknown = params.keys - symbols(parameter)
|
38
|
+
raise ArgumentError, "Unknown parameters '#{unknown.join(', ')}' for #{self.class}" unless unknown.empty?
|
39
|
+
missing = symbols(mandatory_parameter).find_all { |p| params.keys.member?(p) == false }
|
40
|
+
raise ArgumentError, "Missing mandatory parameters '#{missing.join(', ')}' for #{self.class}" unless missing.empty?
|
41
|
+
end
|
42
|
+
|
43
|
+
# Hook method called after validation but before #execute_ivy
|
44
|
+
# overwrite for special actions needed
|
45
|
+
def before_hook
|
46
|
+
end
|
47
|
+
|
48
|
+
# After hook is always called for #execute within +ensure+ block
|
49
|
+
# overwrite for special clean up
|
50
|
+
def after_hook
|
51
|
+
end
|
52
|
+
|
53
|
+
# Helper to call the nested ant targets recursively if nessecary. Must be called within +do+ +end+
|
54
|
+
# block of ant target to work.
|
55
|
+
def call_nested(nested)
|
56
|
+
if nested
|
57
|
+
nested.each do |method, paramlist|
|
58
|
+
[paramlist].flatten.each do |params|
|
59
|
+
if params.member? :nested
|
60
|
+
p = params.dup
|
61
|
+
nest = p.delete(:nested)
|
62
|
+
@ant.send(method, p, &lambda {call_nested(nest)})
|
63
|
+
else
|
64
|
+
@ant.send(method, params)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Creates the result for the execution by default it iterates of the ant properties and fetches
|
72
|
+
# all properties that match the result properties for target as a hash. Overwrite to provide
|
73
|
+
# a different result
|
74
|
+
def create_return_values
|
75
|
+
result_properties
|
76
|
+
end
|
77
|
+
|
78
|
+
# Fetches all result properties for called target and returns them as hash
|
79
|
+
def result_properties
|
80
|
+
result = ant_properties.map do |p|
|
81
|
+
rp = result_property_values.find { |rp| rp.matcher === p[0] }
|
82
|
+
rp ? [p[0], rp.parse(p[1])].flatten : nil
|
83
|
+
end.compact.to_h(:multi)
|
84
|
+
result.update_values do |v|
|
85
|
+
case v.size
|
86
|
+
when 0
|
87
|
+
nil
|
88
|
+
when 1
|
89
|
+
v[0]
|
90
|
+
else
|
91
|
+
v
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
result
|
96
|
+
end
|
97
|
+
|
98
|
+
def mandatory_parameter
|
99
|
+
parameter.find_all {|p| p.mandatory? }
|
100
|
+
end
|
101
|
+
|
102
|
+
def symbols(params)
|
103
|
+
params.map{|p| p.symbol}
|
104
|
+
end
|
105
|
+
|
106
|
+
def ant_properties
|
107
|
+
@ant.project.properties
|
108
|
+
end
|
109
|
+
|
110
|
+
def ant_references
|
111
|
+
@ant.project.references
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
COMMA_SPLITTER = Proc.new {|value| value.to_s.split(',').map(&:strip)}
|
116
|
+
|
117
|
+
Parameter = Struct.new(:symbol, :mandatory) do
|
118
|
+
def mandatory?
|
119
|
+
mandatory
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
ResultValue = Struct.new(:matcher, :parser) do
|
124
|
+
def parse(value)
|
125
|
+
parser ? parser.call(value) : value
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
data/lib/ivy/targets.rb
ADDED
@@ -0,0 +1,49 @@
|
|
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/buildnumber'
|
14
|
+
require 'ivy/retrieve'
|
15
|
+
require 'ivy/publish'
|
16
|
+
require 'ivy/report'
|
17
|
+
require 'ivy/buildlist'
|
18
|
+
|
19
|
+
=begin
|
20
|
+
finished
|
21
|
+
* info
|
22
|
+
* settings
|
23
|
+
* configure
|
24
|
+
* cleancache
|
25
|
+
* buildnumber
|
26
|
+
* findrevision
|
27
|
+
* cachepath
|
28
|
+
* artifactreport
|
29
|
+
* resolve
|
30
|
+
* makepom
|
31
|
+
* retrieve
|
32
|
+
* publish
|
33
|
+
* artifactproperty
|
34
|
+
* report
|
35
|
+
o Using yEd to layout report graphs
|
36
|
+
* buildlist
|
37
|
+
|
38
|
+
TODO
|
39
|
+
* deliver
|
40
|
+
* install
|
41
|
+
* repreport
|
42
|
+
|
43
|
+
not working:
|
44
|
+
* listmodules
|
45
|
+
|
46
|
+
makes no sense:
|
47
|
+
* cachefileset
|
48
|
+
* var
|
49
|
+
=end
|