)]}'
{
  "log": [
    {
      "commit": "cb9153bf4324d72c6f1b34a8a1c2f8b9954697d2",
      "tree": "ac21b82aed499cc9accb363a8767495bb3962e85",
      "parents": [
        "a6373ec1d47c0b370c87b3915feeba8f2b4523f7"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Dec 08 14:22:13 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Mon Dec 12 14:53:03 2016 +0900"
      },
      "message": "Support SOCK_STREAM for bridge between system and app\n\nPreviously AppFuse use SOCK_SEQPACKET for sockets communicating system\nand app. However SOCK_SEQPACKET requires the buffer of message size in\nthe kernel and sometimes failed to write with ENOBUF.\n\nThe CL updates libappfuse so that it can use SOCK_STREAM instead of\nSOCK_SEQPACKET.\n\nBug: 33279206\nTest: libappfuse_test\nChange-Id: I622ada9ac1d71d0c57b6cfff0904c7829cea7995\n"
    },
    {
      "commit": "a6373ec1d47c0b370c87b3915feeba8f2b4523f7",
      "tree": "d8e532d25edd551db366b825e96f22a69faf8b48",
      "parents": [
        "4b4475308598659137657261218fc5a3207ec79c"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Mon Dec 05 16:50:44 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Mon Dec 12 14:34:29 2016 +0900"
      },
      "message": "Fix checks for reading and writing FuseMessage.\n\nPreviously FuseMessage were checking result of read/write operation\nafter checking header.len value is valid. This was wrong because\nheader.len does not contain correct value when read function does not\nread any bytes and returns zero.\n\nBug: 33278098\nTest: libappfuse_test\nChange-Id: Icf998ca6c3eeee20cbc4aa2f65195a87e59ffc27\n"
    },
    {
      "commit": "691739b334f3efab38f82f2922ee4039462fec25",
      "tree": "7aaa276c9bbe559aa28f4aebcf311b6105f3ddf0",
      "parents": [
        "30e68088951f17ad54c1d15576835ff4eb622c4c"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Nov 15 15:42:05 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Nov 17 09:49:51 2016 +0900"
      },
      "message": "Remove FuseBridgeLoop class.\n\nBug: 32779923\nTest: libappfuse_test\nChange-Id: I29a76701d141ae061ec1fe32993d27460a0c694a\n"
    },
    {
      "commit": "30e68088951f17ad54c1d15576835ff4eb622c4c",
      "tree": "2798f1f86672712a3e16d35ca3e3bbf0c3046d09",
      "parents": [
        "335502453d9b37c9c853dd3ac904d945b04e01ee"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Nov 15 09:31:21 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Nov 17 09:10:53 2016 +0900"
      },
      "message": "Stops the loop when all files are closed.\n\nThe CL changes FuseBridgeLoop so that it exits when all files opened on\nthe AppFuse mount point are closed. Note that the client code will\nunmount the FUSE mount point after the loop exits.\n\nBug: 32260320\nTest: libappfuse_test\nChange-Id: I4965fbb48de8a280c6306e70757a07376b1956a7\n"
    },
    {
      "commit": "c884f80755f8ecaed92a783f2a13038ab06ae691",
      "tree": "1254698431bfb95d1fcfba4af54d9b5940c8b184",
      "parents": [
        "a73ba879b1bac25ce0b93cbeb895b05c796fc9ec",
        "471ad6a59d4ab765a5e93d5dd557057e88858974"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 16 03:57:46 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 16 03:57:46 2016 +0000"
      },
      "message": "Merge \"Use FUSE_COMPAT_22_INIT_OUT_SIZE always if available.\""
    },
    {
      "commit": "471ad6a59d4ab765a5e93d5dd557057e88858974",
      "tree": "2cba6ec0c0772b8ebb049df9e2383cc55f90d5cc",
      "parents": [
        "b5ce6f02dd11b42c03884dd9531c6c8a80bcecda"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Nov 10 09:41:54 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Wed Nov 16 01:56:00 2016 +0000"
      },
      "message": "Use FUSE_COMPAT_22_INIT_OUT_SIZE always if available.\n\nWe return the minor version number 15 to FUSE_INIT since we don\u0027t handle\nBATCH_FORGET. Thus the kernel does not accept the latest size of\nfuse_init_out. Instead we need to use FUSE_COMPAT_22_INIT_OUT_SIZE.\n\nBug: 32779923\nTest: libappfuse_test\n\nChange-Id: I5c979d0e45344ca8adfe3ad3f4a9561442abcb3a\n"
    },
    {
      "commit": "0d97be4d7db1baa831d0432229dec08c87193919",
      "tree": "7f0bd712b7e52ed12b56c89fb4e743073003d05c",
      "parents": [
        "a0aecda12b9a76aa15a8c5175e15538574a05af7"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Nov 10 09:17:17 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Nov 15 10:18:37 2016 +0900"
      },
      "message": "Add static assert to check if FuseBuffer is standard layout union.\n\nBug: 32260320\nTest: libappfuse_test\nChange-Id: I6430c11fdeb2405996410c97044b4260c25209b8\n"
    },
    {
      "commit": "a0aecda12b9a76aa15a8c5175e15538574a05af7",
      "tree": "ac1e8eda1f03a8922445ae13d6d7a4173158c4ec",
      "parents": [
        "b5ce6f02dd11b42c03884dd9531c6c8a80bcecda"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Nov 08 10:17:51 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Tue Nov 15 09:47:31 2016 +0900"
      },
      "message": "Add FuseAppLoop to libappfuse.\n\nThe class is used at the app side (StorageManager) to parse FUSE\ncommands.\n\nBug: 32260320\nTest: libappfuse_test\nChange-Id: I1ae2904d3290a041f1efbf8fc10ba032eda5449c\n"
    },
    {
      "commit": "c6134762975204ceebcf7949e364484833714345",
      "tree": "ed01ec85a5175e2985e5e62986500da138d09d1d",
      "parents": [
        "7f8e819ded361e963df7aa648ca2c6d49c7b46b6"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Oct 27 14:57:55 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Oct 27 15:04:15 2016 +0900"
      },
      "message": "Add FuseBridgeLoop to libappfuse.\n\nThe CL adds FuseBridgeLoop class to libappfuse, which is used in the\nsystem service to proxy fuse commands to applications.\n\nBug: 29970149\nTest: libappfuse_test\nChange-Id: I0708f608b3868721ab16ba4028fd2c17a6735af7\n"
    },
    {
      "commit": "7f8e819ded361e963df7aa648ca2c6d49c7b46b6",
      "tree": "33e131ab74de2a90c895c66066d561fc923fae84",
      "parents": [
        "459ec807a7c2da0e45cd30e43fa5bf12e5f017dd"
      ],
      "author": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Oct 27 10:37:05 2016 +0900"
      },
      "committer": {
        "name": "Daichi Hirono",
        "email": "hirono@google.com",
        "time": "Thu Oct 27 12:40:24 2016 +0900"
      },
      "message": "Add utility functions for FUSE.\n\nThe CL adds utility functions to framework to parse FUSE messages\nfrom the kernel. The library will be used from framework JNI and service\nJNI.\n\nBug: 32260320\nTest: libappfuse_test\nChange-Id: Ib89b26d34789e6c26a3288beceb3ea145c1ae780\n"
    }
  ]
}
