)]}'
{
  "commit": "07747c9a297821c4f64700e09cf3d1755c9b757a",
  "tree": "fa3efa4cae7134409196f9d6d8e3b4fe08a937b4",
  "parents": [
    "07d6a76596a6c0ae4b62631a46ecc3bb3a6fbc45"
  ],
  "author": {
    "name": "Edwin Kempin",
    "email": "ekempin@google.com",
    "time": "Mon Jan 18 10:45:47 2021 +0100"
  },
  "committer": {
    "name": "Edwin Kempin",
    "email": "ekempin@google.com",
    "time": "Thu Jan 21 09:34:08 2021 +0100"
  },
  "message": "When listing code owners for a path let callers know if all users own it\n\nAdds a ownedByAllUsers boolean field to CodeOwnersInfo which is returned\nby the get code owners REST endpoints (GetCodeOwnersForPathInChange and\nGetCodeOwnersForPathInBranch).\n\nThis allows callers to know if a path is owned by all users. E.g. the\nGerrit frontend should make this transparent to users when suggesting\ncode owners.\n\nIn order to know whether a path is owned by all users we need to\ncontinue inspecting code owner configs in parent folders even if we have\nalready found enough code owners to satisfy the requested limit, as\nparent code owner configs may assign code ownership to all users, which\nwe need to know in order to populate the ownedByAllUsers field in the\nresponse. We can still abort the iteration over code owner config files\nif we have already found that the path is owned by all users.\n\nNeeding to check all relevant code owner config files if paths are not\nowned by all users means that the get code owners calls become a bit\nmore expensive, but it shouldn\u0027t be significantly slower. If performance\nbecomes an issue we need to implement caching for code owner configs.\n\nFWIW if we ever add further scores for code owners (besides the distance\nscore), which we likely will do,  we also need to iterate over all\nrelevant code owner configs. So iterating over all code owner configs\nalready now, shouldn\u0027t be an issue.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I8c564c959850ad21822bef0b1e58d23b7ac0ff24\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "5ce7ac2eb1d9d75a988174efca32317dee3b12b9",
      "old_mode": 33188,
      "old_path": "java/com/google/gerrit/plugins/codeowners/api/CodeOwnersInfo.java",
      "new_id": "2d3a84c6e6a6fb95803b9e6279acde0331bede1d",
      "new_mode": 33188,
      "new_path": "java/com/google/gerrit/plugins/codeowners/api/CodeOwnersInfo.java"
    },
    {
      "type": "modify",
      "old_id": "a0ab229733c316b4a54999438339c2fccb38a93b",
      "old_mode": 33188,
      "old_path": "java/com/google/gerrit/plugins/codeowners/restapi/AbstractGetCodeOwnersForPath.java",
      "new_id": "1464ecbe418c42ac95351d2eec207ca26e6d6980",
      "new_mode": 33188,
      "new_path": "java/com/google/gerrit/plugins/codeowners/restapi/AbstractGetCodeOwnersForPath.java"
    },
    {
      "type": "modify",
      "old_id": "5e30c977eed5cdb43641bc76117e6e1da4f8e645",
      "old_mode": 33188,
      "old_path": "java/com/google/gerrit/plugins/codeowners/testing/CodeOwnersInfoSubject.java",
      "new_id": "28ea59e3230e73defe3a83510eb73aedccc42840",
      "new_mode": 33188,
      "new_path": "java/com/google/gerrit/plugins/codeowners/testing/CodeOwnersInfoSubject.java"
    },
    {
      "type": "modify",
      "old_id": "9138ef0f28187fc5254076c4b7e9e4e0ee1652f0",
      "old_mode": 33188,
      "old_path": "javatests/com/google/gerrit/plugins/codeowners/acceptance/api/AbstractGetCodeOwnersForPathIT.java",
      "new_id": "cd57b24ab8dae93073159fb95b2e66f781676c19",
      "new_mode": 33188,
      "new_path": "javatests/com/google/gerrit/plugins/codeowners/acceptance/api/AbstractGetCodeOwnersForPathIT.java"
    },
    {
      "type": "modify",
      "old_id": "66560206eff25bc31ee04672a4c52be1f0669ec5",
      "old_mode": 33188,
      "old_path": "resources/Documentation/rest-api.md",
      "new_id": "df7d90e063752293f0f5f437806ad7857ad5ddd0",
      "new_mode": 33188,
      "new_path": "resources/Documentation/rest-api.md"
    }
  ]
}
