diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-17 13:56:15 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-17 13:59:31 +0900 |
| commit | a9bb49c7d685dd82feaf4050f756fdf590315200 (patch) | |
| tree | 0242a737e8280fe9e25c38bb7a6f844d2eff623c /crates/shirabe/src/downloader | |
| parent | 15b1be89eb168a30e96459c6a5307afcb7323bbc (diff) | |
| download | php-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.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/git_downloader.rs | 6 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/gzip_downloader.rs | 5 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/hg_downloader.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/perforce_downloader.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/phar_downloader.rs | 5 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/rar_downloader.rs | 5 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/svn_downloader.rs | 4 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/tar_downloader.rs | 5 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/vcs_downloader.rs | 28 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/xz_downloader.rs | 5 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/zip_downloader.rs | 3 |
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 a686177d..5314e102 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 97d0ee90..1bc0ff1b 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 81fdbeda..ca508276 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 ff068065..1b4204f2 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 8674b3d0..b10e27f6 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 8fea6790..5316fc1e 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 1b4767fd..308b6fa9 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 30a64f26..ef006f3d 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 c327ca09..d8531e00 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 b76c242e..9ec86ff2 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 0c5d876a..1ad0bb17 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 ecb7821e..90e56398 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>, } |
