Merge "Fix merging schemas in aos configs"
diff --git a/aos/configuration.cc b/aos/configuration.cc
index 314f82f..97f4d4b 100644
--- a/aos/configuration.cc
+++ b/aos/configuration.cc
@@ -534,6 +534,10 @@
auto result = channels.insert(RecursiveCopyFlatBuffer(c));
if (!result.second) {
// Already there, so merge the new table into the original.
+ // Schemas merge poorly, so pick the newest one.
+ if (result.first->message().has_schema() && c->has_schema()) {
+ result.first->mutable_message()->clear_schema();
+ }
auto merged =
MergeFlatBuffers(*result.first, RecursiveCopyFlatBuffer(c));
diff --git a/aos/flatbuffer_merge.cc b/aos/flatbuffer_merge.cc
index 18a190f..17f4468 100644
--- a/aos/flatbuffer_merge.cc
+++ b/aos/flatbuffer_merge.cc
@@ -38,9 +38,9 @@
const bool t2_has = val2 != nullptr;
if (t2_has) {
- fbb->AddElement<T>(field_offset, flatbuffers::ReadScalar<T>(val2), 0);
+ fbb->AddElement<T>(field_offset, flatbuffers::ReadScalar<T>(val2));
} else if (t1_has) {
- fbb->AddElement<T>(field_offset, flatbuffers::ReadScalar<T>(val1), 0);
+ fbb->AddElement<T>(field_offset, flatbuffers::ReadScalar<T>(val1));
}
}
diff --git a/aos/flatbuffer_merge_test.cc b/aos/flatbuffer_merge_test.cc
index 4162edc..81aa2e1 100644
--- a/aos/flatbuffer_merge_test.cc
+++ b/aos/flatbuffer_merge_test.cc
@@ -258,6 +258,28 @@
}
{
+ flatbuffers::FlatBufferBuilder aos_flatbuffer_copy_fbb;
+ aos_flatbuffer_copy_fbb.ForceDefaults(false);
+
+ LOG(INFO) << "Copying without defaults " << in1 << " "
+ << absl::BytesToHexString(FromFbb(fb1)) << " at "
+ << reinterpret_cast<const void *>(fb1.span().data()) << " size "
+ << fb1.span().size();
+ aos_flatbuffer_copy_fbb.Finish(CopyFlatBuffer<Configuration>(
+ &fb1.message(), &aos_flatbuffer_copy_fbb));
+
+ const aos::FlatbufferDetachedBuffer<Configuration> fb_copy(
+ aos_flatbuffer_copy_fbb.Release());
+ ASSERT_NE(fb_copy.span().size(), 0u);
+
+ EXPECT_TRUE(fb1.Verify());
+
+ ASSERT_TRUE(fb_copy.Verify()) << in1;
+
+ EXPECT_EQ(in1, FlatbufferToJson(fb_copy));
+ }
+
+ {
flatbuffers::FlatBufferBuilder aos_flatbuffer_copy_message_ptr_fbb;
aos_flatbuffer_copy_message_ptr_fbb.ForceDefaults(true);