Пример #1
0
 /**
  * ファイルアップロードからリリース
  * @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());
 }
Пример #2
0
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');
        }