Skip to content

Commit 8090c39

Browse files
committed
fix pipefail issue for run_fun!() macro
fix #66
1 parent 2995ac0 commit 8090c39

File tree

2 files changed

+18
-4
lines changed

2 files changed

+18
-4
lines changed

src/child.rs

+8-4
Original file line numberDiff line numberDiff line change
@@ -150,16 +150,20 @@ impl FunChildren {
150150

151151
fn inner_wait_with_all(&mut self, capture_stderr: bool) -> (CmdResult, String, String) {
152152
// wait for the last child result
153-
let handle = self.children.pop().unwrap();
153+
let last_handle = self.children.pop().unwrap();
154154
let mut stdout_buf = Vec::new();
155155
let mut stderr = String::new();
156-
let res = handle.wait_with_all(capture_stderr, &mut stdout_buf, &mut stderr);
157-
let _ = CmdChildren::wait_children(&mut self.children);
156+
let last_res = last_handle.wait_with_all(capture_stderr, &mut stdout_buf, &mut stderr);
157+
let res = CmdChildren::wait_children(&mut self.children);
158158
let mut stdout: String = String::from_utf8_lossy(&stdout_buf).into();
159159
if stdout.ends_with('\n') {
160160
stdout.pop();
161161
}
162-
(res, stdout, stderr)
162+
if res.is_err() && !self.ignore_error && process::pipefail_enabled() {
163+
(res, stdout, stderr)
164+
} else {
165+
(last_res, stdout, stderr)
166+
}
163167
}
164168
}
165169

tests/test_macros.rs

+10
Original file line numberDiff line numberDiff line change
@@ -255,3 +255,13 @@ fn test_empty_arg() {
255255
let opt = "";
256256
assert!(run_cmd!(ls $opt).is_ok());
257257
}
258+
259+
#[test]
260+
fn test_pipefail_in_fun() {
261+
assert!(run_cmd!(false | true).is_err());
262+
assert!(run_fun!(false | true).is_err());
263+
assert!(run_fun!(ignore false | true).is_ok());
264+
set_pipefail(false);
265+
assert!(run_fun!(ignore false | true).is_ok());
266+
set_pipefail(true);
267+
}

0 commit comments

Comments
 (0)