aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/downloader
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-17 13:56:15 +0900
committernsfisis <nsfisis@gmail.com>2026-05-17 13:59:31 +0900
commita9bb49c7d685dd82feaf4050f756fdf590315200 (patch)
tree0242a737e8280fe9e25c38bb7a6f844d2eff623c /crates/shirabe/src/downloader
parent15b1be89eb168a30e96459c6a5307afcb7323bbc (diff)
downloadphp-shirabe-a9bb49c7d685dd82feaf4050f756fdf590315200.tar.gz
php-shirabe-a9bb49c7d685dd82feaf4050f756fdf590315200.tar.zst
php-shirabe-a9bb49c7d685dd82feaf4050f756fdf590315200.zip
fix(compile): implement abstract class traits across all types
Implement BaseCommand trait and other abstract class traits across all command, downloader, io, package, and VCS driver types. Also fix trait method signatures for composer_mut and io_mut to return mutable references to Option rather than Option of mutable references.
Diffstat (limited to 'crates/shirabe/src/downloader')
-rw-r--r--crates/shirabe/src/downloader/fossil_downloader.rs4
-rw-r--r--crates/shirabe/src/downloader/git_downloader.rs6
-rw-r--r--crates/shirabe/src/downloader/gzip_downloader.rs5
-rw-r--r--crates/shirabe/src/downloader/hg_downloader.rs4
-rw-r--r--crates/shirabe/src/downloader/perforce_downloader.rs4
-rw-r--r--crates/shirabe/src/downloader/phar_downloader.rs5
-rw-r--r--crates/shirabe/src/downloader/rar_downloader.rs5
-rw-r--r--crates/shirabe/src/downloader/svn_downloader.rs4
-rw-r--r--crates/shirabe/src/downloader/tar_downloader.rs5
-rw-r--r--crates/shirabe/src/downloader/vcs_downloader.rs28
-rw-r--r--crates/shirabe/src/downloader/xz_downloader.rs5
-rw-r--r--crates/shirabe/src/downloader/zip_downloader.rs3
12 files changed, 61 insertions, 17 deletions
diff --git a/crates/shirabe/src/downloader/fossil_downloader.rs b/crates/shirabe/src/downloader/fossil_downloader.rs
index a686177..5314e10 100644
--- a/crates/shirabe/src/downloader/fossil_downloader.rs
+++ b/crates/shirabe/src/downloader/fossil_downloader.rs
@@ -1,6 +1,6 @@
//! ref: composer/src/Composer/Downloader/FossilDownloader.php
-use crate::downloader::vcs_downloader::VcsDownloader;
+use crate::downloader::vcs_downloader::VcsDownloaderBase;
use crate::package::package_interface::PackageInterface;
use anyhow::Result;
use shirabe_external_packages::composer::pcre::preg::Preg;
@@ -9,7 +9,7 @@ use shirabe_php_shim::RuntimeException;
#[derive(Debug)]
pub struct FossilDownloader {
- inner: VcsDownloader,
+ inner: VcsDownloaderBase,
}
impl FossilDownloader {
diff --git a/crates/shirabe/src/downloader/git_downloader.rs b/crates/shirabe/src/downloader/git_downloader.rs
index 97d0ee9..1bc0ff1 100644
--- a/crates/shirabe/src/downloader/git_downloader.rs
+++ b/crates/shirabe/src/downloader/git_downloader.rs
@@ -13,7 +13,7 @@ use shirabe_php_shim::{
use crate::cache::Cache;
use crate::config::Config;
use crate::downloader::dvcs_downloader_interface::DvcsDownloaderInterface;
-use crate::downloader::vcs_downloader::VcsDownloader;
+use crate::downloader::vcs_downloader::VcsDownloaderBase;
use crate::io::io_interface::IOInterface;
use crate::package::package_interface::PackageInterface;
use crate::util::filesystem::Filesystem;
@@ -24,7 +24,7 @@ use crate::util::url::Url;
#[derive(Debug)]
pub struct GitDownloader {
- inner: VcsDownloader,
+ inner: VcsDownloaderBase,
/// @var array<string, bool>
has_stashed_changes: IndexMap<String, bool>,
/// @var array<string, bool>
@@ -41,7 +41,7 @@ impl GitDownloader {
process: Option<ProcessExecutor>,
fs: Option<Filesystem>,
) -> Self {
- let inner = VcsDownloader::new(io, config, process, fs);
+ let inner = VcsDownloaderBase::new(io, config, process, fs);
let git_util = GitUtil::new(&*inner.io, &inner.config, &inner.process, &inner.filesystem);
Self {
inner,
diff --git a/crates/shirabe/src/downloader/gzip_downloader.rs b/crates/shirabe/src/downloader/gzip_downloader.rs
index 81fdbed..ca50827 100644
--- a/crates/shirabe/src/downloader/gzip_downloader.rs
+++ b/crates/shirabe/src/downloader/gzip_downloader.rs
@@ -1,9 +1,11 @@
//! ref: composer/src/Composer/Downloader/GzipDownloader.php
use crate::downloader::archive_downloader::ArchiveDownloader;
+use crate::downloader::file_downloader::FileDownloader;
use crate::package::package_interface::PackageInterface;
use crate::util::platform::Platform;
use anyhow::Result;
+use indexmap::IndexMap;
use shirabe_external_packages::react::promise::promise_interface::PromiseInterface;
use shirabe_php_shim::{
DIRECTORY_SEPARATOR, PATHINFO_FILENAME, PHP_URL_PATH, RuntimeException, extension_loaded,
@@ -11,7 +13,8 @@ use shirabe_php_shim::{
};
pub struct GzipDownloader {
- inner: ArchiveDownloader,
+ inner: FileDownloader,
+ cleanup_executed: IndexMap<String, bool>,
}
impl GzipDownloader {
diff --git a/crates/shirabe/src/downloader/hg_downloader.rs b/crates/shirabe/src/downloader/hg_downloader.rs
index ff06806..1b4204f 100644
--- a/crates/shirabe/src/downloader/hg_downloader.rs
+++ b/crates/shirabe/src/downloader/hg_downloader.rs
@@ -1,6 +1,6 @@
//! ref: composer/src/Composer/Downloader/HgDownloader.php
-use crate::downloader::vcs_downloader::VcsDownloader;
+use crate::downloader::vcs_downloader::VcsDownloaderBase;
use crate::package::package_interface::PackageInterface;
use crate::util::hg::Hg as HgUtils;
use anyhow::Result;
@@ -9,7 +9,7 @@ use shirabe_php_shim::RuntimeException;
#[derive(Debug)]
pub struct HgDownloader {
- inner: VcsDownloader,
+ inner: VcsDownloaderBase,
}
impl HgDownloader {
diff --git a/crates/shirabe/src/downloader/perforce_downloader.rs b/crates/shirabe/src/downloader/perforce_downloader.rs
index 8674b3d..b10e27f 100644
--- a/crates/shirabe/src/downloader/perforce_downloader.rs
+++ b/crates/shirabe/src/downloader/perforce_downloader.rs
@@ -1,6 +1,6 @@
//! ref: composer/src/Composer/Downloader/PerforceDownloader.php
-use crate::downloader::vcs_downloader::VcsDownloader;
+use crate::downloader::vcs_downloader::VcsDownloaderBase;
use crate::package::package_interface::PackageInterface;
use crate::repository::vcs_repository::VcsRepository;
use crate::util::perforce::Perforce;
@@ -12,7 +12,7 @@ use std::any::Any;
#[derive(Debug)]
pub struct PerforceDownloader {
- inner: VcsDownloader,
+ inner: VcsDownloaderBase,
pub(crate) perforce: Option<Perforce>,
}
diff --git a/crates/shirabe/src/downloader/phar_downloader.rs b/crates/shirabe/src/downloader/phar_downloader.rs
index 8fea679..5316fc1 100644
--- a/crates/shirabe/src/downloader/phar_downloader.rs
+++ b/crates/shirabe/src/downloader/phar_downloader.rs
@@ -1,14 +1,17 @@
//! ref: composer/src/Composer/Downloader/PharDownloader.php
use crate::downloader::archive_downloader::ArchiveDownloader;
+use crate::downloader::file_downloader::FileDownloader;
use crate::package::package_interface::PackageInterface;
use anyhow::Result;
+use indexmap::IndexMap;
use shirabe_external_packages::react::promise::promise_interface::PromiseInterface;
use shirabe_php_shim::Phar;
#[derive(Debug)]
pub struct PharDownloader {
- inner: ArchiveDownloader,
+ inner: FileDownloader,
+ cleanup_executed: IndexMap<String, bool>,
}
impl PharDownloader {
diff --git a/crates/shirabe/src/downloader/rar_downloader.rs b/crates/shirabe/src/downloader/rar_downloader.rs
index 1b4767f..308b6fa 100644
--- a/crates/shirabe/src/downloader/rar_downloader.rs
+++ b/crates/shirabe/src/downloader/rar_downloader.rs
@@ -1,17 +1,20 @@
//! ref: composer/src/Composer/Downloader/RarDownloader.php
use crate::downloader::archive_downloader::ArchiveDownloader;
+use crate::downloader::file_downloader::FileDownloader;
use crate::package::package_interface::PackageInterface;
use crate::util::ini_helper::IniHelper;
use crate::util::platform::Platform;
use anyhow::Result;
+use indexmap::IndexMap;
use shirabe_external_packages::react::promise::promise_interface::PromiseInterface;
use shirabe_php_shim::{
RarArchive, RuntimeException, UnexpectedValueException, class_exists, implode,
};
pub struct RarDownloader {
- inner: ArchiveDownloader,
+ inner: FileDownloader,
+ cleanup_executed: IndexMap<String, bool>,
}
impl RarDownloader {
diff --git a/crates/shirabe/src/downloader/svn_downloader.rs b/crates/shirabe/src/downloader/svn_downloader.rs
index 30a64f2..ef006f3 100644
--- a/crates/shirabe/src/downloader/svn_downloader.rs
+++ b/crates/shirabe/src/downloader/svn_downloader.rs
@@ -5,7 +5,7 @@ use shirabe_external_packages::react::promise;
use shirabe_external_packages::react::promise::promise_interface::PromiseInterface;
use shirabe_php_shim::{PhpMixed, RuntimeException, is_dir, version_compare};
-use crate::downloader::vcs_downloader::VcsDownloader;
+use crate::downloader::vcs_downloader::VcsDownloaderBase;
use crate::io::io_interface::IOInterface;
use crate::package::package_interface::PackageInterface;
use crate::repository::vcs_repository::VcsRepository;
@@ -13,7 +13,7 @@ use crate::util::svn::Svn as SvnUtil;
#[derive(Debug)]
pub struct SvnDownloader {
- inner: VcsDownloader,
+ inner: VcsDownloaderBase,
pub(crate) cache_credentials: bool,
}
diff --git a/crates/shirabe/src/downloader/tar_downloader.rs b/crates/shirabe/src/downloader/tar_downloader.rs
index c327ca0..d8531e0 100644
--- a/crates/shirabe/src/downloader/tar_downloader.rs
+++ b/crates/shirabe/src/downloader/tar_downloader.rs
@@ -1,14 +1,17 @@
//! ref: composer/src/Composer/Downloader/TarDownloader.php
use crate::downloader::archive_downloader::ArchiveDownloader;
+use crate::downloader::file_downloader::FileDownloader;
use crate::package::package_interface::PackageInterface;
use anyhow::Result;
+use indexmap::IndexMap;
use shirabe_external_packages::react::promise::promise_interface::PromiseInterface;
use shirabe_php_shim::PharData;
#[derive(Debug)]
pub struct TarDownloader {
- inner: ArchiveDownloader,
+ inner: FileDownloader,
+ cleanup_executed: IndexMap<String, bool>,
}
impl TarDownloader {
diff --git a/crates/shirabe/src/downloader/vcs_downloader.rs b/crates/shirabe/src/downloader/vcs_downloader.rs
index b76c242..9ec86ff 100644
--- a/crates/shirabe/src/downloader/vcs_downloader.rs
+++ b/crates/shirabe/src/downloader/vcs_downloader.rs
@@ -23,6 +23,34 @@ use crate::package::version::version_parser::VersionParser;
use crate::util::filesystem::Filesystem;
use crate::util::process_executor::ProcessExecutor;
+#[derive(Debug)]
+pub struct VcsDownloaderBase {
+ pub io: Box<dyn IOInterface>,
+ pub config: Config,
+ pub process: ProcessExecutor,
+ pub filesystem: Filesystem,
+ pub has_cleaned_changes: IndexMap<String, bool>,
+}
+
+impl VcsDownloaderBase {
+ pub fn new(
+ io: Box<dyn IOInterface>,
+ config: Config,
+ process: Option<ProcessExecutor>,
+ fs: Option<Filesystem>,
+ ) -> Self {
+ let process = process.unwrap_or_else(|| ProcessExecutor::new(None, None));
+ let filesystem = fs.unwrap_or_else(|| Filesystem::new(None));
+ Self {
+ io,
+ config,
+ process,
+ filesystem,
+ has_cleaned_changes: IndexMap::new(),
+ }
+ }
+}
+
pub trait VcsDownloader:
DownloaderInterface + ChangeReportInterface + VcsCapableDownloaderInterface
{
diff --git a/crates/shirabe/src/downloader/xz_downloader.rs b/crates/shirabe/src/downloader/xz_downloader.rs
index 0c5d876..1ad0bb1 100644
--- a/crates/shirabe/src/downloader/xz_downloader.rs
+++ b/crates/shirabe/src/downloader/xz_downloader.rs
@@ -1,13 +1,16 @@
//! ref: composer/src/Composer/Downloader/XzDownloader.php
use crate::downloader::archive_downloader::ArchiveDownloader;
+use crate::downloader::file_downloader::FileDownloader;
use crate::package::package_interface::PackageInterface;
use anyhow::{Result, bail};
+use indexmap::IndexMap;
use shirabe_external_packages::react::promise::promise_interface::PromiseInterface;
#[derive(Debug)]
pub struct XzDownloader {
- inner: ArchiveDownloader,
+ inner: FileDownloader,
+ cleanup_executed: IndexMap<String, bool>,
}
impl XzDownloader {
diff --git a/crates/shirabe/src/downloader/zip_downloader.rs b/crates/shirabe/src/downloader/zip_downloader.rs
index ecb7821..90e5639 100644
--- a/crates/shirabe/src/downloader/zip_downloader.rs
+++ b/crates/shirabe/src/downloader/zip_downloader.rs
@@ -24,7 +24,8 @@ static IS_WINDOWS: Mutex<Option<bool>> = Mutex::new(None);
#[derive(Debug)]
pub struct ZipDownloader {
- inner: ArchiveDownloader,
+ inner: FileDownloader,
+ cleanup_executed: IndexMap<String, bool>,
// @phpstan-ignore property.onlyRead (helper property that is set via reflection for testing purposes)
zip_archive_object: Option<ZipArchive>,
}