apt 3.0.3
commandline package manager
policy.h
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
3/* ######################################################################
4
5 Package Version Policy implementation
6
7 This implements the more advanced 'Version 4' APT policy engine. The
8 standard 'Version 0' engine is included inside the DepCache which is
9 it's historical location.
10
11 The V4 engine allows the user to completely control all aspects of
12 version selection. There are three primary means to choose a version
13 * Selection by version match
14 * Selection by Release file match
15 * Selection by origin server
16
17 Each package may be 'pinned' with a single criteria, which will ultimately
18 result in the selection of a single version, or no version, for each
19 package.
20
21 Furthermore, the default selection can be influenced by specifying
22 the ordering of package files. The order is derived by reading the
23 package file preferences and assigning a priority to each package
24 file.
25
26 A special flag may be set to indicate if no version should be returned
27 if no matching versions are found, otherwise the default matching
28 rules are used to locate a hit.
29
30 ##################################################################### */
31 /*}}}*/
32#ifndef PKGLIB_POLICY_H
33#define PKGLIB_POLICY_H
34
35#include <apt-pkg/depcache.h>
36#include <apt-pkg/pkgcache.h>
37#include <apt-pkg/versionmatch.h>
38
39#include <memory>
40#include <string>
41#include <vector>
42
43
44class APT_PUBLIC pkgPolicy : public pkgDepCache::Policy
45{
46 protected:
47
48 struct Pin
49 {
50 pkgVersionMatch::MatchType Type;
51 std::string Data;
52 signed short Priority;
53 Pin() : Type(pkgVersionMatch::None), Priority(0) {};
54 };
55
56 struct PkgPin : Pin
57 {
58 std::string Pkg;
59 explicit PkgPin(std::string const &Pkg) : Pin(), Pkg(Pkg) {};
60 };
61
62 std::unique_ptr<Pin[]> SrcVerPins;
63 std::unique_ptr<Pin[]> VerPins;
64 std::unique_ptr<signed short[]> PFPriority;
65 std::vector<Pin> Defaults;
66 std::vector<PkgPin> Unmatched;
67 pkgCache *Cache;
68 bool StatusOverride;
69
70 public:
71
72 // Things for manipulating pins
73 void CreatePin(pkgVersionMatch::MatchType Type,std::string Pkg,
74 std::string Data,signed short Priority);
75
76 // Things for the cache interface.
77 pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator const &Pkg) override;
78 signed short GetPriority(pkgCache::VerIterator const &Ver, bool ConsiderFiles = true) override;
79 signed short GetPriority(pkgCache::PkgFileIterator const &File) override;
80
81 void SetPriority(pkgCache::VerIterator const &Ver, signed short Priority);
82 void SetPriority(pkgCache::PkgFileIterator const &File, signed short Priority);
83 bool InitDefaults();
84
85 explicit pkgPolicy(pkgCache *Owner);
86 virtual ~pkgPolicy();
87 private:
88 struct Private;
89 std::unique_ptr<Private> const d;
90};
91
92APT_PUBLIC bool ReadPinFile(pkgPolicy &Plcy, std::string File = "");
93APT_PUBLIC bool ReadPinDir(pkgPolicy &Plcy, std::string Dir = "");
94
95#endif
Definition cacheiterators.h:47
Definition depcache.h:250
Definition policy.h:45
pkgCache - Structure definitions for the cache file
Definition policy.h:49
Definition policy.h:57
Definition policy.cc:47