/** * @test */ public function getCommitCountWithTypeDoesNotReturnWrongTopicCommitCount() { $commit = new \Mrimann\CoMo\Domain\Model\Commit(); $commit->setCommitLine('[BUGFIX] foo bar'); $this->fixture->addCommit($commit); $this->assertEquals(0, $this->fixture->getCommitCountByType('feature')); }
/** * Extracts the commits of a repository, that are not yet extracted and put into the database. * * @param \Mrimann\CoMo\Domain\Model\Repository $repository * @return mixed */ protected function extractCommits(\Mrimann\CoMo\Domain\Model\Repository $repository) { // Fetch all commits since the last run (or full log if nothing done yet) unset($output); $lastProcessedCommit = $repository->getLastProcessedCommit(); // use the --git-dir parameter for git log in case it's a local repository $gitDirectory = ''; if ($repository->isLocalRepository()) { $gitDirectory = '--git-dir ' . substr(substr($repository->getUrl(), 7), 0); } // check if there are commits at all (to avoid nasty CLI output in case we hit // an empty repository without any commits in it) $noCommitsYetOutput = array(); $noCommitsYetExitCode = 0; @exec('git ' . $gitDirectory . ' log -n 1 > /dev/null 2>&1', $noCommitsYetOutput, $noCommitsYetExitCode); if ($noCommitsYetExitCode > 0) { $this->outputLine('-> seen an empty repository without any commit at all, skipping!'); return ''; } $logRange = ''; if ($lastProcessedCommit != '') { $this->outputLine('-> there are commits already, extracting since ' . substr($lastProcessedCommit, 0, 8)); $logRange = $lastProcessedCommit . '..HEAD'; } else { // check if there's a limit of days to fetch the history from the git log if (isset($this->settings['maxDaysToFetchFromGitLogHistory']) && $this->settings['maxDaysToFetchFromGitLogHistory'] > 0) { $this->outputLine('-> Limit of max %d days to fetch is in effect, nothing older than that will be extracted', array($this->settings['maxDaysToFetchFromGitLogHistory'])); $oldestDate = new \DateTime('now -' . $this->settings['maxDaysToFetchFromGitLogHistory'] . ' days'); $logRange = '--since ' . $oldestDate->format('Y-m-d'); } } exec('git ' . $gitDirectory . ' log ' . $logRange . ' --reverse --pretty="%H__mrX__%ai__mrX__%aE__mrX__%aN__mrX__%cE__mrX__%cN__mrX__%s"', $output); // check if there are new commits at all if (count($output) == 0) { $this->outputLine('-> no commits found to extract'); return ''; } // Loop over the single commits and store their data in the database foreach ($output as $line) { $lineParts = explode('__mrX__', $line); $this->outputLine('-> extracting commit ' . substr($lineParts[0], 0, 8)); $commit = new \Mrimann\CoMo\Domain\Model\Commit(); $commit->setHash($lineParts[0]); $date = new \DateTime($lineParts[1]); $commit->setDate($date); $commit->setAuthorEmail($lineParts[2]); $commit->setAuthorName($lineParts[3]); $commit->setCommitterEmail($lineParts[4]); $commit->setCommitterName($lineParts[5]); $commit->setCommitLine($lineParts[6]); $commit->setRepository($repository); $this->commitRepository->add($commit); $lastHash = $lineParts[0]; } return $lastHash; }