)]}'
{
  "log": [
    {
      "commit": "b628cb1dae77603b27673d8de27ed87d2ccfbb60",
      "tree": "05b8a3794af4a8f2d5eefbf1810811e25a3def46",
      "parents": [
        "44be5ce75ec6c6d0414c7b71d824b385e9151a7b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 03 10:38:08 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 24 11:15:01 2015 -0700"
      },
      "message": "adb sync cleanup.\n\nWe can double the speed of \"adb sync\" (on N9) if we increase SYNC_DATA_MAX\nfrom 64KiB to 256KiB. This change doesn\u0027t do that, because I still haven\u0027t\nmanaged to plumb through the information about whether we\u0027re a new adb/adbd\nto file_sync_client.cpp and file_sync_service.cpp. But this is already a big\nchange with a lot of cleanup, so let\u0027s do the cleanup and worry about the\nintended change another day...\n\nThis change does improve performance somewhat by halving the number of\nlstat(2) calls made on the client side, and ensuring that most packets are\nsent with a single write. This has the pleasing result of making the null\nsync on an AOSP N9 go from just over 300ms to around 100ms, which means it\nnow seems instantaneous (https://en.wikipedia.org/wiki/Mental_chronometry).\n\nChange-Id: If9f6d4c1f93ec752b95f71211bbbb1c513045166\n"
    },
    {
      "commit": "d189cfb4837f978bec5d56042989b4a8e9bcc474",
      "tree": "ec93a69048905f2062f6737235ce301984f97fe6",
      "parents": [
        "28d1f8d69e63f96ce770417d256819d5bc1c5e14"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 30 17:42:01 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 30 17:46:58 2015 -0700"
      },
      "message": "More adb cleanup.\n\nThis removes adb_dirstart and adb_dirstop. It also fixes a couple of memory\nleaks by switching to std::string. This also fixes the bug in the previous\nchange --- mkdirs is given input like \"/system/bin/sh\" and only expected to\ncreate \"/system/bin\". In a later change, we should remove mkdirs and only\nexpose the intended \"unlink \u0026\u0026 mkdirs \u0026\u0026 create\" functionality.\n\nChange-Id: I30289dc1b3dff575cc1b158d993652178f587552\n"
    },
    {
      "commit": "28d1f8d69e63f96ce770417d256819d5bc1c5e14",
      "tree": "987e5cc564bc6e2441e097ff857afbd4a2295485",
      "parents": [
        "881c43397d990ecf026951de9946ff9bc5b1ad60"
      ],
      "author": {
        "name": "Alex Vallée",
        "email": "avallee@chromium.org",
        "time": "Wed May 06 16:26:00 2015 -0400"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 30 15:08:53 2015 -0700"
      },
      "message": "Write mkdirs in more idiomatic C++ style.\n\n~ Rewrote mkdirs to be in C++ style.\n~ Replaced adb_dir{start,stop} with std::string params and (r)find.\n+ Added test for mkdirs.\n\nAlso make base/test_utils.h public and support temporary directories\nas well as files.\n\nChange-Id: I6fcbdc5e0099f3359d3aac6b00c436f250ca1329\n"
    },
    {
      "commit": "e91631558898a0b8f7a3ea2b74b7726d78c2f227",
      "tree": "2ca29844619ea96de5b419da849a650a227d9c48",
      "parents": [
        "a53c848ebcbddde75415bf18f2d26e01a0e60758"
      ],
      "author": {
        "name": "Alex Vallée",
        "email": "avallee@chromium.org",
        "time": "Wed May 06 17:22:25 2015 -0400"
      },
      "committer": {
        "name": "Alex Vallée",
        "email": "avallee@google.com",
        "time": "Wed Jul 15 19:37:18 2015 +0000"
      },
      "message": "Move mkdirs to adb_utils.\n\nThere were duplicate implementations in commandline.cpp and\nfile_sync_client.cpp.\n\nChange-Id: Ib448f76c0d7ffdcd577336b1c610a881425bc2db\n"
    },
    {
      "commit": "803451eec33e9cd3028de257008f926871fe1455",
      "tree": "a427ba7b734b4dc08fad0cda3ad27f7a86919173",
      "parents": [
        "9529b3e16c99070f2abb3dcd232f4f39a60d702e"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed May 13 00:02:55 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed May 13 19:30:30 2015 -0700"
      },
      "message": "adb: win32: fix StringPrintf format string checking of %zd and PRIu64\n\nAt runtime, vsnprintf (and android::base::StringPrintf which calls it)\ncall a mingw version of vsnprintf, not the vsnprintf from MSVCRT.DLL.\nThe mingw version properly understands %zd and PRIu64 (the latter,\nprovided that you #include \u003cinttypes.h\u003e).\n\nThe problem was that android::base::StringPrintf was causing\ncompile-time errors saying that %zd and PRIu64 were not recognized. It\nseems that this was because the attribute on the function prototypes\nspecified `printf\u0027 instead of `gnu_printf\u0027. Once that was fixed to match\nvsnprintf\u0027s attribute, the warnings went away.\n\nThis uses similar preprocessor techniques as \u003candroid/log.h\u003e.\n\nAlso restore a %zd usage to avoid a static_cast\u003c\u003e, and make\nprint_transfer_progress()\u0027s format string compile-time checkable (and\ntweak some types and %llu \u003d\u003e PRIu64).\n\nChange-Id: I80b31b9994858a28cb7c6847143b86108b8ab842\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "712416aaee60976f6b10d2228c35478beea97532",
      "tree": "d993c172de59354f4597a32913f800ec8d158290",
      "parents": [
        "06815c9ee9795abd1643cbc260ba2e8dd2535312"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 18:26:10 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 18:26:10 2015 -0700"
      },
      "message": "Add some missing \u0027static\u0027s.\n\nChange-Id: Id76bb1e954e8fa36a11a38b5445c87f4a64af799\n"
    },
    {
      "commit": "04a98c2affb9f4a2b5baf79418793d0e6ba8d766",
      "tree": "91a227e61237dd7bb9667198086fb853eec035ca",
      "parents": [
        "fb2ba514edb9ae9a086daef54aa7a61708595442"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 29 08:35:59 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 29 11:28:37 2015 -0700"
      },
      "message": "Move __adb_error to std::string, and improve various errors.\n\nAlso remove an sprintf. Also fix various bits of code that were\nreporting stale adb_error values when they meant strerror.\n\nBug: http://b/20666660\nChange-Id: Ibeb48b7bc21bb0ec30ba47889d1d671ee480e1b7\n"
    },
    {
      "commit": "c5a12b23144c240e1db042235b60ea76c9ca06bf",
      "tree": "44eb5f7421082d1f3ecb3e20e11ef314080afd1a",
      "parents": [
        "bbc32ce6279fabb5626d82447f0dea494cab348c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 21 10:17:07 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 21 10:17:07 2015 -0700"
      },
      "message": "Fix \"adb sync\" for devices without vendor and oem.\n\nBug: http://b/20440110\nChange-Id: I2481992198890f5ca50412c2b7ca361101961413\n"
    },
    {
      "commit": "fe7ff81e12a8f8ca724b36cfa3fd33e8736057df",
      "tree": "472547b45e133c31da42343c1f534d8db847426e",
      "parents": [
        "c084e0c4116d0b001184a69c70d0ef564dc93579"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 09:47:42 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 09:47:42 2015 -0700"
      },
      "message": "Remove extern \"C\" barriers to using C++.\n\nChange-Id: Ic046d6aa540738cb46b54531bc59ba3b47b0136d\n"
    },
    {
      "commit": "64ef40b41ce864be8c00cfb4003ff0bf71f4b968",
      "tree": "3bb4bf23b1e6d3c39da75f5e6e82dfc5d5d1df37",
      "parents": [
        "4b207ea750c6b625acfe9ec5390dc04aa55b99b6"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 13 09:40:45 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Mar 13 09:40:45 2015 -0700"
      },
      "message": "adb doesn\u0027t actually use libzipfile.\n\nChange-Id: Ia7d22214bc8422c88edaaf9bb716d7e12e0bb381\n"
    },
    {
      "commit": "f30d73c74d85ccc2b1f55d6946f616e62d67e48e",
      "tree": "b2302299d3d083ba83949a80213b92d66540201f",
      "parents": [
        "b5f43a12723896c2d8fc98eed5abce563a16f56b"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Feb 25 17:51:28 2015 -0800"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 09 14:06:11 2015 -0700"
      },
      "message": "Move adb to C++.\n\nI keep trying to clean things up and needing std::strings. Might as\nwell just do this now.\n\nusb_linux_client.c is going to stay as C because GCC isn\u0027t smart\nenough to deal with the designated initializers it uses (though for\nsome reason it is in C mode).\n\nThe Darwin files are staying as C because I don\u0027t have a way to test\nthat they build.\n\nThe Windows files are staying as C because while I can actually build\nfor them, it\u0027s slow and painful.\n\nChange-Id: I75367d29205a9049d34460032b3bb36384f43941\n"
    },
    {
      "commit": "b5f43a12723896c2d8fc98eed5abce563a16f56b",
      "tree": "f81933396150903b8b0d0fa38e9faa081376253a",
      "parents": [],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 09 20:29:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 09 20:29:07 2015 +0000"
      },
      "message": "Merge \"Fix a writex transcription error.\""
    }
  ]
}
