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); } }
/** * 作成後処理 * - 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(); }
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(); }
$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(); } }
/** * パッケージのビルドとリリースを行う * @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); } }