aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/command
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-06 20:03:54 +0900
committernsfisis <nsfisis@gmail.com>2026-06-06 20:03:54 +0900
commit87f7f1b0f875e9cf26b84bd45dd48226a33749cb (patch)
tree1f6f32a209422c8e973b7f5f4e696e09d1cb88c7 /crates/shirabe/src/command
parent8ae5842647eb9be63e662d11cea7268f5ecb0202 (diff)
downloadphp-shirabe-87f7f1b0f875e9cf26b84bd45dd48226a33749cb.tar.gz
php-shirabe-87f7f1b0f875e9cf26b84bd45dd48226a33749cb.tar.zst
php-shirabe-87f7f1b0f875e9cf26b84bd45dd48226a33749cb.zip
feat(archive-command): wire up ArchiveManager.archive call
Replace the phase-b todo!() with the real ArchiveManager.archive invocation by taking the manager via mutable borrow (borrow_mut for the composer-owned RefCell, &mut for the locally created one). Also drop the stale get_io clone_box TODOs in archive and search commands, reusing the already-fetched io handle in search.
Diffstat (limited to 'crates/shirabe/src/command')
-rw-r--r--crates/shirabe/src/command/archive_command.rs29
-rw-r--r--crates/shirabe/src/command/search_command.rs4
2 files changed, 16 insertions, 17 deletions
diff --git a/crates/shirabe/src/command/archive_command.rs b/crates/shirabe/src/command/archive_command.rs
index bf3a0c1..c950eaa 100644
--- a/crates/shirabe/src/command/archive_command.rs
+++ b/crates/shirabe/src/command/archive_command.rs
@@ -114,10 +114,9 @@ impl ArchiveCommand {
.to_string()
});
- // TODO(phase-b): clone_box to release self borrow held by get_io.
- let io_box = self.get_io().clone();
+ let io = self.get_io().clone();
let return_code = self.archive(
- io_box.clone(),
+ io.clone(),
&config,
input
.borrow()
@@ -175,13 +174,13 @@ impl ArchiveCommand {
composer: Option<&PartialComposerHandle>,
) -> Result<i64> {
let composer_guard = composer.map(crate::command::composer_full);
- let owned_archive_manager;
+ let mut owned_archive_manager;
let composer_archive_manager;
- let composer_archive_manager_ref;
- let archive_manager: &ArchiveManager = if let Some(composer) = &composer_guard {
+ let mut composer_archive_manager_ref;
+ let archive_manager: &mut ArchiveManager = if let Some(composer) = &composer_guard {
composer_archive_manager = composer.get_archive_manager().clone();
- composer_archive_manager_ref = composer_archive_manager.borrow();
- &composer_archive_manager_ref
+ composer_archive_manager_ref = composer_archive_manager.borrow_mut();
+ &mut composer_archive_manager_ref
} else {
let factory = Factory;
let process = std::rc::Rc::new(std::cell::RefCell::new(ProcessExecutor::new(None)));
@@ -201,7 +200,7 @@ impl ArchiveCommand {
)));
owned_archive_manager =
factory.create_archive_manager(&*config.borrow(), &download_manager, &loop_)?;
- &owned_archive_manager
+ &mut owned_archive_manager
};
let package: crate::package::CompletePackageInterfaceHandle =
@@ -220,11 +219,13 @@ impl ArchiveCommand {
"<info>Creating the archive into \"{}\".</info>",
dest
));
- // TODO(phase-b): ArchiveManager.archive needs &mut self and &mut CompletePackageInterface;
- // current composer.get_archive_manager() returns &ArchiveManager. Needs RefCell wrapper.
- let _ = archive_manager;
- let _ = (&package, format, dest, file_name.as_deref(), ignore_filters);
- let package_path: String = todo!("ArchiveManager.archive call");
+ let package_path: String = archive_manager.archive(
+ package,
+ format.to_string(),
+ dest.to_string(),
+ file_name,
+ ignore_filters,
+ )?;
let fs = Filesystem::new(None);
let short_path =
fs.find_shortest_path(&Platform::get_cwd(false)?, &package_path, true, false);
diff --git a/crates/shirabe/src/command/search_command.rs b/crates/shirabe/src/command/search_command.rs
index 7149db7..bf68b2d 100644
--- a/crates/shirabe/src/command/search_command.rs
+++ b/crates/shirabe/src/command/search_command.rs
@@ -75,9 +75,7 @@ impl SearchCommand {
let composer = if let Some(c) = self.try_composer(None, None) {
c
} else {
- // TODO(phase-b): clone_box to release self borrow held by get_io.
- let io_box = self.get_io().clone();
- self.create_composer_instance(input.clone(), io_box, None, false, None)?
+ self.create_composer_instance(input.clone(), io.clone(), None, false, None)?
};
let composer_ref = crate::command::composer_full(&composer);
let local_repo = composer_ref