)]}'
{
  "log": [
    {
      "commit": "f2484aaed779c0ef03661d6d473ee64e3b0503cd",
      "tree": "bc6f0851c48e30bce36d872f7b390de8a01ddcc3",
      "parents": [
        "c89a3971e94c30611c885e4c440eae2fd9937948"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Thu Oct 25 19:41:45 2018 -0700"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Fri Oct 26 22:42:26 2018 +0000"
      },
      "message": "Fix handling of #elif.\n\nWhen a construct like:\n\nif defined(something)\n  blocks1\nelif 1\n  blocks2\nelse\n  blocks3\nendif\n\nThe parser would put the first clause but then simply omit the elif and\nput all of blocks2 without a terminating #endif. The code also did\nsomething similar when the #else was an #endif.\n\nAlso convert all of the unit tests to real unit tests and only run\nthem if you run cpp.py by itself. Added new unit tests to cover the\nnew cases.\n\nTest: Ran cpp.py unit tests.\nTest: Reran update_all.py and verified nothing changed, and that running\nTest: it on the new kernel headers that exposed this problem.\nChange-Id: Ie168511303c4e15afdb60c37baef75a966ca29a8\n"
    },
    {
      "commit": "64f355ffbd715a3c8b467c3b37701ad404b566b4",
      "tree": "04e1e9ddac688de976ae427ece327ee1c68afeb5",
      "parents": [
        "3ba327198a42eecd2fbc2556d7d0fa41f8d6b17b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 30 16:10:24 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Dec 14 10:07:27 2017 -0800"
      },
      "message": "Use in_addr in ip_mreq_source and ip_msfilter.\n\nThis adds a new mechanism to say \"replace struct S with #include \u003cbits/S.h\u003e\".\n\nAlso switch epoll_event over to the new mechanism.\n\nAlso use the kernel\u0027s struct sockaddr_storage directly rather than behind\nan unnecessary #define.\n\nThis patch also removes some dead code in the header scrubber. This code\nstill needs rewriting completely. I learned that a \"block\" isn\u0027t necessarily\na single struct definition, say; it might be a run of them. It seems like\na block is a run of preprocessor directives or a run of regular code.\n\nBug: https://issuetracker.google.com/36987220\nTest: new test\nChange-Id: Ic6a5c09559766a4babe3cd4c3ea538b885e07308\n"
    },
    {
      "commit": "1308ad3ab33294c3abfd96da12b6df58b381ce52",
      "tree": "10aea87a1e3992b38fcc830b74bc4962a1f537bf",
      "parents": [
        "315dd896deae928f3e64f94d75cd20566cc95183"
      ],
      "author": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Tue Nov 14 17:32:13 2017 -0800"
      },
      "committer": {
        "name": "Christopher Ferris",
        "email": "cferris@google.com",
        "time": "Wed Nov 15 12:23:56 2017 -0800"
      },
      "message": "Update to kernel headers v4.14.\n\nRemove the hiding of the kernel structure binder_fd_array_object. This\nstructure now matches the structure used in the binder code.\n\nLoad the libclang_android.so shared library directly for parsing.\nThis file changed name in a recent update to the prebuilts.\n\nTest: Compiles arm/arm64/x86/x86_64.\nTest: Boots on hikey and boots on a sailfish.\nTest: Ran bionic unit tests on hikey and sailfish.\nChange-Id: I141a4b93ac3511cd58f4d12bb3c0d4efaa4c2742\n"
    },
    {
      "commit": "77bb564dc7b3f1771a116b52a3227a91b5235026",
      "tree": "b1059f9d10339ef04e74d954d2e06edd238407b7",
      "parents": [
        "7f9f1b6f918bec90354f70f2eb3dcf87d85df918"
      ],
      "author": {
        "name": "Stephen Crane",
        "email": "sjc@immunant.com",
        "time": "Thu Aug 31 15:08:26 2017 -0700"
      },
      "committer": {
        "name": "Stephen Crane",
        "email": "sjc@immunant.com",
        "time": "Thu Aug 31 15:11:50 2017 -0700"
      },
      "message": "Use env to invoke python\n\n/usr/bin/python may be python3. We should respect PATH to find the python\nexecutable so it can be locally overridden to be python2.\n\nTest: Build libc, repo upload\nChange-Id: Iaddd7cd4a1c2177c32786e4fa0fc664ab0ad36de\n"
    },
    {
      "commit": "96c1db7b9d601c31d103389cac074a6cce0d7633",
      "tree": "510f40be13090fa582b61aed7c3eb7e70d3ff559",
      "parents": [
        "6c01208e902b18aad4b0254ccb95b94a2b5fc341"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 25 13:48:01 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 25 13:48:01 2017 -0700"
      },
      "message": "Remove the repetitive warnings from the uapi headers.\n\nHaving\n\n  WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS\n\nevery four lines made the headers harder to read, made the diffs much worse\neach time we upgraded, and wasn\u0027t really providing any benefit. Before the\nnext uapi update, let\u0027s just stop doing this.\n\nBug: N/A\nTest: builds, manually inspected files look right\nChange-Id: Id7088cf750894c9d24950f3d53587fe3156c4f7d\n"
    },
    {
      "commit": "7592008030a67ebe0dbda20aa041d5c347170611",
      "tree": "ff2143b9eb4d1f48179ea0605575db36d784451f",
      "parents": [
        "a00a9f0b7ed39589a768798de6a584a4baae030b"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Wed Apr 22 10:37:38 2015 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Wed Apr 22 10:47:01 2015 -0700"
      },
      "message": "Update the search path for libclang.so\n\nPrebuilt shared libraries (libclang.so, libLLVM.so and etc) have been\nmoved to prebuilts/sdk/tools/linux/lib64. Update the search path in\ncpp.py to match the change.\n\nBug: 20485471\nChange-Id: Ib7784db4d5529d16a1e2bfc07cb0237929bc5a64\n"
    },
    {
      "commit": "d7db594b8d1dab36b711bd887a9dd21675c87243",
      "tree": "214b4e6e4510386ffc05c9a43dd3c153c6cf89a0",
      "parents": [
        "11829be3e1a9e9e2271ba64a78c327bde6e044eb"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Wed Jan 28 10:07:51 2015 -0800"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Fri Feb 06 14:48:41 2015 -0800"
      },
      "message": "Switch kernel header parsing to python libclang\n\nReplace the tokenizer in cpp.py with libclang.\n\nBug: 18937958\nChange-Id: I27630904c6d2849418cd5ca3d3c612ec3078686d\n"
    },
    {
      "commit": "dc1fb7000adb77c647f70428fd6ce224e3938220",
      "tree": "b1fb3ac1fd01134601776f82b5d13a2651ed66ec",
      "parents": [
        "55244a9bdbc661212999655644c374352ae92040"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 20 11:16:11 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 20 11:16:11 2014 -0700"
      },
      "message": "Clean up some of our python scripts.\n\nChange-Id: Ifa75345db43434298cfb6113fbe2f7a33b88c79d\n"
    },
    {
      "commit": "fddbafdc0a63a1b4c5e9252719a913197a4eecfa",
      "tree": "f108fcc8076996cac4950f9e217b796bacd047dc",
      "parents": [
        "9fb53dd4dbaa7633c234d9da8417827fa3d3c32f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 01 10:17:27 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 01 10:27:49 2014 -0700"
      },
      "message": "Keep the kernel header scrubber\u0027s data structures in sync.\n\nIf you rewrite the tokens of a #if you need to rewrite the expression to match\nbecause either might be used later. This was showing up as SIGRTMAX being\nrewritten in a #define but not in the #ifndef that guarded it, for which case\nI\u0027ve added a unit test.\n\nChange-Id: I6929675461a1afe272edd667594529fd84a3dc4d\n"
    },
    {
      "commit": "199346a2abd8b6ba282e1fe291cc3766fa921f40",
      "tree": "9ee2feb4ffcb2be771e2b733b1338c8755bd306a",
      "parents": [
        "022885e2fad5ef9643e05d80c6f50a2a90bf3431"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 11 20:01:11 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Feb 11 22:16:04 2014 -0800"
      },
      "message": "Fix NSIG.\n\nOur sigset_t definition hasn\u0027t been tied to our NSIG definition since we\nswitched to uapi headers, so we can now fix it without breaking the LP32 ABI.\nThe kernel uapi headers define and use _NSIG, so we need to have our scripts\nrename the kernel\u0027s definitions out of the way, then we can define _NSIG\nand NSIG in terms of the kernel\u0027s off-by-one value.\n\nBug: 12938442\nChange-Id: Ic7c86fd5be5ad1d822f7b2b1d88c8a0d70a1ac0f\n"
    },
    {
      "commit": "1198fd38645ff94bf48daae10f8b74903444badc",
      "tree": "7ede00fdf4207fc607c1bf87b7fd3dee3f952379",
      "parents": [
        "d4143c8e4cd8b006d8f422883b53684881e0991a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 21 11:12:34 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 21 11:12:34 2013 -0800"
      },
      "message": "Add support for the ternary operator to the header scrubber.\n\nUsed in various uapi headers.\n\nChange-Id: Id0f862d2adc7ddc9727e8a29160d5435f8d547c3\n"
    },
    {
      "commit": "40596aa0054bcfa76148f55321bf4b979e2242be",
      "tree": "5e7f3d342b548177c5fb486878477ccfe5708f03",
      "parents": [
        "f1258672d1eed41da30612a70690c19ff1966b73"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 05 14:54:29 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 06 12:04:48 2013 -0800"
      },
      "message": "Make cpp.py less braindead.\n\nThe old code ignored operator precedence (!), despite having two tables\nof operator precedence. The code\u0027s still pretty awful, but I\u0027ve cleaned\nit up enough to fix this, the most important bug.\n\nThis patch lets us correctly clean the uapi unistd.h, stat.h, and swab.h files,\nand also fixes the mess we were already making of various old kernel\nheader files. I\u0027ve added a bunch more tests, fixed the existing tests that\nthe existing script was already failing (!), and changed the script so that\nthe tests are run every time the script is run.\n\nWe can probably remove some of the old kernel header files that we were\nparsing incorrectly, but we can worry about that later.\n\nBug: 11253477\nChange-Id: Ie66c65b3a7ae13b4e98ed8038a6a534f06eae0e5\n"
    },
    {
      "commit": "d3e64a3f403918abf2cc3f9f0f9a2204a420ec96",
      "tree": "ec7cb0e25587096a42ed0fce4a125bf4bba7affd",
      "parents": [
        "76218efbeb2e124656ce15d4eb5a7039da065123"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 30 17:41:08 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 30 18:42:13 2013 -0700"
      },
      "message": "Add x86_64 to the bionic headers.\n\nManual changes:\n\n  cpp.py: cope with macros that refer to other macros.\n\n  defaults.py: x86 no longer always implies __i386__; use __i386__ to replace\n  the kernel CONFIG_X86_32 flag.\n\n  asm/page.h: the upstream page.h isn\u0027t a uapi header and no longer includes\n  the stuff we were using it for. Let\u0027s just have our own static file, since\n  it\u0027s the same for all our architectures (both 32- and 64-bit).\n\n  sys/select.h: we used to use the various FD_SET-related macros from the\n  kernel header files, but they\u0027ve gone. Adjust by adding trivial equivalent\n  definitions.\n\nAutomated changes:\n\n  libc/kernel/arch-x86, libc/kernel/common: regenerated from\n  external/kernel-headers.\n\nChange-Id: I84fc0ed52dc742e043b4ae300fd3b58ee99b7fcd\n"
    },
    {
      "commit": "c95eb57405d3d2f0e6cfab313aa74b1bad280452",
      "tree": "3732a299ef9278be919aa436f135df907502a7a2",
      "parents": [
        "f67219783fa7c38c1f4f077364290d10d3aa1db4"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jan 29 18:15:55 2013 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jan 30 10:13:07 2013 -0800"
      },
      "message": "Clean up trailing whitespace in the kernel headers.\n\nAnd fix the scripts so they stop letting trailing whitespace through.\n\nChange-Id: Ie109fbe1f63321e565ba0fa60fee8e9cf3a61cfc\n"
    },
    {
      "commit": "fc2693110ee8a2ba22a445ad9855fbe9e118d439",
      "tree": "6bbfcf0620780f454b5c0ac2dbd5341a00cfa157",
      "parents": [
        "040e18f362716c0bab1d9c39a869b98d6c61584c"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Oct 11 22:11:06 2010 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Thu Feb 03 18:07:41 2011 +0100"
      },
      "message": "libc: Update auto-gen scripts\n\nMake the scripts use external/kernel-headers/original by default.\n\nclean_header.py:  Document -k\u003cpath\u003e, add -d\u003cpath\u003e\nfind_headers.py:  Make kernel config files optional\nupdate_all.py:    Allow setting the path to kernel headers on the command-line\nupdate_all.py:    Better formatting of output on ttys\nupdate_all.py:    Automatically perform \"git add/rm\" on affected files.\nSYSCALLS.TXT:     Fix typo in __socketcall definition.\nchecksyscalls.py: Add support for superH architecture in the checks.\ngensyscalls.py:   Automatically perform \"git add/rm\" on affected files.\ncpp.py:           Fixed a bug that prevented certain type definitions to\n                  be kept in the generated clean header (e.g.\n                  struct ethtool_drvinfo in \u003clinux/ethtool.h\u003e)\n\nAll scripts will use the content of external/kernel-headers/original by default now.\n\nThe generated code removes all empty lines and trailing whitespace. This is useful\nto ensure a unified output even if we change the parser again in the future.\n\nThe top-level disclaimer has been edited with update instructions to regenerate\nthe headers when needed.\n\nAlso, a warning is now inserted every 8th line in the final output:\n\n/* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */\n\nChanges under kernel/arch-arm and kernel/arch-x86 should correspond to whitespace\ndifferences and additionnal struct definitions that were missed by the previous\nparser implementation.\n\nChange-Id: Icd1c056bacd766759f3e9b7bb5d63a246f3d656a\n\nWARNING: If you run these script, do not submit the result to gerrit for now.\n         It seems there are discrepancies between the content of original headers\n         and those currently commited under bionic/libc/kernel/.\n\n         (This problem is the main motivation to insert the warning repeatedly).\n\n         Current list of issues:\n\n           - Missing SuperH headers (i.e. external/kernel-headers/original/asm-sh)\n"
    },
    {
      "commit": "d32c8052fc2b2d3c5da344eb673df35d4a5bc052",
      "tree": "453039efa2d214c68a422bda36921eb7266a0296",
      "parents": [
        "1bc98ccb76c147c46bd666f05247eb11e2847d4b"
      ],
      "author": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Wed Dec 08 11:38:14 2010 +0100"
      },
      "committer": {
        "name": "Martin Storsjo",
        "email": "martin@martin.st",
        "time": "Wed Dec 08 11:40:59 2010 +0100"
      },
      "message": "Add a method for replacing tokens in the preprocessed headers\n\nChange-Id: I14cf6337945560b012732ae0fe7a247074810678\n"
    },
    {
      "commit": "1dc9e472e19acfe6dc7f41e429236e7eef7ceda1",
      "tree": "3be0c520fae17689bbf5584e1136fb820caef26f",
      "parents": [
        "1767f908af327fa388b1c66883760ad851267013"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:28:35 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "1767f908af327fa388b1c66883760ad851267013",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "a799b53f10e5a6fd51fef4436cfb7ec99836a516"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:13 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "6d6c82c7a0a6b9a89f61b61c66f9b90d9c7177dc",
      "tree": "8de86895228b63728c3a134c8b1fcab003db467d",
      "parents": [
        "4e468ed2eb86a2406e14f1eca82072ee501d05fd"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jan 09 17:50:54 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jan 09 17:50:54 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@125939\n"
    },
    {
      "commit": "4e468ed2eb86a2406e14f1eca82072ee501d05fd",
      "tree": "4e05b3c66eef86531e464521a3bf96a1864d4bf5",
      "parents": [
        "a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:03:48 2008 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:03:48 2008 -0800"
      },
      "message": "Code drop from //branches/cupcake/...@124589\n"
    },
    {
      "commit": "a27d2baa0c1a2ec70f47ea9199b1dd6762c8a349",
      "tree": "defd1cc07d16ad2f3b21154114e092d11c94c5bb",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
