Вход Регистрация
Файл: vendor/psy/psysh/src/VersionUpdater/GitHubChecker.php
Строк: 79
<?php

/*
 * This file is part of Psy Shell.
 *
 * (c) 2012-2022 Justin Hileman
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace PsyVersionUpdater;

use 
PsyShell;

class 
GitHubChecker implements Checker
{
    const 
URL 'https://api.github.com/repos/bobthecow/psysh/releases/latest';

    private 
$latest;

    
/**
     * @return bool
     */
    
public function isLatest(): bool
    
{
        
// version_compare doesn't handle semver completely;
        // strip pre-release and build metadata before comparing
        
$version preg_replace('/[+-]w+/'''Shell::VERSION);

        return 
version_compare($version$this->getLatest(), '>=');
    }

    
/**
     * @return string
     */
    
public function getLatest(): string
    
{
        if (!isset(
$this->latest)) {
            
$this->setLatest($this->getVersionFromTag());
        }

        return 
$this->latest;
    }

    
/**
     * @param string $version
     */
    
public function setLatest(string $version)
    {
        
$this->latest $version;
    }

    
/**
     * @return string|null
     */
    
private function getVersionFromTag()
    {
        
$contents $this->fetchLatestRelease();
        if (!
$contents || !isset($contents->tag_name)) {
            throw new 
InvalidArgumentException('Unable to check for updates');
        }
        
$this->setLatest($contents->tag_name);

        return 
$this->getLatest();
    }

    
/**
     * Set to public to make testing easier.
     *
     * @return mixed
     */
    
public function fetchLatestRelease()
    {
        
$context stream_context_create([
            
'http' => [
                
'user_agent' => 'PsySH/'.Shell::VERSION,
                
'timeout'    => 1.0,
            ],
        ]);

        
set_error_handler(function () {
            
// Just ignore all errors with this. The checker will throw an exception
            // if it doesn't work :)
        
});

        
$result = @file_get_contents(self::URLfalse$context);

        
restore_error_handler();

        return 
json_decode($result);
    }
}
Онлайн: 1
Реклама