/** * Verify and fill number revision from jenkins server * for JenkinsRun which doesn't have revision number * * @static * * @param Jenkins $jenkins * @param int $userId * @param Criteria|null $criteria * * @return void */ public static function fillEmptyJobBuildNumber(Jenkins $jenkins, $userId, Criteria $criteria = null) { if (null === $criteria) { $criteria = new Criteria(); } $criteria->addJoin(JenkinsRunPeer::JENKINS_GROUP_RUN_ID, JenkinsGroupRunPeer::ID, Criteria::JOIN); $criteria->add(JenkinsRunPeer::JOB_BUILD_NUMBER, null, Criteria::ISNULL); $criteria->add(JenkinsRunPeer::LAUNCHED, 1, Criteria::EQUAL); $criteria->add(JenkinsGroupRunPeer::SF_GUARD_USER_ID, $userId, Criteria::EQUAL); $emptyRunsByJobName = array(); foreach (JenkinsRunPeer::doSelect($criteria) as $run) { /** @var JenkinsRun $run */ if ($run->isInJenkinsQueue($jenkins)) { continue; } $emptyRunsByJobName[$run->getJobName()][$run->getId()] = $run; } foreach ($emptyRunsByJobName as $jobName => $runs) { /** @var Jenkins_Job $jenkinsJob */ $jenkinsJob = $jenkins->getJob($jobName); foreach ($runs as $run) { /** @var JenkinsRun $run */ /** @var Jenkins_Build $build */ foreach ($jenkinsJob->getBuilds() as $build) { if ($run->isRelatedToJenkinsBuild($build)) { $run->setJobBuildNumber($build->getNumber()); $run->save(); break; } } } } }