I agree with all of this.
I would like to add that I would like cargo to support using non-up-to-date versions of dependencies when it cannot refresh its package index, if an older compatible version is available in the local cache.
For example, if I am on an airplane, and I want to add a new library to my project. Say, I add this to my Cargo.toml:
[dependencies]
some_new_crate = "0.2"
Assuming that I have already used some_new_crate for some other project (or it was a dependency of something i installed with cargo install), it should already be available in the local cache in ~/.cargo.
Assuming that the locally-cached version is compatible (say, I have 0.2.1 in the cache), I would like cargo to be able to use that, even if there might be a newer version (say, 0.2.5) on the internet. If cargo cannot refresh its index or download the latest version, it should fall back to whatever is available in the local cache.
I’d much rather have a slightly out-of-date library in my Cargo.lock (because that’s what I happened to have available in the offline cache at the time I added the dependency and Cargo had no internet connection) and be able to proceed to work on my project, than to be blocked and not be able to do any work at all, because Cargo insists on connecting to the internet to check what the newest version is.
Right now I cannot do this. It is a major blocker. There are many common libraries (such as log, rand, failure, …) that I use in many of my projects and are in my ~/.cargo cache. But I cannot use them. If I realize I need one of them for a project that hasn’t needed it yet, I am stuck. Starting a new project from scratch is impossible without an internet connection. This is awful.
EDIT: I might try some of the scripts and workarounds provided in the reddit thread linked to in the github issue from the OP.