function main()
{
    $args = $_SERVER['argv'];
    $boost_root = null;
    switch (count($args)) {
        case 2:
            $boost_root = $args[1];
            break;
        default:
            echo "Usage: create-module-metadata.php boost_root\n";
            exit(1);
    }
    $library_details = BoostLibraries::from_xml_file(__DIR__ . '/../doc/libraries.xml')->get_for_version(BoostVersion::develop());
    $super_project = new BoostSuperProject($boost_root);
    $git_submodules = $super_project->get_modules();
    // Split the libraries up into modules.
    $libraries_by_module = array();
    foreach ($library_details as $library) {
        $module = $library['module'];
        if (!isset($git_submodules[$module])) {
            echo "Unknown module: {$module}\n";
            continue;
        }
        if (isset($library['documentation'])) {
            $doc_url = $library['documentation'];
            $module_base = $git_submodules[$module]['path'];
            if ($doc_url == $module_base) {
                $doc_url = '';
            } else {
                if (strpos($doc_url, "{$module_base}/") === 0) {
                    $doc_url = substr($doc_url, strlen("{$module_base}/"));
                } else {
                    $doc_url = "/{$doc_url}";
                }
            }
            if (!$doc_url) {
                unset($library['documentation']);
            } else {
                $library['documentation'] = $doc_url;
            }
        }
        $libraries_by_module[$module][] = $library;
    }
    // Write the module metadata
    foreach ($libraries_by_module as $module => $libraries) {
        $module_libraries = BoostLibraries::from_array($libraries);
        $module_dir = "{$boost_root}/{$git_submodules[$module]['path']}";
        $meta_dir = "{$module_dir}/meta";
        $meta_file = "{$module_dir}/meta/libraries.json";
        if (!is_dir($module_dir)) {
            echo "Module '{$module}' doesn't exist at '{$module_dir}'\n";
            continue;
        }
        if (!is_dir($meta_dir)) {
            mkdir($meta_dir);
        }
        file_put_contents($meta_file, $module_libraries->to_json(array('boost-version', 'update-version', 'module')) . "\n");
    }
}
function main()
{
    $args = $_SERVER['argv'];
    $location = null;
    switch (count($args)) {
        case 2:
            $location = $args[1];
            break;
        default:
            echo "Usage: backdate-maintainers.php location\n";
            exit(1);
    }
    // Get the library data, so that it can be updated with maintainers.
    // In case you're wondering why the result from get_for_version doesn't
    // use 'key' as its key, it's for historical reasons I think, might be
    // fixable.
    $libraries = BoostLibraries::from_xml_file(__DIR__ . '/../doc/libraries.xml');
    $unknown_libs = array();
    foreach (BoostSuperProject::run_process("cd \"{$location}\" && git tag") as $tag) {
        if (preg_match('@^boost-1\\.\\d+\\.\\d+$@', $tag)) {
            $library_details = $libraries->get_for_version($tag, null, 'BoostLibraries::filter_all');
            $libs_index = array();
            foreach ($library_details as $index => $details) {
                $libs_index[$details['key']] = $index;
            }
            foreach (BoostMaintainers::read_from_text(git_file($location, $tag, 'libs/maintainers.txt'))->maintainers as $key => $lib_maintainers) {
                if (isset($libs_index[$key])) {
                    $index = $libs_index[$key];
                    $library_details[$index]['maintainers'] = $lib_maintainers;
                } else {
                    $unknown_libs[$key][] = $tag;
                }
            }
            $update = array_map(function ($lib) {
                return new BoostLibrary($lib);
            }, $library_details);
            $libraries->update($tag, $update);
        }
    }
    file_put_contents(dirname(__FILE__) . '/../doc/libraries.xml', $libraries->to_xml());
    $names = array_keys($unknown_libs);
    sort($names);
    echo "Unable to find libraries:\n";
    foreach ($names as $lib) {
        echo "{$lib} from: " . implode(', ', $unknown_libs[$lib]) . "\n";
    }
}
예제 #3
0
function main()
{
    $args = $_SERVER['argv'];
    if (count($args) != 3) {
        echo "Usage: update-maintainers.php location version\n";
        exit(1);
    }
    $location = $args[1];
    $version = $args[2];
    $libraries = BoostLibraries::from_xml_file(__DIR__ . '/../doc/libraries.xml');
    $unknown_libs = array();
    $maintainers = BoostMaintainers::read_from_text(file($location . '/libs/maintainers.txt'));
    $library_details = $libraries->get_for_version($version, null);
    $libs_index = array();
    foreach ($library_details as $index => $details) {
        if (isset($details['maintainers'])) {
            $maintainers->update_maintainer($details['key'], $details['maintainers']);
        }
    }
    file_put_contents($location . '/libs/maintainers.txt', $maintainers->write_to_text());
}
예제 #4
0
function main()
{
    $options = BoostSiteTools\CommandLineOptions::parse("Usage: {} location version");
    if (count($options->positional) != 2) {
        echo $options->usage_message();
        exit(1);
    }
    $location = $options->positional[0];
    $version = $options->positional[1];
    $libraries = BoostLibraries::from_xml_file(__DIR__ . '/../doc/libraries.xml');
    $unknown_libs = array();
    $maintainers = BoostMaintainers::read_from_text(file($location . '/libs/maintainers.txt'));
    // TODO: Want to include hidden libraries here.
    $library_details = $libraries->get_for_version($version, null);
    $libs_index = array();
    foreach ($library_details as $index => $details) {
        if (isset($details['maintainers'])) {
            $maintainers->update_maintainer($details['key'], $details['maintainers']);
        }
    }
    file_put_contents($location . '/libs/maintainers.txt', $maintainers->write_to_text());
}
예제 #5
0
 /**
  *
  */
 static function load()
 {
     return USE_SERIALIZED_INFO ? unserialize(file_get_contents(dirname(__FILE__) . '/../../generated/libraries.txt')) : BoostLibraries::from_xml_file(dirname(__FILE__) . '/../../doc/libraries.xml');
 }
