Skip to content

Commit

Permalink
Discard fragments when parsing unnamed URLs (#3940)
Browse files Browse the repository at this point in the history
## Summary

Closes #3934.
  • Loading branch information
charliermarsh committed May 31, 2024
1 parent 72b1642 commit 8c11f99
Show file tree
Hide file tree
Showing 5 changed files with 67 additions and 6 deletions.
7 changes: 7 additions & 0 deletions crates/pep508-rs/src/verbatim_url.rs
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,13 @@ impl VerbatimUrl {
pub fn to_url(&self) -> Url {
self.url.clone()
}

/// Return the underlying [`Path`], if the URL is a file URL.
pub fn as_path(&self) -> Result<PathBuf, VerbatimUrlError> {
self.url
.to_file_path()
.map_err(|_| VerbatimUrlError::UrlConversion(self.url.to_file_path().unwrap()))
}
}

// This impl is written out because the `derive` doesn't seem to get it right.
Expand Down
4 changes: 2 additions & 2 deletions crates/pypi-types/src/parsed_url.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ impl UnnamedRequirementUrl for VerbatimParsedUrl {
) -> Result<Self, Self::Err> {
let verbatim = VerbatimUrl::parse_path(&path, &working_dir)?;
let parsed_path_url = ParsedPathUrl {
path: verbatim.as_path()?,
url: verbatim.to_url(),
path: working_dir.as_ref().join(path),
editable: false,
};
Ok(Self {
Expand All @@ -72,8 +72,8 @@ impl UnnamedRequirementUrl for VerbatimParsedUrl {
fn parse_absolute_path(path: impl AsRef<Path>) -> Result<Self, Self::Err> {
let verbatim = VerbatimUrl::parse_absolute_path(&path)?;
let parsed_path_url = ParsedPathUrl {
path: verbatim.as_path()?,
url: verbatim.to_url(),
path: path.as_ref().to_path_buf(),
editable: false,
};
Ok(Self {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ RequirementsTxt {
query: None,
fragment: None,
},
path: "<REQUIREMENTS_DIR>/./scripts/packages/black_editable",
path: "<REQUIREMENTS_DIR>/scripts/packages/black_editable",
editable: false,
},
),
Expand Down Expand Up @@ -70,7 +70,7 @@ RequirementsTxt {
query: None,
fragment: None,
},
path: "<REQUIREMENTS_DIR>/./scripts/packages/black_editable",
path: "<REQUIREMENTS_DIR>/scripts/packages/black_editable",
editable: false,
},
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ RequirementsTxt {
query: None,
fragment: None,
},
path: "<REQUIREMENTS_DIR>/./scripts/packages/black_editable",
path: "<REQUIREMENTS_DIR>/scripts/packages/black_editable",
editable: false,
},
),
Expand Down Expand Up @@ -70,7 +70,7 @@ RequirementsTxt {
query: None,
fragment: None,
},
path: "<REQUIREMENTS_DIR>/./scripts/packages/black_editable",
path: "<REQUIREMENTS_DIR>/scripts/packages/black_editable",
editable: false,
},
),
Expand Down
54 changes: 54 additions & 0 deletions crates/uv/tests/pip_compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3442,6 +3442,60 @@ fn deduplicate_editable() -> Result<()> {
Ok(())
}

#[test]
fn strip_fragment_unnamed() -> Result<()> {
let context = TestContext::new("3.12");
let requirements_in = context.temp_dir.child("requirements.in");
requirements_in.write_str(indoc! {r"
../../scripts/packages/black_editable#egg=black
"
})?;

uv_snapshot!(context.filters(), context.compile()
.arg(requirements_in.path())
.current_dir(current_dir()?), @r###"
success: true
exit_code: 0
----- stdout -----
# This file was autogenerated by uv via the following command:
# uv pip compile --cache-dir [CACHE_DIR] --exclude-newer 2024-03-25T00:00:00Z [TEMP_DIR]/requirements.in
../../scripts/packages/black_editable#egg=black
# via -r [TEMP_DIR]/requirements.in
----- stderr -----
Resolved 1 package in [TIME]
"###);

Ok(())
}

#[test]
fn strip_fragment_named() -> Result<()> {
let context = TestContext::new("3.12");
let requirements_in = context.temp_dir.child("requirements.in");
requirements_in.write_str(indoc! {r"
black @ ../../scripts/packages/black_editable#egg=black
"
})?;

uv_snapshot!(context.filters(), context.compile()
.arg(requirements_in.path())
.current_dir(current_dir()?), @r###"
success: true
exit_code: 0
----- stdout -----
# This file was autogenerated by uv via the following command:
# uv pip compile --cache-dir [CACHE_DIR] --exclude-newer 2024-03-25T00:00:00Z [TEMP_DIR]/requirements.in
../../scripts/packages/black_editable#egg=black
# via -r [TEMP_DIR]/requirements.in
----- stderr -----
Resolved 1 package in [TIME]
"###);

Ok(())
}

#[test]
fn recursive_extras_direct_url() -> Result<()> {
let context = TestContext::new("3.12");
Expand Down

0 comments on commit 8c11f99

Please sign in to comment.