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

Add subcommand to download the crate source #1861

Open
gsingh93 opened this issue Jul 30, 2015 · 20 comments
Open

Add subcommand to download the crate source #1861

gsingh93 opened this issue Jul 30, 2015 · 20 comments
Labels
A-new-subcommand Area: new subcommand S-needs-rfc Status: Needs an RFC to make progress.

Comments

@gsingh93
Copy link

It would be nice to be able to download the source for a crates.io crate. Currently, I either google the repository name to find the github page, or find the crate on crates.io and find the repository link on the crate page. Not only is this process long, but it also may not always work as some crates may have generic and hard to search names, may be hosted on less popular hosting platforms, or may not have include the repository link in the manifest.

A subcommand would be useful to quickly download the source without running into these issues.

@withoutboats
Copy link
Contributor

cc me

@JanLikar
Copy link
Contributor

How do you think this subcommand should be named? Should it essentially work like git clone?

@gsingh93
Copy link
Author

Maybe cargo source or cargo get-source? I prefer the former but don't feel too strongly about the name.

@alexcrichton
Copy link
Member

@JanLikar yeah I've thought in the past that cargo clone may be a good name for something like this, it could even check out the git repo if it's available or just download the source from crates.io (depending on what's selected)

@JanLikar
Copy link
Contributor

I'm willing to do this, but I would need some guidance. @alexcrichton, would you be my mentor?

@alexcrichton
Copy link
Member

Certainly! You'll likely want to start this outside of this repo and use the cargo crate on crates.io Once you've got that you'll do something along the lines of:

You may want to also explore other cargo subcommands to explore how to set up the CLI.

@JanLikar
Copy link
Contributor

Why shouldn't I just work with a copy of the master branch?

@retep998
Copy link
Member

@JanLikar Because it is fairly trivial to cargo install an external version so that as soon as you get it written and working, people can immediately use it without having to wait for it to get merged into cargo and proliferate into the version of Rust they use. Also it acts as a sort of stabilization period.

@alexcrichton
Copy link
Member

@JanLikar yeah what @retep998 says is right, and we also unfortunately can't have "unstable cargo subcommands" so anything added would be instantly stable, and we may not be ready to commit to this.

@lifthrasiir
Copy link
Contributor

FYI @JanLikar has since created the cargo-clone for this exact purpose. (I note that here because I was asked about the feature and found that the subcommand is not yet mentioned in this issue.)

@joshtriplett
Copy link
Member

cargo-clone is useful; however, it would also be nice to have a cargo-download that downloads the .crate file, with checksum verification (and optional specification of a version other than the latest).

@lilianmoraru
Copy link

I will give you one example where this would be useful to have directly inside cargo:
In CI builds you need some Rust tool and you would like to cache the build of that, so you don't waste minutes building the tool every time.
Installing another tool here would defeat the purpose - you still sit through cargo's downloads and compilation into a temporary directory that you cannot cache.

@stale
Copy link

stale bot commented Sep 18, 2018

As there hasn't been any activity here in over 6 months I've marked this as stale and if no further activity happens for 7 days I will close it.

I'm a bot so this may be in error! If this issue should remain open, could someone (the author, a team member, or any interested party) please comment to that effect?

The team would be especially grateful if such a comment included details such as:

  • Is this still relevant?
  • If so, what is blocking it?
  • Is it known what could be done to help move this forward?

Thank you for contributing!

(The cargo team is currently evaluating the use of Stale bot, and using #6035 as the tracking issue to gather feedback.)

If you're reading this comment from the distant future, fear not if this was closed automatically. If you believe it's still an issue please leave a comment and a team member can reopen this issue. Opening a new issue is also acceptable!

@stale stale bot added the stale label Sep 18, 2018
@joshtriplett
Copy link
Member

This issue still exists.

The next step would be the implementation of a command (cargo download or cargo source, not sure which name makes more sense) which would download the .crate file for a crate, and optionally unpack it into a directory.

@stale stale bot removed the stale label Sep 18, 2018
@durka
Copy link
Contributor

durka commented Sep 18, 2018

cargo-download may cover this.

@withoutboats
Copy link
Contributor

I'm inclined to close this issue. Multiple implementations as third party tools exist, and we'd want an RFC to add a built-in command to cargo. I think there's no further progress that can be made in this repository without an RFC.

@joshtriplett
Copy link
Member

That's fair; the next step is probably an RFC, not further implementation work.

@epage
Copy link
Contributor

epage commented Aug 26, 2022

Another potentially similar command: https://github.com/nakabonne/rhack

@Nemo157
Copy link
Member

Nemo157 commented Jan 27, 2023

Yet another third-party implementation of this: cargo-dl. The major difference of this (and why I wrote it to replace my previous cargo download usage) is that it verifies the checksums to detect IO issues like cargo-download has. (It also has a couple user-friendly features like grabbing existing tarballs from cargo's cache if they exist, parallel downloading so you can quickly grab a range of versions cargo dl -e serde@=1.0.{0..9}, and not defaulting to dumping binary gzip data to stdout).

@lolbinarycat
Copy link

just want to mention two existing commands that fetch package sources: cargo fetch and cargo vendor.

adding a flag to cargo fetch that would allow fetching an individual package and print the directory of that package would be one possible solution.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-new-subcommand Area: new subcommand S-needs-rfc Status: Needs an RFC to make progress.
Projects
None yet
Development

No branches or pull requests