Пример #1
0
 private static function get_pids()
 {
     $pids = array();
     $files = File::ls(work_path());
     foreach ($files as $file) {
         if ($file->ext() == '.pid') {
             $pids[] = intval($file->oname());
         }
     }
     return $pids;
 }
Пример #2
0
 public function create()
 {
     try {
         Subversion::cmd('import', array(OpenpearConfig::svn_skeleton(work_path('skeleton')), File::absolute(OpenpearConfig::svn_root(), $this->package()->name())), array('message' => sprintf('[New Package] %s (@%s)', $this->package()->name(), $this->maintainer()->name()), 'username' => OpenpearConfig::system_user('openpear')));
         // $message = new OpenpearMessage();
         // $message->subject('New Package is ready for your commit!');
         $this->delete();
         C($this)->commit();
     } catch (Exception $e) {
         Log::error($e->getMessage());
         $this->trial_count += 1;
         $this->save();
         C($this)->commit();
     }
 }
Пример #3
0
 public static function login(Request &$request)
 {
     Pea::begin_loose_syntax();
     require_once 'Auth/OpenID/Consumer.php';
     require_once 'Auth/OpenID/FileStore.php';
     require_once 'Auth/OpenID/SReg.php';
     require_once 'Auth/OpenID/PAPE.php';
     if ($request->in_vars('openid_url') != "" || $request->in_vars('openid_verify')) {
         Log::debug("begin openid auth: " . $request->in_vars('openid_url'));
         // OpenID Auth
         $consumer = new Auth_OpenID_Consumer(new Auth_OpenID_FileStore(work_path('openid')));
         if ($request->is_vars('openid_verify')) {
             $response = $consumer->complete($request->request_url());
             if ($response->status == Auth_OpenID_SUCCESS) {
                 return $response->getDisplayIdentifier();
             }
         } else {
             $auth_request = $consumer->begin($request->in_vars('openid_url'));
             if (!$auth_request) {
                 throw new RuntimeException('invalid openid url');
             }
             $sreg_request = Auth_OpenID_SRegRequest::build(array('nickname'), array('fullname', 'email'));
             if ($sreg_request) {
                 $auth_request->addExtension($sreg_request);
             }
             if ($auth_request->shouldSendRedirect()) {
                 $redirect_url = $auth_request->redirectURL(url(), $request->request_url(false) . '?openid_verify=true');
                 if (Auth_OpenID::isFailure($redirect_url)) {
                     throw new RuntimeException("Could not redirect to server: {$redirect_url->message}");
                 } else {
                     $request->redirect($redirect_url);
                 }
             } else {
                 $form_html = $auth_request->htmlMarkup(url(), $request->request_url(false) . '?openid_verify=true', false, array('id' => 'openid_message'));
                 if (Auth_OpenID::isFailure($form_html)) {
                     throw new RuntimeException("Could not redirect to server: {$form_html->message}");
                 } else {
                     echo $form_html;
                     exit;
                 }
             }
         }
     }
     Pea::end_loose_syntax();
     return null;
 }
Пример #4
0
 public function current_image()
 {
     $current = $this->get_current();
     $cache_key = 'api_image_' . $current . '.png';
     if (!file_exists(work_path('cache/' . $cache_key))) {
         $image = imagecreatefrompng(path('resources/media/images/ex_api.png'));
         $color = imagecolorallocate($image, 51, 51, 51);
         $tb = imagettfbbox(36, 0, def('image_api_font'), $this->get_current());
         imagettftext($image, 36, 0, ceil((160 - $tb[2]) / 2), 60, $color, def('image_api_font'), $this->get_current());
         imagepng($image, work_path('cache/' . $cache_key));
         imagedestroy($image);
     }
     $interval = 180;
     header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $interval) . ' GMT');
     header('Cache-Control: max-age=' . $interval);
     header('Pragma: cache');
     header('Content-Type: image/png');
     readfile(work_path('cache/' . $cache_key));
     exit;
 }
Пример #5
0
 /**
  * @see vendors/org/rhaco/storage/db/Dao/Dao#__after_save__()
  * @const string $svn_passwd_file リポジトリにアクセスするパスワード
  */
 protected function __after_save__($commit)
 {
     $template = new Template();
     $template->vars('maintainers', C(OpenpearMaintainer)->find_all());
     File::write(OpenpearConfig::svn_passwd_file(work_path('openpear.passwd')), $template->read('files/passwd.txt'));
     Store::delete(self::cache_key($this->id));
 }
Пример #6
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());
 }
Пример #7
0
 public static function remove_pid()
 {
     unlink(work_path(sprintf('%d.pid', self::$pid)));
 }
