Preserve parsed url in ResolvedDist -> Requirement (#3457)

Lose less information in the `ResolvedDist` -> `Requirement` conversion.
This commit is contained in:
konsti 2024-05-14 03:47:20 +02:00 committed by GitHub
parent a24124571a
commit b263fcff9c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 61 additions and 29 deletions

View file

@ -6,7 +6,7 @@ use url::Url;
use pep440_rs::VersionSpecifiers;
use pep508_rs::{MarkerEnvironment, MarkerTree, RequirementOrigin, VerbatimUrl, VersionOrUrl};
use uv_git::GitReference;
use uv_git::{GitReference, GitSha};
use uv_normalize::{ExtraName, PackageName};
use crate::{ParsedUrl, ParsedUrlError};
@ -102,6 +102,7 @@ impl Display for Requirement {
url: _,
repository,
reference,
precise: _,
subdirectory,
} => {
write!(f, " @ git+{repository}")?;
@ -158,6 +159,8 @@ pub enum RequirementSource {
repository: Url,
/// Optionally, the revision, tag, or branch to use.
reference: GitReference,
/// The precise commit to use, if known.
precise: Option<GitSha>,
/// The path to the source distribution if it is not in the repository root.
subdirectory: Option<PathBuf>,
/// The PEP 508 style url in the format
@ -192,6 +195,7 @@ impl RequirementSource {
url,
repository: git.url.repository().clone(),
reference: git.url.reference().clone(),
precise: git.url.precise(),
subdirectory: git.subdirectory,
},
ParsedUrl::Archive(archive) => RequirementSource::Url {

View file

@ -2,9 +2,7 @@ use rustc_hash::FxHashMap;
use uv_normalize::PackageName;
use crate::{
BuiltDist, Dist, Name, ParsedGitUrl, Requirement, RequirementSource, ResolvedDist, SourceDist,
};
use crate::{BuiltDist, Dist, Name, Requirement, RequirementSource, ResolvedDist, SourceDist};
/// A set of packages pinned at specific versions.
#[derive(Debug, Default, Clone)]
@ -88,7 +86,7 @@ impl From<&ResolvedDist> for Requirement {
RequirementSource::Url {
url: wheel.url.clone(),
location,
subdirectory: None,
subdirectory: wheel.subdirectory.clone(),
}
}
Dist::Built(BuiltDist::Path(wheel)) => RequirementSource::Path {
@ -108,19 +106,16 @@ impl From<&ResolvedDist> for Requirement {
RequirementSource::Url {
url: sdist.url.clone(),
location,
subdirectory: None,
}
}
Dist::Source(SourceDist::Git(sdist)) => {
let git_url = ParsedGitUrl::try_from(sdist.url.to_url())
.expect("urls must be valid at this point");
RequirementSource::Git {
url: sdist.url.clone(),
repository: git_url.url.repository().clone(),
reference: git_url.url.reference().clone(),
subdirectory: git_url.subdirectory,
subdirectory: sdist.subdirectory.clone(),
}
}
Dist::Source(SourceDist::Git(sdist)) => RequirementSource::Git {
url: sdist.url.clone(),
repository: sdist.git.repository().clone(),
reference: sdist.git.reference().clone(),
precise: sdist.git.precise(),
subdirectory: sdist.subdirectory.clone(),
},
Dist::Source(SourceDist::Path(sdist)) => RequirementSource::Path {
path: sdist.path.clone(),
url: sdist.url.clone(),
@ -129,7 +124,7 @@ impl From<&ResolvedDist> for Requirement {
Dist::Source(SourceDist::Directory(sdist)) => RequirementSource::Path {
path: sdist.path.clone(),
url: sdist.url.clone(),
editable: None,
editable: Some(sdist.editable),
},
},
ResolvedDist::Installed(dist) => RequirementSource::Registry {