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);