[INFO] crate devp2p 0.4.1 is already in cache [INFO] extracting crate devp2p 0.4.1 into work/ex/clippy-test-run/sources/stable/reg/devp2p/0.4.1 [INFO] extracting crate devp2p 0.4.1 into work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/devp2p/0.4.1 [INFO] validating manifest of devp2p-0.4.1 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 devp2p-0.4.1 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 devp2p-0.4.1 [INFO] finished frobbing devp2p-0.4.1 [INFO] frobbed toml for devp2p-0.4.1 written to work/ex/clippy-test-run/sources/stable/reg/devp2p/0.4.1/Cargo.toml [INFO] started frobbing devp2p-0.4.1 [INFO] finished frobbing devp2p-0.4.1 [INFO] frobbed toml for devp2p-0.4.1 written to work/ex/clippy-test-run/sources/stable+rustflags=-Dclippy%3A%3Ainto_iter_on_array/reg/devp2p/0.4.1/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 devp2p-0.4.1 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/devp2p/0.4.1:/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] 3d54cb50a908abbdc100601ef79b70a2c2fcc23fcdceaf723ffc99fff9864380 [INFO] running `"docker" "start" "-a" "3d54cb50a908abbdc100601ef79b70a2c2fcc23fcdceaf723ffc99fff9864380"` [INFO] [stderr] Checking tokio-timer-plus v0.1.3 [INFO] [stderr] Checking ethereum-rlp v0.2.3 [INFO] [stderr] Checking ethereum-bigint v0.2.9 [INFO] [stderr] Checking ethereum-trie v0.3.8 [INFO] [stderr] Checking ethereum-bloom v0.2.1 [INFO] [stderr] Checking ethereum-block-core v0.1.0 [INFO] [stderr] Checking dpt v0.3.1 [INFO] [stderr] Checking rlpx v0.4.1 [INFO] [stderr] Checking ethereum-block v0.3.5 [INFO] [stderr] Checking devp2p v0.4.1 (/opt/crater/workdir) [INFO] [stderr] warning: unused import: `future` [INFO] [stderr] --> src/raw.rs:9:61 [INFO] [stderr] | [INFO] [stderr] 9 | use futures::{StartSend, Async, Poll, Stream, Sink, Future, future}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `Decodable` [INFO] [stderr] --> src/eth/proto.rs:1:22 [INFO] [stderr] | [INFO] [stderr] 1 | use rlp::{Encodable, Decodable, RlpStream, DecoderError, UntrustedRlp}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Address`, `B256`, `Gas` [INFO] [stderr] --> src/eth/proto.rs:2:14 [INFO] [stderr] | [INFO] [stderr] 2 | use bigint::{Address, Gas, H256, U256, B256}; [INFO] [stderr] | ^^^^^^^ ^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `future` [INFO] [stderr] --> src/eth/mod.rs:3:72 [INFO] [stderr] | [INFO] [stderr] 3 | use futures::{StartSend, Async, Poll, Stream, Sink, AsyncSink, Future, future}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::time::Duration` [INFO] [stderr] --> src/eth/mod.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use std::time::Duration; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/eth/mod.rs:133:17 [INFO] [stderr] | [INFO] [stderr] 133 | / return Ok(Async::Ready(Some(ETHReceiveMessage::Connected { [INFO] [stderr] 134 | | node, version [INFO] [stderr] 135 | | }))) [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 133 | Ok(Async::Ready(Some(ETHReceiveMessage::Connected { [INFO] [stderr] 134 | node, version [INFO] [stderr] 135 | }))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/eth/mod.rs:138:17 [INFO] [stderr] | [INFO] [stderr] 138 | / return Ok(Async::Ready(Some(ETHReceiveMessage::Disconnected { [INFO] [stderr] 139 | | node [INFO] [stderr] 140 | | }))) [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 138 | Ok(Async::Ready(Some(ETHReceiveMessage::Disconnected { [INFO] [stderr] 139 | node [INFO] [stderr] 140 | }))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/eth/mod.rs:153:17 [INFO] [stderr] | [INFO] [stderr] 153 | / return Ok(Async::Ready(Some(ETHReceiveMessage::Normal { [INFO] [stderr] 154 | | node, version: capability.version, [INFO] [stderr] 155 | | data: message, [INFO] [stderr] 156 | | }))) [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 153 | Ok(Async::Ready(Some(ETHReceiveMessage::Normal { [INFO] [stderr] 154 | node, version: capability.version, [INFO] [stderr] 155 | data: message, [INFO] [stderr] 156 | }))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/raw.rs:125:9 [INFO] [stderr] | [INFO] [stderr] 125 | Ok(Async::Ready(())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/raw.rs:145:9 [INFO] [stderr] | [INFO] [stderr] 145 | Ok(Async::Ready(())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Future` [INFO] [stderr] --> src/eth/mod.rs:3:64 [INFO] [stderr] | [INFO] [stderr] 3 | use futures::{StartSend, Async, Poll, Stream, Sink, AsyncSink, Future, future}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `v` [INFO] [stderr] --> src/eth/mod.rs:174:36 [INFO] [stderr] | [INFO] [stderr] 174 | Ok(AsyncSink::NotReady(v)) => Ok(AsyncSink::NotReady(val)), [INFO] [stderr] | ^ help: consider using `_v` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/raw.rs:46:13 [INFO] [stderr] | [INFO] [stderr] 46 | let mut rlpx = RLPxStream::new(handle, secret_key.clone(), [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `network_id` [INFO] [stderr] --> src/eth/mod.rs:48:5 [INFO] [stderr] | [INFO] [stderr] 48 | network_id: usize, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (9/7) [INFO] [stderr] --> src/raw.rs:37:5 [INFO] [stderr] | [INFO] [stderr] 37 | / pub fn new(addr: &SocketAddr, public_addr: &IpAddr, [INFO] [stderr] 38 | | handle: &Handle, secret_key: SecretKey, [INFO] [stderr] 39 | | protocol_version: usize, client_version: String, [INFO] [stderr] 40 | | capabilities: Vec, [INFO] [stderr] ... | [INFO] [stderr] 66 | | }) [INFO] [stderr] 67 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `connected`. [INFO] [stderr] --> src/raw.rs:108:34 [INFO] [stderr] | [INFO] [stderr] 108 | for i in 0..min(self.config.optimal_peers_len - self.rlpx.active_peers().len(), [INFO] [stderr] | __________________________________^ [INFO] [stderr] 109 | | connected.len() / self.config.reconnect_dividend) { [INFO] [stderr] | |_________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 108 | for in connected.iter().take(min(self.config.optimal_peers_len - self.rlpx.active_peers().len(), [INFO] [stderr] 109 | connected.len() / self.config.reconnect_dividend)) { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/eth/proto.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | / NewBlock { [INFO] [stderr] 33 | | block: Block, [INFO] [stderr] 34 | | total_difficulty: U256 [INFO] [stderr] 35 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/eth/proto.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | / NewBlock { [INFO] [stderr] 33 | | block: Block, [INFO] [stderr] 34 | | total_difficulty: U256 [INFO] [stderr] 35 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eth/proto.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | / match self { [INFO] [stderr] 43 | | ÐMessage::Status { .. } => 0, [INFO] [stderr] 44 | | ÐMessage::NewBlockHashes(_) => 1, [INFO] [stderr] 45 | | ÐMessage::Transactions(_) => 2, [INFO] [stderr] ... | [INFO] [stderr] 52 | | ÐMessage::Unknown => 127, [INFO] [stderr] 53 | | } [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] 42 | match *self { [INFO] [stderr] 43 | ETHMessage::Status { .. } => 0, [INFO] [stderr] 44 | ETHMessage::NewBlockHashes(_) => 1, [INFO] [stderr] 45 | ETHMessage::Transactions(_) => 2, [INFO] [stderr] 46 | ETHMessage::GetBlockHeadersByNumber { .. } => 3, [INFO] [stderr] 47 | ETHMessage::GetBlockHeadersByHash { .. } => 3, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/eth/proto.rs:86:34 [INFO] [stderr] | [INFO] [stderr] 86 | reverse: if reverse == 0 { false } else { true }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(reverse == 0)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/eth/proto.rs:93:34 [INFO] [stderr] | [INFO] [stderr] 93 | reverse: if reverse == 0 { false } else { true }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(reverse == 0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eth/proto.rs:126:9 [INFO] [stderr] | [INFO] [stderr] 126 | / match self { [INFO] [stderr] 127 | | ÐMessage::Status { [INFO] [stderr] 128 | | protocol_version, network_id, total_difficulty, best_hash, genesis_hash [INFO] [stderr] 129 | | } => { [INFO] [stderr] ... | [INFO] [stderr] 188 | | }, [INFO] [stderr] 189 | | } [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] 126 | match *self { [INFO] [stderr] 127 | ETHMessage::Status { [INFO] [stderr] 128 | protocol_version, network_id, total_difficulty, best_hash, genesis_hash [INFO] [stderr] 129 | } => { [INFO] [stderr] 130 | s.begin_list(5); [INFO] [stderr] 131 | s.append(&protocol_version); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/eth/mod.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / Normal { [INFO] [stderr] 29 | | node: H512, [INFO] [stderr] 30 | | version: usize, [INFO] [stderr] 31 | | data: ETHMessage, [INFO] [stderr] 32 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/eth/mod.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / Normal { [INFO] [stderr] 29 | | node: H512, [INFO] [stderr] 30 | | version: usize, [INFO] [stderr] 31 | | data: ETHMessage, [INFO] [stderr] 32 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (11/7) [INFO] [stderr] --> src/eth/mod.rs:53:5 [INFO] [stderr] | [INFO] [stderr] 53 | / pub fn new(addr: &SocketAddr, public_addr: &IpAddr, [INFO] [stderr] 54 | | handle: &Handle, secret_key: SecretKey, [INFO] [stderr] 55 | | client_version: String, network_id: usize, [INFO] [stderr] 56 | | genesis_hash: H256, best_hash: H256, [INFO] [stderr] ... | [INFO] [stderr] 70 | | }) [INFO] [stderr] 71 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/eth/mod.rs:110:20 [INFO] [stderr] | [INFO] [stderr] 110 | if capabilities.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `capabilities.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: unused import: `future` [INFO] [stderr] --> src/raw.rs:9:61 [INFO] [stderr] | [INFO] [stderr] 9 | use futures::{StartSend, Async, Poll, Stream, Sink, Future, future}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `Decodable` [INFO] [stderr] --> src/eth/proto.rs:1:22 [INFO] [stderr] | [INFO] [stderr] 1 | use rlp::{Encodable, Decodable, RlpStream, DecoderError, UntrustedRlp}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `Address`, `B256`, `Gas` [INFO] [stderr] --> src/eth/proto.rs:2:14 [INFO] [stderr] | [INFO] [stderr] 2 | use bigint::{Address, Gas, H256, U256, B256}; [INFO] [stderr] | ^^^^^^^ ^^^ ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused imports: `DecoderError`, `Encodable`, `RlpStream` [INFO] [stderr] --> src/eth/proto.rs:196:21 [INFO] [stderr] | [INFO] [stderr] 196 | use rlp::{self, Encodable, Decodable, RlpStream, DecoderError, UntrustedRlp}; [INFO] [stderr] | ^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `future` [INFO] [stderr] --> src/eth/mod.rs:3:72 [INFO] [stderr] | [INFO] [stderr] 3 | use futures::{StartSend, Async, Poll, Stream, Sink, AsyncSink, Future, future}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::time::Duration` [INFO] [stderr] --> src/eth/mod.rs:11:5 [INFO] [stderr] | [INFO] [stderr] 11 | use std::time::Duration; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/eth/mod.rs:133:17 [INFO] [stderr] | [INFO] [stderr] 133 | / return Ok(Async::Ready(Some(ETHReceiveMessage::Connected { [INFO] [stderr] 134 | | node, version [INFO] [stderr] 135 | | }))) [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_return)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 133 | Ok(Async::Ready(Some(ETHReceiveMessage::Connected { [INFO] [stderr] 134 | node, version [INFO] [stderr] 135 | }))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/eth/mod.rs:138:17 [INFO] [stderr] | [INFO] [stderr] 138 | / return Ok(Async::Ready(Some(ETHReceiveMessage::Disconnected { [INFO] [stderr] 139 | | node [INFO] [stderr] 140 | | }))) [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 138 | Ok(Async::Ready(Some(ETHReceiveMessage::Disconnected { [INFO] [stderr] 139 | node [INFO] [stderr] 140 | }))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unneeded return statement [INFO] [stderr] --> src/eth/mod.rs:153:17 [INFO] [stderr] | [INFO] [stderr] 153 | / return Ok(Async::Ready(Some(ETHReceiveMessage::Normal { [INFO] [stderr] 154 | | node, version: capability.version, [INFO] [stderr] 155 | | data: message, [INFO] [stderr] 156 | | }))) [INFO] [stderr] | |____________________^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_return [INFO] [stderr] help: remove `return` as shown [INFO] [stderr] | [INFO] [stderr] 153 | Ok(Async::Ready(Some(ETHReceiveMessage::Normal { [INFO] [stderr] 154 | node, version: capability.version, [INFO] [stderr] 155 | data: message, [INFO] [stderr] 156 | }))) [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/raw.rs:125:9 [INFO] [stderr] | [INFO] [stderr] 125 | Ok(Async::Ready(())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unreachable_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unreachable expression [INFO] [stderr] --> src/raw.rs:145:9 [INFO] [stderr] | [INFO] [stderr] 145 | Ok(Async::Ready(())) [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Decodable` [INFO] [stderr] --> src/eth/proto.rs:196:32 [INFO] [stderr] | [INFO] [stderr] 196 | use rlp::{self, Encodable, Decodable, RlpStream, DecoderError, UntrustedRlp}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Future` [INFO] [stderr] --> src/eth/mod.rs:3:64 [INFO] [stderr] | [INFO] [stderr] 3 | use futures::{StartSend, Async, Poll, Stream, Sink, AsyncSink, Future, future}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused variable: `v` [INFO] [stderr] --> src/eth/mod.rs:174:36 [INFO] [stderr] | [INFO] [stderr] 174 | Ok(AsyncSink::NotReady(v)) => Ok(AsyncSink::NotReady(val)), [INFO] [stderr] | ^ help: consider using `_v` instead [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/raw.rs:46:13 [INFO] [stderr] | [INFO] [stderr] 46 | let mut rlpx = RLPxStream::new(handle, secret_key.clone(), [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: field is never used: `network_id` [INFO] [stderr] --> src/eth/mod.rs:48:5 [INFO] [stderr] | [INFO] [stderr] 48 | network_id: usize, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (9/7) [INFO] [stderr] --> src/raw.rs:37:5 [INFO] [stderr] | [INFO] [stderr] 37 | / pub fn new(addr: &SocketAddr, public_addr: &IpAddr, [INFO] [stderr] 38 | | handle: &Handle, secret_key: SecretKey, [INFO] [stderr] 39 | | protocol_version: usize, client_version: String, [INFO] [stderr] 40 | | capabilities: Vec, [INFO] [stderr] ... | [INFO] [stderr] 66 | | }) [INFO] [stderr] 67 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::too_many_arguments)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: the loop variable `i` is only used to index `connected`. [INFO] [stderr] --> src/raw.rs:108:34 [INFO] [stderr] | [INFO] [stderr] 108 | for i in 0..min(self.config.optimal_peers_len - self.rlpx.active_peers().len(), [INFO] [stderr] | __________________________________^ [INFO] [stderr] 109 | | connected.len() / self.config.reconnect_dividend) { [INFO] [stderr] | |_________________________________________________________________________________________^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_range_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stderr] help: consider using an iterator [INFO] [stderr] | [INFO] [stderr] 108 | for in connected.iter().take(min(self.config.optimal_peers_len - self.rlpx.active_peers().len(), [INFO] [stderr] 109 | connected.len() / self.config.reconnect_dividend)) { [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/eth/proto.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | / NewBlock { [INFO] [stderr] 33 | | block: Block, [INFO] [stderr] 34 | | total_difficulty: U256 [INFO] [stderr] 35 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::large_enum_variant)] on by default [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/eth/proto.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | / NewBlock { [INFO] [stderr] 33 | | block: Block, [INFO] [stderr] 34 | | total_difficulty: U256 [INFO] [stderr] 35 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eth/proto.rs:42:9 [INFO] [stderr] | [INFO] [stderr] 42 | / match self { [INFO] [stderr] 43 | | ÐMessage::Status { .. } => 0, [INFO] [stderr] 44 | | ÐMessage::NewBlockHashes(_) => 1, [INFO] [stderr] 45 | | ÐMessage::Transactions(_) => 2, [INFO] [stderr] ... | [INFO] [stderr] 52 | | ÐMessage::Unknown => 127, [INFO] [stderr] 53 | | } [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] 42 | match *self { [INFO] [stderr] 43 | ETHMessage::Status { .. } => 0, [INFO] [stderr] 44 | ETHMessage::NewBlockHashes(_) => 1, [INFO] [stderr] 45 | ETHMessage::Transactions(_) => 2, [INFO] [stderr] 46 | ETHMessage::GetBlockHeadersByNumber { .. } => 3, [INFO] [stderr] 47 | ETHMessage::GetBlockHeadersByHash { .. } => 3, [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/eth/proto.rs:86:34 [INFO] [stderr] | [INFO] [stderr] 86 | reverse: if reverse == 0 { false } else { true }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(reverse == 0)` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::needless_bool)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: this if-then-else expression returns a bool literal [INFO] [stderr] --> src/eth/proto.rs:93:34 [INFO] [stderr] | [INFO] [stderr] 93 | reverse: if reverse == 0 { false } else { true }, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: you can reduce it to: `!(reverse == 0)` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_bool [INFO] [stderr] [INFO] [stderr] warning: you don't need to add `&` to all patterns [INFO] [stderr] --> src/eth/proto.rs:126:9 [INFO] [stderr] | [INFO] [stderr] 126 | / match self { [INFO] [stderr] 127 | | ÐMessage::Status { [INFO] [stderr] 128 | | protocol_version, network_id, total_difficulty, best_hash, genesis_hash [INFO] [stderr] 129 | | } => { [INFO] [stderr] ... | [INFO] [stderr] 188 | | }, [INFO] [stderr] 189 | | } [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] 126 | match *self { [INFO] [stderr] 127 | ETHMessage::Status { [INFO] [stderr] 128 | protocol_version, network_id, total_difficulty, best_hash, genesis_hash [INFO] [stderr] 129 | } => { [INFO] [stderr] 130 | s.begin_list(5); [INFO] [stderr] 131 | s.append(&protocol_version); [INFO] [stderr] ... [INFO] [stderr] [INFO] [stderr] warning: large size difference between variants [INFO] [stderr] --> src/eth/mod.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / Normal { [INFO] [stderr] 29 | | node: H512, [INFO] [stderr] 30 | | version: usize, [INFO] [stderr] 31 | | data: ETHMessage, [INFO] [stderr] 32 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] help: consider boxing the large fields to reduce the total size of the enum [INFO] [stderr] --> src/eth/mod.rs:28:5 [INFO] [stderr] | [INFO] [stderr] 28 | / Normal { [INFO] [stderr] 29 | | node: H512, [INFO] [stderr] 30 | | version: usize, [INFO] [stderr] 31 | | data: ETHMessage, [INFO] [stderr] 32 | | }, [INFO] [stderr] | |_____^ [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant [INFO] [stderr] [INFO] [stderr] warning: this function has too many arguments (11/7) [INFO] [stderr] --> src/eth/mod.rs:53:5 [INFO] [stderr] | [INFO] [stderr] 53 | / pub fn new(addr: &SocketAddr, public_addr: &IpAddr, [INFO] [stderr] 54 | | handle: &Handle, secret_key: SecretKey, [INFO] [stderr] 55 | | client_version: String, network_id: usize, [INFO] [stderr] 56 | | genesis_hash: H256, best_hash: H256, [INFO] [stderr] ... | [INFO] [stderr] 70 | | }) [INFO] [stderr] 71 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stderr] [INFO] [stderr] warning: length comparison to zero [INFO] [stderr] --> src/eth/mod.rs:110:20 [INFO] [stderr] | [INFO] [stderr] 110 | if capabilities.len() == 0 { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ help: using `is_empty` is clearer and more explicit: `capabilities.is_empty()` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::len_zero)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#len_zero [INFO] [stderr] [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> examples/eth_connect.rs:9:1 [INFO] [stderr] | [INFO] [stderr] 9 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `#[macro_use]` import [INFO] [stderr] --> examples/eth_connect.rs:11:1 [INFO] [stderr] | [INFO] [stderr] 11 | #[macro_use] [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `PublicKey` [INFO] [stderr] --> examples/eth_connect.rs:20:17 [INFO] [stderr] | [INFO] [stderr] 20 | use secp256k1::{PublicKey, SecretKey}; [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `H512` [INFO] [stderr] --> examples/eth_connect.rs:29:26 [INFO] [stderr] | [INFO] [stderr] 29 | use bigint::{H256, U256, H512}; [INFO] [stderr] | ^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `Header` [INFO] [stderr] --> examples/eth_connect.rs:32:13 [INFO] [stderr] | [INFO] [stderr] 32 | use block::{Header, Block}; [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> examples/eth_connect.rs:36:35 [INFO] [stderr] | [INFO] [stderr] 36 | const GENESIS_DIFFICULTY: usize = 17179869184; [INFO] [stderr] | ^^^^^^^^^^^ help: consider: `17_179_869_184` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::unreadable_literal)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: long literal lacking separators [INFO] [stderr] --> examples/eth_connect.rs:170:49 [INFO] [stderr] | [INFO] [stderr] 170 | if number == U256::from(1920000) { [INFO] [stderr] | ^^^^^^^ help: consider: `1_920_000` [INFO] [stderr] | [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unreadable_literal [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> examples/eth_connect.rs:113:59 [INFO] [stderr] | [INFO] [stderr] 113 | let mut timeout = Timeout::new(dur, &handle).unwrap().boxed(); [INFO] [stderr] | ^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(deprecated)] on by default [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> examples/eth_connect.rs:128:29 [INFO] [stderr] | [INFO] [stderr] 128 | timeout = t.boxed(); [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> examples/eth_connect.rs:145:63 [INFO] [stderr] | [INFO] [stderr] 145 | timeout = Timeout::new(dur, &handle).unwrap().boxed(); [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: use of deprecated item 'futures::Future::boxed': removed without replacement, recommended to use a local extension trait or function if needed, more details in https://github.com/rust-lang-nursery/futures-rs/issues/228 [INFO] [stderr] --> examples/eth_connect.rs:226:71 [INFO] [stderr] | [INFO] [stderr] 226 | timeout = Timeout::new(dur, &handle).unwrap().boxed(); [INFO] [stderr] | ^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable `best_number` is assigned to, but never used [INFO] [stderr] --> examples/eth_connect.rs:103:13 [INFO] [stderr] | [INFO] [stderr] 103 | let mut best_number: U256 = U256::zero(); [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] = note: consider using `_best_number` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `when` [INFO] [stderr] --> examples/eth_connect.rs:109:13 [INFO] [stderr] | [INFO] [stderr] 109 | let mut when = Instant::now() + dur; [INFO] [stderr] | ^^^^ help: consider using `_when` instead [INFO] [stderr] [INFO] [stderr] warning: unused variable: `version` [INFO] [stderr] --> examples/eth_connect.rs:158:29 [INFO] [stderr] | [INFO] [stderr] 158 | node, data, version [INFO] [stderr] | ^^^^^^^ help: try ignoring the field: `version: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `max_headers` [INFO] [stderr] --> examples/eth_connect.rs:168:33 [INFO] [stderr] | [INFO] [stderr] 168 | number, max_headers, skip, reverse [INFO] [stderr] | ^^^^^^^^^^^ help: try ignoring the field: `max_headers: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `skip` [INFO] [stderr] --> examples/eth_connect.rs:168:46 [INFO] [stderr] | [INFO] [stderr] 168 | number, max_headers, skip, reverse [INFO] [stderr] | ^^^^ help: try ignoring the field: `skip: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `reverse` [INFO] [stderr] --> examples/eth_connect.rs:168:52 [INFO] [stderr] | [INFO] [stderr] 168 | number, max_headers, skip, reverse [INFO] [stderr] | ^^^^^^^ help: try ignoring the field: `reverse: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `max_headers` [INFO] [stderr] --> examples/eth_connect.rs:188:31 [INFO] [stderr] | [INFO] [stderr] 188 | hash, max_headers, skip, reverse [INFO] [stderr] | ^^^^^^^^^^^ help: try ignoring the field: `max_headers: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `skip` [INFO] [stderr] --> examples/eth_connect.rs:188:44 [INFO] [stderr] | [INFO] [stderr] 188 | hash, max_headers, skip, reverse [INFO] [stderr] | ^^^^ help: try ignoring the field: `skip: _` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `reverse` [INFO] [stderr] --> examples/eth_connect.rs:188:50 [INFO] [stderr] | [INFO] [stderr] 188 | hash, max_headers, skip, reverse [INFO] [stderr] | ^^^^^^^ help: try ignoring the field: `reverse: _` [INFO] [stderr] [INFO] [stderr] warning: value assigned to `best_number` is never read [INFO] [stderr] --> examples/eth_connect.rs:211:37 [INFO] [stderr] | [INFO] [stderr] 211 | best_number = header.number; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_assignments)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> examples/eth_connect.rs:86:9 [INFO] [stderr] | [INFO] [stderr] 86 | let mut client = ETHStream::new( [INFO] [stderr] | ----^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> examples/eth_connect.rs:105:9 [INFO] [stderr] | [INFO] [stderr] 105 | let mut got_bodies_for_current = true; [INFO] [stderr] | ----^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> examples/eth_connect.rs:109:9 [INFO] [stderr] | [INFO] [stderr] 109 | let mut when = Instant::now() + dur; [INFO] [stderr] | ----^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> examples/eth_connect.rs:111:29 [INFO] [stderr] | [INFO] [stderr] 111 | let (mut client_sender, mut client_receiver) = client.split(); [INFO] [stderr] | ----^^^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `NETWORK_ID` [INFO] [stderr] --> examples/eth_connect.rs:37:1 [INFO] [stderr] | [INFO] [stderr] 37 | const NETWORK_ID: usize = 1; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused `std::result::Result` that must be used [INFO] [stderr] --> examples/eth_connect.rs:78:5 [INFO] [stderr] | [INFO] [stderr] 78 | env_logger::init(); [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_must_use)] on by default [INFO] [stderr] = note: this `Result` may be an `Err` variant, which should be handled [INFO] [stderr] [INFO] [stderr] warning: this loop could be written as a `while let` loop [INFO] [stderr] --> examples/eth_connect.rs:117:5 [INFO] [stderr] | [INFO] [stderr] 117 | / loop { [INFO] [stderr] 118 | | let ret = match core.run( [INFO] [stderr] 119 | | client_future [INFO] [stderr] 120 | | .select2(timeout) [INFO] [stderr] ... | [INFO] [stderr] 248 | | client_future = new_client_receiver.into_future(); [INFO] [stderr] 249 | | } [INFO] [stderr] | |_____^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(clippy::while_let_loop)] on by default [INFO] [stderr] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#while_let_loop [INFO] [stderr] help: try [INFO] [stderr] | [INFO] [stderr] 117 | while let Ok(ret) = core.run( [INFO] [stderr] 118 | client_future [INFO] [stderr] 119 | .select2(timeout) [INFO] [stderr] 120 | ) { .. } [INFO] [stderr] | [INFO] [stderr] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 34.83s [INFO] running `"docker" "inspect" "3d54cb50a908abbdc100601ef79b70a2c2fcc23fcdceaf723ffc99fff9864380"` [INFO] running `"docker" "rm" "-f" "3d54cb50a908abbdc100601ef79b70a2c2fcc23fcdceaf723ffc99fff9864380"` [INFO] [stdout] 3d54cb50a908abbdc100601ef79b70a2c2fcc23fcdceaf723ffc99fff9864380