[haiku-commits] BRANCH HaikuPM-github.package-management [b3a05ee] src/kits/package/hpkg headers/private/package/hpkg src/bin/package_repo

  • From: HaikuPM-github.package-management <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 18 Sep 2013 21:30:34 +0200 (CEST)

added 2 changesets to branch 'refs/remotes/HaikuPM-github/package-management'
old head: b162bdaf1d675cb8c1087776b371652a120cf893
new head: b3a05eede68d2b0881e5372c2002df639b2236b4
overview: https://github.com/haiku/HaikuPM/compare/b162bda...b3a05ee

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

0a345af: Separate notification from deletion in repository-handlers.
  
  * Add NotifyDone() to all repository-attribute handlers and invoke that
    to notify any listeners.
  * Unify deletion to a single implementation of Delete() in the base
    class. Before, the root handler for a repository didn't do that, but
    just triggered the notification.

b3a05ee: Fix keeping of package info during repository update.
  
  * actually write the package info read from the repository, not the one
    from the package, as the latter is missing the checksum

                                    [ Oliver Tappe <zooey@xxxxxxxxxxxxxxx> ]

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

4 files changed, 65 insertions(+), 34 deletions(-)
headers/private/package/hpkg/ReaderImplBase.h  | 29 +++++++++--
src/bin/package_repo/command_update.cpp        |  3 +-
src/kits/package/hpkg/ReaderImplBase.cpp       | 58 ++++++++++++----------
src/kits/package/hpkg/RepositoryReaderImpl.cpp |  9 +++-

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

Commit:      0a345af77e01131647b1017ee4631b602119f5c9
Author:      Oliver Tappe <zooey@xxxxxxxxxxxxxxx>
Date:        Wed Sep 18 18:20:43 2013 UTC

Separate notification from deletion in repository-handlers.

* Add NotifyDone() to all repository-attribute handlers and invoke that
  to notify any listeners.
* Unify deletion to a single implementation of Delete() in the base
  class. Before, the root handler for a repository didn't do that, but
  just triggered the notification.

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

diff --git a/headers/private/package/hpkg/ReaderImplBase.h 
b/headers/private/package/hpkg/ReaderImplBase.h
index 99bb2a3..0363749 100644
--- a/headers/private/package/hpkg/ReaderImplBase.h
+++ b/headers/private/package/hpkg/ReaderImplBase.h
@@ -243,6 +243,8 @@ public:
                                                                        const 
AttributeValue& value,
                                                                        
AttributeHandler** _handler);
 
+       virtual status_t                        
NotifyDone(AttributeHandlerContext* context);
+
        virtual status_t                        Delete(AttributeHandlerContext* 
context);
 
 protected:
