From 81641558199405b3001eb6ec5cc4d3ebe8ec5d99 Mon Sep 17 00:00:00 2001 From: André Aparício Date: Wed, 20 Jun 2012 23:10:28 +0100 Subject: Utils: Upgrade instruo to work with paludis 0.74.1 --- utils/command_line.cpp | 11 +++--- utils/command_line.h | 5 ++- utils/instruo.cpp | 91 +++++++++++++++++++++++--------------------------- utils/metadata_diff.sh | 2 +- 4 files changed, 48 insertions(+), 61 deletions(-) diff --git a/utils/command_line.cpp b/utils/command_line.cpp index 8d238b4..8354785 100644 --- a/utils/command_line.cpp +++ b/utils/command_line.cpp @@ -41,15 +41,12 @@ CommandLine::CommandLine() : a_no_color(&a_no_colour, "no-color"), a_force_colour(&general_args, "force-colour", '\0', "Force the use of colour", false), a_force_color(&a_force_colour, "force-color"), - a_repository_directory(&general_args, "repository-dir", 'D', - "Where to find the repository (default: current directory)"), + a_package_manager(&general_args, "package-manager", 'p', + "What package manager to use (default: portage)"), a_output_directory(&general_args, "output-dir", 'o', "Where to place generated metadata (default: current directory)"), - a_master_repository_name(&general_args, "master-repository-name", '\0', - "Use the specified name for the master repository. Specify the location using --extra-repository-dir. " - "Only for repositories with no metadata/layout.conf."), - a_extra_repository_dir(&general_args, "extra-repository-dir", '\0', - "Also include the repository at this location. May be specified multiple times, in creation order."), + a_repository_name(&general_args, "repository-name", 'n', + "Use the specified name for the repository (default: gentoo)"), a_report_file(&general_args, "report-file", 'r', "Write report to the specified file, rather than stdout") { diff --git a/utils/command_line.h b/utils/command_line.h index 2fdb10b..9bdf790 100644 --- a/utils/command_line.h +++ b/utils/command_line.h @@ -52,10 +52,9 @@ class CommandLine : paludis::args::AliasArg a_no_color; paludis::args::SwitchArg a_force_colour; paludis::args::AliasArg a_force_color; - paludis::args::StringArg a_repository_directory; + paludis::args::StringArg a_package_manager; paludis::args::StringArg a_output_directory; - paludis::args::StringArg a_master_repository_name; - paludis::args::StringSequenceArg a_extra_repository_dir; + paludis::args::StringArg a_repository_name; paludis::args::StringArg a_report_file; }; diff --git a/utils/instruo.cpp b/utils/instruo.cpp index 690e843..2bad8a2 100644 --- a/utils/instruo.cpp +++ b/utils/instruo.cpp @@ -25,33 +25,37 @@ #include #include -#include #include #include -#include -#include +#include +#include +#include #include #include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include +#include #include #include -#include -#include -#include -#include #include +#include #include -#include -#include -#include #include -#include +#include +#include +#include +#include +#include #include -#include -#include -#include -#include +#include +#include #include "command_line.h" #include "exceptions.h" @@ -64,7 +68,7 @@ using std::cout; using std::cerr; using std::endl; -void worker(const std::shared_ptr &ids) +void worker(const std::shared_ptr &ids, const std::string &repository_path) { unsigned total(0); CategoryNamePart old_cat("OLDCAT"); @@ -99,7 +103,7 @@ void worker(const std::shared_ptr &ids) variables["CATEGORY"].push_back(stringify(id->name().category())); std::vector functions; - std::string ebuild_path(CommandLine::get_instance()->a_repository_directory.argument() + + std::string ebuild_path(repository_path + "/" + variables["CATEGORY"][0] + "/" + variables["PN"][0] + "/" + variables["PN"][0] + "-" + @@ -126,6 +130,7 @@ void worker(const std::shared_ptr &ids) } } + int main(int argc, char** argv) { try @@ -153,8 +158,11 @@ int main(int argc, char** argv) )) throw args::DoHelp("you should specify exactly one action"); - if (! CommandLine::get_instance()->a_repository_directory.specified()) - CommandLine::get_instance()->a_repository_directory.set_argument(stringify(FSPath::cwd())); + if (! CommandLine::get_instance()->a_package_manager.specified()) + CommandLine::get_instance()->a_package_manager.set_argument("portage"); + + if (! CommandLine::get_instance()->a_repository_name.specified()) + CommandLine::get_instance()->a_repository_name.set_argument("gentoo"); if (CommandLine::get_instance()->a_version.specified()) { @@ -170,42 +178,25 @@ int main(int argc, char** argv) return EXIT_SUCCESS; } - if (( - CommandLine::get_instance()->a_repository_directory.specified() + - CommandLine::get_instance()->a_output_directory.specified() - ) < 1) - throw args::DoHelp("at least one of '--" + CommandLine::get_instance()->a_repository_directory.long_name() + "' or '--" - + CommandLine::get_instance()->a_output_directory.long_name() + "' must be specified"); - if (! CommandLine::get_instance()->a_output_directory.specified()) CommandLine::get_instance()->a_output_directory.set_argument(stringify(FSPath::cwd())); - std::shared_ptr extra_repository_dirs(std::make_shared()); - for (args::StringSequenceArg::ConstIterator d(CommandLine::get_instance()->a_extra_repository_dir.begin_args()), - d_end(CommandLine::get_instance()->a_extra_repository_dir.end_args()) ; - d != d_end ; ++d) - extra_repository_dirs->push_back(FSPath(*d)); + FSPath(CommandLine::get_instance()->a_output_directory.argument()).mkdir(0755, {fspmkdo_ok_if_exists}); - std::shared_ptr > keys(std::make_shared>()); - keys->insert("append_repository_name_to_write_cache", "false"); - NoConfigEnvironment env(make_named_values( - n::accept_unstable() = true, - n::disable_metadata_cache() = true, - n::extra_accept_keywords() = "", - n::extra_params() = keys, - n::extra_repository_dirs() = extra_repository_dirs, - n::master_repository_name() = CommandLine::get_instance()->a_master_repository_name.argument(), - n::profiles_if_not_auto() = "", - n::repository_dir() = CommandLine::get_instance()->a_repository_directory.argument(), - n::repository_type() = no_config_environment::ncer_ebuild, - n::write_cache() = CommandLine::get_instance()->a_output_directory.argument() - )); + std::shared_ptr env(EnvironmentFactory::get_instance()->create(CommandLine::get_instance()->a_package_manager.argument())); - FSPath(CommandLine::get_instance()->a_output_directory.argument()).mkdir(0755, {fspmkdo_ok_if_exists}); + std::shared_ptr repo = env->fetch_repository(RepositoryName(CommandLine::get_instance()->a_repository_name.argument())); + + Repository::MetadataConstIterator distdir_metadata(repo->find_metadata("location")); + const MetadataValueKey *path_key; + if(distdir_metadata != repo->end_metadata()) + { + path_key = visitor_cast>(**distdir_metadata); - std::shared_ptr ids(env[selection::AllVersionsSorted( - generator::InRepository(env.main_repository()->name()))]); - worker(ids); + std::shared_ptr ids((*env)[selection::AllVersionsSorted( + generator::InRepository(RepositoryName(CommandLine::get_instance()->a_repository_name.argument())))]); + worker(ids, stringify(path_key->parse_value().realpath())); + } } catch (const paludis::args::ArgsError & e) { diff --git a/utils/metadata_diff.sh b/utils/metadata_diff.sh index 7a21855..c0a808a 100755 --- a/utils/metadata_diff.sh +++ b/utils/metadata_diff.sh @@ -11,7 +11,7 @@ fi echo "Generating metadata at $outputdir" -time ./instruo -D ${PORTDIR:-/usr/portage/} -o $outputdir 2>$outputdir/error_output +time ./instruo -p portage -n gentoo -o $outputdir 2>$outputdir/error_output echo "Running diff..." -- cgit v1.2.3-65-gdbad