Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cargo fix issue (absolute path) #6415

Closed
D4nte opened this issue Dec 11, 2018 · 8 comments · Fixed by #6434
Closed

cargo fix issue (absolute path) #6415

D4nte opened this issue Dec 11, 2018 · 8 comments · Fixed by #6434
Assignees

Comments

@D4nte
Copy link

D4nte commented Dec 11, 2018

Problem

$ cargo fix --edition --allow-staged
    Checking secp256k1_support v0.1.0 (/Users/froyer/src/swap/vendor/secp256k1_support)
    Checking bitcoin_support v0.1.0 (/Users/froyer/src/swap/vendor/bitcoin_support)
    Checking bam v0.1.0 (/Users/froyer/src/swap/vendor/bam)
      Fixing vendor/bitcoin_support/src/transaction.rs (1 fix)
      Fixing vendor/bitcoin_support/src/lib.rs (5 fixes)
    Checking tc_web3_client v0.1.0 (/Users/froyer/src/swap/vendor/tc_web3_client)
warning: failed to automatically apply fixes suggested by rustc to crate `responses`

after fixes were automatically applied the compiler reported errors within these files:

  * vendor/bam/tests/common/buy.rs

This likely indicates a bug in either rustc or cargo itself,
and we would appreciate a bug report! You're likely to see
a number of compiler warnings after this message which cargo
attempted to fix but failed. If you could open an issue at
https://github.com/rust-lang/cargo/issues
quoting the full output of this command we'd be very appreciative!

      Fixing vendor/bam/tests/common/buy.rs (1 fix)
      Fixing vendor/bam/tests/common/setup.rs (2 fixes)
      Fixing vendor/bam/tests/requests.rs (1 fix)
    Checking ethereum_support v0.1.0 (/Users/froyer/src/swap/vendor/ethereum_support)
warning: absolute paths must start with `self`, `super`, `crate`, or an external crate name in the 2018 edition
  --> vendor/bam/tests/responses.rs:18:5
   |
