paludis Version 3.0.2
The one true package mangler
environment.hh
Go to the documentation of this file.
1/* vim: set sw=4 sts=4 et foldmethod=syntax : */
2
3/*
4 * Copyright (c) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2014 Ciaran McCreesh
5 *
6 * This file is part of the Paludis package manager. Paludis is free software;
7 * you can redistribute it and/or modify it under the terms of the GNU General
8 * Public License version 2, as published by the Free Software Foundation.
9 *
10 * Paludis is distributed in the hope that it will be useful, but WITHOUT ANY
11 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13 * details.
14 *
15 * You should have received a copy of the GNU General Public License along with
16 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
17 * Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19
20#ifndef PALUDIS_GUARD_PALUDIS_ENVIRONMENT_HH
21#define PALUDIS_GUARD_PALUDIS_ENVIRONMENT_HH 1
22
24
25#include <paludis/output_manager-fwd.hh>
26#include <paludis/name-fwd.hh>
27#include <paludis/hook-fwd.hh>
29#include <paludis/dep_spec.hh>
30#include <paludis/spec_tree-fwd.hh>
32#include <paludis/mask-fwd.hh>
34#include <paludis/metadata_key_holder.hh>
35#include <paludis/choice-fwd.hh>
36#include <paludis/create_output_manager_info-fwd.hh>
37#include <paludis/notifier_callback-fwd.hh>
38#include <paludis/filter-fwd.hh>
39
40#include <paludis/util/iterator_range.hh>
42#include <paludis/util/tribool-fwd.hh>
43#include <paludis/util/visitor.hh>
44#include <paludis/util/pimp.hh>
46
47#include <memory>
48
49/** \file
50 * Declarations for the Environment class.
51 *
52 * \ingroup g_environment
53 *
54 * \section Examples
55 *
56 * - \ref example_environment.cc "example_environment.cc"
57 */
58
59namespace paludis
60{
61 /**
62 * Thrown if a query results in more than one matching package.
63 *
64 * \ingroup g_exceptions
65 * \ingroup g_environment
66 */
67 class PALUDIS_VISIBLE AmbiguousPackageNameError :
68 public Exception
69 {
70 private:
71 struct NameData;
72 const std::unique_ptr<NameData> _name_data;
73
74 std::string _name;
75
76 public:
77 ///\name Basic operations
78 ///\{
79
80 AmbiguousPackageNameError(const std::string & name, const std::shared_ptr<const Sequence<std::string> > &) noexcept;
81
82 AmbiguousPackageNameError(const AmbiguousPackageNameError &);
83
84 ~AmbiguousPackageNameError() override;
85
86 ///\}
87
88 /**
89 * The name of the package.
90 */
91 const std::string & name() const PALUDIS_ATTRIBUTE((warn_unused_result));
92
93 ///\name Iterate over possible matches
94 ///\{
95
96 struct OptionsConstIteratorTag;
97 typedef WrappedForwardIterator<OptionsConstIteratorTag, const std::string> OptionsConstIterator;
98
99 OptionsConstIterator begin_options() const PALUDIS_ATTRIBUTE((warn_unused_result));
100 OptionsConstIterator end_options() const PALUDIS_ATTRIBUTE((warn_unused_result));
101
102 ///\}
103 };
104
105 /**
106 * Thrown if a Repository with the same name as an existing member is added
107 * to an Environment.
108 *
109 * \ingroup g_exceptions
110 * \ingroup g_environment
111 */
113 public Exception
114 {
115 public:
116 /**
117 * Constructor.
118 */
119 DuplicateRepositoryError(const std::string & name) noexcept;
120 };
121
122 /**
123 * Thrown if there is no Package with the given name.
124 *
125 * \ingroup g_exceptions
126 * \ingroup g_environment
127 */
128 class PALUDIS_VISIBLE NoSuchPackageError :
129 public Exception
130 {
131 private:
132 std::string _name;
133
134 public:
135 ///\name Basic operations
136 ///\{
137
138 NoSuchPackageError(const std::string & name) noexcept;
139
140 ~NoSuchPackageError() override = default;
141
142 ///\}
143
144 /**
145 * Name of the package.
146 */
147 const std::string & name() const
148 {
149 return _name;
150 }
151 };
152
153 /**
154 * Thrown if there is no Repository in a RepositoryDatabase with the given
155 * name.
156 *
157 * \ingroup g_exceptions
158 * \ingroup g_environment
159 */
160 class PALUDIS_VISIBLE NoSuchRepositoryError :
161 public Exception
162 {
163 private:
164 const RepositoryName _name;
165
166 public:
167 ///\name Basic operations
168 ///\{
169
170 NoSuchRepositoryError(const RepositoryName &) noexcept;
171
172 ~NoSuchRepositoryError() override;
173
174 ///\}
175
176 /**
177 * The name of our repository.
178 */
180 };
181
182 /**
183 * Represents a working environment, which contains an available packages
184 * database and provides various methods for querying package visibility
185 * and options.
186 *
187 * Holds a number of Repository instances.
188 *
189 * Environment itself is purely an interface class. Actual Environment
190 * implementations usually descend from EnvironmentImplementation, which
191 * provides much of the common implementation details. EnvironmentFactory is
192 * often used to create the appropriate Environment subclass for an
193 * application.
194 *
195 * \ingroup g_environment
196 * \see EnvironmentFactory
197 * \see EnvironmentImplementation
198 * \see Repository
199 * \nosubgrouping
200 */
201 class PALUDIS_VISIBLE Environment :
202 public MetadataKeyHolder
203 {
204 protected:
205 static const Filter & all_filter() PALUDIS_ATTRIBUTE((warn_unused_result));
206
207 public:
208 ///\name Basic operations
209 ///\{
210
211 Environment() = default;
212 ~Environment() override = 0;
213
214 Environment(const Environment &) = delete;
215 Environment & operator= (const Environment &) = delete;
216
217 ///\}
218
219 ///\name Choice-related queries
220 ///\{
221
222 /**
223 * Do we want a choice enabled for a particular package?
224 *
225 * Only for use by Repository, to get defaults from the environment.
226 * Clients should query the metadata key directly.
227 *
228 * The third parameter is the name of the value, which might not
229 * have been created yet.
230 */
232 const std::shared_ptr<const PackageID> &,
233 const std::shared_ptr<const Choice> &,
235 ) const
236 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
237
238 /**
239 * What string value, if any, is set for the parameter for a particular
240 * choice for a particular package?
241 *
242 * There is no difference between "not set" and "set to an empty
243 * string".
244 *
245 * Only for use by Repository, to get defaults from the environment.
246 * Clients should query the metadata key directly.
247 *
248 * The third parameter is the name of the value, which might not
249 * have been created yet.
250 *
251 * \since 0.40
252 */
253 virtual const std::string value_for_choice_parameter(
254 const std::shared_ptr<const PackageID> &,
255 const std::shared_ptr<const Choice> &,
257 ) const
258 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
259
260 /**
261 * Return a collection of known value names for a particular
262 * choice.
263 *
264 * Only for use by Repository, to get defaults from the environment.
265 * Clients should query the metadata key directly.
266 *
267 * This is to deal with cases like USE_EXPAND values, where the
268 * repository doesn't know all possible values.
269 */
270 virtual std::shared_ptr<const Set<UnprefixedChoiceName> > known_choice_value_names(
271 const std::shared_ptr<const PackageID> &,
272 const std::shared_ptr<const Choice> &
273 ) const
274 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
275
276 ///\}
277
278 ///\name Suggestion-related queries
279 ///\{
280
281 /**
282 * Do we want to ignore or take a particular suggestion from a
283 * particular package?
284 *
285 * Command line things override this.
286 *
287 * \since 0.58
288 */
290 const std::shared_ptr<const PackageID> & from_id,
291 const PackageDepSpec & spec) const
292 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
293
294 ///\}
295
296 ///\name Mask-related queries
297 ///\{
298
299 /**
300 * Do we accept a particular license for a particular package?
301 *
302 * Used by PackageID implementations. Generally PackageID's masks methods
303 * should be used rather than calling this directly.
304 *
305 * \since 0.58 takes id by shared_ptr
306 */
307 virtual bool accept_license(
308 const std::string &,
309 const std::shared_ptr<const PackageID> &) const
310 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
311
312 /**
313 * Expand a licence group into its constituent licences, recursively (if any
314 * of our repositories thinks it is a group).
315 *
316 * The original group is included in the result.
317 *
318 * \since 0.68
319 */
320 virtual const std::shared_ptr<const Set<std::string> > expand_licence(
321 const std::string &) const
322 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
323
324 /**
325 * Do we accept any of the specified keywords for a particular package?
326 *
327 * If the collection includes "*", should return true.
328 *
329 * Used by PackageID implementations. Generally PackageID's masks methods
330 * should be used rather than calling this directly.
331 *
332 * \since 0.58 takes id by shared_ptr
333 */
334 virtual bool accept_keywords(
335 const std::shared_ptr<const KeywordNameSet> &,
336 const std::shared_ptr<const PackageID> &) const
337 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
338
339 /**
340 * Do we have a 'user' mask for a particular package?
341 *
342 * Returns a zero pointer if no.
343 *
344 * If the second parameter is true, return a Mask suitable for
345 * being added to an OverriddenMask.
346 *
347 * Used by PackageID implementations. Generally PackageID's masks methods
348 * should be used rather than calling this directly.
349 *
350 * \since 0.58 takes id by shared_ptr
351 */
352 virtual const std::shared_ptr<const Mask> mask_for_user(
353 const std::shared_ptr<const PackageID> &,
354 const bool will_be_used_for_overridden) const
355 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
356
357 /**
358 * Do we have a user unmask for a particular package?
359 *
360 * This is only applied to repository and profile style masks, not
361 * keywords, licences etc. If true, user_mask shouldn't be used.
362 *
363 * Used by PackageID implementations. Generally PackageID's masks methods
364 * should be used rather than calling this directly.
365 *
366 * \since 0.58 takes id by shared_ptr
367 * \since 0.60 takes optional extra reason string
368 */
369 virtual bool unmasked_by_user(
370 const std::shared_ptr<const PackageID> &,
371 const std::string &) const
372 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
373
374 ///\}
375
376 /**
377 * Select some packages.
378 */
379 virtual std::shared_ptr<PackageIDSequence> operator[] (const Selection &) const
380 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
381
382 /**
383 * Create a repository from a particular file.
384 *
385 * Does not add the repository to the Environment.
386 *
387 * This allows RepositoryRepository to add a repo config file, then
388 * sync that repo. If you aren't RepositoryRepository you shouldn't
389 * be calling this.
390 *
391 * \since 0.48
392 */
393 virtual const std::shared_ptr<Repository> repository_from_new_config_file(
394 const FSPath &) PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
395
396 ///\}
397
398 ///\name System information
399 ///\{
400
401 /**
402 * Return a collection of bashrc files to be used by the various components
403 * that are implemented in bash.
404 */
405 virtual std::shared_ptr<const FSPathSequence> bashrc_files() const
406 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
407
408 /**
409 * Return directories to search for syncer scripts.
410 */
411 virtual std::shared_ptr<const FSPathSequence> syncers_dirs() const
412 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
413
414 /**
415 * Return directories to search for fetcher scripts.
416 */
417 virtual std::shared_ptr<const FSPathSequence> fetchers_dirs() const
418 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
419
420 /**
421 * Return directories to search for hooks.
422 */
423 virtual std::shared_ptr<const FSPathSequence> hook_dirs() const
424 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
425
426 /**
427 * User name to use when reduced privs are permissible.
428 */
429 virtual std::string reduced_username() const = 0;
430
431 /**
432 * User id to use when reduced privs are permissible.
433 */
434 virtual uid_t reduced_uid() const = 0;
435
436 /**
437 * Group id to use when reduced privs are permissible.
438 */
439 virtual gid_t reduced_gid() const = 0;
440
441 /**
442 * Is the specified package Paludis?
443 *
444 * Used by InstallTask to decide whether to exec() after installing
445 * a package.
446 */
447 virtual bool is_paludis_package(const QualifiedPackageName &) const
448 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
449
450 ///\}
451
452 ///\name Mirror information
453 ///\{
454
455 /**
456 * Return the mirror URI prefixes for a named mirror.
457 */
458 virtual std::shared_ptr<const MirrorsSequence> mirrors(const std::string &) const
459 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
460
461 ///\}
462
463 ///\name Package sets
464 ///\{
465
466 /**
467 * Add a package set.
468 *
469 * Generally called by repositories, when Repository::populate_sets is called.
470 *
471 * \param base_name The basic name of the set, such as 'security'.
472 *
473 * \param combined_name The name to use for this set when combine is true, such
474 * as 'security.myrepo'. If combine is false, should be the same as base_name.
475 *
476 * \param func A function that returns the set.
477 *
478 * \param combine If true, rename the set from foo to foo.reponame, and make
479 * the foo set contain foo.reponame, along with any other repositories'
480 * sets named foo. If false, throw if the set already exists.
481 *
482 * \since 0.40
483 */
484 virtual void add_set(
485 const SetName & base_name,
486 const SetName & combined_name,
487 const std::function<std::shared_ptr<const SetSpecTree> ()> & func,
488 const bool combine) const = 0;
489
490 /**
491 * Return all known named sets.
492 */
493 virtual std::shared_ptr<const SetNameSet> set_names() const
494 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
495
496 /**
497 * Return a named set.
498 *
499 * If the named set is not known, returns a zero pointer.
500 */
501 virtual const std::shared_ptr<const SetSpecTree> set(const SetName &) const
502 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
503
504 ///\}
505
506 ///\name Hook methods
507 ///\{
508
509 /**
510 * Perform a hook.
511 *
512 * \since 0.53 takes optional_output_manager
513 */
515 const Hook &,
516 const std::shared_ptr<OutputManager> & optional_output_manager) const
517 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
518
519 ///\}
520
521 ///\name Distribution information
522 ///\{
523
524 virtual std::string distribution() const
525 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
526
527 ///\}
528
529 ///\name World and configuration functionality
530 ///\{
531
532 /**
533 * Add this package to world.
534 *
535 * \return whether anything was added \since 0.49
536 */
537 virtual bool add_to_world(const QualifiedPackageName &) const = 0;
538
539 /**
540 * Add this set to world.
541 *
542 * \return whether anything was added \since 0.49
543 */
544 virtual bool add_to_world(const SetName &) const = 0;
545
546 /**
547 * Remove this package from world, if it is present.
548 *
549 * \return whether anything was removed \since 0.49
550 */
551 virtual bool remove_from_world(const QualifiedPackageName &) const = 0;
552
553 /**
554 * Remove this set from world, if it is present.
555 *
556 * \return whether anything was removed \since 0.49
557 */
558 virtual bool remove_from_world(const SetName &) const = 0;
559
560 /**
561 * Where possible, update configuration files with the first spec to use the second package name.
562 *
563 * Does not necessarily invalidate any in-memory configuration.
564 *
565 * \since 0.48
566 */
568 const PackageDepSpec &, const QualifiedPackageName &) const = 0;
569
570 ///\}
571
572 ///\name Specific metadata keys
573 ///\{
574
575 /**
576 * The preferred_root_key, which must not be null, specifies the
577 * preferred filesystem root for actions.
578 *
579 * \since 0.54
580 */
581 virtual const std::shared_ptr<const MetadataValueKey<FSPath> > preferred_root_key() const = 0;
582
583 /**
584 * The system_root_key, which must not be null, specifies the
585 * filesystem root for dependencies etc. This is usually "/",
586 * unless something funky is going on.
587 *
588 * \since 0.55
589 */
590 virtual const std::shared_ptr<const MetadataValueKey<FSPath> > system_root_key() const = 0;
591
592 /**
593 * The format_key, if non-zero, holds our environment's format. Environment
594 * implementations should not return zero here, but clients should still
595 * check.
596 */
597 virtual const std::shared_ptr<const MetadataValueKey<std::string> > format_key() const = 0;
598
599 /**
600 * The config_location_key, if non-zero, specifies the location of the configuration file or directory,
601 * the contents of which depends on the format returned by format_key.
602 */
603 virtual const std::shared_ptr<const MetadataValueKey<FSPath> > config_location_key() const = 0;
604
605 ///\}
606
607 ///\name Output management
608 ///\{
609
610 /**
611 * Create an output manager.
612 *
613 * \since 0.36
614 */
615 virtual const std::shared_ptr<OutputManager> create_output_manager(
616 const CreateOutputManagerInfo &) const = 0;
617
618 /**
619 * Set a callback function to use when a particular event occurs.
620 *
621 * The return value can be passed to remove_notifier_callback.
622 *
623 * \since 0.40
624 */
625 virtual NotifierCallbackID add_notifier_callback(const NotifierCallbackFunction &) = 0;
626
627 /**
628 * Remove a function added with add_notifier_callback.
629 *
630 * \since 0.40
631 */
632 virtual void remove_notifier_callback(const NotifierCallbackID) = 0;
633
634 /**
635 * Trigger a notifier callback.
636 *
637 * \since 0.40
638 */
639 virtual void trigger_notifier_callback(const NotifierCallbackEvent &) const = 0;
640
641 ///\}
642
643 ///\name Repositories
644 ///\{
645
646 /**
647 * Add a repository.
648 *
649 * \since 0.61 is in Environment rather than PackageDatabase
650 *
651 * \exception DuplicateRepositoryError if a Repository with the
652 * same name as the new Repository already exists in our
653 * collection.
654 */
655 virtual void add_repository(int importance, const std::shared_ptr<Repository> &) = 0;
656
657 /**
658 * Fetch a named repository.
659 *
660 * \since 0.61 is in Environment rather than PackageDatabase
661 */
662 virtual const std::shared_ptr<const Repository> fetch_repository(const RepositoryName &) const
663 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
664
665 /**
666 * Fetch a named repository.
667 *
668 * \since 0.61 is in Environment rather than PackageDatabase
669 */
670 virtual const std::shared_ptr<Repository> fetch_repository(const RepositoryName &)
671 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
672
673 /**
674 * Do we have a named repository?
675 *
676 * \since 0.61 is in Environment rather than PackageDatabase
677 */
678 virtual bool has_repository_named(const RepositoryName &) const
679 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
680
681 /**
682 * Disambiguate a package name. If a filter is specified,
683 * limit the potential results to packages that match.
684 *
685 * \throw AmbiguousPackageNameError if there is no unambiguous
686 * disambiguation. If disambiguate is set to false, the
687 * exception will be always thrown in presence of ambiguity.
688 * \since 0.56 takes the disambiguate flag.
689 *
690 * \since 0.61 is in Environment rather than PackageDatabase
691 */
693 const PackageNamePart &, const Filter & = all_filter(), const bool disambiguate = true) const
694 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
695
696 /**
697 * Return true if the first repository is more important than the second.
698 *
699 * \since 0.61 is in Environment rather than PackageDatabase
700 */
701 virtual bool more_important_than(const RepositoryName &, const RepositoryName &) const
702 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
703
704 ///\}
705
706 ///\name Iterate over our repositories
707 ///\{
708
709 struct RepositoryConstIteratorTag;
710 typedef WrappedForwardIterator<RepositoryConstIteratorTag, const std::shared_ptr<Repository> > RepositoryConstIterator;
711
712 virtual RepositoryConstIterator begin_repositories() const
713 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
714
715 virtual RepositoryConstIterator end_repositories() const
716 PALUDIS_ATTRIBUTE((warn_unused_result)) = 0;
717
718 IteratorRange<RepositoryConstIterator> repositories() const {
719 return {begin_repositories(), end_repositories()};
720 }
721
722 ///\}
723 };
724
725 extern template class Pimp<CreateOutputManagerForRepositorySyncInfo>;
726 extern template class Pimp<CreateOutputManagerForPackageIDActionInfo>;
727 extern template class WrappedForwardIterator<Environment::RepositoryConstIteratorTag, const std::shared_ptr<Repository> >;
728 extern template class WrappedForwardIterator<AmbiguousPackageNameError::OptionsConstIteratorTag, const std::string>;
729}
730
731#endif
const std::string & name() const PALUDIS_ATTRIBUTE((warn_unused_result))
Definition create_output_manager_info.hh:48
DuplicateRepositoryError(const std::string &name) noexcept
virtual std::string reduced_username() const =0
virtual bool is_paludis_package(const QualifiedPackageName &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual const std::shared_ptr< const MetadataValueKey< FSPath > > config_location_key() const =0
virtual bool remove_from_world(const QualifiedPackageName &) const =0
virtual bool has_repository_named(const RepositoryName &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual std::shared_ptr< const FSPathSequence > fetchers_dirs() const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual bool add_to_world(const QualifiedPackageName &) const =0
virtual const std::shared_ptr< OutputManager > create_output_manager(const CreateOutputManagerInfo &) const =0
virtual bool accept_license(const std::string &, const std::shared_ptr< const PackageID > &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual const std::shared_ptr< const SetSpecTree > set(const SetName &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual const Tribool want_choice_enabled(const std::shared_ptr< const PackageID > &, const std::shared_ptr< const Choice > &, const UnprefixedChoiceName &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual const std::shared_ptr< const Set< std::string > > expand_licence(const std::string &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual QualifiedPackageName fetch_unique_qualified_package_name(const PackageNamePart &, const Filter &=all_filter(), const bool disambiguate=true) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual const std::shared_ptr< const Repository > fetch_repository(const RepositoryName &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual void add_repository(int importance, const std::shared_ptr< Repository > &)=0
virtual const std::shared_ptr< Repository > repository_from_new_config_file(const FSPath &) PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual const std::shared_ptr< const MetadataValueKey< FSPath > > system_root_key() const =0
virtual const std::shared_ptr< const Mask > mask_for_user(const std::shared_ptr< const PackageID > &, const bool will_be_used_for_overridden) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual void remove_notifier_callback(const NotifierCallbackID)=0
virtual uid_t reduced_uid() const =0
virtual std::shared_ptr< const FSPathSequence > syncers_dirs() const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual HookResult perform_hook(const Hook &, const std::shared_ptr< OutputManager > &optional_output_manager) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual void trigger_notifier_callback(const NotifierCallbackEvent &) const =0
virtual bool unmasked_by_user(const std::shared_ptr< const PackageID > &, const std::string &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual std::shared_ptr< const FSPathSequence > hook_dirs() const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual gid_t reduced_gid() const =0
virtual std::shared_ptr< const MirrorsSequence > mirrors(const std::string &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual void add_set(const SetName &base_name, const SetName &combined_name, const std::function< std::shared_ptr< const SetSpecTree >()> &func, const bool combine) const =0
virtual bool accept_keywords(const std::shared_ptr< const KeywordNameSet > &, const std::shared_ptr< const PackageID > &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual std::shared_ptr< const Set< UnprefixedChoiceName > > known_choice_value_names(const std::shared_ptr< const PackageID > &, const std::shared_ptr< const Choice > &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual bool more_important_than(const RepositoryName &, const RepositoryName &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual const std::shared_ptr< const MetadataValueKey< FSPath > > preferred_root_key() const =0
virtual const std::string value_for_choice_parameter(const std::shared_ptr< const PackageID > &, const std::shared_ptr< const Choice > &, const UnprefixedChoiceName &) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual Tribool interest_in_suggestion(const std::shared_ptr< const PackageID > &from_id, const PackageDepSpec &spec) const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual const std::shared_ptr< const MetadataValueKey< std::string > > format_key() const =0
virtual void update_config_files_for_package_move(const PackageDepSpec &, const QualifiedPackageName &) const =0
virtual NotifierCallbackID add_notifier_callback(const NotifierCallbackFunction &)=0
virtual std::shared_ptr< const SetNameSet > set_names() const PALUDIS_ATTRIBUTE((warn_unused_result))=0
virtual std::shared_ptr< const FSPathSequence > bashrc_files() const PALUDIS_ATTRIBUTE((warn_unused_result))=0
Definition fs_path.hh:34
Definition filter.hh:59
Definition hook.hh:75
Definition iterator_range.hh:29
Definition metadata_key.hh:229
const std::string & name() const
Definition environment.hh:147
RepositoryName name() const
Definition notifier_callback.hh:39
Definition output_manager.hh:30
Definition dep_spec.hh:348
Definition name.hh:112
Definition repository.hh:249
Definition selection.hh:71
Definition sequence.hh:51
Definition tribool.hh:28
Definition wrapped_forward_iterator.hh:42
WrappedValue< UnprefixedChoiceNameTag > UnprefixedChoiceName
Definition choice-fwd.hh:73
Sequence< std::string > MirrorsSequence
Definition environment-fwd.hh:41
WrappedValue< SetNameTag > SetName
Definition name-fwd.hh:131
WrappedValue< PackageNamePartTag > PackageNamePart
Definition name-fwd.hh:47
WrappedValue< RepositoryNameTag > RepositoryName
Definition name-fwd.hh:105
#define PALUDIS_ATTRIBUTE(x)
Definition attributes.hh:53
#define PALUDIS_VISIBLE
Definition attributes.hh:59
Definition about_metadata-fwd.hh:24
Definition hook.hh:62