From ee453e8bbccd77988e5c422a4e3d76058bd95fb2 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Tue, 28 Jun 2011 17:24:34 +0200 Subject: [PATCH] Add url and sourceURL properties to BPackageInfo Also extend the parser to accept "url" and "source-url" attributes. --- headers/os/package/PackageInfo.h | 10 +++ headers/os/package/PackageInfoAttributes.h | 2 + src/kits/package/PackageInfo.cpp | 82 ++++++++++++++++++++++ 3 files changed, 94 insertions(+) diff --git a/headers/os/package/PackageInfo.h b/headers/os/package/PackageInfo.h index b130d175a9..c1bd851acb 100644 --- a/headers/os/package/PackageInfo.h +++ b/headers/os/package/PackageInfo.h @@ -65,6 +65,8 @@ public: const BObjectList& CopyrightList() const; const BObjectList& LicenseList() const; + const BObjectList& URLList() const; + const BObjectList& SourceURLList() const; const BObjectList& ProvidesList() const; const BObjectList& @@ -97,6 +99,12 @@ public: void ClearLicenseList(); status_t AddLicense(const BString& license); + void ClearURLList(); + status_t AddURL(const BString& url); + + void ClearSourceURLList(); + status_t AddSourceURL(const BString& url); + void ClearProvidesList(); status_t AddProvides(const BPackageResolvable& provides); @@ -146,6 +154,8 @@ private: BObjectList fCopyrightList; BObjectList fLicenseList; + BObjectList fURLList; + BObjectList fSourceURLList; BObjectList fProvidesList; diff --git a/headers/os/package/PackageInfoAttributes.h b/headers/os/package/PackageInfoAttributes.h index 19bb8ff3f1..d03a21695a 100644 --- a/headers/os/package/PackageInfoAttributes.h +++ b/headers/os/package/PackageInfoAttributes.h @@ -34,6 +34,8 @@ enum BPackageInfoAttributeID { B_PACKAGE_INFO_REPLACES, // list of resolvables that this package // will replace (upon update) B_PACKAGE_INFO_FLAGS, + B_PACKAGE_INFO_URLS, // list + B_PACKAGE_INFO_SOURCE_URLS, // list B_PACKAGE_INFO_CHECKSUM, // sha256-checksum // B_PACKAGE_INFO_ENUM_COUNT, diff --git a/src/kits/package/PackageInfo.cpp b/src/kits/package/PackageInfo.cpp index 52f2e89f2a..13d6dccfa6 100644 --- a/src/kits/package/PackageInfo.cpp +++ b/src/kits/package/PackageInfo.cpp @@ -773,6 +773,32 @@ BPackageInfo::Parser::_Parse(BPackageInfo* packageInfo) for (int i = 0; i < count; ++i) packageInfo->AddLicense(*(licenseList.ItemAt(i))); seen[B_PACKAGE_INFO_LICENSES] = true; + } else if (t.text.ICompare(names[B_PACKAGE_INFO_URLS]) == 0) { + if (seen[B_PACKAGE_INFO_URLS]) { + BString error = BString(names[B_PACKAGE_INFO_URLS]) + << " already seen!"; + throw ParseError(error, t.pos); + } + + BObjectList urlList; + _ParseStringList(&urlList); + int count = urlList.CountItems(); + for (int i = 0; i < count; ++i) + packageInfo->AddURL(*(urlList.ItemAt(i))); + seen[B_PACKAGE_INFO_URLS] = true; + } else if (t.text.ICompare(names[B_PACKAGE_INFO_SOURCE_URLS]) == 0) { + if (seen[B_PACKAGE_INFO_SOURCE_URLS]) { + BString error = BString(names[B_PACKAGE_INFO_SOURCE_URLS]) + << " already seen!"; + throw ParseError(error, t.pos); + } + + BObjectList urlList; + _ParseStringList(&urlList); + int count = urlList.CountItems(); + for (int i = 0; i < count; ++i) + packageInfo->AddSourceURL(*(urlList.ItemAt(i))); + seen[B_PACKAGE_INFO_SOURCE_URLS] = true; } else if (t.text.ICompare(names[B_PACKAGE_INFO_PROVIDES]) == 0) { if (seen[B_PACKAGE_INFO_PROVIDES]) { BString error = BString(names[B_PACKAGE_INFO_PROVIDES]) @@ -890,6 +916,8 @@ const char* BPackageInfo::kElementNames[B_PACKAGE_INFO_ENUM_COUNT] = { "freshens", "replaces", "flags", + "urls", + "source-urls", "checksum", // not being parsed, computed externally }; @@ -908,6 +936,8 @@ BPackageInfo::BPackageInfo() fArchitecture(B_PACKAGE_ARCHITECTURE_ENUM_COUNT), fCopyrightList(5, true), fLicenseList(5, true), + fURLList(5, true), + fSourceURLList(5, true), fProvidesList(20, true), fRequiresList(20, true), fSupplementsList(20, true), @@ -1060,6 +1090,20 @@ BPackageInfo::LicenseList() const } +const BObjectList& +BPackageInfo::URLList() const +{ + return fURLList; +} + + +const BObjectList& +BPackageInfo::SourceURLList() const +{ + return fSourceURLList; +} + + const BObjectList& BPackageInfo::ProvidesList() const { @@ -1201,6 +1245,42 @@ BPackageInfo::AddLicense(const BString& license) } +void +BPackageInfo::ClearURLList() +{ + fURLList.MakeEmpty(); +} + + +status_t +BPackageInfo::AddURL(const BString& url) +{ + BString* newURL = new (std::nothrow) BString(url); + if (newURL == NULL) + return B_NO_MEMORY; + + return fURLList.AddItem(newURL) ? B_OK : B_NO_MEMORY; +} + + +void +BPackageInfo::ClearSourceURLList() +{ + fSourceURLList.MakeEmpty(); +} + + +status_t +BPackageInfo::AddSourceURL(const BString& url) +{ + BString* newURL = new (std::nothrow) BString(url); + if (newURL == NULL) + return B_NO_MEMORY; + + return fSourceURLList.AddItem(newURL) ? B_OK : B_NO_MEMORY; +} + + void BPackageInfo::ClearProvidesList() { @@ -1328,6 +1408,8 @@ BPackageInfo::Clear() fVersion.Clear(); fCopyrightList.MakeEmpty(); fLicenseList.MakeEmpty(); + fURLList.MakeEmpty(); + fSourceURLList.MakeEmpty(); fRequiresList.MakeEmpty(); fProvidesList.MakeEmpty(); fSupplementsList.MakeEmpty();