[INFO] crate mockito 0.14.0 is already in cache [INFO] extracting crate mockito 0.14.0 into work/ex/clippy-test-run/sources/stable/reg/mockito/0.14.0 [INFO] extracting crate mockito 0.14.0 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/mockito/0.14.0 [INFO] validating manifest of mockito-0.14.0 on toolchain stable [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of mockito-0.14.0 on toolchain stable+rustflags=-Dclippy::into_iter_on_array [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing mockito-0.14.0 [INFO] finished frobbing mockito-0.14.0 [INFO] frobbed toml for mockito-0.14.0 written to work/ex/clippy-test-run/sources/stable/reg/mockito/0.14.0/Cargo.toml [INFO] started frobbing mockito-0.14.0 [INFO] finished frobbing mockito-0.14.0 [INFO] frobbed toml for mockito-0.14.0 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/mockito/0.14.0/Cargo.toml [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+stable" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] linting mockito-0.14.0 against stable for clippy-test-run [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/clippy-test-run/worker-4/stable:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/clippy-test-run/sources/stable/reg/mockito/0.14.0:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+stable" "clippy" "--frozen" "--all" "--all-targets"` [INFO] [stdout] a407228c221a52bb3ea0b067c5026f820bc2f730d6eec1030fcd7b96302b4e56 [INFO] running `"docker" "start" "-a" "a407228c221a52bb3ea0b067c5026f820bc2f730d6eec1030fcd7b96302b4e56"` [INFO] [stderr] Checking mockito v0.14.0 (/opt/crater/workdir) [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/request.rs:108:13 [INFO] [stderr] | [INFO] [stderr] 108 | write!(f, "{}: {}\r\n", key, value)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/request.rs:112:13 [INFO] [stderr] | [INFO] [stderr] 112 | write!(f, "{}\r\n", &String::from_utf8_lossy(&self.body)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/request.rs:108:13 [INFO] [stderr] | [INFO] [stderr] 108 | write!(f, "{}: {}\r\n", key, value)?; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::write_with_newline)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: using `write!()` with a format string that ends in a single newline, consider using `writeln!()` instead [INFO] [stderr] --> src/request.rs:112:13 [INFO] [stderr] | [INFO] [stderr] 112 | write!(f, "{}\r\n", &String::from_utf8_lossy(&self.body)) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#write_with_newline [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/server.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | mock.hits = mock.hits + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `mock.hits += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this call to `as_ref` does nothing [INFO] [stderr] --> src/server.rs:140:20 [INFO] [stderr] | [INFO] [stderr] 140 | let body = body.as_ref(); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try this: `body` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_asref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/response.rs:162:25 [INFO] [stderr] | [INFO] [stderr] 162 | let formatted = match self { [INFO] [stderr] | _________________________^ [INFO] [stderr] 163 | | &Status::Continue => "100 Continue", [INFO] [stderr] 164 | | &Status::SwitchingProtocols => "101 Switching Protocols", [INFO] [stderr] 165 | | &Status::Processing => "102 Processing", [INFO] [stderr] ... | [INFO] [stderr] 226 | | &Status::Custom(ref status_code) => status_code, [INFO] [stderr] 227 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 162 | let formatted = match *self { [INFO] [stderr] 163 | Status::Continue => "100 Continue", [INFO] [stderr] 164 | Status::SwitchingProtocols => "101 Switching Protocols", [INFO] [stderr] 165 | Status::Processing => "102 Processing", [INFO] [stderr] 166 | Status::Ok => "200 OK", [INFO] [stderr] 167 | Status::Created => "201 Created", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/diff.rs:23:29 [INFO] [stderr] | [INFO] [stderr] 23 | / match change { [INFO] [stderr] 24 | | &Difference::Same(ref z) => { [INFO] [stderr] 25 | | result.push_str(&z.green().to_string()); [INFO] [stderr] 26 | | if i < diffs.len() - 1 { result.push(' '); } [INFO] [stderr] ... | [INFO] [stderr] 32 | | _ => (), [INFO] [stderr] 33 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 23 | match *change { [INFO] [stderr] 24 | Difference::Same(ref z) => { [INFO] [stderr] 25 | result.push_str(&z.green().to_string()); [INFO] [stderr] 26 | if i < diffs.len() - 1 { result.push(' '); } [INFO] [stderr] 27 | } [INFO] [stderr] 28 | Difference::Add(ref z) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:518:9 [INFO] [stderr] | [INFO] [stderr] 518 | / match self { [INFO] [stderr] 519 | | &Matcher::Missing => header_values.is_empty(), [INFO] [stderr] 520 | | // AnyOf([…Missing…]) is handled here, but [INFO] [stderr] 521 | | // AnyOf([Something]) is handled in the last block. [INFO] [stderr] ... | [INFO] [stderr] 527 | | _ => !header_values.is_empty() && header_values.iter().all(|val| self.matches_value(val)), [INFO] [stderr] 528 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 518 | match *self { [INFO] [stderr] 519 | Matcher::Missing => header_values.is_empty(), [INFO] [stderr] 520 | // AnyOf([…Missing…]) is handled here, but [INFO] [stderr] 521 | // AnyOf([Something]) is handled in the last block. [INFO] [stderr] 522 | // That's because Missing matches against all values at once, [INFO] [stderr] 523 | // but other matchers match against individual values. [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:533:9 [INFO] [stderr] | [INFO] [stderr] 533 | / match self { [INFO] [stderr] 534 | | &Matcher::Exact(ref value) => { value == other }, [INFO] [stderr] 535 | | &Matcher::Regex(ref regex) => { Regex::new(regex).unwrap().is_match(other) }, [INFO] [stderr] 536 | | &Matcher::Json(ref json_obj) => { [INFO] [stderr] ... | [INFO] [stderr] 549 | | &Matcher::Missing => false, [INFO] [stderr] 550 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 533 | match *self { [INFO] [stderr] 534 | Matcher::Exact(ref value) => { value == other }, [INFO] [stderr] 535 | Matcher::Regex(ref regex) => { Regex::new(regex).unwrap().is_match(other) }, [INFO] [stderr] 536 | Matcher::Json(ref json_obj) => { [INFO] [stderr] 537 | let other: serde_json::Value = serde_json::from_str(other).unwrap(); [INFO] [stderr] 538 | *json_obj == other [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:836:13 [INFO] [stderr] | [INFO] [stderr] 836 | / match value { [INFO] [stderr] 837 | | &Matcher::Exact(ref value) => { [INFO] [stderr] 838 | | formatted.push_str(key); [INFO] [stderr] 839 | | formatted.push_str(": "); [INFO] [stderr] ... | [INFO] [stderr] 874 | | }, [INFO] [stderr] 875 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 836 | match *value { [INFO] [stderr] 837 | Matcher::Exact(ref value) => { [INFO] [stderr] 838 | formatted.push_str(key); [INFO] [stderr] 839 | formatted.push_str(": "); [INFO] [stderr] 840 | formatted.push_str(value); [INFO] [stderr] 841 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: manual implementation of an assign operation [INFO] [stderr] --> src/server.rs:115:13 [INFO] [stderr] | [INFO] [stderr] 115 | mock.hits = mock.hits + 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ help: replace it with: `mock.hits += 1` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::assign_op_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#assign_op_pattern [INFO] [stderr] [INFO] [stderr] warning: this call to `as_ref` does nothing [INFO] [stderr] --> src/server.rs:140:20 [INFO] [stderr] | [INFO] [stderr] 140 | let body = body.as_ref(); [INFO] [stderr] | ^^^^^^^^^^^^^ help: try this: `body` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::useless_asref)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_asref [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/response.rs:162:25 [INFO] [stderr] | [INFO] [stderr] 162 | let formatted = match self { [INFO] [stderr] | _________________________^ [INFO] [stderr] 163 | | &Status::Continue => "100 Continue", [INFO] [stderr] 164 | | &Status::SwitchingProtocols => "101 Switching Protocols", [INFO] [stderr] 165 | | &Status::Processing => "102 Processing", [INFO] [stderr] ... | [INFO] [stderr] 226 | | &Status::Custom(ref status_code) => status_code, [INFO] [stderr] 227 | | }; [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::match_ref_pats)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 162 | let formatted = match *self { [INFO] [stderr] 163 | Status::Continue => "100 Continue", [INFO] [stderr] 164 | Status::SwitchingProtocols => "101 Switching Protocols", [INFO] [stderr] 165 | Status::Processing => "102 Processing", [INFO] [stderr] 166 | Status::Ok => "200 OK", [INFO] [stderr] 167 | Status::Created => "201 Created", [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/diff.rs:23:29 [INFO] [stderr] | [INFO] [stderr] 23 | / match change { [INFO] [stderr] 24 | | &Difference::Same(ref z) => { [INFO] [stderr] 25 | | result.push_str(&z.green().to_string()); [INFO] [stderr] 26 | | if i < diffs.len() - 1 { result.push(' '); } [INFO] [stderr] ... | [INFO] [stderr] 32 | | _ => (), [INFO] [stderr] 33 | | } [INFO] [stderr] | |_____________________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 23 | match *change { [INFO] [stderr] 24 | Difference::Same(ref z) => { [INFO] [stderr] 25 | result.push_str(&z.green().to_string()); [INFO] [stderr] 26 | if i < diffs.len() - 1 { result.push(' '); } [INFO] [stderr] 27 | } [INFO] [stderr] 28 | Difference::Add(ref z) => { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:518:9 [INFO] [stderr] | [INFO] [stderr] 518 | / match self { [INFO] [stderr] 519 | | &Matcher::Missing => header_values.is_empty(), [INFO] [stderr] 520 | | // AnyOf([…Missing…]) is handled here, but [INFO] [stderr] 521 | | // AnyOf([Something]) is handled in the last block. [INFO] [stderr] ... | [INFO] [stderr] 527 | | _ => !header_values.is_empty() && header_values.iter().all(|val| self.matches_value(val)), [INFO] [stderr] 528 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 518 | match *self { [INFO] [stderr] 519 | Matcher::Missing => header_values.is_empty(), [INFO] [stderr] 520 | // AnyOf([…Missing…]) is handled here, but [INFO] [stderr] 521 | // AnyOf([Something]) is handled in the last block. [INFO] [stderr] 522 | // That's because Missing matches against all values at once, [INFO] [stderr] 523 | // but other matchers match against individual values. [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:533:9 [INFO] [stderr] | [INFO] [stderr] 533 | / match self { [INFO] [stderr] 534 | | &Matcher::Exact(ref value) => { value == other }, [INFO] [stderr] 535 | | &Matcher::Regex(ref regex) => { Regex::new(regex).unwrap().is_match(other) }, [INFO] [stderr] 536 | | &Matcher::Json(ref json_obj) => { [INFO] [stderr] ... | [INFO] [stderr] 549 | | &Matcher::Missing => false, [INFO] [stderr] 550 | | } [INFO] [stderr] | |_________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 533 | match *self { [INFO] [stderr] 534 | Matcher::Exact(ref value) => { value == other }, [INFO] [stderr] 535 | Matcher::Regex(ref regex) => { Regex::new(regex).unwrap().is_match(other) }, [INFO] [stderr] 536 | Matcher::Json(ref json_obj) => { [INFO] [stderr] 537 | let other: serde_json::Value = serde_json::from_str(other).unwrap(); [INFO] [stderr] 538 | *json_obj == other [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/lib.rs:836:13 [INFO] [stderr] | [INFO] [stderr] 836 | / match value { [INFO] [stderr] 837 | | &Matcher::Exact(ref value) => { [INFO] [stderr] 838 | | formatted.push_str(key); [INFO] [stderr] 839 | | formatted.push_str(": "); [INFO] [stderr] ... | [INFO] [stderr] 874 | | }, [INFO] [stderr] 875 | | } [INFO] [stderr] | |_____________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#match_ref_pats [INFO] [stderr] help: instead of prefixing all patterns with `&`, you can dereference the expression [INFO] [stderr] | [INFO] [stderr] 836 | match *value { [INFO] [stderr] 837 | Matcher::Exact(ref value) => { [INFO] [stderr] 838 | formatted.push_str(key); [INFO] [stderr] 839 | formatted.push_str(": "); [INFO] [stderr] 840 | formatted.push_str(value); [INFO] [stderr] 841 | }, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: empty `loop {}` detected. You may want to either use `panic!()` or add `std::thread::sleep(..);` to the loop body. [INFO] [stderr] --> src/main.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | loop {} [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::empty_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_loop [INFO] [stderr] [INFO] [stderr] error[E0554]: #![feature] may not be used on the stable release channel [INFO] [stderr] --> benches/lib.rs:1:1 [INFO] [stderr] | [INFO] [stderr] 1 | #![feature(test)] [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] For more information about this error, try `rustc --explain E0554`. [INFO] [stderr] error: Could not compile `mockito`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] warning: empty `loop {}` detected. You may want to either use `panic!()` or add `std::thread::sleep(..);` to the loop body. [INFO] [stderr] --> src/main.rs:6:5 [INFO] [stderr] | [INFO] [stderr] 6 | loop {} [INFO] [stderr] | ^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::empty_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#empty_loop [INFO] [stderr] [INFO] [stderr] warning: single-character string constant used as pattern [INFO] [stderr] --> tests/lib.rs:37:47 [INFO] [stderr] | [INFO] [stderr] 37 | let mut parts = header_line.split(":"); [INFO] [stderr] | ^^^ help: try using a char instead: `':'` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::single_char_pattern)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#single_char_pattern [INFO] [stderr] [INFO] [stderr] error: build failed [INFO] running `"docker" "inspect" "a407228c221a52bb3ea0b067c5026f820bc2f730d6eec1030fcd7b96302b4e56"` [INFO] running `"docker" "rm" "-f" "a407228c221a52bb3ea0b067c5026f820bc2f730d6eec1030fcd7b96302b4e56"` [INFO] [stdout] a407228c221a52bb3ea0b067c5026f820bc2f730d6eec1030fcd7b96302b4e56