)]}'
{
  "commit": "55cbccba38995c46a1af08db5536d2fcb0a03bb1",
  "tree": "5667369a44fddb137d452344baa23b63f20c8639",
  "parents": [
    "afaeb408b044bfa0fa2a6c169512a94a87bf3b94"
  ],
  "author": {
    "name": "Chris Poucet",
    "email": "poucet@google.com",
    "time": "Tue Nov 16 03:17:06 2021 +0100"
  },
  "committer": {
    "name": "Chris Poucet",
    "email": "poucet@google.com",
    "time": "Mon Nov 22 16:32:47 2021 +0100"
  },
  "message": "Introduce the concept of Finalizable to tear down services.\n\nThis will allow services and AppContext to be properly cleared\nwhen necessary.\n\nThis is in the interest of getting rid of globals. In the parent change,\nit was discovered that some services don\u0027t clean up nicely hence this\nchange.\n\nAdditionally, as we will allow creating and removing of certain services\n(e.g. ChangeService and CommentsService) they will also need the ability\nto be cleaned up.\n\nIn addition, clean up how we register services for tests and clean up\nafter tests.\n\nBecause we now subscribe more often as we are recreating Services for\neach test, subscriptions were leaking and there would be\nstack-overflow-errors in the subscribe logic. To address this, move away\nfrom using disconnected$ and instead rely on .unsubscribe() for\nsubscriptions;\n\nGoogle-Bug-Id: b/206459178\nChange-Id: I93ee6933ccc68728e1de174e1daac52cc4b83dc7\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6ccd56a74fab94242dcd6caf8127111f3e59fb88",
      "old_mode": 33188,
      "old_path": ".bazelrc",
      "new_id": "3f9335c90bdf0e14298f36c1cac1b2a5fc11b92e",
      "new_mode": 33188,
      "new_path": ".bazelrc"
    },
    {
      "type": "modify",
      "old_id": "e220e7da209a1a665df28044484805548f261333",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts",
      "new_id": "037e11fefdb7b9497ddc740e6c5d63e662848039",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/admin/gr-create-change-dialog/gr-create-change-dialog.ts"
    },
    {
      "type": "modify",
      "old_id": "b01de6aa46fba8a36a5dd4dd6196edbab5254e09",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts",
      "new_id": "a84b33d15642c807c73c6af3855ed97372cff22b",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/change/gr-change-view/gr-change-view.ts"
    },
    {
      "type": "modify",
      "old_id": "5ca7543ee05d241c072e56bcc70386ffaf3f8246",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts",
      "new_id": "c2c31314ce1c1ee21546a37c20d7a86223b06dd0",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/change/gr-file-list/gr-file-list.ts"
    },
    {
      "type": "modify",
      "old_id": "b3c5f8c4a25f363daee870b2f5341737aa7ca787",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.ts",
      "new_id": "bd51aab0f5c3f960f83920b4384998bb57c8314e",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/change/gr-messages-list/gr-messages-list.ts"
    },
    {
      "type": "modify",
      "old_id": "806998aafbece6e5f2b8ccf5847fe8540cfb4d7b",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts",
      "new_id": "29c8eca6b067af6d66044585eb08ac948cf41d66",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/core/gr-main-header/gr-main-header.ts"
    },
    {
      "type": "modify",
      "old_id": "af9c9d408170ee5bd79ce77b45adac569143bd49",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls.ts",
      "new_id": "9673826b1e1d3cc5592445f1c5bc985498c180e8",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/diff/gr-context-controls/gr-context-controls.ts"
    },
    {
      "type": "modify",
      "old_id": "d89ad55de85bd9e49948f80c915291702648d3f6",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts",
      "new_id": "8c0564098fa61fa30170d57a3a02fc6938b98231",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/diff/gr-diff-host/gr-diff-host.ts"
    },
    {
      "type": "modify",
      "old_id": "cf328f1880a514fb0994a917a0c9af189e8ba233",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts",
      "new_id": "4f6ae148a1d4cf0448a06b764360e2f9825526ab",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/diff/gr-diff-mode-selector/gr-diff-mode-selector.ts"
    },
    {
      "type": "modify",
      "old_id": "5c62e7a2d5baf4de521f44b56ee7571e0fc4207c",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/diff/gr-diff-preferences-dialog/gr-diff-preferences-dialog_test.ts",
      "new_id": "7f7f265988a191a0216bc3c8ef78b3e413cbc56e",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/diff/gr-diff-preferences-dialog/gr-diff-preferences-dialog_test.ts"
    },
    {
      "type": "modify",
      "old_id": "4a06679700028b4798428c92c9656b71a6be5cf7",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts",
      "new_id": "393e09329d12ffda328b66e2ce4519ec607ece07",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/diff/gr-diff-view/gr-diff-view.ts"
    },
    {
      "type": "modify",
      "old_id": "779f7fbddc22c0dc0615bcb84638bab3d00dcec5",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences.ts",
      "new_id": "4657020927c64718891a599f3d311f54193bc310",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/shared/gr-diff-preferences/gr-diff-preferences.ts"
    },
    {
      "type": "modify",
      "old_id": "3b3a854b8d31c1716e4a1882fb66f9af4bcb0fba",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands.ts",
      "new_id": "68d8d7d7ab1927991cb02dd1f9242879891b1edf",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands.ts"
    },
    {
      "type": "modify",
      "old_id": "ef712ac87a72aa9bb2aed18f8312c68161243262",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_test.ts",
      "new_id": "6cbef790ced5669cddd694d53b9d1633715dc82b",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/shared/gr-download-commands/gr-download-commands_test.ts"
    },
    {
      "type": "modify",
      "old_id": "4ad801dbc1623cd1b1d5a298bf878aacb9b6b102",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-gerrit.ts",
      "new_id": "d76b2b723f2de40c495b7a4a73194c62d988b09d",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-gerrit.ts"
    },
    {
      "type": "modify",
      "old_id": "801550549712938b5f96ebd192fd4846aea6a18c",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface-element.ts",
      "new_id": "0bd3e5999548d831c587056da0714a2bb4f8e7b9",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-interface-element.ts"
    },
    {
      "type": "modify",
      "old_id": "9644ef3f87cde08d904316d35ba592b7829f3e8d",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-types.ts",
      "new_id": "7e6a0c708378975de464b51524254cb833b4c25d",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/shared/gr-js-api-interface/gr-js-api-types.ts"
    },
    {
      "type": "modify",
      "old_id": "5e8e7330db2578966b93f407c3964a42df6c4be2",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.ts",
      "new_id": "9b292e95f71664bec768699eb1e5a2a38a68b19a",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/elements/shared/gr-rest-api-interface/gr-rest-api-interface.ts"
    },
    {
      "type": "modify",
      "old_id": "21a9de899a8edc88ad827a00856f24704c05cca1",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/embed/gr-diff-app-context-init.ts",
      "new_id": "229bce3357474ea0b1fd17760ad9bf9e4991bd53",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/embed/gr-diff-app-context-init.ts"
    },
    {
      "type": "modify",
      "old_id": "74f4ee5a618ab2cc147bcd6acd59647cf2f378ee",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/app-context-init.ts",
      "new_id": "32a45602181aa8eb960f2d15960766797f036ee2",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/app-context-init.ts"
    },
    {
      "type": "modify",
      "old_id": "16344a1b09f18b882bb6ecb6cad14161b9746ec8",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/app-context-init_test.ts",
      "new_id": "efe6aac4b65ff89eb44468c700b69591e0e1424f",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/app-context-init_test.ts"
    },
    {
      "type": "modify",
      "old_id": "71d0147b183cd4aa278c6e08123d6d0e367a5587",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/app-context.ts",
      "new_id": "49d5bcc2c2b169014d843202c9bcead8dfaa7266",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/app-context.ts"
    },
    {
      "type": "modify",
      "old_id": "d98f8f74b08838803d91b0b9da0b0a03c78f537a",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/browser/browser-service.ts",
      "new_id": "b80c4df4dc624d9397b1b2f93890acbb540f20d9",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/browser/browser-service.ts"
    },
    {
      "type": "modify",
      "old_id": "7a6bdd6dc2fe9e978e0c99e5daafca00ad89af32",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/change/change-service.ts",
      "new_id": "7a2d2f4af7ece562e6c313a92092c2172cc48827",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/change/change-service.ts"
    },
    {
      "type": "modify",
      "old_id": "5ebc13c614e2f20913735a96f574b376d5161f0c",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/checks/checks-service.ts",
      "new_id": "111036c67e8f84d8a44ded2e37c7f3117207d613",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/checks/checks-service.ts"
    },
    {
      "type": "modify",
      "old_id": "b9dc17f12b66e8c1f81a26b6763ceeba184fa6e0",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/comments/comments-service.ts",
      "new_id": "c888cd5dffa68e2f8d651f9f403ae156527ccd27",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/comments/comments-service.ts"
    },
    {
      "type": "modify",
      "old_id": "d0309a81389279091a71544eb1b9cd8c69036f15",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/comments/comments-service_test.ts",
      "new_id": "5fe859f2028500f03e9547a923b3490027fc95a6",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/comments/comments-service_test.ts"
    },
    {
      "type": "modify",
      "old_id": "6d01e271cd00064a8680f1ea3ec20f04df543e5c",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/config/config-service.ts",
      "new_id": "667f3472a85a401458de4796d8b83c1f525c9372",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/config/config-service.ts"
    },
    {
      "type": "modify",
      "old_id": "318ea35551c67aa60c62e252550ff585d3857b72",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/flags/flags.ts",
      "new_id": "b688e8f6817160721f3fac58e96986f2ed431311",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/flags/flags.ts"
    },
    {
      "type": "modify",
      "old_id": "18e225bb5ba3bd83b6bea281d2d53763bad17a6d",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/flags/flags_impl.ts",
      "new_id": "9767d1a43f398ca701588df4a52c219b1bd6da6e",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/flags/flags_impl.ts"
    },
    {
      "type": "modify",
      "old_id": "f7fdadfaae3762be880427cf8cd4cac13a0f19ee",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/gr-auth/gr-auth.ts",
      "new_id": "ac63d6ad765c0c0b0b917650111fdcfcbe84c9cf",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/gr-auth/gr-auth.ts"
    },
    {
      "type": "modify",
      "old_id": "c2542849d958870bc432ef8a155811118a3bffdf",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/gr-auth/gr-auth_impl.ts",
      "new_id": "b740d29c20578a9e4fd1527b2fd2ec1a06b3386e",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/gr-auth/gr-auth_impl.ts"
    },
    {
      "type": "modify",
      "old_id": "3dbb4c305201ce854b5a3a179043806318a1c4f2",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/gr-auth/gr-auth_mock.ts",
      "new_id": "e5331f1e55716b903dac2e9eabd6479f8c0bf7cd",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/gr-auth/gr-auth_mock.ts"
    },
    {
      "type": "modify",
      "old_id": "e5400295ebc8670445f5a4bf055ac92cac91f627",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/gr-event-interface/gr-event-interface.ts",
      "new_id": "391a32b48e4c33805e16de59988e93333bdfd749",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/gr-event-interface/gr-event-interface.ts"
    },
    {
      "type": "modify",
      "old_id": "d8c5d770e3f8f8611316669493395068097801af",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/gr-event-interface/gr-event-interface_impl.ts",
      "new_id": "19d2f611856f098e8217e0251f3de4dfe8ad3e73",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/gr-event-interface/gr-event-interface_impl.ts"
    },
    {
      "type": "modify",
      "old_id": "06f1a0c5f0e7eea9ab5202424021fdad4867e655",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/gr-reporting/gr-reporting.ts",
      "new_id": "679fefc138edabfa0132727c9af00c455a77c253",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/gr-reporting/gr-reporting.ts"
    },
    {
      "type": "modify",
      "old_id": "4d9b76f7c72518eb28cd8543422250973716f221",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/gr-reporting/gr-reporting_impl.ts",
      "new_id": "7d03de566a4a595bb7e47b235d709c2dae9f43b0",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/gr-reporting/gr-reporting_impl.ts"
    },
    {
      "type": "modify",
      "old_id": "337cf2fbe6b1ae450365cc29d89a2105cde1b404",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/gr-reporting/gr-reporting_mock.ts",
      "new_id": "485402b69fd9259fdb5b7c4439168cec4d4357d7",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/gr-reporting/gr-reporting_mock.ts"
    },
    {
      "type": "modify",
      "old_id": "947f51867ffab8aae111d96bcf96a0075602b8cd",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/gr-rest-api/gr-rest-api.ts",
      "new_id": "b20371589bffec45e96909b4d2b2b7031668029f",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/gr-rest-api/gr-rest-api.ts"
    },
    {
      "type": "modify",
      "old_id": "1e92c3c8c91a2bbefcccfa64e5b4a91621741b75",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/registry.ts",
      "new_id": "ab204a23cb0cf468decefb644d797b9ed80869c9",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/registry.ts"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d677be07c2bf08c3377ac3b3faa2c64cd423382d",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/registry_test.ts"
    },
    {
      "type": "modify",
      "old_id": "f2e9e98901f03f52335009970424fc12d0ff31e8",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/shortcuts/shortcuts-service.ts",
      "new_id": "1f9e08304eeb4bbca5334d9238f2258c8f4d76ab",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/shortcuts/shortcuts-service.ts"
    },
    {
      "type": "modify",
      "old_id": "08a3387c61b3e5bb7c93c4e17ce1067a7ddd9503",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/storage/gr-storage.ts",
      "new_id": "0b995d8b4fdf1d253b95fd10ae7b0e276a91287f",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/storage/gr-storage.ts"
    },
    {
      "type": "modify",
      "old_id": "0c0d1518c5994df585d23c2aaa22e08b79c022ca",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/storage/gr-storage_impl.ts",
      "new_id": "0824fb4dee35e8bd045cce15d3e742847a5aef01",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/storage/gr-storage_impl.ts"
    },
    {
      "type": "modify",
      "old_id": "399ffe4e1f7b096b39260cc3bd5c6b37b45bd573",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/storage/gr-storage_mock.ts",
      "new_id": "79f0fbce7d620175842694eb670b27b45aed1eb9",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/storage/gr-storage_mock.ts"
    },
    {
      "type": "modify",
      "old_id": "d08da8b6d62362234dbe57dde1e9292ca2a8540f",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/services/user/user-service.ts",
      "new_id": "d2bca8511b37802ff8c4305ce575391efecdbd84",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/services/user/user-service.ts"
    },
    {
      "type": "modify",
      "old_id": "39c79d1112e1681f7668059da3ba5cee1bb01f89",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/test/common-test-setup-karma.ts",
      "new_id": "888ace04eb10cb2ad59a8812cee03b6d1f9b6c92",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/test/common-test-setup-karma.ts"
    },
    {
      "type": "modify",
      "old_id": "060bb8bbcee3eba25c5a27e3c3ee1cfc7d39593d",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/test/common-test-setup.ts",
      "new_id": "f555e8e55f218cf52a05d67cb491a8800d893a2e",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/test/common-test-setup.ts"
    },
    {
      "type": "modify",
      "old_id": "63ffcbd28421c0a0070d90a50035b52d62fb7f21",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/test/mocks/gr-rest-api_mock.ts",
      "new_id": "dfc0a0b8724df6ab36d9ae66bc2549bc4e83dfe8",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/test/mocks/gr-rest-api_mock.ts"
    },
    {
      "type": "modify",
      "old_id": "04736ec656b0700ef9182dfeaaf2283c965b4be5",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/test/test-app-context-init.ts",
      "new_id": "2817d35d94664eac93d7779cfef05255d931c3e5",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/test/test-app-context-init.ts"
    },
    {
      "type": "modify",
      "old_id": "93e33629f2400ea7679ac122c1430ae70e2fd4c1",
      "old_mode": 33188,
      "old_path": "polygerrit-ui/app/utils/async-util.ts",
      "new_id": "3f51532e4c9e566835b14e939ba4c345f0bf315e",
      "new_mode": 33188,
      "new_path": "polygerrit-ui/app/utils/async-util.ts"
    }
  ]
}
