diff options
Diffstat (limited to 'crates/shirabe/src')
| -rw-r--r-- | crates/shirabe/src/downloader/xz_downloader.rs | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/crates/shirabe/src/downloader/xz_downloader.rs b/crates/shirabe/src/downloader/xz_downloader.rs index d127b2c..a53c9c6 100644 --- a/crates/shirabe/src/downloader/xz_downloader.rs +++ b/crates/shirabe/src/downloader/xz_downloader.rs @@ -1 +1,26 @@ //! ref: composer/src/Composer/Downloader/XzDownloader.php + +use anyhow::{bail, Result}; +use shirabe_external_packages::react::promise::promise_interface::PromiseInterface; +use crate::downloader::archive_downloader::ArchiveDownloader; +use crate::package::package_interface::PackageInterface; + +#[derive(Debug)] +pub struct XzDownloader { + inner: ArchiveDownloader, +} + +impl XzDownloader { + pub(crate) fn extract(&self, package: &dyn PackageInterface, file: &str, path: &str) -> Result<Box<dyn PromiseInterface>> { + let command = vec!["tar", "-xJf", file, "-C", path]; + + let mut ignored_output = String::new(); + if self.inner.process.execute(&command, &mut ignored_output) == 0 { + return Ok(shirabe_external_packages::react::promise::resolve(None)); + } + + let process_error = format!("Failed to execute {}\n\n{}", command.join(" "), self.inner.process.get_error_output()); + + bail!(process_error); + } +} |
