)]}'
{
  "commit": "9035d75a2be9d80d82676504d69553245017f6d4",
  "tree": "a275b416bd102af42760a60edc77594744dbeb7e",
  "parents": [
    "b29763aa9bcbb99a59aec3820e30ff1864cfa765"
  ],
  "author": {
    "name": "Steffen Prohaska",
    "email": "prohaska@zib.de",
    "time": "Tue Aug 26 17:23:25 2014 +0200"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Thu Aug 28 10:25:15 2014 -0700"
  },
  "message": "convert: stream from fd to required clean filter to reduce used address space\n\nThe data is streamed to the filter process anyway.  Better avoid mapping\nthe file if possible.  This is especially useful if a clean filter\nreduces the size, for example if it computes a sha1 for binary data,\nlike git media.  The file size that the previous implementation could\nhandle was limited by the available address space; large files for\nexample could not be handled with (32-bit) msysgit.  The new\nimplementation can filter files of any size as long as the filter output\nis small enough.\n\nThe new code path is only taken if the filter is required.  The filter\nconsumes data directly from the fd.  If it fails, the original data is\nnot immediately available.  The condition can easily be handled as\na fatal error, which is expected for a required filter anyway.\n\nIf the filter was not required, the condition would need to be handled\nin a different way, like seeking to 0 and reading the data.  But this\nwould require more restructuring of the code and is probably not worth\nit.  The obvious approach of falling back to reading all data would not\nhelp achieving the main purpose of this patch, which is to handle large\nfiles with limited address space.  If reading all data is an option, we\ncan simply take the old code path right away and mmap the entire file.\n\nThe environment variable GIT_MMAP_LIMIT, which has been introduced in\na previous commit is used to test that the expected code path is taken.\nA related test that exercises required filters is modified to verify\nthat the data actually has been modified on its way from the file system\nto the object store.\n\nSigned-off-by: Steffen Prohaska \u003cprohaska@zib.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "cb5fbb45ea04cead65316ecf6b44730b17108122",
      "old_mode": 33188,
      "old_path": "convert.c",
      "new_id": "677d339a8b5aa8e56b4e6ee0df05e6570b9270e0",
      "new_mode": 33188,
      "new_path": "convert.c"
    },
    {
      "type": "modify",
      "old_id": "c638b33632f5fe0398aed7da72fb3b157ff222cd",
      "old_mode": 33188,
      "old_path": "convert.h",
      "new_id": "d9d853cd3d2f6d94965a2c2fc8e587386402a83b",
      "new_mode": 33188,
      "new_path": "convert.h"
    },
    {
      "type": "modify",
      "old_id": "d9b51578ccd3b5e487b3ad31fefbe1f8b3e7e99e",
      "old_mode": 33188,
      "old_path": "sha1_file.c",
      "new_id": "423ec64e8732687afbd5c118885a6864927e2db6",
      "new_mode": 33188,
      "new_path": "sha1_file.c"
    },
    {
      "type": "modify",
      "old_id": "f890c54d137aab021e6d6a61c5741af872555c1f",
      "old_mode": 33261,
      "old_path": "t/t0021-conversion.sh",
      "new_id": "ca7d2a630a8442d8812b444708d6f28f2e45fb32",
      "new_mode": 33261,
      "new_path": "t/t0021-conversion.sh"
    }
  ]
}
