123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- <?php
- /**
- * This script pre-generates a list of commits to generate a changelog in the
- * form (branch, then commits in HTML form, then a final feedback):
- *
- * @example
- * 1.9.x
- * <li>(<a href="https://github.com/chamilo/chamilo-lms/commit/7333997ce358870bac139d15816dcaa7dd7794fa">7333997c</a> - <a href="https://task.beeznest.com/issues/8680">BT#8680</a>) Fixing custom lost password to work as classic Chamilo</li>
- * ...
- * <li>(<a href="https://github.com/chamilo/chamilo-lms/commit/acdc14c47997315b151efda9a530c47a53100d68">acdc14c4</a> - <a href="https://task.beeznest.com/issues/8676">BT#8676</a>) Adding unique email validation option</li>
- * Printed 367 commits of 500 requested (others were minor)
- *
- * @author Yannick Warnier <yannick.warnier@beeznest.com>
- */
- /**
- * Includes a modified version of Git lib by Sebastian Bergmann of PHPUnit
- * @usage php gitlog.php [-t|some-commit|-max20171001]
- * @see https://github.com/ywarnier/git
- */
- require 'php-git/src/Git.php';
- $repository = __DIR__.'/../..';
- $number = 2000; //the number of commits to check (including minor)
- $formatHTML = true;
- $showDate = false;
- $endCommit = false;
- $isMaxDate = false;
- if (!empty($argv[1])) {
- if ($argv[1] == '-t') {
- $showDate = true;
- } else if (substr($argv[1], 0, 4) == '-max') {
- $isMaxDate = true;
- $tempDate = substr($argv[1], 4);
- $y = substr($tempDate, 0, 4);
- $m = substr($tempDate, 4, 2);
- $d = substr($tempDate, 6, 2);
- $maxDate = new DateTime($y.'-'.$m.'-'.$d);
- } else {
- $endCommit = $argv[1];
- echo "An initial commit has been defined as ".$endCommit.PHP_EOL;
- }
- }
- $git = new \YWarnier\PHPGit\Git($repository);
- echo "Log from branch: ".$git->getCurrentBranch().PHP_EOL;
- $logs = $git->getRevisions('DESC', $number);
- $i = 0;
- foreach ($logs as $log) {
- $commitDate = $log['date']->format('Y-m-d');
- if ($showDate) {
- echo $commitDate.' '.substr($log['sha1'],0,8).PHP_EOL;
- }
- if ($isMaxDate) {
- // if the commit date is older than the max date, just forget about it
- if ($log['date'] < $maxDate) {
- continue;
- }
- }
- // Check for Minor importance messages to ignore...
- if (strncasecmp($log['message'], 'Minor', 5) === 0) {
- //Skip minor messages
- continue;
- }
- //Skip language update messages (not important)
- $langMsg = array(
- 'Update language terms',
- 'Update language vars',
- 'Update lang vars',
- 'Merge',
- 'merge',
- 'Scrutinizer Auto-Fixes',
- 'Update changelog',
- 'Fix PHP Warning'
- );
- foreach ($langMsg as $msg) {
- if (strpos($log['message'], $msg) === 0) {
- continue 2;
- }
- }
- // Look for tasks references
- $issueLink = '';
- $matches = array();
- if (preg_match_all('/((BT)?#(\d){2,5})/', $log['message'], $matches)) {
- $issue = $matches[0][0];
- if (substr($issue, 0, 1) == '#') {
- // not a BeezNest task
- $num = substr($issue, 1);
- if ($num > 4000) {
- //should be Chamilo support site
- if ($formatHTML) {
- $issueLink = ' - <a href="https://support.chamilo.org/issues/' . $num . '">CT#' . $num . '</a>';
- } else {
- $issueLink = ' - ' . $num;
- }
- } else {
- //should be Github
- if ($formatHTML) {
- $issueLink = ' - <a href="https://github.com/chamilo/chamilo-lms/issues/' . $num . '">GH#' . $num . '</a>';
- } else {
- $issueLink = ' - ' . $num;
- }
- }
- } else {
- $num = substr($issue, 3);
- if ($num != '7683') {
- if ($formatHTML) {
- //7683 is an internal task at BeezNest for all general contributions to Chamilo - no use in adding this reference
- $issueLink = ' - <a href="https://task.beeznest.com/issues/' . $num . '">BT#' . $num . '</a>';
- } else {
- $issueLink = ' - ' . $num;
- }
- }
- }
- if ($hasRefs = stripos($log['message'], ' see '.$issue)) {
- $log['message'] = substr($log['message'], 0, $hasRefs);
- }
- if ($hasRefs = stripos($log['message'], ' - ref')) {
- $log['message'] = substr($log['message'], 0, $hasRefs);
- }
- if ($hasRefs = stripos($log['message'], ' -refs ')) {
- $log['message'] = substr($log['message'], 0, $hasRefs);
- }
- }
- $commitLink = '';
- if ($formatHTML) {
- $log['message'] = ucfirst($log['message']);
- $commitLink = '<a href="https://github.com/chamilo/chamilo-lms/commit/' . $log['sha1'] . '">' .
- substr($log['sha1'], 0, 8) . '</a>';
- echo '<li>['.$commitDate.'] ('.$commitLink.$issueLink.') '.$log['message'].'</li>'.PHP_EOL;
- } else {
- $commitLink = substr($log['sha1'], 0, 8);
- echo '('.$commitLink.$issueLink.') '.$log['message'].''.PHP_EOL;
- }
- // check end commit to stop processing
- if ($endCommit) {
- $length = strlen($endCommit);
- if (substr($log['sha1'], 0, $length) == $endCommit) {
- echo "Found the end commit ".$endCommit.", exiting...".PHP_EOL;
- break;
- }
- }
- $i++;
- }
- echo "Printed $i commits of $number requested (others were minor)".PHP_EOL;
|