diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-12 03:25:25 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-12 03:25:25 +0900 |
| commit | 79dd7dbdd5fc6e0fcad344bc3c8f0fd62cd1b786 (patch) | |
| tree | 3a996e4ce15ada2fc1ac06664d9f815890d253a3 /crates/shirabe | |
| parent | ab445c44c84925bbcb265ceea6d8d8eddac17768 (diff) | |
| download | php-shirabe-79dd7dbdd5fc6e0fcad344bc3c8f0fd62cd1b786.tar.gz php-shirabe-79dd7dbdd5fc6e0fcad344bc3c8f0fd62cd1b786.tar.zst php-shirabe-79dd7dbdd5fc6e0fcad344bc3c8f0fd62cd1b786.zip | |
feat(port): port XzDownloader.php
Diffstat (limited to 'crates/shirabe')
| -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); + } +} |
