)]}'
{
  "log": [
    {
      "commit": "4af6e4ff6ff587b344236c30cb3d6765cb1de6be",
      "tree": "36f14860b4d1370590f89f04a37933ce497b29dc",
      "parents": [
        "bd7a148751f51f44154729e21fd7a1f76f978715"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Sep 30 14:05:39 2024 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Fri Nov 08 12:32:12 2024 -0800"
      },
      "message": "Make daemon resilient to unbound bulk transfer\n\nDon\u0027t trust USB bulk transfer boundaries. We have encountered\nseveral bugs where amessage and payload can be merged on the\nother end, resulting in adbd closing the connection.\n\nSince APacketReader has a zero-copy optimization, this CL also\nresults in an increase of 10% upload speed.\n\nBEFORE:\n$ adb push ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 236.9 MB/s (77,171,966,810 bytes in 310.644s)\n$ adb push ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 236.7 MB/s (77,171,966,810 bytes in 310.903s)\nadb push ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 236.7 MB/s (77,171,966,810 bytes in 310.984s)\n\nAFTER:\n$ adb push ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 257.3 MB/s (77,171,966,810 bytes in 286.031s)\n$ adb push ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 255.9 MB/s (77,171,966,810 bytes in 287.655s)\n$ adb push ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 257.4 MB/s (77,171,966,810 bytes in 285.871s)\n\nTests without compression (-Z):\n\nBEFORE:\n$ adb push -Z ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 225.6 MB/s (77,171,966,810 bytes in 326.228s)\n$ adb push -Z ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 220.4 MB/s (77,171,966,810 bytes in 333.899s)\n\nAFTER:\n$ adb push -Z ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 234.9 MB/s (77,171,966,810 bytes in 313.291s)\n$ adb push -Z ~/files /data/local/tmp\n3890 files pushed, 0 skipped. 233.7 MB/s (77,171,966,810 bytes in 314.907s)\n\nTest: types_test\nBug: 339904178\nBug: 362569588\nBug: 372413905\nBug: 361370189\nBug: 304521239\nBug: 358656262\nChange-Id: I7d3590f87d5bbb13025ccf6edac8fb53b8a66588\n"
    },
    {
      "commit": "ce2026f61d9fbb63aec12c0cfd98ed471e0d8b9c",
      "tree": "7eb53347c4ff73da3c4a85063e16fa7b88393643",
      "parents": [
        "b256de14c11f835f33aab6f10b0c83a909b935bf"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Oct 16 11:40:01 2024 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Fri Nov 01 16:10:15 2024 -0700"
      },
      "message": "Fix reuse-after-free upon claim interface (libusb)\n\nThe libusb backend is too eager to report a device to the transport\nlayer. Because of the concept of \"detached\", this backend does not\ntry to open/claim interface. This can lead to a failure to Start()\nupon registering the transport which in turns lead to use-after-free\nwhen we send_connect after the transport is destroyed.\n\nBug: 372385779\nTest: test_device.py\n\nChange-Id: I424af66d1e1642d63723696bd228557db364cd56\n"
    },
    {
      "commit": "e1caf9ed2c80c380db32c0c9e7d2470bfe5bcd43",
      "tree": "9c1612f51bd06722a2453f0568fba6d51ffb7bff",
      "parents": [
        "2b43330e81af8724edeade048c7068598e1fd3e5"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Fri Oct 18 23:41:33 2024 +0000"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Sat Oct 19 00:23:19 2024 +0000"
      },
      "message": "Refactor/Split local_init into emu/server_socket\n\nFunction local_init is used on host to start emulator scanner and to\nstart server socket listener on device which is confusing. Splitting\nthe function and removing it from `adb.h` allows to give it a more\nmeaningful name.\n\nTest: Already covered\nChange-Id: Ib3bc2ba03b17308196afce32794a30dbca932a4b\n"
    },
    {
      "commit": "01cbbf505e3348a70cd846b26fae603bdf44b3c5",
      "tree": "3938745e97109daa4d67897806821aaf39215834",
      "parents": [
        "5da37beb8fee3903e26f2f59e7d246cd9fe963b5"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Oct 14 15:36:58 2024 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Oct 14 16:05:45 2024 -0700"
      },
      "message": "Refactor local -\u003e emulator\n\n- \"local\" does not mean anything.\n- Term was confusing (already used by local socket and unrelated).\n- It means \"emulator\" on host, but \"tcp server\" on daemon.\n- As a parameter it was an int used as a bool.\n- Value was unproperly set everywhere on daemon (proof nobody understood it).\n\nFollowup CL:\n\n- Rename daemon/transport_local -\u003e daemon/transport_tcp_server\n- Rename client/transport_local -\u003e client/transport_emulator\n\nTest: NA\nChange-Id: Iaf8f71378540f991d69c7bea2ffb239346cefa69\n"
    },
    {
      "commit": "1bacec0a271e494d149d5e46f745b04a3c5c7a19",
      "tree": "033f468ef7856990f5d2275b34d463ea31953e73",
      "parents": [
        "15f52860cc79cca843e8126c13f39a1b7a874c6d"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Tue Oct 01 10:48:06 2024 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Tue Oct 01 20:35:11 2024 +0000"
      },
      "message": "Simplify default port handling\n\nTest: NA\nBug: NA\nChange-Id: Ic9b62a006f94a75f1f43d51aa8d1d8dfde496fb1\n"
    },
    {
      "commit": "d4610615d63f064e3ae1021528b14bcd2ce75093",
      "tree": "44a05af8ce55e57ba4cc7b09755000f60e98e0ba",
      "parents": [
        "1261c8f793932a4dc19fef12bfeda2f15e4cb542"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Sep 18 12:38:30 2024 -0500"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Sep 18 12:38:30 2024 -0500"
      },
      "message": "Code cleanup\n\n- Delete unused define\n- Delete obsolete comment\n\nTest: NA\nBug: NA\nChange-Id: I1b66fca925fb27a36ceff557091a1b9ddf092bb2\n"
    },
    {
      "commit": "a8ab5ceccb41035804ad83bfa625adac4a8ccf83",
      "tree": "3c6876b229cc55440566b70712023b7c603319c2",
      "parents": [
        "a0f142917fbd726573ff3656358f5fa3fdd85438"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 28 12:10:09 2024 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 28 12:10:09 2024 +0000"
      },
      "message": "Pedantry: even modern C doesn\u0027t need (void) any more.\n\nChange-Id: I6dcfda2a93f61458a23559fc93337c04ae772ba6\n"
    },
    {
      "commit": "d0db47dcdf941673f405e1095e6ffb5e565902e5",
      "tree": "f1b7cee30b7e6a8b1eb37fcbc8eb616c36ebc4b0",
      "parents": [
        "20f2dcb8e97f29cd4245357f9d2e70ceec996a4c"
      ],
      "author": {
        "name": "Nataraj Deshpande",
        "email": "nataraj.deshpande@intel.com",
        "time": "Mon Mar 13 11:28:58 2023 -0700"
      },
      "committer": {
        "name": "Nataraj Deshpande",
        "email": "nataraj.deshpande@intel.com",
        "time": "Mon Sep 25 12:24:47 2023 -0700"
      },
      "message": "adb: Add interface to support adb over DbC\n\nThis patch adds a new interface for ADB for Android\nhost solutions using USB Debug Class (DbC). DbC is\na xHCI extension providing USB 3.0 device mode on\nxHCI controller which is available on all hosts.\n\nNote: DbC class and subclass values can be found in table 7.35 of the xHCI spec version 1.2. Fetched from: https://www.intel.com/content/dam/www/public/us/en/documents/technical-specifications/extensible-host-controler-interface-usb-xhci.pdf\n\nBug: b/121287022\nTest:adb connection on DbC supported device.\nChange-Id: I882c4d6595bc275dddcc2258f7e356e467c66cd9\n"
    },
    {
      "commit": "d0ce71bda3fbe427462b2db78c674e221886cec1",
      "tree": "cd1a8216007e49c789fb73acde7821f7decd2aaa",
      "parents": [
        "98bbf6337f37a58670b87a5b508947bb07842144"
      ],
      "author": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jul 21 17:35:35 2023 -0700"
      },
      "committer": {
        "name": "Ryan Prichard",
        "email": "rprichard@google.com",
        "time": "Fri Jul 21 17:35:35 2023 -0700"
      },
      "message": "Add missing \u003cfunctional\u003e include for std::function\n\nBug: b/175635923\nTest: treehugger\nChange-Id: I97c3ee373686dc5c2a75b319ed9b7aebe62bee6e\n"
    },
    {
      "commit": "cf7f5f9981d010b8ae330e68ae6b7537be41cf98",
      "tree": "6d2e33d2c398a8dfd9b4537a867cea848bc65927",
      "parents": [
        "00177143745cdda9f19c9bcc8af2231cd2f48bcb"
      ],
      "author": {
        "name": "Meghna Chaudhary",
        "email": "cmeg@google.com",
        "time": "Wed May 17 16:51:11 2023 +0000"
      },
      "committer": {
        "name": "Meghna Chaudhary",
        "email": "cmeg@google.com",
        "time": "Fri May 26 17:18:04 2023 +0000"
      },
      "message": "Re-launch adb server with one-device option.\n\nProblem scenario:\n* An adb server has successfully started with the --one-device option.\n* The server crashes and/ or is killed.\n* The next command (if not start-server) will fail as it will attempt to re-launch the adb server without the --one-device option.\n\nSolution:\nIf, on a `one_device_required` system, `-s` serial is provided in the\ncommand, use the serial and attempt to re-start the adb server with the\n`--one-device` flag when necessary.\n\nTest:\nSteps to manually test the adb binary, with example commands.\nOn a device with \"/etc/adb/one_device_required\" file present, start an\nadb server with `--one-device` option:\n$ adb --one-device 0ab70e96d293 -P 27761 start-server\n\nKill the server:\n$ adb -s 0ab70e96d293 -P 27761 kill-server\n\nRun another adb command with the serial (-s) provided:\n$ adb -s 0ab70e96d293 -P 27761 devices\nThe above command should successfully start an adb server.\n\nBug: b/283038263\n\nChange-Id: Ie5dd49c95e5db59203a2faf78b438accfef88d91\n"
    },
    {
      "commit": "3331d8992a009a6a2549fa926056d5f1d1f4213a",
      "tree": "7c80e00f97f2afa00b51232b08fb39e0ad935102",
      "parents": [
        "be8c6535fa984197903b587fd54b4661b0f6d404"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Dec 21 01:43:43 2022 +0000"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Dec 21 18:47:07 2022 +0000"
      },
      "message": "ADB: Simplify jdwp connection management\n\nWIP\n\nTest: NA\nBug: NA\nChange-Id: I0ae358780bc5ec813c5f6c622ad93ff53729b8c7\n"
    },
    {
      "commit": "5ec6fdabc0e0b7ba6725e02f5207a1c1d5fdbcaf",
      "tree": "8ebed085c435f7fc3164d180bb3c4506d4c6c0ca",
      "parents": [
        "76ce77f2b419fabc2e7d4fd5737592efe163d9fb"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Jul 27 15:17:44 2022 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Tue Aug 09 03:21:37 2022 +0000"
      },
      "message": "ADB: Document ConnectionState\n\nProvide meaning for all \"states\" in the enum.\n\nTest: NA\nBug: NA\nChange-Id: Ic2828a893aa74673e2d11db7ee09d4bb681b4e5e\n"
    },
    {
      "commit": "bd1f30085774660e01d83cb74e326d79d55062d2",
      "tree": "ed19cdd7d0df5fb0a87543fec04e9c3078a05c29",
      "parents": [
        "17b638c32418194eb7ec81bc2de37bf2eb838089"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@fb.com",
        "time": "Wed Dec 29 21:15:12 2021 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@fb.com",
        "time": "Mon May 23 15:26:01 2022 -0700"
      },
      "message": "adb: add receive windowing.\n\nThe adb protocol struggles when used over long fat pipes, because the\na writer must wait for the receiver to acknowledge a write before it can\ncontinue writing data. For example, a connection with infinite\nbandwidth, but 50ms of latency is limited to 20MBps of throughput.\n\nWe still need some sort of acknowledgement, to be able to supply\nbackpressure. Take an initial stab at addressing this issue by\nimplementing receive windowing, which lets the writer know how many\nmore bytes it can write. Repurpose the unused field in A_OPEN to set the\ninitial window size, and add a payload to A_OKAY packet that\nacknowledges a specified number of bytes.\n\nTest: with adbd running on a separate machine connected with 10GbE:\n  [jmgao@atlas:~]# sudo tc qdisc replace dev lan root netem delay 50ms\n  [jmgao@atlas:~]$ ./adb kill-server \u0026\u0026 ADB_DELAYED_ACK\u003d0 ./adb connect 192.168.0.152:5555 \u0026\u0026 ./adb push 1g.bin 1g.bin\n  * daemon not running; starting now at tcp:5037\n  * daemon started successfully\n  connected to 192.168.0.152:5555\n  1g.bin: 1 file pushed, 0 skipped. 19.1 MB/s (1073741824 bytes in 53.685s)\n\n  [jmgao@atlas:~]$ ./adb kill-server \u0026\u0026 ADB_DELAYED_ACK\u003d1 ./adb connect 192.168.0.152:5555 \u0026\u0026 ./adb push 1g.bin 1g.bin\n  * daemon not running; starting now at tcp:5037\n  * daemon started successfully\n  connected to 192.168.0.152:5555\n  1g.bin: 1 file pushed, 0 skipped. 475.4 MB/s (1073741824 bytes in 2.154s)\nChange-Id: I6498d18e5ab4d866a81bf4d5c3d65cebb579c059\n"
    },
    {
      "commit": "5703eb352612566e8e5d099c99c2cecfaf22429d",
      "tree": "faf21a4919626c0306a4605de1baa521cdf4ff0b",
      "parents": [
        "9864dad883fab140c65171f84d6c2dead338726e"
      ],
      "author": {
        "name": "Vince Harron",
        "email": "vharron@google.com",
        "time": "Fri Nov 12 12:40:58 2021 -0800"
      },
      "committer": {
        "name": "Vince Harron",
        "email": "vharron@google.com",
        "time": "Thu Dec 02 10:31:56 2021 -0800"
      },
      "message": "adb --one-device feature.\n\nAdded support for a new server option, --one-device.\n\nWhen a server is started with that option, it will only communicate with\nthe USB device serial number or device address specified.\n\nThis allows multiple adb servers to run in parallel on a single host,\neach communicating only with a single USB device.\n\nexample usage:\n$ adb --one-device usb:2-4 -P 1138 start-server\n$ adb --one-device usb:2-6 -P 1139 start-server\n$ adb -P 1138 devices -l\nList of devices attached\n97221FFBA00016         device usb:2-4 transport_id:1\n$ adb -P 1139 devices -l\nList of devices attached\n13031FDEE0000C         device usb:2-6 transport_id:1\n\nTest: Manually tested as shown above with \u0026 without libusb, Linux \u0026 macOS.\nChange-Id: Ibc4e3df7ecdefce737291185fa6a84071bff5340\n"
    },
    {
      "commit": "6256d99b285baa672cec1d0eeff65c43b1412c35",
      "tree": "4694e08d39f89483da0e5f6b17a7200e5d87ccfb",
      "parents": [
        "22f73e678c2b807595337bb595553cef456623d6"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu May 20 18:28:13 2021 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jul 02 10:20:32 2021 -0700"
      },
      "message": "Add test for ConnectionState to_string.\n\nTest: treehugger\nChange-Id: I0d9fa8195075b8586348622ce6a68a71d024193e\n"
    },
    {
      "commit": "8e7c97292d634744233386e9b510d2422171115c",
      "tree": "6a728287c7789dce63d0ce117fede73d3d4be0d2",
      "parents": [
        "7852ca4f0083d7eabda7640c6a798be792584ab6"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Jun 17 04:19:45 2021 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jun 21 16:45:51 2021 -0700"
      },
      "message": "Add attach/detach support to libusb backend.\n\nBug: http://b/186595076\nTest: treehugger\nChange-Id: I93f3c3e3bd28e9cd0c08e89d6c9454d36d8206f8\n"
    },
    {
      "commit": "bea8f3c0203a77a114bf70885befc582f3f6cef6",
      "tree": "422343793a4b65e6221d6af04e181f2d30473ed2",
      "parents": [
        "c79bc08eb4291e3b09f2c07788822871e476bbcd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 06 12:07:56 2020 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Apr 06 14:33:14 2020 -0700"
      },
      "message": "adb: add option to disable kill-server.\n\nIn the post-apocalypse, it\u0027s increasingly common for people to use ssh\nport forwarding to use an adb client with a remote adb server. This\nresults in `adb kill-server` being catastrophic, because the client has\nno way of restarting the server on the other end. Android Studio in\nparticular has an unforunate habit of trying to manage adb\u0027s life cycle\nsuch that starting or exiting Studio will result in a kill-server.\n\nAdd the ADB_REJECT_KILL_SERVER environment variable which ignores\nkill-server, to make this scenario a bit better.\n\nBug: http://b/152251952\nTest: ADB_REJECT_KILL_SERVER\u003d1 adb start-server; adb kill-server\nChange-Id: I5533a6dcbdb9220526a6fcf9ca31d9fcef1cec17\n"
    },
    {
      "commit": "6b55e755786fff16a04471b56cfaf8a79adf8004",
      "tree": "6463441e90f25b44d46e174612637dd7713c8170",
      "parents": [
        "de9078dd2983da810c9a53c2cb2f230ab838829a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Mar 27 18:09:56 2020 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Mar 30 16:43:06 2020 -0700"
      },
      "message": "Move adbd\u0027s legacy USB implementation to fastboot.\n\nThis code path is effectively dead in adbd, and fastboot\u0027s dependency on\nlibadbd makes it hard to refactor adbd\u0027s dependencies.\n\nBug: http://b/150317254\nTest: built and flashed aosp_walleye-eng\nChange-Id: I5118136d32fdcbbd011559ed0a4a71e1dc7bf064\n"
    },
    {
      "commit": "420ad5564a4189128d79f7efe1ffe6bba9ea9d2e",
      "tree": "11e098addc26dff7bbcd2843f5365e41ecaebc05",
      "parents": [
        "43a95f19255333cb68b6a0a724707faf867a79aa"
      ],
      "author": {
        "name": "Shukang Zhou",
        "email": "shukang@google.com",
        "time": "Thu Feb 13 17:01:39 2020 -0800"
      },
      "committer": {
        "name": "Shukang Zhou",
        "email": "shukang@google.com",
        "time": "Fri Mar 06 13:56:27 2020 -0800"
      },
      "message": "\"track-app\" service showing debuggable/profileable apps\n\nAdd a \"track-app\" service in adbd. For every debuggable or\nprofileable-from-shell process, ART sends related info to\nadbd and adbd surfaces the info through the \"track-app\"\nservice.\n\nThe output format of \"track-app\" is a line summarizing\nthe number of reported processes, followed by a protobuf\nmessage in human readable form. For example,\n\nProcess count: 2\nprocess {\n  pid: 3307\n  profileable: true\n  architecture: \"arm64\"\n}\nprocess {\n  pid: 3341\n  debuggable: true\n  profileable: true\n  architecture: \"arm64\"\n}\n\nBug: 149050485\nTest: manually unplugged/replugged, \"adb track-app\",\n      \"adb track-jdwp\"\nChange-Id: Id1f1a920e1afc148c7e4d2add790baab796178e1\n"
    },
    {
      "commit": "64fab7573566c80fb3003a3b7ca9063e240e8db5",
      "tree": "082ff2b553343e1c70db8d02a92ccb94d0f5dc47",
      "parents": [
        "290ccb5dfe946d4dd39a6b8e584dd11ecd61779e"
      ],
      "author": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Tue Jan 21 13:19:42 2020 -0800"
      },
      "committer": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Fri Feb 21 21:07:13 2020 +0000"
      },
      "message": "[adbwifi] Add A_STLS command.\n\nThis command will be sent by adbd to notify the client that the\nconnection will be over TLS.\n\nWhen client connects, it will send the CNXN packet, as usual. If the\nserver connection has TLS enabled, it will send the A_STLS packet\n(regardless of whether auth is required). At this point, the client\u0027s\nonly valid response is to send a A_STLS packet. Once both sides have\nexchanged the A_STLS packet, both will start the TLS handshake.\n\nIf auth is required, then the client will receive a CertificateRequest\nwith a list of known public keys (SHA256 hash) that it can use in its\ncertificate. Otherwise, the list will be empty and the client can assume\nthat either any key will work, or none will work.\n\nIf the handshake was successful, the server will send the CNXN packet\nand the usual adb protocol is resumed over TLS. If the handshake failed,\nboth sides will disconnect, as there\u0027s no point to retry because the\nserver\u0027s known keys have already been communicated.\n\nBug: 111434128\n\nTest: WIP; will add to adb_test.py/adb_device.py.\n\nEnable wireless debugging in the Settings, then \u0027adb connect\n\u003cip\u003e:\u003cport\u003e\u0027. Connection should succeed if key is in keystore. Used\nwireshark to check for packet encryption.\n\nChange-Id: I3d60647491c6c6b92297e4f628707a6457fa9420\n"
    },
    {
      "commit": "ba73ecbf305a20692f01b661c6c13a91a6a4411d",
      "tree": "c1eaf4fdb957c7ed2bf0b173118fb772f37d8680",
      "parents": [
        "a0b1bd8f69fa945e3624e2f5cf11601adc255b32"
      ],
      "author": {
        "name": "Kevin Brodsky",
        "email": "kevin.brodsky@arm.com",
        "time": "Mon Jan 13 14:19:18 2020 +0000"
      },
      "committer": {
        "name": "Kevin Brodsky",
        "email": "kevin.brodsky@arm.com",
        "time": "Mon Jan 13 14:48:49 2020 +0000"
      },
      "message": "Remove leftover support for target-as-host\n\nSupport for target-as-host was removed by a30c38b3aa7c (\"Fix win_sdk\nbuild.\"), so ADB_HOST_ON_TARGET is never defined.\n\nTest: build\nChange-Id: I5ab27e68208677266e2e4272bc2bae7d6a097c5d\n"
    },
    {
      "commit": "84613875270fb3d083bf5da280ffc6f32529270d",
      "tree": "c9ec302978f2c9bf5b531d5fdb33a74a1ae1ea3e",
      "parents": [
        "cf8040b9d0936306c06aaeb961fb9d8b72f67509"
      ],
      "author": {
        "name": "Jason Jeremy Iman",
        "email": "jasongustaman@google.com",
        "time": "Fri Jul 19 12:44:39 2019 +0900"
      },
      "committer": {
        "name": "Jason Jeremy Iman",
        "email": "jasongustaman@google.com",
        "time": "Wed Dec 04 10:05:05 2019 +0900"
      },
      "message": "Enable \"localfilesystem\" UNIX domain socket for ADB.\n\nThis patch introduce \"service.adb.listen_addrs\", a new\nstring type property, while keeping the old properties.\nThe new property added in this patch is used to listen\non UNIX domain socket \"localfilesystem\".\n\n\"service.adb.listen_addrs\" can be used to listen on\nmultiple addresses, such as tcp:5555 and tcp:5556.\nIt is separated by \u0027,\u0027 (comma) character.\n\nIn the process of introducing the new socket type, the\nmethod tcp_connect is removed and combined into\nsocket_spec_connect.\n\nWithout specifying using the new property, adb will\ntry to listen on both tcp and vsock (following the\nprevious implementation).\n\nSome examples of the new property value are:\n  - \"tcp:5555\"\n  - \"vsock:5555\"\n  - \"localfilesystem:/tmp/test\"\n  - \"tcp:5555,vsock:5555\"\n\nBug: 133378083\nTest: On master-arc-dev:\n        adb root;\n        setprop service.adb.listen_addrs localfilesystem:\n\t    \u003cpath_to_socket\u003e;\n        adb connect localfilesystem:\u003cpath_to_socket\u003e;\n        adb -s localfilesystem:\u003cpath_to_socket\u003e shell;\n\t    inside Chrome OS.\nTest: On aosp_bluefin:\n        setprop service.adb.listen_addr tcp:5555;\n        adb connect \u003cIP\u003e:5555; adb shell;\nTest: On aosp_bluefin:\n        setprop service.adb.tcp.port 5555;\n        adb connect \u003cIP\u003e:5555; adb shell;\nTest: On aosp_bluefin:\n        setprop service.adb.listen_addrs tcp:5555,tcp:6666;\n        adb connect \u003cIP\u003e:5555; adb shell;\n        adb connect \u003cIP\u003e:6666; adb shell;\nTest: On aosp_bluefin:\n        ./adb_test;\nTest: On cuttlefish:\n        launch_cvd;\n        adb -s 127.0.0.1:6520 shell;\nTest: Ran host tests:\n        ./adb_test;\n        ./adb_integration_test_adb;\n        ./adb_integration_test_device;\n\nChange-Id: I8289bf0ab3305cf23ce5695ffba46845d58ef6bb\n"
    },
    {
      "commit": "5b5e7f29bd4553cf237d728944b18345ad234c2e",
      "tree": "fd8114f85ff56da4a1762573d25a16b893cabd3c",
      "parents": [
        "dcc336491233462d1bd49513695c5565f27636cc",
        "b51193a16a5be0da7f86c9b190825687e35ff345"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jul 09 13:35:38 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 09 13:35:38 2019 -0700"
      },
      "message": "adb: move fdevent to its own folder.\nam: b51193a16a\n\nChange-Id: I1f9e0da9a94c8889c378e8ca9dd9b37a48dca58b\n"
    },
    {
      "commit": "b51193a16a5be0da7f86c9b190825687e35ff345",
      "tree": "4fbf256ce42a18d7533a38ca4371bd871ed0c0a0",
      "parents": [
        "8c1cb8779b968e4ab948a4e96e4b474eb8e0dee8"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 28 13:50:37 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jul 08 14:37:27 2019 -0700"
      },
      "message": "adb: move fdevent to its own folder.\n\nPreparatory refactoring for platform-specific implementations.\n\nTest: mma\nChange-Id: I0f600122ac89241788c5f3300f362fd9ef02ddcd\n"
    },
    {
      "commit": "02b7427480b2e22f14bd602a9f49b15e33d4fdf3",
      "tree": "981f4539a9b5430ed59e00d418653d5e67ebce5d",
      "parents": [
        "cf8c4478c6aa167200d757b25ba337004172ab95"
      ],
      "author": {
        "name": "Michael Groover",
        "email": "mpgroover@google.com",
        "time": "Thu Apr 25 18:33:35 2019 -0700"
      },
      "committer": {
        "name": "Michael Groover",
        "email": "mpgroover@google.com",
        "time": "Thu May 09 16:05:40 2019 -0700"
      },
      "message": "Notify the framework when an adb key is authorized\n\nBug: 124076524\nTest: atest AdbDebuggingManagerTest\nChange-Id: If73b81ca73ba4d64763cf49c1bbe42de81fa1cb6\n"
    },
    {
      "commit": "81e9c42acfaf17b81ec576365c0ba646438c07fc",
      "tree": "7ee278154eeb305d522284cc50abeccb70d1374c",
      "parents": [
        "641c7080e7146eb5722efba28e9d652d8aaa5484"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sun Apr 07 23:24:03 2019 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Fri Apr 26 12:27:17 2019 -0700"
      },
      "message": "adb: Recognize rescue mode.\n\nThis CL adds client support to recognize the rescue mode (which will be\nserved by recovery image). It also allows waiting for a device to enter\nrescue mode. The support for the actual rescue commands will be added in\nfollow-up CLs.\n\nBug: 128415917\nTest: `adb devices` recognizes devices under rescue mode.\nTest: `adb wait-for-rescue` waits for device to be in rescue mode.\nChange-Id: I367d7339fe68006aba09a1e3db6370d472296676\nMerged-In: I367d7339fe68006aba09a1e3db6370d472296676\n(cherry picked from commit 55d407ec4a0b23f1e20db298b4989068a820087f)\n"
    },
    {
      "commit": "9d6eca59402f9b25040e6ccd4f0d0e8420a399ba",
      "tree": "04c4d923f6226147ed76a39f269482557dfcfbbf",
      "parents": [
        "beaa884078bcab7316678c3259303199b201addc"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sun Apr 07 23:24:03 2019 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Wed Apr 17 13:47:02 2019 -0700"
      },
      "message": "adb: Recognize rescue mode.\n\nThis CL adds client support to recognize the rescue mode (which will be\nserved by recovery image). It also allows waiting for a device to enter\nrescue mode. The support for the actual rescue commands will be added in\nfollow-up CLs.\n\nBug: 128415917\nTest: `adb devices` recognizes devices under rescue mode.\nTest: `adb wait-for-rescue` waits for device to be in rescue mode.\nChange-Id: I367d7339fe68006aba09a1e3db6370d472296676\n"
    },
    {
      "commit": "070e8ba5b57f929de4bef1acea610387dc6544d5",
      "tree": "4c01522122c8cdcf6350f771c37250b1b7ec3b0c",
      "parents": [
        "ff707d38e8ef17a6d996d6f5bdfb886b402299ff"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 22 15:26:15 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 25 13:59:00 2019 -0800"
      },
      "message": "adb: increment server version.\n\nIncrement the server version for adb_connect with transport id, and\nwait-for-disconnect.\n\nBug: http://b/124244488\nTest: none\nChange-Id: Ib50d289b68fce4befbf1f5d9507d7e6f9cc1f4f5\n"
    },
    {
      "commit": "b13f3cd7605ca0124ccc1e19ae42fc18d07ab661",
      "tree": "305259d6ea280c68ff3fd68c7ff76e0757da6ad5",
      "parents": [
        "10779bdb6b4c736dedbf2b8e70f21fd505e9ef98"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 20 20:37:26 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 25 13:49:25 2019 -0800"
      },
      "message": "adb: tell the client what transport it received.\n\nPrerequisite for making `adb root` wait for the device that it told to\nrestart to disappear: the client needs to know which transport to wait\non.\n\nBug: http://b/124244488\nTest: manual\nChange-Id: I474559838ad7c0e961e9d2a98c902bca3b60d6c8\n"
    },
    {
      "commit": "0565ae03921b3af8339b0c42127f1fffcdc0accf",
      "tree": "e83b7127708e290bfa38553fef9383448e373414",
      "parents": [
        "cd30bb31f1c251d1a6b4b16244b26b8689dfe4eb"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 22 13:41:55 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 25 13:49:25 2019 -0800"
      },
      "message": "adb: switch host_service_to_socket to string_view.\n\nTest: manual\nChange-Id: I09b83cc82edb10c1a51ecc5ebb8d9fe5294222c3\n"
    },
    {
      "commit": "cd30bb31f1c251d1a6b4b16244b26b8689dfe4eb",
      "tree": "bea373e280d09fbe4d0efd494a87206a382195ed",
      "parents": [
        "2f1cac23b68f53d5f69d39dc954f9ece56660ee9"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Feb 20 19:30:59 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 25 13:49:25 2019 -0800"
      },
      "message": "adb: switch handle_host_request to string_view.\n\nTest: test_adb.py\nTest: test_device.py\nChange-Id: Ideae5262a6dff2e27c50f666144d48f874837290\n"
    },
    {
      "commit": "4f3fa0541c52ba20f9b1a41c6ae46733fcd1595f",
      "tree": "22b391dba1ee50a005eb2c8b057d866b1874fa2a",
      "parents": [
        "ea046b54163c8e65c274df6b9b47a6356f86a7c8"
      ],
      "author": {
        "name": "Alex Buynytskyy",
        "email": "alexbuy@google.com",
        "time": "Thu Feb 21 14:22:51 2019 -0800"
      },
      "committer": {
        "name": "Alex Buynytskyy",
        "email": "alexbuy@google.com",
        "time": "Sat Feb 23 06:15:03 2019 +0000"
      },
      "message": "Adding EXEC version of calling ABB.\n\nThis is corresponding to exec: command of adb and allows for simplifed calls\nto binder without shell protocol.\n\nBug: 111621042\nTest: manual\n\nChange-Id: Id6935cd53e351388ecf6d2d15f3a204cb871536a\n"
    },
    {
      "commit": "c2705969e945b115ca42bc6365e90383f5c078b6",
      "tree": "56eda95c2736e1494bbc1362d8ad964607b4899c",
      "parents": [
        "0560feb3bc387398394aa86b5066624f183cd97e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 23 15:36:42 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 23 17:11:13 2019 -0800"
      },
      "message": "adb: convert more stuff to unique_fd.\n\nTest: adb_test\nTest: adbd_test\nTest: test_device.py\nChange-Id: Ie75f0b811d2c75d508e6ecffb40579308f5789d0\n"
    },
    {
      "commit": "ef34f0105c05f4d84480525aef30c29541121027",
      "tree": "d6f5b58f7bb905f84f4f50a1fc9a67769c3ea03d",
      "parents": [
        "6dd5f770534d52c3624cd8500d3f51042902598b"
      ],
      "author": {
        "name": "Alex Buynytskyy",
        "email": "alexbuy@google.com",
        "time": "Wed Dec 12 10:48:50 2018 -0800"
      },
      "committer": {
        "name": "Alex Buynytskyy",
        "email": "alexbuy@google.com",
        "time": "Mon Jan 07 15:45:11 2019 +0000"
      },
      "message": "Adding Android Binder Bridge (abb) utility launched from adbd.\n\nOnce launched, abb will listen for incoming Binder cli requests.\nExecuting in-process provides 6x latency improvement (125ms vs 25ms on\nPixelXL) for commands like \u0027package path\u0027\n\nIntended usage by Android Studio for fast deployment and patching of APKs.\n\nTest: manual\nBUG: 111621042\n\nChange-Id: Ica84eb2ec9628efa441ecd627b119f3361feaf9f\n"
    },
    {
      "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": "f0fa1e40c90f2be0308a8101d6c386622ed62e33",
      "tree": "9991cf238992451a3ebcaa7d636a832e91b321e0",
      "parents": [
        "2d62747b52fe32c69807c1bdf33dc6a7924e0e87"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Dec 13 13:06:03 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Dec 21 11:52:56 2018 -0800"
      },
      "message": "adb: switch daemon_service_to_fd 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: I298517b688650c9d94bf837284e0264ca0ac6702\n"
    },
    {
      "commit": "3edf8079dd432adbeb6956c26079c0c81e235a0c",
      "tree": "698e0345b414974a0484b49e121b564caa4a1ec5",
      "parents": [
        "7b438faadd0c87b97ae5c34fefcab9ef7b75b288"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Nov 16 15:40:16 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Dec 12 12:54:28 2018 -0800"
      },
      "message": "adbd: add source/sink services.\n\nAdd some services that skip the service fd to see how much of a benefit\nit\u0027ll be to eliminate it.\n\nTest: adb raw source:$((300 * 1024 * 1024)) | pv \u003e /dev/null\nTest: dd if\u003d/dev/zero bs\u003d1M count\u003d100 | pv | adb raw sink:$((100 * 1024 * 1024))\nChange-Id: I042f25f85b16ae9869cb1f1e306d8671b024ed97\n"
    },
    {
      "commit": "8496bf5d9a8a1b7968ff2db7ddd3ddc243dd7496",
      "tree": "27d16a36b860b1058d25cad20b4772e20ce60996",
      "parents": [
        "84c22d4bf367f5c0fb67080aa84e4171c43f67e4"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 01 13:16:15 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Nov 01 13:25:31 2018 -0700"
      },
      "message": "adb: switch version back to 40.\n\nThe version bump we did wasn\u0027t actually needed, since adbd doesn\u0027t\ncheck for either feature flag we added. Revert the change and clarify\nthe comment suggesting the version bump when adding features.\n\nTest: ./test_adb.py\nTest: ./test_device.py\nChange-Id: I92e7f392bcb36b3bf9a236f2d31ba5133de8d72a\n"
    },
    {
      "commit": "dcb4c36a40d8a30e28b3aee431bb6dea8fa98346",
      "tree": "0907238c3b3b64f797beada51d2691e1b09e1452",
      "parents": [
        "f1d4b42a6a1253355ff844c69e70d982170639b9"
      ],
      "author": {
        "name": "Dario Freni",
        "email": "dariofreni@google.com",
        "time": "Thu Oct 04 16:26:40 2018 +0100"
      },
      "committer": {
        "name": "Dario Freni",
        "email": "dariofreni@google.com",
        "time": "Tue Oct 23 11:07:16 2018 +0100"
      },
      "message": "Accept apex packages as argument.\n\nBug: 112669193\nTest: Successfully reaches PackageManager. Doesn\u0027t break existing flows.\nChange-Id: If4a173e290ebf0b70beb97111a6d75400da7ec8d\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": "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": "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": "5607e920507629c0bbaed5a9a30a2c13e16619db",
      "tree": "8057899dae888256f7a40d888efc6da42baee08e",
      "parents": [
        "41da100f3a9031d76b9e6debafb16fe623d1ec8f"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 18:15:52 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 18:49:37 2018 -0700"
      },
      "message": "adb: split daemon services out of service_to_fd.\n\nLet minadbd override daemon services by pulling out the daemon services\ninto a separate translation unit, that isn\u0027t compiled into libadbd.\n\nBug: http://b/111831478\nTest: mma\nChange-Id: Iecfebea371e03864108eca9a4d2e9cfd5db34749\n"
    },
    {
      "commit": "fa3107e2477de7b7554816ac5e2edeeef058e1b6",
      "tree": "d07cb6886f12b3ef7696b79a157e5df2dabea2be",
      "parents": [
        "d8d51f4fc05fe76d463812be51916ad786570f02"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 17:21:49 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 18:49:37 2018 -0700"
      },
      "message": "adb: fix register_socket_transport related double-closes.\n\nMultiple codepaths were closing the fd they passed into\nregister_socket_transport on failure, which would close the fd itself.\n\nSwitch things over to unique_fd to make it clear that we don\u0027t actually\nhave to close on failure.\n\nTest: mma\nChange-Id: I2d9bdcb1142c24931d970f99ebdf9a8051daf05c\n"
    },
    {
      "commit": "ce7a284729ae844c77ace2a45376c1a62d09ea1d",
      "tree": "9f1e65c229efba80e93657ba94d72d590e58bca8",
      "parents": [
        "9b4eb9b8603efddf1bab1ef0fe2d3f87692ba365"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Wed Jul 18 19:40:12 2018 -0700"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Wed Jul 18 20:38:10 2018 -0700"
      },
      "message": "adb: Modernize the service creation\n\nThis change removes the void* argument passing and instead uses C++11\nfeatures to avoid having to handle memory manually.\n\nBug: None\nTest: python ./system/core/adb/test_device.py\n\nChange-Id: I6380245b2ca583591810e3e363c67c993a107621\n"
    },
    {
      "commit": "874c941b99ddb6525b4f02e731a772f13ae64dca",
      "tree": "441a2fe681f1b73c9597db58b9d3aca0630dc79b",
      "parents": [
        "facb3d48e4b9a6dcec12b91d1ef3a8d21ce39148"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 26 13:06:15 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 26 13:07:21 2018 -0700"
      },
      "message": "Simplify __attribute__((__printf__)) use.\n\nWe don\u0027t need this now everyone\u0027s using clang...\n\nBug: http://b/69933068\nTest: ran tests\nChange-Id: I88f0cf03981ade47e210387fd6f3a2706dfeb9b8\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": "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": "887c8509bd9da67828127b6f8aac9ae5ceaebe5a",
      "tree": "652494a2dcd3605099b4db13cd71ee574b62a9c9",
      "parents": [
        "4b80850ae52fe0b7006b05518aa04aa623842f0c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Mar 20 13:10:26 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Mar 21 15:13:07 2018 -0700"
      },
      "message": "adb: delete vestigial SHELL_EXIT_NOTIFY_FD.\n\nThere exists no path through which a value other than -1 can be written\nto the SHELL_EXIT_NOTIFY_FD.\n\nTest: adb_test\nTest: adbd_test\nTest: python test_device.py\nChange-Id: I0630c302ba06bc76917f0445aea75d2dbe1dc865\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": "395b86a8a087416969f76b62915cccab2e5b5f7d",
      "tree": "1aa553bbe4387160c803e2991f56413a07f61d98",
      "parents": [
        "30c4266dba6be6e5833f3d0073cc9408349c1e9a"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Sun Jan 28 20:32:46 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Jan 30 15:22:41 2018 -0800"
      },
      "message": "adb: extract atransport\u0027s connection interface.\n\nAs step one of refactoring atransport to separate out protocol handling\nfrom its underlying connection, extract atransport\u0027s existing\nhand-rolled connection vtable out to its own abstract interface.\n\nThis should not change behavior except in one case: emulators are\nnow treated as TCP devices for the purposes of `adb disconnect`.\n\nTest: python test_device.py, with walleye over USB + TCP\nTest: manually connecting and disconnecting devices/emulators\nChange-Id: I877b8027e567cc6a7461749432b49f6cb2c2f0d7\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": "d4bf94d72db6e6fc18f21331ed0c2d9cb0a9d472",
      "tree": "a706ecb477155447b71c4ad03b8d7804e5ccdf47",
      "parents": [
        "299da1cf8e0c26a16617f107fa6f863ef42695e6"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Oct 04 15:05:40 2017 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Oct 13 07:31:49 2017 -0700"
      },
      "message": "adb: clang-format for adb.h and client/usb_windows.cpp\n\nFuture adjustments triggered cleanup and transition of adb/adb.h and\nadb/client/usb_windows.cpp to be moved to Android coding standard.\n\nTest: build\nBug: 63736262\nBug: 38446744\nBug: 66912053\nChange-Id: I6eb3f0665b9670b9b3d5f5397f271605b48f4ff0\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": "b4ef19ce1bb07f4ef3d235e8fb0f00103143b742",
      "tree": "1d52005fa240a4009d7f28c6ff0f1760e876e2d9",
      "parents": [
        "39715d8d3fd0b864cc53cbdc3fd02860ff578e4e",
        "a2cb8de5e68067a5e1d002886d5f3b42d91371e1"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Aug 29 03:28:26 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 29 03:28:26 2017 +0000"
      },
      "message": "Merge \"adb: Use kernel aio for functionfs.\""
    },
    {
      "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": "a2cb8de5e68067a5e1d002886d5f3b42d91371e1",
      "tree": "407601ce55ea1ce100d9a99133072dba189c99b2",
      "parents": [
        "3bb1b57f4c4a2e97ce4bf34801a5e1fcd7c5ee1c"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Tue Jul 18 14:07:57 2017 -0700"
      },
      "committer": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Thu Aug 10 15:12:47 2017 -0700"
      },
      "message": "adb: Use kernel aio for functionfs.\n\nThis method works around the downsides of\nENDPOINT_ALLOC, namely that it is not affected\nby memory fragmentation and it uses an upstream\ninterface.\n\nAlso add libasyncio to provide the necessary syscalls\nto both adb and mtp.\n\nAdd some small optimizations to file_sync.\n\nBug: 37916658\nTest: run adb push/pull\nChange-Id: If3b3be02b5e2d4f9cffec1b8ddc02a5768a51a1f\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": "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": "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": "f0e239cdac5be6e5f78c70fb4527a53e4cef9541",
      "tree": "bc63720d8d8e05ca086a9833feb26da016b32746",
      "parents": [
        "76f9c72be714c8e91087954f8424e0109a182fef"
      ],
      "author": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Fri Feb 10 17:45:27 2017 -0800"
      },
      "committer": {
        "name": "Jerry Zhang",
        "email": "zhangjerry@google.com",
        "time": "Mon Feb 13 18:19:36 2017 -0800"
      },
      "message": "adb: Set max socket sizes to larger values.\n\nThis improves performance of push/pull.\n\nTest: adb push/pull multi GB files.\nBug: 31722483\nChange-Id: Ia01574c3db6a740d7a7e64ba1f5bc1fc279fb3f6\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": "0dde9c8b37b7cf620fda211e6c244aadaf45fa22",
      "tree": "23ca1e47ecfc349f14802b6945a6c4b2ebf93fdd",
      "parents": [
        "a8c21dc4f81557817f900c5575e15a8cda0c8988"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 11 14:39:19 2017 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jan 11 15:00:03 2017 -0800"
      },
      "message": "adb: remove support for legacy f_adb interface.\n\nEverything should be using the functionfs interface instead by now.\n\nBug: http://b/34228376\nTest: grepping for f_adb, android_adb in source tree\nTest: m\nChange-Id: I6bc41049c49a867499832588dac8ed108c636c11\n"
    },
    {
      "commit": "a2cf37534592043ec3e1e16890ccc3d255fd5ea7",
      "tree": "7b82a61e786237af277af1886c6ddc9614f494b2",
      "parents": [
        "75e96bb783f8460ca7e843d6f4906f117719689f"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 05 17:11:34 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 05 17:38:30 2016 -0800"
      },
      "message": "Revert \"Revert \"adb: extend sync protocol\u0027s stat support.\"\"\n\nThis reverts commit 31a96f7fd9189dde01b362f64aceb1bc2097c094.\n\nAdd functions to translate errno to and from the linux asm-generic\nvalues, since mips has different values.\n\nBug: http://b/33058958\nTest: python test_device.py with both old and new adbd\nChange-Id: I1a122235f3e793ed10b3bf3ad293388015134150\n"
    },
    {
      "commit": "31a96f7fd9189dde01b362f64aceb1bc2097c094",
      "tree": "5bf5521de666d284e7c86d172d6519b9796de828",
      "parents": [
        "4891a152fb860cc8008a8456bb2a594fc40105d1"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 05 13:16:02 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Dec 05 13:16:02 2016 -0800"
      },
      "message": "Revert \"adb: extend sync protocol\u0027s stat support.\"\n\nThis reverts commit 25a992e758102489e98fbe6b2eb229be580b77e2.\n"
    },
    {
      "commit": "25a992e758102489e98fbe6b2eb229be580b77e2",
      "tree": "9bc9b02f41488133afb12e2ef9414e0ab9b3a4de",
      "parents": [
        "cb6497acec3f4aa5989692a3b29aca235847f1de"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Nov 21 16:06:43 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Nov 30 13:23:21 2016 -0800"
      },
      "message": "adb: extend sync protocol\u0027s stat support.\n\nExtend the file sync protocol to support calling regular stat (instead\nof lstat), return error codes, and provide the entire stat struct.\n\nBug: http://b/33058958\nTest: python test_device.py with both old and new adbd\nChange-Id: I841123debc380f86194a19e91c97d85160112144\n"
    },
    {
      "commit": "5edb12becd492421f760aaceeec01fab39b07bff",
      "tree": "9e820eaefdb5877e37e83953b9d0fba15196634c",
      "parents": [
        "0eb9093dd9bcae966c018c97023e610e8f897227"
      ],
      "author": {
        "name": "Lingfeng Yang",
        "email": "lfy@google.com",
        "time": "Thu Oct 06 12:22:55 2016 -0700"
      },
      "committer": {
        "name": "Bo Hu",
        "email": "bohu@google.com",
        "time": "Tue Oct 11 23:19:51 2016 +0000"
      },
      "message": "Fix adb flakiness on reboot\n\nbug: 31950237\n\nThere are two lists of active ADB transports (devices),\nand with the emulator, they can go out of sync.\n\nThis CL more conservatively checks if there are no\ntransports in either list before commiting to\nregister a new transport for the emulator.\n\n(cherry picked from commit edaedfd5da41b2f5aa14b4d52742a6d8caa49214)\n\nChange-Id: Id1201dc59c70825881dad80925c2e5bcc13dbd5e\n"
    },
    {
      "commit": "0eb9093dd9bcae966c018c97023e610e8f897227",
      "tree": "7372ecbe2be4e83526eccfe4dc33d753c1846119",
      "parents": [
        "81a870e2f0bb2a3e11e68b7029ef301c9479b823",
        "08dda210252061331fb948f5a7d49d699ee9a5e2"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Oct 10 22:50:13 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 10 22:50:13 2016 +0000"
      },
      "message": "Merge \"Remove useless arguments from is_adb_interface.\""
    },
    {
      "commit": "08dda210252061331fb948f5a7d49d699ee9a5e2",
      "tree": "270d578ea9678640de7ff680ca95a889b933f10b",
      "parents": [
        "b4e8ba2768d060465ad4fe9f0d39c809b08b93d7"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Sep 26 21:18:58 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Oct 10 13:44:00 2016 -0700"
      },
      "message": "Remove useless arguments from is_adb_interface.\n\nTest: mma\nChange-Id: I8b7b411d7d5ec9d401b61ed8f817b98c61114d4f\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": "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": "042c351ae04d355a65d4dcf970b497379ad9e65e",
      "tree": "694ca45a8cdb7b5d67dbd9be0ce5b86ccd129f4a",
      "parents": [
        "8c5cf6280e69429c4e22f85bb24f805d2bfe5c4f"
      ],
      "author": {
        "name": "Felipe Leme",
        "email": "felipeal@google.com",
        "time": "Tue Jul 19 17:07:22 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Aug 30 13:06:23 2016 -0700"
      },
      "message": "DO NOT MERGE: Split bugreport() into its own file and added unit tests.\n\nbugreport() will be soon refactored to track progress, which will\nrequire more comprehensive unit tests.\n\nAs such, it\u0027s better to move it to its own files, which in turn also\nrequires moving send_shell_command() and usage() to commandline.h.\n\nFixes: 30100363\nBug: 30268737\n\nChange-Id: I3cdf114a0b5547293320042ff0749a60886440b0\n(cherry picked from commit a9be4f3b16ca3af7bb5ee3c09c0f511d6a0d1a5b)\n(cherry picked from commit b9f1b1cf41f3c9e28b630c4e3656aef4f08e85be)\n"
    },
    {
      "commit": "f401eadb0467622c49c89a91edaf7956fa4a9e4d",
      "tree": "69cfba0b5135b5abf991846ce0f49fe335005e29",
      "parents": [
        "199a08070eae69695a8f4f49ce603ca3a8df708c"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Apr 29 16:53:52 2016 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue May 24 16:38:47 2016 -0700"
      },
      "message": "adb: retry connecting disconnected emulators instead of always looping.\n\nPreviously we loop through local ports every second, this patch improves\nthe strategy by retrying only just disconnected emulators.\n\nBug: 26468076\nBug: 19974213\nBug: 22920867\n\nChange-Id: I43ccb746922d104202b0f81a3d163d850bbc890e\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": "7b78077363c877010670f0db68ab07e8aac628a9",
      "tree": "e3bc1a664522dba8aee359afd01904f2598a4f0b",
      "parents": [
        "c6e3b12e2b86cf95c7f5b8c1fac3d47a73418508"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 15 11:35:00 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Apr 15 14:54:43 2016 -0700"
      },
      "message": "adb: bump the server version to 36.\n\nThe recent `adb root` changes are incompatible with older versions of\nthe server. Bump the version number to force the server to restart.\n\nBug: http://b/28194507\nChange-Id: I970806e3b68c1f8e3273a4b1f0ecc4aca5086be9\n"
    },
    {
      "commit": "2930cdc3bf241aa093cf007209bb0206597da3da",
      "tree": "e938a7da1869a005464f934d1507681fce3fb17c",
      "parents": [
        "ce50ecf7ed01da1575454c6fc10f64a711019e39"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jan 15 15:17:37 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jan 15 15:25:31 2016 -0800"
      },
      "message": "adb: tag fatal, fatal_errno with printf attribute.\n\nAlso, fix bugs that this uncovered. In particular, the sysdeps_win32\nFATAL macro would only print __FUNCTION__.\n\nChange-Id: I6307ec9749edec21b4fee192e135a86ec445c84b\n"
    },
    {
      "commit": "70097493adcaca18deff549e67fb1bb92b29a795",
      "tree": "bda95d87022978ece397afada26c39b634d9c97a",
      "parents": [
        "e1e0f23c158412c0c85cf943861e3b1caaf36c19"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 11 19:07:01 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 14 10:50:21 2015 -0800"
      },
      "message": "Share the new adb USB diagnostic code with fastboot.\n\nBug: http://b/26134129\nChange-Id: Ieaf0651c7b3f8a028760982091ec63a21a5484ba\n"
    },
    {
      "commit": "aafa096090ad39896b3e4c9a753a25a1e529bf8b",
      "tree": "ed721614fe892c988815cf0957ee8004e553ab9e",
      "parents": [
        "c52577725185f3038ca79a9bdba35fdde0ff6d44",
        "6e5c7ebb7a72bb7dd3e3fd9657b3dd6b5663850d"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Dec 08 16:12:22 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Dec 08 16:12:22 2015 +0000"
      },
      "message": "Merge \"adb: add help text for USB permission errors.\""
    },
    {
      "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": "6e5c7ebb7a72bb7dd3e3fd9657b3dd6b5663850d",
      "tree": "972e336c206f59eecfacbc14368d8cf5348d78de",
      "parents": [
        "0a2a78545745036997d3f6d543456887c23c3eb8"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Dec 02 15:14:31 2015 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Dec 03 11:00:47 2015 -0800"
      },
      "message": "adb: add help text for USB permission errors.\n\nThe current permission messages can be confusing for users who don\u0027t\nknow about udev and USB access permissions. This CL adds some checks to\ntry to identify common udev problems, and adds a link to online\ndocumentation.\n\nExample messages:\n\n1) adb server is in plugdev group but access is still denied:\n$ adb devices\nList of devices attached\n082f59270073e1e3  no permissions (verify udev rules); see [developer.android.com/tools/device.html]\n\n2) plugdev group exists but adb server is not in it:\n$ adb shell\nerror: USB permission failure: udev requires plugdev group membership.\nSee [developer.android.com/tools/device.html] for more information.\n\n3) plugdev group does not exist:\n$ adb shell\nerror: USB permission failure.\nSee [developer.android.com/tools/device.html] for more information.\n\nBug: http://b/25777880\nChange-Id: I536565adc12ab657c75151309795674181205db0\n"
    },
    {
      "commit": "4919c176fe05d9fc9f3f8f57065dd650f0fa12b6",
      "tree": "7cb1d9432f8d6813df9a986b45f12eb0bab8d7fc",
      "parents": [
        "d9449012c8d4e75f4b68b549b96cc8b8b324b011"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 18 18:07:48 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 20 09:42:23 2015 -0800"
      },
      "message": "Avoid SIGPIPE in adb.\n\nWe\u0027re now able to send packets faster than the device can handle them,\nmeaning that sometimes we\u0027re several packets through before the device\nsays \"hey, wait, I can\u0027t write\" and closes the connection. At best this\nled to us reporting that we couldn\u0027t sync because \"Connection reset\";\nat worst we\u0027d get SIGPIPE because we were still streaming to a connection\nthat had already been closed.\n\nThis change renames adb_main adb_server_main, and moves the ignoring of\nSIGPIPE into adb_commandline so it applies to both client and server (but\nnot adbd).\n\nThis change doesn\u0027t address the \"wrong error message\" part of the problem,\nbut at least it means you\u0027ll get *an* error message.\n\nBug: http://b/25230872\nChange-Id: Ic60e4d13ed03fdcdf0d5cbc97201ebd1097c16ed\n"
    },
    {
      "commit": "1e2f7dccc49adce77ec3587c1b98ac3ccda05f9e",
      "tree": "1a6bca6e36ff9dd8bcd6e76e4ddc075332b7b91f",
      "parents": [
        "08e27392e97bdd6c0ec6302943809c8a017c64ae"
      ],
      "author": {
        "name": "Todd Kennedy",
        "email": "toddke@google.com",
        "time": "Tue Nov 03 16:53:08 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Nov 06 18:00:05 2015 -0800"
      },
      "message": "use new cmd command\n\nInstead of using the pm command, \u0027adb install\u0027 and \u0027adb uninstall\u0027 will now\nuse the cmd command. Additionally, the APK will be streamed directly to\npackage installer instead of creating a temporary file.\n\n(cherry-pick of d039800a4e008b52c532f901e3bb34b40877cf30.)\nChange-Id: Ie7529afa5b039d29cc8183f36085ff4e66b3457a\n"
    },
    {
      "commit": "22fc5e99f10567cfe2c64a4426dc2c06c968b615",
      "tree": "5671a74ce54040916cb3e51eaa9d0a717aa9b819",
      "parents": [
        "5f32b962de5830768db9fafeb561960bf60440b9"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Sep 30 13:35:42 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Sep 30 15:40:09 2015 -0700"
      },
      "message": "adb: put legacy shell: service back in.\n\nddmlib does not use the ADB client, but instead connects directly to\nthe adb server. This breaks some of the assumptions I previously made\nwhen enabling the shell protocol.\n\nTo fix this, the adb server now defaults to no protocol for the\nstandalone command, and the shell protocol must be explicitly requested\nby the client. For example:\n  shell:echo foo     -- no shell protocol\n  shell,v2:echo foo  -- shell protocol\n\nAs long as I was touching the shell service arguments I also changed\nthem to no longer duplicate the command-line arguments. This allows\nmore flexibility to change the adb client CLI if necessary and makes\nthe code more readable.\n\nBug: http://b/24148636\nChange-Id: I28d5ae578cf18cbe79347dc89cea1750ff4571a8\n"
    },
    {
      "commit": "6d5fad3fd225f1aecb407730c2d24eb339c0d6e6",
      "tree": "7d0cd186ed324a40c4f441b8139d4aefa3101436",
      "parents": [
        "19bec5b329fe202795688bfb76d77f4560adf2c6"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 25 08:37:13 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 25 09:59:31 2015 -0700"
      },
      "message": "adb: bump server version to prevent feature mismatch.\n\nDevices get a list of supported features from the adb server, not the\nclient, so a mismatch between client and server features can cause the\ndevice to use an incorrect feature set.\n\nBumping the server version is the easiest way to make sure the client\nand server features match and seems like the best solution at the\nmoment.\n\nA more automated fix could be to compare client/server features on each\nconnection and restart if they don\u0027t match. This requires an extra\nclient \u003c-\u003e server round-trip per command, but removes the need to\nmanually bump the server version number on feature change. Unless the\nfeature set changes often it didn\u0027t seem worth the extra overhead.\n\nBug: http://b/24370690\nChange-Id: I4e43825d1c15c61e5d924fc8d4110b467debde37\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": "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": "5fea4913485a45bb8d63bf5fa7a60dc80284e155",
      "tree": "255d7518386940ac458455184e0a1a653138b2b6",
      "parents": [
        "5f84bc24bde5394433265ef2cdc6cd871a405573",
        "dd01a37be868e7ae3a4c576348a896413a2989ea"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Aug 29 02:22:18 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Aug 29 02:22:18 2015 +0000"
      },
      "message": "Merge \"fatal and fatal_errno should be noreturn.\""
    },
    {
      "commit": "dd01a37be868e7ae3a4c576348a896413a2989ea",
      "tree": "f818b718301b21490eddbb0202432dfb15ae53fe",
      "parents": [
        "2adebd18ba8203fc3360a549e2029c1b3d69a144"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 28 19:13:10 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Aug 28 19:13:10 2015 -0700"
      },
      "message": "fatal and fatal_errno should be noreturn.\n\nChange-Id: I9c5d9cb5ed743d13e65112a111cc9544ec5da339\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": "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": "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": "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": "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": "43df109b4b0bb8e08cb4068c4983f32584dfef9a",
      "tree": "9946617f72ea0ea7400c68d9d56052890b7cb3d6",
      "parents": [
        "6cde25edd8c2ef313aebe5852496baa5218ee48a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 23 17:12:58 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 23 21:14:38 2015 -0700"
      },
      "message": "Report getaddrinfo failures correctly.\n\nAlso move us off the \"convenience\" function because you can\u0027t get useful\nerror reporting from it.\n\nChange-Id: I5fcc6a6d762f5f60906980a7835f01a35045be65\n"
    },
    {
      "commit": "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": "436fa6ba6aa9a4296c7d9ef54d7b9dc9350ae831",
      "tree": "11fcf8955179b1a37409fc160e275f045329a685",
      "parents": [
        "e91631558898a0b8f7a3ea2b74b7726d78c2f227"
      ],
      "author": {
        "name": "Alex Vallée",
        "email": "avallee@chromium.org",
        "time": "Fri Jul 17 15:30:59 2015 -0400"
      },
      "committer": {
        "name": "Alex Vallée",
        "email": "avallee@chromium.org",
        "time": "Fri Jul 17 16:00:29 2015 -0400"
      },
      "message": "Remove subproc events when ADB_HOST.\n\nThe code which triggers these events (via the SHELL_EXIT_NOTIFY_FD) are\nonly called from code which is already guarded by #if !ADB_HOST.\n\nChange-Id: I184414f5e090c1f08ee117e4c8c434cd4a8b5221\n"
    }
  ],
  "next": "3d978e686996480f3e5e1c7725c2bfdea276fe04"
}
