)]}'
{
  "log": [
    {
      "commit": "6dbf579e448b1d25eba03ede5cfcebb5e3c5e080",
      "tree": "e785ec4d592e909ce4794a1cdd790722e36c1b48",
      "parents": [
        "ab9958e27fafbbc11fe5b2a120aad9eed664967d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 13 14:21:00 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Dec 21 11:53:27 2018 -0800"
      },
      "message": "adb: finish switching service creation to string_view.\n\nTest: test_adb.py\nTest: test_device.py\nTest: $ANDROID_HOST_OUT/nativetest64/adb_test/adb_test\nTest: adb shell /data/nativetest64/adbd_test/adbd_test\nChange-Id: If4ea92aee1c0264d946de72483f8d715d96fcfd8\n"
    },
    {
      "commit": "f0c4403a48272d0cbdd614cc6ba140fdbd8aa686",
      "tree": "a8cc32b926843c81f410bc7a1682c37bba672368",
      "parents": [
        "505b9d90ee37240ffc838abae402b358b2960faf"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Dec 12 16:12:28 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Dec 21 01:43:31 2018 -0800"
      },
      "message": "adb: switch unix_open to string_view.\n\nTest: test_adb.py\nTest: test_device.py\nTest: $ANDROID_HOST_OUT/nativetest64/adb_test/adb_test\nTest: adb shell /data/nativetest64/adbd_test/adbd_test\nChange-Id: Ieecc9b1b7f2111f4da45d4bbd1b7703535fe7d4d\n"
    },
    {
      "commit": "e64126b0e3735f94c08f1802f0ef483b17b2e37d",
      "tree": "a90ac1906d678934278fe88afd10902fd943d927",
      "parents": [
        "2b8b5059abd1ffacf7520e952b806bf667c73b21"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 19 13:59:44 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 19 14:04:24 2018 -0700"
      },
      "message": "adb: rationalize fatal/error logging.\n\nLet\u0027s use LOG(FATAL)/PLOG(FATAL) for actual fatal stuff.\n\nAdd a Windows error(3) and move folks who didn\u0027t really mean \"abort\"\nfatal over to it. Also get rid of syntax_error which wasn\u0027t adding a\nlot of value, and most of the places it was adding \"usage: \" didn\u0027t seem\nentirely appropriate anyway.\n\nIn particular, we seemed to have confused fastdeploy.cpp into aborting\nin most user error cases, and none of the reviewers noticed. Clearly\nwe\u0027d all lost track of far too many options.\n\n(I\u0027ve also cleaned up a few random instances of fprintf(3) + exit(2).)\n\nBug: N/A\nTest: manual\nChange-Id: I3e8440848a24e30d928de9eded505916bc324786\n"
    },
    {
      "commit": "04b575d36f8bb8d195edd2c85889c864f6dc5111",
      "tree": "6c63ac76e8b06a50be02d9eebdf6c7f9f3d5a930",
      "parents": [
        "43ea22458e21a58c5e04575d1bbf4dbb5e31f164"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Sep 02 19:19:39 2018 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Sep 02 19:26:25 2018 -0700"
      },
      "message": "adb: win32: fix ReportServerStartupFailure\n\nThe code was passing an fd from adb_open() to android::base::ReadFdToString() which actually\ntakes a C-Runtime fd (on Windows), so it wasn\u0027t working.\n\nThe fix is to use APIs that deal with C-Runtime fds:\n* unix_open()\n* android::base::unique_fd\n* unix_lseek() (added in this change)\n\nI also removed an unnecessary call to GetProcessId() since we already have the process id\nfrom the structure returned by CreateProcess().\n\nTest: adb start-server on Win10 and Ubuntu (with a failing server)\nTest: mma\n\nChange-Id: Id6e2dd5532a02fe5d9caf96aa007a1b3434a0b59\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "1886189c01f857d87f811e6ed15ad23b93ddf67e",
      "tree": "87d5b390b7b087a9497bef6d4affcdf8b20b3afb",
      "parents": [
        "915031009543608c2394fd4b1835d2f00c9783b6"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Aug 29 14:58:02 2018 -0700"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Thu Aug 30 11:28:18 2018 -0700"
      },
      "message": "Convert fastboot to Soong\n\nAlso fix adb\u0027s version number to match.\n\nSee build/soong/README.md for more information.\n\nTest: cd system/core/fastboot; mma\nTest: fastboot --version\nTest: adb --version\nTest: out/host/linux-x86/nativetest/fastboot_test/fastboot_test\nTest: out/host/linux-x86/nativetest64/fastboot_test/fastboot_test\nChange-Id: I65ea39af9183c602e84f3bc0e4a0d066a30fc464\n"
    },
    {
      "commit": "d3067475cbe7dedb38030e743dbf30e29f8a2a8f",
      "tree": "43c67d9b2a29ec5b0d8c37857c440d396442f042",
      "parents": [
        "917fbb4a8b9c1a14797c771bf795a216855e61a3"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 07 14:14:21 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 07 14:24:36 2018 -0700"
      },
      "message": "adb: clean up handle_host_request.\n\nPreviously, we were returning the result of SendOkay/SendFail in a few\nplaces after handling a host request, which is incorrect for two\nreasons. First, the return type of SendOkay/SendFail is bool, and\nhandle_host_request was expected to return 0 on success. Second, we\ndon\u0027t care if the SendOkay fails; if we got to that point, we\u0027re done\nwith the request, regardless of whether we succeeded to report our\nresult. The result of this was a spurious failure result reported after\nthe initial result, which was ignored by the adb client.\n\nTest: manually straced adb server\nTest: python test_adb.py\nTest: python test_device.py\nChange-Id: I7d45ba527e1faccbbae5b15e7a0d1557b0a84858\n"
    },
    {
      "commit": "7d130c49c15c22992efe531e883108f4e9f5896b",
      "tree": "e7b405c8085c8d014dddee2e0b94346bda646797",
      "parents": [
        "028e97e5edc98373a0b9c7216e3b116e005bd463"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 06 18:38:47 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 06 18:50:10 2018 -0700"
      },
      "message": "adb: actually enable fdsan.\n\nadb was using a custom unique_fd closer that didn\u0027t have an\nimplementation for fdsan, which meant that none of our FDs were\nactually tracked. Guard this behind ifdefs so that we only use this\non Windows, and delete our implementation of Pipe in favor of the one\nin libbase while we\u0027re at it. libbase\u0027s implementation always sets\nO_CLOEXEC, so fix up the instance of Pipe that doesn\u0027t expect that.\n\nTest: mma\nTest: adb start-server\nTest: debuggerd `pidof adbd`\nChange-Id: Ic29d641a2f93fb42384b00c51775048c8bcbe152\n"
    },
    {
      "commit": "dd655ec95fb929a5d78ac8d9ac5c3e8a459b92d3",
      "tree": "6c6de31287b65b8945c8bb0a84f01046cfb0f873",
      "parents": [
        "e6dc1f2a8fdcc8bb4e8170e71ab3fe55a2d93524"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jul 30 18:49:03 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jul 31 15:36:55 2018 -0700"
      },
      "message": "adb: move list-forward, kill-forward back into handle_forward_request.\n\nThe daemon-side reverse functions depended on handle_forward_request:\nmove them back instead of duplicating the logic we had in\nhandle_host_request. Accomplish what we originally wanted to do in this\nchange by changing the transport argument of handle_forward_request to a\nstd::function that acquires a transport, either via\nacquire_one_transport or immediately returning a value that we already\nhave.\n\nAs a side effect, fix a bug where we would emit spurious errors for host\nservice requests.\n\nBug: http://b/112009742\nTest: echo \"001chost:connect:127.0.0.1:5555\" | nc localhost 5037\nTest: python test_device.py\nTest: python test_adb.py\nChange-Id: Iccc555575df6dbd7de10382854c4ea2c6f4beeaa\n"
    },
    {
      "commit": "7c3b2620e3916e8b9e7c8f90123742735c1f4300",
      "tree": "c603d8162e3662692e19eb6faf43af91acc3aff1",
      "parents": [
        "4aeeec7b162d076537b5686d837ed4ab2ee4f7e3"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jul 19 17:59:45 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jul 23 14:11:26 2018 -0700"
      },
      "message": "adb: fix forward --list, --remove(-all) with multiple devices.\n\nAlso, fix error reporting when forward fails because we can\u0027t get a\ntransport, because there\u0027s either zero, or more than one transport that\nmatches the request.\n\nBug: http://b/111021517\nBug: http://b/111374366\nChange-Id: Ia4c3bf6215c3ff4e9023ba1af556f5b10463bd6d\nTest: manual\n"
    },
    {
      "commit": "b4edbdf7ebd9fd848aafbd30819eee80cc018573",
      "tree": "8636f73914d82f4274bbf2af1542f1ff0fa875bf",
      "parents": [
        "ce7a284729ae844c77ace2a45376c1a62d09ea1d"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Wed Jul 18 21:18:27 2018 -0700"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Thu Jul 19 09:41:40 2018 -0700"
      },
      "message": "adb: Remove most C-style allocations\n\nThis change gets rid of most malloc/calloc/free calls. The future is\nnow!\n\nBug: None\nTest: test_device.py\nChange-Id: Iccfe3bd4fe45a0319bd9f23b8cbff4c7070c9f4d\n"
    },
    {
      "commit": "86e67188a11db7f8db0a1bab3029c6038492e498",
      "tree": "963877f99160913f617086db5542cf453426814d",
      "parents": [
        "7cd4c4f039f8c2dabf6cf7a0c6ab16cc1fa352ff"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Fri Jul 13 18:15:16 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Fri Jul 13 18:21:00 2018 -0700"
      },
      "message": "[adb] Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: Ia8c4deacafed2f3b7dbc3d4c3c77c6c632e3de81\n"
    },
    {
      "commit": "7ee327d2041348a2fa312891ca7174172bc8d8fd",
      "tree": "2ec38b47244d8ab19cede564b0dd9f9875f476e3",
      "parents": [
        "a3bce0702397774e9ae45e5a031b5b992c3b753f",
        "d09ba31079671d4c63e316895705b7236898815f"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 23 00:01:29 2018 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 23 00:01:29 2018 +0000"
      },
      "message": "Merge changes I465804fd,Ib5a684bb,If5e66570,I8471cc00,I8ba0a70a\n\n* changes:\n  adb: convert fdevent over to unique_fd.\n  adb: move towards using unique_fd.\n  adb: delete FDEVENT_DONTCLOSE.\n  adb: remove fdevent_install, fdevent_remove.\n  adb: fix uninitialized variable in AsyncServiceRef.\n"
    },
    {
      "commit": "810fedbcbdc6303d1327cd7e99225222a07879fe",
      "tree": "236b57a22b25bee53d8eb36c39e636e0a3c60004",
      "parents": [
        "04cd75d8714b9390855cb11fd024b5bb0ea426cc"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 11 12:55:56 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue May 22 14:55:36 2018 -0700"
      },
      "message": "adb: move towards using unique_fd.\n\nBug: http://b/79786774\nTest: treehugger\nChange-Id: Ib5a684bba88e87e1aad9da452dcdd5edd11f18f4\n"
    },
    {
      "commit": "7a7c5cb2af1a3aaad517c6e62f178749637f44bd",
      "tree": "0c5f46815ca6f184cde8b208f747025c83ec7817",
      "parents": [
        "52328b65ea21e72de9e5d846f8d1c6167b080ffa"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 04 16:04:49 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 04 18:05:18 2018 -0700"
      },
      "message": "adb: add authorizing, connecting states to transport.\n\nAdd two states: connecting and authorizing, to disambiguate the offline\nand unauthorized states, respectively.\n\nPreviously, devices would transition as follows:\n\n  offline -\u003e unauthorized -\u003e offline -\u003e online\n  offline -\u003e unauthorized (when actually unauthorized)\n\nWith this patch:\n\n  connecting -\u003e authorizing -\u003e online\n  connecting -\u003e authorizing -\u003e unauthorized (when actually unauthorized)\n\nThis allows test automation and the like to distinguish between offline\ndevices, unauthorized devices, and working devices without having to\ndo retry loops with arbitrary sleeps on their end.\n\nBug: http://b/79257434\nTest: adb_test\nTest: adbd_test\nTest: manually plugging in a device with `while true; do adb shell echo foo; done`\nChange-Id: I036d9b593b51a27a59ac3fc57da966fd52658567\n"
    },
    {
      "commit": "da74b90f02e2b1bcaf82115c47509761505cb0dc",
      "tree": "67d38592091005d3642f391d2800b4836cb0980d",
      "parents": [
        "3ab710e8391fb9307d06c00f511bc7504bf912e2"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Tue Apr 17 14:25:04 2018 -0700"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Thu Apr 26 13:53:35 2018 -0700"
      },
      "message": "adb: Add a way to distinguish between connection failures and successes\n\nThis change adds a callback that is invoked exactly once, either when\nthe connection is fully established (i.e. CNXN packets have been sent\nand received) or the atransport object is deleted before that (because\nthe connection failed).\n\nThis helps in distinguishing between successful and failing connections\nfor TCP. Especially when there is some kind of port\nforwarding/multiplexing in between (like an SSH tunnel or SSLH proxy).\n\nBug: 74411879\nTest: adb connect chromebook:22 (which runs an sslh tunnel to adbd).\n      either succeeds or fails, but not fake-succeeds.\n\nChange-Id: I7e826c6f5d4c30338a03b2d376a857ac5d05672a\n"
    },
    {
      "commit": "491454f7655f4639cebe9f866113520671896efb",
      "tree": "02b39c9890bdfa24ba65d8c89b457aa9582ab6b9",
      "parents": [
        "ebc1c31c1df098e7c24226c065b9992b776c0b0f"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 19 13:06:42 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 19 13:09:18 2018 -0700"
      },
      "message": "adb: don\u0027t error in handle_host_request if we can\u0027t acquire a transport.\n\nHost services are attempted after handle_host_request, which means that\nfailing to find a transport to give to handle_forward_request shouldn\u0027t\nsend an error over to the other end.\n\nBug: http://b/78294734\nTest: `adb track-devices` with multiple devices connected\nChange-Id: I46c89cc1894b51d48fea7d4e629b1d57f73e3fd6\n"
    },
    {
      "commit": "ebc1c31c1df098e7c24226c065b9992b776c0b0f",
      "tree": "97606e03261beb63728febaaac7634d6a98ad6ab",
      "parents": [
        "caeda2c570d1f33beb9c21f3a2fcd1cf62362c8c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 13 12:17:03 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 13 14:25:28 2018 -0700"
      },
      "message": "adb: fix `adb reverse` when adbd has multiple transports.\n\nPlumb the transport that we received the adb reverse request on through\nto reverse_service, instead of trying to get a unique transport on\ndevices that have multiple active transports (e.g. a device with USB\n(even unplugged) connected via TCP).\n\nBug: http://b/37066218\nBug: http://b/71898863\nTest: `echo foo | nc -l 12345 \u0026 adb reverse tcp:12345 tcp:12345; adb shell nc localhost 12345` on a device connected via TCP\nChange-Id: Iae199ae787f2e344126bbcacca8544cfc9844a4c\n"
    },
    {
      "commit": "cd2a5290137e1d55f6f16163ac58f39f28e40b00",
      "tree": "c4150b28fecf93e1d7e05f0f7825127643802305",
      "parents": [
        "83d33f8f516fe1730d940fa850aed0b7120e72a2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 07 16:52:28 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 11 12:54:07 2018 -0700"
      },
      "message": "adb: switch apacket payload to a type that doesn\u0027t initialize its contents.\n\nSwitch from using std::string as the type we use to hold our payload in\napacket to a custom reimplementation that doesn\u0027t zero initialize. This\nimproves bulk transfer throughput in the adb_benchmark microbenchmark\non walleye by ~20%.\n\nTest: adb shell taskset f0 /data/benchmarktest64/adb_benchmark/adb_benchmark\nChange-Id: Ibad797701eb1460c9321b0400c5b167b89b2b4d0\n"
    },
    {
      "commit": "715fe605f6963aa63697a799ad5a4dad02316154",
      "tree": "2dc02366fe6f0018d749ec692c8846417d0159de",
      "parents": [
        "66766f833c4bd9ed4522ee1922b7bb3eaecf7424"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 16 13:24:58 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 05 13:00:28 2018 -0800"
      },
      "message": "adb: convert Connection to a nonblocking interface.\n\nRename the existing Connection to BlockingConnection, add a nonblocking\nConnection, and add an adapter between the two, to enable future work\nto reduce the impedance mismatch from implementing a blocking interface\non top of nonblocking primitives.\n\nWhile we\u0027re here, delete A_SYNC, and remove one layer of pipes when\nsending a packet (replacing it with a condition variable when using\nBlockingConnectionAdapter).\n\nTest: python test_device.py, manually plugging/unplugging devices\nChange-Id: Ieac2bf937471d9d494075575f07e53b589aba20a\n"
    },
    {
      "commit": "66766f833c4bd9ed4522ee1922b7bb3eaecf7424",
      "tree": "2c04e35eb649e80d6790344599833f634ddfaa26",
      "parents": [
        "361148b3a71373900c6141d7980e4a1098f1dd68"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 27 15:49:23 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 05 13:00:08 2018 -0800"
      },
      "message": "adb: use soong version stamping.\n\nBug: http://b/71719137\nTest: adb version\nChange-Id: Ic735814574c83a7c2b8bef213592d494f5ec3860\n"
    },
    {
      "commit": "361148b3a71373900c6141d7980e4a1098f1dd68",
      "tree": "6a21731897b364e31c04fd3895fc656f4b8de2aa",
      "parents": [
        "d64d2ed556b0fd62b79b39bfbfab222796cd3029"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jan 02 12:01:43 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 28 15:29:50 2018 -0800"
      },
      "message": "adb: switch over to Android.bp.\n\nRearrange some files while we\u0027re doing this.\n\nBug: http://b/71721338\nTest: manually ran adb on windows\nChange-Id: Ie47bda82279e4b9521505ad0353bf9ef649fc7d7\n"
    },
    {
      "commit": "50576fd2cd0acc90a19b92db123a4c824150f871",
      "tree": "ecd318da969c20a5ec472341e25ddd13015edc94",
      "parents": [
        "839b932f0c28eab8ff9c1cecd3b55af27baf8439"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 23 14:00:24 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 27 14:50:07 2018 -0800"
      },
      "message": "adb: stop using quick_exit.\n\nWe don\u0027t actually need to use quick_exit to avoid calling static\ndestructors, since we have -Wexit-time-destructors to guarantee we\ndon\u0027t actually have any, and this precludes the use of asan\u0027s exit time\nleak checking, so switch back to atexit/exit.\n\nTest: ASAN_OPTIONS\u003ddetect_leaks\u003d1:leak_check_at_exit\u003d1 adb server nodaemon with a manually inserted leak\nChange-Id: Id8178913f64cb02c820c5073351369a9e4d8c74d\n"
    },
    {
      "commit": "839b932f0c28eab8ff9c1cecd3b55af27baf8439",
      "tree": "a18d3410761bad64815bb238f32917f44c763c96",
      "parents": [
        "bbe85f7a9abcca6f86d286155705589a7ace0141"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 05 18:49:10 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 21 14:30:17 2018 -0800"
      },
      "message": "adb: switch apacket over to a std::string payload.\n\nTest: python test_device.py with walleye/x86_64 emulator\nChange-Id: I0a18941af1cb2279e5019a24ace25741def1202f\n"
    },
    {
      "commit": "a7d9d71e8c66bd19cb908b48b5dac31c9587dd31",
      "tree": "dc72b7032b6e0923b6201273caaf64a5557410f3",
      "parents": [
        "b14756a7754dbb46d6f7d0a7814b0bcc61741e67"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Feb 01 13:17:50 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Feb 06 12:59:06 2018 -0800"
      },
      "message": "adb: switch asocket::enqueue to std::string.\n\nSwitch asocket over to taking a std::string instead of apacket* for\ndata. This allows us to remove asocket specific fields from apacket*.\n\nTest: python test_device.py with x86_64 emulator, walleye\nTest: adb_test on host\nChange-Id: I9d157ff331a75ba49a54fdd4194e3f6cdff722f4\n"
    },
    {
      "commit": "ee7b44d91c809f64cbabc4ced8c05360991c29b2",
      "tree": "0a5df6c2965ef4f0cad9964ee2bb7558f3f9abda",
      "parents": [
        "a8e97dc29cefbd6a2842f87648d8468af4f7f817"
      ],
      "author": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Thu Dec 07 11:40:00 2017 -0800"
      },
      "committer": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Thu Dec 14 14:18:26 2017 -0800"
      },
      "message": "adb: disable checksum on new versions\n\nThe checksum is unnecessary. Improves adb performance by 40% on USB2.\n\nTest: new adb works with new + old adbd, old adb works with new adbd\nbug 67327728\n\nChange-Id: I761d8a5a62deaea9bbb092ea9926b2d6d312f00d\n"
    },
    {
      "commit": "ef704a18ce744e12d8f8a1b388be0667662d08b8",
      "tree": "e0f04b1f6076f66bcc24e02458a3a0d274f76abe",
      "parents": [
        "5414d15da73ec0901aa883609810ccf54af75c6c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jun 07 12:11:19 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Oct 02 14:38:03 2017 -0700"
      },
      "message": "adb: remove SendConnectOnHost.\n\nThis logic appears to be racy, and it shouldn\u0027t actually be needed, if\nour devices follow the USB spec. Use libusb_set_interface_alt_setting\non device initialization as well, to add one more thing that should\nreset the data toggles.\n\nBug: http://b/32952319\nTest: python test_device.py\nChange-Id: I392198af3d72c524b893e5056afa2b4617cea49c\n"
    },
    {
      "commit": "b39e415aa8c6383efdd02ab62bf2c523ebd1878c",
      "tree": "93274b5c26009892d196c6ce6e75ace291801a47",
      "parents": [
        "eaae54eda90389267fba498181e35c53e9135bbd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 16 16:57:01 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 21 14:15:06 2017 -0700"
      },
      "message": "adb: allow selection of a specific transport.\n\nExtend device selection to allow selecting a specific transport via\nmonotonically increasing identifier (visible in devices -l).\n\nThis is useful when using multiple devices (like hikey960...) that\nhave identical bogus serial numbers like 0123456789ABCDEF.\n\nBug: http://b/37043226\nTest: adb -t {1, 2, 9999999} {get-serialno, shell, features}\nChange-Id: I55e5dc5a406a4eeee0012e39b52e8cd232e608a6\n"
    },
    {
      "commit": "cd61ae3a66975b17796326c6b720dd2ef8bb5c65",
      "tree": "f8919098e340b573747371b30e32ae1ef303e11f",
      "parents": [
        "bb0d0245b3868c420284a7e3fda49e0d481d535d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 15 08:35:24 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 20 14:21:41 2017 -0700"
      },
      "message": "Give a clear error message if we can\u0027t start the server.\n\nBug: http://b/35218713\nTest: adb kill-server ; export HOME\u003d/ ; adb devices\nChange-Id: I53cc30213be0eab84e42b09c7b501362d6e44b05\n"
    },
    {
      "commit": "4b640840dcd7f5e0ad04f79a0d019bcdb072fe7b",
      "tree": "6505d79625d91ebf0fd3011970350eabb448bc2c",
      "parents": [
        "d2387da971294fe9bfd09c06376101d6bd719e30"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 31 11:54:56 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 31 12:13:59 2017 -0700"
      },
      "message": "adb: reunregress waiting for device on start-server.\n\nMove the invocation of adb_notify_device_scan_complete to\nthe end of device_connected, where we decrement connecting_devices.\nAlso, create a dedicated thread for handling hotplug events, instead of\nreusing the main thread for this, since the main thread blocks until\ndevice scan is complete.\n\nTest: `adb kill-server; adb devices`\nChange-Id: Ia73b1a57538174282a48ef73ab0a3e58152d6f83\n"
    },
    {
      "commit": "27983bce21ca69b086d135108a40f8ab3d3b408b",
      "tree": "b704b0b1e02a7490f5ef3ca413a8d62f3fb7253d",
      "parents": [
        "087f7a485b4d8c85ed09469ada58219f9051e6f7"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue May 23 14:30:00 2017 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue May 23 14:30:00 2017 -0700"
      },
      "message": "Add host feature for `push --sync` support.\n\nTest: adb host-features | grep push_sync\nBug: None\nChange-Id: Ia7a7e9c3c2e6632a9c954fbad8f64602a21d9757\n"
    },
    {
      "commit": "1959e87cfeb030565b0010ff9843c1db71a80ff5",
      "tree": "fbd30e596d3d1596d3394cf3c16f032087b3c503",
      "parents": [
        "6362714089d9af9a91c7da459cd7e3fd8e98a895"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 10 14:44:20 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 12 17:08:50 2017 -0700"
      },
      "message": "adb: silence noise.\n\nRemove logging statements that don\u0027t provide any benefit.\n\nTest: none\nChange-Id: Ib7c26fbdb019f4d6bbce2b7fb192cb5e6066e53f\n"
    },
    {
      "commit": "61a4c2c69ce5568d36427c9539435db484d46cac",
      "tree": "972c4c55b64be4ca934044172025fd053f900ff8",
      "parents": [
        "0e6090dc2be5d3b66f776f5e74286721933c156b",
        "165460f4ce11562f20787817bf9ff0eddacf787c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 10 18:42:12 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed May 10 18:42:14 2017 +0000"
      },
      "message": "Merge changes I394f5782,I9475f5d0,I59707186\n\n* changes:\n  adb: move all cleanup to a function with defined ordering.\n  adb: make `adb kill-server` wait for the server to die.\n  adb: libusb: replace sleep with timed CV wait.\n"
    },
    {
      "commit": "ee356a7fefa33f46464be50000c262e0177ab6cb",
      "tree": "2fbfad38ae4941260d5af41bd21d625a630d77ac",
      "parents": [
        "1ec15cd6ba17cf6aafb6211b10f8599869f75239"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon May 08 18:37:17 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue May 09 14:31:15 2017 -0700"
      },
      "message": "adb: make `adb kill-server` wait for the server to die.\n\nMake the host:kill service shutdown its socket on process exit, instead\nof immediately. Also, unify the two \u0027kill-server\u0027 implementations and\nhide _adb_connect.\n\nBug: http://b/37104408\nTest: adb kill-server; adb start-server\nChange-Id: I9475f5d084d5fb91d33e393f2fd4e34056613384\n"
    },
    {
      "commit": "cded753432738211395b82288d2e401edb1495ee",
      "tree": "d07baf7e45acbfa5d29fc34bd480f5f9ec213024",
      "parents": [
        "16f6be7e9f04e08364f0db069203dabccc5ced1b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon May 08 11:30:34 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 09 08:21:54 2017 -0700"
      },
      "message": "Show the \"platform tools\" version in adb/fastboot --version.\n\nAnnoyingly folks parse the \"adb --version\" output so we have the\nless-interesting protocol version first. But at least now we\u0027ll\nhave the \"real\" version somewhere...\n\nBug: N/A\nTest: \"adb --version\"/\"fastboot --version\"\nChange-Id: Ia85b561bd8d84c6fd6995923730d36f53b2f800b\n"
    },
    {
      "commit": "1e3bf7368051871e6cbf1430f436201d7b1e895b",
      "tree": "e31cc6a7a30963a7c1c0186668674c7dc3db1446",
      "parents": [
        "a7430f3affc6309ef7270fe4092bea956bfe261d"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed May 03 22:37:10 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu May 04 16:03:12 2017 -0700"
      },
      "message": "adb: wait for devices to come up instead of sleeping for 3s.\n\nReplace a hard-coded 3 second sleep with logic to wait until we\u0027ve\nscanned USB devices once and they\u0027ve all come online.\n\nBefore:\n    adb shell true  0.00s user 0.00s system 0% cpu 3.047 total\n\nAfter:\n    adb shell true  0.00s user 0.00s system 9% cpu 0.041 total\n\nBug: http://b/37869663\nTest: `time adb shell true` after adb kill-server\nChange-Id: I251d42afb885908ed9d03167287594ea16650d3f\n"
    },
    {
      "commit": "56af5828c86658e96d85e2bcba02bdad7a06876e",
      "tree": "84efb4dca434c1b216d8e5c7770a0d7118203430",
      "parents": [
        "65bc227d3e59b78b05f81ee2ed19636b78c52e73",
        "3cf1b36e2f914ce7c6f233e5ff3f1f6614940c80"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 20 19:45:17 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 20 19:45:18 2017 +0000"
      },
      "message": "Merge \"adb: fix two device offline problems.\""
    },
    {
      "commit": "3cf1b36e2f914ce7c6f233e5ff3f1f6614940c80",
      "tree": "b75acfe89e71a396a07c247f5ea44e476ffcf8d4",
      "parents": [
        "3187510b17f7eeeb67286a4a842abd503906bb5c"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Mar 10 16:01:01 2017 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Apr 20 10:14:59 2017 -0700"
      },
      "message": "adb: fix two device offline problems.\n\nWhen device goes offline, user usually has to manually replug the\nusb device. This patch tries to solve two offline situations, all\nbecause when adb on host is killed, the adbd on device is not notified.\n\n1. When adb server is killed while pushing a large file to device,\nthe device is still reading the unfinished large message. So the\ndevice thinks of the CNXN message as part of the previous unfinished\nmessage, so it doesn\u0027t reply and the device is in offline state.\n\nThe solution is to add a write_msg_lock in atransport struct. And it\nkicks the transport only after sending a whole message. By kicking\nall transports before exit, we ensure that we don\u0027t write part of\na message to any device. So next time we start adb server, the device\nshould be waiting for a new message.\n\n2. When adb server is killed while pulling a large file from device,\nthe device is still trying to send the unfinished large message. So\nadb on host usually reads data with EOVERFLOW error. This is because\nadb on host is reading less than one packet sent from device.\n\nThe solution is to use buffered read on host. The max packet size\nof bulk transactions in USB 3.0 is 1024 bytes. By preparing an at least\n1024 bytes buffer when reading, EOVERFLOW no longer occurs. And teach\nadb host to ignore wrong messages.\n\nTo be safe, this patch doesn\u0027t change any logic on device.\n\nBug: http://b/32952319\nTest: run python -m unittest -q test_device.DeviceOfflineTest\nTest: on linux/mac/windows with bullhead, ryu.\nChange-Id: Ib149d30028a62a6f03857b8a95ab5a1d6e9b9c4e\n"
    },
    {
      "commit": "65bc227d3e59b78b05f81ee2ed19636b78c52e73",
      "tree": "934891891ab7676c07a3b159fd95063d021d87b5",
      "parents": [
        "b087d3062c76dc97e19e02d198dba540bb7ad7cb"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 18 14:34:16 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 18 14:51:27 2017 -0700"
      },
      "message": "Fix various adb error reporting bugs.\n\n`adb install` was writing success to stderr rather than stdout.\n\nServer mismatch messages were going to stdout rather than stderr.\n\nError messages should consistently start with a lower case letter.\n\nAlso improve consistency of syntax error reporting.\n\nBug: https://issuetracker.google.com/37128706 (adb install success to stdout)\nBug: https://issuetracker.google.com/37140458 (server mismatch on stderr)\nBug: http://b/32413861 (consistency)\nTest: ran tests\nChange-Id: I0d6cb0c7482bec03483dacefd996644b7a28d273\n"
    },
    {
      "commit": "4e97fd6d92b71e5f2d43d12b8f030d8d4cdff464",
      "tree": "aeefbcafdba5e88377580d54c4f61f0db57de014",
      "parents": [
        "a0e185b07f7d70d1f3a7b4920e6839cda776c1f3"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 30 15:08:28 2017 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 30 15:10:24 2017 -0700"
      },
      "message": "Show install path in \"adb --version\" and \"fastboot --version\".\n\nBug: http://b/36766455\nBug: http://b/34691048\nTest: ran tests\nChange-Id: I4b67ec54d41a281fe7a33c017d3cfbc8055e3b43\n"
    },
    {
      "commit": "210b63fe6724a6070565802616e69e1c7c38ffed",
      "tree": "5f7f620de4c51f1f530aec77b34b3892b101324c",
      "parents": [
        "7cebaefe30831d61e424c5af315d2abb2207dffa"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 22 17:07:01 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 22 18:19:21 2017 -0800"
      },
      "message": "adb: add `adb host-features`, report libusb status.\n\nAdd a \u0027host-features\u0027 command to get the features of the currently\nrunning host adb server. Abuse it to report libusb status.\n\nBug: http://b/34983123\nTest: adb host-features; adb kill-server; ADB_LIBUSB\u003d1 adb start-server; adb host-features\nChange-Id: I0e8d503a2dbdff9002ebb6ce8a298498a9421422\n"
    },
    {
      "commit": "b736692b2c6a8345a86863e08d6561a981816ff5",
      "tree": "43d1639db44696dd41cf6c1b70c709f5054e6ac9",
      "parents": [
        "617fd83b380e4eeaa5fae94355a16e1f5c886c7e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Sep 28 12:32:45 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 25 13:52:53 2017 -0800"
      },
      "message": "adb: add libusb implementation for Linux/Darwin.\n\nAdd a libusb-based implementation alongside the existing native\nimplementations, controlled by the ADB_LIBUSB environment variable.\n\nWindows will need more work for the usb driver.\n\nBug: http://b/31321337\nTest: python test_device.py on linux/darwin, with ADB_LIBUSB\u003d0 and 1\nChange-Id: Ib68fb2c6c05475eae3ff4cc19f55802a6f489bb7\n"
    },
    {
      "commit": "73925985f72b9b6dde4e692732dcc35958ca4ec8",
      "tree": "8bd909f062f7b3014c06c0cc64cebe01c71a1348",
      "parents": [
        "8833f14f22be9dac7f4052f840947f9908b37e7c"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Nov 15 12:37:32 2016 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 16 09:12:12 2016 -0800"
      },
      "message": "Switch adb over to \u003cchrono\u003e.\n\nClearer code, and lets us lose some more portability cruft.\n\nBug: http://b/32878766\nTest: manual\nChange-Id: Ie44928bbf8d68a74127aaf76e7e0060e25fa2cc8\n"
    },
    {
      "commit": "4e56250f5ff70c2f48c43440b2d493e1f3863af9",
      "tree": "2931ef88240b5514005e95acb2b4eca0455c5bff",
      "parents": [
        "87eca0517baf580d101483ec76a24d82ebeb1cc6"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 27 14:01:08 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 27 17:13:23 2016 -0700"
      },
      "message": "adb: add `adb reconnect offline` to reconnect offline devices.\n\nAdd a command to reconnect offline/unauthorized devices, mainly for use\nwith the inotify-monitoring of vendor key directories added by 22cb70bd.\n\nBug: http://b/29273531\nTest: manually tested with a sailfish + copying vendor keys\nChange-Id: If34cccee4ae553ada65d128b57d03cba8c0d7c46\n"
    },
    {
      "commit": "67ac379f0125c91c14e6ac9ab389d1f791d02945",
      "tree": "45b68a3848150ccc5abaccb12672f94e8f0fa5a4",
      "parents": [
        "b4e8ba2768d060465ad4fe9f0d39c809b08b93d7"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 06 13:31:44 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 06 14:50:02 2016 -0700"
      },
      "message": "adb: rationalize types.\n\nUse fixed length types for structs going over the wire, constify\narguments where possible, use char* instead of unsigned char* for\napacket data, and assorted other refactoring.\n\nBug: http://b/29273531\nTest: python test_device.py with every combination of old/new adb and adbd\nChange-Id: I0b6f818a32be5386985aa4519f542003cf427f9d\n"
    },
    {
      "commit": "eac2058cad3b4937cea26396b1f38fa468433345",
      "tree": "b87d751fc043320f6e8dbe17cb685b8d619e52f2",
      "parents": [
        "f6b4996674fde5b88e3f3fe98b907a0bb2e328a5"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Oct 05 19:02:29 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Oct 06 12:36:26 2016 -0700"
      },
      "message": "adb: split up adb_auth.cpp.\n\nAll of the functions in adb_auth.cpp were used in only one of\nadb/adbd. Split up them up into adb_auth_host.cpp and adbd_auth.cpp\nrespectively.\n\nBug: http://b/29273531\nTest: built and flashed bullhead, adb still works\nChange-Id: Ib610c5157522634cc273511175152f1306cc52a7\n"
    },
    {
      "commit": "8b249d2e6ab2c1491a2c4eeac2ddb134976f2e5b",
      "tree": "11265608dc07293bb0306ff809aaf34aa0850d62",
      "parents": [
        "eeae2e55a85b7f07c30a289d2deba084004b3b04"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 23 15:40:03 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 26 13:14:14 2016 -0700"
      },
      "message": "Switch adb to \u003candroid-base/properties.h\u003e.\n\nBug: http://b/23102347\nTest: manual\nChange-Id: Iffa66258c01f84f41b9af99ab5e768a0a2669106\n"
    },
    {
      "commit": "bb4f860aeee90afae40e06288202e89217640a40",
      "tree": "f404757aabc0b725ab1cfbdcc9957b58b8c5280f",
      "parents": [
        "ea7457b76d45543d27c5019da925098cd956e8f3"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Aug 25 16:00:22 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 01 15:49:06 2016 -0700"
      },
      "message": "adb: allow use of arbitrary socket specs for command socket.\n\nBug: http://b/30445394\nChange-Id: I474ede35ec3c56ad86da503c9703f83ef5e80862\n"
    },
    {
      "commit": "827a4a575d5a880f68d2647f9d4a581aca0341fc",
      "tree": "0cbf7c2a09a832c1a2d5d8fa21fced7320cf6d5e",
      "parents": [
        "7789c831239c273eadee0354716905267fb4b531"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 31 15:07:18 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Sep 01 09:24:24 2016 -0700"
      },
      "message": "Add android::base::GetExecutablePath, switch adb and fastboot over.\n\nWe\u0027d long had two copies of this stuff, so rather than rewrite both\nLinux versions to use android::base::Readlink, let\u0027s kill the duplication\ntoo...\n\nBug: http://b/30988271\nChange-Id: I4de58a94a22a4b1faf969a6fc70ca1560a4d5121\n"
    },
    {
      "commit": "77f084b70f25a195912ca80b27635e2c00502fe0",
      "tree": "b560c83aa02643fc4f75ec74efb7f5d67fb25feb",
      "parents": [
        "3db34bb37b4f7851e14367187447841d9ffbc9e2"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 22 13:12:32 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 22 13:12:32 2016 -0700"
      },
      "message": "adb: increase the authentication throttling limit.\n\nPreviously, after 10 failed authentications, we\u0027d sleep for a second,\nand we\u0027re up to 11 vendor keys in internal now...\n\nBug: http://b/30927527\nChange-Id: I094e830521f6a2768a880c6684f32ff1ce2a3c2e\n"
    },
    {
      "commit": "801066a2b8dc1545cba6b6e16218b2f1a806e93d",
      "tree": "8e34de3e43363904ffe0f4b7a9dd8ff761a3c803",
      "parents": [
        "8ac4599bd63e30677e393281ebd360aa4110a915"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 29 17:42:01 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 11 13:53:18 2016 -0700"
      },
      "message": "Clean up key handling in adb.\n\nThis includes the locking we need to be able to re-load the keys at runtime.\n\nWe should rename \"adb_auth_client.cpp\" to \"adb_auth_adbd.cpp\" or\n\"adbd_auth.cpp\" in a later change.\n\nChange-Id: I9e1d5b6b7d0497d6f6e5d9c4fb660118cdff05a8\nTest: \"adb devices\" works against a non-AOSP device with $ADB_VENDOR_KEYS set, says \"unauthorized\" without.\nBug: http://b/29273531\n"
    },
    {
      "commit": "a937d1693f3542d76c38135056515b950888fe39",
      "tree": "8de98e901ce92d48c8b457c3173730d6886a3e7b",
      "parents": [
        "6514da341de9bf1bbeb928c6fd60df212ef6caa0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 28 14:48:45 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 28 14:48:45 2016 -0700"
      },
      "message": "Remove unnecessary ARRAY_SIZE macros.\n\nUse the canonical one instead.\n\nChange-Id: Id80f19455f37fd2a29d9ec4191c1a0af80c5c0e7\n"
    },
    {
      "commit": "c3d1c11b7660eb1dd5efeb2d30e6763997cf467e",
      "tree": "188855d5ad62b188f29e0d5d7dc3786a2216c79b",
      "parents": [
        "8d04c20ccacf99366f66de8003397d9dcd6a46bd"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 15 14:46:56 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 15 14:46:56 2016 -0700"
      },
      "message": "Minor adb style fixes.\n\nChange-Id: Ic4b45828dfdf88ef6c0fc468f66df3e62d2fbe51\n"
    },
    {
      "commit": "57cb217bb55a59c7507b2ac3e9b9093cbd4aedd3",
      "tree": "61e9b9b78900ecd300e22eed6f66f68d874e71f8",
      "parents": [
        "39d01bb09cabc358700bb8296c94b7a7a0d282f5"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri May 13 18:16:43 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Sat May 14 18:52:46 2016 -0700"
      },
      "message": "adb: replace failing exits in adbd with abort().\n\nThis makes it possible to get a core dump from adbd when it decides to\nexit.\n\nBug: http://b/28347842\nChange-Id: I4cfe5f273f62b2c32e61232d3c39881ecdd6b582\n"
    },
    {
      "commit": "19d0c23a5a8730cf30baeaed51ba9d2c8890cb60",
      "tree": "721bbf170deaba71d54149bfb7be3382207156f0",
      "parents": [
        "e29499c30c394708de7543c558c2fa3567d0dc23"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Apr 07 11:25:48 2016 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon May 09 16:55:10 2016 -0700"
      },
      "message": "adb: support forwarding TCP port 0.\n\nThis CL adds support to forward or reverse TCP port 0 to allow the\nsystem to automatically select an open port. The resolved port number\nwill be printed to stdout:\n  $ adb forward tcp:0 tcp:8000\n  12345\n  $ adb reverse tcp:0 tcp:9000\n  23456\nThis allows testing to be more robust by not hardcoding TCP ports which\nmay already be in use.\n\nForwarding port 0 is a host-only change and will work with any device,\nbut reversing port 0 requires the device to be updated with a new adbd\nbinary.\n\nThis CL also does a little bit of cleanup such as moving the alistener\nclass out of adb.h, and adds some error checking and additional tests.\n\nBug: 28051746\nTest: python -m unittest discover\nTest: adb_test\nTest: `adb forward` and `adb reverse` with tcp:0\nChange-Id: Icaa87346685b403ab5da7f0e6aa186aa091da572\n"
    },
    {
      "commit": "54ee6d12e6a56ccf0c083a7e77454e2bc40eaed2",
      "tree": "bc5248f05580a675443acb964ec3b9287113d2ec",
      "parents": [
        "c6e3b12e2b86cf95c7f5b8c1fac3d47a73418508",
        "d78ed22449f2401e6b825d7b6418dcb05b5e7565"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Sat Apr 16 01:50:54 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 16 01:50:54 2016 +0000"
      },
      "message": "Merge \"adb: add reconnect command.\""
    },
    {
      "commit": "a947b49de093bb36b77e5afb5485d413f8f78a7a",
      "tree": "ab4a7b5f0ea1d021170b2d357b3035d8f0d65546",
      "parents": [
        "43d4313260a2004fc54831e24fd99dc9183dc97f"
      ],
      "author": {
        "name": "Mattias Nissler",
        "email": "mnissler@google.com",
        "time": "Thu Mar 31 16:32:09 2016 +0200"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 12 23:04:11 2016 +0000"
      },
      "message": "Switch fs_mgr and adb to libcrypto_utils.\n\nUpdate code and dependencies to use BoringSSL + libcrypto_utils\ninstead of mincrypt.\n\nChange-Id: Ic75164bd50c84b81b6310e27a67d4b3c174984f9\n"
    },
    {
      "commit": "d78ed22449f2401e6b825d7b6418dcb05b5e7565",
      "tree": "bbb4c98301eb640a08f74660d9c4e0db54717339",
      "parents": [
        "a6c02429549f2e83e6fe569f5d672959a4afa66b"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Apr 05 13:50:44 2016 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Apr 05 15:21:36 2016 -0700"
      },
      "message": "adb: add reconnect command.\n\nAdd reconnect command for debugging. `reconnect` kicks a transport\nfrom the host side, `reconnect device` kicks a transport from\nthe device side. They can be used to produce transport errors.\n\nBug: 25935458\n\nChange-Id: I47daa338796b561941e7aba44a51a6dd117d1e98\n"
    },
    {
      "commit": "cf91dbed54c43919d14f8724a86d228797017901",
      "tree": "1bc1497b5029181c46377373558ca2b73273be7d",
      "parents": [
        "e5a35ebe068288567174a0db7925c5fc0486a47f"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Feb 08 22:36:42 2016 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Feb 09 16:15:56 2016 -0800"
      },
      "message": "adb: setsid() for adb host server.\n\nTo create a daemon for adb host server, we should call setsid()\nfor the daemon process. However, previously we call setsid() for\nthe adb client process, which results in nothing but EPERM error.\n\nBug: 26982628\nChange-Id: I2763ae3d5a243706927d7ef6af5095138c0ce2d8\n"
    },
    {
      "commit": "582167882af3bc07acdac92e7710537e2a943b19",
      "tree": "0bb5ae51b8dcda9aa5e5d4788a61a50aae05dcb1",
      "parents": [
        "289b74c5c754fe52b1248ebd8508b597b7946481"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sat Nov 21 17:23:51 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Feb 03 16:24:37 2016 -0800"
      },
      "message": "adb: win32: fix start-server to properly display UTF-8 on the console\n\nfwrite() is a macro that maps to adb_fwrite(), which can write UTF-8 to\nthe console. Use it to write the output that comes from the subprocess\nadb server.\n\nTo do this, dup the stdout/stderr file descriptor and make a duplicate\nFILE* stream, in binary mode (since we\u0027re reading raw bytes from the\nsubprocess), and unbuffered.\n\nChange-Id: I480761bae0bd576dc9e03fa4d31266f4e49635ed\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "c573d52b3a78b52e0108d70d3ca378d7c9b3171d",
      "tree": "2918565142088cc520485d368a1c448258e5912b",
      "parents": [
        "ea71e279bd63c510bcf10822fdd2a4689ca82a8d"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Jan 27 08:52:53 2016 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Feb 01 12:18:26 2016 -0800"
      },
      "message": "base: add SystemErrorCodeToString() function.\n\nPulls the Windows error string generation out of adb into libbase so\nthat it can be used by fastboot as well. Also makes a Unix equivalent\nthat just wraps strerror() so that upcoming fastboot error reporting\ncode can be platform-independent.\n\nThe intent here is just to provide a portable way to report an error to\nthe user. More general cross-platform error handling is out of scope.\n\nBug: http://b/26236380\nChange-Id: I5a784a844775949562d069bb41dcb0ebd13a32bc\n"
    },
    {
      "commit": "a17d272002eab3355be435dbe2c1722162556fe9",
      "tree": "c78ea82996f0ea56f95e07ade9e696ed65c276fc",
      "parents": [
        "128452bdd7eac825796023d8c44a41d4fd8053e2"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Jan 21 08:40:59 2016 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Jan 21 20:03:33 2016 -0800"
      },
      "message": "base: add network address parsing function from adb.\n\nThis CL moves the network address parsing function from adb to libbase\nso that it can be used by fastboot as well as adb.\n\nlibbase seemed like the right choice because:\n  1. It already has some parsing functions (parseint)\n  2. The net address parsing function uses the libbase string\n     functions so we have a libbase dependency anyway.\n\nThe parsing function has been modified slightly to make the canonical\naddress optional, and debug logging on success has been removed.\n\nFor adb the only functional difference is that parsing a network\naddress will no longer print the result to the debug log, which seemed\nunnecessary.\n\nBug: http://b/26236380\nChange-Id: Ife6df02937225fc66de87884d3572d79c092c522\n"
    },
    {
      "commit": "9055a581ec48568f9e0366ea44ada7dffb83b586",
      "tree": "acbf699dd62cbb24820a1cb5a8d2cf01698f1e6d",
      "parents": [
        "ce50ecf7ed01da1575454c6fc10f64a711019e39"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jan 15 14:35:54 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jan 15 15:02:19 2016 -0800"
      },
      "message": "Increase the maximum shell command length to 4096ish.\n\nThe actual maximum length will depend on the version of the shell\nprotocol being used, and any additional parameters being passed through\n(e.g. TERM\u003dxterm-256color). This should be able to be raised to 64K for\ndevices with commit a1c60c0 (L-MR1 and above), but that\u0027ll require some\nplumbing.\n\nBug: http://b/20467103\nChange-Id: Idf0c46af5b18b854110aba58df13a53297d2475f\n"
    },
    {
      "commit": "f55ead962f2257312af08fe730ef9d3f3d988e76",
      "tree": "75488c67fc418f771691c0aa9caa88346126ed75",
      "parents": [
        "b13dd00d883d02dfef1a403caa63501ddca50a09"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "message": "Track rename of base/ to android-base/.\n\nChange-Id: Idf9444fece4aa89c93e15640de59a91f6e758ccf\n"
    },
    {
      "commit": "cc4a4b129a58d85a7afb97aff33e1ae03d18b5a2",
      "tree": "7bc45c12597050d853a123761bf930bb2849c73e",
      "parents": [
        "f5cdc1d6173f1ebb1ad0a8079e098a5c9720dac4"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Oct 14 17:32:44 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Oct 30 16:23:10 2015 -0700"
      },
      "message": "adb: fix adb client running out of sockets on Windows\n\nBackground\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nOn Windows, if you run \"adb shell exit\" in a loop in two windows,\neventually the adb client will be unable to connect to the adb server. I\nthink connect() is returning WSAEADDRINUSE: \"Only one usage of each\nsocket address (protocol/network address/port) is normally permitted.\n(10048)\". The Windows System Event Log may also show Event 4227, Tcpip.\nNetstat output is filled with:\n\n  # for the adb server\n  TCP    127.0.0.1:5037         127.0.0.1:65523        TIME_WAIT\n  # for the adb client\n  TCP    127.0.0.1:65523        127.0.0.1:5037         TIME_WAIT\n\nThe error probably means that the client is running out of free\naddress:port pairs.\n\nThe first netstat line is unavoidable, but the second line exists\nbecause the adb client is not waiting for orderly/graceful shutdown of\nthe socket, and that is apparently required on Windows to get rid of the\nsecond line. For more info, see\nhttps://github.com/CompareAndSwap/SocketCloseTest .\n\nThis is exacerbated by the fact that \"adb shell exit\" makes 4 socket\nconnections to the adb server: 1) host:version, 2) host:features, 3)\nhost:version (again), 4) shell:exit. Also exacerbating is the fact that\nthe adb protocol is length-prefixed so the client typically does not\nhave to \u0027read() until zero\u0027 which effectively waits for orderly/graceful\nshutdown.\n\nThe Fix\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\nIntroduce a function, ReadOrderlyShutdown(), that should be called in\nthe adb client to wait for the server to close its socket, before\nclosing the client socket.\n\nI reviewed all code where the adb client makes a connection to the adb\nserver and added ReadOrderlyShutdown() when it made sense. I wasn\u0027t able\nto add it to the following:\n\n* interactive_shell: this doesn\u0027t matter because this is interactive and\n  thus can\u0027t be run fast enough to use up ports.\n* adb sideload: I couldn\u0027t get enough test coverage and I don\u0027t think\n  this is being called frequently enough to be a problem.\n* send_shell_command, backup, adb_connect_command, adb shell, adb\n  exec-out, install_multiple_app, adb_send_emulator_command: These\n  already wait for server socket shutdown since they already call\n  recv() until zero.\n* restore, adb exec-in: protocol design can\u0027t have the server close\n  first.\n* adb start-server: no fd is actually returned\n* create_local_service_socket, local_connect_arbitrary_ports,\n  connect_device: probably called rarely enough not to be a problem.\n\nAlso in this change\n\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\n\n* Clarify comments in when adb_shutdown() is called before exit().\n* add some missing adb_close() in adb sideload.\n* Fixup error handling and comments in adb_send_emulator_command().\n* Make SyncConnection::SendQuit return a success boolean.\n* Add unittest for adb emu kill command. This gets code coverage over\n  this very careful piece of code.\n\nChange-Id: Iad0b1336f5b74186af2cd35f7ea827d0fa77a17c\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "8595283cec8608cd7bc383e6ffe5203772975d94",
      "tree": "f83372d69a901031b44d501dfa5d1b57cb6e8eea",
      "parents": [
        "17b5d9cb74fcd240bac793eec7b7ee860d3188b0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 15:59:35 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 16:11:17 2015 -0700"
      },
      "message": "Use const auto\u0026/auto\u0026\u0026 in adb.\n\nChange-Id: I74a7e511302e15e207906f572d181634e0ed5604\n"
    },
    {
      "commit": "67943d11b76d7693d817eb5898736c38abd7a44a",
      "tree": "47bb24231f7277f45afa1b3c98a773b0e982a94d",
      "parents": [
        "de01c94f969f6c59926bc7ace48c3ed0a707a670"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 14:55:10 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 15:35:18 2015 -0700"
      },
      "message": "Fix adb -d/-e error reporting.\n\nIf -d/-e fail, get-serialno and friends will now report an error\nand return a failure status code on exit.\n\nAlso fix the behavior of -d/-e with $ANDROID_SERIAL --- -d/-e\nshould override $ANDROID_SERIAL, not the other way round.\n\nI\u0027m deleting my own comment here about always returning \"unknown\"\nfor scripts. I can\u0027t find any evidence that there are scripts\nrelying on that, so I think my comment meant \"I fear that there\nare scripts doing so\".\n\nBug: http://b/24403699\nChange-Id: Ie13a751f1137abcfe0cc6c46a0630ba5e02db676\n"
    },
    {
      "commit": "ec2e7d8ef5bf6ff66aa882ce586c62bec090cb07",
      "tree": "492d6ba3cd380cb177b15dce89fca31f61cbc579",
      "parents": [
        "5f32b962de5830768db9fafeb561960bf60440b9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 29 12:25:33 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 30 15:03:26 2015 -0700"
      },
      "message": "adb: detect sockets in CLOSE_WAIT state to prevent socket leak on linux.\n\nIt is possible that the adb server on host has many sockets in\nCLOSE_WAIT state. To prevent socket leak, always enable POLLRDHUP\nin fdevent.cpp to detect sockets in CLOSE_WAIT state.\n\nUpdate LocalSocketTest unit tests:\nChange half_close_with_packet to read_from_closing_socket, as reading\nfrom a SHUT_WR socket is not needed in adb.\nChange close_with_no_events_installed to close_socket_in_CLOSE_WAIT_state,\nas the latter is more close to the real situation in use.\n\nBug: 23314034\n\nChange-Id: Ice4f4036624e5584eab6ba5848e7f169c92f037f\n"
    },
    {
      "commit": "3d9072bfe6e85b479575bd9600c6b5c04e5499c9",
      "tree": "a6083574db28238bf6bd6502308ac1e5dc570eee",
      "parents": [
        "19bec5b329fe202795688bfb76d77f4560adf2c6"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 25 13:04:21 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 25 13:10:17 2015 -0700"
      },
      "message": "adb: fix adbd feature parsing for no features.\n\nPreviously the transport features list was only overwritten if a\nnew feature list was found. However, adbd can reuse the same atransport\nobject even if the adb server is killed and restarted, so the feature\nlist was not cleared properly if the newly started adb server didn\u0027t\nprovide one.\n\nThis CL fixes the bug by clearing the transport features list whenever\na connection banner is parsed.\n\nBug: http://b/24405971\nChange-Id: Ia6ee6c9a46a621534681f6d4d7df77156b885eb9\n"
    },
    {
      "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": "18d2a864a30caf9393968105522aebf4affd50bb",
      "tree": "6ff407840b92e3ed068611779c21b21c83a1d77d",
      "parents": [
        "b77fc72a5fd45b78c161d324b05895207bfee83c",
        "2ce9d5611924f64fa7dadace825d2805373aba64"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Sep 17 02:32:12 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 17 02:32:12 2015 +0000"
      },
      "message": "Merge \"Add unit tests for local socket.\""
    },
    {
      "commit": "b77fc72a5fd45b78c161d324b05895207bfee83c",
      "tree": "b6feba1ffae67695187f0533388c187ee6fdf78a",
      "parents": [
        "4d4961f418cec8639a90ed23ada89f84eff5c6ec"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Sep 16 16:40:06 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Sep 16 16:40:06 2015 -0700"
      },
      "message": "adb: win32: fix regression on older versions of Windows\n\nOn Windows 7, GetStdHandle() may return console pseudo-handles. If you\ncall SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0) on such a handle,\nit will fail. These failures should be ignored like the old code.\n\nNewer versions of Windows return real handles that don\u0027t have this\nissue. Console pseudo-handles can apparently be identified by the values\n3, 7, 11.\n\nThis is a regression from 2bbb3a9fa2fa2b331e04b2c296ed9a10c0b55669.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d186599\n\nChange-Id: I287a74a81d37e0ebe62d673a3f5651ee5439c0d2\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "2ce9d5611924f64fa7dadace825d2805373aba64",
      "tree": "78c34b929c2959c5471dc504423ca244d1b764c5",
      "parents": [
        "4d4961f418cec8639a90ed23ada89f84eff5c6ec"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 15 16:27:09 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 16 15:00:59 2015 -0700"
      },
      "message": "Add unit tests for local socket.\n\nAdd has_write_error flag in asocket, so it will not wait on local_socket_closing_list\nto write pending packets in local_socket_close(). Although it doesn\u0027t fix any problem,\nit helps to make the code more stable.\nAdd a missing put_apacket() in error handling.\nAdd a check when adding local socket in local_socket_closing_list.\n\nBug: 23314034\n\nChange-Id: I75b07ba8ee59b7f277fba2fb919db63065b291be\n"
    },
    {
      "commit": "56112549d23be0b6857be9fcc6c50c616f783152",
      "tree": "7ec2a8d4a09a25b9bf241604cee1b1f14a01d578",
      "parents": [
        "8e31ae230b52ec37b6998b93988d3d2595ae50b4"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Sep 04 16:19:56 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 15 10:12:31 2015 -0700"
      },
      "message": "adb: move adb to poll.\n\nIt is reported that the registered fd can be bigger than FD_SETSIZE, and can\u0027t be\nhandled by select(). By moving to poll(), we can remove the limitation.\nAlthough we can\u0027t ignore the possibility that there is a fd leak, but we can\nstill make the potential bug more explicit by moving to poll().\nWe didn\u0027t move to epoll() because it is not supported on mac.\n\nBug: 23820751\n\nChange-Id: Icb39329c4984f1fef749472c9e088682ee8c3444\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": "0daf6e4c97d6c6cb2241b2aefc204544c5611b3b",
      "tree": "b30affecc7f3996c8259cd25a1f3357cac737c4c",
      "parents": [
        "98d7ea3dc7b5d15f6350abb4d2c34108fc7bfb55",
        "2e9f0327cd3b7cdc52788653e7b0a216e20b2616"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Sat Sep 05 00:01:27 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Sep 05 00:01:27 2015 +0000"
      },
      "message": "Merge \"adb: `features` passes transport features.\""
    },
    {
      "commit": "2e9f0327cd3b7cdc52788653e7b0a216e20b2616",
      "tree": "8ec740f0850696524f29e4a854525649a33711cd",
      "parents": [
        "c5d51620cf959101a335f659998ee1b3141aa2d7"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 16:40:30 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 16:47:21 2015 -0700"
      },
      "message": "adb: `features` passes transport features.\n\n`adb features` previously returned a list of host features which was\nnot terribly useful. This CL changes functionality to return the\ntransport features instead using the standard targeting args:\n  $ adb features  # default target.\n  $ adb -e features\n  $ adb -s 123456 features\n\nAlso adds a \"check-feature\" service which is currently unused but will\nallow the adb client to easily check for a specific feature.\n\nBug: http://b/23824036\nChange-Id: Ibc0c420c75f73d363f3bba7705af616ba2059348\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": "2d4c198cb4f1227e0352df1201aa626909e44aa8",
      "tree": "d87171479bbf4f2ed1aa0e738ed9fdb54b89e66e",
      "parents": [
        "81aa502a8d5adb680b565068d7a87e04817b376c"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Aug 28 15:09:44 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Aug 28 16:36:00 2015 -0700"
      },
      "message": "adb: clean up transport disconnect operations.\n\nMove operations from global functions into member functions.\nAdd unit test.\n\nChange-Id: Id4543d8e78541eb08c8e629f180c605c699737ec\n"
    },
    {
      "commit": "179d67a6e3d80c173d7884ff28523ff65ecc1592",
      "tree": "e007ad4fe909835ae9431e78af5496b9ad8532ce",
      "parents": [
        "09c62f4b0be5be4052f5b2f4dc15cfa23cd5452a",
        "2bbb3a9fa2fa2b331e04b2c296ed9a10c0b55669"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 28 20:13:40 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Aug 28 20:13:40 2015 +0000"
      },
      "message": "Merge \"win32: adb start-server shows stdout/stderr output from actual server\""
    },
    {
      "commit": "4d64fd81ae38d6f145abcd15e9e61b6adc53bf1f",
      "tree": "7c4ec8d9322d0533cf9d89e2f3a2c18271fb8ff5",
      "parents": [
        "d4641cc38074b8363d8a451064a33964dc48c3aa"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Aug 27 12:03:11 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Aug 27 14:41:07 2015 -0700"
      },
      "message": "adb: disconnect: fix write-after-free memory corruption and crash.\n\nTransport atransport objects are semi-reference counted: the input and\noutput threads each hold a reference. The adb disconnect command was\ncalling transport_unref to release a reference that it never had in the\nfirst place. This meant that the refcount dropped to zero and the object\nwas deleted before either the input or output thread released its\nreference. When that last thread released its reference, it wrote to\nfreed memory and also sometimes crashed.\n\nThis fix is to not release any unheld reference, instead it just kicks\nthe transport to break remote_read in output_thread. So all transport\nclose flow goes the following way:\noutput_thread (exit) -\u003e main thread (offline the transport) -\u003e\ninput thread (exit) -\u003e main thread (destroy the transport)\n\nChange-Id: Iad1fe718acc8716f3a79c8c22b426a1b2450452c\n"
    },
    {
      "commit": "2bbb3a9fa2fa2b331e04b2c296ed9a10c0b55669",
      "tree": "0d17b6d49ac455546a01ffb92f96010606f8ad8c",
      "parents": [
        "736ab390a4d4c2355e50842f43a631c2d177c506"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Aug 26 18:46:09 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Aug 26 18:46:09 2015 -0700"
      },
      "message": "win32: adb start-server shows stdout/stderr output from actual server\n\nWhen launching the adb server (typically from adb start-server),\nredirect stdout/stderr to anonymous pipes which are read by threads in\nthe parent process, to make error diagnosis easier.\n\nIf there is an error during adb start-server, the output looks like:\n\n\u003e adb start-server\n* daemon not running. starting it now on port 5037 *\nerror: could not blah                 # from server process\ncould not read ok from ADB Server     # from launch_server\n* failed to start daemon *            # from adb_connect\nerror: cannot connect to daemon       # from adb_commandline\n\nFix handle-leaks in launch_server by using new unique_handle class\nthat is based on std::unique_ptr.\n\nIn the server, close stdin and redirect to adb.log *before* sending the\nACK, so that any errors are reported early instead of after the ACK.\n\nChange-Id: I943881210a0ea9458fc36851339f916c3d6a0830\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "10dedd8cd8d9d25068cef29b802c6583bb9bfbeb",
      "tree": "95ad9ee4985ab6c2ce18b4cd6f0f810ce1b6ef4b",
      "parents": [
        "9e0f034f7f8bf2a30288f93cd764b4a2d1bf004f"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Aug 26 11:18:42 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Aug 26 11:27:43 2015 -0700"
      },
      "message": "adb: keep all asocket operations in the main thread.\n\nAs far as I can see, all asockets operations happen in fdevent_loop()\nin the main thread, excepting close_all_sockets(). Instead of adding\nlock and ref_count for each asocket, a simpler way would be moving\nclose_all_sockets() from input_thread to the main thread.\n\nIn input_thread(), there are two path to break the loop and call\nclose_all_sockets(). One path is when receiving offline A_SYNC, which\nis sent by the main thread. The other path is when read_packet\nfails, which I believe is almost not possible and doesn\u0027t matter\n(Because t-\u003efd is closed just before t is freed.). So I move\nclose_all_sockets() to handle_offline() in the main thread.\n\nthe socket_list_lock in sockets.cpp could be removed. But I prefer\nto leave it for the following changes.\n\nBug: 6558362\nChange-Id: I5da23f60a67a331262c62693b9b127fe2689c799\n"
    },
    {
      "commit": "996c12efdccdb9b8c2a3ab1b29a37c688492ab2c",
      "tree": "baf78643d0a2f599c679647b254dc743b507dd97",
      "parents": [
        "be8e54b58cb35f4b58cbf6dc04db3796e630050a"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed May 20 18:58:41 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Aug 14 08:25:23 2015 -0700"
      },
      "message": "Add `adb features`.\n\nShows the features supported by the active adb server.\n\nChange-Id: I4a58a2ca082823c43f7a49e2c62ff80df6426756\n"
    },
    {
      "commit": "be8e54b58cb35f4b58cbf6dc04db3796e630050a",
      "tree": "8ed5592ef97fc60f85e748ec09b9666db476ef71",
      "parents": [
        "6d6cb544023baae04e60238bdde567976781955d"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon May 18 13:06:53 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Aug 14 08:24:37 2015 -0700"
      },
      "message": "Add feature list to connection banner.\n\nThis allows us to test for features explicitly rather than relying on\nthe protocol version number, allowing us to fall back gracefully if a\nfeature is not supported.\n\nThis will be needed for the upcoming shell upgrades for stdout/stderr\nseparation and exit code reporting.\n\nChange-Id: Ibb1d8ad2611f7209901ee76d51346b453e9c5873\n"
    },
    {
      "commit": "2521f51b977a7b667f4c65f24598c288a9a56795",
      "tree": "a927aa30455d8f0b4e68d7fa8211a55ebe2a3f7f",
      "parents": [
        "2ccc459e722ed5dda685e686536a721fc64a2ee1",
        "32625851925b0a2a933fdeeaa07035b6020295dc"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Aug 13 17:49:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 13 17:49:21 2015 +0000"
      },
      "message": "Merge \"adb: improve network error info\""
    },
    {
      "commit": "85ee64b2951a74fb8cfef2b66443aa9ec97478ff",
      "tree": "39fd0c780ec8ab3b181464ac333768e38d16206f",
      "parents": [
        "086ed8768efdd187f916bd21bc14ef4ada9bfb63"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Aug 11 17:05:02 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Aug 12 20:14:55 2015 -0700"
      },
      "message": "adb: start-server and kill-server error output\n\n- handle_host_request\n  - When the host:kill command comes in, shutdown the socket before\n    calling exit(). If we don\u0027t do this, the client will output error info\n    even though everything is working ok.\n\n- adb_connect()\n  - If we can\u0027t parse the version string, explain this in error output\n    and don\u0027t goto error which would try to close an fd we already closed.\n  - If host:kill doesn\u0027t work, output error info. Don\u0027t try to close\n    already closed fd.\n\n- adb_main()\n  - If writing the ACK somehow has an error, output error info (I doubt\n    this will ever get hit).\n\n- adb_commandline()\n  - Fix typo about max port number.\n  - Make \u0027adb kill-server\u0027 and \u0027adb start-server\u0027 output any detailed\n    error info.\n\nChange-Id: Id1a309cc1bf516f7f49bd332b34d30f148b406da\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "3b1a373b82a55a3affda0bb1a1f06419d4c42143",
      "tree": "067da3fd1f55dbf2d2545e7ebf242a499be03cc1",
      "parents": [
        "dd96569e1325de2c33aa1f7c2bac9cb945807ef2",
        "5fe6d0d1319be46bb98144e00f9da10da68d02aa"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Aug 12 20:55:59 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 12 20:55:59 2015 +0000"
      },
      "message": "Merge \"Remove confusing variable HOST.\""
    },
    {
      "commit": "b9f016413d9b3660fbb464fe42bd3acd0a509744",
      "tree": "7a64537c8ec254e0d65df39894c2111a38a56fe5",
      "parents": [
        "fe6ab81bec82779d28ffe85b1fab66b36bdc0860"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 12 08:32:10 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Aug 12 08:32:10 2015 -0700"
      },
      "message": "Always include the adb version in the log.\n\n\"Are you running the right version?\" seems to be a common cause of debugging\nconfusion.\n\nChange-Id: I4a4ba95e876dafc05e515058ca059ea370273f78\n"
    },
    {
      "commit": "32625851925b0a2a933fdeeaa07035b6020295dc",
      "tree": "3f98d3b8928803e5ed4fb8f350ac392eacd8420c",
      "parents": [
        "3a698637918d05e1fed131ae445bf6c764ff525a"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Aug 11 16:45:32 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Aug 11 16:45:32 2015 -0700"
      },
      "message": "adb: improve network error info\n\n- handle_forward_request\n  - Because we have detailed info about which syscall failed (at least\n    on Win32), use a more generic prefix of \"cannot bind listener\" followed\n    by the detailed info.\n\n- install_listener\n  - Return string errors for a few errors even though I don\u0027t think any\n    callers actually output the string for those errors.\n\n  - Remove the printf since the callers print the message themselves.\n\n- adb_main\n  - LOG(FATAL) calls abort() which on Windows calls the Windows Error\n    Reporting service which pops up a dialog asking if you want a\n    crashdump to be uploaded to Microsoft. So really, abort() is\n    designed for app bugs. Windows isn\u0027t the only one doing this, Chromium\n    also makes LOG(FATAL) crashdump-ready. Since an error here is not\n    necessarily an app-bug, use a \u0027normal\u0027 error output API like fatal()\n    which prints an error and just uses exit().\n\n- sysdeps_win32.cpp\n  - When Winsock APIs fail, make the string clarify which API failed.\n    Use terse unix-style descriptions (like what you\u0027d get from\n    cp/mv/dd/etc.).\n\n  - Don\u0027t trace WSAEWOULDBLOCK from recv() which is a normal occurrence.\n\n  - Add a comment about WSAEWOULDBLOCK \u003d\u003e EAGAIN.\n\nChange-Id: I58e47f49fa2f6c1b4b92a36d0c4bfe369b456f2a\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "566d3e1cfc6559bac0a8614384f420a4aaf88895",
      "tree": "25c9adbed162a11d54ec608fd3664641f687501b",
      "parents": [
        "3a698637918d05e1fed131ae445bf6c764ff525a"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Aug 11 15:48:15 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Aug 11 15:48:15 2015 -0700"
      },
      "message": "adb: call android::base::InitLogging even when adb tracing is disabled\n\nThis is a follow-up to https://android-review.googlesource.com/153623\nwhich prevented android::base::InitLogging() from being called when\ntracing was disabled.\n\nIt is ok to call InitLogging() on a device or host because calling it\ndoes not imply that a logging file is used, which was the reason for\nnot calling it on a device.\n\nSo this change should preserve the device behavior of not using a\nlogging file when tracing is disabled, plus it will call InitLogging()\nall the time in case logging APIs are called.\n\nChange-Id: I3fd6ba2c567f67a2f111a85f174893fbf866ec57\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\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": "b28812f800fcf5eaf26cc8b3145661d85d910ea9",
      "tree": "5ad8400eca8c7af26df5ab809a94f66745fb7215",
      "parents": [
        "a55dbd8dd32a1b12d337c4e4846fc6972e0dfb91"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sat Aug 08 15:07:07 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sat Aug 08 15:07:07 2015 -0700"
      },
      "message": "adb: win32: write ACK to separate pipe instead of stdout\n\nThe win32 version of a55dbd8dd32a1b12d337c4e4846fc6972e0dfb91. The big\ntechnique is to fit a Win32 HANDLE value in an int because it only uses\n32-bits. This allows most of the other adb code to stay the same.\n\nAlso, fix a regression in the \u0027adb server nodaemon\u0027 command that was\nerroneously returning an error when --reply-fd was not used, which\nshould not be necessary for this particular command.\n\nChange-Id: I37e9c609014b813af93bf0d6c12f665b59c93c41\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "a55dbd8dd32a1b12d337c4e4846fc6972e0dfb91",
      "tree": "c96c62656a9ddec795e3c746e900d5bda06fd65e",
      "parents": [
        "acbdda4d752aa2a5f4dd872f1c31855cc813862b"
      ],
      "author": {
        "name": "Siva Velusamy",
        "email": "vsiva@google.com",
        "time": "Fri Aug 07 10:10:29 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 07 11:31:07 2015 -0700"
      },
      "message": "adb start-server: Use a separate fd for sending initial OK\n\nWhen \"adb start-server\" is issued, and a server needs to be launched,\nadb client forks itself and the child process runs the server routine.\nOnce the server initializes its various components, it sends an \"OK\\n\"\nback to the client via its stderror (or stdout on Windows).\n\nThis sequence breaks down if before sending the \"OK\\n\", the server\nhappens to log something on its stderr. In order to avoid this, the\nclient now expects the ack to come on a different fd rather than one\nof the standard streams.\n\nBug: https://code.google.com/p/android/issues/detail?id\u003d182150\n\nChange-Id: I9d58a08068d71eb3b77e8a7377e934631c016466\n"
    },
    {
      "commit": "1711e01f1452f8f8caf315ca23618b17f0811596",
      "tree": "ff2cbeba5e70405ad1af06daab19eeb0c505f390",
      "parents": [
        "d0bdf9a27e8a3e17b1e666887ed2d85d94d606b5"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Aug 02 18:50:17 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Sun Aug 02 18:50:17 2015 -0700"
      },
      "message": "adb: win32: call SystemErrorCodeToString() from more places\n\nImprove some error messages, or trace output.\n\nChange-Id: Ib09fac33a296f090d37f125cad7556fc5b5e928e\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "6815c07fbe95c9f38362d5cbf80d8286e3d86950",
      "tree": "4675cd2e9c7cfc7cc929796485b1e36f081ac21e",
      "parents": [
        "c5dc27027a99fb09503d96a875a23c03eb4ac885"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Mon May 11 01:08:48 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jul 31 13:30:41 2015 -0700"
      },
      "message": "adb: win32: Unicode path names, env vars, some console support\n\nInitial support for Unicode file/dir names. Unicode paths can be passed\non the command line, directory enumeration can enumerate Unicode paths,\nUnicode paths are used for file access, and Unicode paths can be output\non the console correctly.\n\nAlso Unicode environment variable access.\n\nInitial support for Unicode output from adb shell (which uses\nadb_fwrite()). This is partial because the corner case of an\nadb_fwrite() call with an incomplete UTF-8 multi-byte sequence does not\noutput correctly, but this should be uncommon, is better than what we\nhad before (*always* incorrect UTF-8 multi-byte sequences) and can be\nfixed in the future.\n\nCalls to Windows APIs with char strings were changed to pass wchar_t\nstrings to the FooW() variants.\n\nFor more details, see the giant comment in sysdeps_win32.cpp.\n\nhttps://code.google.com/p/android/issues/detail?id\u003d8185\n\nChange-Id: I7ebf6713bb635638b986ccee97b354428837c9c5\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\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": "9536513ff43a98b0c35c60df3fa6d9e834b8458a",
      "tree": "e152d64b1f80779e4911f6b72efcde233ff67631",
      "parents": [
        "94c05fb9d2d23038837196a0553b49c2ba85d174"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Jul 29 17:21:21 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed Jul 29 17:21:21 2015 -0700"
      },
      "message": "fix adb {forward,reverse} --no-rebind\n\nadb forward --no-rebind (and the matching reverse command) seem to have\nbeen broken by d98ca8a92f6bf81a351472f36fac9a04a402327e. I fixed-up the\nstring parsing and also fixed the error message not to include\nstrerror(errno) since that does not apply because it is an\napplication-level error that doesn\u0027t have anything to do with the\nOS/libc.\n\nChange-Id: Iba7286283bfcf1782076355edcd9c355c0a0edfd\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    }
  ],
  "next": "a1c60c0597f8f978fd6568c19fb90993592e031d"
}
