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

Support versions starting with v in cargo add #12331

Open
lgarron opened this issue Jul 5, 2023 · 8 comments
Open

Support versions starting with v in cargo add #12331

lgarron opened this issue Jul 5, 2023 · 8 comments
Labels
C-feature-request Category: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted` Command-add S-needs-team-input Status: Needs input from team on whether/how to proceed.

Comments

@lgarron
Copy link

lgarron commented Jul 5, 2023

Problem

I keep doing something the following:

This causes the following error:

error: invalid version requirement `v0.5.0`

Caused by:
  unexpected character 'v' while parsing major version number

I do this because I have a strong habit of prefixing my version numbers with v where possible, as vX.Y.Z tends to be a more unmistakable way to specify a version. And although it is not universal, it is also very common to prefix project release tags with v — to the point that the canonical cargo test for for a tag dependency even uses a value like this: https://github.com/rust-lang/cargo/blob/5b377cece0e0dd0af686cf53ce4637d5d85c2a10/tests/testsuite/cargo_add/git_tag/mod.rs#L22C1-L22C1
(I know that doesn't have a semantic meaning in this case, but it illustrates how widespread it is to indicate a version using a prefix of v.)

Further, other tools like npm allow a prefix of v (e.g. npm install [email protected]), which is an inconsistency that causes a small stumbling block when working with multiple web technologies.

Proposed Solution

In order of preference:

  • Accept an extra v before a semantic version number.
  • Recognize the extra v and provide a helpful error message that includes something like: If you want to install a specific version, please run: cargo add [email protected]

Notes

No response

@lgarron lgarron added C-feature-request Category: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted` S-triage Status: This issue is waiting on initial triage. labels Jul 5, 2023
@epage
Copy link
Contributor

epage commented Jul 5, 2023

From the angle of prior art (see #10472)

  • npm and go support a leading v
  • poetry, yarn, pnpm, bundle, and pub do not

@epage
Copy link
Contributor

epage commented Jul 5, 2023

If we supported v here, we should also evaluate whether to support it in cargo install and all commands that accept pkgid.

@epage
Copy link
Contributor

epage commented Jul 5, 2023

Personally, I think a v being supported for cargo add would be incorrect. cargo add accepts a version requirement and not a version and we would not want to confuse that further by having a "sigil" that implies its a version. For the other commands, there would be more room for consideration with the drawback that it would make the commands more consistent in accepted syntax while adding support for @ in all commands was a drive for consistency (#10582).

@weihanglo
Copy link
Member

cargo install --version <ver-req> also falls into the same category where cargo add is. That mean if cargo is going to support v, there will be a inconsistentcy between cargo add/cargo install and other commands. I lean towards not support such thing for consistency.

@weihanglo weihanglo added S-needs-team-input Status: Needs input from team on whether/how to proceed. and removed S-triage Status: This issue is waiting on initial triage. labels Jul 18, 2023
@lgarron
Copy link
Author

lgarron commented Jul 19, 2023

It sounds like there are good reasons not to support this, as it could produce other inconsistencies.

In that case, I would advocate for the "friendly error message" in the vein that Rust is known for:

  • Recognize the extra v and provide a helpful error message that includes something like: If you want to install a specific version, please run: cargo add [email protected]

@lgarron
Copy link
Author

lgarron commented Jul 19, 2023

Personally, I think a v being supported for cargo add would be incorrect. cargo add accepts a version requirement and not a version and we would not want to confuse that further by having a "sigil" that implies its a version.

Just to note: npm also supports e.g. npm add cubing@latest. It would be similarly nice to apply the same solution as a v prefix (either support it or show a helpful message suggesting how to force an install of the latest version — particularly, a command that will pull a version even if it was just published moments ago).

@epage
Copy link
Contributor

epage commented Jul 19, 2023

@latest is being discussed at #10741

@weihanglo
Copy link
Member

  • Recognize the extra v and provide a helpful error message that includes something like: If you want to install a specific version, please run: cargo add [email protected]

The tricky part of this error message is that the suggestion “please run: cargo add [email protected]” might not be the correct one. People run with toolchain override cargo +nightly add … could also get the same error.

If we want this, suggesting [email protected] instead of the full command line args is preferable I guess?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-feature-request Category: proposal for a feature. Before PR, ping rust-lang/cargo if this is not `Feature accepted` Command-add S-needs-team-input Status: Needs input from team on whether/how to proceed.
Projects
None yet
Development

No branches or pull requests

3 participants