From 754927c55a70fc82db1e23e256e0dd8eb5ab93db Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Fri, 1 May 2026 18:56:51 +0300 Subject: [PATCH] cli: add a progress spinner to `pakker fork init` Signed-off-by: NotAShelf Change-Id: Id40f83862483f20e569cbd27d38143f96a6a6964 --- src/cli/commands/fork.rs | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/cli/commands/fork.rs b/src/cli/commands/fork.rs index 8db8c49..96b22af 100644 --- a/src/cli/commands/fork.rs +++ b/src/cli/commands/fork.rs @@ -3,8 +3,11 @@ use std::{ fs, io::Write, path::Path, + time::Duration, }; +use indicatif::{ProgressBar, ProgressStyle}; + use crate::{ cli::ForkArgs, error::PakkerError, @@ -270,11 +273,19 @@ fn execute_init( // re-downloading objects let parent_path = Path::new(&parent_path_str); - println!( + let spinner = ProgressBar::new_spinner(); + spinner.set_style( + ProgressStyle::default_spinner() + .template("{spinner:.green} {msg}") + .expect("spinner template is valid"), + ); + spinner.enable_steady_tick(Duration::from_millis(80)); + spinner.set_message(format!( "Cloning parent repository from local path {}...", path.display() - ); + )); git::clone_repository(&fp, parent_path, &resolved_ref, None)?; + spinner.finish_and_clear(); // Ensure the cloned repo's origin is set to the upstream URL (not the local // path) @@ -317,11 +328,18 @@ fn execute_init( } } - println!("Cloning parent repository..."); - println!(" URL: {url}"); - println!(" Ref: {resolved_ref}"); - + let spinner = ProgressBar::new_spinner(); + spinner.set_style( + ProgressStyle::default_spinner() + .template("{spinner:.green} {msg}") + .expect("spinner template is valid"), + ); + spinner.enable_steady_tick(Duration::from_millis(80)); + spinner.set_message(format!( + "Cloning parent repository: {url} ({resolved_ref})" + )); git::clone_repository(&url, parent_path, &resolved_ref, None)?; + spinner.finish_and_clear(); } let commit_sha = git::get_commit_sha(parent_path, &resolved_ref)?;