From f2121cec89e5bcce11b10fe664d996b19c3ff86e Mon Sep 17 00:00:00 2001 From: Ciaran McCreesh Date: Sat, 19 Mar 2011 14:34:08 +0000 Subject: Move mask stores into layouts --- paludis/repositories/e/e_repository.cc | 33 +---------------- paludis/repositories/e/e_repository.hh | 2 -- paludis/repositories/e/ebuild_id.cc | 2 +- paludis/repositories/e/exheres_layout.cc | 40 +++++++++++++++++---- paludis/repositories/e/exheres_layout.hh | 7 +++- paludis/repositories/e/layout.cc | 11 +++--- paludis/repositories/e/layout.hh | 6 ++++ paludis/repositories/e/repository_mask_store.cc | 11 +++--- paludis/repositories/e/repository_mask_store.hh | 4 +-- paludis/repositories/e/traditional_layout.cc | 47 +++++++++++++++++++++---- paludis/repositories/e/traditional_layout.hh | 9 ++++- 11 files changed, 109 insertions(+), 63 deletions(-) diff --git a/paludis/repositories/e/e_repository.cc b/paludis/repositories/e/e_repository.cc index 1b107b19b..b5d502d4a 100644 --- a/paludis/repositories/e/e_repository.cc +++ b/paludis/repositories/e/e_repository.cc @@ -21,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -43,7 +42,6 @@ #include #include #include -#include #include #include @@ -64,11 +62,9 @@ #include #include -#include #include #include #include -#include #include #include #include @@ -183,21 +179,6 @@ namespace return result; } - std::shared_ptr make_mask_store( - const Environment * const env, - const RepositoryName & repo_name, - const FetchRepositoryMaskFilesFunction & f, - const EAPIForFileFunction & e) - { - return std::make_shared(env, repo_name, f, e); - } - - std::shared_ptr fetch_repository_mask_files( - const std::shared_ptr & layout) - { - return layout->repository_mask_files(); - } - bool is_arch_flag_func(const ERepository * const r, const UnprefixedChoiceName & p) { return r->arch_flags()->end() != r->arch_flags()->find(p); @@ -242,8 +223,6 @@ namespace paludis mutable std::shared_ptr sets_ptr; const std::shared_ptr layout; - ActiveObjectPtr > > repository_mask_store; - mutable EAPIForFileMap eapi_for_file_map; Imp(ERepository * const, const ERepositoryParams &, std::shared_ptr = std::make_shared()); @@ -299,12 +278,8 @@ namespace paludis names_cache(std::make_shared(p.names_cache(), r)), has_mirrors(false), sets_ptr(std::make_shared(params.environment(), r, p)), - layout(LayoutFactory::get_instance()->create(params.layout(), r, params.location(), get_master_locations( + layout(LayoutFactory::get_instance()->create(params.layout(), params.environment(), r, params.location(), get_master_locations( params.master_repositories()))), - repository_mask_store(DeferredConstructionPtr > ( - std::bind(&make_mask_store, params.environment(), r->name(), - FetchRepositoryMaskFilesFunction(std::bind(fetch_repository_mask_files, layout)), - EAPIForFileFunction(std::bind(std::mem_fn(&ERepository::eapi_for_file), r, std::placeholders::_1))))), format_key(std::make_shared >("format", "format", mkt_significant, params.entry_format())), layout_key(std::make_shared >("layout", "layout", @@ -636,12 +611,6 @@ ERepository::package_ids(const QualifiedPackageName & n, const RepositoryContent return _imp->layout->package_ids(n); } -std::shared_ptr -ERepository::repository_masks(const std::shared_ptr & id) const -{ - return _imp->repository_mask_store->query(id); -} - const std::shared_ptr > ERepository::arch_flags() const { diff --git a/paludis/repositories/e/e_repository.hh b/paludis/repositories/e/e_repository.hh index 22e45612c..e800f8473 100644 --- a/paludis/repositories/e/e_repository.hh +++ b/paludis/repositories/e/e_repository.hh @@ -159,8 +159,6 @@ namespace paludis const std::shared_ptr layout() const; const std::shared_ptr profile() const; - std::shared_ptr repository_masks(const std::shared_ptr &) const; - void regenerate_cache() const; /* Keys */ diff --git a/paludis/repositories/e/ebuild_id.cc b/paludis/repositories/e/ebuild_id.cc index 09ff33fba..775edecab 100644 --- a/paludis/repositories/e/ebuild_id.cc +++ b/paludis/repositories/e/ebuild_id.cc @@ -561,7 +561,7 @@ EbuildID::need_masks_added() const } { - auto repo_masks(e_repo->repository_masks(shared_from_this())); + auto repo_masks(e_repo->layout()->repository_masks(shared_from_this())); for (auto r(repo_masks->begin()), r_end(repo_masks->end()) ; r != r_end ; ++r) diff --git a/paludis/repositories/e/exheres_layout.cc b/paludis/repositories/e/exheres_layout.cc index edd168124..17f51ed15 100644 --- a/paludis/repositories/e/exheres_layout.cc +++ b/paludis/repositories/e/exheres_layout.cc @@ -21,10 +21,11 @@ #include #include #include +#include #include -#include -#include +#include +#include #include #include #include @@ -41,8 +42,12 @@ #include #include #include + #include #include +#include +#include + #include #include #include @@ -55,6 +60,18 @@ typedef std::unordered_map > Cate typedef std::unordered_map > PackagesMap; typedef std::unordered_map, Hash > IDMap; +namespace +{ + std::shared_ptr make_mask_store( + const Environment * const env, + const RepositoryName & repo_name, + const std::shared_ptr & f, + const EAPIForFileFunction & e) + { + return std::make_shared(env, repo_name, f, e); + } +} + namespace paludis { template<> @@ -80,7 +97,9 @@ namespace paludis std::shared_ptr info_packages_files; std::shared_ptr use_desc_files; - Imp(const ERepository * const n, const FSPath & t) : + ActiveObjectPtr > > repository_mask_store; + + Imp(const Environment * const env, const ERepository * const n, const FSPath & t) : repository(n), tree_root(t), has_category_names(false), @@ -90,16 +109,19 @@ namespace paludis mirror_files(std::make_shared()), info_variables_files(std::make_shared()), info_packages_files(std::make_shared()), - use_desc_files(std::make_shared()) + use_desc_files(std::make_shared()), + repository_mask_store(DeferredConstructionPtr > ( + std::bind(&make_mask_store, env, n->name(), + repository_mask_files, EAPIForFileFunction(std::bind(std::mem_fn(&ERepository::eapi_for_file), n, std::placeholders::_1))))) { } }; } -ExheresLayout::ExheresLayout(const ERepository * const r, const FSPath & tree_root, +ExheresLayout::ExheresLayout(const Environment * const e, const ERepository * const r, const FSPath & tree_root, const std::shared_ptr & f) : Layout(f), - _imp(r, tree_root) + _imp(e, r, tree_root) { if (master_repositories_locations()) { @@ -642,3 +664,9 @@ ExheresLayout::e_updates_location_key() const return make_null_shared_ptr(); } +std::shared_ptr +ExheresLayout::repository_masks(const std::shared_ptr & id) const +{ + return _imp->repository_mask_store->query(id); +} + diff --git a/paludis/repositories/e/exheres_layout.hh b/paludis/repositories/e/exheres_layout.hh index 836de833e..57139e5e9 100644 --- a/paludis/repositories/e/exheres_layout.hh +++ b/paludis/repositories/e/exheres_layout.hh @@ -47,7 +47,9 @@ namespace paludis ///\name Basic operations ///\{ - ExheresLayout(const ERepository * const, const FSPath &, + ExheresLayout( + const Environment * const, + const ERepository * const, const FSPath &, const std::shared_ptr &); virtual ~ExheresLayout(); @@ -129,6 +131,9 @@ namespace paludis virtual std::shared_ptr > e_updates_location_key() const PALUDIS_ATTRIBUTE((warn_unused_result)); + + virtual std::shared_ptr repository_masks(const std::shared_ptr &) const + PALUDIS_ATTRIBUTE((warn_unused_result)); }; } } diff --git a/paludis/repositories/e/layout.cc b/paludis/repositories/e/layout.cc index 080489368..57a59d335 100644 --- a/paludis/repositories/e/layout.cc +++ b/paludis/repositories/e/layout.cc @@ -1,7 +1,7 @@ /* vim: set sw=4 sts=4 et foldmethod=syntax : */ /* - * Copyright (c) 2005, 2006, 2007, 2008, 2009, 2010 Ciaran McCreesh + * Copyright (c) 2005, 2006, 2007, 2008, 2009, 2010, 2011 Ciaran McCreesh * Copyright (c) 2006 Danny van Dyk * * This file is part of the Paludis package manager. Paludis is free software; @@ -56,10 +56,10 @@ namespace { template std::shared_ptr - make_layout(const ERepository * const n, const FSPath & b, + make_layout(const Environment * const e, const ERepository * const n, const FSPath & b, std::shared_ptr f) { - return std::make_shared(n, b, f); + return std::make_shared(e, n, b, f); } } @@ -70,14 +70,15 @@ LayoutFactory::LayoutFactory() const std::shared_ptr LayoutFactory::create( const std::string & s, + const Environment * const e, const ERepository * const r, const FSPath & f, const std::shared_ptr & ff) const { if (s == "traditional") - return make_layout(r, f, ff); + return make_layout(e, r, f, ff); if (s == "exheres") - return make_layout(r, f, ff); + return make_layout(e, r, f, ff); throw ConfigurationError("Unrecognised layout '" + s + "'"); } diff --git a/paludis/repositories/e/layout.hh b/paludis/repositories/e/layout.hh index b60ae477d..1e6c1096b 100644 --- a/paludis/repositories/e/layout.hh +++ b/paludis/repositories/e/layout.hh @@ -30,7 +30,9 @@ #include #include #include +#include #include +#include #include namespace paludis @@ -155,6 +157,9 @@ namespace paludis virtual FSPath sync_filter_file() const; + virtual std::shared_ptr repository_masks(const std::shared_ptr &) const + PALUDIS_ATTRIBUTE((warn_unused_result)) = 0; + ///\} }; @@ -174,6 +179,7 @@ namespace paludis public: const std::shared_ptr create( const std::string &, + const Environment * const env, const ERepository * const, const FSPath &, const std::shared_ptr &) diff --git a/paludis/repositories/e/repository_mask_store.cc b/paludis/repositories/e/repository_mask_store.cc index 826036517..8b3a68388 100644 --- a/paludis/repositories/e/repository_mask_store.cc +++ b/paludis/repositories/e/repository_mask_store.cc @@ -49,15 +49,15 @@ namespace paludis { const Environment * const env; RepositoryName repo_name; - FetchRepositoryMaskFilesFunction fetch_repository_mask_files; + const std::shared_ptr files; EAPIForFileFunction eapi_for_file; RepositoryMaskMap repo_mask; - Imp(const Environment * const e, const RepositoryName & r, const FetchRepositoryMaskFilesFunction & f, const EAPIForFileFunction & n) : + Imp(const Environment * const e, const RepositoryName & r, const std::shared_ptr & f, const EAPIForFileFunction & n) : env(e), repo_name(r), - fetch_repository_mask_files(f), + files(f), eapi_for_file(n) { } @@ -67,7 +67,7 @@ namespace paludis RepositoryMaskStore::RepositoryMaskStore( const Environment * const e, const RepositoryName & r, - const FetchRepositoryMaskFilesFunction & f, + const std::shared_ptr & f, const EAPIForFileFunction & n) : _imp(e, r, f, n) { @@ -85,9 +85,8 @@ RepositoryMaskStore::_populate() using namespace std::placeholders; - auto repository_mask_files(_imp->fetch_repository_mask_files()); ProfileFile repository_mask_file(_imp->eapi_for_file); - std::for_each(repository_mask_files->begin(), repository_mask_files->end(), + std::for_each(_imp->files->begin(), _imp->files->end(), std::bind(&ProfileFile::add_file, std::ref(repository_mask_file), _1)); for (ProfileFile::ConstIterator diff --git a/paludis/repositories/e/repository_mask_store.hh b/paludis/repositories/e/repository_mask_store.hh index 4c8eb71a8..d79224296 100644 --- a/paludis/repositories/e/repository_mask_store.hh +++ b/paludis/repositories/e/repository_mask_store.hh @@ -38,8 +38,6 @@ namespace paludis { namespace erepository { - typedef std::function & ()> FetchRepositoryMaskFilesFunction; - class PALUDIS_VISIBLE RepositoryMaskStore { private: @@ -51,7 +49,7 @@ namespace paludis RepositoryMaskStore( const Environment * const, const RepositoryName &, - const FetchRepositoryMaskFilesFunction &, + const std::shared_ptr &, const EAPIForFileFunction &); ~RepositoryMaskStore(); diff --git a/paludis/repositories/e/traditional_layout.cc b/paludis/repositories/e/traditional_layout.cc index 362920402..a0f717de7 100644 --- a/paludis/repositories/e/traditional_layout.cc +++ b/paludis/repositories/e/traditional_layout.cc @@ -21,10 +21,9 @@ #include #include #include +#include #include -#include -#include #include #include #include @@ -41,8 +40,14 @@ #include #include #include +#include +#include + +#include +#include #include #include + #include #include #include @@ -55,6 +60,18 @@ typedef std::unordered_map > Cate typedef std::unordered_map > PackagesMap; typedef std::unordered_map, Hash > IDMap; +namespace +{ + std::shared_ptr make_mask_store( + const Environment * const env, + const RepositoryName & repo_name, + const std::shared_ptr & f, + const EAPIForFileFunction & e) + { + return std::make_shared(env, repo_name, f, e); + } +} + namespace paludis { template<> @@ -80,7 +97,12 @@ namespace paludis std::shared_ptr info_variables_files; std::shared_ptr use_desc_files; - Imp(const ERepository * const r, const FSPath & t) : + ActiveObjectPtr > > repository_mask_store; + + Imp( + const Environment * const env, + const ERepository * const r, + const FSPath & t) : repository(r), tree_root(t), has_category_names(false), @@ -90,16 +112,22 @@ namespace paludis mirror_files(std::make_shared()), info_packages_files(std::make_shared()), info_variables_files(std::make_shared()), - use_desc_files(std::make_shared()) + use_desc_files(std::make_shared()), + repository_mask_store(DeferredConstructionPtr > ( + std::bind(&make_mask_store, env, r->name(), + repository_mask_files, EAPIForFileFunction(std::bind(std::mem_fn(&ERepository::eapi_for_file), r, std::placeholders::_1))))) { } }; } -TraditionalLayout::TraditionalLayout(const ERepository * const repo, const FSPath & tree_root, +TraditionalLayout::TraditionalLayout( + const Environment * const env, + const ERepository * const repo, + const FSPath & tree_root, const std::shared_ptr & f) : Layout(f), - _imp(repo, tree_root) + _imp(env, repo, tree_root) { if (master_repositories_locations()) { @@ -658,3 +686,10 @@ TraditionalLayout::e_updates_location_key() const return make_null_shared_ptr(); } +std::shared_ptr +TraditionalLayout::repository_masks(const std::shared_ptr & id) const +{ + return _imp->repository_mask_store->query(id); +} + + diff --git a/paludis/repositories/e/traditional_layout.hh b/paludis/repositories/e/traditional_layout.hh index 7647c4a27..99e1c0411 100644 --- a/paludis/repositories/e/traditional_layout.hh +++ b/paludis/repositories/e/traditional_layout.hh @@ -23,6 +23,7 @@ #include #include +#include namespace paludis { @@ -48,7 +49,10 @@ namespace paludis ///\name Basic operations ///\{ - TraditionalLayout(const ERepository * const, const FSPath &, + TraditionalLayout( + const Environment * const env, + const ERepository * const, + const FSPath &, const std::shared_ptr &); virtual ~TraditionalLayout(); @@ -133,6 +137,9 @@ namespace paludis PALUDIS_ATTRIBUTE((warn_unused_result)); virtual FSPath sync_filter_file() const; + + virtual std::shared_ptr repository_masks(const std::shared_ptr &) const + PALUDIS_ATTRIBUTE((warn_unused_result)); }; } } -- cgit v1.2.3