summaryrefslogtreecommitdiff
path: root/apt-pkg
diff options
context:
space:
mode:
Diffstat (limited to 'apt-pkg')
-rw-r--r--apt-pkg/depcache.cc3
-rw-r--r--apt-pkg/packagemanager.cc18
-rw-r--r--apt-pkg/packagemanager.h36
3 files changed, 36 insertions, 21 deletions
diff --git a/apt-pkg/depcache.cc b/apt-pkg/depcache.cc
index c490d89bc..269fe8543 100644
--- a/apt-pkg/depcache.cc
+++ b/apt-pkg/depcache.cc
@@ -140,7 +140,8 @@ bool pkgDepCache::readStateFile(OpProgress *Prog)
bool pkgDepCache::writeStateFile(OpProgress *prog)
{
- // write the auto-mark list ----------------------------------
+ // FIXME: this function needs to be called inside the commit()
+ // of the package manager. so after
FileFd StateFile;
string state = _config->FindDir("Dir::State") + "pkgstates";
diff --git a/apt-pkg/packagemanager.cc b/apt-pkg/packagemanager.cc
index a97c94fdf..71a0dd034 100644
--- a/apt-pkg/packagemanager.cc
+++ b/apt-pkg/packagemanager.cc
@@ -627,21 +627,3 @@ pkgPackageManager::OrderResult pkgPackageManager::OrderInstall()
return Completed;
}
/*}}}*/
-// PM::DoInstall - Does the installation /*{{{*/
-// ---------------------------------------------------------------------
-/* This uses the filenames in FileNames and the information in the
- DepCache to perform the installation of packages.*/
-pkgPackageManager::OrderResult pkgPackageManager::DoInstall()
-{
- OrderResult Res = OrderInstall();
- if (Res != Failed)
- if (Go() == false)
- return Failed;
-
- // if all was fine update the state file
- if(Res == Completed)
- Cache.writeStateFile(NULL);
-
- return Res;
-}
- /*}}}*/
diff --git a/apt-pkg/packagemanager.h b/apt-pkg/packagemanager.h
index 43f2c4ace..da1f21e6c 100644
--- a/apt-pkg/packagemanager.h
+++ b/apt-pkg/packagemanager.h
@@ -29,6 +29,7 @@
#include <string>
#include <apt-pkg/pkgcache.h>
+#include <apt-pkg/depcache.h>
using std::string;
@@ -70,13 +71,44 @@ class pkgPackageManager : protected pkgCache::Namespace
virtual bool Remove(PkgIterator /*Pkg*/,bool /*Purge*/=false) {return false;};
virtual bool Go(int statusFd=-1) {return true;};
virtual void Reset() {};
-
+
+ // the result of the operation
+ OrderResult Res;
+
public:
// Main action members
bool GetArchives(pkgAcquire *Owner,pkgSourceList *Sources,
pkgRecords *Recs);
- OrderResult DoInstall();
+
+ // Do the installation
+ OrderResult DoInstall() {
+ if(DoInstallPreFork() == Failed)
+ return Failed;
+
+ return DoInstallPostFork();
+ }
+
+ // stuff that needs to be done before the fork() of a library that
+ // uses apt
+ OrderResult DoInstallPreFork() {
+ Res = OrderInstall();
+ return Res;
+ };
+
+ // stuff that needs to be done after the fork
+ OrderResult DoInstallPostFork(int statusFd=-1) {
+ bool goResult = Go(statusFd);
+ if(goResult == false)
+ return Failed;
+
+ // if all was fine update the state file
+ if(Res == Completed)
+ Cache.writeStateFile(NULL);
+
+ return Res;
+ };
+
bool FixMissing();
pkgPackageManager(pkgDepCache *Cache);