[haiku-commits] haiku: hrev47205 - in src: servers/package kits/package

  • From: ingo_weinhold@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 5 May 2014 21:29:53 +0200 (CEST)

hrev47205 adds 2 changesets to branch 'master'
old head: 7fa8b5538c4fae4bbd08664c664ba4d8838e9868
new head: e9eb4df71b2449801d45609cc84d7ab2947a0a27
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=e9eb4df+%5E7fa8b55

----------------------------------------------------------------------------

c2f3b81: package daemon: Fix manual package [de/]activation
  
  CommitTransactionHandler: Since the VolumeState is now always copied
  (including the contained packages), we can't just use the passed in
  packagesAlready{Added,Removed} sets, since they refer to the original
  packages.

e9eb4df: BDaemonClient: Handle options message fields correctly

                                    [ Ingo Weinhold <ingo_weinhold@xxxxxx> ]

----------------------------------------------------------------------------

4 files changed, 64 insertions(+), 41 deletions(-)
src/kits/package/DaemonClient.cpp                | 16 ++++--
src/servers/package/CommitTransactionHandler.cpp | 53 +++++++++++++-------
src/servers/package/CommitTransactionHandler.h   | 16 +++---
src/servers/package/Volume.cpp                   | 20 ++++----

############################################################################

Commit:      c2f3b81d45f9f1a2a891813f9499818b1d72515e
URL:         http://cgit.haiku-os.org/haiku/commit/?id=c2f3b81
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Mon May  5 19:18:44 2014 UTC

package daemon: Fix manual package [de/]activation

CommitTransactionHandler: Since the VolumeState is now always copied
(including the contained packages), we can't just use the passed in
packagesAlready{Added,Removed} sets, since they refer to the original
packages.

----------------------------------------------------------------------------

diff --git a/src/servers/package/CommitTransactionHandler.cpp 
b/src/servers/package/CommitTransactionHandler.cpp
index 7edec19..a7394b5 100644
--- a/src/servers/package/CommitTransactionHandler.cpp
+++ b/src/servers/package/CommitTransactionHandler.cpp
@@ -33,20 +33,18 @@ using namespace BPackageKit::BPrivate;
 
 
 CommitTransactionHandler::CommitTransactionHandler(Volume* volume,
-       PackageFileManager* packageFileManager, VolumeState* volumeState,
-       bool isActiveVolumeState, const PackageSet& packagesAlreadyAdded,
-       const PackageSet& packagesAlreadyRemoved)
+       PackageFileManager* packageFileManager)
        :
        fVolume(volume),
        fPackageFileManager(packageFileManager),
-       fVolumeState(volumeState->Clone()),
-       fVolumeStateIsActive(isActiveVolumeState),
+       fVolumeState(NULL),
+       fVolumeStateIsActive(false),
        fPackagesToActivate(),
        fPackagesToDeactivate(),
        fAddedPackages(),
        fRemovedPackages(),
-       fPackagesAlreadyAdded(packagesAlreadyAdded),
-       fPackagesAlreadyRemoved(packagesAlreadyRemoved),
+       fPackagesAlreadyAdded(),
+       fPackagesAlreadyRemoved(),
        fOldStateDirectory(),
        fOldStateDirectoryRef(),
        fOldStateDirectoryName(),
@@ -77,6 +75,31 @@ CommitTransactionHandler::~CommitTransactionHandler()
 
 
 void