18 | use common::{setup::start_server_with, *};
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `crate`: `crate::common::{setup::start_server_with, *}`
   |
   = note: `-W absolute-paths-not-starting-with-crate` implied by `-W rust-2018-compatibility`
   = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in the 2018 edition!
   = note: for more information, see issue #53130 <https://github.com/rust-lang/rust/issues/53130>

    Checking key_gen v0.1.0 (/Users/froyer/src/swap/vendor/key_gen)
    Checking ledger_query_service v0.1.0 (/Users/froyer/src/swap/application/ledger_query_service)
      Fixing vendor/ethereum_support/src/contract_address.rs (2 fixes)
      Fixing vendor/ethereum_support/src/u256_ext.rs (1 fix)
      Fixing vendor/ethereum_support/src/ether_quantity.rs (2 fixes)
      Fixing vendor/ethereum_support/src/key.rs (1 fix)
      Fixing vendor/ethereum_support/src/lib.rs (10 fixes)
      Fixing vendor/ethereum_support/src/erc20_quantity.rs (3 fixes)
    Checking comit_node_client v0.1.0 (/Users/froyer/src/swap/application/comit_node_client)
    Checking bitcoin_rpc_test_helpers v0.1.0 (/Users/froyer/src/swap/vendor/bitcoin_rpc_test_helpers)
      Fixing application/comit_node_client/src/api_client/client.rs (1 fix)
    Checking tc_bitcoincore_client v0.1.0 (/Users/froyer/src/swap/vendor/tc_bitcoincore_client)
    Checking comit_node v0.1.0 (/Users/froyer/src/swap/application/comit_node)
    Checking bitcoin_witness v0.1.0 (/Users/froyer/src/swap/vendor/bitcoin_witness)
      Fixing application/ledger_query_service/src/routes.rs (4 fixes)
      Fixing application/ledger_query_service/src/lib.rs (10 fixes)
      Fixing application/ledger_query_service/src/route_factory.rs (5 fixes)
      Fixing application/ledger_query_service/src/block_processor.rs (2 fixes)
      Fixing application/ledger_query_service/src/in_memory_query_repository.rs (1 fix)
      Fixing application/ledger_query_service/src/ledgers/ethereum.rs (3 fixes)
      Fixing application/ledger_query_service/src/bitcoind_zmq_listener.rs (2 fixes)
      Fixing application/ledger_query_service/src/in_memory_query_result_repository.rs (1 fix)
      Fixing application/ledger_query_service/src/ethereum_web3_block_poller.rs (2 fixes)
      Fixing application/ledger_query_service/src/ledgers/bitcoin.rs (3 fixes)
      Fixing vendor/bitcoin_witness/src/p2wpkh.rs (1 fix)
      Fixing vendor/bitcoin_witness/src/lib.rs (3 fixes)
      Fixing vendor/bitcoin_witness/src/primed_transaction.rs (2 fixes)
      Fixing application/ledger_query_service/src/ledgers/ethereum.rs (1 fix)
      Fixing application/ledger_query_service/src/block_processor.rs (2 fixes)
      Fixing application/comit_node_client/src/bin/comit_node_client.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/events/bob.rs (2 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/actions/alice/btc_eth.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/actions/bob/btc_erc20.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/ethereum/ether_htlc.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/bitcoin/mod.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/actions/bob/btc_eth.rs (1 fix)
      Fixing application/comit_node/src/ledger_query_service/cache.rs (3 fixes)
      Fixing application/comit_node/src/http_api/rfc003/action.rs (5 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/ethereum/validation.rs (1 fix)
      Fixing application/comit_node/src/bam_api/rfc003/swap.rs (4 fixes)
      Fixing application/comit_node/src/http_api/rfc003/get_state.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/bob/swap_request.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/save_state.rs (1 fix)
      Fixing application/comit_node/src/http_api/rfc003/swap.rs (4 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/bitcoin/validation.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/bob/handler.rs (4 fixes)
      Fixing application/comit_node/src/comit_server.rs (3 fixes)
      Fixing application/comit_node/src/ledger_query_service/first_match.rs (2 fixes)
      Fixing application/comit_node/src/ledger_query_service/client.rs (3 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/ethereum/erc20_htlc.rs (1 fix)
      Fixing application/comit_node/src/ledger_query_service/bitcoin.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/bitcoin/queries.rs (2 fixes)
      Fixing application/comit_node/src/ledger_query_service/ethereum.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/bitcoin/htlc.rs (1 fix)
      Fixing application/comit_node/src/key_store/fake_key_store.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/alice/handler.rs (5 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/error.rs (2 fixes)
      Fixing application/comit_node/src/comit_client/mod.rs (1 fix)
      Fixing application/comit_node/src/bam_api/mod.rs (5 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/alice/swap_request.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/roles.rs (3 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/find_htlc_location.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/actions/bob/mod.rs (2 fixes)
      Fixing application/comit_node/src/http_api/problem.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/ethereum/mod.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/ledger/ethereum.rs (1 fix)
      Fixing application/comit_node/src/ledger_query_service/mod.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/events/mod.rs (4 fixes)
      Fixing application/comit_node/src/ledger_query_service/fetch_transaction_stream.rs (2 fixes)
      Fixing application/comit_node/src/http_api/route_factory.rs (4 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/bitcoin/extract_secret.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/events/lqs.rs (2 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/state_machine.rs (2 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/ethereum/queries.rs (2 fixes)
      Fixing application/comit_node/src/swap_protocols/ledger/mod.rs (2 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/ethereum/extract_secret.rs (1 fix)
      Fixing application/comit_node/src/comit_client/fake.rs (2 fixes)
      Fixing application/comit_node/src/swap_protocols/asset.rs (2 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/events/alice.rs (3 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/state_store.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/ledger/bitcoin.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/bob/swap_response.rs (2 fixes)
      Fixing application/comit_node/src/comit_client/rfc003.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/actions/alice/btc_erc20.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/ledger.rs (1 fix)
      Fixing application/comit_node/src/http_api/mod.rs (2 fixes)
      Fixing application/comit_node/src/ledger_query_service/fake_query_service.rs (2 fixes)
      Fixing application/comit_node/src/comit_client/bam.rs (3 fixes)
warning: unused `#[macro_use]` import
  --> application/comit_node/src/lib.rs:18:1
   |
18 | #[macro_use]
   | ^^^^^^^^^^^^
   |
   = note: #[warn(unused_imports)] on by default

      Fixing application/comit_node/tests/parity_client/parity_client.rs (1 fix)
      Fixing application/comit_node/tests/htlc_harness/erc20_harness.rs (3 fixes)
      Fixing application/comit_node/tests/rfc003_erc20_htlc.rs (2 fixes)
      Fixing application/comit_node/tests/ethereum_wallet/wallet.rs (1 fix)
      Fixing application/comit_node/tests/htlc_harness/ether_harness.rs (3 fixes)
      Fixing application/comit_node/tests/rfc003_ether_htlc.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/actions/bob/btc_eth.rs (1 fix)
      Fixing application/comit_node/src/ledger_query_service/cache.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/bitcoin/validation.rs (1 fix)
      Fixing application/comit_node/src/ledger_query_service/fetch_transaction_stream.rs (2 fixes)
      Fixing application/comit_node/src/bam_api/mod.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/state_machine_test.rs (3 fixes)
      Fixing application/comit_node/src/swap_protocols/rfc003/state_store.rs (1 fix)
      Fixing application/comit_node/src/swap_protocols/rfc003/roles.rs (2 fixes)
      Fixing application/comit_node/src/http_api/mod.rs (2 fixes)
warning: unused `#[macro_use]` import
  --> application/comit_node/src/lib.rs:18:1
   |
18 | #[macro_use]
   | ^^^^^^^^^^^^
   |
   = note: #[warn(unused_imports)] on by default

    Finished dev [unoptimized + debuginfo] target(s) in 57.45s

vendor/bam/tests/common/buy.rs before cargo fix:

use bam::{config::Config, json::*, *};
use common::place_order::{PriceHeader, ThingHeader};
use futures::future;

pub fn config() -> Config<Request, Response> {
    Config::default().on_request("BUY", &["THING"], |request: Request| {
        let thing = header!(request.get_header("THING"));

        let price = match thing {
            ThingHeader::Phone { .. } => 420,
            ThingHeader::RetroEncabulator => 9001,
        };

        Box::new(future::ok(
            Response::new(Status::OK(0)).with_header("PRICE", PriceHeader { value: price }),
        ))
    })
}

vendor/bam/tests/common/buy.rs after cargo fix:

use bam::{config::Config, json::*, *};
use crate::common::place_order::{PriceHeader, ThingHeader};
use futures::future;

pub fn config() -> Config<Request, Response> {
    Config::default().on_request("BUY", &["THING"], |request: Request| {
        let thing = header!(request.get_header("THING"));

        let price = match thing {
            ThingHeader::Phone { .. } => 420,
            ThingHeader::RetroEncabulator => 9001,
        };

        Box::new(future::ok(
            Response::new(Status::OK(0)).with_header("PRICE", PriceHeader { value: price }),
        ))
    })
}

Steps
See command above

Possible Solution(s)
Once cargo fix --edition is done, I am not getting warnings when doing cargo check or cargo build with Rust 2018 so no work around needed.

Notes

Output of cargo version:

$ cargo version
cargo 1.31.0 (339d9f9c8 2018-11-16)
$ cat rust-toolchain
stable-2018-12-06

Let me know if you need anything else.

@alexcrichton
Copy link
Member

Thanks for the report @D4nte! Is there code we could poke around and test out? If not, can you try also running with the --broken-code flag? That, plus the warning above, can help us remotely figure out what ended up causing this

@D4nte
Copy link
Author

D4nte commented Dec 11, 2018

Hi @alexcrichton. We will opensource very soon so you can poke around and test.

Yes I have ran with --broken-code flag, this is how I got the before/after sample above.

I will update once our code is open sourced, should be before EOY.

@alexcrichton
Copy link
Member

Ok, thanks!

@D4nte
Copy link
Author

D4nte commented Dec 13, 2018

Hi, the code can be found at https://github/comit-network/comit-rs. Feel free to try out from commit 0e62f27b801824cd9938ab1475964102c080c2c0, otherwise, I can provide exact steps to reproduce tomorrow.

@ehuss
Copy link
Contributor

ehuss commented Dec 13, 2018

@alexcrichton This looks like a problem with the locking implementation. A fix is being applied twice causing corrupted output. The issue is that the fixes appear for the same file for two different integration tests (which are sharing a "common.rs").

Offhand I don't have any good suggestions. Maybe only do one target at a time?

@ehuss
Copy link
Contributor

ehuss commented Dec 13, 2018

Here is a test to demonstrate.

#[test]
fn fix_with_common() {
    let p = project()
        .file("src/lib.rs", "")
        .file("tests/t1.rs", "mod common; #[test] fn t1() { common::try(); }")
        .file("tests/t2.rs", "mod common; #[test] fn t2() { common::try(); }")
        .file("tests/common/mod.rs", "pub fn try() {}")
        .build();

    p.cargo("fix --edition --allow-no-vcs").run();

    assert_eq!(p.read_file("tests/common/mod.rs"), "pub fn r#try() {}");
}

@alexcrichton
Copy link
Member

Man @ehuss you're too good at investigating these now!

Makes sense to me, and agreed that our only recourse is probably to serialize everything within the crate. I think that'd be a relatively small change to the lock server implementation though.

@ehuss
Copy link
Contributor

ehuss commented Dec 13, 2018

OK, I'll take a look.

@ehuss ehuss self-assigned this Dec 13, 2018
bors added a commit that referenced this issue Dec 13, 2018
cargo fix: fix targets with shared sources.

If `cargo fix` attempts to fix multiple targets concurrently that have shared
source files, it would apply fixes multiple times causing corruption of the
source code. Fix this by locking on the package path instead of the target
filename, essentially serializing all targets within a package.

Fixes #6415.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants