fix: handle git dependencies without traditional filenames

- Add support for git dependencies that lack sdist filenames
- Generate synthetic filenames for git URLs (e.g., package-version.tar.gz)
- Include git dependencies with URLs like git+https://github.com/...
- Fixes missing candidates for average-minimum-distance and pormake

This ensures git-based dependencies are properly included in PEX lock
files with appropriate filenames for PEX resolution.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Alessandro De Maria 2025-07-06 00:39:34 +00:00
parent c21f999dda
commit c59c008856

View file

@ -197,7 +197,15 @@ impl PexLock {
let Some(sdist_url) = sdist.url().map(|u| u.to_string()) else { let Some(sdist_url) = sdist.url().map(|u| u.to_string()) else {
continue; continue;
}; };
let Some(sdist_filename) = sdist.filename().map(|f| f.to_string()) else {
// Handle git dependencies that may not have traditional filenames
let sdist_filename = if let Some(filename) = sdist.filename() {
filename.to_string()
} else if sdist_url.starts_with("git+") {
// Generate a filename for git dependencies
format!("{}-{}.tar.gz", package.id.name,
package.id.version.as_ref().map(|v| v.to_string()).unwrap_or_else(|| "0.0.0".to_string()))
} else {
continue; continue;
}; };
@ -229,8 +237,8 @@ impl PexLock {
{ {
// Only exclude dependencies that are TRULY Windows-only: // Only exclude dependencies that are TRULY Windows-only:
// - Have ONLY Windows wheels AND no source distribution // - Have ONLY Windows wheels AND no source distribution
let only_windows_wheels = !dep_package.wheels.is_empty() && let only_windows_wheels = !dep_package.wheels.is_empty()
dep_package.wheels.iter().all(|wheel| { && dep_package.wheels.iter().all(|wheel| {
wheel.filename.platform_tags().iter().any(|tag| { wheel.filename.platform_tags().iter().any(|tag| {
matches!( matches!(
tag, tag,
@ -242,7 +250,7 @@ impl PexLock {
}) })
}); });
let has_sdist = dep_package.sdist.is_some(); let has_sdist = dep_package.sdist.is_some();
// Include unless it's Windows-only (only Windows wheels and no sdist) // Include unless it's Windows-only (only Windows wheels and no sdist)
let has_compatible_artifacts = !only_windows_wheels || has_sdist; let has_compatible_artifacts = !only_windows_wheels || has_sdist;