From f2477f437beaa4a6a4b41ac5321cccfd2c14a13e Mon Sep 17 00:00:00 2001 From: printempw Date: Sat, 30 Jun 2018 16:31:39 +0800 Subject: [PATCH] Use composer/semver to compare versions Remove Utils::versionCompare method. --- app/Http/Controllers/SetupController.php | 5 +- app/Http/Controllers/UpdateController.php | 7 +-- app/Providers/BootServiceProvider.php | 3 +- app/Services/Utils.php | 61 ----------------------- 4 files changed, 9 insertions(+), 67 deletions(-) diff --git a/app/Http/Controllers/SetupController.php b/app/Http/Controllers/SetupController.php index 6fa35af5..89933823 100644 --- a/app/Http/Controllers/SetupController.php +++ b/app/Http/Controllers/SetupController.php @@ -11,6 +11,7 @@ use Storage; use Artisan; use App\Models\User; use Illuminate\Http\Request; +use Composer\Semver\Comparator; use Illuminate\Validation\Validator; use App\Exceptions\PrettyPageException; @@ -119,7 +120,7 @@ class SetupController extends Controller public function update() { - if (Utils::versionCompare(config('app.version'), option('version', ''), '<=')) { + if (Comparator::lessThanOrEqualTo(config('app.version'), option('version'))) { // No updates available return view('setup.locked'); } @@ -140,7 +141,7 @@ class SetupController extends Controller // Skip if the file is not valid or expired if (! isset($matches[2]) || - Utils::versionCompare($matches[2], config('app.version'), '<')) { + Comparator::lessThan($matches[2], config('app.version'))) { continue; } diff --git a/app/Http/Controllers/UpdateController.php b/app/Http/Controllers/UpdateController.php index e163f5f1..35e94044 100644 --- a/app/Http/Controllers/UpdateController.php +++ b/app/Http/Controllers/UpdateController.php @@ -11,6 +11,7 @@ use Storage; use ZipArchive; use App\Services\OptionForm; use Illuminate\Http\Request; +use Composer\Semver\Comparator; class UpdateController extends Controller { @@ -46,9 +47,9 @@ class UpdateController extends Controller if ($this->getUpdateInfo()) { $info['latest_version'] = $this->getUpdateInfo('latest_version'); - $info['new_version_available'] = Utils::versionCompare( + $info['new_version_available'] = Comparator::greaterThan( $info['latest_version'], - $info['current_version'], '>' + $info['current_version'] ); if ($detail = $this->getReleaseInfo($info['latest_version'])) { @@ -96,7 +97,7 @@ class UpdateController extends Controller { $latest = $this->getUpdateInfo('latest_version'); - return Utils::versionCompare($latest, $this->currentVersion, '>') && $this->getReleaseInfo($latest); + return Comparator::greaterThan($latest, $this->currentVersion) && $this->getReleaseInfo($latest); } public function download(Request $request) diff --git a/app/Providers/BootServiceProvider.php b/app/Providers/BootServiceProvider.php index d7e4b578..65e9b6dd 100644 --- a/app/Providers/BootServiceProvider.php +++ b/app/Providers/BootServiceProvider.php @@ -6,6 +6,7 @@ use DB; use View; use Utils; use Illuminate\Http\Request; +use Composer\Semver\Comparator; use Illuminate\Support\ServiceProvider; use App\Exceptions\PrettyPageException; use App\Http\Controllers\SetupController; @@ -80,7 +81,7 @@ class BootServiceProvider extends ServiceProvider return redirect('/setup')->send(); } - if (Utils::versionCompare(config('app.version'), option('version', ''), '>')) { + if (Comparator::greaterThan(config('app.version'), option('version'))) { return redirect('/setup/update')->send(); } diff --git a/app/Services/Utils.php b/app/Services/Utils.php index ebd8de10..d3f728f9 100644 --- a/app/Services/Utils.php +++ b/app/Services/Utils.php @@ -56,67 +56,6 @@ class Utils return false; } - /** - * Compares two "PHP-standardized" version number strings. - * Unlike version_compare(), this method will determine that versions with suffix are lower. - * - * e.g. 3.2-beta > 3.2-alpha - * 3.2 > 3.2-beta - * 3.2 > 3.2-pre-release - * 3.2 > 3.2-pr8 - * - * @param string $version1 - * @param string $version2 - * @param string $operator - * @return mixed - */ - public static function versionCompare($version1, $version2, $operator = null) - { - $versions = [$version1, $version2]; - - // Pre-processing for version contains hyphen - foreach ([0, 1] as $offset) { - if (false !== ($result = self::parseVersionWithHyphen($versions[$offset]))) { - $versions[$offset] = $result; - } else { - $versions[$offset] = ['main' => $versions[$offset], 'sub' => '']; - } - } - - if (version_compare($versions[0]['main'], $versions[1]['main'], '=')) { - $sub1 = $versions[0]['sub']; - $sub2 = $versions[1]['sub']; - - // v3.2-pr < v3.2 - if ($sub1 != "" || $sub2 != "") { - // If both of sub-versions are not empty - if ($sub1 != "" && $sub2 != "") { - return version_compare($sub1, $sub2, $operator); - } else { - $result = version_compare($sub1, $sub2, $operator); - // Reverse the result since version_compare() will determine that "beta" > "" - return ($operator == "=") ? $result : !$result; - } - } - } - - return version_compare($versions[0]['main'], $versions[1]['main'], $operator); - } - - public static function parseVersionWithHyphen($version) - { - preg_match('/([^-]*)-(.*)/', $version, $matches); - - if (isset($matches[2])) { - return [ - 'main' => $matches[1], - 'sub' => $matches[2] - ]; - } - - return false; - } - public static function download($url, $path) { @set_time_limit(0);