)]}'
{
  "commit": "4415cc33c775049e6ebf3da1809220823d18a919",
  "tree": "70a236231df165daf59c44a8fbab1561367b5f9e",
  "parents": [
    "aa159bedb45e18a0a5dea283bc0e018713f3e082"
  ],
  "author": {
    "name": "David Pursehouse",
    "email": "dpursehouse@digital.ai",
    "time": "Fri May 15 09:08:42 2020 +0900"
  },
  "committer": {
    "name": "Gerrit Code Review",
    "email": "noreply-gerritcodereview@google.com",
    "time": "Fri May 15 00:08:42 2020 +0000"
  },
  "message": "Update git submodules\n\n* Update plugins/replication from branch \u0027stable-2.16\u0027\n  to 4ee733142ac71556705df02cdab396b804463879\n  - PushOne: Improve format of log of references to be pushed\n    \n    The references to be pushed are logged by just passing the list\n    of RemoteRefUpdate instances to the logger. This results in the\n    List\u0027s default implementation of toString() being called, which\n    renders each object in a comma-separated list.\n    \n    Each object is rendered by RemoteRefUpdate\u0027s toString() method\n    which includes some fields that are not relevant here, or omits\n    some information that might be useful. For example:\n    \n      [RemoteRefUpdate[remoteName\u003drefs/meta/config, NOT_ATTEMPTED,\n      (null)...a7038eb8827cfd29cb3fca335e882f4d5ed09b62, srcRef\u003drefs/meta/config,\n      forceUpdate, message\u003dnull]\n    \n    - The \u0027remoteName\u0027 is the name on the destination. In this case it\u0027s\n      the same as \u0027srcRef\u0027 but could be different if replication has been\n      configured to push to a different refname. It is potentially confusing\n      to have them not logged next to each other.\n    - \u0027(null)...a7038eb8827cfd29cb3fca335e882f4d5ed09b62\u0027 shows the old\n      and new IDs; this is in the standard git ref update format aside\n      from \u0027(null)\u0027 which is shown instead of zeros.\n    - \u0027forceUpdate\u0027 is only included when true; this is the same for\n      the \u0027fastForward\u0027 field.\n    - the update has a flag indicating if it\u0027s a delete, but this is\n      not included in the output at all.\n    - \u0027message\u0027 is always null for udates by replication so it\u0027s not\n      necessary to include in the log.\n    \n    Add a custom method to format the refs for logging, with the information\n    presented in a clearer way. Continue to log it on a single line, comma-\n    separated. This might not be ideal for human readers, but makes it easier\n    when processing the logs with grep or any other tool.\n    \n    With this change, the logged information looks like:\n    \n      RemoteRefUpdate{refSpec\u003drefs/meta/config:refs/meta/config,\n      status\u003dNOT_ATTEMPTED, id\u003d(null)..a7038eb8827cfd29cb3fca335e882f4d5ed09b62\n      force\u003dyes, delete\u003dno, ffwd\u003dno}\n    \n    Now the irrelevant information (message) is removed, missing information\n    (delete) is added, and the source and destination refs are presented in\n    a single \"refSpec\" field.\n    \n    Change-Id: Idd153daf44cd79a0920ea0b72c64ea58d0926f59\n    ",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "937b403a596d48d01f5fc1ce380b6d6558cb6051",
      "old_mode": 57344,
      "old_path": "plugins/replication",
      "new_id": "4ee733142ac71556705df02cdab396b804463879",
      "new_mode": 57344,
      "new_path": "plugins/replication"
    }
  ]
}
