Use portable path in requirements wire (#10071)
Some checks are pending
CI / Determine changes (push) Waiting to run
CI / lint (push) Waiting to run
CI / cargo clippy | ubuntu (push) Blocked by required conditions
CI / cargo clippy | windows (push) Blocked by required conditions
CI / cargo dev generate-all (push) Blocked by required conditions
CI / cargo shear (push) Waiting to run
CI / check windows trampoline | i686 (push) Blocked by required conditions
CI / cargo test | ubuntu (push) Blocked by required conditions
CI / cargo test | macos (push) Blocked by required conditions
CI / cargo test | windows (push) Blocked by required conditions
CI / check windows trampoline | aarch64 (push) Blocked by required conditions
CI / check windows trampoline | x86_64 (push) Blocked by required conditions
CI / test windows trampoline | i686 (push) Blocked by required conditions
CI / test windows trampoline | x86_64 (push) Blocked by required conditions
CI / typos (push) Waiting to run
CI / mkdocs (push) Waiting to run
CI / build binary | linux (push) Blocked by required conditions
CI / build binary | macos aarch64 (push) Blocked by required conditions
CI / build binary | macos x86_64 (push) Blocked by required conditions
CI / build binary | windows (push) Blocked by required conditions
CI / cargo build (msrv) (push) Blocked by required conditions
CI / build binary | freebsd (push) Blocked by required conditions
CI / ecosystem test | prefecthq/prefect (push) Blocked by required conditions
CI / ecosystem test | pallets/flask (push) Blocked by required conditions
CI / integration test | conda on ubuntu (push) Blocked by required conditions
CI / integration test | free-threaded on linux (push) Blocked by required conditions
CI / integration test | free-threaded on windows (push) Blocked by required conditions
CI / integration test | pypy on ubuntu (push) Blocked by required conditions
CI / integration test | pypy on windows (push) Blocked by required conditions
CI / integration test | graalpy on ubuntu (push) Blocked by required conditions
CI / integration test | graalpy on windows (push) Blocked by required conditions
CI / integration test | github actions (push) Blocked by required conditions
CI / integration test | determine publish changes (push) Blocked by required conditions
CI / integration test | uv publish (push) Blocked by required conditions
CI / check cache | ubuntu (push) Blocked by required conditions
CI / check cache | macos aarch64 (push) Blocked by required conditions
CI / check system | python on debian (push) Blocked by required conditions
CI / check system | python on fedora (push) Blocked by required conditions
CI / check system | python on ubuntu (push) Blocked by required conditions
CI / check system | python on opensuse (push) Blocked by required conditions
CI / check system | python on rocky linux 8 (push) Blocked by required conditions
CI / check system | python on rocky linux 9 (push) Blocked by required conditions
CI / check system | pypy on ubuntu (push) Blocked by required conditions
CI / check system | pyston (push) Blocked by required conditions
CI / check system | alpine (push) Blocked by required conditions
CI / check system | python on macos aarch64 (push) Blocked by required conditions
CI / check system | homebrew python on macos aarch64 (push) Blocked by required conditions
CI / check system | python on macos x86_64 (push) Blocked by required conditions
CI / check system | python3.10 on windows (push) Blocked by required conditions
CI / check system | python3.10 on windows x86 (push) Blocked by required conditions
CI / check system | python3.13 on windows (push) Blocked by required conditions
CI / check system | python3.12 via chocolatey (push) Blocked by required conditions
CI / check system | python3.9 via pyenv (push) Blocked by required conditions
CI / check system | python3.13 (push) Blocked by required conditions
CI / check system | conda3.11 on linux (push) Blocked by required conditions
CI / check system | conda3.8 on linux (push) Blocked by required conditions
CI / check system | conda3.11 on macos (push) Blocked by required conditions
CI / check system | conda3.8 on macos (push) Blocked by required conditions
CI / check system | conda3.11 on windows (push) Blocked by required conditions
CI / check system | conda3.8 on windows (push) Blocked by required conditions
CI / check system | amazonlinux (push) Blocked by required conditions
CI / check system | embedded python3.10 on windows (push) Blocked by required conditions
CI / benchmarks (push) Blocked by required conditions

This commit is contained in:
Charlie Marsh 2024-12-20 23:10:24 -05:00 committed by GitHub
parent 9128fe1866
commit 3da4fdeeb3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -7,7 +7,7 @@ use thiserror::Error;
use url::Url; use url::Url;
use uv_distribution_filename::DistExtension; use uv_distribution_filename::DistExtension;
use uv_fs::{relative_to, PortablePathBuf, CWD}; use uv_fs::{relative_to, PortablePath, PortablePathBuf, CWD};
use uv_git::{GitReference, GitSha, GitUrl}; use uv_git::{GitReference, GitSha, GitUrl};
use uv_normalize::{ExtraName, GroupName, PackageName}; use uv_normalize::{ExtraName, GroupName, PackageName};
use uv_pep440::VersionSpecifiers; use uv_pep440::VersionSpecifiers;
@ -666,7 +666,7 @@ enum RequirementSourceWire {
/// Ex) `source = { url = "<https://example.org/foo-1.0.zip>" }` /// Ex) `source = { url = "<https://example.org/foo-1.0.zip>" }`
Direct { Direct {
url: Url, url: Url,
subdirectory: Option<String>, subdirectory: Option<PortablePathBuf>,
}, },
/// Ex) `source = { path = "/home/ferris/iniconfig-2.0.0-py3-none-any.whl" }` /// Ex) `source = { path = "/home/ferris/iniconfig-2.0.0-py3-none-any.whl" }`
Path { path: PortablePathBuf }, Path { path: PortablePathBuf },
@ -709,10 +709,7 @@ impl From<RequirementSource> for RequirementSourceWire {
url: _, url: _,
} => Self::Direct { } => Self::Direct {
url: location, url: location,
subdirectory: subdirectory subdirectory: subdirectory.map(PortablePathBuf::from),
.as_deref()
.and_then(Path::to_str)
.map(ToString::to_string),
}, },
RequirementSource::Git { RequirementSource::Git {
repository, repository,
@ -731,9 +728,14 @@ impl From<RequirementSource> for RequirementSourceWire {
url.set_query(None); url.set_query(None);
// Put the subdirectory in the query. // Put the subdirectory in the query.
if let Some(subdirectory) = subdirectory.as_deref().and_then(Path::to_str) { if let Some(subdirectory) = subdirectory
.as_deref()
.map(PortablePath::from)
.as_ref()
.map(PortablePath::to_string)
{
url.query_pairs_mut() url.query_pairs_mut()
.append_pair("subdirectory", subdirectory); .append_pair("subdirectory", &subdirectory);
} }
// Put the requested reference in the query. // Put the requested reference in the query.
@ -815,13 +817,15 @@ impl TryFrom<RequirementSourceWire> for RequirementSource {
let mut repository = Url::parse(&git)?; let mut repository = Url::parse(&git)?;
let mut reference = GitReference::DefaultBranch; let mut reference = GitReference::DefaultBranch;
let mut subdirectory = None; let mut subdirectory: Option<PortablePathBuf> = None;
for (key, val) in repository.query_pairs() { for (key, val) in repository.query_pairs() {
match &*key { match &*key {
"tag" => reference = GitReference::Tag(val.into_owned()), "tag" => reference = GitReference::Tag(val.into_owned()),
"branch" => reference = GitReference::Branch(val.into_owned()), "branch" => reference = GitReference::Branch(val.into_owned()),
"rev" => reference = GitReference::from_rev(val.into_owned()), "rev" => reference = GitReference::from_rev(val.into_owned()),
"subdirectory" => subdirectory = Some(val.into_owned()), "subdirectory" => {
subdirectory = Some(PortablePathBuf::from(val.as_ref()));
}
_ => continue, _ => continue,
}; };
} }
@ -840,7 +844,7 @@ impl TryFrom<RequirementSourceWire> for RequirementSource {
if let Some(rev) = reference.as_str() { if let Some(rev) = reference.as_str() {
url.set_path(&format!("{}@{}", url.path(), rev)); url.set_path(&format!("{}@{}", url.path(), rev));
} }
if let Some(subdirectory) = &subdirectory { if let Some(subdirectory) = subdirectory.as_ref() {
url.set_fragment(Some(&format!("subdirectory={subdirectory}"))); url.set_fragment(Some(&format!("subdirectory={subdirectory}")));
} }
let url = VerbatimUrl::from_url(url); let url = VerbatimUrl::from_url(url);