diff options
-rw-r--r-- | lib/backup/files.rb | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/backup/files.rb b/lib/backup/files.rb index 0032ae8f84b..31ef354ebb8 100644 --- a/lib/backup/files.rb +++ b/lib/backup/files.rb @@ -71,8 +71,18 @@ module Backup end def run_pipeline!(cmd_list, options = {}) - status_list = Open3.pipeline(*cmd_list, options) - raise Backup::Error, 'Backup failed' unless status_list.compact.all?(&:success?) + err_r, err_w = IO.pipe + 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 |