Files
portal-legacy/lib/symfony/vendor/pake/pakeFunction.php
Chris Sewell cf140a2e97 initial commit
2012-11-28 03:55:08 -05:00

430 lines
9.7 KiB
PHP
Executable File

<?php
/**
* @package pake
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
* @copyright 2004-2005 Fabien Potencier <fabien.potencier@symfony-project.com>
* @license see the LICENSE file included in the distribution
* @version SVN: $Id: pakeFunction.php 3263 2007-01-13 14:20:52Z fabien $
*/
require_once dirname(__FILE__).'/pakeException.class.php';
require_once dirname(__FILE__).'/pakeYaml.class.php';
require_once dirname(__FILE__).'/pakeGetopt.class.php';
require_once dirname(__FILE__).'/pakeFinder.class.php';
require_once dirname(__FILE__).'/pakeTask.class.php';
require_once dirname(__FILE__).'/pakeFileTask.class.php';
require_once dirname(__FILE__).'/pakeColor.class.php';
require_once dirname(__FILE__).'/pakeApp.class.php';
function pake_import($name, $import_default_tasks = true)
{
$class_name = 'pake'.ucfirst(strtolower($name)).'Task';
if (!class_exists($class_name))
{
// plugin available?
$plugin_path = '';
foreach (pakeApp::get_plugin_dirs() as $dir)
{
if (file_exists($dir.DIRECTORY_SEPARATOR.$class_name.'.class.php'))
{
$plugin_path = $dir.DIRECTORY_SEPARATOR.$class_name.'.class.php';
break;
}
}
if ($plugin_path)
{
require_once $plugin_path;
}
else
{
throw new pakeException(sprintf('Plugin "%s" does not exist.', $name));
}
}
if ($import_default_tasks && is_callable($class_name, 'import_default_tasks'))
{
call_user_func(array($class_name, 'import_default_tasks'));
}
}
function pake_task($name)
{
$args = func_get_args();
array_shift($args);
pakeTask::define_task($name, $args);
return $name;
}
function pake_alias($alias, $name)
{
pakeTask::define_alias($alias, $name);
return $alias;
}
function pake_desc($comment)
{
pakeTask::define_comment($comment);
}
function pake_properties($property_file)
{
$file = $property_file;
if (!pakeFinder::isPathAbsolute($file))
{
$file = getcwd().DIRECTORY_SEPARATOR.$property_file;
}
if (file_exists($file))
{
pakeApp::get_instance()->set_properties(parse_ini_file($file, true));
}
else
{
throw new pakeException('Properties file does not exist.');
}
}
function pake_file($name)
{
$args = func_get_args();
array_shift($args);
pakeFileTask::define_task($name, $args);
return $name;
}
function pake_mkdirs($path, $mode = 0777)
{
if (is_dir($path))
{
return true;
}
pake_echo_action('dir+', $path);
return @mkdir($path, $mode, true);
}
/*
override => boolean
*/
function pake_copy($origin_file, $target_file, $options = array())
{
if (!array_key_exists('override', $options))
{
$options['override'] = false;
}
// we create target_dir if needed
if (!is_dir(dirname($target_file)))
{
pake_mkdirs(dirname($target_file));
}
$most_recent = false;
if (file_exists($target_file))
{
$stat_target = stat($target_file);
$stat_origin = stat($origin_file);
$most_recent = ($stat_origin['mtime'] > $stat_target['mtime']) ? true : false;
}
if ($options['override'] || !file_exists($target_file) || $most_recent)
{
pake_echo_action('file+', $target_file);
copy($origin_file, $target_file);
}
}
function pake_rename($origin, $target, $options = array())
{
// we check that target does not exist
if (is_readable($target))
{
throw new pakeException(sprintf('Cannot rename because the target "%" already exist.', $target));
}
pake_echo_action('rename', $origin.' > '.$target);
rename($origin, $target);
}
function pake_mirror($arg, $origin_dir, $target_dir, $options = array())
{
$files = pakeApp::get_files_from_argument($arg, $origin_dir, true);
foreach ($files as $file)
{
if (is_dir($origin_dir.DIRECTORY_SEPARATOR.$file))
{
pake_mkdirs($target_dir.DIRECTORY_SEPARATOR.$file);
}
else if (is_file($origin_dir.DIRECTORY_SEPARATOR.$file))
{
pake_copy($origin_dir.DIRECTORY_SEPARATOR.$file, $target_dir.DIRECTORY_SEPARATOR.$file, $options);
}
else if (is_link($origin_dir.DIRECTORY_SEPARATOR.$file))
{
pake_symlink($origin_dir.DIRECTORY_SEPARATOR.$file, $target_dir.DIRECTORY_SEPARATOR.$file);
}
else
{
throw new pakeException(sprintf('Unable to determine "%s" type', $file));
}
}
}
function pake_remove($arg, $target_dir)
{
$files = array_reverse(pakeApp::get_files_from_argument($arg, $target_dir));
foreach ($files as $file)
{
if (is_dir($file) && !is_link($file))
{
pake_echo_action('dir-', $file);
rmdir($file);
}
else
{
pake_echo_action(is_link($file) ? 'link-' : 'file-', $file);
unlink($file);
}
}
}
function pake_touch($arg, $target_dir)
{
$files = pakeApp::get_files_from_argument($arg, $target_dir);
foreach ($files as $file)
{
pake_echo_action('file+', $file);
touch($file);
}
}
function pake_replace_tokens($arg, $target_dir, $begin_token, $end_token, $tokens)
{
$files = pakeApp::get_files_from_argument($arg, $target_dir, true);
foreach ($files as $file)
{
$replaced = false;
$content = file_get_contents($target_dir.DIRECTORY_SEPARATOR.$file);
foreach ($tokens as $key => $value)
{
$content = str_replace($begin_token.$key.$end_token, $value, $content, $count);
if ($count) $replaced = true;
}
pake_echo_action('tokens', $target_dir.DIRECTORY_SEPARATOR.$file);
file_put_contents($target_dir.DIRECTORY_SEPARATOR.$file, $content);
}
}
function pake_symlink($origin_dir, $target_dir, $copy_on_windows = false)
{
if (!function_exists('symlink') && $copy_on_windows)
{
$finder = pakeFinder::type('any')->ignore_version_control();
pake_mirror($finder, $origin_dir, $target_dir);
return;
}
$ok = false;
if (is_link($target_dir))
{
if (readlink($target_dir) != $origin_dir)
{
unlink($target_dir);
}
else
{
$ok = true;
}
}
if (!$ok)
{
pake_echo_action('link+', $target_dir);
symlink($origin_dir, $target_dir);
}
}
function pake_chmod($arg, $target_dir, $mode, $umask = 0000)
{
$current_umask = umask();
umask($umask);
$files = pakeApp::get_files_from_argument($arg, $target_dir, true);
foreach ($files as $file)
{
pake_echo_action(sprintf('chmod %o', $mode), $target_dir.DIRECTORY_SEPARATOR.$file);
chmod($target_dir.DIRECTORY_SEPARATOR.$file, $mode);
}
umask($current_umask);
}
function pake_sh($cmd)
{
$verbose = pakeApp::get_instance()->get_verbose();
pake_echo_action('exec ', $cmd);
ob_start();
passthru($cmd.' 2>&1', $return);
$content = ob_get_contents();
ob_end_clean();
if ($return > 0)
{
throw new pakeException(sprintf('Problem executing command %s', $verbose ? "\n".$content : ''));
}
return $content;
}
function pake_strip_php_comments($arg)
{
/* T_ML_COMMENT does not exist in PHP 5.
* The following three lines define it in order to
* preserve backwards compatibility.
*
* The next two lines define the PHP 5-only T_DOC_COMMENT,
* which we will mask as T_ML_COMMENT for PHP 4.
*/
if (!defined('T_ML_COMMENT'))
{
define('T_ML_COMMENT', T_COMMENT);
}
else
{
if (!defined('T_DOC_COMMENT')) define('T_DOC_COMMENT', T_ML_COMMENT);
}
$files = pakeApp::get_files_from_argument($arg);
foreach ($files as $file)
{
if (!is_file($file)) continue;
$source = file_get_contents($file);
$output = '';
$tokens = token_get_all($source);
foreach ($tokens as $token)
{
if (is_string($token))
{
// simple 1-character token
$output .= $token;
}
else
{
// token array
list($id, $text) = $token;
switch ($id)
{
case T_COMMENT:
case T_ML_COMMENT: // we've defined this
case T_DOC_COMMENT: // and this
// no action on comments
break;
default:
// anything else -> output "as is"
$output .= $text;
break;
}
}
}
file_put_contents($file, $output);
}
}
function pake_format_action($section, $text, $size = null)
{
if (pakeApp::get_instance()->get_verbose())
{
$width = 9 + strlen(pakeColor::colorize('', 'INFO'));
return sprintf('>> %-'.$width.'s %s', pakeColor::colorize($section, 'INFO'), pakeApp::excerpt($text, $size))."\n";
}
}
function pake_echo_action($section, $text)
{
echo pake_format_action($section, $text);
}
function pake_excerpt($text)
{
if (pakeApp::get_instance()->get_verbose())
{
echo pakeApp::excerpt($text)."\n";
}
}
function pake_echo($text)
{
if (pakeApp::get_instance()->get_verbose())
{
echo $text."\n";
}
}
function pake_echo_comment($text)
{
if (pakeApp::get_instance()->get_verbose())
{
echo sprintf(pakeColor::colorize(' # %s', 'COMMENT'), $text)."\n";
}
}
// register our default exception handler
function pake_exception_default_handler($exception)
{
$e = new pakeException();
$e->render($exception);
exit(1);
}
set_exception_handler('pake_exception_default_handler');
// fix php behavior if using cgi php
// from http://www.sitepoint.com/article/php-command-line-1/3
if (false !== strpos(PHP_SAPI, 'cgi'))
{
// handle output buffering
@ob_end_flush();
ob_implicit_flush(true);
// PHP ini settings
set_time_limit(0);
ini_set('track_errors', true);
ini_set('html_errors', false);
ini_set('magic_quotes_runtime', false);
// define stream constants
define('STDIN', fopen('php://stdin', 'r'));
define('STDOUT', fopen('php://stdout', 'w'));
define('STDERR', fopen('php://stderr', 'w'));
// change directory
if (isset($_SERVER['PWD']))
{
chdir($_SERVER['PWD']);
}
// close the streams on script termination
register_shutdown_function(create_function('', 'fclose(STDIN); fclose(STDOUT); fclose(STDERR); return true;'));
}