aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/repository/vcs/vcs_driver_interface.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-06-06 22:40:30 +0900
committernsfisis <nsfisis@gmail.com>2026-06-06 22:54:44 +0900
commitc028a9d5c737de5d2b259638a0a76b999364a262 (patch)
tree36c7678a335d284e6d2139346660c77f1e124ddc /crates/shirabe/src/repository/vcs/vcs_driver_interface.rs
parent33550b03c1724fbc8c1c8630c3b03fca1f0c0dc7 (diff)
downloadphp-shirabe-c028a9d5c737de5d2b259638a0a76b999364a262.tar.gz
php-shirabe-c028a9d5c737de5d2b259638a0a76b999364a262.tar.zst
php-shirabe-c028a9d5c737de5d2b259638a0a76b999364a262.zip
feat(vcs): implement VcsDriverInterface for all VCS drivers
Reconcile the VcsDriverInterface trait with the concrete drivers so every driver implements it as in PHP, where each driver extends VcsDriver. - Make cache-mutating getters take &mut self in the trait, matching the inherent methods' lazy-cache semantics; update vcs_repository consumers. - Change supports() to take Rc<RefCell<Config>> and return Result<bool>, completing GitDriver::supports deep ls-remote and its config wiring. - Add base get_composer_information to Git/Hg/Fossil/Perforce and an impl VcsDriverInterface block to every driver, delegating to inherent methods and absorbing type differences in the impl. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/repository/vcs/vcs_driver_interface.rs')
-rw-r--r--crates/shirabe/src/repository/vcs/vcs_driver_interface.rs21
1 files changed, 13 insertions, 8 deletions
diff --git a/crates/shirabe/src/repository/vcs/vcs_driver_interface.rs b/crates/shirabe/src/repository/vcs/vcs_driver_interface.rs
index c002dc5..e845300 100644
--- a/crates/shirabe/src/repository/vcs/vcs_driver_interface.rs
+++ b/crates/shirabe/src/repository/vcs/vcs_driver_interface.rs
@@ -12,19 +12,19 @@ pub trait VcsDriverInterface: std::fmt::Debug {
fn initialize(&mut self) -> anyhow::Result<()>;
fn get_composer_information(
- &self,
+ &mut self,
identifier: &str,
) -> anyhow::Result<Option<IndexMap<String, PhpMixed>>>;
- fn get_file_content(&self, file: &str, identifier: &str) -> anyhow::Result<Option<String>>;
+ fn get_file_content(&mut self, file: &str, identifier: &str) -> anyhow::Result<Option<String>>;
- fn get_change_date(&self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>>;
+ fn get_change_date(&mut self, identifier: &str) -> anyhow::Result<Option<DateTime<Utc>>>;
- fn get_root_identifier(&self) -> anyhow::Result<String>;
+ fn get_root_identifier(&mut self) -> anyhow::Result<String>;
- fn get_branches(&self) -> anyhow::Result<IndexMap<String, String>>;
+ fn get_branches(&mut self) -> anyhow::Result<IndexMap<String, String>>;
- fn get_tags(&self) -> anyhow::Result<IndexMap<String, String>>;
+ fn get_tags(&mut self) -> anyhow::Result<IndexMap<String, String>>;
fn get_dist(&self, identifier: &str) -> anyhow::Result<Option<IndexMap<String, String>>>;
@@ -32,11 +32,16 @@ pub trait VcsDriverInterface: std::fmt::Debug {
fn get_url(&self) -> String;
- fn has_composer_file(&self, identifier: &str) -> anyhow::Result<bool>;
+ fn has_composer_file(&mut self, identifier: &str) -> anyhow::Result<bool>;
fn cleanup(&mut self) -> anyhow::Result<()>;
- fn supports(io: Rc<RefCell<dyn IOInterface>>, config: &Config, url: &str, deep: bool) -> bool
+ fn supports(
+ io: Rc<RefCell<dyn IOInterface>>,
+ config: Rc<RefCell<Config>>,
+ url: &str,
+ deep: bool,
+ ) -> anyhow::Result<bool>
where
Self: Sized;
}