)]}'
{
  "commit": "37110c360f012c10f3b9456a0eb282eefd3275b3",
  "tree": "0d8ade7c95d54a576d88e53fb5e8ca9ee76c8f29",
  "parents": [
    "5456a3c4f14f7f73eb49dbfbb3de0bc009c970fe"
  ],
  "author": {
    "name": "Serge Bazanski",
    "email": "serge@monogon.tech",
    "time": "Wed Mar 01 13:57:27 2023 +0000"
  },
  "committer": {
    "name": "Serge Bazanski",
    "email": "serge@monogon.tech",
    "time": "Thu Mar 16 16:55:28 2023 +0000"
  },
  "message": "m/pkg/event: make type-safe\n\nThis is a fairly large change which makes use of Go type parameters\n(“generics”) to make the event library (and its memory/etcd\nimplementations) type safe.\n\nSince we now have the event.Value interface strongly typed, we also move\noptions which were implementation-specific (like BacklogOnly)\nto be part of that interface, instead of the previously type-asserted\nspecific implementations. Use of options that are not handled by a\nparticular implementation is a runtime error. Expressing this in the\ntype system is probably not worth the effort.\n\nWe also implement Filter to allow offloading some of the functionality previously implemented in type assertion wrappers into the library itself.\n\nIn the end, this ends up removing a bunch of type assertion code, at\nthe cost of a fairly sweeping change. Unfortunately, some of this is due\nto IntelliJ suddenly deciding to reformat comments.\n\nChange-Id: I1ca6d93db1b5c4055a21af3fb9e5e3d425c0d86e\nReviewed-on: https://review.monogon.dev/c/monogon/+/1322\nTested-by: Jenkins CI\nReviewed-by: Leopold Schabel \u003cleo@monogon.tech\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4f0ab366237b2528ec2695fffe50ad5e640874ff",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/cluster/BUILD.bazel",
      "new_id": "246fe1f17a5f5b997e6b421ff5c297fc91353ba5",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/cluster/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "d5eee035203e99197d3ad08b3a9f9e821eebfedd",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/cluster/cluster.go",
      "new_id": "625466954627785418be096f3f721dff44470339",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/cluster/cluster.go"
    },
    {
      "type": "modify",
      "old_id": "b570c69fdbf2c498d81371e7ad9f59252ff1c1e2",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/consensus/consensus.go",
      "new_id": "5daa02f3a973f63f4b5cb9e3012e3220766eb6eb",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/consensus/consensus.go"
    },
    {
      "type": "modify",
      "old_id": "992d0ac856d42bda564b78ebc2939e1880fb2a78",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/consensus/status.go",
      "new_id": "17df8f953aa650166a71b68557b57c46ef5e854e",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/consensus/status.go"
    },
    {
      "type": "modify",
      "old_id": "f69f73ecf6a9e4e62d88c83fec0f9dc0667f1e8b",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/consensus/testhelpers.go",
      "new_id": "8b0b213748bc3f00a25c68d28e2533dd27258787",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/consensus/testhelpers.go"
    },
    {
      "type": "modify",
      "old_id": "be23b5505beee7003340a623fa7d93aeaca05006",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/curator/BUILD.bazel",
      "new_id": "2283b343f2db664f5b809991ffd92f0b95eb2eb1",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/curator/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "400f08c91aa1820252668ba57e41bda08f133220",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/curator/curator.go",
      "new_id": "336b7d6ea43245d881494697894cac8f4a6973e7",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/curator/curator.go"
    },
    {
      "type": "modify",
      "old_id": "b1a96714376687f9d27bfa05ee56d21beb78f6e3",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/curator/curator_test.go",
      "new_id": "e9674f5a099d94db90851009d72a62384c246907",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/curator/curator_test.go"
    },
    {
      "type": "modify",
      "old_id": "a06f8cdd7278cd2e15dfb273542fb125f7b6c75d",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/curator/impl_leader_curator.go",
      "new_id": "869cfd956585ca73b50b479a994e13c2187f20df",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/curator/impl_leader_curator.go"
    },
    {
      "type": "modify",
      "old_id": "b72575922ee966f5fe71a3b4c721118b095408fc",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/curator/impl_leader_management.go",
      "new_id": "69c1445f0d1d551be0baed78267ac8f0810b693c",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/curator/impl_leader_management.go"
    },
    {
      "type": "modify",
      "old_id": "e093d31f31009cc92c9cd98beee0674a20c58cd6",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/curator/listener.go",
      "new_id": "2290ab9bda64f2e9cf99bd91055224808b281577",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/curator/listener.go"
    },
    {
      "type": "modify",
      "old_id": "8b5eb9af054930470bc232148f2566406bcb03d3",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/network/hostsfile/hostsfile.go",
      "new_id": "a4455ecc3cad3dfc899768e37e184e87fb8d8f53",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/network/hostsfile/hostsfile.go"
    },
    {
      "type": "modify",
      "old_id": "45de6b2a348ccb5d616a8baad56c9d2a5dc78f17",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/network/main.go",
      "new_id": "8740d5ab14fa95b3eadd15d273369201ee0d7626",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/network/main.go"
    },
    {
      "type": "modify",
      "old_id": "5a0e2f67cf730bb9f0041a272fbd073ec9b3fb12",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/roleserve.go",
      "new_id": "0d0997dcfdf75a75bf5a66b4de8aa7a67aa2e7d5",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/roleserve.go"
    },
    {
      "type": "modify",
      "old_id": "85618bc7da9747c24a4ed1bd008e5ccae133b155",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/value_bootstrapdata.go",
      "new_id": "29a6ae2ad1d64316a73b100776c6533fbb696900",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/value_bootstrapdata.go"
    },
    {
      "type": "modify",
      "old_id": "f14e2c4c9930ae595684d6cc2ff79f883fa25728",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/value_clustermembership.go",
      "new_id": "e956d1056c8ba03771d4569df8ff0626a84f7dfd",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/value_clustermembership.go"
    },
    {
      "type": "modify",
      "old_id": "4334dc3432908bbe04735b1139270ed363acc978",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/value_kubernetes.go",
      "new_id": "88bdfeb3e6ad5eff011c7619affb4baac2a67d13",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/value_kubernetes.go"
    },
    {
      "type": "modify",
      "old_id": "f095f2fa317f6ec03b25592a51c80917e1725145",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/value_node.go",
      "new_id": "26050ee1b94da77320545a4f924167d542be5620",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/value_node.go"
    },
    {
      "type": "modify",
      "old_id": "5c8c4b2fa362a9bb827e95fc26c292c446fef480",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/worker_controlplane.go",
      "new_id": "354e67e3bf6982884793e1e75b264fba19f98630",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/worker_controlplane.go"
    },
    {
      "type": "modify",
      "old_id": "db068453323fc7bf550b09b9c8820c38c497679a",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/worker_heartbeat.go",
      "new_id": "fdaa9be81ec069671c84fabd26a6d2c1c3e0f8c0",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/worker_heartbeat.go"
    },
    {
      "type": "modify",
      "old_id": "3be3c417f65d5a49af9cf2122c71692d119710f7",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/worker_kubernetes.go",
      "new_id": "e31cf593e8bf251c73a15ecda8a6b3c43fc81060",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/worker_kubernetes.go"
    },
    {
      "type": "modify",
      "old_id": "3856f62f461e743cd11cb228282e3dbad1915094",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/worker_rolefetch.go",
      "new_id": "5f64676151bbcd500fceed92b73fc354cc2486dc",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/worker_rolefetch.go"
    },
    {
      "type": "modify",
      "old_id": "732508a99d0b3ddfd746a16d2fb8959ef2781942",
      "old_mode": 33188,
      "old_path": "metropolis/node/core/roleserve/worker_statuspush.go",
      "new_id": "ed806a0063c35874f6f7ee979e9a0382d82be06a",
      "new_mode": 33188,
      "new_path": "metropolis/node/core/roleserve/worker_statuspush.go"
    },
    {
      "type": "modify",
      "old_id": "d49a5929580e138081be14676f4598ff4445a263",
      "old_mode": 33188,
      "old_path": "metropolis/pkg/event/etcd/etcd.go",
      "new_id": "14dfd9936b233f81e58fd6543c2a5557a28d6502",
      "new_mode": 33188,
      "new_path": "metropolis/pkg/event/etcd/etcd.go"
    },
    {
      "type": "modify",
      "old_id": "13f6ea87f9e9e8d02fdbebede14e82a03cdc128b",
      "old_mode": 33188,
      "old_path": "metropolis/pkg/event/etcd/etcd_test.go",
      "new_id": "81aee5175882970bd68b3b40f48830df78befadc",
      "new_mode": 33188,
      "new_path": "metropolis/pkg/event/etcd/etcd_test.go"
    },
    {
      "type": "modify",
      "old_id": "bc4652599a7d3c3a2aee8daf5000171f5be9310a",
      "old_mode": 33188,
      "old_path": "metropolis/pkg/event/event.go",
      "new_id": "ba9190cc47e1f106140b0602a4f13706d301e047",
      "new_mode": 33188,
      "new_path": "metropolis/pkg/event/event.go"
    },
    {
      "type": "modify",
      "old_id": "da07dc3e2bef2d17b18608e74658513d6454a6e4",
      "old_mode": 33188,
      "old_path": "metropolis/pkg/event/memory/BUILD.bazel",
      "new_id": "d8c199049e8fcf07bd0bbfdab435a3612ceb6614",
      "new_mode": 33188,
      "new_path": "metropolis/pkg/event/memory/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "a119666f745db2509b6df4059415707101ea26c0",
      "old_mode": 33188,
      "old_path": "metropolis/pkg/event/memory/example_test.go",
      "new_id": "583650ca2bf47cc647a6cd8075a8bfc412dffcbf",
      "new_mode": 33188,
      "new_path": "metropolis/pkg/event/memory/example_test.go"
    },
    {
      "type": "modify",
      "old_id": "0db25244b4975141c5068d6b7f5bc81db94c7be1",
      "old_mode": 33188,
      "old_path": "metropolis/pkg/event/memory/memory.go",
      "new_id": "f0a2ab9e41c5bb45cc0c27da5a8dfc577722ddf0",
      "new_mode": 33188,
      "new_path": "metropolis/pkg/event/memory/memory.go"
    },
    {
      "type": "modify",
      "old_id": "f4feb338dde9c67568e041c0f6962cddbaff7c9c",
      "old_mode": 33188,
      "old_path": "metropolis/pkg/event/memory/memory_test.go",
      "new_id": "41f121e743e74c7f586789894277b41a8367f2b0",
      "new_mode": 33188,
      "new_path": "metropolis/pkg/event/memory/memory_test.go"
    },
    {
      "type": "modify",
      "old_id": "8b886bf6b37caea93ed11daea180d2d49ec6ddfd",
      "old_mode": 33188,
      "old_path": "metropolis/pkg/pki/crl.go",
      "new_id": "23838a1a0b6f620d9eff45f35e031b42bf0b8170",
      "new_mode": 33188,
      "new_path": "metropolis/pkg/pki/crl.go"
    }
  ]
}
