From 54b4aa3fa9d2d1d7794e1951a1fabd797ae436db Mon Sep 17 00:00:00 2001 From: Niklas Eicker Date: Mon, 13 Apr 2026 19:45:07 +0200 Subject: [PATCH 1/2] Only remove directory if it exists --- src/commands/link.rs | 142 ++++++++++++++++++++----------------------- 1 file changed, 67 insertions(+), 75 deletions(-) diff --git a/src/commands/link.rs b/src/commands/link.rs index 67e3776..ec8cf2c 100644 --- a/src/commands/link.rs +++ b/src/commands/link.rs @@ -1,3 +1,4 @@ +use ecow::EcoVec; use ignore::{WalkBuilder, overrides::OverrideBuilder}; use std::fs::{copy, create_dir_all}; use std::path::PathBuf; @@ -55,93 +56,84 @@ pub async fn run(cmd: &LinkArgs, path: &Option, pt: bool) -> Result>, +) -> Result<()> { + let mut wb: WalkBuilder = WalkBuilder::new(curr); + let mut overr: OverrideBuilder = OverrideBuilder::new(curr); - // Configure which ignore files to use. - wb.ignore(cmd.ignore) - .git_ignore(cmd.git_ignore) - .git_global(cmd.git_global_ignore) - .git_exclude(cmd.git_exclude); - utpm_log!(info, - "git_ignore" => cmd.git_ignore, - "git_global_ignore" => cmd.git_global_ignore, - "git_exclude" => cmd.git_exclude - ); + if let Some(excludes) = excludes { + for exclude in excludes.iter() { + overr.add(&format!("!{}", exclude))?; + } + } + wb.overrides(overr.build()?); - // Add .typstignore if it exists and is enabled. - if cmd.typst_ignore { - let pathbuf = curr.join(".typstignore"); - if check_path_file(pathbuf) { - utpm_log!(info, "Added .typstignore"); - wb.add_custom_ignore_filename(".typstignore"); - } - } + wb.ignore(cmd.ignore) + .git_ignore(cmd.git_ignore) + .git_global(cmd.git_global_ignore) + .git_exclude(cmd.git_exclude); + utpm_log!(info, + "git_ignore" => cmd.git_ignore, + "git_global_ignore" => cmd.git_global_ignore, + "git_exclude" => cmd.git_exclude + ); - // --- Copy Files --- - for result in wb.build().collect::, _>>()? { - if let Some(file_type) = result.file_type() { - let path: &Path = result.path(); - let relative = path.strip_prefix(&curr).unwrap(); - let dest_path = destination.join(relative); - utpm_log!("{}", dest_path.display()); - if file_type.is_dir() { - create_dir_all(&dest_path)?; - } else { - copy(path, &dest_path)?; - } - } + if cmd.typst_ignore { + let pathbuf = curr.join(".typstignore"); + if check_path_file(pathbuf) { + utpm_log!(info, "Added .typstignore"); + wb.add_custom_ignore_filename(".typstignore"); + } + } + + for result in wb.build().collect::, _>>()? { + if let Some(file_type) = result.file_type() { + let path: &Path = result.path(); + let relative = path.strip_prefix(curr).unwrap(); + let dest_path = destination.join(relative); + utpm_log!("{}", dest_path.display()); + if file_type.is_dir() { + create_dir_all(&dest_path)?; + } else { + copy(path, &dest_path)?; } - }; - if pt { - utpm_log!( - info, - "Project linked to: {}\nTry importing with: \n#import \"@{}/{}:{}\": *", - destination.display(), - namespace, - name, - version - ); } } - Ok(true) + Ok(()) } From 984bee491459e5fea452267189f06480a5f34730 Mon Sep 17 00:00:00 2001 From: Niklas Eicker Date: Mon, 13 Apr 2026 20:08:17 +0200 Subject: [PATCH 2/2] Change default verbosity to warn --- src/commands.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commands.rs b/src/commands.rs index 7f339e8..67711ba 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -437,10 +437,10 @@ pub struct Cli { /// Enable verbose logging for debugging purposes. /// - /// Levels: error, warn, info (default), debug, trace + /// Levels: error, warn (default), info, debug, trace /// Example: utpm -v trace prj link #[arg( - default_value = "info", + default_value = "warn", short = 'v', long, global = true,