/** * ファイルアップロードからリリース * @param string $package_name パッケージ名 **/ public function package_release_by_upload($package_name) { $package = C(OpenpearPackage)->find_get(Q::eq('name', $package_name)); $package->permission($this->user()); if ($this->is_post() && $this->is_files('package_file') && $this->verify()) { try { $package_file = $this->in_files('package_file'); $package_file->generate(work_path('upload/' . $package_name . '-' . date('YmdHis') . '.tgz')); if ($package_xml = simplexml_load_file(sprintf('phar://%s/package.xml', $package_file->fullname()))) { if ($package_xml->name != $package->name()) { throw new OpenpearException(Gettext::trans('incorrect package name')); } if ($package_xml->channel != OpenpearConfig::pear_domain('openpear.org')) { $package_xml->channel = OpenpearConfig::pear_domain('openpear.org'); $pd = new PharData($package_file->fullname()); $pd->addFromString('package.xml', $package_xml->asXML()); unset($pd); } $upload_queue = new stdClass(); $upload_queue->package_id = $package->id(); $upload_queue->package_file = $package_file->fullname(); $upload_queue->maintainer_id = $this->user()->id(); $queue = new OpenpearQueue('type=upload_release'); $queue->data(serialize($upload_queue)); $queue->save(); $message = new OpenpearMessage('type=system_notice,mail=false'); $message->maintainer_to_id($this->user()->id()); $message->subject(trans('リリースキューに追加されました')); $message->description(trans('{1}のリリースを受け付けました。リリースの完了後,メールでお知らせします。', $package->name())); $message->save(); $this->redirect_by_map('dashboard'); } } catch (Exception $e) { Log::debug($e); Exceptions::add($e); } } $this->vars('package', $package); $this->vars('package_id', $package->id()); }
foreach (OpenpearQueue::fetch_queues('build') as $queue) { try { $queue->start(300); $release_queue = $queue->fm_data(); if ($release_queue instanceof OpenpearReleaseQueue === false) { throw new RuntimeException('queue data is broken'); } $release_queue->build(); $queue->delete(); } catch (Exception $e) { echo $e->getMessage(); Log::error($e); C($queue)->rollback(); } } foreach (OpenpearQueue::fetch_queues('upload_release') as $queue) { try { $queue->start(300); $upload_queue = $queue->fm_data(); if (is_object($upload_queue) == false) { throw new RuntimeException('queue data is broken'); } $maintainer = C(OpenpearMaintainer)->find_get(Q::eq('id', $upload_queue->maintainer_id)); $package = C(OpenpearPackage)->find_get(Q::eq('id', $upload_queue->package_id)); $package_file = $upload_queue->package_file; if (!file_exists($package_file)) { throw new RuntimeException('package_file is not found'); } if (!Tag::setof($xml, file_get_contents(sprintf('phar://%s/package.xml', $package_file)), 'package')) { throw new RuntimeException('package.xml is unreadable'); }