Ejemplo n.º 1
0
 public function publish(Xinc_Build_Interface $build)
 {
     /**
      * We only process on success. 
      * Failed builds are not processed by this publisher
      */
     if ($build->getStatus() != Xinc_Build_Interface::PASSED) {
         return;
     }
     /**
      * Only if we recovered from a previous failed build cycle
      */
     $build->info('Last Build status: ' . $build->getLastBuild()->getStatus());
     if ($build->getLastBuild()->getStatus() !== 0) {
         return;
     }
     $published = false;
     $build->info('Publishing with OnRecovery Publishers');
     foreach ($this->arSubtasks as $task) {
         $published = true;
         $build->info('Publishing with OnRecovery Publisher: ' . get_class($task));
         $task->publish($build);
         if ($build->getStatus() != Xinc_Build_Interface::PASSED) {
             $build->error('Error while publishing on Recovery. OnRecovery-Publish-Process stopped');
             break;
         }
     }
     if (!$published) {
         $build->info('No Publishers registered for OnRecovery');
     }
 }
Ejemplo n.º 2
0
 public function process(Xinc_Build_Interface $build)
 {
     $build->info('Processing publishers');
     foreach ($this->arSubtasks as $task) {
         $task->publish($build);
     }
     $build->info('Processing publishers done');
     //$project->setStatus(Xinc_Project_Build_Status_Interface::STOPPED);
 }
Ejemplo n.º 3
0
 public function publish(Xinc_Build_Interface $build)
 {
     /**
      * We only process on failure. 
      * Successful builds are not processed by this publisher
      */
     if ($build->getStatus() != Xinc_Build_Interface::FAILED) {
         return;
     }
     $published = false;
     $build->info('Publishing with OnFailure Publishers');
     foreach ($this->arSubtasks as $task) {
         $published = true;
         $build->info('Publishing with OnFailure Publisher: ' . get_class($task));
         $task->publish($build);
     }
     if (!$published) {
         $build->info('No Publishers registered OnFailure');
     }
 }
Ejemplo n.º 4
0
 public function process(Xinc_Build_Interface $build)
 {
     $build->info('Processing builders');
     foreach ($this->arSubtasks as $task) {
         $task->process($build);
         if ($build->getStatus() != Xinc_Build_Interface::PASSED) {
             $build->error('Build FAILED ');
             return;
         }
     }
     $build->info('Processing builders done');
     //$project->setStatus(Xinc_Build_Interface::STOPPED);
 }
Ejemplo n.º 5
0
 public function publish(Xinc_Build_Interface $build)
 {
     /**
      * We only process on success. 
      * Failed builds are not processed by this publisher
      */
     if ($build->getStatus() != Xinc_Build_Interface::PASSED) {
         return;
     }
     $published = false;
     $build->info('Publishing with OnSuccess Publishers');
     foreach ($this->arSubtasks as $task) {
         $published = true;
         $build->info('Publishing with OnSuccess Publisher: ' . get_class($task));
         $task->publish($build);
         if ($build->getStatus() != Xinc_Build_Interface::PASSED) {
             $build->error('Error while publishing on Success. OnSuccess-Publish-Process stopped');
             break;
         }
     }
     if (!$published) {
         $build->info('No Publishers registered OnSuccess');
     }
 }
Ejemplo n.º 6
0
 public function process(Xinc_Build_Interface $build)
 {
     if ($this->_if !== null) {
         /**
          * If we have a condition, we need to check
          */
         $property = $build->getProperties()->get($this->_if);
         if ($property !== true) {
             $build->info('Property: ' . $this->_name . ' does not apply, ' . $this->_if . ' == false');
             $build->setStatus(Xinc_Build_Interface::PASSED);
             return;
         }
     }
     if (isset($this->_file)) {
         if (file_exists($this->_file)) {
             $build->info('Reading property file: ' . $this->_file);
             $this->plugin->parsePropertyFile($build, $this->_file);
         } else {
             if (strstr($this->_file, '${')) {
                 // not substituted yet, will not use it
             } else {
                 $build->error('Cannot read property file: ' . $this->_file);
             }
         }
     } else {
         $build->debug('Setting property "${' . $this->_name . '}" to "' . $this->_value . '"');
         $build->getProperties()->set($this->_name, $this->_value);
         $build->setStatus(Xinc_Build_Interface::PASSED);
     }
 }
