From 0294143b2212f622eaeb96513afbfd5bc6dfcc3a Mon Sep 17 00:00:00 2001 From: Keagan McClelland Date: Fri, 6 May 2022 16:18:07 -0600 Subject: [PATCH] create script dirs on install --- backend/src/install/mod.rs | 23 +++++++++++++---------- backend/src/s9pk/header.rs | 3 ++- backend/src/s9pk/reader.rs | 4 ++++ 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/backend/src/install/mod.rs b/backend/src/install/mod.rs index 534f0913f..48fc6b342 100644 --- a/backend/src/install/mod.rs +++ b/backend/src/install/mod.rs @@ -25,6 +25,9 @@ use tokio_stream::wrappers::ReadDirStream; use tracing::instrument; use self::cleanup::{cleanup_failed, remove_from_current_dependents_lists}; +use crate::config::ConfigReceipts; +use crate::context::{CliContext, RpcContext}; +use crate::core::rpc_continuations::{RequestGuid, RpcContinuation}; use crate::db::model::{ CurrentDependencyInfo, InstalledPackageDataEntry, PackageDataEntry, RecoveredPackageInfo, StaticDependencyInfo, StaticFiles, @@ -32,7 +35,8 @@ use crate::db::model::{ use crate::db::util::WithRevision; use crate::dependencies::{ add_dependent_to_current_dependents_lists, break_all_dependents_transitive, - reconfigure_dependents_with_live_pointers, BreakageRes, DependencyError, DependencyErrors, + reconfigure_dependents_with_live_pointers, BreakTransitiveReceipts, BreakageRes, + DependencyError, DependencyErrors, }; use crate::install::cleanup::{cleanup, update_dependency_errors_of_dependents}; use crate::install::progress::{InstallProgress, InstallProgressTracker}; @@ -44,15 +48,7 @@ use crate::util::io::{copy_and_shutdown, response_to_reader}; use crate::util::serde::{display_serializable, IoFormat, Port}; use crate::util::{display_none, AsyncFileExt, Version}; use crate::version::{Current, VersionT}; -use crate::volume::asset_dir; -use crate::{ - config::ConfigReceipts, - context::{CliContext, RpcContext}, -}; -use crate::{ - core::rpc_continuations::{RequestGuid, RpcContinuation}, - dependencies::BreakTransitiveReceipts, -}; +use crate::volume::{asset_dir, script_dir}; use crate::{Error, ErrorKind, ResultExt}; pub mod cleanup; @@ -1123,6 +1119,13 @@ pub async fn install_s9pk( let mut tar = tokio_tar::Archive::new(rdr.assets().await?); tar.unpack(asset_dir).await?; + let script_dir = script_dir(&ctx.datadir, pkg_id, version); + if tokio::fs::metadata(&script_dir).await.is_err() { + tokio::fs::create_dir_all(&script_dir).await?; + } + let mut tar = tokio_tar::Archive::new(rdr.scripts().await?); + tar.unpack(script_dir).await?; + Ok(()) }) .await?; diff --git a/backend/src/s9pk/header.rs b/backend/src/s9pk/header.rs index 3a3eb927c..1ac1f97cc 100644 --- a/backend/src/s9pk/header.rs +++ b/backend/src/s9pk/header.rs @@ -84,7 +84,8 @@ impl TableOfContents { + (1 + "instructions".len() + 16) + (1 + "icon".len() + 16) + (1 + "docker_images".len() + 16) - + (1 + "assets".len() + 16)) as u32; + + (1 + "assets".len() + 16) + + (1 + "scripts".len() + 16)) as u32; writer.write_all(&u32::to_be_bytes(len))?; self.manifest.serialize_entry("manifest", &mut writer)?; self.license.serialize_entry("license", &mut writer)?; diff --git a/backend/src/s9pk/reader.rs b/backend/src/s9pk/reader.rs index b99423f44..3270c9645 100644 --- a/backend/src/s9pk/reader.rs +++ b/backend/src/s9pk/reader.rs @@ -305,4 +305,8 @@ impl S9pkReader { pub async fn assets<'a>(&'a mut self) -> Result, Error> { Ok(self.read_handle(self.toc.assets).await?) } + + pub async fn scripts<'a>(&'a mut self) -> Result, Error> { + Ok(self.read_handle(self.toc.scripts).await?) + } }