Add a resolver reporter (#225)
Closes https://github.com/astral-sh/puffin/issues/223.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user