aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/downloader/vcs_downloader.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/downloader/vcs_downloader.rs')
-rw-r--r--crates/shirabe/src/downloader/vcs_downloader.rs56
1 files changed, 25 insertions, 31 deletions
diff --git a/crates/shirabe/src/downloader/vcs_downloader.rs b/crates/shirabe/src/downloader/vcs_downloader.rs
index 1219ab1..096e93d 100644
--- a/crates/shirabe/src/downloader/vcs_downloader.rs
+++ b/crates/shirabe/src/downloader/vcs_downloader.rs
@@ -65,7 +65,7 @@ impl VcsDownloaderBase {
) -> Result<Option<PhpMixed>> {
// TODO(phase-b): parent::cleanChanges() rechecks getLocalChanges via dynamic dispatch.
// Callers in subclasses must do that check themselves (they already have).
- Ok(shirabe_external_packages::react::promise::resolve(None))
+ Ok(None)
}
}
@@ -142,7 +142,7 @@ pub trait VcsDownloader:
while let Some(url) = array_shift(&mut urls) {
// TODO(phase-b): use anyhow::Result<Result<T, E>> to model PHP try/catch
let attempt: Result<Option<PhpMixed>> =
- self.do_download(package, path, &url, prev_package);
+ self.do_download(package, path, &url, prev_package).await;
match attempt {
Ok(promise) => return Ok(promise),
Err(e) => {
@@ -182,7 +182,7 @@ pub trait VcsDownloader:
}
}
- Ok(shirabe_external_packages::react::promise::resolve(None))
+ Ok(None)
}
async fn prepare(
@@ -193,7 +193,8 @@ pub trait VcsDownloader:
prev_package: Option<&dyn PackageInterface>,
) -> Result<Option<PhpMixed>> {
if r#type == "update" {
- self.clean_changes(prev_package.unwrap(), path, true)?;
+ self.clean_changes(prev_package.unwrap(), path, true)
+ .await?;
self.has_cleaned_changes_mut()
.insert(prev_package.unwrap().get_unique_name(), true);
} else if r#type == "install" {
@@ -201,10 +202,10 @@ pub trait VcsDownloader:
.borrow_mut()
.empty_directory(path, true)?;
} else if r#type == "uninstall" {
- self.clean_changes(package, path, false)?;
+ self.clean_changes(package, path, false).await?;
}
- Ok(shirabe_external_packages::react::promise::resolve(None))
+ Ok(None)
}
async fn cleanup(
@@ -227,7 +228,7 @@ pub trait VcsDownloader:
.shift_remove(&prev_package.unwrap().get_unique_name());
}
- Ok(shirabe_external_packages::react::promise::resolve(None))
+ Ok(None)
}
async fn install(
@@ -255,7 +256,7 @@ pub trait VcsDownloader:
let mut urls = self.prepare_urls(package.get_source_urls());
while let Some(url) = array_shift(&mut urls) {
// TODO(phase-b): use anyhow::Result<Result<T, E>> to model PHP try/catch
- let attempt: Result<Option<PhpMixed>> = self.do_install(package, path, &url);
+ let attempt: Result<Option<PhpMixed>> = self.do_install(package, path, &url).await;
match attempt {
Ok(_) => break,
Err(e) => {
@@ -295,7 +296,7 @@ pub trait VcsDownloader:
}
}
- Ok(shirabe_external_packages::react::promise::resolve(None))
+ Ok(None)
}
async fn update(
@@ -326,7 +327,8 @@ pub trait VcsDownloader:
let mut exception: Option<anyhow::Error> = None;
while let Some(url) = array_shift(&mut urls) {
// TODO(phase-b): use anyhow::Result<Result<T, E>> to model PHP try/catch
- let attempt: Result<Option<PhpMixed>> = self.do_update(initial, target, path, &url);
+ let attempt: Result<Option<PhpMixed>> =
+ self.do_update(initial, target, path, &url).await;
match attempt {
Ok(_) => {
exception = None;
@@ -404,7 +406,7 @@ pub trait VcsDownloader:
}
}
- Ok(shirabe_external_packages::react::promise::resolve(None))
+ Ok(None)
}
async fn remove(
@@ -418,28 +420,20 @@ pub trait VcsDownloader:
io_interface::NORMAL,
);
- let promise = self
+ let result = self
.filesystem_mut()
.borrow_mut()
- .remove_directory_async(path)?;
+ .remove_directory_async(path)
+ .await?;
+ if !result {
+ return Err(RuntimeException {
+ message: format!("Could not completely delete {}, aborting.", path),
+ code: 0,
+ }
+ .into());
+ }
- let path = path.to_string();
- // TODO(phase-b): closure return type mismatches PromiseInterface::then signature.
- Ok(promise.then(
- Some(Box::new(
- move |result: Option<PhpMixed>| -> Option<PhpMixed> {
- let result_bool = result.as_ref().and_then(|v| v.as_bool()).unwrap_or(false);
- if !result_bool {
- let _: RuntimeException = RuntimeException {
- message: format!("Could not completely delete {}, aborting.", path),
- code: 0,
- };
- }
- None
- },
- )),
- None,
- ))
+ Ok(None)
}
fn get_vcs_reference(&self, package: &dyn PackageInterface, path: &str) -> Option<String> {
@@ -480,7 +474,7 @@ pub trait VcsDownloader:
.into());
}
- Ok(shirabe_external_packages::react::promise::resolve(None))
+ Ok(None)
}
/// Reapply previously stashed changes if applicable, only called after an update (regardless if successful or not)