예제 #1
0
 public function getItem(Xinc_Project $project)
 {
     //$this->_extensions = $this->_widget->getExtensions();
     $numberOfGraphs = 3;
     $graphHeight = 250;
     $statisticsMenu = new Xinc_Plugin_Repos_Gui_Menu_Extension_Item('statistics-' . $project->getName(), 'Statistics - ' . $project->getName(), './statistics/?project=' . $project->getName(), 'Statistics', '', true, false);
     return $statisticsMenu;
 }
예제 #2
0
 public function testSetters()
 {
     $project = new Xinc_Project();
     $name = 'test ' . rand(21213, 123213);
     $project->setName($name);
     $this->assertEquals($name, $project->getName(), 'Names should match');
     $status = Xinc_Project_Status::MISCONFIGURED;
     $project->setStatus($status);
     $this->assertEquals($status, $project->getStatus(), 'Stati should match');
 }
예제 #3
0
 /**
  * Constructor, generates an Exception Message
  *
  * @param Xinc_Project $project
  * @param integer      $buildTime
  */
 public function __construct(Xinc_Project $project, $buildTime)
 {
     parent::__construct('Build of "' . $project->getName() . '" ' . ' with timestamp: ' . $buildTime . ' could not be serialized.');
 }
예제 #4
0
 public function generateStatisticsMenu(Xinc_Project $project)
 {
     $numberOfGraphs = count($this->extensions['STATISTIC_GRAPH']);
     $graphHeight = 350;
     $statisticsMenu = new Xinc_Plugin_Repos_Gui_Menu_Extension_Item('statistics-' . $project->getName(), 'Statistics', './statistics/?project=' . $project->getName(), 'Statistics - ' . $project->getName(), '', true, false);
     return $statisticsMenu;
 }