@@ -256,12 +258,14 @@ class ReaderImplBase::IgnoreAttributeHandler : public 
AttributeHandler {
 
 class ReaderImplBase::PackageInfoAttributeHandlerBase
        : public AttributeHandler {
+private:
+       typedef AttributeHandler        super;
 public:
                                                                
PackageInfoAttributeHandlerBase(
                                                                        
BPackageInfoAttributeValue&
                                                                                
packageInfoValue);
 
-       virtual status_t                        Delete(AttributeHandlerContext* 
context);
+       virtual status_t                        
NotifyDone(AttributeHandlerContext* context);
 
 protected:
                        BPackageInfoAttributeValue& fPackageInfoValue;
@@ -270,6 +274,8 @@ protected:
 
 class ReaderImplBase::PackageVersionAttributeHandler
        : public PackageInfoAttributeHandlerBase {
+private:
+       typedef PackageInfoAttributeHandlerBase super;
 public:
                                                                
PackageVersionAttributeHandler(
                                                                        
BPackageInfoAttributeValue&
@@ -282,7 +288,7 @@ public:
                                                                        const 
AttributeValue& value,
                                                                        
AttributeHandler** _handler);
 
-       virtual status_t                        Delete(AttributeHandlerContext* 
context);
+       virtual status_t                        
NotifyDone(AttributeHandlerContext* context);
 
 private:
                        BPackageVersionData& fPackageVersionData;
@@ -292,6 +298,8 @@ private:
 
 class ReaderImplBase::PackageResolvableAttributeHandler
        : public PackageInfoAttributeHandlerBase {
+private:
+       typedef PackageInfoAttributeHandlerBase super;
 public:
                                                                
PackageResolvableAttributeHandler(
                                                                        
BPackageInfoAttributeValue&
@@ -306,6 +314,8 @@ public:
 
 class ReaderImplBase::PackageResolvableExpressionAttributeHandler
        : public PackageInfoAttributeHandlerBase {
+private:
+       typedef PackageInfoAttributeHandlerBase super;
 public:
                                                                
PackageResolvableExpressionAttributeHandler(
                                                                        
BPackageInfoAttributeValue&
@@ -320,6 +330,8 @@ public:
 
 class ReaderImplBase::GlobalWritableFileInfoAttributeHandler
        : public PackageInfoAttributeHandlerBase {
+private:
+       typedef PackageInfoAttributeHandlerBase super;
 public:
                                                                
GlobalWritableFileInfoAttributeHandler(
                                                                        
BPackageInfoAttributeValue&
@@ -334,6 +346,8 @@ public:
 
 class ReaderImplBase::UserSettingsFileInfoAttributeHandler
        : public PackageInfoAttributeHandlerBase {
+private:
+       typedef PackageInfoAttributeHandlerBase super;
 public:
                                                                
UserSettingsFileInfoAttributeHandler(
                                                                        
BPackageInfoAttributeValue&
@@ -348,6 +362,8 @@ public:
 
 class ReaderImplBase::UserAttributeHandler
        : public PackageInfoAttributeHandlerBase {
+private:
+       typedef PackageInfoAttributeHandlerBase super;
 public:
                                                                
UserAttributeHandler(
                                                                        
BPackageInfoAttributeValue&
@@ -358,7 +374,7 @@ public:
                                                                        const 
AttributeValue& value,
                                                                        
AttributeHandler** _handler);
 
-       virtual status_t                        Delete(AttributeHandlerContext* 
context);
+       virtual status_t                        
NotifyDone(AttributeHandlerContext* context);
 
 private:
                        Array<const char*>      fGroups;
@@ -366,6 +382,8 @@ private:
 
 
 class ReaderImplBase::PackageAttributeHandler : public AttributeHandler {
+private:
+       typedef AttributeHandler        super;
 public:
        virtual status_t                        HandleAttribute(
                                                                        
AttributeHandlerContext* context, uint8 id,
@@ -378,6 +396,8 @@ private:
 
 
 class ReaderImplBase::LowLevelAttributeHandler : public AttributeHandler {
+private:
+       typedef AttributeHandler        super;
 public:
                                                                
LowLevelAttributeHandler();
                                                                
LowLevelAttributeHandler(uint8 id,
@@ -388,7 +408,8 @@ public:
                                                                        
AttributeHandlerContext* context, uint8 id,
                                                                        const 
AttributeValue& value,
                                                                        
AttributeHandler** _handler);
-       virtual status_t                        Delete(AttributeHandlerContext* 
context);
+
+       virtual status_t                        
NotifyDone(AttributeHandlerContext* context);
 
 private:
                        void*                           fParentToken;
diff --git a/src/kits/package/hpkg/ReaderImplBase.cpp 
b/src/kits/package/hpkg/ReaderImplBase.cpp
index 957c593..af771ec 100644
--- a/src/kits/package/hpkg/ReaderImplBase.cpp
+++ b/src/kits/package/hpkg/ReaderImplBase.cpp
@@ -104,6 +104,14 @@ ReaderImplBase::AttributeHandler::HandleAttribute(
 
 
 status_t
+ReaderImplBase::AttributeHandler::NotifyDone(
+       AttributeHandlerContext* context)
+{
+       return B_OK;
+}
+
+
+status_t
 ReaderImplBase::AttributeHandler::Delete(AttributeHandlerContext* context)
 {
        delete this;
@@ -124,14 +132,12 @@ ReaderImplBase::PackageInfoAttributeHandlerBase
 
 
 status_t
-ReaderImplBase::PackageInfoAttributeHandlerBase::Delete(
+ReaderImplBase::PackageInfoAttributeHandlerBase::NotifyDone(
        AttributeHandlerContext* context)
 {
        status_t error = context->packageContentHandler->HandlePackageAttribute(
                fPackageInfoValue);
        fPackageInfoValue.Clear();
-
-       delete this;
        return error;
 }
 
@@ -143,7 +149,7 @@ 
ReaderImplBase::PackageVersionAttributeHandler::PackageVersionAttributeHandler(
        BPackageInfoAttributeValue& packageInfoValue,
        BPackageVersionData& versionData, bool notify)
        :
-       PackageInfoAttributeHandlerBase(packageInfoValue),
+       super(packageInfoValue),
        fPackageVersionData(versionData),
        fNotify(notify)
 {
@@ -187,19 +193,14 @@ 
ReaderImplBase::PackageVersionAttributeHandler::HandleAttribute(
 
 
 status_t
-ReaderImplBase::PackageVersionAttributeHandler::Delete(
+ReaderImplBase::PackageVersionAttributeHandler::NotifyDone(
        AttributeHandlerContext* context)
 {
-       status_t error = B_OK;
-       if (fNotify) {
-               fPackageInfoValue.attributeID = B_PACKAGE_INFO_VERSION;
-               error = context->packageContentHandler->HandlePackageAttribute(
-                       fPackageInfoValue);
-               fPackageInfoValue.Clear();
-       }
+       if (!fNotify)
+               return B_OK;
 
-       delete this;
-       return error;
+       fPackageInfoValue.attributeID = B_PACKAGE_INFO_VERSION;
+       return super::NotifyDone(context);
 }
 
 
@@ -210,7 +211,7 @@ ReaderImplBase::PackageResolvableAttributeHandler
        ::PackageResolvableAttributeHandler(
                BPackageInfoAttributeValue& packageInfoValue)
        :
-       PackageInfoAttributeHandlerBase(packageInfoValue)
+       super(packageInfoValue)
 {
 }
 
@@ -268,7 +269,7 @@ ReaderImplBase::PackageResolvableExpressionAttributeHandler
        ::PackageResolvableExpressionAttributeHandler(
                BPackageInfoAttributeValue& packageInfoValue)
        :
-       PackageInfoAttributeHandlerBase(packageInfoValue)
+       super(packageInfoValue)
 {
 }
 
@@ -328,7 +329,7 @@ ReaderImplBase::GlobalWritableFileInfoAttributeHandler
        ::GlobalWritableFileInfoAttributeHandler(
                BPackageInfoAttributeValue& packageInfoValue)
        :
-       PackageInfoAttributeHandlerBase(packageInfoValue)
+       super(packageInfoValue)
 {
 }
 
@@ -378,7 +379,7 @@ ReaderImplBase::UserSettingsFileInfoAttributeHandler
        ::UserSettingsFileInfoAttributeHandler(
                BPackageInfoAttributeValue& packageInfoValue)
        :
-       PackageInfoAttributeHandlerBase(packageInfoValue)
+       super(packageInfoValue)
 {
 }
 
@@ -419,7 +420,7 @@ 
ReaderImplBase::UserSettingsFileInfoAttributeHandler::HandleAttribute(
 ReaderImplBase::UserAttributeHandler::UserAttributeHandler(
                BPackageInfoAttributeValue& packageInfoValue)
        :
-       PackageInfoAttributeHandlerBase(packageInfoValue),
+       super(packageInfoValue),
        fGroups()
 {
 }
@@ -464,14 +465,15 @@ ReaderImplBase::UserAttributeHandler::HandleAttribute(
 
 
 status_t
-ReaderImplBase::UserAttributeHandler::Delete(AttributeHandlerContext* context)
+ReaderImplBase::UserAttributeHandler::NotifyDone(
+       AttributeHandlerContext* context)
 {
        if (!fGroups.IsEmpty()) {
                fPackageInfoValue.user.groups = fGroups.Elements();
                fPackageInfoValue.user.groupCount = fGroups.Count();
        }
 
-       return PackageInfoAttributeHandlerBase::Delete(context);
+       return super::NotifyDone(context);
 }
 
 
@@ -740,17 +742,16 @@ ReaderImplBase::LowLevelAttributeHandler::HandleAttribute(
 
 
 status_t
-ReaderImplBase::LowLevelAttributeHandler::Delete(
+ReaderImplBase::LowLevelAttributeHandler::NotifyDone(
        AttributeHandlerContext* context)
 {
-       status_t error = B_OK;
        if (fID != B_HPKG_ATTRIBUTE_ID_ENUM_COUNT) {
-               error = context->lowLevelHandler->HandleAttributeDone(
+               status_t error = context->lowLevelHandler->HandleAttributeDone(
                        (BHPKGAttributeID)fID, fValue, fParentToken, fToken);
+               if (error != B_OK)
+                       return error;
        }
-
-       delete this;
-       return error;
+       return super::NotifyDone(context);
 }
 
 
@@ -1082,6 +1083,9 @@ 
ReaderImplBase::_ParseAttributeTree(AttributeHandlerContext* context)
 
                if (tag == 0) {
                        AttributeHandler* handler = PopAttributeHandler();
+                       error = handler->NotifyDone(context);
+                       if (error != B_OK)
+                               return error;
                        if (level-- == 0)
                                return B_OK;
 
diff --git a/src/kits/package/hpkg/RepositoryReaderImpl.cpp 
b/src/kits/package/hpkg/RepositoryReaderImpl.cpp
index 51abf48..4758782 100644
--- a/src/kits/package/hpkg/RepositoryReaderImpl.cpp
+++ b/src/kits/package/hpkg/RepositoryReaderImpl.cpp
@@ -45,6 +45,8 @@ static const size_t kMaxPackageAttributesSize = 64 * 1024 * 
1024;
 
 class RepositoryReaderImpl::PackagesAttributeHandler
        : public AttributeHandler {
+private:
+       typedef AttributeHandler super;
 public:
        PackagesAttributeHandler(BRepositoryContentHandler* contentHandler)
                :
@@ -92,9 +94,12 @@ public:
                return B_OK;
        }
 
-       virtual status_t Delete(AttributeHandlerContext* context)
+       virtual status_t NotifyDone(AttributeHandlerContext* context)
        {
-               return _NotifyPackageDone();
+               status_t result = _NotifyPackageDone();
+               if (result == B_OK)
+                       result = super::NotifyDone(context);
+               return result;
        }
 
 private:

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

Commit:      b3a05eede68d2b0881e5372c2002df639b2236b4
Author:      Oliver Tappe <zooey@xxxxxxxxxxxxxxx>
Date:        Wed Sep 18 19:15:26 2013 UTC

Fix keeping of package info during repository update.

* actually write the package info read from the repository, not the one
  from the package, as the latter is missing the checksum

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

diff --git a/src/bin/package_repo/command_update.cpp 
b/src/bin/package_repo/command_update.cpp
index 790041c..3dccbb3 100644
--- a/src/bin/package_repo/command_update.cpp
+++ b/src/bin/package_repo/command_update.cpp
@@ -324,7 +324,8 @@ command_update(int argc, const char* const* argv)
                PackageInfos::iterator infoIter = 
packageInfos.find(packageInfo);
                if (infoIter != packageInfos.end()) {
                        infoIter->second = true;
-                       if ((result = 
repositoryWriter.AddPackageInfo(packageInfo)) != B_OK)
+                       if ((result = 
repositoryWriter.AddPackageInfo(infoIter->first))
+                                       != B_OK)
                                return 1;
                        if (verbose) {
                                printf("keeping '%s-%s'\n", 
infoIter->first.Name().String(),


Other related posts:

  • » [haiku-commits] BRANCH HaikuPM-github.package-management [b3a05ee] src/kits/package/hpkg headers/private/package/hpkg src/bin/package_repo - HaikuPM-github . package-management