diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-08-09 06:19:30 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-08-09 06:19:30 +0900 |
| commit | 880a5eaad9dcdfd31563385f11ba1f63d38cfd14 (patch) | |
| tree | 6f9de7b2b8331628a74287112711f65ae3eddc52 /crates/shirabe/src/downloader | |
| parent | f3d60c7836da0d50d59a22cfd6e4692e3dc75581 (diff) | |
| download | php-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.rs | 15 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/file_downloader.rs | 17 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/gzip_downloader.rs | 7 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/path_downloader.rs | 10 | ||||
| -rw-r--r-- | crates/shirabe/src/downloader/zip_downloader.rs | 12 |
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(); |
