buildr 1.2.3 → 1.2.4
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/CHANGELOG +19 -2
- data/lib/buildr.rb +17 -170
- data/lib/buildr/cobertura.rb +6 -4
- data/lib/core/application.rb +180 -0
- data/lib/core/checks.rb +2 -2
- data/lib/core/common.rb +6 -5
- data/lib/core/generate.rb +29 -17
- data/lib/core/project.rb +13 -0
- data/lib/java/ant.rb +1 -0
- data/lib/java/artifact.rb +1 -0
- data/lib/java/compile.rb +1 -1
- data/lib/java/eclipse.rb +2 -3
- data/lib/java/idea.rb +1 -2
- data/lib/java/packaging.rb +35 -3
- data/lib/java/pom.rb +15 -8
- data/lib/java/test.rb +26 -8
- data/lib/tasks/zip.rb +38 -16
- metadata +3 -2
data/CHANGELOG
CHANGED
@@ -1,7 +1,24 @@
|
|
1
|
+
1.2.4 (8/3/2007)
|
2
|
+
* Added: Forking option for JUnit test framework: :once to fork for each project, :each to fork for each test case, and false to not fork. (Tammo van Lessen)
|
3
|
+
* Added: Path traversal in Zip, so zip.path("foo/bar").path("..") returns zip.path("foo").
|
4
|
+
* Fixed: JUnit test framework output shows errors in console, more readable when forking is on (Tammo van Lessen).
|
5
|
+
* Fixed: Cobertura reports not working (Anatol Pomozov).
|
6
|
+
* Fixed: Zip creates funky directory name when using :as (Tommy Mason).
|
7
|
+
* Fixed: package_as_tar incorrectly calling with(options) (Tommy Mason).
|
8
|
+
* Fixed: Loading of everything which should get rid of "already initialized constant VERSION" warning.
|
9
|
+
* Fixed: --requires option now works properly when using buildr.
|
10
|
+
* Fixed: MANIFEST.MF lines must not be longer than 72 characters (Tommy Mason).
|
11
|
+
* Fixed: Creating manifest from array does not place Name first.
|
12
|
+
* Fixed: Complain if no remote repositories defined, add at least one repository when creating from POM, POM reader fails if dependencyManagement missing (Jean-Baptiste Quenot).
|
13
|
+
* Fixed: Not looking for buildfile in parent directory.
|
14
|
+
* Fixed: Project's compile/test task looking for options in local task of same name.
|
15
|
+
* Fixed: ZIP/JAR/WAR include directory entries in some cases and not others.
|
16
|
+
* Fixed: Computation of relative paths in Eclipse project generation (Cameron Pope)
|
17
|
+
|
1
18
|
1.2.3 (7/26/2007)
|
2
|
-
* Added: Get your buildfile created form existing POM, just run buildr on existing Maven project (Anatol Pomozov).
|
19
|
+
* Added: Get your buildfile created form existing POM, just run buildr on existing Maven project (Anatol Pomozov).
|
3
20
|
* Added: package(:tar), package(:tgz), TarballTask dn TarTask (Tommy Knowlton).
|
4
|
-
* Changed: The ArchiveTask needs no introduction: it's a base task that provides common functionality for ZipTask, TarTask and friends.
|
21
|
+
* Changed: The ArchiveTask needs no introduction: it's a base task that provides common functionality for ZipTask, TarTask and friends.
|
5
22
|
* Fixed: Release runs buildr instead of buildr.cmd on Windows (Chris Power).
|
6
23
|
* Fixed: Cobertura reports broken (Anatol Pomozov).
|
7
24
|
|
data/lib/buildr.rb
CHANGED
@@ -24,159 +24,25 @@ require "builder"
|
|
24
24
|
|
25
25
|
|
26
26
|
module Buildr
|
27
|
-
VERSION = "1.2.
|
27
|
+
VERSION = "1.2.4".freeze # unless const_defined?(:VERSION)
|
28
28
|
end
|
29
29
|
|
30
|
+
# Now it's safe to load Buildr, after we set up the Rake Application.
|
31
|
+
require "core/application"
|
32
|
+
require "core/project"
|
33
|
+
require "core/build"
|
34
|
+
require "core/help"
|
35
|
+
require "core/generate"
|
30
36
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
unless defined?(Rake)
|
35
|
-
require "rake"
|
36
|
-
|
37
|
-
module Buildr
|
38
|
-
class Application < Rake::Application #:nodoc:
|
39
|
-
|
40
|
-
DEFAULT_BUILDFILES = ["buildfile", "Buildfile"] + DEFAULT_RAKEFILES
|
41
|
-
|
42
|
-
OPTIONS = [ # :nodoc:
|
43
|
-
['--help', '-H', GetoptLong::NO_ARGUMENT,
|
44
|
-
"Display this help message."],
|
45
|
-
['--nosearch', '-N', GetoptLong::NO_ARGUMENT,
|
46
|
-
"Do not search parent directories for the buildfile."],
|
47
|
-
['--quiet', '-q', GetoptLong::NO_ARGUMENT,
|
48
|
-
"Do not log messages to standard output."],
|
49
|
-
['--buildfile', '-f', GetoptLong::OPTIONAL_ARGUMENT,
|
50
|
-
"Use FILE as the buildfile."],
|
51
|
-
['--require', '-r', GetoptLong::REQUIRED_ARGUMENT,
|
52
|
-
"Require MODULE before executing buildfile."],
|
53
|
-
['--trace', '-t', GetoptLong::NO_ARGUMENT,
|
54
|
-
"Turn on invoke/execute tracing, enable full backtrace."],
|
55
|
-
['--verbose', '-v', GetoptLong::NO_ARGUMENT,
|
56
|
-
"Log message to standard output (default)."],
|
57
|
-
['--version', '-V', GetoptLong::NO_ARGUMENT,
|
58
|
-
"Display the program version."],
|
59
|
-
['--freeze', "-F", GetoptLong::NO_ARGUMENT,
|
60
|
-
"Freezes the Buildfile so it always uses Buildr version #{Buildr::VERSION}"],
|
61
|
-
['--unfreeze', "-U", GetoptLong::NO_ARGUMENT,
|
62
|
-
"Unfreezes the Buildfile to use the latest version of Buildr"]
|
63
|
-
]
|
64
|
-
|
65
|
-
def initialize()
|
66
|
-
super
|
67
|
-
@rakefiles = DEFAULT_BUILDFILES
|
68
|
-
@name = "Buildr"
|
69
|
-
opts = GetoptLong.new(*command_line_options)
|
70
|
-
opts.each { |opt, value| do_option(opt, value) }
|
71
|
-
collect_tasks
|
72
|
-
end
|
73
|
-
|
74
|
-
def run()
|
75
|
-
standard_exception_handling do
|
76
|
-
load_buildfile
|
77
|
-
top_level
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def do_option(opt, value)
|
82
|
-
case opt
|
83
|
-
when '--help'
|
84
|
-
help
|
85
|
-
exit
|
86
|
-
when "--buildfile"
|
87
|
-
@rakefiles.clear
|
88
|
-
@rakefiles << value
|
89
|
-
when '--version'
|
90
|
-
puts "Buildr, version #{Buildr::VERSION}"
|
91
|
-
exit
|
92
|
-
when "--freeze"
|
93
|
-
find_buildfile
|
94
|
-
puts "Freezing the Buildfile so it always uses Buildr version #{Buildr::VERSION}"
|
95
|
-
gem =
|
96
|
-
original = File.read(rakefile)
|
97
|
-
if original =~ /gem\s*(["'])buildr\1/
|
98
|
-
modified = original.sub(/gem\s*(["'])buildr\1\s*,\s*(["']).*\2/, %{gem "buildr", "#{Buildr::VERSION}"})
|
99
|
-
else
|
100
|
-
modified = %{gem "buildr", "#{Buildr::VERSION}"\n} + original
|
101
|
-
end
|
102
|
-
File.open(rakefile, "w") { |file| file.write modified }
|
103
|
-
exit
|
104
|
-
when "--unfreeze"
|
105
|
-
find_buildfile
|
106
|
-
puts "Unfreezing the Buildfile to use the latest version of Buildr from your Gems repository."
|
107
|
-
modified = File.read(rakefile).sub(/^\s*gem\s*(["'])buildr\1.*\n/, "")
|
108
|
-
File.open(rakefile, "w") { |file| file.write modified }
|
109
|
-
exit
|
110
|
-
when '--require', "--nosearch", "--quiet", "--trace", "--verbose"
|
111
|
-
super
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def find_buildfile()
|
116
|
-
here = Dir.pwd
|
117
|
-
while ! have_rakefile
|
118
|
-
Dir.chdir("..")
|
119
|
-
if Dir.pwd == here || options.nosearch
|
120
|
-
error = "No Buildfile found (looking for: #{@rakefiles.join(', ')})"
|
121
|
-
if STDIN.isatty
|
122
|
-
chdir(original_dir) { task("generate").invoke }
|
123
|
-
exit 1
|
124
|
-
else
|
125
|
-
raise error
|
126
|
-
end
|
127
|
-
end
|
128
|
-
here = Dir.pwd
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
def load_buildfile()
|
133
|
-
find_buildfile
|
134
|
-
puts "(in #{Dir.pwd})"
|
135
|
-
load File.expand_path(@rakefile) if @rakefile != ''
|
136
|
-
load_imports
|
137
|
-
end
|
138
|
-
|
139
|
-
def usage()
|
140
|
-
puts "Buildr #{Buildr::VERSION}"
|
141
|
-
puts
|
142
|
-
puts "Usage:"
|
143
|
-
puts " buildr [-f buildfile] {options} targets..."
|
144
|
-
end
|
145
|
-
|
146
|
-
def help()
|
147
|
-
usage
|
148
|
-
puts
|
149
|
-
puts "Options:"
|
150
|
-
OPTIONS.sort.each do |long, short, mode, desc|
|
151
|
-
if mode == GetoptLong::REQUIRED_ARGUMENT
|
152
|
-
if desc =~ /\b([A-Z]{2,})\b/
|
153
|
-
long = long + "=#{$1}"
|
154
|
-
end
|
155
|
-
end
|
156
|
-
printf " %-20s (%s)\n", long, short
|
157
|
-
printf " %s\n", desc
|
158
|
-
end
|
159
|
-
puts
|
160
|
-
puts "For help with your buildfile:"
|
161
|
-
puts " buildr help"
|
162
|
-
end
|
163
|
-
|
164
|
-
def command_line_options
|
165
|
-
OPTIONS.collect { |lst| lst[0..-2] }
|
166
|
-
end
|
167
|
-
|
168
|
-
end
|
169
|
-
|
170
|
-
Rake.application = Application.new
|
171
|
-
end
|
172
|
-
end
|
173
|
-
|
37
|
+
require "tasks/concat.rb"
|
38
|
+
require "tasks/zip.rb"
|
39
|
+
require "tasks/tar.rb"
|
174
40
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
41
|
+
require "java/compile"
|
42
|
+
require "java/test"
|
43
|
+
require "java/packaging"
|
44
|
+
require "java/eclipse"
|
45
|
+
require "java/idea"
|
180
46
|
|
181
47
|
|
182
48
|
# Methods defined in Buildr are both instance methods (e.g. when included in Project)
|
@@ -190,24 +56,5 @@ end
|
|
190
56
|
# Project has visibility to everything in the Buildr namespace. (See above for constants)
|
191
57
|
class Project ; include Buildr ; end
|
192
58
|
|
193
|
-
|
194
|
-
|
195
|
-
@loaded_features_to_ignore = $LOADED_FEATURES
|
196
|
-
end
|
197
|
-
|
198
|
-
# Load the settings files.
|
199
|
-
[ File.expand_path("buildr.rb", Gem::user_home), "buildr.rb" ].each { |file| load file if File.exist?(file) }
|
200
|
-
[ File.expand_path("buildr.rake", Gem::user_home), File.expand_path("buildr.rake") ].each do |file|
|
201
|
-
if File.exist?(file)
|
202
|
-
warn "Please use '#{file.ext('rb')}' instead of '#{file}'"
|
203
|
-
load file
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
#Load local tasks that can be used in the Buildfile.
|
208
|
-
Dir["#{Dir.pwd}/tasks/*.rake"].each do |file|
|
209
|
-
unless $LOADED_FEATURES.include?(file)
|
210
|
-
load file
|
211
|
-
$LOADED_FEATURES << file
|
212
|
-
end
|
213
|
-
end
|
59
|
+
# Load .rake files form tasks directory, and buildr.rb files.
|
60
|
+
Buildr.load_tasks_and_local_files
|
data/lib/buildr/cobertura.rb
CHANGED
@@ -6,7 +6,8 @@ module Buildr
|
|
6
6
|
|
7
7
|
class << self
|
8
8
|
|
9
|
-
REQUIRES = ["cobertura:cobertura:jar:1.
|
9
|
+
REQUIRES = ["net.sourceforge.cobertura:cobertura:jar:1.9", "log4j:log4j:jar:1.2.9",
|
10
|
+
"asm:asm:jar:2.2.1", "asm:asm-tree:jar:2.2.1", "oro:oro:jar:2.0.8"]
|
10
11
|
|
11
12
|
def requires()
|
12
13
|
@requires ||= Buildr.artifacts(REQUIRES).each(&:invoke).map(&:to_s)
|
@@ -41,15 +42,16 @@ module Buildr
|
|
41
42
|
# We now have two target directories with bytecode. It would make sense to remove compile.target
|
42
43
|
# and add instrumented instead, but apparently Cobertura only creates some of the classes, so
|
43
44
|
# we need both directories and instrumented must come first.
|
44
|
-
project.test.classpath.unshift
|
45
|
+
project.test.classpath.unshift instrumented
|
45
46
|
project.test.with requires
|
47
|
+
project.test.options[:properties]["net.sourceforge.cobertura.datafile"] = data_file
|
46
48
|
project.clean { rm_rf instrumented.to_s, :verbose=>false }
|
47
49
|
end
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
51
53
|
desc "Run the test cases and produce code coverage reports in #{report_to(:html)}"
|
52
|
-
task "html"=>["instrument", "test
|
54
|
+
task "html"=>["instrument", "test"] do
|
53
55
|
puts "Creating test coverage reports in #{report_to(:html)}"
|
54
56
|
Buildr.ant "cobertura" do |ant|
|
55
57
|
ant.taskdef :classpath=>requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties"
|
@@ -62,7 +64,7 @@ module Buildr
|
|
62
64
|
end
|
63
65
|
|
64
66
|
desc "Run the test cases and produce code coverage reports in #{report_to(:xml)}"
|
65
|
-
task "xml"=>["instrument", "test
|
67
|
+
task "xml"=>["instrument", "test"] do
|
66
68
|
puts "Creating test coverage reports in #{report_to(:xml)}"
|
67
69
|
Buildr.ant "cobertura" do |ant|
|
68
70
|
ant.taskdef :classpath=>requires.join(File::PATH_SEPARATOR), :resource=>"tasks.properties"
|
@@ -0,0 +1,180 @@
|
|
1
|
+
module Buildr
|
2
|
+
|
3
|
+
# When running from +rake+, we already have an Application setup and must plug into it,
|
4
|
+
# since the top-level tasks come from there. When running from +buildr+, we get to load
|
5
|
+
# Rake and set everything up, and we use our own Application full of cool Buildr features.
|
6
|
+
unless defined?(Rake)
|
7
|
+
require "rake"
|
8
|
+
|
9
|
+
class Application < Rake::Application #:nodoc:
|
10
|
+
|
11
|
+
DEFAULT_BUILDFILES = ["buildfile", "Buildfile"] + DEFAULT_RAKEFILES
|
12
|
+
|
13
|
+
OPTIONS = [ # :nodoc:
|
14
|
+
['--help', '-H', GetoptLong::NO_ARGUMENT,
|
15
|
+
"Display this help message."],
|
16
|
+
['--nosearch', '-N', GetoptLong::NO_ARGUMENT,
|
17
|
+
"Do not search parent directories for the buildfile."],
|
18
|
+
['--quiet', '-q', GetoptLong::NO_ARGUMENT,
|
19
|
+
"Do not log messages to standard output."],
|
20
|
+
['--buildfile', '-f', GetoptLong::OPTIONAL_ARGUMENT,
|
21
|
+
"Use FILE as the buildfile."],
|
22
|
+
['--require', '-r', GetoptLong::REQUIRED_ARGUMENT,
|
23
|
+
"Require MODULE before executing buildfile."],
|
24
|
+
['--trace', '-t', GetoptLong::NO_ARGUMENT,
|
25
|
+
"Turn on invoke/execute tracing, enable full backtrace."],
|
26
|
+
['--verbose', '-v', GetoptLong::NO_ARGUMENT,
|
27
|
+
"Log message to standard output (default)."],
|
28
|
+
['--version', '-V', GetoptLong::NO_ARGUMENT,
|
29
|
+
"Display the program version."],
|
30
|
+
['--freeze', "-F", GetoptLong::NO_ARGUMENT,
|
31
|
+
"Freezes the Buildfile so it always uses Buildr version #{Buildr::VERSION}"],
|
32
|
+
['--unfreeze', "-U", GetoptLong::NO_ARGUMENT,
|
33
|
+
"Unfreezes the Buildfile to use the latest version of Buildr"]
|
34
|
+
]
|
35
|
+
|
36
|
+
def initialize()
|
37
|
+
super
|
38
|
+
@rakefiles = DEFAULT_BUILDFILES
|
39
|
+
@name = "Buildr"
|
40
|
+
@requires = []
|
41
|
+
opts = GetoptLong.new(*command_line_options)
|
42
|
+
opts.each { |opt, value| do_option(opt, value) }
|
43
|
+
collect_tasks
|
44
|
+
end
|
45
|
+
|
46
|
+
def run()
|
47
|
+
standard_exception_handling do
|
48
|
+
find_buildfile
|
49
|
+
load_buildfile
|
50
|
+
top_level
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def do_option(opt, value)
|
55
|
+
case opt
|
56
|
+
when '--help'
|
57
|
+
help
|
58
|
+
exit
|
59
|
+
when "--buildfile"
|
60
|
+
@rakefiles.clear
|
61
|
+
@rakefiles << value
|
62
|
+
when '--version'
|
63
|
+
puts "Buildr, version #{Buildr::VERSION}"
|
64
|
+
exit
|
65
|
+
when "--freeze"
|
66
|
+
find_buildfile
|
67
|
+
puts "Freezing the Buildfile so it always uses Buildr version #{Buildr::VERSION}"
|
68
|
+
gem =
|
69
|
+
original = File.read(rakefile)
|
70
|
+
if original =~ /gem\s*(["'])buildr\1/
|
71
|
+
modified = original.sub(/gem\s*(["'])buildr\1\s*,\s*(["']).*\2/, %{gem "buildr", "#{Buildr::VERSION}"})
|
72
|
+
else
|
73
|
+
modified = %{gem "buildr", "#{Buildr::VERSION}"\n} + original
|
74
|
+
end
|
75
|
+
File.open(rakefile, "w") { |file| file.write modified }
|
76
|
+
exit
|
77
|
+
when "--unfreeze"
|
78
|
+
find_buildfile
|
79
|
+
puts "Unfreezing the Buildfile to use the latest version of Buildr from your Gems repository."
|
80
|
+
modified = File.read(rakefile).sub(/^\s*gem\s*(["'])buildr\1.*\n/, "")
|
81
|
+
File.open(rakefile, "w") { |file| file.write modified }
|
82
|
+
exit
|
83
|
+
when "--require"
|
84
|
+
@requires << value
|
85
|
+
when "--nosearch", "--quiet", "--trace", "--verbose"
|
86
|
+
super
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def find_buildfile()
|
91
|
+
unless have_rakefile
|
92
|
+
here = Dir.pwd
|
93
|
+
Dir.chdir("..") do
|
94
|
+
if Dir.pwd == here || options.nosearch
|
95
|
+
error = "No Buildfile found (looking for: #{@rakefiles.join(', ')})"
|
96
|
+
if STDIN.isatty
|
97
|
+
chdir(original_dir) { task("generate").invoke }
|
98
|
+
exit 1
|
99
|
+
else
|
100
|
+
raise error
|
101
|
+
end
|
102
|
+
end
|
103
|
+
find_buildfile
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def load_buildfile()
|
109
|
+
@requires.each { |name| require name }
|
110
|
+
puts "(in #{Dir.pwd})"
|
111
|
+
load File.expand_path(@rakefile) if @rakefile != ''
|
112
|
+
load_imports
|
113
|
+
end
|
114
|
+
|
115
|
+
def usage()
|
116
|
+
puts "Buildr #{Buildr::VERSION}"
|
117
|
+
puts
|
118
|
+
puts "Usage:"
|
119
|
+
puts " buildr [-f buildfile] {options} targets..."
|
120
|
+
end
|
121
|
+
|
122
|
+
def help()
|
123
|
+
usage
|
124
|
+
puts
|
125
|
+
puts "Options:"
|
126
|
+
OPTIONS.sort.each do |long, short, mode, desc|
|
127
|
+
if mode == GetoptLong::REQUIRED_ARGUMENT
|
128
|
+
if desc =~ /\b([A-Z]{2,})\b/
|
129
|
+
long = long + "=#{$1}"
|
130
|
+
end
|
131
|
+
end
|
132
|
+
printf " %-20s (%s)\n", long, short
|
133
|
+
printf " %s\n", desc
|
134
|
+
end
|
135
|
+
puts
|
136
|
+
puts "For help with your buildfile:"
|
137
|
+
puts " buildr help"
|
138
|
+
end
|
139
|
+
|
140
|
+
def command_line_options
|
141
|
+
OPTIONS.collect { |lst| lst[0..-2] }
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
Rake.application = Buildr::Application.new
|
146
|
+
|
147
|
+
end
|
148
|
+
|
149
|
+
|
150
|
+
class << self
|
151
|
+
|
152
|
+
# Loads buildr.rake files from users home directory and project directory.
|
153
|
+
# Loads custom tasks from .rake files in tasks directory.
|
154
|
+
def load_tasks_and_local_files() #:nodoc:
|
155
|
+
return false if @build_files
|
156
|
+
# Load the settings files.
|
157
|
+
@build_files = [ File.expand_path("buildr.rb", Gem::user_home), "buildr.rb" ].select { |file| File.exist?(file) }
|
158
|
+
@build_files += [ File.expand_path("buildr.rake", Gem::user_home), File.expand_path("buildr.rake") ].
|
159
|
+
select { |file| File.exist?(file) }.each { |file| warn "Please use '#{file.ext('rb')}' instead of '#{file}'" }
|
160
|
+
#Load local tasks that can be used in the Buildfile.
|
161
|
+
@build_files += Dir["#{Dir.pwd}/tasks/*.rake"]
|
162
|
+
@build_files.each do |file|
|
163
|
+
unless $LOADED_FEATURES.include?(file)
|
164
|
+
load file
|
165
|
+
$LOADED_FEATURES << file
|
166
|
+
end
|
167
|
+
end
|
168
|
+
true
|
169
|
+
end
|
170
|
+
|
171
|
+
# :call-seq:
|
172
|
+
# build_files() => files
|
173
|
+
#
|
174
|
+
# Returns a list of build files. These are files used by the build,
|
175
|
+
def build_files()
|
176
|
+
[Rake.application.rakefile].compact + @build_files
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
end
|
data/lib/core/checks.rb
CHANGED
@@ -212,8 +212,8 @@ module Rake #:nodoc:
|
|
212
212
|
end
|
213
213
|
|
214
214
|
# :call-seq:
|
215
|
-
# contain(pattern*) => boolean
|
216
|
-
# contain(file*) => boolean
|
215
|
+
# contain?(pattern*) => boolean
|
216
|
+
# contain?(file*) => boolean
|
217
217
|
#
|
218
218
|
# For a file, returns true if the file content matches against all the arguments. An argument may be
|
219
219
|
# a string or regular expression.
|
data/lib/core/common.rb
CHANGED
@@ -19,7 +19,8 @@ class Hash
|
|
19
19
|
def from_java_properties(string)
|
20
20
|
string.gsub(/\\\n/, "").split("\n").select { |line| line =~ /^[^#].*=.*/ }.
|
21
21
|
map { |line| line.gsub(/\\[trnf\\]/) { |escaped| {?t=>"\t", ?r=>"\r", ?n=>"\n", ?f=>"\f", ?\\=>"\\"}[escaped[1]] } }.
|
22
|
-
|
22
|
+
map { |line| line.split("=") }.
|
23
|
+
inject({}) { |hash, (name, value)| hash.merge(name=>value) }
|
23
24
|
end
|
24
25
|
|
25
26
|
end
|
@@ -31,9 +32,9 @@ class Hash
|
|
31
32
|
#
|
32
33
|
# For example:
|
33
34
|
# { :a=>1, :b=>2, :c=>3, :d=>4 }.only(:a, :c)
|
34
|
-
# => { :
|
35
|
+
# => { :a=>1, :c=>3 }
|
35
36
|
def only(*keys)
|
36
|
-
|
37
|
+
keys.inject({}) { |hash, key| has_key?(key) ? hash.merge(key=>self[key]) : hash }
|
37
38
|
end
|
38
39
|
|
39
40
|
|
@@ -44,9 +45,9 @@ class Hash
|
|
44
45
|
#
|
45
46
|
# For example:
|
46
47
|
# { :a=>1, :b=>2, :c=>3, :d=>4 }.except(:a, :c)
|
47
|
-
# => { :
|
48
|
+
# => { :b=>2, :d=>4 }
|
48
49
|
def except(*keys)
|
49
|
-
self.inject({}) { |hash,
|
50
|
+
(self.keys - keys).inject({}) { |hash, key| hash.merge(key=>self[key]) }
|
50
51
|
end
|
51
52
|
|
52
53
|
# :call-seq:
|
data/lib/core/generate.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'java/pom'
|
2
|
+
|
1
3
|
module Buildr
|
2
4
|
module Generate #:nodoc:
|
3
5
|
|
@@ -76,13 +78,14 @@ EOF
|
|
76
78
|
pom = Buildr::POM.load('pom.xml')
|
77
79
|
project = pom.project
|
78
80
|
|
79
|
-
artifactId = project['artifactId']
|
81
|
+
artifactId = project['artifactId'].first
|
80
82
|
description = project['name'] || "The #{artifactId} project"
|
83
|
+
project_name = File.basename(Dir.pwd)
|
81
84
|
|
82
85
|
if root
|
83
86
|
script = HEADER.split("\n")
|
84
87
|
|
85
|
-
settings_file = ENV["
|
88
|
+
settings_file = ENV["M2_SETTINGS"] || File.join(Gem::user_home, ".m2/settings.xml")
|
86
89
|
settings = XmlSimple.xml_in(IO.read(settings_file)) if File.exists?(settings_file)
|
87
90
|
|
88
91
|
if settings
|
@@ -97,8 +100,8 @@ EOF
|
|
97
100
|
script << "options.proxy.exclude << '#{exclude}'" if exclude
|
98
101
|
script << ''
|
99
102
|
# In addition, we need to use said proxies to download artifacts.
|
100
|
-
options.proxy.http = url
|
101
|
-
options.proxy.exclude << exclude if exclude
|
103
|
+
Buildr.options.proxy.http = url
|
104
|
+
Buildr.options.proxy.exclude << exclude if exclude
|
102
105
|
end
|
103
106
|
end
|
104
107
|
|
@@ -106,22 +109,21 @@ EOF
|
|
106
109
|
legacy = repository["layout"].to_s =~ /legacy/
|
107
110
|
!legacy
|
108
111
|
} rescue nil
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
end
|
117
|
-
script << ""
|
112
|
+
repositories = [{"name" => "Standard maven2 repository", "url" => "http://www.ibiblio.org/maven2/"}] if repositories.nil? || repositories.empty?
|
113
|
+
repositories.each do |repository|
|
114
|
+
name, url = repository["name"], repository["url"]
|
115
|
+
script << "# #{name}"
|
116
|
+
script << "repositories.remote << '#{url}'"
|
117
|
+
# In addition we need to use said repositores to download artifacts.
|
118
|
+
Buildr.repositories.remote << url.to_s
|
118
119
|
end
|
120
|
+
script << ""
|
119
121
|
else
|
120
122
|
script = []
|
121
123
|
end
|
122
124
|
|
123
125
|
script << "desc '#{description}'"
|
124
|
-
script << "define '#{
|
126
|
+
script << "define '#{project_name}' do"
|
125
127
|
|
126
128
|
groupId = project['groupId']
|
127
129
|
script << " project.group = '#{groupId}'" if groupId
|
@@ -140,11 +142,20 @@ EOF
|
|
140
142
|
script << " compile.options.target = '#{target}'" if target
|
141
143
|
end
|
142
144
|
|
143
|
-
|
145
|
+
compile_dependencies = pom.dependencies
|
146
|
+
dependencies = compile_dependencies.sort.map{|d| "'#{d}'"}.join(', ')
|
144
147
|
script << " compile.with #{dependencies}" unless dependencies.empty?
|
145
148
|
|
146
|
-
test_dependencies = pom.dependencies(['test']).
|
147
|
-
|
149
|
+
test_dependencies = (pom.dependencies(['test']) - compile_dependencies).reject{|d| d =~ /^junit:junit:jar:/ }
|
150
|
+
#check if we have testng
|
151
|
+
use_testng = test_dependencies.find{|d| d =~ /^org.testng:testng:jar:/}
|
152
|
+
if use_testng
|
153
|
+
script << " test.using :testng"
|
154
|
+
test_dependencies = pom.dependencies(['test']).reject{|d| d =~ /^org.testng:testng:jar:/ }
|
155
|
+
end
|
156
|
+
|
157
|
+
test_dependencies = test_dependencies.sort.map{|d| "'#{d}'"}.join(', ')
|
158
|
+
script << " test.with #{test_dependencies}" unless test_dependencies.empty?
|
148
159
|
|
149
160
|
packaging = project['packaging'].first
|
150
161
|
if %w(jar war).include?(packaging)
|
@@ -153,6 +164,7 @@ EOF
|
|
153
164
|
|
154
165
|
modules = project['modules'].first['module'] rescue nil
|
155
166
|
if modules
|
167
|
+
script << ""
|
156
168
|
modules.each do |mod|
|
157
169
|
chdir(mod) { script << from_maven2_pom.flatten.map { |line| " " + line } << "" }
|
158
170
|
end
|
data/lib/core/project.rb
CHANGED
@@ -284,6 +284,19 @@ module Buildr
|
|
284
284
|
end
|
285
285
|
end
|
286
286
|
|
287
|
+
# :call-seq:
|
288
|
+
# task_in_parent_project(task_name) => task_name or nil
|
289
|
+
#
|
290
|
+
# Assuming the task name is prefixed with the current project, finds and returns a task with the
|
291
|
+
# same name in a parent project. Call this with "foo:bar:test" will return "foo:test", but call
|
292
|
+
# this with "foo:test" will return nil.
|
293
|
+
def task_in_parent_project(task_name)
|
294
|
+
namespace = task_name.split(":")
|
295
|
+
last_name = namespace.pop
|
296
|
+
namespace.pop
|
297
|
+
Rake.application.lookup((namespace + [last_name]).join(":"), []) unless namespace.empty?
|
298
|
+
end
|
299
|
+
|
287
300
|
end
|
288
301
|
|
289
302
|
include InheritedAttributes
|
data/lib/java/ant.rb
CHANGED
@@ -48,6 +48,7 @@ module Buildr
|
|
48
48
|
def ant(name, options=nil, &block)
|
49
49
|
warn_deprecated "Options are ignored." if options
|
50
50
|
options = { :name=>name, :basedir=>Dir.pwd, :declarative=>true }
|
51
|
+
options.merge!(:logger=> Logger.new(STDOUT), :loglevel=> Logger::DEBUG) if Rake.application.options.trace
|
51
52
|
Java.rjb do
|
52
53
|
AntProject.new(options).tap do |project|
|
53
54
|
# Set Ant logging level to debug (--trace), info (default) or error only (--quiet).
|
data/lib/java/artifact.rb
CHANGED
@@ -269,6 +269,7 @@ module Buildr
|
|
269
269
|
def download()
|
270
270
|
puts "Downloading #{to_spec}" if Rake.application.options.trace
|
271
271
|
remote = Buildr.repositories.remote
|
272
|
+
fail "No remote repositories defined!" if remote.empty?
|
272
273
|
remote.find do |repo_url|
|
273
274
|
repo_url = URI.parse(repo_url) unless URI === repo_url
|
274
275
|
repo_url.path += "/" unless repo_url.path[-1] == "/"
|
data/lib/java/compile.rb
CHANGED
@@ -111,7 +111,7 @@ module Buildr
|
|
111
111
|
|
112
112
|
def initialize(*args) #:nodoc:
|
113
113
|
super
|
114
|
-
parent =
|
114
|
+
parent = Project.task_in_parent_project(name)
|
115
115
|
if parent && parent.respond_to?(:options)
|
116
116
|
@options = Options.new(parent.options)
|
117
117
|
else
|
data/lib/java/eclipse.rb
CHANGED
@@ -19,8 +19,7 @@ module Buildr
|
|
19
19
|
# the Buildfile (buildr.rb, separate file listing dependencies, etc), so we add anything required
|
20
20
|
# after the Buildfile. So which don't know where Buildr shows up exactly, ignore files that show
|
21
21
|
# in $LOADED_FEATURES that we cannot resolve.
|
22
|
-
sources = (
|
23
|
-
map { |file| File.expand_path(file) }.select { |file| File.exist?(file) }
|
22
|
+
sources = Buildr.build_files.map { |file| File.expand_path(file) }.select { |file| File.exist?(file) }
|
24
23
|
sources << File.expand_path(Rake.application.rakefile, root_path) if Rake.application.rakefile
|
25
24
|
|
26
25
|
# Only for projects that are Eclipse packagable.
|
@@ -35,7 +34,7 @@ module Buildr
|
|
35
34
|
relative = lambda do |path|
|
36
35
|
msg = [:to_path, :to_str, :to_s].find { |msg| path.respond_to? msg }
|
37
36
|
path = path.__send__(msg)
|
38
|
-
Pathname.new(path).relative_path_from(Pathname.new(project.path_to)).to_s
|
37
|
+
Pathname.new(File.expand_path(path)).relative_path_from(Pathname.new(project.path_to)).to_s
|
39
38
|
end
|
40
39
|
|
41
40
|
m2repo = Buildr::Repositories.instance.local
|
data/lib/java/idea.rb
CHANGED
@@ -21,8 +21,7 @@ module Buildr
|
|
21
21
|
# the Buildfile (buildr.rb, separate file listing dependencies, etc), so we add anything required
|
22
22
|
# after the Buildfile. So which don't know where Buildr shows up exactly, ignore files that show
|
23
23
|
# in $LOADED_FEATURES that we cannot resolve.
|
24
|
-
sources = (
|
25
|
-
map { |file| File.expand_path(file) }.select { |file| File.exist?(file) }
|
24
|
+
sources = Buildr.build_files.map { |file| File.expand_path(file) }.select { |file| File.exist?(file) }
|
26
25
|
sources << File.expand_path(Rake.application.rakefile, root_path) if Rake.application.rakefile
|
27
26
|
|
28
27
|
# Find a path relative to the project's root directory.
|
data/lib/java/packaging.rb
CHANGED
@@ -15,7 +15,7 @@ module Buildr
|
|
15
15
|
# the project definition, since it does all the heavy lifting.
|
16
16
|
module Packaging
|
17
17
|
|
18
|
-
MANIFEST_HEADER = "Manifest-Version: 1.0
|
18
|
+
MANIFEST_HEADER = ["Manifest-Version: 1.0", "Created-By: Buildr"]
|
19
19
|
|
20
20
|
# Adds support for MANIFEST.MF and other META-INF files.
|
21
21
|
module WithManifest
|
@@ -49,6 +49,10 @@ module Buildr
|
|
49
49
|
# Tempfiles gets deleted on garbage collection, so we're going to hold on to it
|
50
50
|
# through instance variable not closure variable.
|
51
51
|
Tempfile.open "MANIFEST.MF" do |@manifest_tmp|
|
52
|
+
lines = String === manifest || Rake::Task === manifest ? manifest_lines_from(File.read(manifest.to_s)) :
|
53
|
+
manifest_lines_from(manifest)
|
54
|
+
@manifest_tmp.write((MANIFEST_HEADER + lines).join("\n"))
|
55
|
+
=begin
|
52
56
|
@manifest_tmp.write MANIFEST_HEADER
|
53
57
|
case manifest
|
54
58
|
when Hash
|
@@ -64,12 +68,40 @@ module Buildr
|
|
64
68
|
else
|
65
69
|
fail "Invalid manifest, expecting Hash, Array, file name/task or proc/method."
|
66
70
|
end
|
71
|
+
=end
|
67
72
|
meta_inf_path.include @manifest_tmp.path, :as=>"MANIFEST.MF"
|
68
73
|
end
|
69
74
|
end
|
70
75
|
end
|
71
76
|
end
|
72
77
|
|
78
|
+
private
|
79
|
+
|
80
|
+
def manifest_lines_from(arg)
|
81
|
+
case arg
|
82
|
+
when Hash
|
83
|
+
arg.map { |name, value| "#{name}: #{value}" }.sort.
|
84
|
+
map { |line| manifest_wrap_at_72(line) }.flatten
|
85
|
+
when Array
|
86
|
+
arg.map { |section|
|
87
|
+
name = section.has_key?("Name") ? ["Name: #{section["Name"]}"] : []
|
88
|
+
name + section.except("Name").map { |name, value| "#{name}: #{value}" }.sort + [""]
|
89
|
+
}.flatten.map { |line| manifest_wrap_at_72(line) }.flatten
|
90
|
+
when Proc, Method
|
91
|
+
manifest_lines_from(arg.call)
|
92
|
+
when String
|
93
|
+
arg.split("\n").map { |line| manifest_wrap_at_72(line) }.flatten
|
94
|
+
else
|
95
|
+
fail "Invalid manifest, expecting Hash, Array, file name/task or proc/method."
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def manifest_wrap_at_72(arg)
|
100
|
+
#return arg.map { |line| manifest_wrap_at_72(line) }.flatten.join("\n") if Array === arg
|
101
|
+
return arg if arg.size < 72
|
102
|
+
[ arg[0..70], manifest_wrap_at_72(" " + arg[71..-1]) ]
|
103
|
+
end
|
104
|
+
|
73
105
|
end
|
74
106
|
|
75
107
|
class ::Buildr::ZipTask
|
@@ -413,14 +445,14 @@ module Buildr
|
|
413
445
|
|
414
446
|
def package_as_tar(file_name, options) #:nodoc:
|
415
447
|
unless Rake::Task.task_defined?(file_name)
|
416
|
-
TarballTask.define_task(file_name)
|
448
|
+
TarballTask.define_task(file_name)
|
417
449
|
end
|
418
450
|
file(file_name)
|
419
451
|
end
|
420
452
|
|
421
453
|
def package_as_tgz(file_name, options) #:nodoc:
|
422
454
|
unless Rake::Task.task_defined?(file_name)
|
423
|
-
TarballTask.define_task(file_name)
|
455
|
+
TarballTask.define_task(file_name)
|
424
456
|
end
|
425
457
|
file(file_name)
|
426
458
|
end
|
data/lib/java/pom.rb
CHANGED
@@ -26,10 +26,14 @@ module Buildr
|
|
26
26
|
when Hash
|
27
27
|
load(Buildr.artifact(source).pom)
|
28
28
|
when Artifact
|
29
|
-
|
30
|
-
|
29
|
+
pom = source.pom
|
30
|
+
pom.invoke
|
31
|
+
load(pom.to_s)
|
32
|
+
when Rake::FileTask
|
33
|
+
source.invoke
|
34
|
+
load(source.to_s)
|
35
|
+
when String
|
31
36
|
filename = File.expand_path(source)
|
32
|
-
file(filename).invoke
|
33
37
|
unless pom = cache[filename]
|
34
38
|
puts "Loading m2 pom file from #{filename}" if Rake.application.options.trace
|
35
39
|
pom = POM.new(IO.read(filename))
|
@@ -118,11 +122,14 @@ module Buildr
|
|
118
122
|
# The second form uses a single spec hash and expands it from the current/parent POM. Used to determine
|
119
123
|
# the version number if specified in dependencyManagement instead of dependencies.
|
120
124
|
def managed(spec = nil)
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
managed
|
125
|
+
if spec
|
126
|
+
managed.detect { |dep| [:group, :id, :type, :classifier].all? { |key| spec[key] == dep[key] } } ||
|
127
|
+
(parent ? parent.managed(spec) : nil)
|
128
|
+
else
|
129
|
+
@managed ||= begin
|
130
|
+
managed = project["dependencyManagement"].first["dependencies"].first["dependency"] rescue nil
|
131
|
+
managed ? managed.map { |dep| pom_to_hash(dep, properties) } : []
|
132
|
+
end
|
126
133
|
end
|
127
134
|
end
|
128
135
|
|
data/lib/java/test.rb
CHANGED
@@ -142,7 +142,7 @@ module Buildr
|
|
142
142
|
TEST_FRAMEWORKS = []
|
143
143
|
|
144
144
|
# Default options already set on each test task.
|
145
|
-
DEFAULT_OPTIONS = { :fail_on_failure=>true }
|
145
|
+
DEFAULT_OPTIONS = { :fail_on_failure=>true, :fork=>:once, :properties=>{} }
|
146
146
|
|
147
147
|
# JMock version..
|
148
148
|
JMOCK_VERSION = "1.2.0"
|
@@ -159,7 +159,7 @@ module Buildr
|
|
159
159
|
@classpath = []
|
160
160
|
@include = []
|
161
161
|
@exclude = []
|
162
|
-
parent =
|
162
|
+
parent = Project.task_in_parent_project(name)
|
163
163
|
@options = parent && parent.respond_to?(:options) ? parent.options.clone : DEFAULT_OPTIONS.clone
|
164
164
|
enhance { run_tests }
|
165
165
|
end
|
@@ -251,15 +251,21 @@ module Buildr
|
|
251
251
|
#
|
252
252
|
# Sets various test options and returns self. Accepts a hash of options, or symbols (a symbol sets that
|
253
253
|
# option to true). For example:
|
254
|
-
# test.using :testng, :properties=>{ "url"=>"http://localhost:8080" }
|
254
|
+
# test.using :testng, :fork=>:each, :properties=>{ "url"=>"http://localhost:8080" }
|
255
255
|
#
|
256
256
|
# Currently supports the following options:
|
257
|
-
# * :properties -- System properties.
|
258
|
-
# * :java_args -- Java arguments when forking a new JVM.
|
259
257
|
# * :fail_on_failure -- True to fail on test failure (default is true).
|
258
|
+
# * :fork -- Fork test cases (JUnit only).
|
259
|
+
# * :java_args -- Java arguments when forking a new JVM.
|
260
|
+
# * :properties -- System properties.
|
261
|
+
#
|
262
|
+
# The :fork option takes the following values:
|
263
|
+
# * :once -- Fork one JVM for each project (default).
|
264
|
+
# * :each -- Fork one JVM for each test case.
|
265
|
+
# * false -- Do not fork, running all test cases in the same JVM.
|
260
266
|
def using(*args)
|
261
|
-
args.pop.each { |key, value|
|
262
|
-
args.each { |key|
|
267
|
+
args.pop.each { |key, value| options[key.to_sym] = value } if Hash === args.last
|
268
|
+
args.each { |key| options[key.to_sym] = true }
|
263
269
|
self
|
264
270
|
end
|
265
271
|
|
@@ -467,11 +473,23 @@ module Buildr
|
|
467
473
|
rm_rf report_to.to_s ; mkpath report_to.to_s
|
468
474
|
# Use Ant to execute the Junit tasks, gives us performance and reporting.
|
469
475
|
Buildr.ant("junit") do |ant|
|
470
|
-
|
476
|
+
case options[:fork]
|
477
|
+
when false
|
478
|
+
forking = {}
|
479
|
+
when :each
|
480
|
+
forking = { :fork=>true, :forkmode=>"perTest" }
|
481
|
+
when true, :once
|
482
|
+
forking = { :fork=>true, :forkmode=>"once" }
|
483
|
+
else
|
484
|
+
fail "Option fork must be :once, :each or false."
|
485
|
+
end
|
486
|
+
ant.junit forking do
|
471
487
|
ant.classpath :path=>args[:classpath].map(&:to_s).each { |path| file(path).invoke }.join(File::PATH_SEPARATOR)
|
472
488
|
args[:properties].each { |key, value| ant.sysproperty :key=>key, :value=>value }
|
473
489
|
ant.formatter :type=>"plain"
|
474
490
|
ant.formatter :type=>"xml"
|
491
|
+
ant.formatter :type=>"plain", :usefile=>false # log test
|
492
|
+
ant.formatter :type=>"xml"
|
475
493
|
ant.batchtest :todir=>report_to.to_s, :failureproperty=>"failed" do
|
476
494
|
ant.fileset :dir=>compile.target.to_s do
|
477
495
|
args[:classes].each { |cls| ant.include :name=>cls.gsub(".", "/").ext("class") }
|
data/lib/tasks/zip.rb
CHANGED
@@ -16,14 +16,13 @@ module Buildr
|
|
16
16
|
|
17
17
|
def initialize(root, path)
|
18
18
|
@root = root
|
19
|
-
@path = "#{path}/"
|
19
|
+
@path = path.blank? ? path : "#{path}/"
|
20
20
|
@files = FileList[]
|
21
21
|
# Expand source files added to this path.
|
22
22
|
expand_src = proc { @files.map{ |file| file.to_s }.uniq }
|
23
23
|
@sources = [ expand_src ]
|
24
24
|
# Add files and directories added to this path.
|
25
25
|
@actions = [] << proc do |file_map|
|
26
|
-
file_map[@path] = nil if @path
|
27
26
|
expand_src.call.each do |path|
|
28
27
|
if File.directory?(path)
|
29
28
|
in_directory(path, @files) do |file, rel_path|
|
@@ -104,7 +103,9 @@ module Buildr
|
|
104
103
|
|
105
104
|
# Returns a Path relative to this one.
|
106
105
|
def path(path)
|
107
|
-
|
106
|
+
return self if path.blank?
|
107
|
+
return root.path(path[1..-1]) if path[0] == ?/
|
108
|
+
root.path("#{@path}#{path}")
|
108
109
|
end
|
109
110
|
|
110
111
|
# Returns all the source files.
|
@@ -117,7 +118,7 @@ module Buildr
|
|
117
118
|
end
|
118
119
|
|
119
120
|
def to_s()
|
120
|
-
@path
|
121
|
+
@path
|
121
122
|
end
|
122
123
|
|
123
124
|
protected
|
@@ -126,10 +127,11 @@ module Buildr
|
|
126
127
|
@sources << proc { source }
|
127
128
|
@actions << proc do |file_map|
|
128
129
|
file = source.to_s
|
129
|
-
file_map[@path] = nil if @path
|
130
130
|
if File.directory?(file)
|
131
131
|
in_directory(file) do |file, rel_path|
|
132
|
-
|
132
|
+
path = rel_path.split("/")[1..-1]
|
133
|
+
path.unshift as unless as == "."
|
134
|
+
dest = "#{@path}#{path.join('/')}"
|
133
135
|
puts "Adding #{dest}" if Rake.application.options.trace
|
134
136
|
file_map[dest] = file
|
135
137
|
end
|
@@ -188,7 +190,7 @@ module Buildr
|
|
188
190
|
|
189
191
|
def initialize(*args) #:nodoc:
|
190
192
|
super
|
191
|
-
@paths = {
|
193
|
+
@paths = { ""=>Path.new(self, "") }
|
192
194
|
@prepares = []
|
193
195
|
|
194
196
|
# Make sure we're the last enhancements, so other enhancements can add content.
|
@@ -202,7 +204,10 @@ module Buildr
|
|
202
204
|
rm name, :verbose=>false rescue nil
|
203
205
|
mkpath File.dirname(name), :verbose=>false
|
204
206
|
begin
|
205
|
-
@paths.each
|
207
|
+
@paths.each do |name, object|
|
208
|
+
@file_map[name] = nil unless name.blank?
|
209
|
+
object.add_files(@file_map)
|
210
|
+
end
|
206
211
|
create_from @file_map
|
207
212
|
rescue
|
208
213
|
rm name, :verbose=>false rescue nil
|
@@ -245,7 +250,7 @@ module Buildr
|
|
245
250
|
# zip(..).include("foo.zip", :merge=>true).include("bar.zip")
|
246
251
|
# You can also use the method #merge.
|
247
252
|
def include(*files)
|
248
|
-
@paths[
|
253
|
+
@paths[""].include *files
|
249
254
|
self
|
250
255
|
end
|
251
256
|
alias :add :include
|
@@ -255,7 +260,7 @@ module Buildr
|
|
255
260
|
#
|
256
261
|
# Excludes files and returns self. Can be used in combination with include to prevent some files from being included.
|
257
262
|
def exclude(*files)
|
258
|
-
@paths[
|
263
|
+
@paths[""].exclude *files
|
259
264
|
self
|
260
265
|
end
|
261
266
|
|
@@ -269,7 +274,7 @@ module Buildr
|
|
269
274
|
# only specific files. For example:
|
270
275
|
# zip(..).merge("src.zip").include("module1/*")
|
271
276
|
def merge(*files)
|
272
|
-
@paths[
|
277
|
+
@paths[""].merge *files
|
273
278
|
end
|
274
279
|
|
275
280
|
# :call-seq:
|
@@ -284,8 +289,18 @@ module Buildr
|
|
284
289
|
# path("foo").path("bar") == path("foo/bar")
|
285
290
|
# path("foo").root == root
|
286
291
|
def path(name)
|
287
|
-
return @paths[
|
288
|
-
|
292
|
+
return @paths[""] if name.blank?
|
293
|
+
normalized = name.split("/").inject([]) do |path, part|
|
294
|
+
case part
|
295
|
+
when ".", nil, ""
|
296
|
+
path
|
297
|
+
when ".."
|
298
|
+
path[0...-1]
|
299
|
+
else
|
300
|
+
path << part
|
301
|
+
end
|
302
|
+
end.join("/")
|
303
|
+
@paths[normalized] ||= Path.new(self, normalized)
|
289
304
|
end
|
290
305
|
|
291
306
|
# :call-seq:
|
@@ -381,9 +396,16 @@ module Buildr
|
|
381
396
|
Zip::ZipFile.open(name, Zip::ZipFile::CREATE) do |zip|
|
382
397
|
zip.restore_permissions = true
|
383
398
|
file_map.each do |path, content|
|
384
|
-
|
385
|
-
|
386
|
-
|
399
|
+
if content
|
400
|
+
File.dirname(path).tap { |dir| zip.mkdir dir unless zip.find_entry(dir) }
|
401
|
+
if content.respond_to?(:call)
|
402
|
+
zip.get_output_stream(path) { |output| content.call(output) }
|
403
|
+
else
|
404
|
+
zip.add path, content.to_s
|
405
|
+
end
|
406
|
+
else
|
407
|
+
zip.mkdir path unless zip.find_entry(path)
|
408
|
+
end
|
387
409
|
end
|
388
410
|
end
|
389
411
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: buildr
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.2.
|
7
|
-
date: 2007-
|
6
|
+
version: 1.2.4
|
7
|
+
date: 2007-08-03 00:00:00 -07:00
|
8
8
|
summary: A build system that doesn't suck
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -36,6 +36,7 @@ files:
|
|
36
36
|
- lib/core
|
37
37
|
- lib/core/generate.rb
|
38
38
|
- lib/core/transports.rb
|
39
|
+
- lib/core/application.rb
|
39
40
|
- lib/core/build.rb
|
40
41
|
- lib/core/checks.rb
|
41
42
|
- lib/core/help.rb
|