apt  0.9.7.5ubuntu1
policy.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: policy.h,v 1.4 2001/05/07 04:24:08 jgg Exp $
4 /* ######################################################################
5 
6  Package Version Policy implementation
7 
8  This implements the more advanced 'Version 4' APT policy engine. The
9  standard 'Version 0' engine is included inside the DepCache which is
10  it's historical location.
11 
12  The V4 engine allows the user to completly control all aspects of
13  version selection. There are three primary means to choose a version
14  * Selection by version match
15  * Selection by Release file match
16  * Selection by origin server
17 
18  Each package may be 'pinned' with a single criteria, which will ultimately
19  result in the selection of a single version, or no version, for each
20  package.
21 
22  Furthermore, the default selection can be influenced by specifying
23  the ordering of package files. The order is derived by reading the
24  package file preferences and assigning a priority to each package
25  file.
26 
27  A special flag may be set to indicate if no version should be returned
28  if no matching versions are found, otherwise the default matching
29  rules are used to locate a hit.
30 
31  ##################################################################### */
32  /*}}}*/
33 #ifndef PKGLIB_POLICY_H
34 #define PKGLIB_POLICY_H
35 
36 
37 #include <apt-pkg/depcache.h>
38 #include <apt-pkg/versionmatch.h>
39 #include <vector>
40 
41 #ifndef APT_8_CLEANER_HEADERS
42 using std::vector;
43 #endif
44 
46 {
47  protected:
48 
49  struct Pin
50  {
51  pkgVersionMatch::MatchType Type;
52  std::string Data;
53  signed short Priority;
54  Pin() : Type(pkgVersionMatch::None), Priority(0) {};
55  };
56 
57  struct PkgPin : Pin
58  {
59  std::string Pkg;
60  PkgPin(std::string const &Pkg) : Pin(), Pkg(Pkg) {};
61  };
62 
63  Pin *Pins;
64  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  pkgCache::VerIterator GetMatch(pkgCache::PkgIterator const &Pkg);
76 
77  // Things for the cache interface.
78  virtual pkgCache::VerIterator GetCandidateVer(pkgCache::PkgIterator const &Pkg);
79  virtual signed short GetPriority(pkgCache::PkgIterator const &Pkg);
80  virtual signed short GetPriority(pkgCache::PkgFileIterator const &File);
81 
82  bool InitDefaults();
83 
84  pkgPolicy(pkgCache *Owner);
85  virtual ~pkgPolicy() {delete [] PFPriority; delete [] Pins;};
86 };
87 
88 bool ReadPinFile(pkgPolicy &Plcy, std::string File = "");
89 bool ReadPinDir(pkgPolicy &Plcy, std::string Dir = "");
90 
91 #endif