Add a resolver reporter (#225)

Closes https://github.com/astral-sh/puffin/issues/223.
This commit is contained in:
Charlie Marsh
2023-10-29 19:00:09 -07:00
committed by GitHub
parent 6da9c2f534
commit f2dd0d90be
4 changed files with 73 additions and 4 deletions
@@ -18,6 +18,7 @@ use puffin_dispatch::BuildDispatch;
use puffin_interpreter::Virtualenv;
use puffin_resolver::{Manifest, PreReleaseMode, ResolutionMode};
use crate::commands::reporters::ResolverReporter;
use crate::commands::{elapsed, ExitStatus};
use crate::index_urls::IndexUrls;
use crate::printer::Printer;
@@ -110,7 +111,8 @@ pub(crate) async fn pip_compile(
&tags,
&client,
&build_dispatch,
);
)
.with_reporter(ResolverReporter::from(printer));
let resolution = match resolver.resolve().await {
Err(puffin_resolver::ResolveError::PubGrub(pubgrub::error::PubGrubError::NoSolution(
mut derivation_tree,
+31 -1
View File
@@ -1,4 +1,5 @@
use indicatif::{ProgressBar, ProgressStyle};
use std::time::Duration;
use pep440_rs::Version;
use puffin_package::package_name::PackageName;
@@ -29,7 +30,7 @@ impl WheelFinderReporter {
}
}
impl puffin_resolver::Reporter for WheelFinderReporter {
impl puffin_resolver::WheelFinderReporter for WheelFinderReporter {
fn on_progress(&self, package: &puffin_resolver::PinnedPackage) {
self.progress
.set_message(format!("{}=={}", package.name(), package.version()));
@@ -145,3 +146,32 @@ impl puffin_installer::InstallReporter for InstallReporter {
self.progress.finish_and_clear();
}
}
#[derive(Debug)]
pub(crate) struct ResolverReporter {
progress: ProgressBar,
}
impl From<Printer> for ResolverReporter {
fn from(printer: Printer) -> Self {
let progress = ProgressBar::with_draw_target(None, printer.target());
progress.set_message("Resolving dependencies...");
progress.enable_steady_tick(Duration::from_millis(200));
progress.set_style(
ProgressStyle::with_template("{spinner:.white} {wide_msg:.dim}")
.unwrap()
.tick_strings(&["", "", "", "", "", "", "", "", "", ""]),
);
Self { progress }
}
}
impl puffin_resolver::ResolverReporter for ResolverReporter {
fn on_progress(&self, name: &PackageName, version: &Version) {
self.progress.set_message(format!("{name}=={version}"));
}
fn on_complete(&self) {
self.progress.finish_and_clear();
}
}