aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-09 09:34:34 +0900
committernsfisis <nsfisis@gmail.com>2026-08-09 09:34:34 +0900
commitdfd98ce4b227a3a14dc913c669bee4f077a65178 (patch)
treedef0558566319a18ffbcdc4eb4e5175e3c6c9bb0 /crates/shirabe
parentd2a28f8c07b0aa713be338005c6153011d70f24b (diff)
downloadphp-shirabe-dfd98ce4b227a3a14dc913c669bee4f077a65178.tar.gz
php-shirabe-dfd98ce4b227a3a14dc913c669bee4f077a65178.tar.zst
php-shirabe-dfd98ce4b227a3a14dc913c669bee4f077a65178.zip
refactor(php-shim): make the fs mutators return Result
mkdir, rmdir, unlink and symlink each had a bool version and a _result twin returning the io::Error, which left two names for one call. Keep only the Result form and let the callers that want a boolean spell out .is_ok(). Call sites that discard the outcome, as their PHP originals do, are unchanged. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe')
-rw-r--r--crates/shirabe/src/cache.rs3
-rw-r--r--crates/shirabe/src/console/application.rs2
-rw-r--r--crates/shirabe/src/factory.rs2
-rw-r--r--crates/shirabe/src/json/json_file.rs2
-rw-r--r--crates/shirabe/src/util/filesystem.rs14
-rw-r--r--crates/shirabe/tests/autoload/autoload_generator_test.rs4
-rw-r--r--crates/shirabe/tests/util/filesystem_test.rs4
7 files changed, 16 insertions, 15 deletions
diff --git a/crates/shirabe/src/cache.rs b/crates/shirabe/src/cache.rs
index a9f56eac..14f7287f 100644
--- a/crates/shirabe/src/cache.rs
+++ b/crates/shirabe/src/cache.rs
@@ -106,7 +106,8 @@ impl Cache {
if !self.read_only
&& ((!is_dir(&self.root)
- && !Silencer::call(|| Ok(mkdir(&self.root, 0o777, true))).unwrap_or(false))
+ && !Silencer::call(|| Ok(mkdir(&self.root, 0o777, true).is_ok()))
+ .unwrap_or(false))
|| !is_writable(&self.root))
{
self.io.write_error(&format!(
diff --git a/crates/shirabe/src/console/application.rs b/crates/shirabe/src/console/application.rs
index bf1f3575..05cd1d22 100644
--- a/crates/shirabe/src/console/application.rs
+++ b/crates/shirabe/src/console/application.rs
@@ -2335,7 +2335,7 @@ impl ApplicationHandle {
);
if !(file_put_contents(&tempfile, file!().as_bytes()).is_some_and(|n| n > 0)
&& file_get_contents(&tempfile).as_deref() == Some(file!())
- && unlink(&tempfile)
+ && unlink(&tempfile).is_ok()
&& !file_exists(&tempfile))
{
return Ok(Some(format!("<error>PHP temp directory ({}) does not exist or is not writable to Composer. Set sys_temp_dir in your php.ini</error>", sys_get_temp_dir())));
diff --git a/crates/shirabe/src/factory.rs b/crates/shirabe/src/factory.rs
index d7439d58..18ff8ef5 100644
--- a/crates/shirabe/src/factory.rs
+++ b/crates/shirabe/src/factory.rs
@@ -299,7 +299,7 @@ impl Factory {
if !is_dir(dir) {
let dir_owned = dir.clone();
let _ = Silencer::call(|| {
- Ok::<bool, anyhow::Error>(mkdir(&dir_owned, 0o777, true))
+ Ok::<bool, anyhow::Error>(mkdir(&dir_owned, 0o777, true).is_ok())
});
}
let path = format!("{}/.htaccess", dir);
diff --git a/crates/shirabe/src/json/json_file.rs b/crates/shirabe/src/json/json_file.rs
index feb72764..4c74b83e 100644
--- a/crates/shirabe/src/json/json_file.rs
+++ b/crates/shirabe/src/json/json_file.rs
@@ -237,7 +237,7 @@ impl JsonFile {
.into());
}
// PHP: @mkdir($dir, 0777, true)
- if !Silencer::call(|| Ok(mkdir(&dir, 0o777, true))).unwrap_or(false) {
+ if !Silencer::call(|| Ok(mkdir(&dir, 0o777, true).is_ok())).unwrap_or(false) {
return Err(UnexpectedValueException::new(format!(
"{} does not exist and could not be created.",
dir
diff --git a/crates/shirabe/src/util/filesystem.rs b/crates/shirabe/src/util/filesystem.rs
index 2c4cbcc6..925cb38a 100644
--- a/crates/shirabe/src/util/filesystem.rs
+++ b/crates/shirabe/src/util/filesystem.rs
@@ -240,7 +240,7 @@ impl Filesystem {
}
if is_link(directory) {
- return Ok(Some(unlink(directory)));
+ return Ok(Some(unlink(directory).is_ok()));
}
if !is_dir(directory) || !file_exists(directory) {
@@ -328,7 +328,7 @@ impl Filesystem {
.into());
}
- if !mkdir(directory, 0o777, true) {
+ if mkdir(directory, 0o777, true).is_err() {
let e = RuntimeException::new(format!(
"{} does not exist and could not be created: {}",
directory,
@@ -393,12 +393,12 @@ impl Filesystem {
/// Attempts to rmdir a file and in case of failure retries after 350ms on windows
pub fn rmdir(&self, path: impl AsRef<Path>) -> anyhow::Result<bool> {
let path = path.as_ref();
- let mut deleted = rmdir(path);
+ let mut deleted = rmdir(path).is_ok();
if !deleted {
// retry after a bit on windows since it tends to be touchy with mass removals
if Platform::is_windows() {
usleep(350000);
- deleted = rmdir(path);
+ deleted = rmdir(path).is_ok();
}
if !deleted {
@@ -922,10 +922,10 @@ impl Filesystem {
/// symbolic links on windows which link to directories need rmdir instead of unlink
fn unlink_implementation(&self, path: &Path) -> bool {
if Platform::is_windows() && is_dir(path) && is_link(path) {
- return rmdir(path);
+ return rmdir(path).is_ok();
}
- unlink(path)
+ unlink(path).is_ok()
}
/// Creates a relative symlink from $link to $target
@@ -938,7 +938,7 @@ impl Filesystem {
let relative_path = self.find_shortest_path(link, target, false, false);
chdir(dirname(link));
- let result = symlink(&relative_path, link);
+ let result = symlink(&relative_path, link).is_ok();
chdir(&cwd);
diff --git a/crates/shirabe/tests/autoload/autoload_generator_test.rs b/crates/shirabe/tests/autoload/autoload_generator_test.rs
index 97fabf16..81a4040f 100644
--- a/crates/shirabe/tests/autoload/autoload_generator_test.rs
+++ b/crates/shirabe/tests/autoload/autoload_generator_test.rs
@@ -2535,7 +2535,7 @@ fn test_absolute_symlink_with_psr4_does_not_generate_warnings() {
// Create an absolute symlink
let target = format!("{}/tools-real", s.working_dir);
let r#link = format!("{}/tools", s.working_dir);
- assert!(shirabe_php_shim::symlink(&target, &r#link));
+ assert!(shirabe_php_shim::symlink(&target, &r#link).is_ok());
package.set_autoload(autoload(vec![
("psr-4", str_map(&[("MyTools\\", pstr("tools/"))])),
@@ -2577,7 +2577,7 @@ fn test_absolute_symlink_with_classmap_exclude_from_classmap() {
// Create an absolute symlink
let target = format!("{}/tools-real", s.working_dir);
let r#link = format!("{}/tools", s.working_dir);
- assert!(shirabe_php_shim::symlink(&target, &r#link));
+ assert!(shirabe_php_shim::symlink(&target, &r#link).is_ok());
package.set_autoload(autoload(vec![
("classmap", str_list(&["tools/"])),
diff --git a/crates/shirabe/tests/util/filesystem_test.rs b/crates/shirabe/tests/util/filesystem_test.rs
index 5bb44598..b217a342 100644
--- a/crates/shirabe/tests/util/filesystem_test.rs
+++ b/crates/shirabe/tests/util/filesystem_test.rs
@@ -512,7 +512,7 @@ fn test_unlink_symlinked_directory() {
mkdir(format!("{basepath}/real"), 0o777, true);
touch(format!("{basepath}/real/FILE"));
- let result = symlink(format!("{basepath}/real"), &symlinked);
+ let result = symlink(format!("{basepath}/real"), &symlinked).is_ok();
if !result {
// Symbolic links for directories not supported on this platform.
@@ -539,7 +539,7 @@ fn test_remove_symlinked_directory_with_trailing_slash() {
let symlinked = format!("{working_dir}/linked");
let symlinked_trailing_slash = format!("{symlinked}/");
- let result = symlink(format!("{working_dir}/real"), &symlinked);
+ let result = symlink(format!("{working_dir}/real"), &symlinked).is_ok();
if !result {
// Symbolic links for directories not supported on this platform.