Commit 6de60ef2 authored by Jason Colyer's avatar Jason Colyer

Modified files.rb to handle tar error

Changed the run_pipeline! function to instead use Open3.pipeline_start
In doing so, the code is able to grab the last STDERR. In the case
where the error is the one from older tar versions (relating to ./),
it will not raise a Backup::Error. All other instances of command
failure will result in Backup::Error being raised.
parent aeb11d15
...@@ -71,8 +71,18 @@ module Backup ...@@ -71,8 +71,18 @@ module Backup
end end
def run_pipeline!(cmd_list, options = {}) def run_pipeline!(cmd_list, options = {})
status_list = Open3.pipeline(*cmd_list, options) err_r, err_w = IO.pipe
raise Backup::Error, 'Backup failed' unless status_list.compact.all?(&:success?) options[:err] = err_w
status = []
Open3.pipeline_start(*cmd_list, options) do |threads|
err_w.close
threads.collect { |t| status.push(t.value) }
end
unless status.compact.all?(&:success?)
unless err_r.read =~ /^g?tar: \.: Cannot mkdir: No such file or directory/
raise Backup::Error, 'Backup failed'
end
end
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment