From 8771e7dc5f3f02b152c403575d3152722f701a67 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Fri, 8 May 2026 18:57:19 +0200 Subject: [PATCH] switch to multiprogress for git pull --- src/git.rs | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/git.rs b/src/git.rs index 3a797c3..c20d450 100644 --- a/src/git.rs +++ b/src/git.rs @@ -2,11 +2,13 @@ use crate::config::HazeConfig; use crate::Result; use git2::build::CheckoutBuilder; use git2::{Branch, BranchType, Repository, RepositoryState}; +use indicatif::{MultiProgress, ProgressBar, ProgressStyle}; use miette::{Context, IntoDiagnostic}; use std::fs::read_dir; use std::iter::once; use std::path::PathBuf; use std::process::Command; +use std::time::Duration; fn find_app_repos(config: &HazeConfig) -> Result> { let apps_dirs = once(config.sources_root.as_path().join("apps")) @@ -83,6 +85,9 @@ const GIT_BINARY: &str = match option_env!("GIT_BINARY") { pub fn pull_all(config: &HazeConfig) -> Result<()> { let (max_app, max_branch) = longest_app_branch(config)?; + let progress = MultiProgress::new(); + let pull_style = ProgressStyle::with_template("{spinner:.green} {msg}").unwrap(); + for app_dir in find_app_repos(config)? { let app_name = app_dir.file_name().unwrap().to_string_lossy(); let repo = Repository::init(&app_dir) @@ -90,17 +95,26 @@ pub fn pull_all(config: &HazeConfig) -> Result<()> { .wrap_err_with(|| format!("Failed to open repository {}", app_dir.display()))?; let branch_name = current_branch_name(&repo).unwrap_or("unknown".into()); - print!( - "{app_name: Result<()> { .wrap_err_with(|| format!("Failed to run git pull for {}", app_dir.display()))?; if output.status.success() { - println!(" ✓"); + bar.set_message(msg(" ✓")); } else { - println!(" ❌"); - eprintln!("{}", String::from_utf8_lossy(&output.stderr)) + let err = String::from_utf8_lossy(&output.stderr); + let err_line = err.lines().next().unwrap(); + bar.set_message(msg(&format!(" ❌ {err_line}"))); } + bar.finish(); } Ok(()) }