diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-05-19 00:10:22 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-05-19 00:11:03 +0900 |
| commit | c839244d8d09f3036ebfee8eef7eb6b147e593ab (patch) | |
| tree | fe48c94f2c2e62468beef5ff1a8f3cff6adeef4f /crates/shirabe/src/package/archiver | |
| parent | 48839250146b217e2756ed3c0e624fd341b54d6c (diff) | |
| download | php-shirabe-c839244d8d09f3036ebfee8eef7eb6b147e593ab.tar.gz php-shirabe-c839244d8d09f3036ebfee8eef7eb6b147e593ab.tar.zst php-shirabe-c839244d8d09f3036ebfee8eef7eb6b147e593ab.zip | |
fix(compile): fix various compile errors
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/package/archiver')
6 files changed, 53 insertions, 25 deletions
diff --git a/crates/shirabe/src/package/archiver/archivable_files_finder.rs b/crates/shirabe/src/package/archiver/archivable_files_finder.rs index 35ec36f..72ffabf 100644 --- a/crates/shirabe/src/package/archiver/archivable_files_finder.rs +++ b/crates/shirabe/src/package/archiver/archivable_files_finder.rs @@ -23,7 +23,7 @@ impl std::fmt::Debug for ArchivableFilesFinder { impl ArchivableFilesFinder { pub fn new(sources: &str, excludes: Vec<String>, ignore_filters: bool) -> anyhow::Result<Self> { - let fs = Filesystem::new(); + let fs = Filesystem::new(None); let sources_real_path = realpath(sources); if sources_real_path.is_none() { @@ -39,8 +39,8 @@ impl ArchivableFilesFinder { vec![] } else { vec![ - Box::new(GitExcludeFilter::new(&sources)), - Box::new(ComposerExcludeFilter::new(&sources, excludes)), + Box::new(GitExcludeFilter::new(sources.clone())), + Box::new(ComposerExcludeFilter::new(sources.clone(), excludes)), ] }; @@ -61,7 +61,8 @@ impl ArchivableFilesFinder { &format!("^{}", preg_quote(&sources_clone, Some('#'))), "", &fs.normalize_path(&realpath), - ); + ) + .unwrap_or_default(); let mut exclude = false; for f in &filters { @@ -72,13 +73,14 @@ impl ArchivableFilesFinder { }; finder - .in_dir(&sources) - .filter(Box::new(filter)) + .r#in(&sources) + // TODO(phase-b): symfony Finder filter takes Box<dyn Fn(&SplFileInfo) -> bool>; signature not yet wired .ignore_vcs(true) .ignore_dot_files(false) .sort_by_name(); + let _ = filter; - let inner_iter = finder.get_iterator(); + let inner_iter: Box<dyn Iterator<Item = SplFileInfo>> = Box::new(finder.get_iterator()); Ok(Self { finder, inner_iter }) } @@ -88,7 +90,7 @@ impl ArchivableFilesFinder { return true; } - let path = current.to_string(); + let path = current.get_pathname(); match std::fs::read_dir(&path) { Ok(mut iter) => iter.next().is_none(), Err(_) => false, diff --git a/crates/shirabe/src/package/archiver/archive_manager.rs b/crates/shirabe/src/package/archiver/archive_manager.rs index 3f7bfe0..73b0d84 100644 --- a/crates/shirabe/src/package/archiver/archive_manager.rs +++ b/crates/shirabe/src/package/archiver/archive_manager.rs @@ -19,8 +19,8 @@ use crate::util::r#loop::Loop; use crate::util::sync_helper::SyncHelper; pub struct ArchiveManager { - pub(crate) download_manager: DownloadManager, - pub(crate) r#loop: Loop, + pub(crate) download_manager: std::rc::Rc<std::cell::RefCell<DownloadManager>>, + pub(crate) r#loop: std::rc::Rc<std::cell::RefCell<Loop>>, pub(crate) archivers: Vec<Box<dyn ArchiverInterface>>, pub(crate) overwrite_files: bool, } @@ -34,7 +34,10 @@ impl std::fmt::Debug for ArchiveManager { } impl ArchiveManager { - pub fn new(download_manager: DownloadManager, r#loop: Loop) -> Self { + pub fn new( + download_manager: std::rc::Rc<std::cell::RefCell<DownloadManager>>, + r#loop: std::rc::Rc<std::cell::RefCell<Loop>>, + ) -> Self { Self { download_manager, r#loop, @@ -144,7 +147,7 @@ impl ArchiveManager { } }; - let filesystem = Filesystem::new(); + let filesystem = Filesystem::new(None); let is_root = package.as_any().is::<dyn RootPackageInterface>(); let source_path: String; @@ -158,10 +161,16 @@ impl ArchiveManager { filesystem.ensure_directory_exists(&source_path)?; let download_result = (|| -> anyhow::Result<()> { - let promise = self.download_manager.download(package, &source_path)?; - SyncHelper::r#await(&self.r#loop, promise)?; - let promise = self.download_manager.install(package, &source_path)?; - SyncHelper::r#await(&self.r#loop, promise)?; + let promise = + self.download_manager + .borrow() + .download(package, &source_path, None)?; + SyncHelper::r#await(&self.r#loop, Some(promise))?; + let promise = self + .download_manager + .borrow() + .install(package, &source_path)?; + SyncHelper::r#await(&self.r#loop, Some(promise))?; Ok(()) })(); @@ -172,7 +181,7 @@ impl ArchiveManager { let composer_json_path = format!("{}/composer.json", source_path); if file_exists(&composer_json_path) { - let json_file = JsonFile::new(composer_json_path, None, None); + let json_file = JsonFile::new(composer_json_path, None, None)?; let json_data = json_file.read()?; if let Some(archive) = json_data.get("archive") { if let Some(name) = archive.get("name").and_then(|v| v.as_str()) { diff --git a/crates/shirabe/src/package/archiver/base_exclude_filter.rs b/crates/shirabe/src/package/archiver/base_exclude_filter.rs index c7d2557..1a716d0 100644 --- a/crates/shirabe/src/package/archiver/base_exclude_filter.rs +++ b/crates/shirabe/src/package/archiver/base_exclude_filter.rs @@ -59,7 +59,7 @@ impl BaseExcludeFilterBase { let rule = rule.trim_matches('/'); - let glob_regex = Glob::to_regex(rule); + let glob_regex = Glob::to_regex(rule, true, true); let rule_regex = &glob_regex[2..glob_regex.len() - 2]; ( @@ -143,7 +143,7 @@ pub trait BaseExcludeFilter { let rule = rule.trim_matches('/'); // remove delimiters as well as caret (^) and dollar sign ($) from the regex - let glob_regex = Glob::to_regex(rule); + let glob_regex = Glob::to_regex(rule, true, true); let rule_regex = &glob_regex[2..glob_regex.len() - 2]; ( diff --git a/crates/shirabe/src/package/archiver/git_exclude_filter.rs b/crates/shirabe/src/package/archiver/git_exclude_filter.rs index dddad12..1a0ec4d 100644 --- a/crates/shirabe/src/package/archiver/git_exclude_filter.rs +++ b/crates/shirabe/src/package/archiver/git_exclude_filter.rs @@ -34,14 +34,17 @@ impl GitExcludeFilter { } fn parse_git_attributes_line_static(line: &str) -> Option<(String, bool, bool)> { - let parts = Preg::split(r"\s+", line); + let parts = Preg::split(r"\s+", line).unwrap_or_default(); if parts.len() == 2 && parts[1] == "export-ignore" { return Some(BaseExcludeFilterBase::generate_pattern(&parts[0])); } if parts.len() == 2 && parts[1] == "-export-ignore" { - return BaseExcludeFilterBase::generate_pattern(&format!("!{}", parts[0])); + return Some(BaseExcludeFilterBase::generate_pattern(&format!( + "!{}", + parts[0] + ))); } None diff --git a/crates/shirabe/src/package/archiver/phar_archiver.rs b/crates/shirabe/src/package/archiver/phar_archiver.rs index 2e9d96e..7b5142b 100644 --- a/crates/shirabe/src/package/archiver/phar_archiver.rs +++ b/crates/shirabe/src/package/archiver/phar_archiver.rs @@ -29,6 +29,12 @@ fn compress_formats() -> IndexMap<&'static str, i64> { #[derive(Debug)] pub struct PharArchiver; +impl PharArchiver { + pub fn new() -> Self { + Self + } +} + impl ArchiverInterface for PharArchiver { fn archive( &self, @@ -46,6 +52,7 @@ impl ArchiverInterface for PharArchiver { unlink(&target); } + let target_outer = target.clone(); let inner = (|| -> anyhow::Result<String> { let pos = strrpos(&target, &format).unwrap_or(target.len()); let filename = target[..pos.saturating_sub(1)].to_string(); @@ -63,7 +70,10 @@ impl ArchiverInterface for PharArchiver { *formats.get(format.as_str()).unwrap_or(&Phar::TAR), ); let files = ArchivableFilesFinder::new(&sources, excludes, ignore_filters)?; - let mut files_only = ArchivableFilesFilter::new(files); + // TODO(phase-b): unify iterator types (ArchivableFilesFinder yields SplFileInfo, + // ArchivableFilesFilter expects PathBuf). + let mut files_only = + ArchivableFilesFilter::new(Box::new(files.map(|f| f.get_pathname().into()))); phar.build_from_iterator(&mut files_only, &sources); files_only.add_empty_dir(&phar, &sources); @@ -137,7 +147,7 @@ impl ArchiverInterface for PharArchiver { inner.map_err(|e| { let message = format!( "Could not create archive '{}' from '{}': {}", - target, sources, e + target_outer, sources, e ); anyhow::anyhow!(RuntimeException { message, code: 0 }) }) diff --git a/crates/shirabe/src/package/archiver/zip_archiver.rs b/crates/shirabe/src/package/archiver/zip_archiver.rs index ef5b40a..471352f 100644 --- a/crates/shirabe/src/package/archiver/zip_archiver.rs +++ b/crates/shirabe/src/package/archiver/zip_archiver.rs @@ -13,6 +13,10 @@ use shirabe_php_shim::{ pub struct ZipArchiver; impl ZipArchiver { + pub fn new() -> Self { + Self + } + fn formats() -> IndexMap<String, bool> { let mut map = IndexMap::new(); map.insert("zip".to_string(), true); @@ -33,7 +37,7 @@ impl ArchiverInterface for ZipArchiver { excludes: Vec<String>, ignore_filters: bool, ) -> anyhow::Result<String> { - let fs = Filesystem::new(); + let fs = Filesystem::new(None); let sources_realpath = realpath(&sources); let sources = if let Some(p) = sources_realpath { p @@ -47,7 +51,7 @@ impl ArchiverInterface for ZipArchiver { let files = ArchivableFilesFinder::new(&sources, excludes, ignore_filters)?; for file in files { let filepath = file.get_pathname(); - let mut relative_path = file.get_relative_pathname(); + let mut relative_path = file.get_relative_path_name(); if Platform::is_windows() { relative_path = shirabe_php_shim::strtr(&relative_path, "\\", "/"); |
