)]}'
{
  "commit": "23ccb359e1a18a9fc77be08aeff34f00d79f4f11",
  "tree": "ef3c1f9473665b1c76d9589a12e9b75146d48bdd",
  "parents": [
    "e31c6dd73d24ea4bce7a6282c19ab38b81616ba9"
  ],
  "author": {
    "name": "Joe Tsai",
    "email": "joetsai@digital-static.net",
    "time": "Thu Mar 11 02:50:41 2021 -0800"
  },
  "committer": {
    "name": "Joe Tsai",
    "email": "joetsai@digital-static.net",
    "time": "Tue Mar 16 02:41:12 2021 +0000"
  },
  "message": "internal/impl: add runtime support for aberrant messages\n\nImplement support in the protobuf runtime to better understand\nmessage types that are not generated by the official generator.\n\nIn particular:\n* Add a best-effort implementation of protobuf reflection for\n\"non-nullable\" fields which are supposed to be represented by *T,\nbut are instead represented by a T. \"Non-nullable\" message fields\nreport presence based on whether the message is the zero Go value.\n* We do NOT implement support for \"non-nullable\" fields in the\ntable-driven implementation since we assume that the aberrant messages\nthat we care about have a Marshal and Unmarshal method.\n* We better handle custom messages that implement Marshal and Unmarshal,\nbut do NOT implement Merge. In that case, we implement merge in terms of\na back-to-back marshal and unmarshal.\n* We better tolerate the situations where a protobuf message field\ncannot be mapped to a Go struct field since the latter is missing.\nIn such cases, reflection treats the field as if it were unpopulated.\nSetting such fields will panic.\n\nThis change allows the runtime to handle all message types declared\nin the \"go.etcd.io/etcd\" and \"k8s.io\" modules where protobuf reflection,\nMarshal, Unmarshal, Reset, Merge, and Equal all work.\n\nThe only types that still do not fully work are:\n\t* \"k8s.io/api/authentication/v1\".ExtraValue\n\t* \"k8s.io/api/authentication/v1beta1\".ExtraValue\n\t* \"k8s.io/api/authorization/v1\".ExtraValue\n\t* \"k8s.io/api/authorization/v1beta1\".ExtraValue\n\t* \"k8s.io/api/certificates/v1\".ExtraValue\n\t* \"k8s.io/api/certificates/v1beta1\".ExtraValue\n\t* \"k8s.io/apimachinery/pkg/apis/meta/v1\".MicroTime\n\t* \"k8s.io/apimachinery/pkg/apis/meta/v1\".Time\n\t* \"k8s.io/apimachinery/pkg/apis/meta/v1\".Verbs\nWhile Marshal, Unmarshal, Reset, and Merge continue to work,\nprotobuf reflection and any functionality that depends on it\n(e.g., prototext, protojson, Equal, etc.) will not work.\n\nChange-Id: I67a9d2f1bec35248045ad0c16220d02fc2e0e172\nReviewed-on: https://go-review.googlesource.com/c/protobuf/+/300869\nTrust: Joe Tsai \u003cjoetsai@digital-static.net\u003e\nTrust: Joe Tsai \u003cthebrokentoaster@gmail.com\u003e\nReviewed-by: Damien Neil \u003cdneil@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e10864274e68b3b9fb321a3ed4208a8f68a9bac4",
      "old_mode": 33188,
      "old_path": "internal/impl/codec_message.go",
      "new_id": "cd40527ff646203e19747ff7b823fc7750bd427c",
      "new_mode": 33188,
      "new_path": "internal/impl/codec_message.go"
    },
    {
      "type": "modify",
      "old_id": "36a90dff381644456a5abd378e0fb5912d9cd3ef",
      "old_mode": 33188,
      "old_path": "internal/impl/convert.go",
      "new_id": "acd61bb50b2ca04c04ce77b7ebc403d779dea121",
      "new_mode": 33188,
      "new_path": "internal/impl/convert.go"
    },
    {
      "type": "modify",
      "old_id": "b1d66c5c5484c2a3c33ba72acc506cc43f4a8a7e",
      "old_mode": 33188,
      "old_path": "internal/impl/legacy_message.go",
      "new_id": "3759b010c0cb9e3f5be88dac5e7005fc19394b59",
      "new_mode": 33188,
      "new_path": "internal/impl/legacy_message.go"
    },
    {
      "type": "modify",
      "old_id": "0c6f106ae04535759005b992fecd6b09f22e1175",
      "old_mode": 33188,
      "old_path": "internal/impl/message_reflect.go",
      "new_id": "9488b726131366509be747a136d4ba01bfcdf98a",
      "new_mode": 33188,
      "new_path": "internal/impl/message_reflect.go"
    },
    {
      "type": "modify",
      "old_id": "23124a86e40cc23b39f663d1184c663a0c83cb3e",
      "old_mode": 33188,
      "old_path": "internal/impl/message_reflect_field.go",
      "new_id": "343cf872197f76f7c1a40c4eff2b2f14c93792d3",
      "new_mode": 33188,
      "new_path": "internal/impl/message_reflect_field.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e272838c813f35fd3c3f77f9ee186ef60ae0e120",
      "new_mode": 33188,
      "new_path": "internal/testprotos/nullable/methods_test.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a291b45add6b9cdaa5edd55a489559a969e4b8d6",
      "new_mode": 33188,
      "new_path": "internal/testprotos/nullable/nullable.go"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6994e349eee60b4b9d347d8e36c98a7544ba4585",
      "new_mode": 33188,
      "new_path": "internal/testprotos/nullable/nullable_test.go"
    }
  ]
}
