#!/usr/bin/php
.');
define( 'PACKAGE_LICENSE', 'New BSD');
$releasesPath = realpath( '.' . DIRECTORY_SEPARATOR . 'release-info' );
/**
* Package file manager for package.xml 2.
*/
require_once 'PEAR/PackageFileManager2.php';
/**
* Autoload ezc classes
*
* @param string $class_name
*/
function __autoload( $class_name )
{
require_once("trunk/Base/src/base.php");
if ( strpos( $class_name, "_" ) !== false )
{
$file = str_replace( "_", "/", $class_name ) . ".php";
$val = require_once( $file );
if ( $val == 0 )
return true;
return false;
}
ezcBase::autoload( $class_name );
}
$output = new ezcConsoleOutput();
$output->formats->help->color = 'magenta';
$output->formats->info->color = 'blue';
$output->formats->info->style = 'bold';
$output->formats->version->color = 'red';
// Standard text
$output->outputLine();
$output->outputLine( "eZ Components super-package creator", 'info' );
$output->outputText( "Version: ", 'info' );
$output->outputLine( "0.1.0\n", 'version' );
$output->outputLine();
// Input handling
$input = new ezcConsoleInput();
$input->registerOption(
new ezcConsoleOption(
'v',
'version',
ezcConsoleInput::TYPE_STRING,
null,
null,
'Version number of the release version to create.',
'Version number of the release version to create. The number must reflect a release file with the named version number below .'
)
);
$input->registerOption(
new ezcConsoleOption(
'h',
'help',
ezcConsoleInput::TYPE_NONE,
null,
null,
'Create a super-package package.xml file for the given version number.',
'This tool can reate a super-package package.xml file that has dependencies to every other component package. Provide the current releases version number to the -v parameter to run the script.'
)
);
$input->registerOption(
new ezcConsoleOption(
'd',
'debug',
ezcConsoleInput::TYPE_NONE,
null,
null,
'Switch tool into debugging mode.',
'Sets the tool to debugging mode. Instead of writing the package.xml file it will be dumped to stdout.'
)
);
// Attempt to process parameters
try
{
$input->process();
}
catch ( ezcConsoleInputException $e )
{
die( $options->formatText( $e->getMessage(), 'failure' ) );
}
// Output help
if ($input->getOption( 'h' )->value !== false || $input->getOption( 'v' )->value === false )
{
$output->outputLine( "Usage:", 'help' );
$output->outputLine();
$output->outputLine( "$ " . __FILE__ . " -v -s ", 'help' );
$output->outputLine( "Creates a super-package package file for the named release version and stability.", 'help' );
$output->outputLine();
$help = $input->getHelp( true );
$table = new ezcConsoleTable( $output, 80, 2 );
$table->options->defaultFormat = 'help';
$table->options->defaultBorderFormat = 'help';
foreach ( $help as $rowId => $row)
{
foreach ( $row as $cellId => $cell )
{
$table[$rowId][$cellId]->content = $cell;
}
}
$table->outputTable();
die( "\n\n" );
}
// Grab releases info
$releasePath = $releasesPath . DIRECTORY_SEPARATOR . $input->getOption( 'v' )->value;
if ( !file_exists( $releasePath ) || !is_readable( $releasePath ) )
{
die( $output->formatText( "Release file <$releasePath> is not readable or does not exist.\n", 'failure' ) );
}
if ( ( $releaseDef = file( $releasePath ) ) === false )
{
die( $output->formatText( "Release file <$releasePath> could not be read.", 'failure' ) );
}
// Create release dir, if not exists
$packagePath = DIRECTORY_SEPARATOR . 'tmp' . DIRECTORY_SEPARATOR . 'Components';
if ( !is_dir( $packagePath ) && mkdir( $packagePath, 0700, true ) === false )
{
die( $output->formatText( "Error creating packaging directory <$packagePath>.", 'failure' ) );
}
$packagePath = realpath( $packagePath );
// Add dummy file
file_put_contents( $packagePath . DIRECTORY_SEPARATOR . 'DUMMY', 'ezc' );
// Package file manager
$pkg = new PEAR_PackageFileManager2;
$e = $pkg->setOptions(
array(
'packagedirectory' => $packagePath,
'baseinstalldir' => 'ezc',
'simpleoutput' => true,
'filelistgenerator' => 'file',
)
);
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error creating file manager: <" . $e->getMessage() . ">.\n", 'failure' ) );
$foundPackageTag = false;
$notes = array();
foreach ( $releaseDef as $release )
{
if ( substr( $release, 0, 1 ) === '#' )
{
continue;
}
if ( !trim( $release ) == '' && $foundPackageTag )
{
$releaseData = array_map( 'trim', explode( ': ', $release ) );
$version = str_replace( 'rc', 'RC', $releaseData[1] );
$e = $pkg->addPackageDepWithChannel( 'required', $releaseData[0], CHANNEL_URI, $version );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
}
if ( substr( $release, 0, 8 ) === 'PACKAGES' )
{
$foundPackageTag = true;
}
if ( !$foundPackageTag && trim( $release ) !== 'NOTES' )
{
$notes[] = $release;
}
}
$e = $pkg->setPackage( PACKAGE_NAME );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setSummary( PACKAGE_SUMMARY );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setDescription( PACKAGE_DESCRIPTION );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setChannel( CHANNEL_URI );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$version = $input->getOption( 'v' )->value;
$version = str_replace( 'rc', 'RC', $version );
if ( strpos( $version, 'alpha' ) !== false )
{
$stability = 'alpha';
}
else if ( strpos( $version, 'beta' ) !== false || strpos( $version, 'RC' ) !== false )
{
$stability = 'beta';
}
else
{
$stability = 'stable';
}
$e = $pkg->setReleaseStability( $stability );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setAPIStability( $stability );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setReleaseVersion( $version );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setAPIVersion( $version );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setLicense( PACKAGE_LICENSE );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setNotes( trim( join( '', $notes ) ) . "\n" );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setPackageType( 'php' );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setPhpDep( '5.2.1' );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->setPearinstallerDep( '1.4.2' );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->addGlobalReplacement( 'pear-config', '@php_dir@', 'php_dir' );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->addRelease();
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->addMaintainer( 'lead', 'ezc', 'eZ components team', 'ezc@ez.no' );
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$e = $pkg->generateContents();
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
$debug = $input->getOption( 'd' )->value !== false ? true : false;
if ( $debug )
{
$e = $pkg->debugPackageFile();
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
}
else
{
$e = $pkg->writePackageFile();
if ( PEAR::isError( $e ) )
die( $output->formatText( "Error in PackageFileManager2: <" . $e->getMessage() . ">.\n", 'failure' ) );
}
// Output success
$output->outputText( "\nSuccesfully finished operation. Thanks for using this hacky script!\n\n", 'success' );
?>