apt  0.9.7.7
dpkgpm.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: dpkgpm.h,v 1.8 2001/05/07 05:05:13 jgg Exp $
4 /* ######################################################################
5 
6  DPKG Package Manager - Provide an interface to dpkg
7 
8  ##################################################################### */
9  /*}}}*/
10 #ifndef PKGLIB_DPKGPM_H
11 #define PKGLIB_DPKGPM_H
12 
13 #include <apt-pkg/packagemanager.h>
14 #include <vector>
15 #include <map>
16 #include <stdio.h>
17 
18 #ifndef APT_8_CLEANER_HEADERS
19 using std::vector;
20 using std::map;
21 #endif
22 
23 class pkgDPkgPMPrivate;
24 
26 {
27  private:
29 
43  void handleDisappearAction(std::string const &pkgname);
44 
45  protected:
46  int pkgFailures;
47 
48  // progress reporting
49  struct DpkgState
50  {
51  const char *state; // the dpkg state (e.g. "unpack")
52  const char *str; // the human readable translation of the state
53  };
54 
55  // the dpkg states that the pkg will run through, the string is
56  // the package, the vector contains the dpkg states that the package
57  // will go through
58  std::map<std::string,std::vector<struct DpkgState> > PackageOps;
59  // the dpkg states that are already done; the string is the package
60  // the int is the state that is already done (e.g. a package that is
61  // going to be install is already in state "half-installed")
62  std::map<std::string,unsigned int> PackageOpsDone;
63 
64  // progress reporting
65  unsigned int PackagesDone;
66  unsigned int PackagesTotal;
67 
68  struct Item
69  {
70  enum Ops {Install, Configure, Remove, Purge, ConfigurePending, TriggersPending} Op;
71  std::string File;
72  PkgIterator Pkg;
73  Item(Ops Op,PkgIterator Pkg,std::string File = "") : Op(Op),
74  File(File), Pkg(Pkg) {};
75  Item() {};
76 
77  };
78  std::vector<Item> List;
79 
80  // Helpers
81  bool RunScriptsWithPkgs(const char *Cnf);
82  bool SendV2Pkgs(FILE *F);
83  void WriteHistoryTag(std::string const &tag, std::string value);
84 
85  // apport integration
86  void WriteApportReport(const char *pkgpath, const char *errormsg);
87 
88  // dpkg log
89  bool OpenLog();
90  bool CloseLog();
91 
92  // input processing
93  void DoStdin(int master);
94  void DoTerminalPty(int master);
95  void DoDpkgStatusFd(int statusfd, int OutStatusFd);
96  void ProcessDpkgStatusLine(int OutStatusFd, char *line);
97 
98  // The Actuall installation implementation
99  virtual bool Install(PkgIterator Pkg,std::string File);
100  virtual bool Configure(PkgIterator Pkg);
101  virtual bool Remove(PkgIterator Pkg,bool Purge = false);
102  virtual bool Go(int StatusFd=-1);
103  virtual void Reset();
104 
105  public:
106 
107  pkgDPkgPM(pkgDepCache *Cache);
108  virtual ~pkgDPkgPM();
109 };
110 
111 void SigINT(int sig);
112 
113 #endif