From eee422752c6de8ab971937a81225008d254ad785 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Sat, 14 Jun 2014 19:06:11 +0200 Subject: [PATCH] BPackageManager: Make BCommitTransactionResult available * BFatalErrorException: Add commitTransactionResult property and respective constructor. In case committing the transaction failed, BPackageManager throws a BFatalErrorException with the result. * BFatalErrorException::UserInteractionHandler: Pass BCommitTransactionResult to ProgressTransactionCommitted(). --- headers/private/package/manager/Exceptions.h | 12 +++++++- .../private/package/manager/PackageManager.h | 8 ++++-- src/apps/haikudepot/PackageManager.cpp | 2 +- src/apps/haikudepot/PackageManager.h | 3 +- src/bin/pkgman/PackageManager.cpp | 7 +++-- src/bin/pkgman/PackageManager.h | 4 +-- src/kits/package/manager/Exceptions.cpp | 28 ++++++++++++++++--- src/kits/package/manager/PackageManager.cpp | 10 +++---- src/servers/package/PackageManager.cpp | 2 +- src/servers/package/PackageManager.h | 2 +- 10 files changed, 56 insertions(+), 22 deletions(-) diff --git a/headers/private/package/manager/Exceptions.h b/headers/private/package/manager/Exceptions.h index beb204fa37..0db85dfb7c 100644 --- a/headers/private/package/manager/Exceptions.h +++ b/headers/private/package/manager/Exceptions.h @@ -1,5 +1,5 @@ /* - * Copyright 2013, Haiku, Inc. All Rights Reserved. + * Copyright 2013-2014, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -9,6 +9,7 @@ #define _PACKAGE__MANAGER__PRIVATE__EXCEPTIONS_H_ +#include #include @@ -38,6 +39,8 @@ public: BFatalErrorException(const char* format, ...); BFatalErrorException(status_t error, const char* format, ...); + BFatalErrorException( + const BCommitTransactionResult& result); const BString& Details() const { return fDetails; } @@ -46,9 +49,16 @@ public: status_t Error() const { return fError; } + bool HasCommitTransactionFailed() const + { return fCommitTransactionFailed; } + const BCommitTransactionResult& CommitTransactionResult() const + { return fCommitTransactionResult; } + private: BString fDetails; status_t fError; + BCommitTransactionResult fCommitTransactionResult; + bool fCommitTransactionFailed; }; diff --git a/headers/private/package/manager/PackageManager.h b/headers/private/package/manager/PackageManager.h index 549c604f56..a693f08ffe 100644 --- a/headers/private/package/manager/PackageManager.h +++ b/headers/private/package/manager/PackageManager.h @@ -1,5 +1,5 @@ /* - * Copyright 2013, Haiku, Inc. All Rights Reserved. + * Copyright 2013-2014, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -26,6 +26,10 @@ namespace BPackageKit { + +class BCommitTransactionResult; + + namespace BManager { namespace BPrivate { @@ -281,7 +285,7 @@ public: InstalledRepository& repository); virtual void ProgressTransactionCommitted( InstalledRepository& repository, - const char* transactionDirectoryName); + const BCommitTransactionResult& result); virtual void ProgressApplyingChangesDone( InstalledRepository& repository); }; diff --git a/src/apps/haikudepot/PackageManager.cpp b/src/apps/haikudepot/PackageManager.cpp index b9b1226848..42008997d8 100644 --- a/src/apps/haikudepot/PackageManager.cpp +++ b/src/apps/haikudepot/PackageManager.cpp @@ -492,7 +492,7 @@ PackageManager::ProgressStartApplyingChanges(InstalledRepository& repository) void PackageManager::ProgressTransactionCommitted(InstalledRepository& repository, - const char* transactionDirectoryName) + const BCommitTransactionResult& result) { // TODO: implement } diff --git a/src/apps/haikudepot/PackageManager.h b/src/apps/haikudepot/PackageManager.h index d9035ea471..f56a07105c 100644 --- a/src/apps/haikudepot/PackageManager.h +++ b/src/apps/haikudepot/PackageManager.h @@ -29,6 +29,7 @@ class ProblemWindow; class ResultWindow; +using BPackageKit::BCommitTransactionResult; using BPackageKit::BContext; using BPackageKit::BPackageInstallationLocation; using BPackageKit::BRepositoryConfig; @@ -107,7 +108,7 @@ private: InstalledRepository& repository); virtual void ProgressTransactionCommitted( InstalledRepository& repository, - const char* transactionDirectoryName); + const BCommitTransactionResult& result); virtual void ProgressApplyingChangesDone( InstalledRepository& repository); diff --git a/src/bin/pkgman/PackageManager.cpp b/src/bin/pkgman/PackageManager.cpp index 38565a78c3..5994866525 100644 --- a/src/bin/pkgman/PackageManager.cpp +++ b/src/bin/pkgman/PackageManager.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2013, Haiku, Inc. All Rights Reserved. + * Copyright 2013-2014, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -10,6 +10,7 @@ #include "PackageManager.h" +#include #include #include #include @@ -222,10 +223,10 @@ PackageManager::ProgressStartApplyingChanges(InstalledRepository& repository) void PackageManager::ProgressTransactionCommitted(InstalledRepository& repository, - const char* transactionDirectoryName) + const BCommitTransactionResult& result) { printf("[%s] Changes applied. Old activation state backed up in \"%s\"\n", - repository.Name().String(), transactionDirectoryName); + repository.Name().String(), result.OldStateDirectory().String()); printf("[%s] Cleaning up ...\n", repository.Name().String()); } diff --git a/src/bin/pkgman/PackageManager.h b/src/bin/pkgman/PackageManager.h index e56b27dbbe..494912b664 100644 --- a/src/bin/pkgman/PackageManager.h +++ b/src/bin/pkgman/PackageManager.h @@ -1,5 +1,5 @@ /* - * Copyright 2013, Haiku, Inc. All Rights Reserved. + * Copyright 2013-2014, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -58,7 +58,7 @@ private: InstalledRepository& repository); virtual void ProgressTransactionCommitted( InstalledRepository& repository, - const char* transactionDirectoryName); + const BCommitTransactionResult& result); virtual void ProgressApplyingChangesDone( InstalledRepository& repository); diff --git a/src/kits/package/manager/Exceptions.cpp b/src/kits/package/manager/Exceptions.cpp index 804691f457..246c68cf7d 100644 --- a/src/kits/package/manager/Exceptions.cpp +++ b/src/kits/package/manager/Exceptions.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2013, Ingo Weinhold, ingo_weinhold@gmx.de. + * Copyright 2013-2014, Ingo Weinhold, ingo_weinhold@gmx.de. * Distributed under the terms of the MIT License. */ @@ -40,7 +40,9 @@ BFatalErrorException::BFatalErrorException() : BException(), fDetails(), - fError(B_OK) + fError(B_OK), + fCommitTransactionResult(), + fCommitTransactionFailed(false) { } @@ -49,7 +51,9 @@ BFatalErrorException::BFatalErrorException(const char* format, ...) : BException(), fDetails(), - fError(B_OK) + fError(B_OK), + fCommitTransactionResult(), + fCommitTransactionFailed(false) { va_list args; va_start(args, format); @@ -63,7 +67,9 @@ BFatalErrorException::BFatalErrorException(status_t error, const char* format, : BException(), fDetails(), - fError(error) + fError(error), + fCommitTransactionResult(), + fCommitTransactionFailed(false) { va_list args; va_start(args, format); @@ -72,6 +78,20 @@ BFatalErrorException::BFatalErrorException(status_t error, const char* format, } +BFatalErrorException::BFatalErrorException( + const BCommitTransactionResult& result) + : + BException(), + fDetails(), + fError(B_OK), + fCommitTransactionResult(result), + fCommitTransactionFailed(true) +{ + fMessage.SetToFormat("failed to commit transaction: %s", + result.FullErrorMessage().String()); +} + + BFatalErrorException& BFatalErrorException::SetDetails(const BString& details) { diff --git a/src/kits/package/manager/PackageManager.cpp b/src/kits/package/manager/PackageManager.cpp index 5620f962f8..c24125e807 100644 --- a/src/kits/package/manager/PackageManager.cpp +++ b/src/kits/package/manager/PackageManager.cpp @@ -582,13 +582,11 @@ BPackageManager::_CommitPackageChanges(Transaction& transaction) transactionResult); if (error != B_OK) DIE(error, "failed to commit transaction"); - if (transactionResult.Error() != B_TRANSACTION_OK) { - DIE("failed to commit transaction: %s", - transactionResult.FullErrorMessage().String()); - } + if (transactionResult.Error() != B_TRANSACTION_OK) + DIE(transactionResult); fUserInteractionHandler->ProgressTransactionCommitted( - installationRepository, transactionResult.OldStateDirectory()); + installationRepository, transactionResult); BEntry transactionDirectoryEntry; if ((error = transaction.TransactionDirectory() @@ -1014,7 +1012,7 @@ BPackageManager::UserInteractionHandler::ProgressStartApplyingChanges( void BPackageManager::UserInteractionHandler::ProgressTransactionCommitted( - InstalledRepository& repository, const char* transactionDirectoryName) + InstalledRepository& repository, const BCommitTransactionResult& result) { } diff --git a/src/servers/package/PackageManager.cpp b/src/servers/package/PackageManager.cpp index bf5a4b2373..2c1eb8528f 100644 --- a/src/servers/package/PackageManager.cpp +++ b/src/servers/package/PackageManager.cpp @@ -351,7 +351,7 @@ PackageManager::ProgressStartApplyingChanges(InstalledRepository& repository) void PackageManager::ProgressTransactionCommitted(InstalledRepository& repository, - const char* transactionDirectoryName) + const BCommitTransactionResult& result) { } diff --git a/src/servers/package/PackageManager.h b/src/servers/package/PackageManager.h index 76d2340652..95106fb740 100644 --- a/src/servers/package/PackageManager.h +++ b/src/servers/package/PackageManager.h @@ -77,7 +77,7 @@ private: InstalledRepository& repository); virtual void ProgressTransactionCommitted( InstalledRepository& repository, - const char* transactionDirectoryName); + const BCommitTransactionResult& result); virtual void ProgressApplyingChangesDone( InstalledRepository& repository);