function main($argv)
{
    $this_script = array_shift($argv);
    $config_file = array_shift($argv);
    $config = load_config($config_file);
    $base_dir = $config['base_dir'];
    //'/Users/alanstorm/Documents/github/Pulsestorm/var/build';
    $archive_files = $config['archive_files'];
    //'Pulsestorm_Modulelist.tar';
    $path_output = $config['path_output'];
    //'/Users/alanstorm/Desktop/working';
    $archive_connect = $config['extension_name'] . '-' . $config['extension_version'] . '.tgz';
    $temp_dir = get_temp_dir();
    chdir($temp_dir);
    shell_exec('cp ' . $base_dir . '/' . $archive_files . ' ' . $temp_dir);
    if (preg_match('/\\.zip$/', $archive_files)) {
        shell_exec('unzip -o ' . $temp_dir . '/' . $archive_files);
    } else {
        shell_exec('tar -xvf ' . $temp_dir . '/' . $archive_files);
    }
    shell_exec('rm ' . $temp_dir . '/' . $archive_files);
    $all = glob_recursive($temp_dir . '/*');
    $dirs = glob_recursive($temp_dir . '/*', GLOB_ONLYDIR);
    $files = array_diff($all, $dirs);
    if (isset($config['auto_detect_version']) && $config['auto_detect_version'] == true) {
        $config['extension_version'] = get_module_version($files);
        $archive_connect = $config['extension_name'] . '-' . $config['extension_version'] . '.tgz';
    }
    if (!$config['skip_version_compare']) {
        check_module_version_vs_package_version($files, $config['extension_version']);
    }
    $xml = create_package_xml($files, $temp_dir, $config);
    file_put_contents($temp_dir . '/package.xml', $xml);
    echo $temp_dir, "\n";
    if (!is_dir($path_output)) {
        mkdir($path_output, 0777, true);
    }
    $archiver = new Mage_Archive_Tar();
    $archiver->pack($temp_dir, $path_output . '/' . $archive_files, true);
    shell_exec('gzip ' . $path_output . '/' . $archive_files);
    shell_exec('mv ' . $path_output . '/' . $archive_files . '.gz ' . $path_output . '/' . $archive_connect);
    #echo $xml;
    #echo "\nDone\n";
    echo "Built in {$path_output}\n";
}
 public static function buildExtensionFromConfig($config)
 {
     ob_start();
     # extract and validate config values
     $base_dir = $config['base_dir'];
     //'/Users/alanstorm/Documents/github/Pulsestorm/var/build';
     if ($base_dir['0'] !== '/') {
         $base_dir = getcwd() . '/' . $base_dir;
     }
     $archive_files = $config['archive_files'];
     //'Pulsestorm_Modulelist.tar';
     $path_output = $config['path_output'];
     //'/Users/alanstorm/Desktop/working';
     $archive_connect = $config['extension_name'] . '-' . $config['extension_version'] . '.tgz';
     ###--------------------------------------------------
     # make sure the archive we're creating exists
     if (!file_exists($base_dir . '/' . $archive_files)) {
         self::error('Can\'t find specified archive, bailing' . "\n[" . $base_dir . '/' . $archive_files . ']');
         exit;
     }
     ###--------------------------------------------------
     # create a temporary directory, move to temporary
     $temp_dir = self::getTempDir();
     chdir($temp_dir);
     ###--------------------------------------------------
     # copy and extract archive
     shell_exec('cp ' . $base_dir . '/' . $archive_files . ' ' . $temp_dir);
     if (preg_match('/\\.zip$/', $archive_files)) {
         shell_exec('unzip -o ' . $temp_dir . '/' . $archive_files);
     } else {
         shell_exec('tar -xvf ' . $temp_dir . '/' . $archive_files);
     }
     shell_exec('rm ' . $temp_dir . '/' . $archive_files);
     ###--------------------------------------------------
     # get a lsit of all the files without directories
     $all = self::globRecursive($temp_dir . '/*');
     $dirs = self::globRecursive($temp_dir . '/*', GLOB_ONLYDIR);
     $files = array_diff($all, $dirs);
     ###--------------------------------------------------
     # now that we've extracted the files, yoink the version number from the config
     # this only works is auto_detect_version is true. Also, may not return what
     # you expect if your connect extension includes multiple Magento modules
     if (isset($config['auto_detect_version']) && $config['auto_detect_version'] == true) {
         $config['extension_version'] = self::getModuleVersion($files);
         $archive_connect = $config['extension_name'] . '-' . $config['extension_version'] . '.tgz';
     }
     ###--------------------------------------------------
     # checks that your Magento Connect extension version matches the version of your
     # modules file.  Probably redundant if auto_detect_version is true
     if (!$config['skip_version_compare']) {
         self::checkModuleVersionVsPackageVersion($files, $config['extension_version']);
     }
     ###--------------------------------------------------
     # creates the base extension package.xml file
     $xml = self::createPackageXml($files, $temp_dir, $config);
     file_put_contents($temp_dir . '/package.xml', $xml);
     self::output($temp_dir);
     ###--------------------------------------------------
     # create the base output folder if it doesn't exist
     if (!is_dir($path_output)) {
         mkdir($path_output, 0777, true);
     }
     ###--------------------------------------------------
     # use Magento architve to tar up the files
     $archiver = new Mage_Archive_Tar();
     $archiver->pack($temp_dir, $path_output . '/' . $archive_files, true);
     ###--------------------------------------------------
     # zip up the archive
     shell_exec('gzip ' . $path_output . '/' . $archive_files);
     shell_exec('mv ' . $path_output . '/' . $archive_files . '.gz ' . $path_output . '/' . $archive_connect);
     ###--------------------------------------------------
     # Creating extension xml for connect using the extension name
     self::createExtensionXml($files, $config, $temp_dir, $path_output);
     ###--------------------------------------------------
     # Report on what we did
     self::output('');
     self::output('Build Complete');
     self::output('--------------------------------------------------');
     self::output("Built tgz in {$path_output}\n");
     self::output("Built XML for Connect Manager in" . "\n\n" . "   {$path_output}/var/connect " . "\n\n" . "place in `/path/to/magento/var/connect to load extension in Connect Manager");
     ###--------------------------------------------------
     return ob_get_clean();
 }
