Fix passing around different versions of PackageSpec
The way this is passed has gotten a bit inconsistent; let's just make it compatible both ways.
This commit is contained in:
parent
92f83fadb6
commit
162f56c5e3
|
@ -553,8 +553,23 @@ template <>
|
||||||
LIBPKG_EXPORT void pull<LibPkg::PackageSpec>(LibPkg::PackageSpec &reflectable,
|
LIBPKG_EXPORT void pull<LibPkg::PackageSpec>(LibPkg::PackageSpec &reflectable,
|
||||||
const RAPIDJSON_NAMESPACE::GenericValue<RAPIDJSON_NAMESPACE::UTF8<char>> &value, JsonDeserializationErrors *errors)
|
const RAPIDJSON_NAMESPACE::GenericValue<RAPIDJSON_NAMESPACE::UTF8<char>> &value, JsonDeserializationErrors *errors)
|
||||||
{
|
{
|
||||||
// just deserialize the package (and ignore the ID)
|
// allow the package being specified with ID or directly
|
||||||
pull(reflectable.pkg, value, errors);
|
if (!value.IsObject()) {
|
||||||
|
if (errors) {
|
||||||
|
errors->reportTypeMismatch<LibPkg::PackageSpec>(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
|
} // namespace JsonReflector
|
||||||
|
|
|
@ -513,7 +513,7 @@ REFLECTIVE_RAPIDJSON_TREAT_AS_MULTI_MAP_OR_HASH(LibPkg::DependencySet);
|
||||||
|
|
||||||
namespace JsonReflector {
|
namespace JsonReflector {
|
||||||
|
|
||||||
// declare custom (de)serialization for PackageSearchResult
|
// declare custom (de)serialization for LibPkg::PackageSpec
|
||||||
template <>
|
template <>
|
||||||
LIBPKG_EXPORT void push<LibPkg::PackageSpec>(
|
LIBPKG_EXPORT void push<LibPkg::PackageSpec>(
|
||||||
const LibPkg::PackageSpec &reflectable, RAPIDJSON_NAMESPACE::Value &value, RAPIDJSON_NAMESPACE::Document::AllocatorType &allocator);
|
const LibPkg::PackageSpec &reflectable, RAPIDJSON_NAMESPACE::Value &value, RAPIDJSON_NAMESPACE::Document::AllocatorType &allocator);
|
||||||
|
|
|
@ -781,7 +781,7 @@ function renderBuildPreparationBuildData(buildDataForPackage)
|
||||||
|
|
||||||
function makeVersionsString(packages)
|
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) {
|
if (versions.length === 0) {
|
||||||
return '?';
|
return '?';
|
||||||
} else if (versions.length === 1) {
|
} else if (versions.length === 1) {
|
||||||
|
|
|
@ -65,6 +65,11 @@ const fieldsWithBasics = ['name', 'version', ...fieldsWithoutBasics];
|
||||||
|
|
||||||
export function renderPackage(packageObj, withoutBasics)
|
export function renderPackage(packageObj, withoutBasics)
|
||||||
{
|
{
|
||||||
|
const pkgInfo = packageObj.pkg;
|
||||||
|
if (pkgInfo) {
|
||||||
|
pkgInfo.id = packageObj.id;
|
||||||
|
packageObj = pkgInfo;
|
||||||
|
}
|
||||||
const table = GenericRendering.renderTableFromJsonObject({
|
const table = GenericRendering.renderTableFromJsonObject({
|
||||||
data: packageObj,
|
data: packageObj,
|
||||||
displayLabels: withoutBasics ? labelsWithoutBasics : labelsWithBasics,
|
displayLabels: withoutBasics ? labelsWithoutBasics : labelsWithBasics,
|
||||||
|
|
Loading…
Reference in New Issue