diff options
Diffstat (limited to 'src/cli')
| -rw-r--r-- | src/cli/plugin.rs | 37 |
1 files changed, 15 insertions, 22 deletions
diff --git a/src/cli/plugin.rs b/src/cli/plugin.rs index 5c051cc6..bd162e40 100644 --- a/src/cli/plugin.rs +++ b/src/cli/plugin.rs @@ -205,7 +205,7 @@ fn plugin_install(args: &[String]) -> std::io::Result<i32> { let post_build_plugin = load_cli_plugin_manifest(&manifest_root, true)?; ensure_manifest_unchanged_after_build(&preview_plugin, &post_build_plugin)?; - let final_checkout = managed_checkout_path(&preview_plugin.plugin_id); + let final_checkout = crate::plugin_paths::managed_checkout_path(&preview_plugin.plugin_id); let backup_checkout = temp_root.join("previous-checkout"); let mut backup_moved = false; if final_checkout.exists() { @@ -296,14 +296,15 @@ fn plugin_uninstall(args: &[String]) -> std::io::Result<i32> { } } Err(err) if is_connection_error(&err) => { - let mut plugins = crate::persist::plugin_registry::load(); - let before = plugins.len(); - plugins.retain(|plugin| plugin.plugin_id != plugin_id); - if before == plugins.len() { + let (removed, _) = crate::persist::plugin_registry::update(|plugins| { + let before = plugins.len(); + plugins.retain(|plugin| plugin.plugin_id != plugin_id); + before != plugins.len() + })?; + if !removed { eprintln!("plugin not installed: {target}"); return Ok(1); } - crate::persist::plugin_registry::save(&plugins)?; } Err(err) => return Err(err), } @@ -947,12 +948,14 @@ fn register_installed_plugin( Ok(()) } Err(err) if is_connection_error(&err) => { - let mut plugins = crate::persist::plugin_registry::load(); - plugins.retain(|entry| entry.plugin_id != plugin.plugin_id); crate::plugin_paths::ensure_plugin_user_dirs(&plugin.plugin_id) .map_err(InstallFailure::Rollback)?; - plugins.push(plugin); - crate::persist::plugin_registry::save(&plugins).map_err(InstallFailure::Rollback) + crate::persist::plugin_registry::update(|plugins| { + plugins.retain(|entry| entry.plugin_id != plugin.plugin_id); + plugins.push(plugin); + }) + .map(|_| ()) + .map_err(InstallFailure::Rollback) } Err(err) => Err(InstallFailure::Rollback(err)), } @@ -1533,7 +1536,7 @@ fn confirm(prompt: &str) -> std::io::Result<bool> { } fn create_plugin_temp_dir(label: &str) -> std::io::Result<PathBuf> { - let path = managed_plugins_dir().join(format!( + let path = crate::plugin_paths::managed_plugins_dir().join(format!( ".tmp-{label}-{}-{}", std::process::id(), current_unix_ms() @@ -1542,16 +1545,6 @@ fn create_plugin_temp_dir(label: &str) -> std::io::Result<PathBuf> { Ok(path) } -fn managed_plugins_dir() -> PathBuf { - crate::session::data_dir().join("plugins") -} - -fn managed_checkout_path(plugin_id: &str) -> PathBuf { - managed_plugins_dir() - .join("github") - .join(crate::api::schema::plugin_managed_path_component(plugin_id)) -} - fn remove_managed_plugin_files(plugin: &InstalledPluginInfo) -> std::io::Result<()> { if plugin.source.kind != PluginSourceKind::Github { return Ok(()); @@ -1590,7 +1583,7 @@ fn is_expected_managed_path(plugin: &InstalledPluginInfo, path: &Path) -> bool { let Ok(path) = path.canonicalize() else { return false; }; - let expected = managed_checkout_path(&plugin.plugin_id); + let expected = crate::plugin_paths::managed_checkout_path(&plugin.plugin_id); let Ok(expected) = expected.canonicalize() else { return false; }; |
