From e813e44501610e2eb5094390418153a620c84146 Mon Sep 17 00:00:00 2001 From: Leon Date: Thu, 24 Nov 2022 02:43:12 +1000 Subject: [PATCH] Fix `fetch`/`post` not erroring on 4xx and 5xx statuses (#7213) # Description Closes #6803. You can look at the code and see this was always supposed to work this way, but was broken due to 1 line (per file). # User-Facing Changes See above. # Tests + Formatting Don't forget to add tests that cover your changes. Make sure you've run and fixed any issues with these commands: - `cargo fmt --all -- --check` to check standard code formatting (`cargo fmt --all` applies these changes) - `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A clippy::needless_collect` to check that you're using the standard code style - `cargo test --workspace` to check that all tests pass # After Submitting If your PR had any user-facing changes, update [the documentation](https://github.com/nushell/nushell.github.io) after the PR is merged, if necessary. This will help us keep the docs up to date. --- crates/nu-command/src/network/fetch.rs | 3 ++- crates/nu-command/src/network/post.rs | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/crates/nu-command/src/network/fetch.rs b/crates/nu-command/src/network/fetch.rs index 3f57b5222e..ed2f5542cb 100644 --- a/crates/nu-command/src/network/fetch.rs +++ b/crates/nu-command/src/network/fetch.rs @@ -450,7 +450,8 @@ fn helper( } } - match request.send() { + // Explicitly turn 4xx and 5xx statuses into errors. + match request.send().and_then(|r| r.error_for_status()) { Ok(resp) => match resp.headers().get("content-type") { Some(content_type) => { let content_type = content_type.to_str().map_err(|e| { diff --git a/crates/nu-command/src/network/post.rs b/crates/nu-command/src/network/post.rs index bdb486687f..5c64c13fd1 100644 --- a/crates/nu-command/src/network/post.rs +++ b/crates/nu-command/src/network/post.rs @@ -304,7 +304,8 @@ fn helper( } } - match request.send() { + // Explicitly turn 4xx and 5xx statuses into errors. + match request.send().and_then(|r| r.error_for_status()) { Ok(resp) => match resp.headers().get("content-type") { Some(content_type) => { let content_type = content_type.to_str().map_err(|e| {