)]}'
{
  "commit": "ae3b0598bf4c4d37163dd8fc49cb7bb538cc4281",
  "tree": "97101c1a51e6e3f6c2ea5fa0b8c81724a3100d0d",
  "parents": [
    "e5f0457942ef2c09fe3aa7670326213350c4f861"
  ],
  "author": {
    "name": "Sasa Zivkov",
    "email": "sasa.zivkov@sap.com",
    "time": "Thu Jun 30 13:54:09 2011 +0200"
  },
  "committer": {
    "name": "Sasa Zivkov",
    "email": "sasa.zivkov@sap.com",
    "time": "Mon Jul 04 16:23:20 2011 +0200"
  },
  "message": "Introduced a new PermissionRule.Action: BLOCK.\n\nBesides already existing ALLOW and DENY actions this change introduces\nthe BLOCK action in order to enable blocking some permission rules\nglobally.\n\nA typical use case, and the main motivation for this change, is to\nglobally block update and deletion of tags. When tags are used to tag\nreleases it is important to ensure that tags are never updated or\ndeleted.\n\nWhen looking to see if we can perform a given permission in RefControl\n/ ProjectControl, we look to see if any of the parents has defined a\nsection matching this reference with BLOCK for the permission\u0027s\naction. If so, we are forbidden from using the permission, even if\nthere is an ALLOW. This searching for BLOCK ignores the Exclusive flag\nthat is normally applied to sections.\n\nA BLOCK-ing push rule blocks any type of push, force or not. A\nBLOCK-ing force push rule blocks only force pushes, but allows\nnon-forced pushes if an ALLOW rule would have permitted it.\n\nSite administrators that need to deny tag updates can thus put into\ntheir All-Projects.git:\n\n  [access \"refs/tags/*\"]\n    push \u003d block group Anonymous Users\n\nIt is also possible to block label ranges. To block a group X from\nvoting -2 and +2, but keep their existing voting permissions for the\n-1..+1 range intact we would define:\n\n  [access \"refs/heads/*\"]\n    label-Code-Review \u003d block -2..+2 group X\n\nThe interpretation of the min..max range in case of a blocking rule\nis: block every vote from -INFINITE..min and max..INFINITE. This is the\nonly interpretation of the min..max range for a blocking rule that makes\nsense for practical purposes IMO.\n\nNOTE: Gerrit UI is still not able to produce a blocking label range rule.\nThe UI needs to be extended for that. This will be done in a follow up\nchange.\n\nChange-Id: I8baeff2a49280fde05b2112df99322b87ce5d442\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6deb14f0ba8091e48b965fbc788b430cc66be77f",
      "old_mode": 33188,
      "old_path": "gerrit-common/src/main/java/com/google/gerrit/common/data/PermissionRule.java",
      "new_id": "2ddd8a7aa71b18a92a046917ed4ea46e2f535771",
      "new_mode": 33188,
      "new_path": "gerrit-common/src/main/java/com/google/gerrit/common/data/PermissionRule.java"
    },
    {
      "type": "modify",
      "old_id": "98e62834592e4317a66a07cece0e41698df56a25",
      "old_mode": 33188,
      "old_path": "gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.java",
      "new_id": "7f5b5738cdecea3decd28abc9f90249ff222009a",
      "new_mode": 33188,
      "new_path": "gerrit-gwtui/src/main/java/com/google/gerrit/client/admin/PermissionRuleEditor.java"
    },
    {
      "type": "modify",
      "old_id": "1196b0235c527eeff676bc8804dba8cde61fb13e",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/project/PermissionCollection.java",
      "new_id": "02f56c5deb4335c834f09957525ec28a79f74537",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/project/PermissionCollection.java"
    },
    {
      "type": "modify",
      "old_id": "1024f9af07cc80494a507f61278b90207fd4e394",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java",
      "new_id": "ee4283337e482fd6b26a383f6c1cb1901314c236",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/project/ProjectControl.java"
    },
    {
      "type": "modify",
      "old_id": "984623d59442f2ba6980c12037fc595969823a8e",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java",
      "new_id": "9c60133bc2dcc86fdcc16bc774ebf01fbb271146",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/project/RefControl.java"
    },
    {
      "type": "modify",
      "old_id": "f829ba012e8cbaa69870ba2be864772d7d62a4a7",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java",
      "new_id": "29b27628c93857a7e8c320b26444db573a9de18e",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/test/java/com/google/gerrit/server/project/RefControlTest.java"
    }
  ]
}
