diff --git a/libpkg/data/package.cpp b/libpkg/data/package.cpp index c8c3b2a..577af89 100644 --- a/libpkg/data/package.cpp +++ b/libpkg/data/package.cpp @@ -553,8 +553,23 @@ template <> LIBPKG_EXPORT void pull(LibPkg::PackageSpec &reflectable, const RAPIDJSON_NAMESPACE::GenericValue> &value, JsonDeserializationErrors *errors) { - // just deserialize the package (and ignore the ID) - pull(reflectable.pkg, value, errors); + // allow the package being specified with ID or directly + if (!value.IsObject()) { + if (errors) { + errors->reportTypeMismatch(value.GetType()); + } + return; + } + // find member + const auto obj = value.GetObject(); + if (const auto pkg = value.FindMember("pkg"); pkg != value.MemberEnd()) { + pull(reflectable.pkg, pkg->value, errors); + if (const auto id = value.FindMember("id"); id != value.MemberEnd()) { + pull(reflectable.id, id->value, errors); + } + } else { + pull(reflectable.pkg, value, errors); + } } } // namespace JsonReflector diff --git a/libpkg/data/package.h b/libpkg/data/package.h index b5f6d33..b7f1b25 100644 --- a/libpkg/data/package.h +++ b/libpkg/data/package.h @@ -513,7 +513,7 @@ REFLECTIVE_RAPIDJSON_TREAT_AS_MULTI_MAP_OR_HASH(LibPkg::DependencySet); namespace JsonReflector { -// declare custom (de)serialization for PackageSearchResult +// declare custom (de)serialization for LibPkg::PackageSpec template <> LIBPKG_EXPORT void push( const LibPkg::PackageSpec &reflectable, RAPIDJSON_NAMESPACE::Value &value, RAPIDJSON_NAMESPACE::Document::AllocatorType &allocator); diff --git a/srv/static/js/buildactionspage.js b/srv/static/js/buildactionspage.js index 5b685de..23c4d3d 100644 --- a/srv/static/js/buildactionspage.js +++ b/srv/static/js/buildactionspage.js @@ -781,7 +781,7 @@ function renderBuildPreparationBuildData(buildDataForPackage) function makeVersionsString(packages) { - const versions = packages.map(packageObj => packageObj.version); + const versions = packages.map(packageObj => packageObj.pkg ? packageObj.pkg.version : packageObj.version); if (versions.length === 0) { return '?'; } else if (versions.length === 1) { diff --git a/srv/static/js/customrendering.js b/srv/static/js/customrendering.js index 812c82c..9a86e66 100644 --- a/srv/static/js/customrendering.js +++ b/srv/static/js/customrendering.js @@ -65,6 +65,11 @@ const fieldsWithBasics = ['name', 'version', ...fieldsWithoutBasics]; export function renderPackage(packageObj, withoutBasics) { + const pkgInfo = packageObj.pkg; + if (pkgInfo) { + pkgInfo.id = packageObj.id; + packageObj = pkgInfo; + } const table = GenericRendering.renderTableFromJsonObject({ data: packageObj, displayLabels: withoutBasics ? labelsWithoutBasics : labelsWithBasics,