hpkg format: Add attribute for declaring post install scripts

This commit is contained in:
Ingo Weinhold
2013-05-25 01:12:37 +02:00
parent 927e070869
commit c0ab140961
8 changed files with 62 additions and 1 deletions
+7
View File
@@ -90,6 +90,8 @@ public:
const BObjectList<BUser>& Users() const; const BObjectList<BUser>& Users() const;
const BStringList& Groups() const; const BStringList& Groups() const;
const BStringList& PostInstallScripts() const;
const BObjectList<BPackageResolvable>& ProvidesList() const; const BObjectList<BPackageResolvable>& ProvidesList() const;
const BObjectList<BPackageResolvableExpression>& const BObjectList<BPackageResolvableExpression>&
RequiresList() const; RequiresList() const;
@@ -145,6 +147,9 @@ public:
void ClearGroups(); void ClearGroups();
status_t AddGroup(const BString& group); status_t AddGroup(const BString& group);
void ClearPostInstallScripts();
status_t AddPostInstallScript(const BString& path);
void ClearProvidesList(); void ClearProvidesList();
status_t AddProvides(const BPackageResolvable& provides); status_t AddProvides(const BPackageResolvable& provides);
@@ -278,6 +283,8 @@ private:
UserList fUsers; UserList fUsers;
BStringList fGroups; BStringList fGroups;
BStringList fPostInstallScripts;
ResolvableList fProvidesList; ResolvableList fProvidesList;
ResolvableExpressionList fRequiresList; ResolvableExpressionList fRequiresList;
@@ -49,6 +49,8 @@ enum BPackageInfoAttributeID {
// list of (Unix) users defined/needed // list of (Unix) users defined/needed
B_PACKAGE_INFO_GROUPS, B_PACKAGE_INFO_GROUPS,
// list of (Unix) groups defined/needed // list of (Unix) groups defined/needed
B_PACKAGE_INFO_POST_INSTALL_SCRIPTS,
// list of scripts to be executed post-install
// //
B_PACKAGE_INFO_ENUM_COUNT, B_PACKAGE_INFO_ENUM_COUNT,
}; };
@@ -77,3 +77,5 @@ B_DEFINE_HPKG_ATTRIBUTE(48, STRING, "package:user.home", PACKAGE_USER_HOME)
B_DEFINE_HPKG_ATTRIBUTE(49, STRING, "package:user.shell", PACKAGE_USER_SHELL) B_DEFINE_HPKG_ATTRIBUTE(49, STRING, "package:user.shell", PACKAGE_USER_SHELL)
B_DEFINE_HPKG_ATTRIBUTE(50, STRING, "package:user.group", PACKAGE_USER_GROUP) B_DEFINE_HPKG_ATTRIBUTE(50, STRING, "package:user.group", PACKAGE_USER_GROUP)
B_DEFINE_HPKG_ATTRIBUTE(51, STRING, "package:group", PACKAGE_GROUP) B_DEFINE_HPKG_ATTRIBUTE(51, STRING, "package:group", PACKAGE_GROUP)
B_DEFINE_HPKG_ATTRIBUTE(52, STRING, "package:post-install-script",
PACKAGE_POST_INSTALL_SCRIPT)
+4
View File
@@ -326,6 +326,10 @@ struct PackageContentListHandler : VersionPolicy::PackageContentHandler {
printf("\tgroup: %s\n", value.string); printf("\tgroup: %s\n", value.string);
break; break;
case B_PACKAGE_INFO_POST_INSTALL_SCRIPTS:
printf("\tpost install script: %s\n", value.string);
break;
case B_PACKAGE_INFO_INSTALL_PATH: case B_PACKAGE_INFO_INSTALL_PATH:
printf("\tinstall path: %s\n", value.string); printf("\tinstall path: %s\n", value.string);
break; break;
+31 -1
View File
@@ -54,7 +54,8 @@ const char* const BPackageInfo::kElementNames[B_PACKAGE_INFO_ENUM_COUNT] = {
"global-settings-files", "global-settings-files",
"user-settings-files", "user-settings-files",
"users", "users",
"groups" "groups",
"post-install-scripts"
}; };
@@ -171,6 +172,7 @@ BPackageInfo::BPackageInfo()
fUserSettingsFileInfos(4, true), fUserSettingsFileInfos(4, true),
fUsers(4, true), fUsers(4, true),
fGroups(4), fGroups(4),
fPostInstallScripts(4),
fProvidesList(20, true), fProvidesList(20, true),
fRequiresList(20, true), fRequiresList(20, true),
fSupplementsList(20, true), fSupplementsList(20, true),
@@ -194,6 +196,7 @@ BPackageInfo::BPackageInfo(BMessage* archive, status_t* _error)
fUserSettingsFileInfos(4, true), fUserSettingsFileInfos(4, true),
fUsers(4, true), fUsers(4, true),
fGroups(4), fGroups(4),
fPostInstallScripts(4),
fProvidesList(20, true), fProvidesList(20, true),
fRequiresList(20, true), fRequiresList(20, true),
fSupplementsList(20, true), fSupplementsList(20, true),
@@ -225,6 +228,8 @@ BPackageInfo::BPackageInfo(BMessage* archive, status_t* _error)
fUserSettingsFileInfos)) == B_OK fUserSettingsFileInfos)) == B_OK
&& (error = _ExtractUsers(archive, "users", fUsers)) == B_OK && (error = _ExtractUsers(archive, "users", fUsers)) == B_OK
&& (error = _ExtractStringList(archive, "groups", fGroups)) == B_OK && (error = _ExtractStringList(archive, "groups", fGroups)) == B_OK
&& (error = _ExtractStringList(archive, "post-install-scripts",
fPostInstallScripts)) == B_OK
&& (error = _ExtractResolvables(archive, "provides", fProvidesList)) && (error = _ExtractResolvables(archive, "provides", fProvidesList))
== B_OK == B_OK
&& (error = _ExtractResolvableExpressions(archive, "requires", && (error = _ExtractResolvableExpressions(archive, "requires",
@@ -516,6 +521,13 @@ BPackageInfo::Groups() const
} }
const BStringList&
BPackageInfo::PostInstallScripts() const
{
return fPostInstallScripts;
}
const BObjectList<BPackageResolvable>& const BObjectList<BPackageResolvable>&
BPackageInfo::ProvidesList() const BPackageInfo::ProvidesList() const
{ {
@@ -779,6 +791,20 @@ BPackageInfo::AddGroup(const BString& group)
} }
void
BPackageInfo::ClearPostInstallScripts()
{
fPostInstallScripts.MakeEmpty();
}
status_t
BPackageInfo::AddPostInstallScript(const BString& path)
{
return fPostInstallScripts.Add(path) ? B_OK : B_NO_MEMORY;
}
void void
BPackageInfo::ClearProvidesList() BPackageInfo::ClearProvidesList()
{ {
@@ -910,6 +936,7 @@ BPackageInfo::Clear()
fUserSettingsFileInfos.MakeEmpty(); fUserSettingsFileInfos.MakeEmpty();
fUsers.MakeEmpty(); fUsers.MakeEmpty();
fGroups.MakeEmpty(); fGroups.MakeEmpty();
fPostInstallScripts.MakeEmpty();
fRequiresList.MakeEmpty(); fRequiresList.MakeEmpty();
fProvidesList.MakeEmpty(); fProvidesList.MakeEmpty();
fSupplementsList.MakeEmpty(); fSupplementsList.MakeEmpty();
@@ -947,6 +974,8 @@ BPackageInfo::Archive(BMessage* archive, bool deep) const
"user-settings-files", fUserSettingsFileInfos)) != B_OK "user-settings-files", fUserSettingsFileInfos)) != B_OK
|| (error = _AddUsers(archive, "users", fUsers)) != B_OK || (error = _AddUsers(archive, "users", fUsers)) != B_OK
|| (error = archive->AddStrings("groups", fGroups)) != B_OK || (error = archive->AddStrings("groups", fGroups)) != B_OK
|| (error = archive->AddStrings("post-install-scripts",
fPostInstallScripts)) != B_OK
|| (error = _AddResolvables(archive, "provides", fProvidesList)) != B_OK || (error = _AddResolvables(archive, "provides", fProvidesList)) != B_OK
|| (error = _AddResolvableExpressions(archive, "requires", || (error = _AddResolvableExpressions(archive, "requires",
fRequiresList)) != B_OK fRequiresList)) != B_OK
@@ -994,6 +1023,7 @@ BPackageInfo::GetConfigString(BString& _string) const
.Write("user-settings-files", fUserSettingsFileInfos) .Write("user-settings-files", fUserSettingsFileInfos)
.Write("users", fUsers) .Write("users", fUsers)
.Write("groups", fGroups) .Write("groups", fGroups)
.Write("post-install-scripts", fPostInstallScripts)
.Write("provides", fProvidesList) .Write("provides", fProvidesList)
.BeginRequires(fBasePackage) .BeginRequires(fBasePackage)
.Write("requires", fRequiresList) .Write("requires", fRequiresList)
+4
View File
@@ -934,6 +934,10 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
_ParseStringList(&packageInfo->fGroups); _ParseStringList(&packageInfo->fGroups);
break; break;
case B_PACKAGE_INFO_POST_INSTALL_SCRIPTS:
_ParseStringList(&packageInfo->fPostInstallScripts);
break;
case B_PACKAGE_INFO_PROVIDES: case B_PACKAGE_INFO_PROVIDES:
_ParseResolvableList(&packageInfo->fProvidesList); _ParseResolvableList(&packageInfo->fProvidesList);
break; break;
+5
View File
@@ -647,6 +647,11 @@ ReaderImplBase::PackageAttributeHandler::HandleAttribute(
fPackageInfoValue.SetTo(B_PACKAGE_INFO_GROUPS, value.string); fPackageInfoValue.SetTo(B_PACKAGE_INFO_GROUPS, value.string);
break; break;
case B_HPKG_ATTRIBUTE_ID_PACKAGE_POST_INSTALL_SCRIPT:
fPackageInfoValue.SetTo(B_PACKAGE_INFO_POST_INSTALL_SCRIPTS,
value.string);
break;
default: default:
if (context->ignoreUnknownAttributes) if (context->ignoreUnknownAttributes)
break; break;
+7
View File
@@ -457,6 +457,13 @@ WriterImplBase::RegisterPackageInfo(PackageAttributeList& attributeList,
groups.StringAt(i), attributeList); groups.StringAt(i), attributeList);
} }
// post install script list
const BStringList& postInstallScripts = packageInfo.PostInstallScripts();
for (int32 i = 0; i < postInstallScripts.CountStrings(); i++) {
_AddStringAttribute(B_HPKG_ATTRIBUTE_ID_PACKAGE_POST_INSTALL_SCRIPT,
postInstallScripts.StringAt(i), attributeList);
}
// checksum (optional, only exists in repositories) // checksum (optional, only exists in repositories)
_AddStringAttributeIfNotEmpty(B_HPKG_ATTRIBUTE_ID_PACKAGE_CHECKSUM, _AddStringAttributeIfNotEmpty(B_HPKG_ATTRIBUTE_ID_PACKAGE_CHECKSUM,
packageInfo.Checksum(), attributeList); packageInfo.Checksum(), attributeList);