home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / tools / changelog_gen.php next >
Encoding:
PHP Script  |  2008-07-02  |  3.3 KB  |  124 lines

  1. #!/usr/bin/php -q
  2. <?php
  3. /* vim: set noai expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
  4. /**
  5.  * Script to generate changelog file
  6.  *
  7.  * Relies on svn2cl
  8.  * Echo's on STDOUT
  9.  * 
  10.  * PHP version 5 
  11.  * 
  12.  * @category  System
  13.  * @package   System_Daemon
  14.  * @author    Kevin <kevin@vanzonneveld.net>
  15.  * @copyright 2008 Kevin van Zonneveld (http://kevin.vanzonneveld.net)
  16.  * @license   http://www.opensource.org/licenses/bsd-license.php New BSD Licence
  17.  * @version   SVN: Release: $Id$
  18.  * @link      http://trac.plutonia.nl/projects/system_daemon
  19.  */
  20.  
  21. $workspace_dir        = realpath(dirname(__FILE__)."/..");
  22. $cmd_reqs             = array();
  23. $cmd_reqs["svn2cl"]   = "subversion-tools";
  24. $map_authors          = array();
  25. $map_authors["kevin"] = "Kevin van Zonneveld <kevin@vanzonneveld.net>";
  26.  
  27. // check if commands are available
  28. foreach ($cmd_reqs as $cmd=>$package) {
  29.     exec("which ".$cmd, $o, $r);
  30.     if ($r) {
  31.         echo $cmd." is not available. ";
  32.         echo "Please first install the ".$package;            
  33.         die("\n");
  34.     }
  35. }
  36.  
  37. if (isset($argv[1]) && is_numeric($argv[1])) {
  38.     $rev = "--revision=HEAD:".$argv[1];
  39.     
  40. }
  41.  
  42. // collect data
  43. $cmd  = "";
  44. $cmd .= "svn2cl -i --stdout --group-by-day ".$rev." --linelen=90000 ".$workspace_dir;
  45. exec($cmd, $o, $r);
  46. if ($r) {
  47.     die("Executing: ".$cmd." failed miserably\n");
  48. }
  49.  
  50. // divide blocks
  51. $blocks    = array();
  52. $cur_block = false;
  53. foreach ($o as $i=>$line_raw) {
  54.     if (preg_match('/^(\d{4}-\d{2}-\d{2})(\s*)(.*)/', $line_raw, $match)) {        
  55.         // prepare new block
  56.         $date      = trim($match[1]);
  57.         $author    = trim($match[3]);
  58.         $author    = str_replace(array_keys($map_authors), 
  59.             array_values($map_authors), $author);        
  60.         $cur_block = $date . " ". $author;
  61.                 
  62.         // don't record the date header itsself
  63.         continue; 
  64.     }    
  65.     
  66.     $line = trim($line_raw);
  67.     
  68.     // don't record empty lines
  69.     if (!$line) continue;
  70.     if (!$cur_block) continue;
  71.     
  72.     // extract comment + revision
  73.     preg_match('/^[^\[]+(\[r\d+\])(.*)/', $line, $match);
  74.     $revision = trim($match[1]);
  75.     $comment  = trim($match[2]);
  76.     if (!$revision && $old_revision) {
  77.         // fallback to old revision
  78.         $revision = $old_revision;
  79.     }
  80.     if (!$comment) {
  81.         $comment = $line;
  82.     }
  83.     
  84.     // remove the file which the comment is about
  85.     $comment = preg_replace('/^([^:])+:(\s+)/', '', $comment);
  86.     $comment = trim($comment);
  87.     
  88.     // don't record empty lines
  89.     if (!$comment) continue;
  90.     
  91.     if (!substr($comment, 0, 7) == "http://") {
  92.         $comment = ucfirst($comment);
  93.     }
  94.     
  95.     // record what's left
  96.     $blocks[$cur_block][$comment][] = $revision;
  97.     
  98.     // nescesary for fallback in case newlines are used for commit comments
  99.     $old_revision = $revision;
  100. }
  101.  
  102. // simplify blocks
  103. foreach ($blocks as $date=>$block_arr) {
  104.     if (isset($blocks[$date]) && is_array($blocks[$date])) {
  105.         foreach ($blocks[$date] as $comm=>$revs) {
  106.             $blocks[$date][$comm] = reset($revs);
  107.         }
  108.     }
  109. }
  110.  
  111. // print blocks
  112. $cnt = 1;
  113. foreach ($blocks as $date=>$block_arr) {
  114.     if ($cnt != 1) {
  115.         echo "\n";
  116.     }
  117.     echo $date."\n\n";
  118.     foreach ($blocks[$date] as $comm=>$rev) {
  119.         echo "        ".$rev." ".$comm."\n";
  120.     }
  121.     $cnt++;
  122. }
  123. echo "\n";
  124. ?>