annotate vendor/psy/psysh/src/VersionUpdater/IntervalChecker.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents a9cd425dd02b
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 /*
Chris@0 4 * This file is part of Psy Shell.
Chris@0 5 *
Chris@0 6 * (c) 2012-2018 Justin Hileman
Chris@0 7 *
Chris@0 8 * For the full copyright and license information, please view the LICENSE
Chris@0 9 * file that was distributed with this source code.
Chris@0 10 */
Chris@0 11
Chris@0 12 namespace Psy\VersionUpdater;
Chris@0 13
Chris@0 14 class IntervalChecker extends GitHubChecker
Chris@0 15 {
Chris@0 16 private $cacheFile;
Chris@0 17 private $interval;
Chris@0 18
Chris@0 19 public function __construct($cacheFile, $interval)
Chris@0 20 {
Chris@0 21 $this->cacheFile = $cacheFile;
Chris@0 22 $this->interval = $interval;
Chris@0 23 }
Chris@0 24
Chris@0 25 public function fetchLatestRelease()
Chris@0 26 {
Chris@0 27 // Read the cached file
Chris@4 28 $cached = \json_decode(@\file_get_contents($this->cacheFile, false));
Chris@0 29 if ($cached && isset($cached->last_check) && isset($cached->release)) {
Chris@0 30 $now = new \DateTime();
Chris@0 31 $lastCheck = new \DateTime($cached->last_check);
Chris@0 32 if ($lastCheck >= $now->sub($this->getDateInterval())) {
Chris@0 33 return $cached->release;
Chris@0 34 }
Chris@0 35 }
Chris@0 36
Chris@0 37 // Fall back to fetching from GitHub
Chris@0 38 $release = parent::fetchLatestRelease();
Chris@0 39 if ($release && isset($release->tag_name)) {
Chris@0 40 $this->updateCache($release);
Chris@0 41 }
Chris@0 42
Chris@0 43 return $release;
Chris@0 44 }
Chris@0 45
Chris@0 46 private function getDateInterval()
Chris@0 47 {
Chris@0 48 switch ($this->interval) {
Chris@0 49 case Checker::DAILY:
Chris@0 50 return new \DateInterval('P1D');
Chris@0 51 case Checker::WEEKLY:
Chris@0 52 return new \DateInterval('P1W');
Chris@0 53 case Checker::MONTHLY:
Chris@0 54 return new \DateInterval('P1M');
Chris@0 55 }
Chris@0 56 }
Chris@0 57
Chris@0 58 private function updateCache($release)
Chris@0 59 {
Chris@0 60 $data = [
Chris@4 61 'last_check' => \date(DATE_ATOM),
Chris@0 62 'release' => $release,
Chris@0 63 ];
Chris@0 64
Chris@4 65 \file_put_contents($this->cacheFile, \json_encode($data));
Chris@0 66 }
Chris@0 67 }