/* vim: set sw=4 sts=4 et foldmethod=syntax : */ /* * Copyright (c) 2007 Piotr JaroszyƄski * * This file is part of the Paludis package manager. Paludis is free software; * you can redistribute it and/or modify it under the terms of the GNU General * Public License version 2, as published by the Free Software Foundation. * * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA */ #include #include #include #include #include #include #include #include #include using namespace paludis; using namespace paludis::python; namespace bp = boost::python; template class class_supports_action_test : public bp::class_, bp::bases > { public: class_supports_action_test(const std::string & action) : bp::class_, bp::bases >( ("Supports" + action + "ActionTest").c_str(), "SupportsActionTest is used by PackageID::supports_action and\n" "Repository::some_ids_might_support_action to query whether a\n" "particular action is supported by that PackageID or potentially\n" "supported by some IDs in that Repository.", bp::init<>("__init__()") ) { } }; namespace { WantPhase want_all_phases(const std::string &) { return wp_yes; } std::shared_ptr make_standard_output_manager(const Action &) { return std::make_shared(); } void cannot_perform_uninstall(const std::shared_ptr & id, const UninstallActionOptions &) { throw InternalError(PALUDIS_HERE, "Can't uninstall '" + stringify(*id) + "'"); } bool ignore_nothing(const FSPath &) { return false; } InstallActionOptions * make_install_action_options( const std::shared_ptr & r) { return new InstallActionOptions(make_named_values( n::destination() = r, n::make_output_manager() = &make_standard_output_manager, n::perform_uninstall() = &cannot_perform_uninstall, n::replacing() = std::make_shared(), n::want_phase() = &want_all_phases )); } UninstallActionOptions * make_uninstall_action_options( const std::string & c) { return new UninstallActionOptions(make_named_values( n::config_protect() = c, n::if_for_install_id() = make_null_shared_ptr(), n::ignore_for_unmerge() = &ignore_nothing, n::is_overwrite() = false, n::make_output_manager() = &make_standard_output_manager, n::override_contents() = make_null_shared_ptr(), n::want_phase() = &want_all_phases )); } InfoActionOptions * make_info_action_options() { return new InfoActionOptions(make_named_values( n::make_output_manager() = &make_standard_output_manager )); } ConfigActionOptions * make_config_action_options() { return new ConfigActionOptions(make_named_values( n::make_output_manager() = &make_standard_output_manager )); } PretendActionOptions * make_pretend_action_options( const std::shared_ptr & r) { return new PretendActionOptions(make_named_values( n::destination() = r, n::make_output_manager() = &make_standard_output_manager, n::replacing() = std::make_shared() )); } FetchActionOptions * make_fetch_action_options( const bool exclude_unmirrorable, const bool fetch_unneeded, const bool safe_resume ) { FetchParts parts; parts = parts + fp_regulars + fp_extras; if (fetch_unneeded) parts += fp_unneeded; return new FetchActionOptions(make_named_values( n::errors() = std::make_shared>(), n::exclude_unmirrorable() = exclude_unmirrorable, n::fetch_parts() = parts, n::ignore_not_in_manifest() = false, n::ignore_unfetched() = false, n::make_output_manager() = &make_standard_output_manager, n::safe_resume() = safe_resume, n::want_phase() = &want_all_phases )); } } void expose_action() { /** * Exceptions */ ExceptionRegister::get_instance()->add_exception ("ActionFailedError", "BaseException", "Thrown if an action fails."); ExceptionRegister::get_instance()->add_exception ("ActionAbortedError", "BaseException", "Thrown if an action is aborted."); /** * InstallActionOptions */ bp::class_ ( "InstallActionOptions", "Options for InstallAction.", bp::no_init ) .def("__init__", bp::make_constructor(&make_install_action_options), "__init__(Repository)" ) .add_property("destination", &named_values_getter, &InstallActionOptions::destination>, &named_values_setter, &InstallActionOptions::destination>, "[rw] Repository" ) ; /** * UninstallActionOptions */ bp::class_ ( "UninstallActionOptions", "Options for UninstallAction.", bp::no_init ) .def("__init__", bp::make_constructor(&make_uninstall_action_options), "__init__(String)" ) .add_property("config_protect", &named_values_getter, &named_values_setter, "[rw] String" ) ; /** * ConfigActionOptions */ bp::class_ ( "ConfigActionOptions", "Options for ConfigAction.", bp::no_init ) .def("__init__", bp::make_constructor(&make_config_action_options), "__init__()" ) ; /** * InfoActionOptions */ bp::class_ ( "InfoActionOptions", "Options for InfoAction.", bp::no_init ) .def("__init__", bp::make_constructor(&make_info_action_options), "__init__()" ) ; /** * PretendActionOptions */ bp::class_ ( "PretendActionOptions", "Options for PretendAction.", bp::no_init ) .def("__init__", bp::make_constructor(&make_pretend_action_options), "__init__(Repository)" ) ; /** * FetchActionOptions */ bp::class_ ( "FetchActionOptions", "Options for FetchAction.", bp::no_init ) .def("__init__", bp::make_constructor(&make_fetch_action_options), "__init__(exclude_unmirrorable, fetch_uneeded, safe_resume)" ) .add_property("exclude_unmirrorable", &named_values_getter, &named_values_setter, "[rw] bool" ) .add_property("safe_resume", &named_values_getter, &named_values_setter, "[rw] bool" ) ; /** * Action */ bp::class_ ( "Action", "An Action represents an action that can be executed by a PackageID via\n" "PackageID::perform_action.", bp::no_init ); /** * InstallAction */ bp::class_, boost::noncopyable> ( "InstallAction", "An InstallAction is used by InstallTask to perform a build / install on a\n" "PackageID.", bp::init("__init__(InstallActionOptions)") ); /** * FetchAction */ bp::class_, boost::noncopyable> ( "FetchAction", "A FetchAction can be used to fetch source files for a PackageID using\n" "PackageID::perform_action.", bp::init("__init__(FetchActionOptions)") ); /** * UninstallAction */ bp::class_, boost::noncopyable> ( "UninstallAction", "An UninstallAction is used by UninstallTask to uninstall a PackageID.", bp::init("__init__(UninstallActionOptions)") ); /** * PretendAction */ bp::class_, boost::noncopyable> ( "PretendAction", "A PretendAction is used by InstallTask to handle install-pretend-phase\n" "checks on a PackageID.", bp::init("__init__(PretendActionOptions)") ) .add_property("failed", &PretendAction::failed, "[ro] bool\n" "Did our pretend phase fail?" ) ; /** * ConfigAction */ bp::class_, boost::noncopyable> ( "ConfigAction", "A ConfigAction is used via PackageID::perform_action to execute\n" "post-install configuration (for example, via 'paludis --config')\n" "on a PackageID.", bp::init("__init__(ConfigActionOptions)") ); /** * InfoAction */ bp::class_, boost::noncopyable> ( "InfoAction", "An InfoAction is used via PackageID::perform_action to execute\n" "additional information (for example, via 'paludis --info')\n" "on a PackageID.", bp::init("__init__(InfoActionOptions)") ); /** * SupportActionTestBase */ bp::class_ ( "SupportsActionTestBase", "Base class for SupportsActionTests.", bp::no_init ); /** * SupportActionTests */ class_supports_action_test("Install"); class_supports_action_test("Fetch"); class_supports_action_test("Uninstall"); class_supports_action_test("Pretend"); class_supports_action_test("Config"); class_supports_action_test("Info"); }