Write Cache to disk if an exception occurs while processing the Environment - fix #4
This commit is contained in:
parent
ea30b0b5ee
commit
ee5aca275d
@ -176,29 +176,31 @@ module Rscons
|
|||||||
cache.clear_checksum_cache!
|
cache.clear_checksum_cache!
|
||||||
targets_processed = {}
|
targets_processed = {}
|
||||||
unless @targets.empty?
|
unless @targets.empty?
|
||||||
process_target = proc do |target|
|
begin
|
||||||
targets_processed[target] ||= begin
|
process_target = proc do |target|
|
||||||
@targets[target][:sources].each do |src|
|
targets_processed[target] ||= begin
|
||||||
if @targets.include?(src) and not targets_processed.include?(src)
|
@targets[target][:sources].each do |src|
|
||||||
process_target.call(src)
|
if @targets.include?(src) and not targets_processed.include?(src)
|
||||||
|
process_target.call(src)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
result = run_builder(@targets[target][:builder],
|
||||||
|
target,
|
||||||
|
@targets[target][:sources],
|
||||||
|
cache,
|
||||||
|
@targets[target][:vars] || {})
|
||||||
|
unless result
|
||||||
|
raise BuildError.new("Failed to build #{target}")
|
||||||
|
end
|
||||||
|
result
|
||||||
end
|
end
|
||||||
result = run_builder(@targets[target][:builder],
|
|
||||||
target,
|
|
||||||
@targets[target][:sources],
|
|
||||||
cache,
|
|
||||||
@targets[target][:vars] || {})
|
|
||||||
unless result
|
|
||||||
cache.write
|
|
||||||
raise BuildError.new("Failed to build #{target}")
|
|
||||||
end
|
|
||||||
result
|
|
||||||
end
|
end
|
||||||
|
@targets.each do |target, target_params|
|
||||||
|
process_target.call(target)
|
||||||
|
end
|
||||||
|
ensure
|
||||||
|
cache.write
|
||||||
end
|
end
|
||||||
@targets.each do |target, target_params|
|
|
||||||
process_target.call(target)
|
|
||||||
end
|
|
||||||
cache.write
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -176,6 +176,21 @@ module Rscons
|
|||||||
|
|
||||||
expect { env.process }.to raise_error BuildError, /Failed.to.build.main.o/
|
expect { env.process }.to raise_error BuildError, /Failed.to.build.main.o/
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "writes the cache when the Builder raises an exception" do
|
||||||
|
env = Environment.new
|
||||||
|
env.Object("module.o", "module.c")
|
||||||
|
|
||||||
|
cache = "cache"
|
||||||
|
Cache.should_receive(:instance).and_return(cache)
|
||||||
|
cache.should_receive(:clear_checksum_cache!)
|
||||||
|
env.stub(:run_builder) do |builder, target, sources, cache, vars|
|
||||||
|
raise "Ruby exception thrown by builder"
|
||||||
|
end
|
||||||
|
cache.should_receive(:write)
|
||||||
|
|
||||||
|
expect { env.process }.to raise_error RuntimeError, /Ruby exception thrown by builder/
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "#clear_targets" do
|
describe "#clear_targets" do
|
||||||
|
Loading…
x
Reference in New Issue
Block a user