feat(plugins): add /cache folder (#3787)

* feat(plugins): add /cache folder

* style(fmt): rustfmt
This commit is contained in:
Aram Drevekenin 2024-11-18 11:23:26 +01:00 committed by GitHub
parent a84d901e9b
commit 9230733079
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 16 additions and 2 deletions

View file

@ -60,6 +60,7 @@ pub struct PluginLoader<'a> {
plugin_dir: &'a PathBuf, plugin_dir: &'a PathBuf,
tab_index: Option<usize>, tab_index: Option<usize>,
plugin_own_data_dir: PathBuf, plugin_own_data_dir: PathBuf,
plugin_own_cache_dir: PathBuf,
size: Size, size: Size,
wasm_blob_on_hd: Option<(Vec<u8>, PathBuf)>, wasm_blob_on_hd: Option<(Vec<u8>, PathBuf)>,
path_to_default_shell: PathBuf, path_to_default_shell: PathBuf,
@ -344,7 +345,10 @@ impl<'a> PluginLoader<'a> {
let plugin_own_data_dir = ZELLIJ_SESSION_CACHE_DIR let plugin_own_data_dir = ZELLIJ_SESSION_CACHE_DIR
.join(Url::from(&plugin.location).to_string()) .join(Url::from(&plugin.location).to_string())
.join(format!("{}-{}", plugin_id, client_id)); .join(format!("{}-{}", plugin_id, client_id));
create_plugin_fs_entries(&plugin_own_data_dir)?; let plugin_own_cache_dir = ZELLIJ_SESSION_CACHE_DIR
.join(Url::from(&plugin.location).to_string())
.join(format!("plugin_cache"));
create_plugin_fs_entries(&plugin_own_data_dir, &plugin_own_cache_dir)?;
let plugin_path = plugin.path.clone(); let plugin_path = plugin.path.clone();
Ok(PluginLoader { Ok(PluginLoader {
plugin_cache: plugin_cache.clone(), plugin_cache: plugin_cache.clone(),
@ -358,6 +362,7 @@ impl<'a> PluginLoader<'a> {
plugin_dir, plugin_dir,
tab_index, tab_index,
plugin_own_data_dir, plugin_own_data_dir,
plugin_own_cache_dir,
size, size,
wasm_blob_on_hd: None, wasm_blob_on_hd: None,
path_to_default_shell, path_to_default_shell,
@ -789,6 +794,7 @@ impl<'a> PluginLoader<'a> {
let dirs = vec![ let dirs = vec![
("/host".to_owned(), self.zellij_cwd.clone()), ("/host".to_owned(), self.zellij_cwd.clone()),
("/data".to_owned(), self.plugin_own_data_dir.clone()), ("/data".to_owned(), self.plugin_own_data_dir.clone()),
("/cache".to_owned(), self.plugin_own_cache_dir.clone()),
("/tmp".to_owned(), ZELLIJ_TMP_DIR.clone()), ("/tmp".to_owned(), ZELLIJ_TMP_DIR.clone()),
]; ];
let dirs = dirs.into_iter().filter(|(_dir_name, dir)| { let dirs = dirs.into_iter().filter(|(_dir_name, dir)| {
@ -825,6 +831,7 @@ impl<'a> PluginLoader<'a> {
senders: self.senders.clone(), senders: self.senders.clone(),
wasi_ctx, wasi_ctx,
plugin_own_data_dir: self.plugin_own_data_dir.clone(), plugin_own_data_dir: self.plugin_own_data_dir.clone(),
plugin_own_cache_dir: self.plugin_own_cache_dir.clone(),
tab_index: self.tab_index, tab_index: self.tab_index,
path_to_default_shell: self.path_to_default_shell.clone(), path_to_default_shell: self.path_to_default_shell.clone(),
capabilities: self.capabilities.clone(), capabilities: self.capabilities.clone(),
@ -862,13 +869,19 @@ impl<'a> PluginLoader<'a> {
} }
} }
fn create_plugin_fs_entries(plugin_own_data_dir: &PathBuf) -> Result<()> { fn create_plugin_fs_entries(
plugin_own_data_dir: &PathBuf,
plugin_own_cache_dir: &PathBuf,
) -> Result<()> {
let err_context = || "failed to create plugin fs entries"; let err_context = || "failed to create plugin fs entries";
// Create filesystem entries mounted into WASM. // Create filesystem entries mounted into WASM.
// We create them here to get expressive error messages in case they fail. // We create them here to get expressive error messages in case they fail.
fs::create_dir_all(&plugin_own_data_dir) fs::create_dir_all(&plugin_own_data_dir)
.with_context(|| format!("failed to create datadir in {plugin_own_data_dir:?}")) .with_context(|| format!("failed to create datadir in {plugin_own_data_dir:?}"))
.with_context(err_context)?; .with_context(err_context)?;
fs::create_dir_all(&plugin_own_cache_dir)
.with_context(|| format!("failed to create cache dir in {plugin_own_cache_dir:?}"))
.with_context(err_context)?;
fs::create_dir_all(ZELLIJ_TMP_DIR.as_path()) fs::create_dir_all(ZELLIJ_TMP_DIR.as_path())
.with_context(|| format!("failed to create tmpdir at {:?}", &ZELLIJ_TMP_DIR.as_path())) .with_context(|| format!("failed to create tmpdir at {:?}", &ZELLIJ_TMP_DIR.as_path()))
.with_context(err_context)?; .with_context(err_context)?;

View file

@ -295,6 +295,7 @@ pub struct PluginEnv {
pub client_id: ClientId, pub client_id: ClientId,
#[allow(dead_code)] #[allow(dead_code)]
pub plugin_own_data_dir: PathBuf, pub plugin_own_data_dir: PathBuf,
pub plugin_own_cache_dir: PathBuf,
pub path_to_default_shell: PathBuf, pub path_to_default_shell: PathBuf,
pub capabilities: PluginCapabilities, pub capabilities: PluginCapabilities,
pub client_attributes: ClientAttributes, pub client_attributes: ClientAttributes,