+CommitTransactionHandler::Init(VolumeState* volumeState,
+       bool isActiveVolumeState, const PackageSet& packagesAlreadyAdded,
+       const PackageSet& packagesAlreadyRemoved)
+{
+       fVolumeState = volumeState->Clone();
+       if (fVolumeState == NULL)
+               throw std::bad_alloc();
+
+       fVolumeStateIsActive = isActiveVolumeState;
+
+       for (PackageSet::const_iterator it = packagesAlreadyAdded.begin();
+                       it != packagesAlreadyAdded.end(); ++it) {
+               Package* package = fVolumeState->FindPackage((*it)->FileName());
+               fPackagesAlreadyAdded.insert(package);
+       }
+
+       for (PackageSet::const_iterator it = packagesAlreadyRemoved.begin();
+                       it != packagesAlreadyRemoved.end(); ++it) {
+               Package* package = fVolumeState->FindPackage((*it)->FileName());
+               fPackagesAlreadyRemoved.insert(package);
+       }
+}
+
+
+void
 CommitTransactionHandler::HandleRequest(BMessage* request, BMessage* reply)
 {
        status_t error;
@@ -118,20 +141,15 @@ CommitTransactionHandler::HandleRequest(
 
 
 void
-CommitTransactionHandler::HandleRequest(const PackageSet& packagesAdded,
-       const PackageSet& packagesRemoved)
+CommitTransactionHandler::HandleRequest()
 {
-       // Copy package sets to fPackagesToActivate/fPackagesToDeactivate. The
-       // given sets are assumed to be identical to the ones specified in the
-       // constructor invocation (fPackagesAlreadyAdded,
-       // fPackagesAlreadyRemoved).
-       for (PackageSet::const_iterator it = packagesAdded.begin();
-               it != packagesAdded.end(); ++it) {
+       for (PackageSet::const_iterator it = fPackagesAlreadyAdded.begin();
+               it != fPackagesAlreadyAdded.end(); ++it) {
                if (!fPackagesToActivate.AddItem(*it))
                        throw std::bad_alloc();
        }
 
-       fPackagesToDeactivate = packagesRemoved;
+       fPackagesToDeactivate = fPackagesAlreadyRemoved;
 
        _ApplyChanges(NULL);
 }
@@ -263,9 +281,6 @@ CommitTransactionHandler::_ReadPackagesToActivate(
 void
 CommitTransactionHandler::_ApplyChanges(BMessage* reply)
 {
-       if (fVolumeState == NULL)
-               throw std::bad_alloc();
-
        // create an old state directory
        _CreateOldStateDirectory(reply);
 
diff --git a/src/servers/package/CommitTransactionHandler.h 
b/src/servers/package/CommitTransactionHandler.h
index ce30f92..e16d18d 100644
--- a/src/servers/package/CommitTransactionHandler.h
+++ b/src/servers/package/CommitTransactionHandler.h
@@ -25,20 +25,22 @@ typedef std::set<std::string> StringSet;
 class CommitTransactionHandler {
 public:
                                                                
CommitTransactionHandler(Volume* volume,
-                                                                       
PackageFileManager* packageFileManager,
-                                                                       
VolumeState* volumeState,
+                                                                       
PackageFileManager* packageFileManager);
+                                                               
~CommitTransactionHandler();
+
+                       void                            Init(VolumeState* 
volumeState,
                                                                        bool 
isActiveVolumeState,
                                                                        const 
PackageSet& packagesAlreadyAdded,
                                                                        const 
PackageSet& packagesAlreadyRemoved);
-                                                               
~CommitTransactionHandler();
 
                        void                            HandleRequest(BMessage* 
request,
                                                                        
BMessage* reply);
                        void                            HandleRequest(
                                                                        const 
BActivationTransaction& transaction,
                                                                        
BMessage* reply);
-                       void                            HandleRequest(const 
PackageSet& packagesAdded,
-                                                                       const 
PackageSet& packagesRemoved);
+                       void                            HandleRequest();
+                                                                       // uses 
packagesAlreadyAdded and
+                                                                       // 
packagesAlreadyRemoved from Init()
 
                        void                            Revert();
 
@@ -145,8 +147,8 @@ private:
                        PackageSet                      fPackagesToDeactivate;
                        PackageSet                      fAddedPackages;
                        PackageSet                      fRemovedPackages;
-                       const PackageSet&       fPackagesAlreadyAdded;
-                       const PackageSet&       fPackagesAlreadyRemoved;
+                       PackageSet                      fPackagesAlreadyAdded;
+                       PackageSet                      fPackagesAlreadyRemoved;
                        BDirectory                      fOldStateDirectory;
                        node_ref                        fOldStateDirectoryRef;
                        BString                         fOldStateDirectoryName;
diff --git a/src/servers/package/Volume.cpp b/src/servers/package/Volume.cpp
index 97a79e2..19044cf 100644
--- a/src/servers/package/Volume.cpp
+++ b/src/servers/package/Volume.cpp
@@ -526,11 +526,11 @@ Volume::HandleCommitTransactionRequest(BMessage* message)
                return;
 
        // perform the request
-       PackageSet dummy;
-       CommitTransactionHandler handler(this, fPackageFileManager, 
fLatestState,
-               fLatestState == fActiveState, dummy, dummy);
+       CommitTransactionHandler handler(this, fPackageFileManager);
        int32 error;
        try {
+               PackageSet dummy;
+               handler.Init(fLatestState, fLatestState == fActiveState, dummy, 
dummy);
                handler.HandleRequest(message, &reply);
                _SetLatestState(handler.DetachVolumeState(),
                        handler.IsActiveVolumeState());
@@ -709,12 +709,12 @@ Volume::ProcessPendingPackageActivationChanges()
                return;
 
        // perform the request
-       CommitTransactionHandler handler(this, fPackageFileManager, 
fLatestState,
-               fLatestState == fActiveState, fPackagesToBeActivated,
-               fPackagesToBeDeactivated);
+       CommitTransactionHandler handler(this, fPackageFileManager);
        int32 error;
        try {
-               handler.HandleRequest(fPackagesToBeActivated, 
fPackagesToBeDeactivated);
+               handler.Init(fLatestState, fLatestState == fActiveState,
+                       fPackagesToBeActivated, fPackagesToBeDeactivated);
+               handler.HandleRequest();
                _SetLatestState(handler.DetachVolumeState(),
                        handler.IsActiveVolumeState());
                error = B_DAEMON_OK;
@@ -797,11 +797,11 @@ Volume::CommitTransaction(const BActivationTransaction& 
transaction,
        BDaemonClient::BCommitTransactionResult& _result)
 {
        // perform the request
-       CommitTransactionHandler handler(this, fPackageFileManager, 
fLatestState,
-               fLatestState == fActiveState, packagesAlreadyAdded,
-               packagesAlreadyRemoved);
+       CommitTransactionHandler handler(this, fPackageFileManager);
        int32 error;
        try {
+               handler.Init(fLatestState, fLatestState == fActiveState,
+                       packagesAlreadyAdded, packagesAlreadyRemoved);
                handler.HandleRequest(transaction, NULL);
                _SetLatestState(handler.DetachVolumeState(),
                        handler.IsActiveVolumeState());

############################################################################

Revision:    hrev47205
Commit:      e9eb4df71b2449801d45609cc84d7ab2947a0a27
URL:         http://cgit.haiku-os.org/haiku/commit/?id=e9eb4df
Author:      Ingo Weinhold <ingo_weinhold@xxxxxx>
Date:        Mon May  5 19:28:28 2014 UTC

BDaemonClient: Handle options message fields correctly

----------------------------------------------------------------------------

diff --git a/src/kits/package/DaemonClient.cpp 
b/src/kits/package/DaemonClient.cpp
index 0e7a44d..6aacffc 100644
--- a/src/kits/package/DaemonClient.cpp
+++ b/src/kits/package/DaemonClient.cpp
@@ -63,11 +63,9 @@ BDaemonClient::GetInstallationLocationInfo(
        int64 baseDirectoryNode;
        int32 packagesDirectoryDevice;
        int64 packagesDirectoryNode;
-       BString oldStateName;
        int64 changeCount;
        BPackageInfoSet latestActivePackages;
        BPackageInfoSet latestInactivePackages;
-       BPackageInfoSet currentlyActivePackages;
        if ((error = reply.FindInt32("base directory device", 
&baseDirectoryDevice))
                        != B_OK
                || (error = reply.FindInt64("base directory node", 
&baseDirectoryNode))
@@ -80,13 +78,21 @@ BDaemonClient::GetInstallationLocationInfo(
                        latestActivePackages)) != B_OK
                || (error = _ExtractPackageInfoSet(reply, "latest inactive 
packages",
                        latestInactivePackages)) != B_OK
-               || (error = _ExtractPackageInfoSet(reply, "currently active 
packages",
-                       currentlyActivePackages)) != B_OK
-               || (error = reply.FindString("old state", &oldStateName)) != 
B_OK
                || (error = reply.FindInt64("change count", &changeCount)) != 
B_OK) {
                return error;
        }
 
+       BPackageInfoSet currentlyActivePackages;
+       error = _ExtractPackageInfoSet(reply, "currently active packages",
+               currentlyActivePackages);
+       if (error != B_OK && error != B_NAME_NOT_FOUND)
+               return error;
+
+       BString oldStateName;
+       error = reply.FindString("old state", &oldStateName);
+       if (error != B_OK && error != B_NAME_NOT_FOUND)
+               return error;
+
        _info.Unset();
        _info.SetLocation(location);
        _info.SetBaseDirectoryRef(node_ref(baseDirectoryDevice, 
baseDirectoryNode));


Other related posts:

  • » [haiku-commits] haiku: hrev47205 - in src: servers/package kits/package - ingo_weinhold