)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "a1c60c0597f8f978fd6568c19fb90993592e031d",
      "tree": "167659e4796194f01f2109748ba035e5e7230f5f",
      "parents": [
        "34f6f58d0fdbaa23288ad4f79503bfd51c7a7ce5"
      ],
      "author": {
        "name": "Tamas Berghammer",
        "email": "tberghammer@google.com",
        "time": "Mon Jul 13 19:12:28 2015 +0100"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 22 13:06:06 2015 -0700"
      },
      "message": "Increase size of the the adb packets sent over the wire\n\nThe reason behing this change is to increase the adb push/pull speed\nwith reduceing the number of packets sent between the host and the\ndevice because the communication is heavily bound by packet latency.\n\nThe change maintains two way compatibility in the communication\nprotocol with negotiating a packet size between the target and the\nhost with the CONNECT packets.\n\nAfter this change the push/pull speeds improved significantly\n(measured from Linux-x86_64 with 100MB of data):\n\n           | Old push | Old pull || New push  | New pull  |\n-----------------------------------------------------------\nHammerhead | 4.6 MB/s | 3.9 MB/s || 13.1 MB/s | 16.5 MB/s |\n-----------------------------------------------------------\nVolantis   | 6.0 MB/s | 6.2 MS/s || 25.9 MB/s | 29.0 MB/s |\n-----------------------------------------------------------\nFugu       | 6.0 MB/s | 5.1 MB/s || 27.9 MB/s | 33.2 MB/s |\n-----------------------------------------------------------\n\nChange-Id: Id9625de31266e43394289e325c7e7e473379c5d8\n"
    },
    {
      "commit": "ad7c49f50fc1bbc82f4c9307f46ef11f1f6ee261",
      "tree": "38fe843e2d484b963ad731829ed53f207159f2c3",
      "parents": [
        "5c761bdf94bcdaf3a619cde002ef60c9b226f5c3",
        "09ccf1fa62cef5ce1f3766683df29b8467444a79"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 22:29:05 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 21 22:29:05 2015 +0000"
      },
      "message": "Merge \"Recognize IPv6 addresses for \"adb connect\".\""
    },
    {
      "commit": "09ccf1fa62cef5ce1f3766683df29b8467444a79",
      "tree": "2be312cbca0b49375c67d451a2648042d3efa370",
      "parents": [
        "e91631558898a0b8f7a3ea2b74b7726d78c2f227"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Jul 18 12:21:30 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 15:25:14 2015 -0700"
      },
      "message": "Recognize IPv6 addresses for \"adb connect\".\n\nBug: http://b/22559299\nChange-Id: I32891d706b5010c38db84a056e76dd279b780f75\n"
    },
    {
      "commit": "5c761bdf94bcdaf3a619cde002ef60c9b226f5c3",
      "tree": "62e95a1ffffde3814c2818c52b2d9404856b57ae",
      "parents": [
        "bba4d471283190dd9b153b7e13efdb28da0b6695"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Jul 21 02:06:26 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Jul 21 02:06:26 2015 -0700"
      },
      "message": "adb: logging: newlines, thread ids, error code overwriting\n\nAdd missing \\n to uses of legacy D() macro. This should make the legacy\nlogging easier to read (and harder to miss important stuff).\n\nOn POSIX, use gettid() from libcutils instead of pthread_self() so that\nthe output shows a more reasonable number instead of a pointer value.\nThis should be ok since libbase\u0027s logging already uses gettid().\n\nWin32:\n\nDon\u0027t let the Win32 last error get overwritten by API calls after the\noriginal error\u0027ing API. When encountering an unknown error, log the\nspecific error code.\n\nChange-Id: Ib8f72754efa7ba895d2f1cd914251fec2a1d894c\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "24f5276345d7f1b6cba973ed728179d7df0b8f22",
      "tree": "0b0aef126945f6a606906468a096d9826daab531",
      "parents": [
        "d7eb85491f7f2347a21fad16300f7f3c653f108b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 23 13:00:32 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 24 10:36:41 2015 -0700"
      },
      "message": "Improve the \"device \u0027(null)\u0027 not found\" error.\n\nNow we\u0027ll say \"no devices found\" if you haven\u0027t set ANDROID_SERIAL and\nthere\u0027s no device connected to default to.\n\nAlso clean up the relevant code a little.\n\nChange-Id: Id254929629ce0888628d5ba8e67cd996ffbf9c8a\n"
    },
    {
      "commit": "d7eb85491f7f2347a21fad16300f7f3c653f108b",
      "tree": "e4bb87a59fc2a1be6bc31771e50eb74c27cce7ac",
      "parents": [
        "11f73a1fe2e2aa2954b6f744d1947faca82ecca0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 17 15:23:42 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 18 10:19:30 2015 -0700"
      },
      "message": "Ignore ro.adb.secure in user builds.\n\nRequire authorization by default, and remove the ability to override\nthat in user builds. (userdebug and eng are still free to do whatever\nthey want.)\n\nBug: http://b/21862859\nChange-Id: Ibf8af375be5bf1141c1ad481eee7a59fb10a7adb\n"
    },
    {
      "commit": "675f1bdbc2c4d8f7ef421861ec226eebbdb2e7b3",
      "tree": "79f9e9ec95e021d63ef0c472de78f861dcbdbf15",
      "parents": [
        "2b113d6427ee3accc07cd85d833f81a9bf46bfe7",
        "4911f4b02685d0f41e043f2cef8e3d1f7403ff09"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Jun 08 22:21:30 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 08 22:21:31 2015 +0000"
      },
      "message": "Merge \"adb: win32: fix logging to adb.log\""
    },
    {
      "commit": "f4ca27d01692f924591889e16f933fef1b8de332",
      "tree": "01fcd33fc28944aaf9c1a91b09256966d249ee61",
      "parents": [
        "7f0dba11cf1784de4a038eb7bebe02f307892218"
      ],
      "author": {
        "name": "Paul Lawrence",
        "email": "paullawrence@google.com",
        "time": "Fri Jun 05 16:00:07 2015 -0700"
      },
      "committer": {
        "name": "Paul Lawrence",
        "email": "paullawrence@google.com",
        "time": "Fri Jun 05 16:01:48 2015 -0700"
      },
      "message": "adb shouldn\u0027t trace unless told to\n\nPrevents clean unmount of /data in crypto bounce\n\nBug: 21516860\nChange-Id: I1f761dfdf216dcb35b4609cd46cc4d0644cc4a81\n"
    },
    {
      "commit": "45ca8941d31cbcc7febe46527631adbee09d4cf1",
      "tree": "b2a85a1ef08e8077c9022ab54449babe59c2efb8",
      "parents": [
        "d98ca8a92f6bf81a351472f36fac9a04a402327e",
        "3a2421b940e844e6c29da9ec389da42dc87f90f2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jun 04 22:28:49 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jun 04 22:28:50 2015 +0000"
      },
      "message": "Merge \"adb: fix adb_close() vs. unix_close() usage\""
    },
    {
      "commit": "4911f4b02685d0f41e043f2cef8e3d1f7403ff09",
      "tree": "aed3c1cd78f581def1238b0d1c54356350396ba8",
      "parents": [
        "d98ca8a92f6bf81a351472f36fac9a04a402327e"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Wed May 20 23:17:26 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "compareandswap@gmail.com",
        "time": "Tue Jun 02 21:04:56 2015 +0000"
      },
      "message": "adb: win32: fix logging to adb.log\n\nIn the adb client, redirect stdin and stderr of the adb server to `nul\u0027,\nso that when the adb server starts up, it avoids issues in the C Runtime\nwhere it closes stderr, making it hard to properly reopen. There are\nprobably other ways to avoid this issue, but I think this is the\ncleanest that will keep working over the years and will exercise the\nmost commonly used code-paths in the C Runtime.\n\nFix some adb_close() calls to be unix_close() (only really matters on\nWindows).\n\nMake stderr non-buffered on Windows, to match the (sensible) Linux\nbehavior.\n\nChange-Id: I1b15c64240e50dbeb56788b0d0d901f4536ad788\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "d98ca8a92f6bf81a351472f36fac9a04a402327e",
      "tree": "52b3e4106efcec99a1e03f95ab8d443582ba130f",
      "parents": [
        "b1d05de8a377b369b424d0e6c79f1843581bc1e9"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 29 17:55:19 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 29 18:03:57 2015 -0700"
      },
      "message": "Fix error handling/reporting for \"adb forward\" and \"adb reverse\".\n\nWe really need better infrastructure for parsing adb subcommands, but\nin the meantime...\n\nAt least this cleans up a little more of the implementation too.\n\nBug: http://b/20736014\nChange-Id: I76209847da3724906c71924017bcb69fa31e0b49\n"
    },
    {
      "commit": "3a2421b940e844e6c29da9ec389da42dc87f90f2",
      "tree": "331a2e72aa1ce7167daba893914f0ffc386b1b2f",
      "parents": [
        "b1d05de8a377b369b424d0e6c79f1843581bc1e9"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri May 22 20:09:06 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri May 22 20:20:49 2015 -0700"
      },
      "message": "adb: fix adb_close() vs. unix_close() usage\n\nDocument the differences between adb_*() and unix_*() in the function\nprototypes in sysdeps.h. See the file for the details (CR/LF\ntranslation, well-known file descriptors, etc.).\n\nFix adb_read(), adb_write(), and adb_close() calls that should really be\nunix_read(), unix_write(), and unix_close(). Note that this should have\nno impact on unix because on unix, unix_read/unix_write/unix_close are\nmacros that map to adb_read/adb_write/adb_close.\n\nImprove sysdeps_win32.cpp file descriptor diagnostic logging to output\nthe name of the function that was passed a bad file descriptor.\n\nChange-Id: I0a1d9c28772656c80bcc303ef8b61fccf4cd637c\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "08d552b1da44146fe91e7448cde7f9aff0fcf18f",
      "tree": "571e89b7fedd58a5092338223060c26ff8988cb0",
      "parents": [
        "4f246adfa10dcf9439d3c1c352414c9d7bb50032"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu May 21 13:58:50 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu May 21 16:25:57 2015 -0700"
      },
      "message": "Improve logging.\n\nAny output from the LOG family will now go to stderr and logcat on the\ndevice. stderr is usually redirected to a log file, but that is now\ninhibited for adbd if being run from a tty (useful when debugging with\nthe serial console).\n\nThis also fixes sending logs to the file on device for the trace mask\nof \"all\". The \"all\" tag was specifically handled to return early from\nthe function, preventing the file initialization from happening.\n\nChange-Id: Id253577bfd1500fbce92dbfba0f9be23dbfd5ee4\n"
    },
    {
      "commit": "27929b0f8282de39293fe57962a561c3cf72f6b8",
      "tree": "a53d14a1f265eb9f9126e73dde767084944cdc38",
      "parents": [
        "9ca39e3b3771099dc41dd37968c56a2d15c3a4fc"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 13:25:27 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu May 21 15:03:44 2015 -0700"
      },
      "message": "Clean up adb_trace_init.\n\nOld code was a mess for splitting a string and then searching a list\nwhen they really wanted a map.\n\nTo more closely match ANDROID_LOG_TAG, only use a space separated list\nrather than space/colon/semi-colon/comma.\n\nChange-Id: I915ff4968e42d5f8dec1b43b6eacc0c8d7b44d7b\n"
    },
    {
      "commit": "9a50f4ccb8668f15c8d4eaf924fcfd769b1003ff",
      "tree": "797356a734389ac53d6f03132d7fa8af7af42dab",
      "parents": [
        "5bf0f162de66a2f5a189c75fc63aac23d7b2c387"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon May 18 16:43:57 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon May 18 17:10:33 2015 -0700"
      },
      "message": "Make connection states a proper type.\n\nChange-Id: I809f9b327c832b88dd63151bf7dcb012d88e81c4\n"
    },
    {
      "commit": "53a3744981a350cd3a35f7e062c6fd05cf8be24a",
      "tree": "76bd2c0a306a9dac27d9c9b03e72a241a56e61c9",
      "parents": [
        "e66e677c1d14ad932700d37844d8e78bec584078"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri May 08 16:13:53 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri May 08 17:33:21 2015 -0700"
      },
      "message": "Revert \"Revert \"Split adb_main.cpp into client and daemon.\"\"\n\nThis reverts commit 151f4887d194a642b4a276276344d4ea5b05d477.\n\nChange-Id: I74088db34983dc99e316a07c6ddc294340e0eb71\n"
    },
    {
      "commit": "151f4887d194a642b4a276276344d4ea5b05d477",
      "tree": "0e11729e2cedfdc40c88cab2982ec76a495689d0",
      "parents": [
        "100889ccbdc10c603445feb83455d9438b932289"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri May 08 16:08:57 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri May 08 16:08:57 2015 -0700"
      },
      "message": "Revert \"Split adb_main.cpp into client and daemon.\"\n\nThis reverts commit ad87c02ce2e9545a255991b646e057337718b728.\n"
    },
    {
      "commit": "ad87c02ce2e9545a255991b646e057337718b728",
      "tree": "498db75192460a033fb1a8580f1ff6bc321b7324",
      "parents": [
        "818aa86ae676c2895a0779efcd9eb4e261c40be3"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Tue May 05 19:25:23 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri May 08 10:20:26 2015 -0700"
      },
      "message": "Split adb_main.cpp into client and daemon.\n\nThe name \"client\" is somewhat misleading as it also contains the host\nside adb server, but it\u0027s a part of the client binary.\n\nChange-Id: I128b7bab213e330eb21b5010cd1fec5f7a62c8af\n"
    },
    {
      "commit": "9d07feecf5ab3d3471a5e15d1499351a24008ac4",
      "tree": "80c649a41c27b7fe82bb4b002249986886aa7e67",
      "parents": [
        "7dc759fb0c860d8e8cf44375556ed1c9089b52e8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 07 21:38:41 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu May 07 21:38:41 2015 -0700"
      },
      "message": "Add some missing \u0027const\u0027s.\n\nChange-Id: I5bd26d4366e10fc8c6bc255b7ddb174a7a8b82a5\n"
    },
    {
      "commit": "3aec2ba9f5297a94b52f479cbf741121e2910152",
      "tree": "02dc43658386df1391e0d6cf54d42bc53d41a234",
      "parents": [
        "32ce0f86ecc3f4a187de76e7facd4b0d171fe46b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:10:43 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:10:43 2015 -0700"
      },
      "message": "Give enum types CamelCase names for clarity.\n\nChange-Id: I1c89f1cc155ee839f372fb14d972a288183b8bcd\n"
    },
    {
      "commit": "fb59684b188e9dd2649592f5e357fd4996522138",
      "tree": "7849490fabea8d735e4096b9064e680b839012b3",
      "parents": [
        "88b4c85a6f7fbc094f55c9e5322e1e16857006a2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 17:04:38 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 17:36:46 2015 -0700"
      },
      "message": "Add WriteFdFmt and clean up more code.\n\nAlso say *which* device wasn\u0027t found.\n\nBug: http://b/20666660\nChange-Id: I50e234ad89e39ae0a8995083c0b642c61275c5a3\n"
    },
    {
      "commit": "88b4c85a6f7fbc094f55c9e5322e1e16857006a2",
      "tree": "5eae0ad266a6ac7680a12dd088142c1fb953fc7c",
      "parents": [
        "da94581ec4a749f738bebaaa5d0ebcca4017143e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 30 17:32:03 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 15:55:37 2015 -0700"
      },
      "message": "More adb buffer fixes.\n\nThis patch factors out a lot of the basic protocol code: sending OKAY,\nsending FAIL, and sending a length-prefixed string.\n\nADB_TRACE has been non-optional for a long time, so let\u0027s just remove\nthe #ifs.\n\nAlso actually build the device tracker test tool (and remove its duplicate).\n\nBug: http://b/20666660\nChange-Id: I6c7d59f18707bdc62ca69dea45547617f9f31fc6\n"
    },
    {
      "commit": "b27e24180f62900160c5734d005706b6cf128efc",
      "tree": "e9a2e16429bdd65bd1411e043f2b48451cbc97cb",
      "parents": [
        "59a1fb8a1846a1f14e0a3f1a6136717fb3f45ae1"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 29 22:37:25 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Apr 29 22:37:25 2015 -0700"
      },
      "message": "Add missing \u0027else\u0027 to fix all devices showing up as \"host\".\n\nBug: http://b/20705355\nChange-Id: I4f7830278f0c2bc87d95d148d85455b8da894645\n"
    },
    {
      "commit": "fb2ba514edb9ae9a086daef54aa7a61708595442",
      "tree": "0e5ac03f0144b548c0938e3599fd8b8573b41394",
      "parents": [
        "949f2620c7ae33742ad639cf893c007204dc2074"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 24 23:02:00 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 27 19:42:20 2015 -0700"
      },
      "message": "Remove strtok from adb.\n\nAlso fix android::base::Split to behave like Java, Python, and google3.\n\nChange-Id: Ifbffd4e92950a79e7aea5d153c95fe0980648417\n"
    },
    {
      "commit": "a585cbd5aa8210095c7ed5e098dd67ab20649424",
      "tree": "721a7b7260106e6d56002feef2c6f57a858e18a2",
      "parents": [
        "bebf693cba868feff20031443b534842c0b439c0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 20 08:09:20 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Apr 20 08:09:20 2015 -0700"
      },
      "message": "Always explain why bind(2) failed.\n\nThis has confused several people lately.\n\nBug: http://b/20219978\nChange-Id: I2537ceb83bff0b3166c230c728d4389a983db858\n"
    },
    {
      "commit": "ab88242ece4a44d79acb5dfc8dd52bb418f5c427",
      "tree": "4de96573c4e36b7fb03aa823f762a991d41c8f47",
      "parents": [
        "c084e0c4116d0b001184a69c70d0ef564dc93579"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 16 22:54:44 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 16 22:54:44 2015 -0700"
      },
      "message": "Show $ADB_VENDOR_KEYS if authentication fails.\n\nIncorrectly set $ADB_VENDOR_KEYS is the most likely cause of failed\nadb connections. Make it easier to debug such problems by including\nthe value in use in the error message.\n\nBug: 20165551\nChange-Id: I64c1d98ae6d3fb40eea9e1f0ddcfcf4f2d9d7318\n"
    },
    {
      "commit": "dec2b249b4ab158e3bb7304081bd517825e7a877",
      "tree": "e127539e7221887a839af9a58ec9fef8618178ed",
      "parents": [
        "d174d5f1fd9a05f4aac8029fe530f268012b97f1"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 22:53:30 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri Mar 20 09:49:15 2015 -0700"
      },
      "message": "Additional cleanup of start_device_log.\n\nAddresses nnk\u0027s post commit review comments on\nhttps://android-review.googlesource.com/#/c/139381/\n\nRemove unneeded code for creating /data/adb.\n\nAdd an O_CLOEXEC.\n\nMove the closing of stdin out to main().\n\nAppend the pid of the current process to the log file to avoid\nclobbering the log if the process crashes and restarts within the same\nsecond.\n\nChange-Id: Ide0be86b4b33256486634c29ba02efaf10cf913d\n"
    },
    {
      "commit": "ecbd87460fd8027fbc7dd309281104766dc6e70a",
      "tree": "3ba96a30194d05164579102c734a2bc48495b418",
      "parents": [
        "fdd3d644b3680f22e06ecf0d4e84f8adc26fd68a"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Sun Mar 08 21:12:08 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 21:50:10 2015 -0700"
      },
      "message": "Use text based trace masks for adbd.\n\nPreviously the adbd trace mask had to be set as raw hex rather than\nwith the colon separated list. We all have better things to do than\nmemorize bitmasks, so make adbd use the same trace mask setting code\nas adb.\n\nChange-Id: I0bf0ab61c070d06d1cc2acf1ed90b2b77ccd261b\n"
    },
    {
      "commit": "db6fe6428c1ca5f397d3853f2b96c3e3e878b172",
      "tree": "7c788a60093d22977baee6c6625107abf40b66e3",
      "parents": [
        "0e0ce0662e948b9cfb1b42e48f18d3c4643b6c1e"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 15:21:08 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 15:32:33 2015 -0700"
      },
      "message": "File header cleanup.\n\n * sysdeps.h should always be included first.\n * TRACE_TAG needs to be defined before anything is included.\n * Some files were missing copyright headers.\n * Save precious bytes on my SSD by removing useless whitespace.\n\nChange-Id: I88980e6e00b5be1093806cf286740d9e4a033b94\n"
    },
    {
      "commit": "f30d73c74d85ccc2b1f55d6946f616e62d67e48e",
      "tree": "b2302299d3d083ba83949a80213b92d66540201f",
      "parents": [
        "b5f43a12723896c2d8fc98eed5abce563a16f56b"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Feb 25 17:51:28 2015 -0800"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 09 14:06:11 2015 -0700"
      },
      "message": "Move adb to C++.\n\nI keep trying to clean things up and needing std::strings. Might as\nwell just do this now.\n\nusb_linux_client.c is going to stay as C because GCC isn\u0027t smart\nenough to deal with the designated initializers it uses (though for\nsome reason it is in C mode).\n\nThe Darwin files are staying as C because I don\u0027t have a way to test\nthat they build.\n\nThe Windows files are staying as C because while I can actually build\nfor them, it\u0027s slow and painful.\n\nChange-Id: I75367d29205a9049d34460032b3bb36384f43941\n"
    },
    {
      "commit": "b5f43a12723896c2d8fc98eed5abce563a16f56b",
      "tree": "f81933396150903b8b0d0fa38e9faa081376253a",
      "parents": [],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 09 20:29:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 09 20:29:07 2015 +0000"
      },
      "message": "Merge \"Fix a writex transcription error.\""
    }
  ]
}
