0de3219e33
* BDaemonClient: Move inner class BCommitTransactionResult to top level and make it public. * BCommitTransactionResult: - Add a whole bunch of specific error code enum values. Such an error code is now the primary error, as opposed to before where we would mix status_t and enum value errors. There's a systemError property of type status_t which may provide additional information, though (depending on the primary error type). - Remove the errorMessage property. Due to mapping all errors to the specific error codes this is no longer necessary. Mixing such a message with another error description is also not very helpful when it comes to localization (still not supported, though). - Add several properties (paths, strings, error codes) that serve as arguments to the primary error and are used by FullErrorMessage(). - Add issues property, a list of instances of new class BTransactionIssue. Those describe non-critical issues (e.g. failed update of a settings file) that occurred in the process of committing the transaction. Those issues should be presented to the user by the package management program. * Exception: Adjust to transport the BCommitTransactionResult properties. * CommitTransactionHandler, FsTransactions, Root, Volume: Adjust to BCommitTransactionResult/Exception changes. * CommitTransactionHandler: Now requires a BCommitTransactionResult to which it adds the issues it encounters. The reply BMessage is no longer needed, though. * Volume: Refactor common code from the three methods that use CommitTransactionHandler into new method _CommitTransaction.
169 lines
4.4 KiB
C++
169 lines
4.4 KiB
C++
/*
|
|
* Copyright 2014, Haiku, Inc. All Rights Reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _PACKAGE__COMMIT_TRANSACTION_RESULT_H_
|
|
#define _PACKAGE__COMMIT_TRANSACTION_RESULT_H_
|
|
|
|
|
|
#include <ObjectList.h>
|
|
#include <String.h>
|
|
|
|
|
|
class BMessage;
|
|
|
|
|
|
namespace BPackageKit {
|
|
|
|
|
|
enum BTransactionError {
|
|
B_TRANSACTION_OK = 0,
|
|
B_TRANSACTION_NO_MEMORY,
|
|
B_TRANSACTION_INTERNAL_ERROR,
|
|
B_TRANSACTION_INSTALLATION_LOCATION_BUSY,
|
|
B_TRANSACTION_CHANGE_COUNT_MISMATCH,
|
|
B_TRANSACTION_BAD_REQUEST,
|
|
B_TRANSACTION_NO_SUCH_PACKAGE,
|
|
B_TRANSACTION_PACKAGE_ALREADY_EXISTS,
|
|
B_TRANSACTION_FAILED_TO_GET_ENTRY_PATH,
|
|
B_TRANSACTION_FAILED_TO_OPEN_DIRECTORY,
|
|
B_TRANSACTION_FAILED_TO_CREATE_DIRECTORY,
|
|
B_TRANSACTION_FAILED_TO_REMOVE_DIRECTORY,
|
|
B_TRANSACTION_FAILED_TO_MOVE_DIRECTORY,
|
|
B_TRANSACTION_FAILED_TO_WRITE_ACTIVATION_FILE,
|
|
B_TRANSACTION_FAILED_TO_READ_PACKAGE_FILE,
|
|
B_TRANSACTION_FAILED_TO_EXTRACT_PACKAGE_FILE,
|
|
B_TRANSACTION_FAILED_TO_OPEN_FILE,
|
|
B_TRANSACTION_FAILED_TO_MOVE_FILE,
|
|
B_TRANSACTION_FAILED_TO_COPY_FILE,
|
|
B_TRANSACTION_FAILED_TO_WRITE_FILE_ATTRIBUTE,
|
|
B_TRANSACTION_FAILED_TO_ACCESS_ENTRY,
|
|
B_TRANSACTION_FAILED_TO_ADD_GROUP,
|
|
B_TRANSACTION_FAILED_TO_ADD_USER,
|
|
B_TRANSACTION_FAILED_TO_ADD_USER_TO_GROUP,
|
|
B_TRANSACTION_FAILED_TO_CHANGE_PACKAGE_ACTIVATION,
|
|
};
|
|
|
|
|
|
class BTransactionIssue {
|
|
public:
|
|
enum BType {
|
|
B_WRITABLE_FILE_TYPE_MISMATCH,
|
|
B_WRITABLE_FILE_NO_PACKAGE_ATTRIBUTE,
|
|
B_WRITABLE_FILE_OLD_ORIGINAL_FILE_MISSING,
|
|
B_WRITABLE_FILE_OLD_ORIGINAL_FILE_TYPE_MISMATCH,
|
|
B_WRITABLE_FILE_COMPARISON_FAILED,
|
|
B_WRITABLE_FILE_NOT_EQUAL,
|
|
B_WRITABLE_SYMLINK_COMPARISON_FAILED,
|
|
B_WRITABLE_SYMLINK_NOT_EQUAL,
|
|
B_POST_INSTALL_SCRIPT_NOT_FOUND,
|
|
B_STARTING_POST_INSTALL_SCRIPT_FAILED,
|
|
B_POST_INSTALL_SCRIPT_FAILED,
|
|
};
|
|
|
|
public:
|
|
BTransactionIssue();
|
|
BTransactionIssue(BType type,
|
|
const BString& packageName,
|
|
const BString& path1, const BString& path2,
|
|
status_t systemError, int exitCode);
|
|
BTransactionIssue(
|
|
const BTransactionIssue& other);
|
|
~BTransactionIssue();
|
|
|
|
BType Type() const;
|
|
const BString& PackageName() const;
|
|
const BString& Path1() const;
|
|
const BString& Path2() const;
|
|
status_t SystemError() const;
|
|
int ExitCode() const;
|
|
|
|
BString ToString() const;
|
|
|
|
status_t AddToMessage(BMessage& message) const;
|
|
status_t ExtractFromMessage(const BMessage& message);
|
|
|
|
BTransactionIssue& operator=(const BTransactionIssue& other);
|
|
|
|
private:
|
|
BType fType;
|
|
BString fPackageName;
|
|
BString fPath1;
|
|
BString fPath2;
|
|
status_t fSystemError;
|
|
int fExitCode;
|
|
};
|
|
|
|
|
|
class BCommitTransactionResult {
|
|
public:
|
|
BCommitTransactionResult();
|
|
BCommitTransactionResult(
|
|
BTransactionError error);
|
|
BCommitTransactionResult(
|
|
const BCommitTransactionResult& other);
|
|
~BCommitTransactionResult();
|
|
|
|
void Unset();
|
|
|
|
int32 CountIssues() const;
|
|
const BTransactionIssue* IssueAt(int32 index) const;
|
|
bool AddIssue(const BTransactionIssue& issue);
|
|
|
|
BTransactionError Error() const;
|
|
void SetError(BTransactionError error);
|
|
|
|
status_t SystemError() const;
|
|
void SetSystemError(status_t error);
|
|
|
|
const BString& ErrorPackage() const;
|
|
// may be empty, even on error
|
|
void SetErrorPackage(const BString& packageName);
|
|
|
|
BString FullErrorMessage() const;
|
|
|
|
const BString& Path1() const;
|
|
void SetPath1(const BString& path);
|
|
|
|
const BString& Path2() const;
|
|
void SetPath2(const BString& path);
|
|
|
|
const BString& Path3() const;
|
|
void SetPath3(const BString& path);
|
|
|
|
const BString& String1() const;
|
|
void SetString1(const BString& string);
|
|
|
|
const BString& String2() const;
|
|
void SetString2(const BString& string);
|
|
|
|
const BString& OldStateDirectory() const;
|
|
void SetOldStateDirectory(const BString& directory);
|
|
|
|
status_t AddToMessage(BMessage& message) const;
|
|
status_t ExtractFromMessage(const BMessage& message);
|
|
|
|
BCommitTransactionResult& operator=(
|
|
const BCommitTransactionResult& other);
|
|
|
|
private:
|
|
typedef BObjectList<BTransactionIssue> IssueList;
|
|
|
|
private:
|
|
BTransactionError fError;
|
|
status_t fSystemError;
|
|
BString fErrorPackage;
|
|
BString fPath1;
|
|
BString fPath2;
|
|
BString fString1;
|
|
BString fString2;
|
|
BString fOldStateDirectory;
|
|
IssueList fIssues;
|
|
};
|
|
|
|
|
|
} // namespace BPackageKit
|
|
|
|
|
|
#endif // _PACKAGE__COMMIT_TRANSACTION_RESULT_H_
|