Example #1
0
 protected function __after_save__($commit)
 {
     $maintainers = C(OpenpearMaintainer)->find_all();
     $packages = C(OpenpearPackage)->find_all();
     $template = new Template();
     $template->vars('maintainers', $maintainers);
     $template->vars('packages', $packages);
     File::write(OpenpearConfig::svn_access_file(), $template->read('files/access.txt'));
 }
 /**
  * 既存のDBからモデルファイルを自動生成する
  **/
 public static function __setup_generate_model__(Request $request, $value)
 {
     if (!$request->is_vars('tables')) {
         throw new RuntimeException('tables required');
     }
     $model_path = $request->is_vars('model_path') ? $request->in_vars('model_path') : path('libs/model');
     $tables = $request->in_vars('tables');
     $tables = strpos(',', $tables) === false ? array($tables) : explode(',', $tables);
     foreach ($tables as $table) {
         $dao = Dao::instant($table, $value);
         $props = $dao->get_columns();
         $properties = array();
         foreach ($props as $prop_name) {
             $property = new ModelProperty();
             $property->name($prop_name);
             foreach (self::$anons as $a) {
                 $anon = $dao->a($prop_name, $a);
                 if (isset(self::$defaults[$prop_name]) && self::$defaults[$prop_name] == $anon) {
                     continue;
                 }
                 if (!is_null($anon)) {
                     $property->annotation($a, $anon);
                 }
             }
             $properties[] = $property;
         }
         $class_name = preg_replace('/_(.)/e', 'ucfirst("\\1")', ucfirst(strtolower($table)));
         $template = new Template();
         $template->vars('properties', $properties);
         $template->vars('class_name', $class_name);
         $filename = File::path($model_path, $class_name . '.php');
         $src = "<?php\n" . $template->read(module_templates('model.php'));
         File::write($filename, $src);
         // unset
         $dao = $template = $properties = $property = null;
         unset($dao);
         unset($template);
         unset($properties);
         unset($property);
     }
 }
Example #3
0
 /**
  * 作成後処理
  * - Subversion アカウントの作成
  * - メールの送信
  */
 protected function __after_create__($commit)
 {
     $registered_message = new Template();
     $registered_message->vars('maintainer', $this);
     $message = new OpenpearMessage();
     $message->maintainer_to_id($this->id());
     $message->subject('Welcome to Openpear!');
     $message->description($registered_message->read('messages/registered.txt'));
     $message->type('system');
     $message->save();
     $message = new OpenpearMessage();
     $message->maintainer_to_id($this->id());
     $message->subject('Please join Openpear Group');
     $message->description('Do you already join the Openpear Group? [http://groups.google.com/group/openpear:title=Openpear Group]');
     $message->type('system_notice');
     $message->mail(false);
     $message->save();
 }
Example #4
0
 protected function __after_create__($commit)
 {
     if (!$this->is_external_repository()) {
         $queue = new OpenpearNewprojectQueue();
         $queue->package_id($this->id());
         $queue->maintainer_id($this->author_id());
         $queue->save();
     }
     $created_message = new Template();
     $created_message->vars('package', $this);
     $message = new OpenpearPackageMessage();
     $message->package_id($this->id());
     $message->description($created_message->read('messages/created.txt'));
     $message->save();
     $timeline = new OpenpearTimeline();
     $timeline->subject(sprintf('<a href="%s">%s</a> <span class="hl">created</span> a new package: <a href="%s">%s</a>', url('maintainer/' . $this->author()->name()), $this->author()->name(), url('package/' . $this->name()), $this->name()));
     $timeline->description(htmlspecialchars($this->description()));
     $timeline->type('package_setting');
     $timeline->package_id($this->id());
     $timeline->maintainer_id($this->author_id());
     $timeline->save();
 }
Example #5
0
        $server->addPackage($package_file);
        // これ以降はエラーが起きてもドンマイ
        try {
            $release = new OpenpearRelease();
            $release->package_id($package->id());
            $release->maintainer_id($maintainer->id());
            $release->version($version);
            $release->version_stab($stab);
            $release->notes($xml->f('notes.value()'));
            $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);
        }
        $queue->delete();
    } catch (Exception $e) {
        Log::error($e);
        C($queue)->rollback();
    }
}
Example #6
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);
     }
 }