)]}'
{
  "log": [
    {
      "commit": "19bec5b329fe202795688bfb76d77f4560adf2c6",
      "tree": "e046660c0f6fcf1038982323810cb15e0326d591",
      "parents": [
        "468978294e130807cc37ed295115863c2d7bacaa"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 22 15:52:57 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 23 12:53:38 2015 -0700"
      },
      "message": "Adb: use VLOG() to replace D() for verbose logging.\n\nAs there are too many D(), we can keep both VLOG() and D() now, and get\nrid of D() gradually.\n\nChange-Id: I2f1cb70bcab3e82c99fed939341d03f6b2216076\n"
    },
    {
      "commit": "a07dbad65fd9f2644876b6a0448bad66a5a29387",
      "tree": "a54f3408c9166dbe9b73b51e16f7b021405bc717",
      "parents": [
        "b3db0b3fcde060299eb88b6a911f19b3922a0851"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 22 10:43:08 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 22 12:50:11 2015 -0700"
      },
      "message": "adb: add -Tt options to `adb shell`.\n\nAdds -T (no PTY) and -t (force PTY) options to `adb shell` to mimic\nssh options. Small cleanup to send an entire FeatureSet to the adb\nclient at once to avoid multiple round-trips when querying multiple\nfeatures.\n\nKnown issue: humans using `adb shell -T` to start a non-PTY interactive\nsession may experience problems since neither side will have PTY\nfeatures like echoing or newline translation. This is probably OK for\nnow as the -Tt options are primarily useful for scripting.\n\nBug: http://b/23825231\nChange-Id: I4d0df300db0abd1f7410bab59dd4d5b991babda7\n"
    },
    {
      "commit": "8da19a4b7952376f81b74177f80411210c49a9c6",
      "tree": "0db5b47f7c09702433226e54a7fd140df99819b6",
      "parents": [
        "f31b3b23eaa262e478f28868ce8fb1bb014f41df"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Aug 31 10:42:13 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 11:27:50 2015 -0700"
      },
      "message": "adb: implement shell protocol.\n\nAdds functionality for handling stdin/stdout/stderr streams and exit\ncodes using the shell protocol.\n\nThis CL just contains implementation for adbd which will not yet be\nenabled. Once we have the ability to query transport features from the\nadb client, another CL will add the implementation for the client side\nand update the feature list to turn this on.\n\nNote: this CL must be submitted together with a minadbd CL to update\nthe service_to_fd() function signature.\n\nBug: http://b/23030641\n\nChange-Id: Ibed55e9c1946d8a35190696163ff63e8fb880238\n"
    },
    {
      "commit": "4f344bb156137ee7d5824b72e5d96f8aa93cde55",
      "tree": "26d946edf2cce0d259e03039abcafbf251804fc0",
      "parents": [
        "c5d51620cf959101a335f659998ee1b3141aa2d7"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Aug 28 15:08:49 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 08:52:35 2015 -0700"
      },
      "message": "adb: move shell service to a separate file.\n\nUpcoming changes to the shell will require significant additions to\nthe subprocess code, and it will be cleaner if it\u0027s in a separate file.\n\nThe only functional change here is a new debug tag specifically for\nthe shell service. Everything else has been copied exactly as-is in\norder to make it easier to determine what\u0027s changing in upcoming CLs.\n\nChange-Id: I13bd4294059051ee10e0d0c6a06affd8eca62967\n"
    },
    {
      "commit": "815ad88d465c07b09eae296db6f41b7bef3c3cc4",
      "tree": "b52bacf0f8fdeaad7b5dfa89f3ffeff841dc8e1d",
      "parents": [
        "7d5e6e62f2d618ba376cbc9b8a5def881a73f1a9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 02 17:44:28 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 02 20:21:00 2015 -0700"
      },
      "message": "adb: clean up debug tracing a little.\n\nAlways use LOG() for debug tracing.\nRemove useless D_lock. I believe it is useless to lock just before and after fprintf.\n\nI verified the log output both on host and on device. The output looks fine to me.\n\nChange-Id: I96ccfe408ff56864361551afe9ad464d197ae104\n"
    },
    {
      "commit": "2669cf9b61e4b222a012750baac7725ae2327618",
      "tree": "eccb8a0b47c4c07b4fcebebb08305593b4c6a2a8",
      "parents": [
        "5fea4913485a45bb8d63bf5fa7a60dc80284e155"
      ],
      "author": {
        "name": "Siva Velusamy",
        "email": "vsiva@google.com",
        "time": "Fri Aug 28 16:37:29 2015 -0700"
      },
      "committer": {
        "name": "Siva Velusamy",
        "email": "vsiva@google.com",
        "time": "Mon Aug 31 07:52:52 2015 -0700"
      },
      "message": "adb: set thread names (linux \u0026 mac)\n\nBug: 23423333\nChange-Id: I0069f32ddbae2a10fb130064f721facf45b2cc09\n"
    },
    {
      "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": "87c2995a6d8edae2cf9609ae134e391de18db2e9",
      "tree": "556b1c69c94c8051ceab6a81b588f4deaa1257e2",
      "parents": [
        "3b1a373b82a55a3affda0bb1a1f06419d4c42143"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Aug 10 12:52:16 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Aug 12 14:16:22 2015 -0700"
      },
      "message": "adb: Fix PTY logic for non-interactive shells.\n\nChange `adb shell` so that interactive sessions use a PTY but\nnon-interactive do not. This matches `ssh` functionality better\nand also enables future work to split stdout/stderr for\nnon-interactive sessions.\n\nA test to verify this behavior is added to test_device.py with\nsupporting modifications in device.py.\n\nBug: http://b/21215503\nChange-Id: Ib4ba40df85f82ddef4e0dd557952271c859d1c7b\n"
    },
    {
      "commit": "5fe6d0d1319be46bb98144e00f9da10da68d02aa",
      "tree": "9e8115394b43baa4f2350e46382a7835d4c6826e",
      "parents": [
        "b28812f800fcf5eaf26cc8b3145661d85d910ea9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Aug 11 13:40:42 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Aug 11 14:00:15 2015 -0700"
      },
      "message": "Remove confusing variable HOST.\n\nFirst, HOST is always 0 in adbd, which matches ADB_HOST\u003d0.\nSecond, HOST is always 1 when adb_main is called, which matches ADB_HOST\u003d1.\nFor adb client that doesn\u0027t call adb_main, it never touches local_init(),\ninit_transport_registration() and fdevent_loop(). So the changes in adb.cpp,\nservices.cpp and transport_local.cpp do nothing with it.\nAs a conclusion, I think we can remove HOST and use ADB_HOST instead.\n\nChange-Id: Ide0e0eca7468b6c3c130f6b50974406280678b2e\n"
    },
    {
      "commit": "753d485aca0e35bc92a7dec0c3278f0530dc25ca",
      "tree": "7dfddab77e98b5fa205a0aed70ff8c6d0d5285e2",
      "parents": [
        "9897771f79a760bcd337cae67500ebb5ff1d619f"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Jul 30 23:07:55 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Jul 30 23:07:55 2015 -0700"
      },
      "message": "adb: win32: initial IPv6 support and improved Winsock error reporting\n\nCall getaddrinfo() for connecting to IPv6 destinations.\n\nWinsock APIs do not set errno. WSAGetLastError() returns Winsock errors\nthat are more numerous than BSD sockets, so it really doesn\u0027t make sense\nto map those to BSD socket errors. Plus, even if we did that, the\nWindows C Runtime (that mingw binaries use) has a strerror() that does\nnot recognize BSD socket error codes.\n\nThe solution is to wrap the various libcutils socket_* APIs with\nsysdeps.h network_* APIs. For POSIX, the network_* APIs just call\nstrerror(). For Windows, they call SystemErrorCodeToString() (adapted\nfrom Chromium).\n\nAlso in this change:\n\n - Various other code was modified to return errors in a std::string*\n   argument, to be able to surface the error string to the end-user.\n\n - Improved error checking and use of D() to log Winsock errors for\n   improved debuggability.\n\n - For sysdeps_win32.cpp, added unique_fh class that works like\n   std::unique_ptr, for calling _fh_close().\n\n - Fix win32 adb_socketpair() setting of errno in error case.\n\n - Improve _socket_set_errno() D() logging to reduce confusion. Map\n   a few extra error codes.\n\n - Move adb_shutdown() lower in sysdeps_win32.cpp so it can call\n   _socket_set_errno().\n\n - Move network_connect() from adb_utils.cpp to sysdeps.h.\n\n - Merge socket_loopback_server() and socket_inaddr_any_server() into\n   _network_server() since most of the code was identical.\n\nChange-Id: I945f36870f320578b3a11ba093852ba6f7b93400\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "2b01414863d5bf6c35ddd71bf75b5b0f73eb712f",
      "tree": "c7f8881e67dd7957a29f9516631303ccda962b29",
      "parents": [
        "a0900797f68236d20c405de440ccab7f48548da8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 29 17:45:24 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 29 17:45:24 2015 -0700"
      },
      "message": "Use _WIN32 rather than HAVE_WINSOCK.\n\nChange-Id: I9855b6fe72e2f2f3a8360c0993a67cb988024ee4\n"
    },
    {
      "commit": "43df109b4b0bb8e08cb4068c4983f32584dfef9a",
      "tree": "9946617f72ea0ea7400c68d9d56052890b7cb3d6",
      "parents": [
        "6cde25edd8c2ef313aebe5852496baa5218ee48a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 23 17:12:58 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 23 21:14:38 2015 -0700"
      },
      "message": "Report getaddrinfo failures correctly.\n\nAlso move us off the \"convenience\" function because you can\u0027t get useful\nerror reporting from it.\n\nChange-Id: I5fcc6a6d762f5f60906980a7835f01a35045be65\n"
    },
    {
      "commit": "d94e8ba75066239d33a1a180a6c68921262f3552",
      "tree": "cbb288f2bde095b39423a28d705e54dbf69278c2",
      "parents": [
        "ad7c49f50fc1bbc82f4c9307f46ef11f1f6ee261"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 16:13:40 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 16:27:46 2015 -0700"
      },
      "message": "\"adb tcpip\" should require a numeric argument.\n\nDefaulting to port 0 just breaks stuff.\n\nBug: http://b/22636927\nChange-Id: I6239900e0828e71b31171d0184c24824957c99c8\n"
    },
    {
      "commit": "ad7c49f50fc1bbc82f4c9307f46ef11f1f6ee261",
      "tree": "38fe843e2d484b963ad731829ed53f207159f2c3",
      "parents": [
        "5c761bdf94bcdaf3a619cde002ef60c9b226f5c3",
        "09ccf1fa62cef5ce1f3766683df29b8467444a79"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 22:29:05 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 21 22:29:05 2015 +0000"
      },
      "message": "Merge \"Recognize IPv6 addresses for \"adb connect\".\""
    },
    {
      "commit": "09ccf1fa62cef5ce1f3766683df29b8467444a79",
      "tree": "2be312cbca0b49375c67d451a2648042d3efa370",
      "parents": [
        "e91631558898a0b8f7a3ea2b74b7726d78c2f227"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Jul 18 12:21:30 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 15:25:14 2015 -0700"
      },
      "message": "Recognize IPv6 addresses for \"adb connect\".\n\nBug: http://b/22559299\nChange-Id: I32891d706b5010c38db84a056e76dd279b780f75\n"
    },
    {
      "commit": "5c761bdf94bcdaf3a619cde002ef60c9b226f5c3",
      "tree": "62e95a1ffffde3814c2818c52b2d9404856b57ae",
      "parents": [
        "bba4d471283190dd9b153b7e13efdb28da0b6695"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Jul 21 02:06:26 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Jul 21 02:06:26 2015 -0700"
      },
      "message": "adb: logging: newlines, thread ids, error code overwriting\n\nAdd missing \\n to uses of legacy D() macro. This should make the legacy\nlogging easier to read (and harder to miss important stuff).\n\nOn POSIX, use gettid() from libcutils instead of pthread_self() so that\nthe output shows a more reasonable number instead of a pointer value.\nThis should be ok since libbase\u0027s logging already uses gettid().\n\nWin32:\n\nDon\u0027t let the Win32 last error get overwritten by API calls after the\noriginal error\u0027ing API. When encountering an unknown error, log the\nspecific error code.\n\nChange-Id: Ib8f72754efa7ba895d2f1cd914251fec2a1d894c\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "24f5276345d7f1b6cba973ed728179d7df0b8f22",
      "tree": "0b0aef126945f6a606906468a096d9826daab531",
      "parents": [
        "d7eb85491f7f2347a21fad16300f7f3c653f108b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 23 13:00:32 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 24 10:36:41 2015 -0700"
      },
      "message": "Improve the \"device \u0027(null)\u0027 not found\" error.\n\nNow we\u0027ll say \"no devices found\" if you haven\u0027t set ANDROID_SERIAL and\nthere\u0027s no device connected to default to.\n\nAlso clean up the relevant code a little.\n\nChange-Id: Id254929629ce0888628d5ba8e67cd996ffbf9c8a\n"
    },
    {
      "commit": "3a2421b940e844e6c29da9ec389da42dc87f90f2",
      "tree": "331a2e72aa1ce7167daba893914f0ffc386b1b2f",
      "parents": [
        "b1d05de8a377b369b424d0e6c79f1843581bc1e9"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri May 22 20:09:06 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri May 22 20:20:49 2015 -0700"
      },
      "message": "adb: fix adb_close() vs. unix_close() usage\n\nDocument the differences between adb_*() and unix_*() in the function\nprototypes in sysdeps.h. See the file for the details (CR/LF\ntranslation, well-known file descriptors, etc.).\n\nFix adb_read(), adb_write(), and adb_close() calls that should really be\nunix_read(), unix_write(), and unix_close(). Note that this should have\nno impact on unix because on unix, unix_read/unix_write/unix_close are\nmacros that map to adb_read/adb_write/adb_close.\n\nImprove sysdeps_win32.cpp file descriptor diagnostic logging to output\nthe name of the function that was passed a bad file descriptor.\n\nChange-Id: I0a1d9c28772656c80bcc303ef8b61fccf4cd637c\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "9a50f4ccb8668f15c8d4eaf924fcfd769b1003ff",
      "tree": "797356a734389ac53d6f03132d7fa8af7af42dab",
      "parents": [
        "5bf0f162de66a2f5a189c75fc63aac23d7b2c387"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon May 18 16:43:57 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon May 18 17:10:33 2015 -0700"
      },
      "message": "Make connection states a proper type.\n\nChange-Id: I809f9b327c832b88dd63151bf7dcb012d88e81c4\n"
    },
    {
      "commit": "9c028f9f3e52fb8523a0660ced02b98d103f8b91",
      "tree": "b9bdf8117f7a2848cd0e15035e243b23d39d9a2a",
      "parents": [
        "fb05b379d7b92d789c9740b6f68a4c5c78632942"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri May 15 12:56:23 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri May 15 17:33:05 2015 -0700"
      },
      "message": "Make pty raw in adb shell when non-interactive.\n\nThe main goal here is fixing the line ending translation from \\n to\n\\r\\n, but we probably don\u0027t want any translation to happen.\n\nBug: http://b/19735063\nChange-Id: I1d6d6c6b57cc741b046c2432cd864b344ce1f28a\n"
    },
    {
      "commit": "e6959b787835218ab3a11f852f1d070a8890ed76",
      "tree": "90d1be2f53b6d5a2e38305ba9dbd0c23abfd30af",
      "parents": [
        "9a0602f1367d0f460f0e80329fafc78aad13d804"
      ],
      "author": {
        "name": "Alan Jeon",
        "email": "skyisle@gmail.com",
        "time": "Thu Oct 16 17:05:25 2014 +0900"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon May 11 16:28:04 2015 -0700"
      },
      "message": "adb: Do not share memory between multiple thread\n\nWhen multiple client try to connect to other hosts, it failed because\nmemory corruption. Allocate memory for each thread like other command did.\n\nChange-Id: I79959ce3dbfd11c7553736cd3f5a899815873584\nSigned-off-by: Alan Jeon \u003cskyisle@gmail.com\u003e\n"
    },
    {
      "commit": "f251714ebdf7669c67e79378859a88d4bb049f9d",
      "tree": "eca2dbcec26ca3d35cd24c0bb2ae54d1b9c70675",
      "parents": [
        "3aec2ba9f5297a94b52f479cbf741121e2910152"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:41:21 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:41:21 2015 -0700"
      },
      "message": "Simplify adb_thread_create.\n\nChange-Id: I36d6021ef8fbc23e8bcd4ddbe1dac0eba467cc70\n"
    },
    {
      "commit": "3aec2ba9f5297a94b52f479cbf741121e2910152",
      "tree": "02dc43658386df1391e0d6cf54d42bc53d41a234",
      "parents": [
        "32ce0f86ecc3f4a187de76e7facd4b0d171fe46b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:10:43 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:10:43 2015 -0700"
      },
      "message": "Give enum types CamelCase names for clarity.\n\nChange-Id: I1c89f1cc155ee839f372fb14d972a288183b8bcd\n"
    },
    {
      "commit": "fb59684b188e9dd2649592f5e357fd4996522138",
      "tree": "7849490fabea8d735e4096b9064e680b839012b3",
      "parents": [
        "88b4c85a6f7fbc094f55c9e5322e1e16857006a2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 17:04:38 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 17:36:46 2015 -0700"
      },
      "message": "Add WriteFdFmt and clean up more code.\n\nAlso say *which* device wasn\u0027t found.\n\nBug: http://b/20666660\nChange-Id: I50e234ad89e39ae0a8995083c0b642c61275c5a3\n"
    },
    {
      "commit": "88b4c85a6f7fbc094f55c9e5322e1e16857006a2",
      "tree": "5eae0ad266a6ac7680a12dd088142c1fb953fc7c",
      "parents": [
        "da94581ec4a749f738bebaaa5d0ebcca4017143e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 30 17:32:03 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 15:55:37 2015 -0700"
      },
      "message": "More adb buffer fixes.\n\nThis patch factors out a lot of the basic protocol code: sending OKAY,\nsending FAIL, and sending a length-prefixed string.\n\nADB_TRACE has been non-optional for a long time, so let\u0027s just remove\nthe #ifs.\n\nAlso actually build the device tracker test tool (and remove its duplicate).\n\nBug: http://b/20666660\nChange-Id: I6c7d59f18707bdc62ca69dea45547617f9f31fc6\n"
    },
    {
      "commit": "d0269c99cc87a11189af7fb1c4d859dd95a154ac",
      "tree": "053900e4b7ac066f4f42e9756e0566419b0fff4d",
      "parents": [
        "f56c8f974162c27283f095fe7a66002c447ff75f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 21 19:39:52 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 21 19:43:22 2015 -0700"
      },
      "message": "Add missing null checks after allocations.\n\nBug: http://b/20317729\nChange-Id: I62bb761d48ee59a1f4ddd0cdd0632432305ca2ca\n"
    },
    {
      "commit": "e4b64795e470235ddea428ba4f6f12c09cc33943",
      "tree": "4f9370107d69a4216d88b01f529a9916758b5cd2",
      "parents": [
        "7cf3575179f5374d0a5ba5a0c4cd7b61ad586cf8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 20:11:08 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 20:30:09 2015 -0700"
      },
      "message": "Use escape_arg in \"adb backup\".\n\nThis doesn\u0027t fix the injection vulnerability, but it makes \"adb backup\"\nno worse than the other commands, and lets me fix them all at once.\n\nBug: 20323053\nChange-Id: I39843c065d9d738b6b7943b2ffd660e4a031cc36\n"
    },
    {
      "commit": "7cf3575179f5374d0a5ba5a0c4cd7b61ad586cf8",
      "tree": "25f6d93b2a819d8b91d749b072ee5897440b50ae",
      "parents": [
        "bbb6b9843d5b28c9f515ac7d9cef690d772dcfaa"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 17:03:59 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 17:58:35 2015 -0700"
      },
      "message": "Remove yet more fixed-length buffers (and their overruns).\n\nBug: 20317724\nChange-Id: If137fc96f5f23576ccecd388ac87afefa47337c6\n"
    },
    {
      "commit": "ea62dfefe624687a2f1c847fb8347e3b4f4c19c9",
      "tree": "81b026e781f4cca03efaa16d4ad084c678ab8e7a",
      "parents": [
        "927cd19f21dc729381f37192b010f2a2c87926cd",
        "fe7ff81e12a8f8ca724b36cfa3fd33e8736057df"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 17:31:51 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 17 17:31:51 2015 +0000"
      },
      "message": "Merge \"Remove extern \"C\" barriers to using C++.\""
    },
    {
      "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": "ab88242ece4a44d79acb5dfc8dd52bb418f5c427",
      "tree": "4de96573c4e36b7fb03aa823f762a991d41c8f47",
      "parents": [
        "c084e0c4116d0b001184a69c70d0ef564dc93579"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 16 22:54:44 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 16 22:54:44 2015 -0700"
      },
      "message": "Show $ADB_VENDOR_KEYS if authentication fails.\n\nIncorrectly set $ADB_VENDOR_KEYS is the most likely cause of failed\nadb connections. Make it easier to debug such problems by including\nthe value in use in the error message.\n\nBug: 20165551\nChange-Id: I64c1d98ae6d3fb40eea9e1f0ddcfcf4f2d9d7318\n"
    },
    {
      "commit": "0db676466ba9bbafdd3a02cf790209d157a773f9",
      "tree": "ea6daa371cc34064bdebe47d9f36c2aeb0ec283a",
      "parents": [
        "d501672d9143350d1de5f2419da7d44e12231ef1"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sun Mar 29 11:22:34 2015 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Tue Mar 31 00:19:52 2015 +0000"
      },
      "message": "adb: Add option to reboot into sideload mode in recovery\n\nCurrently it requires manual key press to enter the sideload mode. This\nCL adds \u0027adb reboot sideload\u0027 to reboot the device into sideload mode\ndirectly with text display on. With \u0027adb reboot sideload-auto-reboot\u0027,\nit will reboot after the sideload regardless of the installation result,\nunless interrupted by user.\n\nSince it needs to write to /cache/recovery/command file, \u0027adb root\u0027 is\nrequired before calling \u0027adb reboot sideload\u0027 and the one with\n\u0027-auto-reboot\u0027.\n\nAlso it requires the matching CL in bootable/recovery.\n\nChange-Id: Ib7bd4e216a1efc01e64460659c97c6005bbaec1b\n"
    },
    {
      "commit": "db6fe6428c1ca5f397d3853f2b96c3e3e878b172",
      "tree": "7c788a60093d22977baee6c6625107abf40b66e3",
      "parents": [
        "0e0ce0662e948b9cfb1b42e48f18d3c4643b6c1e"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 15:21:08 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 15:32:33 2015 -0700"
      },
      "message": "File header cleanup.\n\n * sysdeps.h should always be included first.\n * TRACE_TAG needs to be defined before anything is included.\n * Some files were missing copyright headers.\n * Save precious bytes on my SSD by removing useless whitespace.\n\nChange-Id: I88980e6e00b5be1093806cf286740d9e4a033b94\n"
    },
    {
      "commit": "dedf7675675aa77051952f354fbbdb59e3cb513c",
      "tree": "196b522c390f18abcc2b489dc37c4fdca46a1b09",
      "parents": [
        "9afbc0a6a2b4ada31bad655b130d2cc38fed1465"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 16 21:58:32 2015 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 16 20:05:21 2015 -0700"
      },
      "message": "Revert \"Revert \"adb: support /oem partition\"\"\n\nThis reverts commit 0c481d0c743382ea955a80bf32428bbd87fff45e.\n\nThe original build breakage is fixed by (a) building the verity\ncode for eng builds as well as userdebug builds and (b) moving\nthe exported remount service functions into a new header file.\n\nChange-Id: Ice0c4f97d4db38ab7eb333c7a6e56bbd11123f5b\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.\""
    }
  ]
}
