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(),