Migrate to requirements_txt.rs (#90)

Remove the parser I wrote in favor of Konsti's which is much more
complete. The only change vs. the version in `poc-monotrail` is that I
changed the tests to use insta rather than manually storing and
comparing against JSON snapshots.

Closes https://github.com/astral-sh/puffin/issues/89.
This commit is contained in:
Charlie Marsh
2023-10-12 13:09:00 -04:00
committed by GitHub
parent 906a482499
commit 496cb7b2ef
43 changed files with 2817 additions and 950 deletions
+7 -7
View File
@@ -1,6 +1,5 @@
use std::fmt::Write;
use std::path::Path;
use std::str::FromStr;
use anyhow::Result;
use colored::Colorize;
@@ -10,7 +9,7 @@ use platform_host::Platform;
use platform_tags::Tags;
use puffin_client::PypiClientBuilder;
use puffin_interpreter::PythonExecutable;
use puffin_package::requirements::Requirements;
use puffin_package::requirements_txt::RequirementsTxt;
use crate::commands::reporters::ResolverReporter;
use crate::commands::{elapsed, ExitStatus};
@@ -25,11 +24,12 @@ pub(crate) async fn compile(
let start = std::time::Instant::now();
// Read the `requirements.txt` from disk.
let requirements_txt = std::fs::read_to_string(src)?;
// Parse the `requirements.txt` into a list of requirements.
let requirements = Requirements::from_str(&requirements_txt)?;
let requirements_txt = RequirementsTxt::parse(src, std::env::current_dir()?)?;
let requirements = requirements_txt
.requirements
.into_iter()
.map(|entry| entry.requirement)
.collect::<Vec<_>>();
if requirements.is_empty() {
writeln!(printer, "No requirements found")?;
return Ok(ExitStatus::Success);
+7 -6
View File
@@ -1,6 +1,5 @@
use std::fmt::Write;
use std::path::Path;
use std::str::FromStr;
use anyhow::Result;
use bitflags::bitflags;
@@ -14,7 +13,7 @@ use puffin_client::PypiClientBuilder;
use puffin_installer::{LocalIndex, RemoteDistribution};
use puffin_interpreter::{PythonExecutable, SitePackages};
use puffin_package::package_name::PackageName;
use puffin_package::requirements::Requirements;
use puffin_package::requirements_txt::RequirementsTxt;
use crate::commands::reporters::{
DownloadReporter, InstallReporter, ResolverReporter, UnzipReporter,
@@ -40,10 +39,12 @@ pub(crate) async fn sync(
let start = std::time::Instant::now();
// Read the `requirements.txt` from disk.
let requirements_txt = std::fs::read_to_string(src)?;
// Parse the `requirements.txt` into a list of requirements.
let requirements = Requirements::from_str(&requirements_txt)?;
let requirements_txt = RequirementsTxt::parse(src, std::env::current_dir()?)?;
let requirements = requirements_txt
.requirements
.into_iter()
.map(|entry| entry.requirement)
.collect::<Vec<_>>();
if requirements.is_empty() {
writeln!(printer, "No requirements found")?;
return Ok(ExitStatus::Success);