buildr 1.5.3-x86-mswin32 → 1.5.4-x86-mswin32
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +25 -1
- data/addon/buildr/bnd.rb +8 -2
- data/addon/buildr/findbugs.rb +2 -2
- data/addon/buildr/gpg.rb +7 -1
- data/addon/buildr/gwt.rb +41 -1
- data/addon/buildr/jacoco.rb +18 -18
- data/addon/buildr/jetty.rb +14 -5
- data/addon/buildr/jetty6.rb +243 -0
- data/addon/buildr/org/apache/buildr/Jetty6Wrapper$1.class +0 -0
- data/addon/buildr/org/apache/buildr/Jetty6Wrapper$BuildrHandler.class +0 -0
- data/addon/buildr/org/apache/buildr/Jetty6Wrapper.class +0 -0
- data/addon/buildr/org/apache/buildr/Jetty6Wrapper.java +144 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper$BuildrHandler.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.class +0 -0
- data/addon/buildr/org/apache/buildr/JettyWrapper.java +13 -13
- data/buildr.buildfile +7 -1
- data/doc/contributing.textile +0 -19
- data/doc/download.textile +18 -6
- data/doc/index.textile +20 -12
- data/doc/languages.textile +23 -1
- data/doc/packaging.textile +21 -0
- data/lib/buildr/ide/idea.rb +4 -2
- data/lib/buildr/java/commands.rb +1 -1
- data/lib/buildr/kotlin.rb +17 -0
- data/lib/buildr/kotlin/compiler.rb +282 -0
- data/lib/buildr/kotlin/org/apache/buildr/KotlinMessageCollector$1.class +0 -0
- data/lib/buildr/kotlin/org/apache/buildr/KotlinMessageCollector.class +0 -0
- data/lib/buildr/kotlin/org/apache/buildr/KotlinMessageCollector.java +46 -0
- data/lib/buildr/packaging/archive.rb +47 -11
- data/lib/buildr/packaging/package.rb +3 -2
- data/lib/buildr/packaging/tar.rb +51 -16
- data/lib/buildr/packaging/ziptask.rb +45 -17
- data/lib/buildr/version.rb +1 -1
- data/spec/addon/bnd_spec.rb +80 -20
- data/spec/kotlin/compiler_spec.rb +274 -0
- data/spec/packaging/archive_spec.rb +30 -0
- data/spec/sandbox.rb +1 -0
- metadata +13 -3
- data/lib/buildr/scala/org/apache/buildr/Specs2Runner.class +0 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
|
17
|
+
require 'buildr/kotlin/compiler'
|
@@ -0,0 +1,282 @@
|
|
1
|
+
# Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
# contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
# work for additional information regarding copyright ownership. The ASF
|
4
|
+
# licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
# "License"); you may not use this file except in compliance with the License.
|
6
|
+
# You may obtain a copy of the License at
|
7
|
+
#
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
#
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
# License for the specific language governing permissions and limitations under
|
14
|
+
# the License.
|
15
|
+
|
16
|
+
# The Kotlin Module
|
17
|
+
module Buildr::Kotlin
|
18
|
+
DEFAULT_VERSION = '1.1.3-2'
|
19
|
+
|
20
|
+
class << self
|
21
|
+
|
22
|
+
def installed_version
|
23
|
+
unless @installed_version
|
24
|
+
@installed_version = if Kotlinc.installed?
|
25
|
+
begin
|
26
|
+
# try to read the value from the build.txt file
|
27
|
+
version_str = File.read(File.expand_path('build.txt', Kotlinc.kotlin_home))
|
28
|
+
|
29
|
+
if version_str
|
30
|
+
md = version_str.match(/\d+\.\d[\d\.]*/) or
|
31
|
+
fail "Unable to parse Kotlin version: #{version_str}"
|
32
|
+
|
33
|
+
md[0].sub(/.$/, "") # remove trailing dot, if any
|
34
|
+
end
|
35
|
+
rescue => e
|
36
|
+
warn "Unable to parse library.properties in $KOTLIN_HOME/build.txt: #{e}"
|
37
|
+
nil
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
@installed_version
|
43
|
+
end
|
44
|
+
|
45
|
+
def version
|
46
|
+
Buildr.settings.build['kotlin.version'] || installed_version || DEFAULT_VERSION
|
47
|
+
end
|
48
|
+
|
49
|
+
# check if version matches any of the given prefixes
|
50
|
+
def version?(*v)
|
51
|
+
v.any? { |v| version.index(v.to_s) == 0 }
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
# Kotlin compiler:
|
57
|
+
# compile.using(:kotlin)
|
58
|
+
# Used by default if .kt files are found in the src/main/kotlin directory (or src/test/kotlin)
|
59
|
+
# and sets the target directory to target/classes (or target/test/classes).
|
60
|
+
# Accepts the following options:
|
61
|
+
# * :warnings -- Issue warnings when compiling. True when running in verbose mode.
|
62
|
+
# * :debug -- Generates bytecode with debugging information. Set from the debug
|
63
|
+
# environment variable/global option.
|
64
|
+
# * :optimize -- Optimize the byte code generation. False by default.
|
65
|
+
# * :target -- Bytecode compatibility.
|
66
|
+
# * :noStdlib -- Include the Kotlin runtime. False by default.
|
67
|
+
# * :javac -- Arguments for javac compiler.
|
68
|
+
class Kotlinc < Buildr::Compiler::Base
|
69
|
+
|
70
|
+
class << self
|
71
|
+
def kotlin_home
|
72
|
+
env_home = ENV['KOTLIN_HOME']
|
73
|
+
|
74
|
+
@home ||= if !env_home.nil? && File.exists?(env_home + '/lib/kotlin-compiler.jar')
|
75
|
+
env_home
|
76
|
+
else
|
77
|
+
nil
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def installed?
|
82
|
+
!kotlin_home.nil?
|
83
|
+
end
|
84
|
+
|
85
|
+
def use_installed?
|
86
|
+
if installed? && Buildr.settings.build['kotlin.version']
|
87
|
+
Buildr.settings.build['kotlin.version'] == Kotlin.installed_version
|
88
|
+
else
|
89
|
+
Buildr.settings.build['kotlin.version'].nil? && installed?
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def dependencies
|
94
|
+
kotlin_dependencies = if use_installed?
|
95
|
+
%w(kotlin-stdlib kotlin-compiler).map { |s| File.expand_path("lib/#{s}.jar", kotlin_home) }
|
96
|
+
else
|
97
|
+
REQUIRES.artifacts.map(&:to_s)
|
98
|
+
end
|
99
|
+
# Add Java utilities (eg KotlinMessageCollector)
|
100
|
+
kotlin_dependencies |= [ File.join(File.dirname(__FILE__)) ]
|
101
|
+
(kotlin_dependencies).compact
|
102
|
+
end
|
103
|
+
|
104
|
+
def applies_to?(project, task) #:nodoc:
|
105
|
+
paths = task.sources + [sources].flatten.map { |src| Array(project.path_to(:source, task.usage, src.to_sym)) }
|
106
|
+
paths.flatten!
|
107
|
+
|
108
|
+
# Just select if we find .kt files
|
109
|
+
paths.any? { |path| !Dir["#{path}/**/*.kt"].empty? }
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
# The kotlin compiler jars are added to classpath at load time,
|
114
|
+
# if you want to customize artifact versions, you must set them on the
|
115
|
+
#
|
116
|
+
# artifact_ns['Buildr::Compiler::Kotlinc'].library = '1.1.3-2'
|
117
|
+
#
|
118
|
+
# namespace before this file is required. This is of course, only
|
119
|
+
# if KOTLIN_HOME is not set or invalid.
|
120
|
+
REQUIRES = ArtifactNamespace.for(self) do |ns|
|
121
|
+
version = Buildr.settings.build['kotlin.version'] || DEFAULT_VERSION
|
122
|
+
ns.compiler! 'org.jetbrains.kotlin:kotlin-compiler:jar:>=' + version
|
123
|
+
end
|
124
|
+
|
125
|
+
Javac = Buildr::Compiler::Javac
|
126
|
+
|
127
|
+
OPTIONS = [:warnings, :optimize, :target, :debug, :noStdlib, :javac]
|
128
|
+
|
129
|
+
# Lazy evaluation to allow change in buildfile
|
130
|
+
Java.classpath << lambda { dependencies }
|
131
|
+
|
132
|
+
specify :language=>:kotlin, :sources => [:kotlin, :java], :source_ext => [:kt, :java],
|
133
|
+
:target=>'classes', :target_ext=>'class', :packaging=>:jar
|
134
|
+
|
135
|
+
def initialize(project, options) #:nodoc:
|
136
|
+
super
|
137
|
+
# use common options also for javac
|
138
|
+
|
139
|
+
options[:javac] ||= Buildr::Compiler::Javac::OPTIONS.inject({}) do |hash, option|
|
140
|
+
hash[option] = options[option]
|
141
|
+
hash
|
142
|
+
end
|
143
|
+
|
144
|
+
options[:debug] = Buildr.options.debug || trace?(:kotlinc) if options[:debug].nil?
|
145
|
+
options[:warnings] = verbose if options[:warnings].nil?
|
146
|
+
options[:optimize] = false if options[:optimize].nil?
|
147
|
+
options[:noStdlib] = true if options[:noStdlib].nil?
|
148
|
+
@java = Javac.new(project, options[:javac])
|
149
|
+
end
|
150
|
+
|
151
|
+
|
152
|
+
|
153
|
+
def compile(sources, target, dependencies) #:nodoc:
|
154
|
+
check_options(options, OPTIONS)
|
155
|
+
|
156
|
+
java_sources = java_sources(sources)
|
157
|
+
|
158
|
+
unless Buildr.application.options.dryrun
|
159
|
+
messageCollector = Java.org.apache.buildr.KotlinMessageCollector.new
|
160
|
+
|
161
|
+
Java.load
|
162
|
+
begin
|
163
|
+
compiler = Java.org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.new
|
164
|
+
compilerArguments = kotlinc_args
|
165
|
+
compilerArguments.destination = File.expand_path(target)
|
166
|
+
compilerArguments.classpath = dependencies.join(File::PATH_SEPARATOR)
|
167
|
+
sources.each do |source|
|
168
|
+
compilerArguments.freeArgs.add(File.expand_path(source))
|
169
|
+
end
|
170
|
+
services = Buildr::Util.java_platform? ? Java.org.jetbrains.kotlin.config.Services::EMPTY : Java.org.jetbrains.kotlin.config.Services.EMPTY
|
171
|
+
compiler.exec(messageCollector, services, compilerArguments)
|
172
|
+
rescue => e
|
173
|
+
fail "Kotlin compiler crashed:\n#{e.inspect}"
|
174
|
+
end
|
175
|
+
|
176
|
+
unless java_sources.empty?
|
177
|
+
trace 'Compiling mixed Java/Kotlin sources'
|
178
|
+
|
179
|
+
deps = dependencies + Kotlinc.dependencies + [ File.expand_path(target) ]
|
180
|
+
@java.compile(java_sources, target, deps)
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
protected
|
186
|
+
|
187
|
+
# :nodoc: see Compiler:Base
|
188
|
+
def compile_map(sources, target)
|
189
|
+
target_ext = self.class.target_ext
|
190
|
+
ext_glob = Array(self.class.source_ext).join(',')
|
191
|
+
sources.flatten.map{|f| File.expand_path(f)}.inject({}) do |map, source|
|
192
|
+
sources = if File.directory?(source)
|
193
|
+
FileList["#{source}/**/*.{#{ext_glob}}"].reject { |file| File.directory?(file) }
|
194
|
+
else
|
195
|
+
[source]
|
196
|
+
end
|
197
|
+
|
198
|
+
sources.each do |source|
|
199
|
+
# try to extract package name from .java or .kt files
|
200
|
+
if %w(.java .kt).include? File.extname(source)
|
201
|
+
name = File.basename(source).split(".")[0]
|
202
|
+
package = findFirst(source, /^\s*package\s+([^\s;]+)\s*;?\s*/)
|
203
|
+
packages = count(source, /^\s*package\s+([^\s;]+)\s*;?\s*/)
|
204
|
+
found = findFirst(source, /((class)|(object))\s+(#{name})Kt/)
|
205
|
+
|
206
|
+
# if there's only one package statement and we know the target name, then we can depend
|
207
|
+
# directly on a specific file, otherwise, we depend on the general target
|
208
|
+
if (found && packages == 1)
|
209
|
+
map[source] = package ? File.join(target, package[1].gsub('.', '/'), name.ext(target_ext)) : target
|
210
|
+
else
|
211
|
+
map[source] = target
|
212
|
+
end
|
213
|
+
|
214
|
+
elsif
|
215
|
+
map[source] = target
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
map.each do |key,value|
|
220
|
+
map[key] = first_file unless map[key]
|
221
|
+
end
|
222
|
+
|
223
|
+
map
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
private
|
228
|
+
|
229
|
+
def count(file, pattern)
|
230
|
+
count = 0
|
231
|
+
File.open(file, 'r') do |infile|
|
232
|
+
while (line = infile.gets)
|
233
|
+
count += 1 if line.match(pattern)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
count
|
237
|
+
end
|
238
|
+
|
239
|
+
def java_sources(sources)
|
240
|
+
sources.flatten.map { |source| File.directory?(source) ? FileList["#{source}/**/*.java"] : source } .
|
241
|
+
flatten.reject { |file| File.directory?(file) || File.extname(file) != '.java' }.map { |file| File.expand_path(file) }.uniq
|
242
|
+
end
|
243
|
+
|
244
|
+
# Returns Kotlinc arguments from the set of options.
|
245
|
+
def kotlinc_args #:nodoc:
|
246
|
+
compilerArguments = Java.org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments.new
|
247
|
+
compilerArguments.verbose = options[:debug]
|
248
|
+
compilerArguments.suppressWarnings = !options[:warnings]
|
249
|
+
compilerArguments.noStdlib = options[:noStdlib]
|
250
|
+
compilerArguments.noOptimize = !options[:optimize]
|
251
|
+
compilerArguments.reportOutputFiles = compilerArguments.verbose
|
252
|
+
compilerArguments.jvmTarget = options[:target] unless options[:target].nil?
|
253
|
+
compilerArguments
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
module ProjectExtension
|
258
|
+
def kotlinc_options
|
259
|
+
@kotlinc ||= KotlincOptions.new(self)
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
class KotlincOptions
|
264
|
+
attr_writer :incremental
|
265
|
+
|
266
|
+
def initialize(project)
|
267
|
+
@project = project
|
268
|
+
end
|
269
|
+
|
270
|
+
def incremental
|
271
|
+
@incremental || (@project.parent ? @project.parent.kotlinc_options.incremental : nil)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
# Kotlin compiler comes first, ahead of Javac, this allows it to pick
|
277
|
+
# projects that mix Kotlin and Java code by spotting Kotlin code first.
|
278
|
+
Buildr::Compiler.compilers.unshift Buildr::Kotlin::Kotlinc
|
279
|
+
|
280
|
+
class Buildr::Project #:nodoc:
|
281
|
+
include Buildr::Kotlin::ProjectExtension
|
282
|
+
end
|
Binary file
|
Binary file
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/* Licensed to the Apache Software Foundation (ASF) under one or more
|
2
|
+
* contributor license agreements. See the NOTICE file distributed with this
|
3
|
+
* work for additional information regarding copyright ownership. The ASF
|
4
|
+
* licenses this file to you under the Apache License, Version 2.0 (the
|
5
|
+
* "License"); you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
12
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
13
|
+
* License for the specific language governing permissions and limitations
|
14
|
+
* under the License.
|
15
|
+
*/
|
16
|
+
|
17
|
+
|
18
|
+
package org.apache.buildr;
|
19
|
+
|
20
|
+
import org.jetbrains.kotlin.cli.common.messages.MessageCollector;
|
21
|
+
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity;
|
22
|
+
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation;
|
23
|
+
|
24
|
+
|
25
|
+
public class KotlinMessageCollector implements MessageCollector {
|
26
|
+
|
27
|
+
public void report(CompilerMessageSeverity severity, String message, CompilerMessageLocation location) {
|
28
|
+
switch(severity) {
|
29
|
+
case ERROR:
|
30
|
+
case EXCEPTION:
|
31
|
+
System.err.println((location != null ? (location.toString() + " ") : "") + message);
|
32
|
+
break;
|
33
|
+
default:
|
34
|
+
System.out.println((location != null ? (location.toString() + " ") : "") + message);
|
35
|
+
break;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
public boolean hasErrors() {
|
40
|
+
return false;
|
41
|
+
}
|
42
|
+
|
43
|
+
public void clear() {
|
44
|
+
// not implemented
|
45
|
+
}
|
46
|
+
}
|
@@ -112,9 +112,9 @@ module Buildr #:nodoc:
|
|
112
112
|
expanders = files.collect do |file|
|
113
113
|
@sources << proc { file.to_s }
|
114
114
|
expander = ZipExpander.new(file)
|
115
|
-
@actions << proc do |file_map|
|
115
|
+
@actions << proc do |file_map, transform_map|
|
116
116
|
file.invoke() if file.is_a?(Rake::Task)
|
117
|
-
expander.expand(file_map, path)
|
117
|
+
expander.expand(file_map, transform_map, path)
|
118
118
|
end
|
119
119
|
expander
|
120
120
|
end
|
@@ -133,8 +133,8 @@ module Buildr #:nodoc:
|
|
133
133
|
@sources.map{ |source| source.call }.flatten
|
134
134
|
end
|
135
135
|
|
136
|
-
def add_files(file_map) #:nodoc:
|
137
|
-
@actions.each { |action| action.call(file_map) }
|
136
|
+
def add_files(file_map, transform_map) #:nodoc:
|
137
|
+
@actions.each { |action| action.call(file_map, transform_map) }
|
138
138
|
end
|
139
139
|
|
140
140
|
# :call-seq:
|
@@ -267,6 +267,16 @@ module Buildr #:nodoc:
|
|
267
267
|
@expanders.each { |expander| expander.exclude(*files) }
|
268
268
|
self
|
269
269
|
end
|
270
|
+
|
271
|
+
def concatenate(*files)
|
272
|
+
@expanders.each { |expander| expander.concatenate(*files) }
|
273
|
+
self
|
274
|
+
end
|
275
|
+
|
276
|
+
def transform(*files, &block)
|
277
|
+
@expanders.each { |expander| expander.transform(*files, &block) }
|
278
|
+
self
|
279
|
+
end
|
270
280
|
end
|
271
281
|
|
272
282
|
|
@@ -277,6 +287,8 @@ module Buildr #:nodoc:
|
|
277
287
|
@zip_file = zip_file.to_s
|
278
288
|
@includes = []
|
279
289
|
@excludes = []
|
290
|
+
@concatenates = []
|
291
|
+
@transforms = {}
|
280
292
|
end
|
281
293
|
|
282
294
|
def include(*files)
|
@@ -289,8 +301,18 @@ module Buildr #:nodoc:
|
|
289
301
|
@excludes |= files
|
290
302
|
self
|
291
303
|
end
|
304
|
+
|
305
|
+
def concatenate(*files)
|
306
|
+
@concatenates |= files
|
307
|
+
self
|
308
|
+
end
|
309
|
+
|
310
|
+
def transform(*files, &block)
|
311
|
+
@transforms[[files].flatten] = block
|
312
|
+
self
|
313
|
+
end
|
292
314
|
|
293
|
-
def expand(file_map, path)
|
315
|
+
def expand(file_map, transform_map, path)
|
294
316
|
@includes = ['*'] if @includes.empty?
|
295
317
|
Zip::File.open(@zip_file) do |source|
|
296
318
|
source.entries.reject { |entry| entry.directory? }.each do |entry|
|
@@ -298,7 +320,19 @@ module Buildr #:nodoc:
|
|
298
320
|
!@excludes.any? { |pattern| File.fnmatch(pattern, entry.name) }
|
299
321
|
dest = path =~ /^\/?$/ ? entry.name : Util.relative_path(path + "/" + entry.name)
|
300
322
|
trace "Adding #{dest}"
|
301
|
-
|
323
|
+
if @concatenates.any? { |pattern| File.fnmatch(pattern, entry.name) }
|
324
|
+
file_map[dest] << ZipEntryData.new(source, entry)
|
325
|
+
elsif @transforms.each_pair.detect do |transform, transform_block|\
|
326
|
+
if transform.any? { |pattern| File.fnmatch(pattern, entry.name) }
|
327
|
+
file_map[dest] << ZipEntryData.new(source, entry)
|
328
|
+
|
329
|
+
transform_map[dest] = transform_block
|
330
|
+
true
|
331
|
+
end
|
332
|
+
end
|
333
|
+
else
|
334
|
+
file_map[dest] = ZipEntryData.new(source, entry)
|
335
|
+
end
|
302
336
|
end
|
303
337
|
end
|
304
338
|
end
|
@@ -327,7 +361,8 @@ module Buildr #:nodoc:
|
|
327
361
|
|
328
362
|
# Make sure we're the last enhancements, so other enhancements can add content.
|
329
363
|
enhance do
|
330
|
-
@file_map = {}
|
364
|
+
@file_map = Hash.new {|h,k| h[k]=[]}
|
365
|
+
@transform_map = {}
|
331
366
|
enhance do
|
332
367
|
send 'create' if respond_to?(:create)
|
333
368
|
# We're here because the archive file does not exist, or one of the files is newer than the archive contents;
|
@@ -338,9 +373,9 @@ module Buildr #:nodoc:
|
|
338
373
|
begin
|
339
374
|
@paths.each do |name, object|
|
340
375
|
@file_map[name] = nil unless name.empty?
|
341
|
-
object.add_files(@file_map)
|
376
|
+
object.add_files(@file_map, @transform_map)
|
342
377
|
end
|
343
|
-
create_from @file_map
|
378
|
+
create_from @file_map, @transform_map
|
344
379
|
rescue
|
345
380
|
rm name rescue nil
|
346
381
|
raise
|
@@ -485,9 +520,10 @@ module Buildr #:nodoc:
|
|
485
520
|
@prepares.each { |prepare| prepare.call(self) }
|
486
521
|
@prepares.clear
|
487
522
|
|
488
|
-
file_map = {}
|
523
|
+
file_map = Hash.new {|h,k| h[k]=[]}
|
524
|
+
transform_map = {}
|
489
525
|
@paths.each do |name, path|
|
490
|
-
path.add_files(file_map)
|
526
|
+
path.add_files(file_map, transform_map)
|
491
527
|
end
|
492
528
|
|
493
529
|
# filter out Procs (dynamic content), nils and others
|