예제 #5
0
 /**
  * deletes a build from the history
  *
  * @param string $projectName
  * @param mixed $timestamp Either the integer unix timestamp 
  *             or timeformat: "YYYY-MM-DD HH:MI:SS-TZ"
  */
 public static function deleteBuild($projectName, $timestamp)
 {
     Xinc_Logger::getInstance()->setLogLevel(0);
     $project = new Xinc_Project();
     $project->setName($projectName);
     $metaFileArr = self::_loadMetaData($project->getName());
     $testTimestamp = (int) $timestamp;
     if ($testTimestamp . "" != $timestamp) {
         /**
          * try and see if we have a string
          * in format: YYYY-MM-DD HH:MI:SS-TIMEZONE
          */
         $timeParts = split('-', $timestamp);
         $timeYear = $timeParts[0];
         $timeMonth = $timeParts[1];
         list($timeDay, $timeTime) = split(' ', $timeParts[2]);
         $timeZone = $timeParts[3];
         $timestamp = strtotime("{$timeYear}-{$timeMonth}-{$timeDay} {$timeTime} {$timeZone}");
     }
     if (!isset($metaFileArr['meta'])) {
         self::_migrate($project->getName(), $metaFileArr);
         $metaFileArr = self::_loadMetaData($project->getName());
     }
     $writeMetaFile = false;
     foreach ($metaFileArr['parts'] as $idx => $part) {
         if ($part['from'] <= $timestamp && $part['to'] >= $timestamp) {
             /**
              * this is the meta file we need
              */
             $partNo = $part['no'];
             $partArr = self::_readPartFile($project->getName(), $partNo);
             $newArr = array();
             $found = false;
             $deleteDir = null;
             $beforeTimestamp = null;
             $afterTimestamp = null;
             $lastTimeStamp = null;
             foreach ($partArr as $compareTimestamp => $serialFileName) {
                 if ($compareTimestamp == $timestamp) {
                     /**
                      * we delete by not adding it again
                      */
                     $found = true;
                     $deleteDir = dirname($serialFileName);
                     $beforeTimestamp = $lastTimeStamp;
                     $metaFileArr['parts'][$idx]['count'] = $metaFileArr['parts'][$idx]['count'] - 1;
                     $writeMetaFile = true;
                 } else {
                     if ($found && $afterTimestamp == null) {
                         $afterTimestamp = $compareTimestamp;
                     }
                     $newArr[$compareTimestamp] = $serialFileName;
                 }
                 $lastTimeStamp = $compareTimestamp;
             }
             //var_dump($deleteDir);
             //die;
             if ($found) {
                 try {
                     /**
                      * if this is the only build, we need to delete the part from meta
                      */
                     if ($timestamp == $part['from'] && $timestamp == $part['to']) {
                         unset($metaFileArr['lastSuccessfulBuild']);
                         unset($metaFileArr['parts'][$idx]);
                         $writeMetaFile = true;
                     } else {
                         if ($timestamp == $part['from']) {
                             if (isset($afterTimestamp)) {
                                 $metaFileArr['parts'][$idx]['from'] = $afterTimestamp;
                                 $writeMetaFile = true;
                             }
                         } else {
                             if ($timestamp == $part['to']) {
                                 if (isset($beforeTimestamp)) {
                                     $metaFileArr['parts'][$idx]['to'] = $beforeTimestamp;
                                     $writeMetaFile = true;
                                 }
                             }
                         }
                     }
                     if ($timestamp == $metaFileArr['lastSuccessfulBuild']['buildtime']) {
                         /**
                          * we need to find the last successful build, before this build
                          */
                         $reverseMetaArr = array_reverse($metaFileArr['parts'], true);
                         foreach ($metaFileArr['parts'] as $idx => $part) {
                             if ($part['no'] == $partNo) {
                                 $testPartArr = $newArr;
                             } else {
                                 $testPartArr = self::_readPartFile($project->getName(), $partNo);
                             }
                             $testPartArr = array_reverse($testPartArr, true);
                             foreach ($testPartArr as $testCompareTimestamp => $testSerialFileName) {
                                 if (file_exists($testSerialFileName)) {
                                     try {
                                         $testPart = Xinc_Build::unserialize($project, $testCompareTimestamp, self::_getStatusDir());
                                     } catch (Exception $e) {
                                         //var_dump($e);
                                     }
                                     if ($testPart->getStatus() == Xinc_Build_Interface::PASSED) {
                                         $metaFileArr['lastSuccessfulBuild']['buildtime'] = $testCompareTimestamp;
                                         $metaFileArr['lastSuccessfulBuild']['filename'] = $testSerialFileName;
                                         $writeMetaFile = true;
                                         break;
                                     }
                                 }
                             }
                         }
                         //die;
                     }
                     self::_writePartFile($project->getName(), $partNo, $newArr);
                     Xinc_Logger::getInstance()->info('Successfully written modified metadata');
                     if ($writeMetaFile) {
                         self::_writeMetaData($projectName, $metaFileArr);
                         Xinc_Logger::getInstance()->info('Successfully written modified meta superdata');
                     }
                     $deleteDir = realpath($deleteDir);
                     $statusDir = self::_getStatusDir();
                     $statusDir = realpath($statusDir);
                     /**
                      * make sure we are only deleting inside the status dir
                      */
                     if (substr($deleteDir, 0, strlen($statusDir)) == $statusDir && strlen($deleteDir) > strlen($statusDir)) {
                         exec('rm -Rf ' . $deleteDir, $output, $res);
                     } else {
                         $res = -1;
                     }
                     //$res = 1;
                     if ($res != 0) {
                         Xinc_Logger::getInstance()->error('Could not delete build directory: ' . $deleteDir);
                         return false;
                     } else {
                         Xinc_Logger::getInstance()->info('Successfully deleted build directory: ' . $deleteDir);
                         return true;
                     }
                 } catch (Exception $e) {
                     Xinc_Logger::getInstance()->error('Could not write modified metadata');
                 }
                 break;
             }
             return false;
         }
     }
 }
예제 #6
0
 /**
  * Constructor, generates an Exception Message
  *
  * @param Xinc_Project $project
  * @param integer      $buildTime
  */
 public function __construct(Xinc_Project $project, $buildTime)
 {
     parent::__construct('Build  "' . $project->getName() . '" ' . 'with timestamp ' . $buildTime . ' was not found.');
 }