)]}'
{
  "log": [
    {
      "commit": "05fd20c797c0aab700183131023130e45a748a47",
      "tree": "8572db00e4fa83d6569aa9d2f4d3df61aab472d9",
      "parents": [
        "5725481f1e4cb2e2042b5469b5863023556cf2dd",
        "b50b8c888618c4da4bde8490206d1706a5882542"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 04 04:08:22 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu May 04 04:08:22 2017 +0000"
      },
      "message": "Merge changes Ia7200bf0,I86999bb7\n\n* changes:\n  versioner: fix leak.\n  versioner: add symlink for dependencies.\n"
    },
    {
      "commit": "d10d3eece155670d5922b27f99f92c487b6682a4",
      "tree": "9e75f7d8181c8b95a46050dde40551c94723bbd6",
      "parents": [
        "fd478a8cba97680974494bc72727fba6d8136805"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Apr 28 19:32:13 2017 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Mon May 01 16:31:51 2017 -0700"
      },
      "message": "versioner: disable container overflow checks\n\nTemporary workaround.\n\nBug: 37775238\nTest: ASAN_OPTIONS\u003d SANITIZE_HOST\u003daddress m\nChange-Id: If9e9df45d83f8412caafcece87337a5c9df3a1c8\n"
    },
    {
      "commit": "b50b8c888618c4da4bde8490206d1706a5882542",
      "tree": "cf47be17871fe84e11a2d65d9898a33d7cc4442d",
      "parents": [
        "0be1dabfc66e884c91bb93d4e96c10f3577385c0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 27 17:22:52 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 27 17:25:32 2017 -0700"
      },
      "message": "versioner: fix leak.\n\nReplace an intentional leak of a buffer allocated by realpath with a use\nof android::base::Realpath.\n\nBug: http://b/37727515\nTest: tools/versioner/run_tests.py\nChange-Id: Ia7200bf0e1c485050e860e21ff15784941366bec\n"
    },
    {
      "commit": "06be3459cadb085cbecd0c2f8ce5e78ab6dbc307",
      "tree": "d78f996ebc34ebec205b476ee4b4f36a1199277b",
      "parents": [
        "5deddda68e780aaa26e4777378fee10d543eb719"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Apr 20 14:27:28 2017 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Wed Apr 26 10:44:12 2017 -0700"
      },
      "message": "Update bionic after Clang rebase\n\nAfter the new rebase of Clang, we now supports alloc_size attribute, so\nwe can remove the warning about switching to alloc_size once Clang has\nsupport.\n\nCompiler.setInvocation has changed argument type from raw pointer to\nshared pointer. Add version check here so that we can build under either\nold rebase or the new rebase.\n\nTest: build\nBug: 37423073\nChange-Id: I4563eaf93bae6c59a4a19318f8caa92bd361b3ab\n"
    },
    {
      "commit": "ff6c8de4f51536855a05b71ff336257a36d7c215",
      "tree": "9cb372ce38225bfa50d65f34b789cf691e4938de",
      "parents": [
        "627ed9162538d847ea4e530fd443570d37f57d65"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Apr 20 09:08:11 2017 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Thu Apr 20 14:37:56 2017 -0700"
      },
      "message": "Remove unused lambda captures\n\nClean up. This fixes build under -Wunused-lambda-capture.\n\nTest: build\nChange-Id: Ic12aa39e14ed55dbb28cf55303f9c4258179037d\n"
    },
    {
      "commit": "a07033e0dc9cc0f3144954afda67103942216149",
      "tree": "698d8321b60e81f50a799ba1c88298bfce5963e9",
      "parents": [
        "c40af334c7f2e76c3a34824a17ea3803caedbd7d",
        "8ef9874d564e1de25057817b43a5ef6f5065b458"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 06 23:35:51 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 06 23:35:52 2017 +0000"
      },
      "message": "Merge \"versioner: fix LLVM assertion failure.\""
    },
    {
      "commit": "8ef9874d564e1de25057817b43a5ef6f5065b458",
      "tree": "0dda79ba52c176dd0865692c88490adcdaee7ac7",
      "parents": [
        "4df5ca1e0254790d41f945352a93f5c783ea8de0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 06 12:57:22 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 06 13:37:56 2017 -0700"
      },
      "message": "versioner: fix LLVM assertion failure.\n\nMemoryBuffer::getOpenFileSlice asserts that the map size passed in\nisn\u0027t -1 (presumably because the offset can be nonzero). Switch to\ngetOpenFile, which results in an identical call to the implementation\nfunction without the assert.\n\nBug: http://b/37002637\nTest: export FORCE_BUILD_LLVM_COMPONENTS\u003dtrue\n      export FORCE_BUILD_LLVM_DEBUG\u003dtrue\n      export FORCE_BUILD_LLVM_DISABLE_NDEBUG\u003dtrue\n      mma -j \u0026\u0026 versioner\n\nChange-Id: Ib610db9e07429aa3f64128eaef6ef555c4d1868e\n"
    },
    {
      "commit": "acc7921580522f759cba2ac782921d683665b6b9",
      "tree": "f6912c86aaba46713017c92e1e26b1b79a808ed6",
      "parents": [
        "d744a9bcd5128b106ba2f4cf991d4e6a510751e1"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 11:48:55 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 12:41:35 2017 -0700"
      },
      "message": "versioner: remove useless log message.\n\nTest: tools/versioner/run_tests.py\nChange-Id: I70edafb7ad6a6274e7daa508903520dbb4b399c8\n"
    },
    {
      "commit": "d744a9bcd5128b106ba2f4cf991d4e6a510751e1",
      "tree": "82f74d961467e566390f821dc68abf89ea739496",
      "parents": [
        "3fcf747f1daefcd7995a3c22f42e9f5c987e7142"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 11:24:48 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 12:41:35 2017 -0700"
      },
      "message": "versioner: fix indentation in usage.\n\nTest: versioner -h\nChange-Id: I96cba65e53c564c8f47714c74d300e8f3dee7e82\n"
    },
    {
      "commit": "3fcf747f1daefcd7995a3c22f42e9f5c987e7142",
      "tree": "16ec78eb984d4876b5542a8c6f7db5fd3d768dfc",
      "parents": [
        "4df5ca1e0254790d41f945352a93f5c783ea8de0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 11:24:17 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 03 12:41:35 2017 -0700"
      },
      "message": "versioner: guard preprocessing messages with -v.\n\nBug: http://b/36751878\nTest: tools/versioner/run_tests.py\nChange-Id: I5142a33519b101548ccaec8a3bc498e446a648a7\n"
    },
    {
      "commit": "69cb22f4d73bf432d2b0bb78b74801c94b0824b5",
      "tree": "f8bb77baece5f1d97062dd5319edc646eadb6c03",
      "parents": [
        "22805ea9b843f1b56932be9508d179438d23427e"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 27 13:28:27 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 27 13:28:27 2017 -0700"
      },
      "message": "Build the versioner even on unbundled branches.\n\nThis is needed to generate the NDK, so unbundled projects using the\nNDK need to build this. If they don\u0027t need the NDK, they should just\nremove bionic from their manifest.\n\nTest: make checkbuild\nBug: None\nChange-Id: I7db816c4a341cf34d4d11739dc64182af630ad63\n"
    },
    {
      "commit": "22805ea9b843f1b56932be9508d179438d23427e",
      "tree": "2504c07308e47a6c69b340b2f6433b42678ecf1f",
      "parents": [
        "840ae69408c9b6ca269bce4657b9696cc6720918"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Mar 22 15:28:05 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 27 13:06:45 2017 -0700"
      },
      "message": "Revert \"Revert \"Run the versioner as part of the build.\"\"\n\nThis reverts commit 69c7562f5983ed5bc1d330b1f44b5cf506efb60e.\n\nTest: make checkbuild\nChange-Id: Ie443029398c01b45e0a0317a8074808b064f35d4\n"
    },
    {
      "commit": "b8a3ae4bcb0713a3e316a92939468212eefaa86d",
      "tree": "08bb14f3f6511fb9beb03d7f0a45537dd71d6f1a",
      "parents": [
        "3f76dadf15aa8ca4f2eaf471a9a1f1c661b353c2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Feb 23 13:52:49 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Feb 23 13:52:49 2017 -0800"
      },
      "message": "versioner: fix darwin build.\n\nUse struct stat::st_mtime instead of the underlying st_mtim, which is\ncalled something different on Darwin.\n\nTest: mma on linux, darwin\nChange-Id: I2695a6c83ebb7d08ec56b1355e0f4bc0993a0acb\n"
    },
    {
      "commit": "0a284f5c05f36c7be570f1a2750eba79fa883291",
      "tree": "3aa5e5d761af135745c1b543af6ca889d8c62bb7",
      "parents": [
        "f7e793ef7fcfc8f20be3cadd2f5a233151d4b9c9"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 15 13:56:00 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 15 13:56:00 2016 -0800"
      },
      "message": "versioner: start using C++17.\n\nBug: None\nTest: python run_tests.py\nChange-Id: I10101d26b7816a83445f25b33b97ed47d42fd135\n"
    },
    {
      "commit": "68d6a9288afd724fc7137aa75b22456213cebf5d",
      "tree": "fb14a7944f5946afdb50c2305a45ae6f323bf476",
      "parents": [
        "a1d32f95c3bfc899b7f80ea39a52199a5d33abee"
      ],
      "author": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Wed Dec 07 11:24:06 2016 -0800"
      },
      "committer": {
        "name": "Colin Cross",
        "email": "ccross@android.com",
        "time": "Thu Dec 15 10:44:41 2016 -0800"
      },
      "message": "Convert versioner to Android.bp\n\nSee build/soong/README.md for more information.\n\nTest: mma -j\nChange-Id: I0e648143ac480c1257d9829f9b9087ee22005855\n"
    },
    {
      "commit": "cdbf6fe94f1907e29aa816471c9d093375ccba2f",
      "tree": "e3196cbcc73440aa22726d181fd6c37d7313fd48",
      "parents": [
        "11b362d284b49e070813cd459584ea3dabb20b1e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 09 18:28:37 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Nov 29 08:28:49 2016 -0800"
      },
      "message": "versioner: use unique_ptr to handle ownership of FTS*.\n\nBug: None\nTest: python run_tests.py\nChange-Id: I510063e9b57afda4f5492198cd40c15fc6380d2d\n"
    },
    {
      "commit": "9f9200c2ee7e5583282f4151ff9c18f1f1bcbcb9",
      "tree": "3792f29dd17de3f7ed7945cb34137e2741d5193a",
      "parents": [
        "2796894c98e8ef9639c7781cb343ce23cbd3781a",
        "acc3d80edf9912d0c30f951e498959b9ff74f0e2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Nov 22 00:51:14 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 22 00:51:14 2016 +0000"
      },
      "message": "Merge \"versioner: extract strict warnings out of -v into its own flag.\""
    },
    {
      "commit": "2796894c98e8ef9639c7781cb343ce23cbd3781a",
      "tree": "147fa29d23e8b39668f1e213b799420714093c52",
      "parents": [
        "5fabe027571627bf72eec1e23bfbb3a69845480a",
        "338cf129630ca5839f1ab695b04f7afbe18bb92d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Nov 22 00:50:58 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 22 00:50:59 2016 +0000"
      },
      "message": "Merge \"versioner: use a single work queue.\""
    },
    {
      "commit": "acc3d80edf9912d0c30f951e498959b9ff74f0e2",
      "tree": "0ac8f0bbf4cc479744da4caad3ed75134c12f689",
      "parents": [
        "338cf129630ca5839f1ab695b04f7afbe18bb92d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 09 18:22:44 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 17 18:12:21 2016 -0800"
      },
      "message": "versioner: extract strict warnings out of -v into its own flag.\n\nBug: None\nTest: versioner -v; versioner -s\nChange-Id: I8f6ac7064c6f05de0811677f7fcfce929a2568c1\n"
    },
    {
      "commit": "338cf129630ca5839f1ab695b04f7afbe18bb92d",
      "tree": "72f3aab6dea788568808228b9e22f33c2fb4bb76",
      "parents": [
        "8945d5e43a25737f3f888a90742cc918b1124a05"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 09 18:01:41 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 17 18:11:57 2016 -0800"
      },
      "message": "versioner: use a single work queue.\n\nPreviously, each thread was assigned a fixed list of work, and the main\nthread would block until every thread was finished, leading to most\ncores sitting idle for the last few hundred milliseconds while a few\nparticularly long running threads would keep working. Use a single work\nqueue to evenly distribute load across the threads.\n\nBug: http://b/32748936\nTest: python run_tests.py\nChange-Id: I80e231ece3b95e2721a32f658905841b89a8dc3b\n"
    },
    {
      "commit": "3091f5a06e82186bbf8cfde3498fa9aef4d389ee",
      "tree": "17e571f7c6da4054aabc8d7372255e6cf1442134",
      "parents": [
        "8945d5e43a25737f3f888a90742cc918b1124a05"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 16 17:01:57 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 16 17:01:57 2016 -0800"
      },
      "message": "versioner: ignore non-header files.\n\nDon\u0027t try to compile non-headers (vim swap files, etc.) that happen to\nbe in the header directory.\n\nBug: none\nTest: manually created a file in libc/include\nChange-Id: I2c1647ec7174dc617898dc2f07c9a80a08b69c72\n"
    },
    {
      "commit": "b3321c961452f69650e4a6bd2a7db317a80b3234",
      "tree": "9471f536d800a1ca4bb71a638edd11eb1a2496bd",
      "parents": [
        "cd9ce19e9ce34db6201bdb054c40c3b9e766d2d8",
        "78b8a1430debfb9361e425e52e8366409b9e5cd2"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 15 00:54:08 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Nov 15 00:54:09 2016 +0000"
      },
      "message": "Merge changes I72d37b7c,I7d254a10,I2e967acf\n\n* changes:\n  versioner: use a virtual filesystem for input files.\n  versioner: cache -cc1 flags generated by the clang Driver.\n  versioner: refactor to use CompilerInstance directly.\n"
    },
    {
      "commit": "78b8a1430debfb9361e425e52e8366409b9e5cd2",
      "tree": "63054645e21f43fc7626156843a511398a61194e",
      "parents": [
        "b5c496346f19cba410b3191b9c3297507bba854a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 09 01:00:41 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 09 18:12:10 2016 -0800"
      },
      "message": "versioner: use a virtual filesystem for input files.\n\nUse an InMemoryFileSystem to store and share input files across\ncompilations.\n\nThis improves the result of `time versioner` further, from:\n    versioner  109.12s user 17.43s system 2433% cpu 5.201 total\nto:\n    versioner  112.20s user 1.38s system 2416% cpu 4.700 total\n\nBug: http://b/32748936\nTest: python run_tests.py\nChange-Id: I72d37b7c30850b8399cc40338247700fe3e7b2f9\n"
    },
    {
      "commit": "b5c496346f19cba410b3191b9c3297507bba854a",
      "tree": "f5e01af0d1c789c719a83fd4c89ec8f3f0b0aafe",
      "parents": [
        "16016df79f846d6d21266c3b1dce1e7c24dc4be1"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Nov 08 22:21:31 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 09 18:10:15 2016 -0800"
      },
      "message": "versioner: cache -cc1 flags generated by the clang Driver.\n\nProfiling showed that majority of time spent by versioner was being\nspent in the x86 and x86_64 driver statting random files in /usr/lib,\nlooking for a toolchain. Hardcode a list of per-target flags which\ncorrespond to a subset of the ones generated by clang, and use those\ninstead of calling out to Driver.\n\nThis changes the result of `time versioner` from:\n    versioner  156.57s user 1180.08s system 4109% cpu 32.525 total\nto:\n    versioner  109.12s user 17.43s system 2433% cpu 5.201 total\n\nBug: http://b/32748936\nTest: python run_tests.py\nChange-Id: I7d254a105bf1a283cbba0546321b04e308e703d1\n"
    },
    {
      "commit": "16016df79f846d6d21266c3b1dce1e7c24dc4be1",
      "tree": "848d465210b468dbcdb9b94a2519b40a256bf323",
      "parents": [
        "42eb0b255507ca4d3b4e94b7756c15ab742261c0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Nov 07 18:27:16 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 09 13:50:07 2016 -0800"
      },
      "message": "versioner: refactor to use CompilerInstance directly.\n\nThis will make it easier to switch over to a virtual filesystem,\nwhich should drastically improve performance.\n\nThis also fixes an issue with warning/error reporting.\n\nBug: http://b/32748936\nTest: python run_tests.py\nChange-Id: I2e967acf75db29c95f3a03f4f94cccd22c367ad5\n"
    },
    {
      "commit": "84e269d5af7f6ae82afb066a6b69674180d44d2d",
      "tree": "e934ca88f5d8efd776d1e5e744f16fbed42e5d9e",
      "parents": [
        "64fc6b5e20201ff80f68c0754bc6f12a4750c32d",
        "9ae2b9a5213219e929e5cab6cea3f1f1e476d2fd"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 09 02:07:17 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 09 02:07:17 2016 +0000"
      },
      "message": "Merge \"versioner: don\u0027t always hide future decls.\""
    },
    {
      "commit": "9ae2b9a5213219e929e5cab6cea3f1f1e476d2fd",
      "tree": "724d367bbca0ed14f34eff36e077d6b601ec1416",
      "parents": [
        "42eb0b255507ca4d3b4e94b7756c15ab742261c0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Nov 08 16:17:45 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Nov 08 16:28:07 2016 -0800"
      },
      "message": "versioner: don\u0027t always hide future decls.\n\nBug: http://b/32748732\nTest: python run_tests.py\nChange-Id: I8f799015ebb1017f5e7d1324fb4c724e12a268bc\n"
    },
    {
      "commit": "1a176de2f15392c4789b071d5f05ed6950807a0e",
      "tree": "1afc5fb6af2a5136fea70d01247e2f83cd0f3546",
      "parents": [
        "a00e672361893fdaf7e87577e75290523c07d27d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Nov 04 13:15:11 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Nov 04 13:16:29 2016 -0700"
      },
      "message": "versioner: allow static inlines that don\u0027t conflict.\n\nBug: http://b/32664285\nTest: python run_test.py\nChange-Id: I9d050e545390eccd82661325c0ec58055f5f28a3\n"
    },
    {
      "commit": "a00e672361893fdaf7e87577e75290523c07d27d",
      "tree": "2856695e790b730c4185a74e3437f6d7e39f4885",
      "parents": [
        "42eb0b255507ca4d3b4e94b7756c15ab742261c0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Nov 04 12:04:38 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Nov 04 13:16:16 2016 -0700"
      },
      "message": "versioner: fix output.\n\nBug: http://b/32664285\nTest: python run_test.py\nChange-Id: Ic487036a17cc6778493e316146e54ead8ce3e65b\n"
    },
    {
      "commit": "079be165a66181386f14263b3024f1943ebcd624",
      "tree": "edf038caff6bacad592f874e8a4d77a0d1466360",
      "parents": [
        "268b3d8878e6b22a57fe52b127aa4bcdbf7c2c2b"
      ],
      "author": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Fri Sep 16 16:56:15 2016 -0700"
      },
      "committer": {
        "name": "Pirama Arumuga Nainar",
        "email": "pirama@google.com",
        "time": "Tue Oct 25 09:35:20 2016 -0700"
      },
      "message": "Make versioner build with LLVM r275480\n\nBug: http://b/31320715\n\nTest: tools/versioner/preupload.sh\nChange-Id: Icdff19b214b2b26c60288e49d26a88f04df68ef0\n"
    },
    {
      "commit": "dfb74c5f597542c7587a4144eb31b143d82a2281",
      "tree": "6518b6dbd451d3359c9daec78867a66481dc77fd",
      "parents": [
        "bd839d100d1c4802cf53f3d27bb73e6032719762"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 24 12:53:17 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 24 12:57:55 2016 -0700"
      },
      "message": "Minor copyright header unification.\n\nRegenerating the NOTICE file the other day left me scratching my head at\nvarious \"how do they differ?\" cases, resolved by this patch.\n\nTest: N/A\nChange-Id: I4230bfa1d7ec842a4b9fb8c73dd3b39443d74054\n"
    },
    {
      "commit": "ac3e5641428512c12ff2c463005ab29b026a928c",
      "tree": "2564871000f3897a815e765d7c34886969b41dab",
      "parents": [
        "81b4aadb4857f351915b6fc215a73baacc90d22a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 15 14:16:15 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 15 14:21:28 2016 -0700"
      },
      "message": "versioner: turn on -Wundef.\n\nPoking around with -Wundef exposed a pretty horrifying bug, so we\nshould probably keep it turned on.\n\nBug: http://b/31496165\nChange-Id: Iada279eec91ded0d59ff3841d5a3ce1a36e34c3a\n"
    },
    {
      "commit": "bb96628f487aaa55ce861d5d72c9c38d5943c9a6",
      "tree": "46aaaac0add4344a4177843c54fe534eb0d82374",
      "parents": [
        "76fcad2a6f6b6633c49f4f0b703ef490d2d127fd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Sep 14 14:21:56 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Sep 14 14:22:27 2016 -0700"
      },
      "message": "versioner: turn on -Wall -Wextra -Werror.\n\nChange-Id: Ica47d0fa671934a1ea193869265de8986b012a58\nTest: mma \u0026\u0026 versioner\n"
    },
    {
      "commit": "fff29fe17a4187ea83add76695040bc888e9d3bd",
      "tree": "d53910633fa98038db957b1cf767aa8fb0b26ca2",
      "parents": [
        "bfad958982a6b1c8c957c0eb951826d0c369eedd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Sep 07 18:29:08 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Sep 07 18:34:39 2016 -0700"
      },
      "message": "versioner: add support for __VERSIONER_NO_GUARD.\n\nAdd an attribute that tells the preprocessor not to guard a\ndeclaration, primarily for use with symbols that get reexported by\nlibc++ of the form `namespace std { using ::wctrans; }`.\n\nBug: http://b/28178111\nChange-Id: I08c8751214797e37e8f26e7f7416a19e81c2bb4c\n"
    },
    {
      "commit": "a77b3a9464641ba813018b9cab0555d9d800d65e",
      "tree": "d3f90e5a9d9d4e3983b698c6b3b00ece3aefd064",
      "parents": [
        "3b2d331e77143ce63ad7f404ab6669c03178eff4"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 15 16:39:27 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 15 16:43:13 2016 -0700"
      },
      "message": "versioner: handle _FILE_OFFSET_BITS\u003d64.\n\nCompile headers with both -D_FILE_OFFSET_BITS\u003d32 and -D_FILE_OFFSET_BITS\u003d64.\n\nBug: http://b/30170081\nChange-Id: I92651e075cc69bdc1a2581f99892c9a7fdcdb35b\nTest: python run_tests.py\n"
    },
    {
      "commit": "9f7ce3d27f5ad369db54047d3f6029add70a55b9",
      "tree": "723dc1b3374bc2c3c27c3a6d9faabada945ed6d1",
      "parents": [
        "1b4b3d7a3cf5d81d84f3e27d0bdee744cc6ad05e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 15 13:44:37 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 15 14:09:53 2016 -0700"
      },
      "message": "versioner: fix off-by-one error in header guard calculation.\n\nThis was causing redundant guards to be emitted in cases where\ndeclarations were already guarded by another macro.\n\nBug: http://b/30170081\nChange-Id: I9080838fbea5a56225df4b26d0918657fb6c4f21\nTest: python run_tests.py\n"
    },
    {
      "commit": "a6b8c4e163a976a2befe4f3bfbfa9ce66d159d30",
      "tree": "c7f61ffafa591bc54945614594225094cdcc82ef",
      "parents": [
        "b0af100297ead6f6f3637b9b00d55d161f368ec3"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 15 13:04:51 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 15 13:41:57 2016 -0700"
      },
      "message": "versioner: always copy over source headers when preprocessing.\n\nAlso, be less noisy when preprocessing.\n\nBug: http://b/30170081\nChange-Id: If0d81b0a3a49756164e4945a20703afeb302fd4d\nTest: python run_tests.py\n"
    },
    {
      "commit": "64da0060637cce4f24f743437dbada6ab928ded0",
      "tree": "6aac578b0b19dd51d5b64f7ec9d528d852f1e002",
      "parents": [
        "e73fc63f96aa99adaf65dfe1e04c726a1f65ba75"
      ],
      "author": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 12 19:10:21 2016 -0700"
      },
      "committer": {
        "name": "Andreas Gampe",
        "email": "agampe@google.com",
        "time": "Fri Aug 12 19:10:21 2016 -0700"
      },
      "message": "versioner: Ignore if Clang is missing\n\nThis happens in some branches. Work around for now.\n\nChange-Id: I75c01a3ae52ce89f6c56a19728903bf86db0a309\n"
    },
    {
      "commit": "79786347db99cfddcce89138c212e6d23daa9b2e",
      "tree": "236dd6e05a56e75ff36fe40aa5b41b22e735b89e",
      "parents": [
        "9519fc08b730ca5857ac70debd799c5f590d01cd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Aug 12 16:17:22 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Aug 12 16:24:04 2016 -0700"
      },
      "message": "versioner: copy unmodified headers when preprocessing.\n\nChange-Id: I2517f560fd44fb519d6ee7e8d0a485036d3ecd87\n"
    },
    {
      "commit": "f8592a3ff3d452b7d784d34814e5d04c20348343",
      "tree": "7b7b981e5c74280552b875bdbd4494c3000b38d9",
      "parents": [
        "8feba83242e32693b1853f0d6f141b7736008d4a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jul 26 18:58:27 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 08 16:39:07 2016 -0700"
      },
      "message": "versioner: add support for preprocessing headers.\n\nBug: http://b/30170081\nChange-Id: I9b662ca9e0fa3a1f9c0211594e851f5f9bef7266\n"
    },
    {
      "commit": "8feba83242e32693b1853f0d6f141b7736008d4a",
      "tree": "dbcba4ad11fb37714a17041249886f94df72fed1",
      "parents": [
        "566735df35488b332bedb2e384221c08c3ec686c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 02 15:50:05 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 08 16:39:07 2016 -0700"
      },
      "message": "versioner: fix makefiles.\n\nMove the Android.mk to src/ so that mm in that directory works.\nAlso, remove the dependency on FORCE_BUILD_LLVM_COMPONENTS.\n\nChange-Id: Iad7f3fc96f5f26f9535141d752ba865b40d5ff7e\n"
    },
    {
      "commit": "566735df35488b332bedb2e384221c08c3ec686c",
      "tree": "44b6e4b8aa9143212fb9afe157a19057f2b7b24a",
      "parents": [
        "16057886d7aa2e30536908ae72451ebf42661080"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 02 15:07:32 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 08 16:39:07 2016 -0700"
      },
      "message": "versioner: purge iostreams.\n\nChange-Id: I1b16a4b5c4a8a1333f05636c8c67890d8ce1a090\n"
    },
    {
      "commit": "16057886d7aa2e30536908ae72451ebf42661080",
      "tree": "3db021441d0350caf3288f5fa3f627b991f0ecc1",
      "parents": [
        "bfb6bae9fb5ef42e4f9ae2847f30f41938c04900"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 02 14:54:09 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 08 16:39:07 2016 -0700"
      },
      "message": "versioner: assorted fixes.\n\nZero initialize the contents of ArchMap, keep track of the symbol name\nin Declaration, remove unnecessary copies in loops.\n\nChange-Id: I47b07755846f252b83ffc4c89547a34b2f7ab868\n"
    },
    {
      "commit": "bfb6bae9fb5ef42e4f9ae2847f30f41938c04900",
      "tree": "e75bc213342719cd3f803db5d27f4f21d9601fe0",
      "parents": [
        "681f6b59d26c7c9470bc681b0ca0b43c3d0835db"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jul 15 17:25:21 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 08 16:39:07 2016 -0700"
      },
      "message": "versioner: replace availability attributes with annotate.\n\nMajor refactor to use __attribute__((annotate)) to be able to keep\ntrack of the semantic differences between __INTRODUCED_IN(x) and\n__INTRODUCED_IN_X86(x), for use in the upcoming preprocessor.\n\nBug: http://b/30170081\nChange-Id: I6496a8c40ba7f4553de9a2be0bbddcf37c813937\n"
    },
    {
      "commit": "d8c77257ea0b0b3a4f92f8ae20b230b545456fa5",
      "tree": "5603d67f343ea8c3fc96dcc6fa42916a4692f99d",
      "parents": [
        "4af829acb7bedbc2d08dfde0d099c658a1aa7567"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 03 13:54:28 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 03 15:01:19 2016 -0700"
      },
      "message": "versioner: whitelist atexit, turn on symbol checking by default.\n\nChange-Id: I32e726c74ee618ace3a4329d46408a42732a8d9d\n"
    },
    {
      "commit": "958f3b31c49e1975117898a54d6e7c1fe2b386ec",
      "tree": "a226bca1c97221743727d9421fe672d368e404e4",
      "parents": [
        "173e7c07539af0910d170cd17385cba6762cfbc8"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 03 13:44:00 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 03 15:01:19 2016 -0700"
      },
      "message": "versioner: fix false positive with functions only available as inlines.\n\nChange-Id: I09cc335b4006c6ceafcbd1bec9e50161f8262942\n"
    },
    {
      "commit": "173e7c07539af0910d170cd17385cba6762cfbc8",
      "tree": "ce1b645e69d8b9f510c10ea2805b9bcc67b04c23",
      "parents": [
        "658dbd920d8e8d17723e014d886e43615107a59a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 03 13:38:00 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 03 15:01:19 2016 -0700"
      },
      "message": "versioner: improve error output slightly.\n\nPrint [introduced \u003d 9, deprecated \u003d 10, obsoleted \u003d 11] instead of\n[9,10,11].\n\nChange-Id: Ifb8a66abbcec92aa13086d220af7ee6fa17b0897\n"
    },
    {
      "commit": "d67dbf003e6b203a4ec41d01081190d3e40f00e2",
      "tree": "8a1a7e3532876d06f805376ea7dda0efb28571e5",
      "parents": [
        "9b5af7ad5e5b36d751f152382971b034161755e5"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 02 15:21:14 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 03 15:01:18 2016 -0700"
      },
      "message": "versioner: ignore functions that are __INTRODUCED_IN_FUTURE.\n\nBug: http://b/28178111\nChange-Id: I8026181e08ed8f2d59b31a37adcf8b469fb6bdaf\n"
    },
    {
      "commit": "9b5af7ad5e5b36d751f152382971b034161755e5",
      "tree": "d352634230bcbebbc411783867e440e6e57356a3",
      "parents": [
        "62aaf8f8fe123e34ec0f66b0cd51ec24e304c9b5"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 02 14:29:13 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 03 15:01:18 2016 -0700"
      },
      "message": "versioner: autodetect paths when no specified.\n\nSearch for the header/dependency/platform directories in a hard-coded\npath relative to $ANDROID_BUILD_TOP when they\u0027re not specified.\n\nChange-Id: I476385cfc0247e3b2009348ec37c1810a0e9a7f7\n"
    },
    {
      "commit": "62aaf8f8fe123e34ec0f66b0cd51ec24e304c9b5",
      "tree": "f2c71111d1910cf6a9c116beac2a43ddf160ce09",
      "parents": [
        "99a84c83169a4443d844836bf5d892ec55130448"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 02 14:27:21 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 03 15:01:18 2016 -0700"
      },
      "message": "versioner: improve usage messages.\n\nDon\u0027t spew all of usage when called improperly, and add a -h option\nthat exits cleanly.\n\nChange-Id: I1a4517edce75afe0f9a80bc8d6c81353d6c12e99\n"
    },
    {
      "commit": "bf8a285e64055ffd7e0c8b91519b75ff9ad94184",
      "tree": "ed209dd25479e657ab2ca0b311aab46d62da75aa",
      "parents": [
        "46b44160e9e4c466be0faf1bb8d6ec70ecc83273"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 27 11:59:09 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 02 13:40:36 2016 -0700"
      },
      "message": "versioner: introduce.\n\nAdd a clang-based tool to inspect header availability attributes and\nverify them against the NDK platform definitions.\n\nBug: http://b/28178111\nChange-Id: I1bb1925a620e98cc9606cb5a3360b1224c700bd0\n"
    }
  ]
}
