)]}'
{
  "commit": "a61bb6e940ce00f2602d19163e8d410c857a649a",
  "tree": "aa86f3611f6b008231290225d0eb211dbaeb9ff2",
  "parents": [
    "1cd49c8fb3e75eb48f84b19d89dde1c82be4b81b"
  ],
  "author": {
    "name": "Edwin Kempin",
    "email": "ekempin@google.com",
    "time": "Fri Apr 16 14:12:21 2021 +0200"
  },
  "committer": {
    "name": "Edwin Kempin",
    "email": "ekempin@google.com",
    "time": "Wed May 05 09:28:15 2021 +0000"
  },
  "message": "Apply implicit approvals only when change owner \u003d\u003d last patch set uploader\n\nSo far implicit approvals are applied on all patch sets that are\nuploaded by a code owner. This has some implications that are unexpected\nto users. E.g. if a non-code-owner uploads a change and a code owner\nedits its commit message, the change gets implicitly code owner approved\n(because editing the commit message creates a new patch set that is\nuploaded by the code owner, and hence is implicitly code owner\napproved).\n\nApplying implicit approvals only based on the change owner (all patch\nsets of changes that are owned by a code owner are automatically\napproved) is even worse, as a non-code-owner could upload a new patch\nset to a change that is owned by a code owner and then get their patch\nset implicitly approved by the change owner. This would allow\nnon-code-onwers to get arbitrary code implicitly code owner approved.\n\nTo avoid both issues we now apply implicit code owner approvals only if\na change is owned by a code owner and if the last patch set was uploaded\nby the change owner (change owner \u003d\u003d last patch set uploader).\n\nThis doesn\u0027t resolve all security concerns about enabling implicit code\nowner approvals, but is much safer than what we have now. It remains an\nissue that code owners must be aware of their implicit code owner\napproval when creating changes. E.g. if a code owner helps a contributor\nto rebase a patch to another branch, they implicitly approve the change\non the other branch (since the code owner is the change owner).\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I33d5e7433172847d6ee419a7a17740353cd34a99\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "4317c77dacf9988974540ab1d787f104b8808ab2",
      "old_mode": 33188,
      "old_path": "java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java",
      "new_id": "65f4d782adc68626310582842da2260b131a0c02",
      "new_mode": 33188,
      "new_path": "java/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheck.java"
    },
    {
      "type": "modify",
      "old_id": "234e4a0eef0f823d3a5b6feac2672cb89c1ac314",
      "old_mode": 33188,
      "old_path": "java/com/google/gerrit/plugins/codeowners/backend/config/CodeOwnersPluginProjectConfigSnapshot.java",
      "new_id": "ea7c88bd45f15c0e9fe31527db428bc8673aaa36",
      "new_mode": 33188,
      "new_path": "java/com/google/gerrit/plugins/codeowners/backend/config/CodeOwnersPluginProjectConfigSnapshot.java"
    },
    {
      "type": "modify",
      "old_id": "72e2022774ff840b2e6da22fee8153ddeec7f6fb",
      "old_mode": 33188,
      "old_path": "java/com/google/gerrit/plugins/codeowners/backend/config/GeneralConfig.java",
      "new_id": "7ab67066e61d57423a06190b216dfb439d41597c",
      "new_mode": 33188,
      "new_path": "java/com/google/gerrit/plugins/codeowners/backend/config/GeneralConfig.java"
    },
    {
      "type": "modify",
      "old_id": "566c5cdc2a88a420d422242e18b8912bfcf7465f",
      "old_mode": 33188,
      "old_path": "javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java",
      "new_id": "98268cb74a54a80f54e155d4ee52c67675b53b57",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckTest.java"
    },
    {
      "type": "modify",
      "old_id": "68382f9ab504007e8d73f8e53fa70f6a61ac383b",
      "old_mode": 33188,
      "old_path": "javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java",
      "new_id": "4ab563ca31a229138e65fef002f5257091982f8a",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithProjectOwnersAsFallbackCodeOwnersTest.java"
    },
    {
      "type": "modify",
      "old_id": "6cdf2b191dd940f617dbc1bfadcbde97458f4fdf",
      "old_mode": 33188,
      "old_path": "javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java",
      "new_id": "f09a9e8b0a5f3a12403ca6f0fa0c4776a2dac15f",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/plugins/codeowners/backend/CodeOwnerApprovalCheckWithSelfApprovalsIgnoredTest.java"
    },
    {
      "type": "modify",
      "old_id": "473de83c32d7a627053b70dcdd29e0448184d2e7",
      "old_mode": 33188,
      "old_path": "resources/Documentation/config-guide.md",
      "new_id": "86b447ff378f7bc05973dda44599585b6ece5b42",
      "new_mode": 33188,
      "new_path": "resources/Documentation/config-guide.md"
    },
    {
      "type": "modify",
      "old_id": "53c39d2f56e18262b5220d61f264346273c89535",
      "old_mode": 33188,
      "old_path": "resources/Documentation/config.md",
      "new_id": "90e4e5ce0cb42a94cf0bced2e9ba089c0833830a",
      "new_mode": 33188,
      "new_path": "resources/Documentation/config.md"
    },
    {
      "type": "modify",
      "old_id": "bd67ed27d3469c0937be0f0da3a94fde5440653b",
      "old_mode": 33188,
      "old_path": "resources/Documentation/setup-guide.md",
      "new_id": "d912ea40e11a65b233f7dd6c40058921afd9ca6d",
      "new_mode": 33188,
      "new_path": "resources/Documentation/setup-guide.md"
    },
    {
      "type": "modify",
      "old_id": "f7318eec3934243dfa035b20d2f4194fd9bff4e8",
      "old_mode": 33188,
      "old_path": "resources/Documentation/user-guide.md",
      "new_id": "5a665cb5396f5eab33e64ac389187a224744df91",
      "new_mode": 33188,
      "new_path": "resources/Documentation/user-guide.md"
    }
  ]
}