Пример #8
0
 /**
  * Subversion リポジトリの基本ディレクトリ構成を生成する
  */
 public static function __setup_generate_skeleton__(Request $req)
 {
     $base_dir = $req->in_vars('path', OpenpearConfig::svn_skeleton(work_path('skeleton')));
     File::mkdir($base_dir);
     File::mkdir(File::path($base_dir, 'doc'));
     File::mkdir(File::path($base_dir, 'doc/en'));
     File::mkdir(File::path($base_dir, 'doc/ja'));
     File::mkdir(File::path($base_dir, 'trunk'));
     File::mkdir(File::path($base_dir, 'tags'));
     File::mkdir(File::path($base_dir, 'branches'));
     File::write(File::path($base_dir, 'doc/ja/README'), text('
         * Documentation
         このパッケージにはまだドキュメントが存在しません
     '));
     File::write(File::path($base_dir, 'doc/en/README'), text('
         * Documentation
         This package does not have any documents.
     '));
 }
Пример #9
0
 /**
  * パッケージのビルドとリリースを行う
  * @return void
  **/
 public function build()
 {
     $package = C(OpenpearPackage)->find_get(Q::eq('id', $this->package_id));
     $maintainer = C(OpenpearMaintainer)->find_get(Q::eq('id', $this->maintainer_id));
     $this->init_build_dir(work_path('build/' . $package->name() . '.' . date('YmdHis')));
     foreach (array('desc.txt', 'notes.txt', 'summary.txt') as $filename) {
         File::write($this->build_dir($filename), $package->description());
     }
     if ($package->is_external_repository()) {
         switch ($package->external_repository_type()) {
             case 'Git':
                 $cmd = 'git clone';
                 break;
             case 'Mercurial':
                 $cmd = 'hg clone';
                 break;
             case 'Subversion':
                 $cmd = 'svn export';
                 break;
             default:
                 throw new RuntimeException('unknown repository type');
         }
         $command = new Command(sprintf('%s %s %s', $cmd, escapeshellarg($package->external_repository()), escapeshellarg($this->build_dir('tmp'))));
     } else {
         // Openpear Repository
         $revision = is_numeric($this->revision) && $this->revision > 0 ? intval($this->revision) : 'HEAD';
         $repository_path = sprintf('%s/%s/trunk', OpenpearConfig::svn_root(), $package->name());
         $command = new Command(sprintf('svn export -r %s %s %s', $revision, escapeshellarg($repository_path), escapeshellarg($this->build_dir('tmp'))));
     }
     if ($command->end_code()) {
         throw new RuntimeException($command->stderr());
     }
     $build_path = $this->build_dir(implode('/', array('tmp', $this->build_path)));
     if (!File::exist($build_path)) {
         throw new RuntimeException(sprintf('build path is not found: %s', $build_path));
     }
     $mv = new Command(sprintf('mv %s %s', escapeshellarg($build_path), escapeshellarg($this->build_dir('src'))));
     if ($mv->stderr() || !is_dir($this->build_dir('src'))) {
         throw new RuntimeException('src dir is not found');
     }
     // ビルドする
     chdir($this->build_dir());
     $project = PEAR_PackageProjector::singleton()->load($this->build_dir());
     $project->configure($this->build_dir('build.conf'));
     $project->make();
     // リリースしたファイルはどこ?
     chdir($this->build_dir('release'));
     foreach (glob('*.tgz') as $filename) {
         $package_file = $this->build_dir('release') . '/' . $filename;
         break;
     }
     if (!file_exists($package_file)) {
         throw new RuntimeException('package file is not exists: ' . $package_file);
     }
     // サーバーに追加する
     $cfg = (include path('channel.config.php'));
     $server = new PEAR_Server2($cfg);
     $server->addPackage($package_file);
     // svn tag
     $build_conf = parse_ini_string($this->build_conf, true);
     $svn = new Command(sprintf('svn copy' . ' %s/%s/trunk/%s' . ' %s/%s/tags/%s-%s-%s' . ' -m "%s (%s-%s) (@%s)"' . ' --username openpear', OpenpearConfig::svn_root(), $package->name(), $this->build_path, OpenpearConfig::svn_root(), $package->name(), $build_conf['version']['release_ver'], $build_conf['version']['release_stab'], date('YmdHis'), 'package released', $build_conf['version']['release_ver'], $build_conf['version']['release_stab'], $maintainer->name()));
     // これ以降はエラーが起きてもドンマイ
     try {
         $release = new OpenpearRelease();
         $release->package_id($package->id());
         $release->maintainer_id($maintainer->id());
         $release->version($build_conf['version']['release_ver']);
         $release->version_stab($build_conf['version']['release_stab']);
         $release->notes($this->notes);
         $release->settings($this->build_conf);
         $release->save();
         $package->latest_release_id($release->id());
         $package->released_at(time());
         $package->save();
         $message_template = new Template();
         $message_template->vars('t', new Templf());
         $message_template->vars('package', $package);
         $message_template->vars('maintainer', $maintainer);
         $message = new OpenpearMessage('type=system');
         $message->maintainer_to_id($maintainer->id());
         $message->subject(trans('{1} package have been released.', $package->name()));
         $message->description($message_template->read('messages/released.txt'));
         $message->save();
     } catch (Exception $e) {
         Log::error($e);
     }
 }
Пример #10
0
<?php

/**
 * 更新を監視してmxmlcする
 */
include_once dirname(__FILE__) . "/__settings__.php";
import("core.Command");
import("core.File");
import("core.Request");
$req = new Request();
$cmd = new Command();
$cmd->open(File::absolute(def("mxmlc@flex_bin"), "fcsh"), null, work_path("mxmlc_error"));
$src = new File(path("flex/src/" . $req->inVars("f", "index.mxml")));
$bin = path("flex/bin/" . $src->oname() . ".swf");
$lib = path("flex/lib/");
$rsl = path("flex/rsl/");
while (true) {
    $lib_last_update = $src_last_update = $rsl_last_update = $id = 0;
    $mxmlc = sprintf("mxmlc -output %s --file-specs %s ", $bin, $src);
    if ($lib_last_update < ($lib_update = File::last_update($lib, true))) {
        $lib_last_update = $lib_update;
        $files = array();
        foreach (File::ls($lib) as $f) {
            $files[] = $f->fullname();
        }
        $mxmlc .= "-library-path+=" . implode(",", $files) . " ";
    }
    if ($rsl_last_update < ($rsl_update = File::last_update($rsl, true))) {
        $rsl_last_update = $rsl;
        $files = array();
        foreach (File::ls($rsl) as $f) {