예제 #6
0
function main()
{
    global $quiet;
    $options = BoostSiteTools\CommandLineOptions::parse(UPDATE_DOC_LIST_USAGE, array('quiet' => false));
    $quiet = $options->flags['quiet'];
    $location = null;
    $version = null;
    switch (count($options->positional)) {
        case 2:
            $version = $options->positional[1];
        case 1:
            $location = $options->positional[0];
        case 0:
            break;
        default:
            echo $options->usage_message();
            exit(1);
    }
    if ($version) {
        // BoostVersion dies if version is invalid.
        $version = BoostVersion::from($version);
    }
    $libs = BoostLibraries::from_xml_file(dirname(__FILE__) . '/../doc/libraries.xml');
    $updates = array();
    if ($location) {
        $real_location = realpath($location);
        if ($real_location && !is_dir($real_location)) {
            echo "Not a directory: {$location}\n";
            exit(1);
        }
        $location = $real_location;
        // If this is not a git repo.
        // TODO: Don't output stderr.
        exec("cd \"{$location}\" && git rev-parse --git-dir", $output, $return_var);
        if ($return_var != 0) {
            if (!$version || !$version->is_numbered_release()) {
                echo "Error: Release version required for release.\n";
                exit(1);
            }
            $updates[(string) $version] = read_metadata_from_filesystem($location, $version);
        } else {
            if (get_bool_from_array(BoostSuperProject::run_process("cd '{$location}' && git rev-parse --is-bare-repository"))) {
                if ($version) {
                    $updates[(string) $version] = read_metadata_from_git($location, $version);
                } else {
                    $updates[(string) 'master'] = read_metadata_from_git($location, 'master');
                    $updates[(string) 'develop'] = read_metadata_from_git($location, 'develop');
                }
            } else {
                // TODO: Could get version from the branch in a git checkout.
                if (!$version) {
                    echo "Error: Version required for local tree.\n";
                    exit(1);
                }
                $updates[(string) $version] = read_metadata_from_filesystem($location, $version);
            }
        }
    }
    if ($updates) {
        foreach ($updates as $update_version => $update) {
            $libs->update($update_version, $update);
        }
    } else {
        $libs->update();
    }
    if (!$quiet) {
        echo "Writing to disk\n";
    }
    file_put_contents(dirname(__FILE__) . '/../doc/libraries.xml', $libs->to_xml());
    $libs->squash_name_arrays();
    file_put_contents(dirname(__FILE__) . '/../generated/libraries.txt', serialize($libs));
}
예제 #7
0
function main()
{
    $args = $_SERVER['argv'];
    $location = null;
    $version = null;
    switch (count($args)) {
        case 3:
            $version = $args[2];
        case 2:
            $location = $args[1];
        case 1:
            break;
        default:
            echo "Usage: update-doc-list.php [path] [version]\n";
            exit(1);
    }
    if ($version) {
        // BoostVersion dies if version is invalid.
        $version = BoostVersion::from($version);
    }
    $libs = BoostLibraries::from_xml_file(dirname(__FILE__) . '/../doc/libraries.xml');
    $updates = array();
    if ($location) {
        $real_location = realpath($location);
        if ($real_location && !is_dir($real_location)) {
            echo "Not a directory: {$location}\n";
            exit(1);
        }
        $location = $real_location;
        // If this is not a git repo.
        // TODO: Don't output stderr.
        exec("cd \"{$location}\" && git rev-parse --git-dir", $output, $return_var);
        if ($return_var != 0) {
            if (!$version || !$version->is_numbered_release()) {
                echo "Error: Release version required for release.\n";
                exit(1);
            }
            $updates[(string) $version] = read_metadata_from_release($location, $version, $libs);
        } else {
            if (get_bool_from_array(BoostSuperProject::run_process("cd '{$location}' && git rev-parse --is-bare-repository"))) {
                if ($version) {
                    $updates[(string) $version] = read_metadata_from_git($location, $version);
                } else {
                    $updates[(string) 'master'] = read_metadata_from_git($location, 'master');
                    $updates[(string) 'develop'] = read_metadata_from_git($location, 'develop');
                }
            } else {
                // TODO: Could get version from the branch in a git checkout.
                if (!$version) {
                    echo "Error: Version required for local tree.\n";
                    exit(1);
                }
                $updates[(string) $version] = read_metadata_from_local_clone($location, $version);
            }
        }
    }
    if ($updates) {
        foreach ($updates as $update_version => $update) {
            $libs->update($update_version, $update);
        }
    } else {
        $libs->update();
    }
    echo "Writing to disk\n";
    file_put_contents(dirname(__FILE__) . '/../doc/libraries.xml', $libs->to_xml());
    $libs->squash_name_arrays();
    file_put_contents(dirname(__FILE__) . '/../generated/libraries.txt', serialize($libs));
}