hpkg format: Add attributes for declaring settings files
Global and user settings files can be declared. For global ones an update policy can be specified. If not specified, the settings file is not included in the package, but created by the program (or user) later. If an update type is specified, it defines what to do with the settings file when updating the package to a newer version. User settings files are never included in the package; they are always created by the program or the user. If the package contains a template/ default settings file, it can be declared, but for informative purposes only.
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2013, Haiku, Inc.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _PACKAGE__GLOBAL_SETTINGS_FILE_INFO_H_
|
||||
#define _PACKAGE__GLOBAL_SETTINGS_FILE_INFO_H_
|
||||
|
||||
|
||||
#include <package/SettingsFileUpdateType.h>
|
||||
#include <String.h>
|
||||
|
||||
|
||||
namespace BPackageKit {
|
||||
|
||||
|
||||
class BGlobalSettingsFileInfo {
|
||||
public:
|
||||
BGlobalSettingsFileInfo();
|
||||
BGlobalSettingsFileInfo(const BString& path,
|
||||
BSettingsFileUpdateType updateType);
|
||||
~BGlobalSettingsFileInfo();
|
||||
|
||||
status_t InitCheck() const;
|
||||
|
||||
const BString& Path() const;
|
||||
bool IsIncluded() const;
|
||||
BSettingsFileUpdateType UpdateType() const;
|
||||
|
||||
void SetTo(const BString& path,
|
||||
BSettingsFileUpdateType updateType);
|
||||
|
||||
private:
|
||||
BString fPath;
|
||||
BSettingsFileUpdateType fUpdateType;
|
||||
};
|
||||
|
||||
|
||||
} // namespace BPackageKit
|
||||
|
||||
|
||||
#endif // _PACKAGE__GLOBAL_SETTINGS_FILE_INFO_H_
|
||||
@@ -11,12 +11,14 @@
|
||||
#include <String.h>
|
||||
#include <StringList.h>
|
||||
|
||||
#include <package/GlobalSettingsFileInfo.h>
|
||||
#include <package/PackageArchitecture.h>
|
||||
#include <package/PackageFlags.h>
|
||||
#include <package/PackageInfoAttributes.h>
|
||||
#include <package/PackageResolvable.h>
|
||||
#include <package/PackageResolvableExpression.h>
|
||||
#include <package/PackageVersion.h>
|
||||
#include <package/UserSettingsFileInfo.h>
|
||||
|
||||
|
||||
class BEntry;
|
||||
@@ -79,6 +81,11 @@ public:
|
||||
const BStringList& URLList() const;
|
||||
const BStringList& SourceURLList() const;
|
||||
|
||||
const BObjectList<BGlobalSettingsFileInfo>&
|
||||
GlobalSettingsFileInfos() const;
|
||||
const BObjectList<BUserSettingsFileInfo>&
|
||||
UserSettingsFileInfos() const;
|
||||
|
||||
const BObjectList<BPackageResolvable>& ProvidesList() const;
|
||||
const BObjectList<BPackageResolvableExpression>&
|
||||
RequiresList() const;
|
||||
@@ -120,6 +127,14 @@ public:
|
||||
void ClearSourceURLList();
|
||||
status_t AddSourceURL(const BString& url);
|
||||
|
||||
void ClearGlobalSettingsFileInfos();
|
||||
status_t AddGlobalSettingsFileInfo(
|
||||
const BGlobalSettingsFileInfo& info);
|
||||
|
||||
void ClearUserSettingsFileInfos();
|
||||
status_t AddUserSettingsFileInfo(
|
||||
const BUserSettingsFileInfo& info);
|
||||
|
||||
void ClearProvidesList();
|
||||
status_t AddProvides(const BPackageResolvable& provides);
|
||||
|
||||
@@ -163,6 +178,7 @@ public:
|
||||
public:
|
||||
static const char* const kElementNames[];
|
||||
static const char* const kArchitectureNames[];
|
||||
static const char* const kSettingsFileUpdateTypes[];
|
||||
|
||||
private:
|
||||
class Parser;
|
||||
@@ -175,6 +191,11 @@ private:
|
||||
typedef BObjectList<BPackageResolvableExpression>
|
||||
ResolvableExpressionList;
|
||||
|
||||
typedef BObjectList<BGlobalSettingsFileInfo>
|
||||
GlobalSettingsFileInfoList;
|
||||
typedef BObjectList<BUserSettingsFileInfo>
|
||||
UserSettingsFileInfoList;
|
||||
|
||||
private:
|
||||
status_t _ReadFromPackageFile(
|
||||
const PackageFileLocation& fileLocation);
|
||||
@@ -189,6 +210,15 @@ private:
|
||||
const char* field,
|
||||
const ResolvableExpressionList&
|
||||
expressions);
|
||||
static status_t _AddGlobalSettingsFileInfos(BMessage* archive,
|
||||
const char* field,
|
||||
const GlobalSettingsFileInfoList&
|
||||
infos);
|
||||
static status_t _AddUserSettingsFileInfos(BMessage* archive,
|
||||
const char* field,
|
||||
const UserSettingsFileInfoList&
|
||||
infos);
|
||||
|
||||
static status_t _ExtractVersion(BMessage* archive,
|
||||
const char* field, int32 index,
|
||||
BPackageVersion& _version);
|
||||
@@ -200,6 +230,12 @@ private:
|
||||
static status_t _ExtractResolvableExpressions(BMessage* archive,
|
||||
const char* field,
|
||||
ResolvableExpressionList& _expressions);
|
||||
static status_t _ExtractGlobalSettingsFileInfos(
|
||||
BMessage* archive, const char* field,
|
||||
GlobalSettingsFileInfoList& _infos);
|
||||
static status_t _ExtractUserSettingsFileInfos(
|
||||
BMessage* archive, const char* field,
|
||||
UserSettingsFileInfoList& _infos);
|
||||
|
||||
private:
|
||||
BString fName;
|
||||
@@ -220,6 +256,9 @@ private:
|
||||
BStringList fURLList;
|
||||
BStringList fSourceURLList;
|
||||
|
||||
BObjectList<BGlobalSettingsFileInfo> fGlobalSettingsFileInfos;
|
||||
BObjectList<BUserSettingsFileInfo> fUserSettingsFileInfos;
|
||||
|
||||
ResolvableList fProvidesList;
|
||||
|
||||
ResolvableExpressionList fRequiresList;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2011, Haiku, Inc.
|
||||
* Copyright 2011-2013, Haiku, Inc.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _PACKAGE__PACKAGE_INFO_ATTRIBUTES_H_
|
||||
@@ -41,6 +41,10 @@ enum BPackageInfoAttributeID {
|
||||
B_PACKAGE_INFO_INSTALL_PATH, // package install path; only for package
|
||||
// building
|
||||
B_PACKAGE_INFO_BASE_PACKAGE, // name of the base package for this package
|
||||
B_PACKAGE_INFO_GLOBAL_SETTINGS_FILES,
|
||||
// list of global settings file infos
|
||||
B_PACKAGE_INFO_USER_SETTINGS_FILES,
|
||||
// list of user settings file infos
|
||||
//
|
||||
B_PACKAGE_INFO_ENUM_COUNT,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright 2013, Haiku, Inc.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _PACKAGE__SETTINGS_FILE_UPDATE_TYPE_H_
|
||||
#define _PACKAGE__SETTINGS_FILE_UPDATE_TYPE_H_
|
||||
|
||||
|
||||
#include <String.h>
|
||||
|
||||
|
||||
namespace BPackageKit {
|
||||
|
||||
|
||||
// global settings file update types -- specifies behavior in case the previous
|
||||
// version of a settings file provided by a package has been changed by the
|
||||
// user.
|
||||
enum BSettingsFileUpdateType {
|
||||
B_SETTINGS_FILE_UPDATE_TYPE_KEEP_OLD = 0,
|
||||
// the old settings file can be kept
|
||||
B_SETTINGS_FILE_UPDATE_TYPE_MANUAL = 1,
|
||||
// the old settings file needs to be updated manually
|
||||
B_SETTINGS_FILE_UPDATE_TYPE_AUTO_MERGE = 2,
|
||||
// try a three-way merge
|
||||
|
||||
B_SETTINGS_FILE_UPDATE_TYPE_ENUM_COUNT,
|
||||
|
||||
B_SETTINGS_FILE_UPDATE_TYPE_DEFAULT = B_SETTINGS_FILE_UPDATE_TYPE_KEEP_OLD
|
||||
};
|
||||
|
||||
|
||||
} // namespace BPackageKit
|
||||
|
||||
|
||||
#endif // _PACKAGE__SETTINGS_FILE_UPDATE_TYPE_H_
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Copyright 2013, Haiku, Inc.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
#ifndef _PACKAGE__USER_SETTINGS_FILE_INFO_H_
|
||||
#define _PACKAGE__USER_SETTINGS_FILE_INFO_H_
|
||||
|
||||
|
||||
#include <String.h>
|
||||
|
||||
|
||||
namespace BPackageKit {
|
||||
|
||||
|
||||
class BUserSettingsFileInfo {
|
||||
public:
|
||||
BUserSettingsFileInfo();
|
||||
BUserSettingsFileInfo(const BString& path,
|
||||
const BString& templatePath = BString());
|
||||
~BUserSettingsFileInfo();
|
||||
|
||||
status_t InitCheck() const;
|
||||
|
||||
const BString& Path() const;
|
||||
const BString& TemplatePath() const;
|
||||
|
||||
void SetTo(const BString& path,
|
||||
const BString& templatePath = BString());
|
||||
|
||||
private:
|
||||
BString fPath;
|
||||
BString fTemplatePath;
|
||||
};
|
||||
|
||||
|
||||
} // namespace BPackageKit
|
||||
|
||||
|
||||
#endif // _PACKAGE__USER_SETTINGS_FILE_INFO_H_
|
||||
@@ -86,48 +86,52 @@ extern const char* const B_HPKG_PACKAGE_INFO_FILE_NAME;
|
||||
|
||||
// package attribute IDs
|
||||
enum BHPKGAttributeID {
|
||||
B_HPKG_ATTRIBUTE_ID_DIRECTORY_ENTRY = 0,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_TYPE = 1,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_PERMISSIONS = 2,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_USER = 3,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_GROUP = 4,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_ATIME = 5,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_MTIME = 6,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_CRTIME = 7,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_ATIME_NANOS = 8,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_MTIME_NANOS = 9,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_CRTIM_NANOS = 10,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_ATTRIBUTE = 11,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_ATTRIBUTE_TYPE = 12,
|
||||
B_HPKG_ATTRIBUTE_ID_DATA = 13,
|
||||
B_HPKG_ATTRIBUTE_ID_SYMLINK_PATH = 14,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_NAME = 15,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_SUMMARY = 16,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_DESCRIPTION = 17,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VENDOR = 18,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_PACKAGER = 19,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_FLAGS = 20,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_ARCHITECTURE = 21,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_MAJOR = 22,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_MINOR = 23,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_MICRO = 24,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_REVISION = 25,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_COPYRIGHT = 26,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_LICENSE = 27,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_PROVIDES = 28,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_REQUIRES = 29,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_SUPPLEMENTS = 30,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_CONFLICTS = 31,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_FRESHENS = 32,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_REPLACES = 33,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_RESOLVABLE_OPERATOR = 34,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_CHECKSUM = 35,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_PRE_RELEASE = 36,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_PROVIDES_COMPATIBLE = 37,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_URL = 38,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_SOURCE_URL = 39,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_INSTALL_PATH = 40,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_BASE_PACKAGE = 41,
|
||||
B_HPKG_ATTRIBUTE_ID_DIRECTORY_ENTRY = 0,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_TYPE = 1,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_PERMISSIONS = 2,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_USER = 3,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_GROUP = 4,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_ATIME = 5,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_MTIME = 6,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_CRTIME = 7,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_ATIME_NANOS = 8,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_MTIME_NANOS = 9,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_CRTIM_NANOS = 10,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_ATTRIBUTE = 11,
|
||||
B_HPKG_ATTRIBUTE_ID_FILE_ATTRIBUTE_TYPE = 12,
|
||||
B_HPKG_ATTRIBUTE_ID_DATA = 13,
|
||||
B_HPKG_ATTRIBUTE_ID_SYMLINK_PATH = 14,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_NAME = 15,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_SUMMARY = 16,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_DESCRIPTION = 17,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VENDOR = 18,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_PACKAGER = 19,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_FLAGS = 20,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_ARCHITECTURE = 21,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_MAJOR = 22,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_MINOR = 23,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_MICRO = 24,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_REVISION = 25,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_COPYRIGHT = 26,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_LICENSE = 27,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_PROVIDES = 28,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_REQUIRES = 29,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_SUPPLEMENTS = 30,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_CONFLICTS = 31,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_FRESHENS = 32,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_REPLACES = 33,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_RESOLVABLE_OPERATOR = 34,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_CHECKSUM = 35,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_VERSION_PRE_RELEASE = 36,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_PROVIDES_COMPATIBLE = 37,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_URL = 38,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_SOURCE_URL = 39,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_INSTALL_PATH = 40,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_BASE_PACKAGE = 41,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_GLOBAL_SETTINGS_FILE = 42,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_USER_SETTINGS_FILE = 43,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_SETTINGS_FILE_UPDATE_TYPE = 44,
|
||||
B_HPKG_ATTRIBUTE_ID_PACKAGE_SETTINGS_FILE_TEMPLATE = 45,
|
||||
//
|
||||
B_HPKG_ATTRIBUTE_ID_ENUM_COUNT,
|
||||
};
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <package/PackageArchitecture.h>
|
||||
#include <package/PackageInfoAttributes.h>
|
||||
#include <package/PackageResolvableOperator.h>
|
||||
#include <package/SettingsFileUpdateType.h>
|
||||
|
||||
|
||||
namespace BPackageKit {
|
||||
@@ -46,6 +47,18 @@ struct BPackageResolvableExpressionData {
|
||||
};
|
||||
|
||||
|
||||
struct BGlobalSettingsFileInfoData {
|
||||
const char* path;
|
||||
BSettingsFileUpdateType updateType;
|
||||
};
|
||||
|
||||
|
||||
struct BUserSettingsFileInfoData {
|
||||
const char* path;
|
||||
const char* templatePath;
|
||||
};
|
||||
|
||||
|
||||
struct BPackageInfoAttributeValue {
|
||||
union {
|
||||
uint64 unsignedInt;
|
||||
@@ -53,6 +66,8 @@ struct BPackageInfoAttributeValue {
|
||||
BPackageVersionData version;
|
||||
BPackageResolvableData resolvable;
|
||||
BPackageResolvableExpressionData resolvableExpression;
|
||||
BGlobalSettingsFileInfoData globalSettingsFileInfo;
|
||||
BUserSettingsFileInfoData userSettingsFileInfo;
|
||||
};
|
||||
BPackageInfoAttributeID attributeID;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user