aboutsummaryrefslogtreecommitdiff
path: root/src/cli/plugin.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/cli/plugin.rs')
-rw-r--r--src/cli/plugin.rs37
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;
};