cli: colorize output in various commands
Signed-off-by: NotAShelf <raf@notashelf.dev> Change-Id: I612086bad607a92e4ac1c1f09b41534d6a6a6964
This commit is contained in:
parent
1873bb19ae
commit
616916cd48
4 changed files with 48 additions and 20 deletions
|
|
@ -5,6 +5,8 @@ use std::{
|
||||||
path::Path,
|
path::Path,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
use yansi::Paint;
|
||||||
|
|
||||||
use crate::{cli::DiffArgs, error::Result, model::LockFile};
|
use crate::{cli::DiffArgs, error::Result, model::LockFile};
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
|
|
@ -244,7 +246,7 @@ fn print_terminal_diff(
|
||||||
&& !loader_changes
|
&& !loader_changes
|
||||||
&& changes.is_empty()
|
&& changes.is_empty()
|
||||||
{
|
{
|
||||||
println!("✓ No differences found");
|
println!("{}", "✓ No differences found".green());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ use std::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use indicatif::{ProgressBar, ProgressStyle};
|
use indicatif::{ProgressBar, ProgressStyle};
|
||||||
|
use yansi::Paint;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
cli::ForkArgs,
|
cli::ForkArgs,
|
||||||
|
|
@ -367,7 +368,7 @@ fn execute_init(
|
||||||
add_to_gitignore()?;
|
add_to_gitignore()?;
|
||||||
|
|
||||||
println!();
|
println!();
|
||||||
println!("✓ Fork initialized successfully");
|
println!("{}", "✓ Fork initialized successfully".green());
|
||||||
println!(" Parent: {url}");
|
println!(" Parent: {url}");
|
||||||
println!(" Ref: {} ({})", resolved_ref, match resolved_ref_type {
|
println!(" Ref: {} ({})", resolved_ref, match resolved_ref_type {
|
||||||
RefType::Branch => "branch",
|
RefType::Branch => "branch",
|
||||||
|
|
@ -414,7 +415,7 @@ fn execute_set(
|
||||||
local_config.parent = Some(parent.clone());
|
local_config.parent = Some(parent.clone());
|
||||||
local_config.save(config_dir)?;
|
local_config.save(config_dir)?;
|
||||||
|
|
||||||
println!("✓ Fork configuration updated");
|
println!("{}", "✓ Fork configuration updated".green());
|
||||||
println!(" Parent: {}", parent.id);
|
println!(" Parent: {}", parent.id);
|
||||||
println!(" Ref: {} ({})", parent.ref_, match parent.ref_type {
|
println!(" Ref: {} ({})", parent.ref_, match parent.ref_type {
|
||||||
RefType::Branch => "branch",
|
RefType::Branch => "branch",
|
||||||
|
|
@ -515,7 +516,7 @@ fn execute_unset() -> Result<(), PakkerError> {
|
||||||
local_config.parent_config_hash = None;
|
local_config.parent_config_hash = None;
|
||||||
local_config.save(config_dir)?;
|
local_config.save(config_dir)?;
|
||||||
|
|
||||||
println!("✓ Fork configuration removed");
|
println!("{}", "✓ Fork configuration removed".green());
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
@ -640,7 +641,7 @@ fn execute_sync() -> Result<(), PakkerError> {
|
||||||
local_config.save(config_dir)?;
|
local_config.save(config_dir)?;
|
||||||
|
|
||||||
println!();
|
println!();
|
||||||
println!("✓ Parent sync complete");
|
println!("{}", "✓ Parent sync complete".green());
|
||||||
println!(" Commit: {}", &commit_sha[..8]);
|
println!(" Commit: {}", &commit_sha[..8]);
|
||||||
|
|
||||||
// Print diff of parent changes
|
// Print diff of parent changes
|
||||||
|
|
@ -678,7 +679,7 @@ fn execute_sync() -> Result<(), PakkerError> {
|
||||||
for (slug, old_file, new_file) in updated {
|
for (slug, old_file, new_file) in updated {
|
||||||
let old = old_file.as_deref().unwrap_or("?");
|
let old = old_file.as_deref().unwrap_or("?");
|
||||||
let new = new_file.as_deref().unwrap_or("?");
|
let new = new_file.as_deref().unwrap_or("?");
|
||||||
println!(" ~ {slug}: {old} → {new}");
|
println!(" {} {slug}: {old} → {new}", "~".yellow());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ use std::{
|
||||||
};
|
};
|
||||||
|
|
||||||
use indicatif::{ProgressBar, ProgressStyle};
|
use indicatif::{ProgressBar, ProgressStyle};
|
||||||
|
use yansi::Paint;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
cli::SyncArgs,
|
cli::SyncArgs,
|
||||||
|
|
@ -41,7 +42,7 @@ pub async fn execute(
|
||||||
let changes = detect_changes(&lockfile, &config);
|
let changes = detect_changes(&lockfile, &config);
|
||||||
|
|
||||||
if changes.is_empty() {
|
if changes.is_empty() {
|
||||||
println!("✓ Everything is in sync");
|
println!("{}", "✓ Everything is in sync".green());
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -79,7 +80,7 @@ pub async fn execute(
|
||||||
)? && let Ok(file_data) = fs::read(file_path)
|
)? && let Ok(file_data) = fs::read(file_path)
|
||||||
{
|
{
|
||||||
use sha1::Digest;
|
use sha1::Digest;
|
||||||
let mut hasher = sha1::Sha1::new();
|
let mut hasher = <sha1::Sha1 as sha1::Digest>::new();
|
||||||
hasher.update(&file_data);
|
hasher.update(&file_data);
|
||||||
let hash =
|
let hash =
|
||||||
crate::utils::hash::hash_to_hex(hasher.finalize().as_slice());
|
crate::utils::hash::hash_to_hex(hasher.finalize().as_slice());
|
||||||
|
|
@ -145,7 +146,7 @@ pub async fn execute(
|
||||||
let fetcher = Fetcher::new(".");
|
let fetcher = Fetcher::new(".");
|
||||||
fetcher.sync(&lockfile, &config).await?;
|
fetcher.sync(&lockfile, &config).await?;
|
||||||
|
|
||||||
println!("✓ Sync complete");
|
println!("{}", "✓ Sync complete".green());
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -221,25 +222,34 @@ async fn add_file_to_lockfile(
|
||||||
|
|
||||||
// Compute file hash
|
// Compute file hash
|
||||||
let file_data = fs::read(file_path)?;
|
let file_data = fs::read(file_path)?;
|
||||||
let mut hasher = sha1::Sha1::new();
|
let mut hasher = <sha1::Sha1 as sha1::Digest>::new();
|
||||||
hasher.update(&file_data);
|
hasher.update(&file_data);
|
||||||
let hash = crate::utils::hash::hash_to_hex(hasher.finalize().as_slice());
|
let hash = crate::utils::hash::hash_to_hex(hasher.finalize().as_slice());
|
||||||
|
|
||||||
// Try Modrinth first (SHA-1 hash)
|
// Try Modrinth first (SHA-1 hash)
|
||||||
if let Ok(Some(project)) = modrinth.lookup_by_hash(&hash).await {
|
if let Ok(Some(project)) = modrinth.lookup_by_hash(&hash).await {
|
||||||
lockfile.add_project(project);
|
lockfile.add_project(project);
|
||||||
println!("✓ Added {} (from Modrinth)", file_path.display());
|
println!(
|
||||||
|
"{}",
|
||||||
|
format!("✓ Added {} (from Modrinth)", file_path.display()).green()
|
||||||
|
);
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try CurseForge (Murmur2 hash computed from file)
|
// Try CurseForge (Murmur2 hash computed from file)
|
||||||
if let Ok(Some(project)) = curseforge.lookup_by_hash(&hash).await {
|
if let Ok(Some(project)) = curseforge.lookup_by_hash(&hash).await {
|
||||||
lockfile.add_project(project);
|
lockfile.add_project(project);
|
||||||
println!("✓ Added {} (from CurseForge)", file_path.display());
|
println!(
|
||||||
|
"{}",
|
||||||
|
format!("✓ Added {} (from CurseForge)", file_path.display()).green()
|
||||||
|
);
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
println!("⚠ Could not identify {}, skipping", file_path.display());
|
println!(
|
||||||
|
"{}",
|
||||||
|
format!("⚠ Could not identify {}, skipping", file_path.display()).yellow()
|
||||||
|
);
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -291,7 +301,10 @@ async fn add_files_batch(
|
||||||
lockfile.add_project(project.clone());
|
lockfile.add_project(project.clone());
|
||||||
added_pakku_ids.insert(pakku_id.clone());
|
added_pakku_ids.insert(pakku_id.clone());
|
||||||
matched_indices.insert(idx);
|
matched_indices.insert(idx);
|
||||||
println!("✓ Added {} (from Modrinth)", fh.path.display());
|
println!(
|
||||||
|
"{}",
|
||||||
|
format!("✓ Added {} (from Modrinth)", fh.path.display()).green()
|
||||||
|
);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -302,7 +315,10 @@ async fn add_files_batch(
|
||||||
if matched_indices.contains(&idx) {
|
if matched_indices.contains(&idx) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
println!("⚠ Could not identify {}, skipping", fh.path.display());
|
println!(
|
||||||
|
"{}",
|
||||||
|
format!("⚠ Could not identify {}, skipping", fh.path.display()).yellow()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
||||||
|
|
@ -13,13 +13,22 @@ use clap::Parser;
|
||||||
|
|
||||||
pub mod cli;
|
pub mod cli;
|
||||||
|
|
||||||
pub use pakker_core::{
|
|
||||||
error, export, fetch, git, http, ipc, model, platform, rate_limiter, resolver,
|
|
||||||
ui_utils, utils,
|
|
||||||
};
|
|
||||||
|
|
||||||
use cli::{Cli, Commands};
|
use cli::{Cli, Commands};
|
||||||
use error::PakkerError;
|
use error::PakkerError;
|
||||||
|
pub use pakker_core::{
|
||||||
|
error,
|
||||||
|
export,
|
||||||
|
fetch,
|
||||||
|
git,
|
||||||
|
http,
|
||||||
|
ipc,
|
||||||
|
model,
|
||||||
|
platform,
|
||||||
|
rate_limiter,
|
||||||
|
resolver,
|
||||||
|
ui_utils,
|
||||||
|
utils,
|
||||||
|
};
|
||||||
|
|
||||||
fn find_working_directory() -> Option<PathBuf> {
|
fn find_working_directory() -> Option<PathBuf> {
|
||||||
let mut current_dir = env::current_dir().ok()?;
|
let mut current_dir = env::current_dir().ok()?;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue