)]}'
{
  "commit": "b209671d04611ad9821cc538c46651452dea0ace",
  "tree": "d9f59569c5546b60ac196f373446b05d1220e528",
  "parents": [
    "33e65ec6911795cf2816af1f64b5699dd898d59f"
  ],
  "author": {
    "name": "Shawn O. Pearce",
    "email": "spearce@spearce.org",
    "time": "Mon Mar 14 18:18:49 2011 -0700"
  },
  "committer": {
    "name": "Shawn O. Pearce",
    "email": "spearce@spearce.org",
    "time": "Thu Apr 21 16:14:31 2011 -0700"
  },
  "message": "Implement the no-done capability\n\nSmart HTTP clients may request both multi_ack_detailed and no-done in\nthe same request to prevent the client from needing to send a \"done\"\nline to the server in response to a server\u0027s \"ACK %s ready\".\n\nFor smart HTTP, this can save 1 full HTTP RPC in the fetch exchange,\nimproving overall latency when incrementally updating a client that\nhas not diverged very far from the remote repository.\n\nUnfortuantely this capability cannot be enabled for the traditional\nbi-directional connections.  multi_ack_detailed has the client sending\nmore \"have\" lines at the same time that the server is creating the\n\"ACK %s ready\" and writing out the PACK stream, resulting in some race\nconditions and/or deadlock, depending on how the pipe buffers are\nimplemented.  For very small updates, a server might actually be able\nto send \"ACK %s ready\", then the PACK, and disconnect before the\nclient even finishes sending its first batch of \"have\" lines.  This\nmay cause the client to fail with a broken pipe exception.  To avoid\nall of these potential problems, \"no-done\" is restricted only to the\nsmart HTTP variant of the protocol.\n\nChange-Id: Ie0d0a39320202bc096fec2e97cb58e9efd061b2d\nSigned-off-by: Shawn O. Pearce \u003cspearce@spearce.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "1ceb0965a3860f82c8ed307a8a9e235c3b82ca43",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java",
      "new_id": "2b9e81f1d3f3d5992eaacc21a369e07a4b98cd6d",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.http.server/src/org/eclipse/jgit/http/server/UploadPackServlet.java"
    },
    {
      "type": "modify",
      "old_id": "c3590a44fb923daabee85a3a5be4585aac194d53",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java",
      "new_id": "cd127cdeaf702e183e1b8d9e0219143c288a521e",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit.http.test/tst/org/eclipse/jgit/http/test/SmartClientSmartServerTest.java"
    },
    {
      "type": "modify",
      "old_id": "4ae26a3e56f739f78f9b2a06d79bced34e0296a3",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java",
      "new_id": "67bedaca111caa47fdaf29093682a7fc2788ab81",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java"
    },
    {
      "type": "modify",
      "old_id": "2802c0712e72cadc82a0eeb108c0733397241d9b",
      "old_mode": 33188,
      "old_path": "org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java",
      "new_id": "50f57130c35ec6efdb154cb6d23c7db63ef27c9c",
      "new_mode": 33188,
      "new_path": "org.eclipse.jgit/src/org/eclipse/jgit/transport/UploadPack.java"
    }
  ]
}
