Cargo: Publishing with a crates.io mirror has a confusing error message

Created on 7 Mar 2019  路  2Comments  路  Source: rust-lang/cargo

Problem
If one is using a mirror of crates.io, the error message you get when you attempt to publish is confusing. It says:

error: crates cannot be published to crates.io with dependencies sourced from other
registries either publish `bitflags` on crates.io or pull it into this repository
and specify it with a path and version
(crate `bitflags` is pulled from registry `https://github.com/rust-lang/crates.io-index`)

The last line clearly says that it is from "crates.io".

Steps

  1. Check out crates.io index (https://github.com/rust-lang/crates.io-index)
  2. Create a project with a dependency from crates.io.
  3. Add a .cargo/config file to set up the mirror:
[source.crates-io]
replace-with="mirror"

[source.mirror]
registry = "file:///path/to/crates.io-index"
  1. cargo publish --dry-run

Possible Solution(s)

  • Display a better error message, possibly instructing the user to disable the mirror.
  • Detect that a mirror is being used, and allow it to proceed. This seems like it could be tricky.

Notes

  • cargo 1.34.0-nightly (5c6aa46e6 2019-02-22)
  • Reported by user "calidion" on Discord #crates-io
A-registries C-bug Command-publish

Most helpful comment

Same problem, annotated ~/.cargo/config temporarily.

# [source.crates-io]
# registry = "https://github.com/rust-lang/crates.io-index"
# replace-with = 'ustc'
# [source.ustc]
# registry = "git://mirrors.ustc.edu.cn/crates.io-index"

All 2 comments

Same problem, annotated ~/.cargo/config temporarily.

# [source.crates-io]
# registry = "https://github.com/rust-lang/crates.io-index"
# replace-with = 'ustc'
# [source.ustc]
# registry = "git://mirrors.ustc.edu.cn/crates.io-index"

Connection to GitHub is basically trash for some ISPs in China, so a mirror is sometimes required. Having to comment out ~/.cargo/config every time I need to publish a crate can be annoying.

Was this page helpful?
0 / 5 - 0 ratings