iron_hammer 0.3.5 → 0.3.6
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/Rakefile +2 -1
- data/lib/iron_hammer/projects/dependency.rb +12 -3
- data/lib/iron_hammer/projects/project_file.rb +6 -10
- data/lib/iron_hammer/tasks.rb +16 -8
- data/lib/iron_hammer/utils/ivy_builder.rb +47 -6
- metadata +2 -2
data/Rakefile
CHANGED
@@ -12,7 +12,7 @@ $hoe = Hoe.spec 'iron_hammer' do
|
|
12
12
|
self.rubyforge_name = self.name
|
13
13
|
self.extra_deps = [['rubyzip2','>= 2.0.1'],
|
14
14
|
['builder', '>= 2.1.2']]
|
15
|
-
self.version = '0.3.
|
15
|
+
self.version = '0.3.6'
|
16
16
|
end
|
17
17
|
|
18
18
|
require 'newgem/tasks'
|
@@ -21,3 +21,4 @@ Dir['tasks/**/*.rake'].each { |t| load t }
|
|
21
21
|
# TODO - want other tests/tasks run by default? Add them to the list
|
22
22
|
# remove_task :default
|
23
23
|
# task :default => [:spec, :features]
|
24
|
+
|
@@ -3,19 +3,28 @@ module IronHammer
|
|
3
3
|
class Dependency
|
4
4
|
attr_accessor :name
|
5
5
|
attr_accessor :version
|
6
|
-
|
6
|
+
|
7
7
|
def initialize params = {}
|
8
8
|
@name = params[:name] || raise(ArgumentError.new('you must specify a name'))
|
9
9
|
@version = params[:version]
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
def == other
|
13
13
|
@name == other.name && @version == other.version
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
def to_s
|
17
17
|
"[Dependency name=#{@name} version=#{@version}]"
|
18
18
|
end
|
19
|
+
|
20
|
+
def self.from_reference reference
|
21
|
+
includes = reference.attribute(:Include).value
|
22
|
+
name = includes.split(', ')[0]
|
23
|
+
match = includes.match /Version=(.+?),/
|
24
|
+
version = match[1] if match
|
25
|
+
Dependency.new :name => name, :version => version
|
26
|
+
end
|
19
27
|
end
|
20
28
|
end
|
21
29
|
end
|
30
|
+
|
@@ -20,7 +20,7 @@ module IronHammer
|
|
20
20
|
@type = params[:type] || DllProject
|
21
21
|
raise ArgumentError.new('type must be a Class') unless @type.class == Class
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
def self.type_of *path
|
25
25
|
self.parse(IronHammer::Utils::FileSystem::read_file(*path)).type
|
26
26
|
end
|
@@ -31,24 +31,20 @@ module IronHammer
|
|
31
31
|
result || (guids.include?(ProjectTypes::guid_for(current)) && current)
|
32
32
|
end) || DllProject)
|
33
33
|
end
|
34
|
-
|
34
|
+
|
35
35
|
def self.guids_from xml
|
36
36
|
doc = REXML::Document.new xml
|
37
37
|
elem = doc && doc.elements[GUID_PATH]
|
38
38
|
guids = ((elem && elem.text) || '').split(';').collect { |e| e.upcase }
|
39
39
|
end
|
40
|
-
|
40
|
+
|
41
41
|
def self.dependencies_of xml
|
42
42
|
doc = REXML::Document.new xml
|
43
|
-
references = doc && doc.get_elements(REFERENCE_PATH)
|
43
|
+
references = doc && doc.get_elements(REFERENCE_PATH)
|
44
44
|
references.map do |reference|
|
45
|
-
|
46
|
-
name = includes.split(', ')[0]
|
47
|
-
match = includes.match /Version=(.+?),/
|
48
|
-
version = match[1] if match
|
49
|
-
Dependency.new :name => name, :version => version
|
45
|
+
Dependency.from_reference reference
|
50
46
|
end
|
51
|
-
|
47
|
+
|
52
48
|
end
|
53
49
|
end unless defined? ProjectFile
|
54
50
|
end
|
data/lib/iron_hammer/tasks.rb
CHANGED
@@ -16,14 +16,14 @@ namespace :iron do
|
|
16
16
|
task :build => [:clean, :initialize] do
|
17
17
|
sh @hammer.build @anvil.solution
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
namespace :test do
|
21
21
|
desc 'Runs the unit tests'
|
22
22
|
task :unit => [:build] do
|
23
23
|
sh @hammer.test *@anvil.test_projects
|
24
24
|
end
|
25
25
|
end
|
26
|
-
|
26
|
+
|
27
27
|
namespace :ivy do
|
28
28
|
desc 'Generates ivy-<project_name>.xml for all dll projects of the solution'
|
29
29
|
task :generate => [:initialize] do
|
@@ -32,18 +32,26 @@ namespace :iron do
|
|
32
32
|
builder.write_to "ivy-#{project.name}.xml"
|
33
33
|
end
|
34
34
|
end
|
35
|
-
|
35
|
+
|
36
|
+
desc 'Retrieves all project dependencies from ivy repository and modify project csproj to reference them'
|
36
37
|
task :retrieve => [:generate] do
|
37
38
|
@anvil.dll_projects.each do |project|
|
38
|
-
|
39
|
-
|
39
|
+
xml = "ivy-#{project.name}.xml"
|
40
|
+
builder = IvyBuilder.new project
|
41
|
+
|
42
|
+
sh builder.retrieve xml
|
43
|
+
|
44
|
+
builder.modify_csproj
|
40
45
|
end
|
41
46
|
end
|
42
|
-
|
47
|
+
|
48
|
+
desc 'Publish project assemblies to ivy repository'
|
43
49
|
task :publish => [:generate] do
|
44
50
|
@anvil.dll_projects.each do |project|
|
45
|
-
|
46
|
-
|
51
|
+
xml = "ivy-#{project.name}.xml"
|
52
|
+
builder = IvyBuilder.new project
|
53
|
+
|
54
|
+
sh builder.retrieve xml
|
47
55
|
end
|
48
56
|
end
|
49
57
|
end
|
@@ -1,13 +1,16 @@
|
|
1
1
|
require 'builder'
|
2
|
+
require 'rexml/document'
|
2
3
|
module IronHammer
|
3
4
|
module Utils
|
4
5
|
class IvyBuilder
|
5
|
-
|
6
|
+
|
6
7
|
def initialize project
|
7
8
|
@project = project
|
8
|
-
@organisation = ORGANISATION
|
9
|
-
|
10
|
-
|
9
|
+
@organisation = defined?(ORGANISATION)? ORGANISATION : 'org'
|
10
|
+
@ivy_jar = defined?(IVY_JAR)? IVY_JAR : 'ivy.jar'
|
11
|
+
@ivy_settings = defined?(IVY_SETTINGS)? IVY_SETTINGS : 'ivysettings.xml'
|
12
|
+
end
|
13
|
+
|
11
14
|
def to_s
|
12
15
|
xml = Builder::XmlMarkup.new(:indent => 2)
|
13
16
|
xml.tag! 'ivy-module', :version => '2.0' do
|
@@ -15,7 +18,7 @@ module IronHammer
|
|
15
18
|
xml.publications do
|
16
19
|
xml.artifact :name => @project.name, :type => 'dll'
|
17
20
|
end if @project.is_a? DllProject
|
18
|
-
|
21
|
+
|
19
22
|
xml.dependencies do
|
20
23
|
@project.dependencies.each do |dependency|
|
21
24
|
xml.dependency :org => @organisation, :name => dependency.name, :rev => dependency.version
|
@@ -23,10 +26,48 @@ module IronHammer
|
|
23
26
|
end unless @project.dependencies.empty?
|
24
27
|
end
|
25
28
|
end
|
26
|
-
|
29
|
+
|
30
|
+
def retrieve ivy_file
|
31
|
+
"java -jar #{@ivy_jar}
|
32
|
+
-ivy #{ivy_file}
|
33
|
+
-settings #{@ivy_settings}
|
34
|
+
-retrieve Libraries/[artifact].[ext]".gsub(/\s+/, ' ')
|
35
|
+
end
|
36
|
+
|
37
|
+
def publish ivy_file
|
38
|
+
"java -jar #{@ivy_jar}
|
39
|
+
-ivy #{ivy_file}
|
40
|
+
-settings #{@ivy_settings}
|
41
|
+
-publish default
|
42
|
+
-publishpattern delivery/[artifact].[ext]
|
43
|
+
-revision 1.0.0.0
|
44
|
+
-overwrite true".gsub(/\s+/, ' ')
|
45
|
+
end
|
46
|
+
|
27
47
|
def write_to file
|
28
48
|
File.open(file, "w") { |f| f.write to_s }
|
29
49
|
end
|
50
|
+
|
51
|
+
def modify_csproj
|
52
|
+
xml = FileSystem.read_file @project.path, @project.csproj
|
53
|
+
doc = REXML::Document.new xml
|
54
|
+
references = doc.get_elements(ProjectFile::REFERENCE_PATH)
|
55
|
+
references.each do |reference|
|
56
|
+
reference.elements['SpecificVersion'] = REXML::Element.new('SpecificVersion').add_text('false')
|
57
|
+
reference.elements['HintPath'] = REXML::Element.new('HintPath').
|
58
|
+
add_text("..\\Libraries\\#{artifact_for reference}")
|
59
|
+
end
|
60
|
+
|
61
|
+
FileSystem.write! :path => @project.path, :name => @project.csproj, :content => doc.to_s
|
62
|
+
end
|
63
|
+
|
64
|
+
private
|
65
|
+
def artifact_for reference
|
66
|
+
dependency = Dependency.from_reference reference
|
67
|
+
libraries_dir = Dir.new(File.join(@project.path, '..', 'Libraries'))
|
68
|
+
libraries_dir.find {|f| f.match "#{dependency.name}\\.(dll|exe)"}
|
69
|
+
end
|
30
70
|
end
|
31
71
|
end
|
32
72
|
end
|
73
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: iron_hammer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mozair Alves do Carmo Junior
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-29 00:00:00 -02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|