mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 21:35:00 +00:00
Use Metadata10 to parse PKG-INFO of legacy editable (#3450)
It turns out setuptools often uses Metadata-Version 2.1 in their
PKG-INFO:
4e766834d7/setuptools/dist.py (L64)
`Metadata23` requires Metadata-Version of at least 2.2.
This means that uv doesn't actually recognise legacy editable
installations from the most common way you'd actually get legacy
editable installations (works great for most legacy editables I make at
work though!)
Anyway, over here we only need the version and don't care about anything
else. Rather than make a `Metadata21`, I just add a version field to
`Metadata10`. The one slightly tricky thing is that only
Metadata-Version 1.2 and greater guarantee that the [version number is
PEP 440 compatible](https://peps.python.org/pep-0345/#version), so I
store the version in `Metadata10` as a `String` and only parse to
`Version` at time of use.
Also did you know that back in 2004, paramiko had a pokemon based
versioning system?
This commit is contained in:
parent
962fde29b2
commit
5a07923eb4
5 changed files with 59 additions and 6 deletions
|
@ -285,6 +285,7 @@ pub(crate) struct Project {
|
|||
#[serde(rename_all = "kebab-case")]
|
||||
pub struct Metadata10 {
|
||||
pub name: PackageName,
|
||||
pub version: String,
|
||||
}
|
||||
|
||||
impl Metadata10 {
|
||||
|
@ -296,7 +297,10 @@ impl Metadata10 {
|
|||
.get_first_value("Name")
|
||||
.ok_or(MetadataError::FieldNotFound("Name"))?,
|
||||
)?;
|
||||
Ok(Self { name })
|
||||
let version = headers
|
||||
.get_first_value("Version")
|
||||
.ok_or(MetadataError::FieldNotFound("Version"))?;
|
||||
Ok(Self { name, version })
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue