/** * Retrieve project commits from specified date and time. * * @param Project $project Project model * @param DateTime $dateFrom Date and time from get a commits. * * @return BaseCommit[] */ public function getProjectContributions(Project $project, DateTime $dateFrom) { $pageLimit = 10; $skip = 0; /* @var $repository BaseRepository */ $repository = $project->getRepositoryObject(); $currentDate = new DateTime(); do { /* @var $commits BaseCommit[] */ $commits = $repository->getHistory($pageLimit, $skip); foreach ($commits as $commit) { if ($commit->getDate()->getTimestamp() > $dateFrom->getTimestamp()) { /* @var $commit BaseCommit */ (yield $commit); } // if current timestamp less than commit timestamp $currentDate = $commit->getDate(); if ($currentDate->getTimestamp() <= $dateFrom->getTimestamp()) { break; } } $skip += count($commits); // reached last page, break if (count($commits) < $pageLimit) { break; } } while ($currentDate->getTimestamp() > $dateFrom->getTimestamp()); }
/** * Get commit model. * * Throws 404 if commit not found, or system error. * * @param Project $project Project model * @param string $commitId Commit identifier * * @return BaseCommit * * @throws NotFoundHttpException */ protected function findCommit(Project $project, $commitId) { try { return $project->getRepositoryObject()->getCommit($commitId); } catch (CommonException $ex) { throw new NotFoundHttpException(Yii::t('app', 'System error: {message}', ['message' => $ex->getMessage()]), $ex->getCode(), $ex); } }