X-Git-Url: https://git.cweiske.de/phorkie.git/blobdiff_plain/1c14a6bfb93c914374a6b2f96aec971f8c5b3053..ade89bd51686796f30dc26b0f5c65eb9b6f66f21:/src/phorkie/Repositories.php diff --git a/src/phorkie/Repositories.php b/src/phorkie/Repositories.php index dc3387b..ab97c56 100644 --- a/src/phorkie/Repositories.php +++ b/src/phorkie/Repositories.php @@ -16,7 +16,12 @@ class Repositories { chdir($this->gitDir); $dirs = glob('*.git', GLOB_ONLYDIR); - array_walk($dirs, function ($dir) { return substr($dir, 0, -4); }); + array_walk( + $dirs, + function ($dir) { + return substr($dir, 0, -4); + } + ); sort($dirs, SORT_NUMERIC); $n = end($dirs) + 1; @@ -35,25 +40,44 @@ class Repositories /** * Get a list of repository objects * - * @param integer $page Page number, beginning with 0 + * @param integer $page Page number, beginning with 0, or "last" * @param integer $perPage Number of repositories per page * - * @return array Array of Repositories + * @return array Array of Repositories first, number of repositories second */ public function getList($page = 0, $perPage = 10) { chdir($this->gitDir); $dirs = glob('*.git', GLOB_ONLYDIR); sort($dirs, SORT_NUMERIC); + if ($page === 'last') { + //always show the last 10 + $page = intval(count($dirs) / $perPage); + $start = count($dirs) - $perPage; + if ($start < 0) { + $start = 0; + } + $some = array_slice($dirs, $start, $perPage); + } else { + $some = array_slice($dirs, $page * $perPage, $perPage); + } - $some = array_slice($dirs, $page * $perPage, $perPage); $repos = array(); foreach ($some as $oneDir) { $r = new Repository(); - $r->loadById(substr($oneDir, 0, -4)); + try { + $r->loadById(substr($oneDir, 0, -4)); + } catch (\VersionControl_Git_Exception $e) { + if (strpos($e->getMessage(), 'does not have any commits') !== false) { + //the git repo is broken as the initial commit + // has not been finished + continue; + } + throw $e; + } $repos[] = $r; } - return $repos; + return array($repos, count($dirs), $page); } }