)]}'
{
  "commit": "945c23c0892c375413100cdaaf26cd8dfe8799f3",
  "tree": "e5458043d1235b04c738d3413f68bd7bd11bd643",
  "parents": [
    "f06050f125dd23e2b6cbd67f8729b7559e16774b"
  ],
  "author": {
    "name": "Edwin Kempin",
    "email": "ekempin@google.com",
    "time": "Wed Oct 14 18:22:29 2015 +0200"
  },
  "committer": {
    "name": "David Ostrovsky",
    "email": "david@ostrovsky.org",
    "time": "Thu Oct 15 03:08:47 2015 +0200"
  },
  "message": "Use uploader for approvals specified on push, not the committer\n\nWhen the uploader has the Forge Committer Identity access right he can\nupload commits where another user is committer. This means uploader\nand committer can be different users.\n\nWhen the committer is used for the approvals that are specified on\npush then users with the Forge Committer Identity access right can put\nvotes on behalf of the committer onto the new change. This must not\nbe.\n\nThis was only possible when there were at least two labels defined.\n\nWhen on upload the committer is forged he is automatically added as\nreviewer to the change. This results in a dummy 0 vote. If there was\nonly one label this dummy 0 vote collided with any vote for the same\nlabel that was specified in the push specification and hence the\nupload failed, which means in this case it was not possible to forge a\nvote.\n\nHowever if there were multiple labels defined forging a vote was\npossible.\n\nThe push also failed with a NullPointerException when a commit was\npushed that had a committer that didn\u0027t exist in the Gerrit database,\nor when that account didn\u0027t have an email address registered.\n\nPutting votes on behalf of another user is possible via the REST API\nbut this requires the special on behalf of permission for the label.\nOne can imagine a new option for putting label votes on behalf of\nanother user on push too, but this is not implemented yet.\n\nBug: Issue 3602\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I2e848c32cfad81979f22613d2a631fad6e0cea66\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "780d7a84d174d34cd34ee1dbdeb772c56a15ba0e",
      "old_mode": 33188,
      "old_path": "gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/AbstractPushForReview.java",
      "new_id": "963fe29fdec14febbc7a28f54e8f32e8a811a253",
      "new_mode": 33188,
      "new_path": "gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/AbstractPushForReview.java"
    },
    {
      "type": "modify",
      "old_id": "726519606c2b8e5bde8ef496750bc6074285fe02",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/ApprovalsUtil.java",
      "new_id": "31058bc343dec202047e97a9dd439d431829d6db",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/ApprovalsUtil.java"
    },
    {
      "type": "modify",
      "old_id": "df5c254dda57ad77a10cd05c8a3894fae9a8b95d",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java",
      "new_id": "15a249f6cbd66a4dad6245e0c4433499f729f52e",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/change/ChangeInserter.java"
    },
    {
      "type": "modify",
      "old_id": "a950eabdc2c8a9904cdd2f0ccc2ce98ab3825d1f",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java",
      "new_id": "b4b30ec10bf8240e05c32350bd59b6f98eba8f7a",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java"
    }
  ]
}
