aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/downloader
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-08-09 06:19:30 +0900
committernsfisis <nsfisis@gmail.com>2026-08-09 06:19:30 +0900
commit880a5eaad9dcdfd31563385f11ba1f63d38cfd14 (patch)
tree6f9de7b2b8331628a74287112711f65ae3eddc52 /crates/shirabe/src/downloader
parentf3d60c7836da0d50d59a22cfd6e4692e3dc75581 (diff)
downloadphp-shirabe-880a5eaad9dcdfd31563385f11ba1f63d38cfd14.tar.gz
php-shirabe-880a5eaad9dcdfd31563385f11ba1f63d38cfd14.tar.zst
php-shirabe-880a5eaad9dcdfd31563385f11ba1f63d38cfd14.zip
refactor(php-shim): use std::path::MAIN_SEPARATOR over a shim constant
The shim's DIRECTORY_SEPARATOR was hardcoded to "/", so every ported `'\\' === DIRECTORY_SEPARATOR` check compared against a constant that does not track the target platform. std::path::MAIN_SEPARATOR and MAIN_SEPARATOR_STR carry the same meaning as PHP's constant and resolve per platform, so the Windows branches are selected on Windows targets. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/downloader')
-rw-r--r--crates/shirabe/src/downloader/archive_downloader.rs15
-rw-r--r--crates/shirabe/src/downloader/file_downloader.rs17
-rw-r--r--crates/shirabe/src/downloader/gzip_downloader.rs7
-rw-r--r--crates/shirabe/src/downloader/path_downloader.rs10
-rw-r--r--crates/shirabe/src/downloader/zip_downloader.rs12
5 files changed, 29 insertions, 32 deletions
diff --git a/crates/shirabe/src/downloader/archive_downloader.rs b/crates/shirabe/src/downloader/archive_downloader.rs
index d2ee4a75..097fc1af 100644
--- a/crates/shirabe/src/downloader/archive_downloader.rs
+++ b/crates/shirabe/src/downloader/archive_downloader.rs
@@ -11,8 +11,7 @@ use indexmap::IndexMap;
use shirabe_external_packages::symfony::finder::Finder;
use shirabe_php_shim::Catch as _;
use shirabe_php_shim::{
- DIRECTORY_SEPARATOR, PhpMixed, RuntimeException, bin2hex, file_exists, is_dir, random_bytes,
- realpath,
+ PhpMixed, RuntimeException, bin2hex, file_exists, is_dir, random_bytes, realpath,
};
use std::path::{Path, PathBuf};
@@ -92,13 +91,11 @@ pub trait ArchiveDownloader {
.filesystem
.borrow()
.normalize_path(&vendor_dir)
- .contains(
- &self
- .inner()
- .filesystem
- .borrow()
- .normalize_path(&format!("{}{}", path, DIRECTORY_SEPARATOR)),
- )
+ .contains(&self.inner().filesystem.borrow().normalize_path(&format!(
+ "{}{}",
+ path,
+ std::path::MAIN_SEPARATOR
+ )))
{
self.inner()
.filesystem
diff --git a/crates/shirabe/src/downloader/file_downloader.rs b/crates/shirabe/src/downloader/file_downloader.rs
index 9b86ee56..ab9c3672 100644
--- a/crates/shirabe/src/downloader/file_downloader.rs
+++ b/crates/shirabe/src/downloader/file_downloader.rs
@@ -27,10 +27,10 @@ use crate::util::sync_executor;
use indexmap::IndexMap;
use shirabe_php_shim::Catch as _;
use shirabe_php_shim::{
- DIRECTORY_SEPARATOR, InvalidArgumentException, PATHINFO_BASENAME, PATHINFO_EXTENSION,
- PHP_URL_PATH, PhpMixed, RuntimeException, UnexpectedValueException, array_search, file_exists,
- filesize, get_class, hash, hash_file, impl_php_class, is_dir, is_executable, parse_url,
- pathinfo, realpath, rtrim, spl_object_hash, strlen, strpos, strtr, trim, umask, usleep,
+ InvalidArgumentException, PATHINFO_BASENAME, PATHINFO_EXTENSION, PHP_URL_PATH, PhpMixed,
+ RuntimeException, UnexpectedValueException, array_search, file_exists, filesize, get_class,
+ hash, hash_file, impl_php_class, is_dir, is_executable, parse_url, pathinfo, realpath, rtrim,
+ spl_object_hash, strlen, strpos, strtr, trim, umask, usleep,
};
use std::sync::{LazyLock, Mutex};
@@ -744,10 +744,11 @@ impl DownloaderInterface for FileDownloader {
// but in that case we ensure the directory is empty already in ProjectInstaller so no need to empty it here.
if !{
let normalized_vendor = self.filesystem.borrow_mut().normalize_path(&vendor_dir);
- let normalized_path = self
- .filesystem
- .borrow()
- .normalize_path(&format!("{}{}", path, DIRECTORY_SEPARATOR));
+ let normalized_path = self.filesystem.borrow().normalize_path(&format!(
+ "{}{}",
+ path,
+ std::path::MAIN_SEPARATOR
+ ));
strpos(&normalized_vendor, &normalized_path).is_some()
} {
self.filesystem.borrow_mut().empty_directory(path, true)?;
diff --git a/crates/shirabe/src/downloader/gzip_downloader.rs b/crates/shirabe/src/downloader/gzip_downloader.rs
index 9473deff..3ddca2a4 100644
--- a/crates/shirabe/src/downloader/gzip_downloader.rs
+++ b/crates/shirabe/src/downloader/gzip_downloader.rs
@@ -14,9 +14,8 @@ use crate::util::Platform;
use crate::util::ProcessExecutor;
use indexmap::IndexMap;
use shirabe_php_shim::{
- DIRECTORY_SEPARATOR, PATHINFO_FILENAME, PHP_URL_PATH, PhpMixed, RuntimeException,
- extension_loaded, fclose, fopen, fwrite, gzclose, gzopen, gzread, impl_php_class, implode,
- parse_url, pathinfo, strtr,
+ PATHINFO_FILENAME, PHP_URL_PATH, PhpMixed, RuntimeException, extension_loaded, fclose, fopen,
+ fwrite, gzclose, gzopen, gzread, impl_php_class, implode, parse_url, pathinfo, strtr,
};
#[derive(Debug)]
@@ -91,7 +90,7 @@ impl ArchiveDownloader for GzipDownloader {
.unwrap_or(""),
PATHINFO_FILENAME,
);
- let target_filepath = format!("{}{}{}", path, DIRECTORY_SEPARATOR, filename);
+ let target_filepath = format!("{}{}{}", path, std::path::MAIN_SEPARATOR, filename);
if !Platform::is_windows() {
let command = vec![
diff --git a/crates/shirabe/src/downloader/path_downloader.rs b/crates/shirabe/src/downloader/path_downloader.rs
index 9449e74a..4be835cd 100644
--- a/crates/shirabe/src/downloader/path_downloader.rs
+++ b/crates/shirabe/src/downloader/path_downloader.rs
@@ -23,8 +23,8 @@ use crate::util::ProcessExecutor;
use indexmap::IndexMap;
use shirabe_external_packages::symfony::filesystem::Filesystem as SymfonyFilesystem;
use shirabe_php_shim::{
- DIRECTORY_SEPARATOR, PHP_WINDOWS_VERSION_MAJOR, PHP_WINDOWS_VERSION_MINOR, PhpMixed,
- RuntimeException, file_exists, function_exists, impl_php_class, is_dir, realpath,
+ PHP_WINDOWS_VERSION_MAJOR, PHP_WINDOWS_VERSION_MINOR, PhpMixed, RuntimeException, file_exists,
+ function_exists, impl_php_class, is_dir, realpath,
};
#[derive(Debug)]
@@ -261,9 +261,9 @@ impl DownloaderInterface for PathDownloader {
if format!(
"{}{}",
realpath(&path).unwrap_or_default(),
- DIRECTORY_SEPARATOR
+ std::path::MAIN_SEPARATOR
)
- .starts_with(&format!("{}{}", real_url, DIRECTORY_SEPARATOR))
+ .starts_with(&format!("{}{}", real_url, std::path::MAIN_SEPARATOR))
{
// IMPORTANT NOTICE: If you wish to change this, don't. You are wasting your time and ours.
//
@@ -383,7 +383,7 @@ impl DownloaderInterface for PathDownloader {
format!(
"{}{}{}",
Platform::get_cwd(false)?,
- DIRECTORY_SEPARATOR,
+ std::path::MAIN_SEPARATOR,
path
)
} else {
diff --git a/crates/shirabe/src/downloader/zip_downloader.rs b/crates/shirabe/src/downloader/zip_downloader.rs
index c481f13f..bc565ea0 100644
--- a/crates/shirabe/src/downloader/zip_downloader.rs
+++ b/crates/shirabe/src/downloader/zip_downloader.rs
@@ -12,10 +12,10 @@ use shirabe_external_packages::composer::pcre::{CaptureKey, Preg};
use shirabe_external_packages::symfony::process::ExecutableFinder;
use shirabe_php_shim::Catch as _;
use shirabe_php_shim::{
- CmpOp, DIRECTORY_SEPARATOR, ErrorException, PhpMixed, RuntimeException,
- UnexpectedValueException, ZipArchive, bin2hex, class_exists, file_exists, file_get_contents,
- filesize, function_exists, hash_file, impl_php_class, is_file, json_encode, php_regex,
- random_int, str_contains, str_replace, strlen, substr, version_compare,
+ CmpOp, ErrorException, PhpMixed, RuntimeException, UnexpectedValueException, ZipArchive,
+ bin2hex, class_exists, file_exists, file_get_contents, filesize, function_exists, hash_file,
+ impl_php_class, is_file, json_encode, php_regex, random_int, str_contains, str_replace, strlen,
+ substr, version_compare,
};
use std::sync::Mutex;
@@ -84,8 +84,8 @@ impl ZipDownloader {
let map: IndexMap<&str, String> = [
// normalize separators to backslashes to avoid problems with 7-zip on windows
// see https://github.com/composer/composer/issues/10058
- ("%file%", file.replace('/', DIRECTORY_SEPARATOR)),
- ("%path%", path.replace('/', DIRECTORY_SEPARATOR)),
+ ("%file%", file.replace('/', std::path::MAIN_SEPARATOR_STR)),
+ ("%path%", path.replace('/', std::path::MAIN_SEPARATOR_STR)),
]
.into_iter()
.collect();