function main($argv)
{
    $this_script = array_shift($argv);
    $config_file = array_shift($argv);
    $config = load_config($config_file);
    $base_dir = $config['base_dir'];
    //'/Users/alanstorm/Documents/github/Pulsestorm/var/build';
    $archive_files = $config['archive_files'];
    //'Pulsestorm_Modulelist.tar';
    $path_output = $config['path_output'];
    //'/Users/alanstorm/Desktop/working';
    $archive_connect = $config['extension_name'] . '-' . $config['extension_version'] . '.tgz';
    $temp_dir = get_temp_dir();
    if ($base_dir['0'] !== '/') {
        $base_dir = getcwd() . '/' . $base_dir;
    }
    chdir($temp_dir);
    if (!file_exists($base_dir . '/' . $archive_files)) {
        error('Can\'t find specified archive, bailing' . "\n[" . $base_dir . '/' . $archive_files . ']');
        exit;
    }
    shell_exec('cp ' . $base_dir . '/' . $archive_files . ' ' . $temp_dir);
    if (preg_match('/\\.zip$/', $archive_files)) {
        shell_exec('unzip -o ' . $temp_dir . '/' . $archive_files);
    } else {
        shell_exec('tar -xf ' . $temp_dir . '/' . $archive_files);
    }
    shell_exec('rm ' . $temp_dir . '/' . $archive_files);
    $all = glob_recursive($temp_dir . '/*');
    $dirs = glob_recursive($temp_dir . '/*', GLOB_ONLYDIR);
    $files = array_diff($all, $dirs);
    if (isset($config['auto_detect_version']) && $config['auto_detect_version'] == true) {
        $config['extension_version'] = get_module_version($files);
        $archive_connect = $config['extension_name'] . '-' . $config['extension_version'] . '.tgz';
    }
    if (!$config['skip_version_compare']) {
        check_module_version_vs_package_version($files, $config['extension_version']);
    }
    $xml = create_package_xml($files, $temp_dir, $config);
    file_put_contents($temp_dir . '/package.xml', $xml);
    if (!is_dir($path_output)) {
        mkdir($path_output, 0777, true);
    }
    $archiver = new Mage_Archive_Tar();
    $archiver->pack($temp_dir, $path_output . '/' . $archive_files, true);
    shell_exec('gzip ' . $path_output . '/' . $archive_files);
    shell_exec('mv ' . $path_output . '/' . $archive_files . '.gz ' . $path_output . '/' . $archive_connect);
    // Creating extension xml for connect using the extension name
    create_extension_xml($files, $config, $temp_dir, $path_output);
}