Ejemplo n.º 7
0
 public function checkModified(Xinc_Build_Interface $build, $dir, $prefix, $switch = false, $svnFolderProperty = null)
 {
     $modResult = new Xinc_Plugin_Repos_ModificationSet_Result();
     if (!file_exists($dir)) {
         $build->error('Subversion checkout directory not present');
         $modResult->setStatus(Xinc_Plugin_Repos_ModificationSet_AbstractTask::ERROR);
         return $modResult;
     }
     $cwd = getcwd();
     chdir($dir);
     $output = '';
     $result = 9;
     exec($this->_svnPath . ' info', $output, $result);
     $found = false;
     if ($result == 0) {
         $localSet = implode("\n", $output);
         $localRev = $this->getRevision($localSet);
         $remoteRev = 0;
         $url = $this->getRootURL();
         $output = '';
         $result = 9;
         exec($this->_svnPath . ' ls --xml ' . $url . '/' . $this->_getSvnSubDir(), $output, $result);
         $remoteSet = implode("\n", $output);
         if ($result != 0) {
             $build->setStatus(Xinc_Build_Interface::FAILED);
             $build->error('Problem with remote Subversion repository');
             $modResult->setStatus(Xinc_Plugin_Repos_ModificationSet_AbstractTask::ERROR);
             return $modResult;
         }
         $xml = new SimplexmlElement($remoteSet);
         foreach ($xml->list as $i => $list) {
             foreach ($list->entry as $entry) {
                 if (substr($entry->name, 0, strlen($prefix)) != $prefix && !preg_match('/' . $prefix . '/', $entry->name)) {
                     continue;
                 }
                 $attributes = $entry->attributes();
                 if (strtolower((string) $attributes['kind']) != 'dir') {
                     continue;
                 }
                 $attributes = $entry->commit->attributes();
                 $rev = (int) $attributes->revision;
                 if ($rev > $localRev) {
                     $tagName = (string) $entry->name;
                     if ($svnFolderProperty != null) {
                         $build->getProperties()->set($svnFolderProperty, $tagName);
                     }
                     // switch to the latest release
                     if ($switch) {
                         exec($this->_svnPath . ' switch ' . $url . '/' . $this->_getSvnSubDir() . '/' . $tagName, $switchOut, $switchRes);
                         if ($switchRes != 0) {
                             $build->error('Could not switch to tag :' . $tagName . ', result:' . implode("\n", $switchOut));
                             $build->setStatus(Xinc_Build_Interface::FAILED);
                             $modResult->setStatus(Xinc_Plugin_Repos_ModificationSet_AbstractTask::FAILED);
                             return $modResult;
                         }
                     }
                     $remoteRev = $rev;
                     $found = true;
                 }
             }
         }
         if ($remoteRev <= 0) {
             $build->info('Subversion checkout dir is ' . $dir . ' ' . 'local revision @ ' . $localRev . ' ' . 'No remote revision with matching tag prefix (' . $prefix . ')');
         } else {
             $build->info('Subversion checkout dir is ' . $dir . ' ' . 'local revision @ ' . $localRev . ' ' . 'Last remote revision with matching tag prefix @ ' . $remoteRev . ' (' . $prefix . ')');
         }
         chdir($cwd);
         $modResult->setLocalRevision($localRev);
         $modResult->setRemoteRevision($remoteRev);
         if ($modResult->isChanged()) {
             $modResult->setStatus(Xinc_Plugin_Repos_ModificationSet_AbstractTask::CHANGED);
         }
         return $modResult;
     } else {
         chdir($cwd);
         throw new Xinc_Exception_ModificationSet('Subversion checkout directory ' . 'is not a working copy.');
     }
 }
Ejemplo n.º 8
0
 /**
  * The parent builder task will call this method
  *
  * @param Xinc_Build_Interface $build
  *
  * @return boolean
  */
 public function build(Xinc_Build_Interface $build)
 {
     if ($this->_if !== null) {
         $build->info('Checking condidition property: ' . $this->_if);
         $ifProp = $build->getProperties()->get($this->_if);
         if ($ifProp === true) {
             $build->info('--' . $this->_if . ' == true --> building');
             return $this->plugin->build($build, $this->_buildFile, $this->_target, $this->_params, $this->_workingDir);
         } else {
             $build->info('--' . $this->_if . ' == false --> not building');
             return true;
         }
     } else {
         return $this->plugin->build($build, $this->_buildFile, $this->_target, $this->_params, $this->_workingDir);
     }
 }