hpkg format: Add attribute for declaring post install scripts

This commit is contained in:
Ingo Weinhold 2013-05-24 23:46:22 +02:00
parent 927e070869
commit c0ab140961
8 changed files with 62 additions and 1 deletions

View File

@ -90,6 +90,8 @@ public:
const BObjectList<BUser>& Users() const;
const BStringList& Groups() const;
const BStringList& PostInstallScripts() const;
const BObjectList<BPackageResolvable>& ProvidesList() const;
const BObjectList<BPackageResolvableExpression>&
RequiresList() const;
@ -145,6 +147,9 @@ public:
void ClearGroups();
status_t AddGroup(const BString& group);
void ClearPostInstallScripts();
status_t AddPostInstallScript(const BString& path);
void ClearProvidesList();
status_t AddProvides(const BPackageResolvable& provides);
@ -278,6 +283,8 @@ private:
UserList fUsers;
BStringList fGroups;
BStringList fPostInstallScripts;
ResolvableList fProvidesList;
ResolvableExpressionList fRequiresList;

View File

@ -49,6 +49,8 @@ enum BPackageInfoAttributeID {
// list of (Unix) users defined/needed
B_PACKAGE_INFO_GROUPS,
// 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,
};

View File

@ -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(50, STRING, "package:user.group", PACKAGE_USER_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)

View File

@ -326,6 +326,10 @@ struct PackageContentListHandler : VersionPolicy::PackageContentHandler {
printf("\tgroup: %s\n", value.string);
break;
case B_PACKAGE_INFO_POST_INSTALL_SCRIPTS:
printf("\tpost install script: %s\n", value.string);
break;
case B_PACKAGE_INFO_INSTALL_PATH:
printf("\tinstall path: %s\n", value.string);
break;

View File

@ -54,7 +54,8 @@ const char* const BPackageInfo::kElementNames[B_PACKAGE_INFO_ENUM_COUNT] = {
"global-settings-files",
"user-settings-files",
"users",
"groups"
"groups",
"post-install-scripts"
};
@ -171,6 +172,7 @@ BPackageInfo::BPackageInfo()
fUserSettingsFileInfos(4, true),
fUsers(4, true),
fGroups(4),
fPostInstallScripts(4),
fProvidesList(20, true),
fRequiresList(20, true),
fSupplementsList(20, true),
@ -194,6 +196,7 @@ BPackageInfo::BPackageInfo(BMessage* archive, status_t* _error)
fUserSettingsFileInfos(4, true),
fUsers(4, true),
fGroups(4),
fPostInstallScripts(4),
fProvidesList(20, true),
fRequiresList(20, true),
fSupplementsList(20, true),
@ -225,6 +228,8 @@ BPackageInfo::BPackageInfo(BMessage* archive, status_t* _error)
fUserSettingsFileInfos)) == B_OK
&& (error = _ExtractUsers(archive, "users", fUsers)) == B_OK
&& (error = _ExtractStringList(archive, "groups", fGroups)) == B_OK
&& (error = _ExtractStringList(archive, "post-install-scripts",
fPostInstallScripts)) == B_OK
&& (error = _ExtractResolvables(archive, "provides", fProvidesList))
== B_OK
&& (error = _ExtractResolvableExpressions(archive, "requires",
@ -516,6 +521,13 @@ BPackageInfo::Groups() const
}
const BStringList&
BPackageInfo::PostInstallScripts() const
{
return fPostInstallScripts;
}
const BObjectList<BPackageResolvable>&
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
BPackageInfo::ClearProvidesList()
{
@ -910,6 +936,7 @@ BPackageInfo::Clear()
fUserSettingsFileInfos.MakeEmpty();
fUsers.MakeEmpty();
fGroups.MakeEmpty();
fPostInstallScripts.MakeEmpty();
fRequiresList.MakeEmpty();
fProvidesList.MakeEmpty();
fSupplementsList.MakeEmpty();
@ -947,6 +974,8 @@ BPackageInfo::Archive(BMessage* archive, bool deep) const
"user-settings-files", fUserSettingsFileInfos)) != B_OK
|| (error = _AddUsers(archive, "users", fUsers)) != 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 = _AddResolvableExpressions(archive, "requires",
fRequiresList)) != B_OK
@ -994,6 +1023,7 @@ BPackageInfo::GetConfigString(BString& _string) const
.Write("user-settings-files", fUserSettingsFileInfos)
.Write("users", fUsers)
.Write("groups", fGroups)
.Write("post-install-scripts", fPostInstallScripts)
.Write("provides", fProvidesList)
.BeginRequires(fBasePackage)
.Write("requires", fRequiresList)

View File

@ -934,6 +934,10 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo)
_ParseStringList(&packageInfo->fGroups);
break;
case B_PACKAGE_INFO_POST_INSTALL_SCRIPTS:
_ParseStringList(&packageInfo->fPostInstallScripts);
break;
case B_PACKAGE_INFO_PROVIDES:
_ParseResolvableList(&packageInfo->fProvidesList);
break;

View File

@ -647,6 +647,11 @@ ReaderImplBase::PackageAttributeHandler::HandleAttribute(
fPackageInfoValue.SetTo(B_PACKAGE_INFO_GROUPS, value.string);
break;
case B_HPKG_ATTRIBUTE_ID_PACKAGE_POST_INSTALL_SCRIPT:
fPackageInfoValue.SetTo(B_PACKAGE_INFO_POST_INSTALL_SCRIPTS,
value.string);
break;
default:
if (context->ignoreUnknownAttributes)
break;

View File

@ -457,6 +457,13 @@ WriterImplBase::RegisterPackageInfo(PackageAttributeList& 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)
_AddStringAttributeIfNotEmpty(B_HPKG_ATTRIBUTE_ID_PACKAGE_CHECKSUM,
packageInfo.Checksum(), attributeList);