From 79dd7dbdd5fc6e0fcad344bc3c8f0fd62cd1b786 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Tue, 12 May 2026 03:25:25 +0900 Subject: feat(port): port XzDownloader.php --- crates/shirabe/src/downloader/xz_downloader.rs | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'crates/shirabe') 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> { + 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); + } +} -- cgit v1.3.1