diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-06-05 00:50:47 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-06-05 00:51:23 +0900 |
| commit | c5bcf222f98d13b104231713bf4a0aa0833c420a (patch) | |
| tree | a32a484ccb9d944d44db32b229691e5c60bb5159 /crates/shirabe/src/factory.rs | |
| parent | 20d665bb1247500d514f05b160d01f5f8e223a38 (diff) | |
| download | php-shirabe-c5bcf222f98d13b104231713bf4a0aa0833c420a.tar.gz php-shirabe-c5bcf222f98d13b104231713bf4a0aa0833c420a.tar.zst php-shirabe-c5bcf222f98d13b104231713bf4a0aa0833c420a.zip | |
feat(downloader): wire VcsDownloader subclasses via shared downloaders
Share downloaders as Rc<RefCell<dyn DownloaderInterface>> in
DownloadManager and make DownloaderInterface/VcsDownloader take
&mut self, matching PHP's mutable-by-reference downloader objects.
This lets Git/Svn/Hg/Fossil/Perforce implement VcsDownloader and route
download/install/update/prepare/cleanup through the trait instead of
todo!(), and wires the as_* downcast hooks end-to-end.
ChangeReportInterface::get_local_changes becomes &mut self since
FileDownloader downloads to a compare dir; get_commit_logs/reapply_changes
gain &mut self / Result to match the concrete implementations.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/factory.rs')
| -rw-r--r-- | crates/shirabe/src/factory.rs | 52 |
1 files changed, 26 insertions, 26 deletions
diff --git a/crates/shirabe/src/factory.rs b/crates/shirabe/src/factory.rs index 24ac2e0..90d8593 100644 --- a/crates/shirabe/src/factory.rs +++ b/crates/shirabe/src/factory.rs @@ -1011,52 +1011,52 @@ impl Factory { dm.set_downloader( "git", - Box::new(GitDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(GitDownloader::new( io.clone(), config.clone(), Some(process.clone()), Some(fs.clone()), - )), + ))), ); dm.set_downloader( "svn", - Box::new(SvnDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(SvnDownloader::new( io.clone(), config.clone(), process.clone(), fs.clone(), - )), + ))), ); dm.set_downloader( "fossil", - Box::new(FossilDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(FossilDownloader::new( io.clone(), config.clone(), process.clone(), fs.clone(), - )), + ))), ); dm.set_downloader( "hg", - Box::new(HgDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(HgDownloader::new( io.clone(), config.clone(), process.clone(), fs.clone(), - )), + ))), ); dm.set_downloader( "perforce", - Box::new(PerforceDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(PerforceDownloader::new( io.clone(), config.clone(), process.clone(), fs.clone(), - )), + ))), ); dm.set_downloader( "zip", - Box::new(ZipDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(ZipDownloader::new( io.clone(), config.clone(), http_downloader.clone(), @@ -1064,11 +1064,11 @@ impl Factory { cache.clone(), fs.clone(), process.clone(), - )), + ))), ); dm.set_downloader( "rar", - Box::new(RarDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(RarDownloader::new( io.clone(), config.clone(), http_downloader.clone(), @@ -1076,11 +1076,11 @@ impl Factory { cache.clone(), fs.clone(), process.clone(), - )), + ))), ); dm.set_downloader( "tar", - Box::new(TarDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(TarDownloader::new( io.clone(), config.clone(), http_downloader.clone(), @@ -1088,11 +1088,11 @@ impl Factory { cache.clone(), fs.clone(), process.clone(), - )), + ))), ); dm.set_downloader( "gzip", - Box::new(GzipDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(GzipDownloader::new( io.clone(), config.clone(), http_downloader.clone(), @@ -1100,11 +1100,11 @@ impl Factory { cache.clone(), fs.clone(), process.clone(), - )), + ))), ); dm.set_downloader( "xz", - Box::new(XzDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(XzDownloader::new( io.clone(), config.clone(), http_downloader.clone(), @@ -1112,11 +1112,11 @@ impl Factory { cache.clone(), fs.clone(), process.clone(), - )), + ))), ); dm.set_downloader( "phar", - Box::new(PharDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(PharDownloader::new( io.clone(), config.clone(), http_downloader.clone(), @@ -1124,11 +1124,11 @@ impl Factory { cache.clone(), fs.clone(), process.clone(), - )), + ))), ); dm.set_downloader( "file", - Box::new(FileDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(FileDownloader::new( io.clone(), config.clone(), http_downloader.clone(), @@ -1136,11 +1136,11 @@ impl Factory { cache.clone(), Some(fs.clone()), Some(process.clone()), - )), + ))), ); dm.set_downloader( "path", - Box::new(PathDownloader::new( + std::rc::Rc::new(std::cell::RefCell::new(PathDownloader::new( io.clone(), config.clone(), http_downloader.clone(), @@ -1148,7 +1148,7 @@ impl Factory { cache.clone(), fs.clone(), process.clone(), - )), + ))), ); Ok(std::rc::Rc::new(std::cell::RefCell::new(dm))) |
