)]}'
{
  "log": [
    {
      "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": "3d155b6355670a874841d3c82f6ba57d26469199",
      "tree": "83288b55a3f20e3f3675a4a689aae0aa08dbc3b0",
      "parents": [
        "f8bc0c6b83d33b551131517b9468947a362f6631"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Thu Nov 30 14:52:40 2023 -0800"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Wed Dec 13 10:44:42 2023 -0500"
      },
      "message": "Device speed/maxSpeed retrieval + API\n\nRetrieve negotiated speed and max speed to allow tools to detect when\nuser have sub-optimal setup (a.k.a: Using USB2 cable when device is\nUSB3 capable).\n\nDesign doc: go/android_usb_speed\n\nTest: test_device.py\nBug: 314216895\nChange-Id: I848ef14236135b8428893ce80f0afdb6dd612bea\n"
    },
    {
      "commit": "10bdb9ea89098152aa575dd87b04eceeddb63f30",
      "tree": "656419fadc8aa8e8df8a3d31af79cc44ca7b26af",
      "parents": [
        "4b105073b5224f577f2789fb6e48d56a4f4a2173",
        "c0aca05770cadc9520aa00ef7a835ffdbb2f0c44"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "android-test-infra-autosubmit@system.gserviceaccount.com",
        "time": "Fri Sep 15 21:27:07 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Sep 15 21:27:07 2023 +0000"
      },
      "message": "Merge \"wait_service() needs to handle wireless/remote device(s). Currently, `adb wait-for-disconnect` returns (no-op) for non-USB.\" into main"
    },
    {
      "commit": "c0aca05770cadc9520aa00ef7a835ffdbb2f0c44",
      "tree": "696d89c64a57e3f228c06ab3ebb4ae949470d9bf",
      "parents": [
        "f78ea1a444c2220c831095ef11d2173220e4b0ae"
      ],
      "author": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Wed Aug 23 17:46:43 2023 -0700"
      },
      "committer": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Fri Sep 15 03:51:31 2023 +0000"
      },
      "message": "wait_service() needs to handle wireless/remote device(s).\nCurrently, `adb wait-for-disconnect` returns (no-op) for non-USB.\n\nBug: 290267160\n\nTest: For these tests, use the hotspot network (which will allow wireless\nadb). Alternatively, a non-corp wireless network (with less stringent\nsecurity config) would also work out (tested with both these setups).\n\naosp-osx/aosp-master-with-phones$adb kill-server\naosp-osx/aosp-master-with-phones$adb devices\nList of devices attached\n35081FDJG001TR\tdevice\n\naosp-osx/aosp-master-with-phones$adb tcpip 5555\nrestarting in TCP mode port: 5555\naosp-osx/aosp-master-with-phones$adb shell ifconfig | grep \u0027inet\u0027\n          inet addr:127.0.0.1  Mask:255.0.0.0\n          inet6 addr: ::1/128 Scope: Host\n          inet6 addr: fe80::a47b:7bff:fefc:62bc/64 Scope: Link\n          inet addr:10.0.0.101  Bcast:10.0.0.255  Mask:255.255.255.0\n          inet6 addr: 2601:644:8e80:620:7fe:431:2c23:ecf3/64 Scope: Global\n          inet6 addr: fe80::2040:22ff:feaa:8d09/64 Scope: Link\n          inet6 addr: 2601:644:8e80:620:2040:22ff:feaa:8d09/64 Scope: Global\naosp-osx/aosp-master-with-phones$adb connect 10.0.0.101:5555\nconnected to 10.0.0.101:5555\naosp-osx/aosp-master-with-phones$adb devices\nList of devices attached\n35081FDJG001TR\tdevice\n10.0.0.101:5555\tdevice\n\nTest ambiguity:\naosp-osx/aosp-master-with-phones$adb  wait-for-disconnect\nerror: ambiguous: -s needs to be specified\nTest disconnect of the wirelessly connected device - you can either\nswitch to \u0027Airplane Mode\u0027, disable Wifi on-device, or manually\ndisconnect from the network(on-device).\naosp-osx/aosp-master-with-phones$adb -s 10.0.0.101:5555  wait-for-disconnect\nA noiceable delay is to be expected since the behavior of TCP/IP is to\nexpect polling (to detect disconnects).\nVerify that the target device goes offline.\naosp-osx/aosp-master-with-phones$adb devices\nList of devices attached\n35081FDJG001TR\tdevice\n10.0.0.101:5555\toffline\n\nTest reconnect (when \u0027Airplane mode\u0027 is turned off, for e.g.):\naosp-osx/aosp-master-with-phones$adb devices\nList of devices attached\n35081FDJG001TR\tdevice\n10.0.0.101:5555\tdevice\n\n(Regression) Test wait-for-disconnect for the USB transport:\naosp-osx/aosp-master-with-phones$adb -s 35081FDJG001TR wait-for-disconnect\nDisconnect USB device physically.\naosp-osx/aosp-master-with-phones$adb devices\nList of devices attached\n10.0.0.101:5555\tdevice\n\nTest wait-for-disconnect without a -s parameter:\nSince there is only one (wirelessly connected) active transport, the -s param is not needed.\naosp-osx/aosp-master-with-phones$adb  wait-for-disconnect\naosp-osx/aosp-master-with-phones$adb devices\nList of devices attached\n10.0.0.101:5555\toffline\n\nTest reinstatement to kCsDevice (from offline) mode:\nTurn wifi on (or \u0027Airplane mode\u0027 off) on-device.\naosp-osx/aosp-master-with-phones$adb devices\nList of devices attached\n10.0.0.101:5555\tdevice\n\nTest disconnect from a secondary terminal:\nFor this, run `adb disconnect 10.0.0.101:5555` from an other terminal\n(make sure `adb wait-for-disconnect` below is launched first).\naosp-osx/aosp-master-with-phones$adb  wait-for-disconnect\naosp-osx/aosp-master-with-phones$adb devices\nList of devices attached\n\nChange-Id: I3c94dafb8a2a5769c73416e8a3eba45ce53959f0\n"
    },
    {
      "commit": "4b105073b5224f577f2789fb6e48d56a4f4a2173",
      "tree": "38116c6f01689ad5d40d15916586ca4ab7ee26e5",
      "parents": [
        "f78ea1a444c2220c831095ef11d2173220e4b0ae"
      ],
      "author": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Fri Sep 15 00:12:39 2023 +0000"
      },
      "committer": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Fri Sep 15 00:18:54 2023 +0000"
      },
      "message": "Removing comment/TODO (pending followup from https://android-review.git.corp.google.com/c/platform/packages/modules/adb/+/2751932\n\nBug: 207654388\nTest: N/A (purely documentation update).\nChange-Id: I18b9a3d89d9840bcdcb0309957cc55ffc28b88e8\n"
    },
    {
      "commit": "f78ea1a444c2220c831095ef11d2173220e4b0ae",
      "tree": "c2528aadebeca97702c63c1ad6cdaf268c45fa84",
      "parents": [
        "d23281fc8e16963a87b031ac9d800d85d367f573"
      ],
      "author": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Thu Sep 14 08:59:53 2023 +0000"
      },
      "committer": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Thu Sep 14 16:31:32 2023 +0000"
      },
      "message": "adb incorrectly sends OKAY when failing to pair (requiring Studio workaround).\n\nBug: 207654388\nTest: See below for mDNS tests.\naosp-master-with-phones$adb pair 10.0.0.222:33367\nEnter pairing code: dkfdf\n* daemon not running; starting now at tcp:5037\n* daemon started successfully\nerror: protocol fault (couldn\u0027t read status message): Undefined error: 0\naosp-master-with-phones$echo $?\n1\naosp-master-with-phones$adb devices\nList of devices attached\naosp-master-with-phones$adb pair 10.0.0.222:37927\nEnter pairing code: 470570\nSuccessfully paired to 10.0.0.222:37927 [guid\u003dadb-24121FDH20001N-zoXAul]\naosp-master-with-phones$adb devices\nList of devices attached\nadb-24121FDH20001N-zoXAul._adb-tls-connect._tcp.\tdevice\nshaju@shaju-macbookpro3.roam.internal:/Volumes/AOSP/aosp-master-with-phones$echo $?\n0\n\nChange-Id: Icbe99d83d8e9a4f365d998af84822a6041008b25\n"
    },
    {
      "commit": "f4e82284d3486a342d129ddd73efe9a4f8398392",
      "tree": "a6588878028ec1631185d3f82511a4031b846e33",
      "parents": [
        "888a54dcbf954fdffacc8283a793290abcc589cd"
      ],
      "author": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Wed Aug 30 18:35:46 2023 -0700"
      },
      "committer": {
        "name": "Shaju Mathew",
        "email": "shaju@google.com",
        "time": "Wed Aug 30 18:35:46 2023 -0700"
      },
      "message": "Hoisting ambiguous transport handling outside the loop.\nThis is a pre-cursory CL for https://android-review.git.corp.google.com/c/platform/packages/modules/adb/+/2724438\n\nBug: 290267160\n\nTest: For these tests, we\u0027re constrained to using the hotspot\nnetwork (that will allow wireless adb debugging).\nAlternatively, a non-corp wireless network (with less stringent\nsecurity config) would also work out (tested with both these setups).\nDue to these limitations, an integrated test (e.g test_device.py)\ndoes not apply because the test environment is too specialized for\nthe production environment. It is likely feasible to automate the\nhotspot connection (using MH for e.g), however it does not seem\nrealistic at this time.\n\naosp-master-with-phones$adb kill-server\naosp-master-with-phones$adb tcpip 5555\nrestarting in TCP mode port: 5555\naosp-master-with-phones$adb connect 192.168.208.183:5555\nconnected to 192.168.208.183:5555\naosp-master-with-phones$adb devices\nList of devices attached\n6L4X895PYXTC7DR8\tdevice\n192.168.208.183:5555\tdevice\nDisconnect the USB (both point to the same device) and connect another Android device.\naosp-master-with-phones$adb devices\nList of devices attached\n17071FDEE0027Y\tdevice\n192.168.208.183:5555\tdevice\n\nTest ambiguity:\naosp-master-with-phones$adb wait-for-disconnect\nerror: more than one device/emulator\nList of devices attached\n17071FDEE0027Y\tdevice\n192.168.208.183:5555\tdevice\n\naosp-master-with-phones$adb -s 17071FDEE0027Y wait-for-disconnect\nDisconnect USB physically.\naosp-master-with-phones$adb devices\nList of devices attached\n192.168.208.183:5555\tdevice\n\nReconnect USB:\naosp-master-with-phones$adb devices\nList of devices attached\n17071FDEE0027Y\tdevice\n192.168.208.183:5555\tdevice\n\nTest disconnect of wireless transport (use a secondary terminal to disconnect):\naosp-master-with-phones$adb devices\nList of devices attached\n17071FDEE0027Y\tdevice\n192.168.208.183:5555\tdevice\n\naosp-master-with-phones$adb -s 192.168.208.183:5555 wait-for-disconnect\n\nRun `adb disconnect 192.168.208.183:5555` from a secondary terminal.\n\naosp-master-with-phones$adb devices\nList of devices attached\n17071FDEE0027Y\tdevice\n\nChange-Id: I3521d993a32962d72f59e8f8ac172f39bc2f02d8\n"
    },
    {
      "commit": "843f191ff888a9b4c27331ea416323b8a105f56a",
      "tree": "93edfbe5152e0ac6eb2e001eec572d616dbe5409",
      "parents": [
        "d231cda66a32b8a1b1cee9de42df8db2f54ed190"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Apr 21 16:24:04 2020 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Tue Apr 21 17:57:15 2020 -0700"
      },
      "message": "adb: allow wait-for-disconnect to match offline for TCP devices.\n\nThis fixes a bug in adb root/unroot where we always fail because we\u0027re\nwaiting for a TCP device to disappear.\n\nTest: test_device.py over TCP\nChange-Id: I7e4b6fdaa1070cee1f9b471de46ae00bf89b3089\n"
    },
    {
      "commit": "3657e9d5b9725ec1f4adfbbe3fd9301cc6262748",
      "tree": "4437f0b7ee5d6bf3171dd017096876f21805a786",
      "parents": [
        "8434d33becdc75aef57e09fdda5a94333be1531b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 10 16:57:47 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Mar 10 17:01:34 2020 -0700"
      },
      "message": "adb: support wait-for- with multiple states.\n\nTest: manual, adb wait-for-device-recovery\nChange-Id: I92034c477d28f847e24ec72bbb87b252fba875e1\n"
    },
    {
      "commit": "290ccb5dfe946d4dd39a6b8e584dd11ecd61779e",
      "tree": "4b0147364e1b01190451052e94a6475be0d92638",
      "parents": [
        "4788202f0f99ce2b301722762b0630950fac989d"
      ],
      "author": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Wed Nov 20 14:18:43 2019 -0800"
      },
      "committer": {
        "name": "Joshua Duong",
        "email": "joshuaduong@google.com",
        "time": "Fri Feb 21 21:06:40 2020 +0000"
      },
      "message": "[adbwifi] Add adbwifi_libs, TLS connection, and MDNS implementation.\n\nBug: 111434128, 119493510, 119494503\n\nTest: Enable wireless debugging in Settings UI, click \"pair with pairing code\"\nto generate pairing code.\nOn client, \u0027adb pair \u003cip_address\u003e\u0027, enter pairing code at prompt and hit\nenter. Pairing should complete.\n\u0027adb logcat\u0027.\nChange-Id: I86527bd3fc52e30a8e08ec5843dc3e100abf91fa\nExempt-From-Owner-Approval: approved already\n"
    },
    {
      "commit": "0d1e8fd532094ec45afcbc21ab24b052103585a3",
      "tree": "5c61642b03c01f1f1bbee8186ce3d8e3f2a916b2",
      "parents": [
        "8829d15b1a91140a42af20e7e221895669e2cec2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 03 09:02:45 2019 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 03 12:49:31 2019 -0700"
      },
      "message": "libbase: add ConsumePrefix/ConsumeSuffix.\n\nadb was already using ConsumePrefix, and now we have another would-be\nuser in cutils. (There appears to be one place in adb that should use\nConsumeSuffix, so I\u0027m assuming we\u0027ll want that sooner or later.)\n\nI\u0027ve kept these inline because adb and google3\u0027s versions both were, and\nI\u0027m easily led.\n\nTest: treehugger\nChange-Id: I29d99032f6f6ccbfaefece59725db8afb02a4c87\n"
    },
    {
      "commit": "8780281715715f5e92f79914cd9faf5df3584df8",
      "tree": "19c8dbbcb87d94ceaaa8724f2ff470687dbb9288",
      "parents": [
        "e23e6c7112eeca08805dd9dc3aed06c04dc225f1",
        "4c0c9c90e1ae4fb8ef7312833a825bc3c3bee62b"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Apr 24 22:38:31 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 24 22:38:31 2019 +0000"
      },
      "message": "Merge \"adb: fix double close in wait-for-*.\""
    },
    {
      "commit": "4c0c9c90e1ae4fb8ef7312833a825bc3c3bee62b",
      "tree": "8e02ad6551dcc3593b5105963c1d1d5a72fceefc",
      "parents": [
        "f868dac363535c7f1c49fac4beb1d1fe4c7a9b97"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 18 16:46:42 2019 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Apr 18 16:58:30 2019 -0700"
      },
      "message": "adb: fix double close in wait-for-*.\n\nunique_fd\u0027s implicit conversion to int allows the following code to\ncompile without error, leading to a double close:\n\n  std::function\u003cvoid(unique_fd)\u003e func \u003d [](int x) { close(x); };\n  func(unique_fd(42));\n\nTest: treehugger\nChange-Id: I948ecda3a12738b3af6444fe2902d2f7b80e1b4c\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": "e2f32340d2d852c7d43a2ef07c74faac0d0f7ee5",
      "tree": "ccd9752029e49e7ae441264e3f9f4e63c0331ba6",
      "parents": [
        "c7a409036e606a1d0cace8b066ef9a87e61c5b48"
      ],
      "author": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Tue Mar 26 11:58:53 2019 -0700"
      },
      "committer": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Tue Mar 26 12:00:19 2019 -0700"
      },
      "message": "adb: Avoid extra std::string copies\n\nWhen a function argument takes a std::string, it\u0027s inefficient to\npass std::string::c_str(), since that creates an additional copy.\nSo we change these calling sites.\n\nTest: TreeHugger\nChange-Id: I1c0fde7275eb3ebd3baf05ec62581b0243655608\n"
    },
    {
      "commit": "b32f5acaea7e412ac62af58f5672b61815c8068a",
      "tree": "97f518599e954596790b53472e98c13b68cb527b",
      "parents": [
        "b13f3cd7605ca0124ccc1e19ae42fc18d07ab661"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 22 14:01:36 2019 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 25 13:59:00 2019 -0800"
      },
      "message": "adb: implement wait-for-disconnect.\n\nBug: http://b/124244488\nTest: manual\nChange-Id: I316a87994924c51c785e46a4900380c58e726985\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": "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": "331a9084e4796501e6f5c9e7b5bcf5d14e7c1160",
      "tree": "f3443052e2f784c541940432b264323fd8646443",
      "parents": [
        "907ef68c5daa405563be50a1a33062937b535361"
      ],
      "author": {
        "name": "Cody Schuffelen",
        "email": "schuffelen@google.com",
        "time": "Wed Jan 02 14:17:29 2019 -0800"
      },
      "committer": {
        "name": "Cody Schuffelen",
        "email": "schuffelen@google.com",
        "time": "Thu Jan 17 15:58:41 2019 -0800"
      },
      "message": "Combine tcp_connect and socket_spec_connect.\n\nThis will make it easier to add new types of transports by combining the\nlogic the adb server and adb daemon use to connect to things.\n\nBug:121166534\nTest: adb connect against a cuttlefish instance over the shm proxy.\nChange-Id: Ic7fc848c60a85eef968c3735838c87cb7fdaf38b\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": "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": "4c28dde8bcb31e4a6d7b0af83b3435ccf20bb224",
      "tree": "eecb6f0efd48b498019f20d0963c473bbc0630f2",
      "parents": [
        "977e526e8e41dc5050e1c6e01b60b4029c0e97a0"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 16:51:59 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 18:08:45 2018 -0700"
      },
      "message": "adb: use adb\u0027s unique_fd instead of android::base.\n\nReplace all usages of android::base::unique_fd with the unique_fd from\nadb_unique_fd.h, which calls adb_close instead of close on Windows.\n\nMost of these changes are no-ops, except for the ones to\ncreate_service_thread, which was probably pretty broken on Windows.\n\nTest: python test_device.py\nTest: adb_test\nTest: wine adb_test.exe\nChange-Id: Ia4d03f9e2e7ddc88c97dc64172d721f93f3bf853\n"
    },
    {
      "commit": "977e526e8e41dc5050e1c6e01b60b4029c0e97a0",
      "tree": "d27643be089ee6344370f183f0b56990fb20ebc5",
      "parents": [
        "076b5ba66769df47d315d81b66516491a7fc8eba"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 16:07:51 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 18:08:45 2018 -0700"
      },
      "message": "adb: move remount_service.h into daemon.\n\nTest: treehugger\nChange-Id: I1a895d52da2c2ef281d562be778cfe0a01854a4f\n"
    },
    {
      "commit": "076b5ba66769df47d315d81b66516491a7fc8eba",
      "tree": "2ed83a09a184eef9b64a80d66882f0303f4025cb",
      "parents": [
        "c7b745936508f72edae94ca3300ee51705cbe75c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 16:07:26 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 18:08:44 2018 -0700"
      },
      "message": "adb: split shell_service.h into client/daemon/protocol parts.\n\nTest: treehugger\nChange-Id: I67042f6b29a8a07619b8d56e7376d49b956a840c\n"
    },
    {
      "commit": "c7b745936508f72edae94ca3300ee51705cbe75c",
      "tree": "944f4fef02022299418150c91b8c7cb232d106ef",
      "parents": [
        "f354ebb4a8a928e3b1e50b19ed9030431825212b"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 15:55:25 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Jul 25 18:08:32 2018 -0700"
      },
      "message": "adb: split file_sync_service.h into client and daemon parts.\n\nTest: treehugger\nChange-Id: I648c7001903a91448c69986e08a6cd2dd76ed793\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": "86e67188a11db7f8db0a1bab3029c6038492e498",
      "tree": "963877f99160913f617086db5542cf453426814d",
      "parents": [
        "7cd4c4f039f8c2dabf6cf7a0c6ab16cc1fa352ff"
      ],
      "author": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Fri Jul 13 18:15:16 2018 -0700"
      },
      "committer": {
        "name": "Yi Kong",
        "email": "yikong@google.com",
        "time": "Fri Jul 13 18:21:00 2018 -0700"
      },
      "message": "[adb] Modernize codebase by replacing NULL with nullptr\n\nFixes -Wzero-as-null-pointer-constant warning.\n\nTest: m\nBug: 68236239\nChange-Id: Ia8c4deacafed2f3b7dbc3d4c3c77c6c632e3de81\n"
    },
    {
      "commit": "b701bfe4afc7da623c5439baf037a357919ecc3d",
      "tree": "6fe750ee14c47636e11a9818f91d8fece3a9aa29",
      "parents": [
        "b5f3aa363a8d4c4deef885e427e0bf5c8d85f0e4"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 22 13:07:22 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Jun 22 13:07:22 2018 -0700"
      },
      "message": "Revert \"adb: detect some spin loops and abort.\"\n\nThis seems to be falsely triggering.\n\nThis reverts commit bf8e08e530d43a2c0a190833d87e2902e9a0aab5.\n\nTest: none\n"
    },
    {
      "commit": "bf8e08e530d43a2c0a190833d87e2902e9a0aab5",
      "tree": "e34fd9f670428052cd7fb028fd9f9dd1ad9804b5",
      "parents": [
        "1293716052d8db69d67c85037189b73b07dbea7e"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jun 18 16:37:01 2018 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Jun 18 17:46:34 2018 -0700"
      },
      "message": "adb: detect some spin loops and abort.\n\nTrack pending fdevents, and abort if we see an fdevent ready for\nread/write for 5 minutes continuously.\n\nAlso, add a service that intentionally starts spinning, to test this.\n\nTest: manually changed timeout to a minute, `adb raw spin`\nChange-Id: Ibfa5e7e654996587f745887cb04987b982d79bed\n"
    },
    {
      "commit": "469dc3adf0c488ca71e2ae5e1589c0dc8f15ceca",
      "tree": "2fbdf754ce6ba3da887f974783eeddbef397411e",
      "parents": [
        "7dfacb873d1716bc3ebabcfd8159f572b643d0ac"
      ],
      "author": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu May 17 12:12:54 2018 -0700"
      },
      "committer": {
        "name": "David Anderson",
        "email": "dvander@google.com",
        "time": "Thu May 31 15:38:25 2018 -0700"
      },
      "message": "adb: add remount -R for deduplicated ext4\n\nWhen using \"adb remount\" on a deduplicated filesystem, the current\nresponse is a warning that the remount will not work. This patch\nallows the user to specify an -R option. This option will reboot to recovery,\nrun e2fsck to undo deduplication, and then reboot the device where \"adb\nremount\" will then succeed.\n\nIn addition, if verity needs to be disabled to remount, it will be disabled in\nthe same reboot cycle to minimize reboots.\n\nBug: 64109868\nTest: adb remount -R on a deduplicated filesystem\nChange-Id: I812407499b2df6f4d2509e8d51878117108a6849\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": "ebe9970151e60988eecf288f03c00f42f0944312",
      "tree": "770b308b835bb974befef3496cdfd38aa2ea825e",
      "parents": [
        "f090647ceb026ef7acec3ba3fafae1bcb4b0ee68"
      ],
      "author": {
        "name": "George Burgess IV",
        "email": "gbiv@google.com",
        "time": "Sat Feb 17 21:43:55 2018 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Feb 19 01:05:56 2018 -0800"
      },
      "message": "Fix a memory leak\n\nIf create_service_thread fails, we\u0027ll leak `arg`.\n\nThis fixes a static analyzer complaint:\nsystem/core/adb/services.cpp:298:13: warning: Potential leak of memory\npointed to by \u0027arg\u0027\n\nBug: None\nTest: Reran the static analyzer. No more complaints about this leak.\nChange-Id: I5aec7fd78f2cc775b650501b02bdf0039d1647ca\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": "d51515b002edeee10f0fbb9f091108417f744640",
      "tree": "a282492d63e4bd2c2215599882b19116b0dac5cd",
      "parents": [
        "5414d15da73ec0901aa883609810ccf54af75c6c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 28 16:29:53 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Sep 28 16:45:24 2017 -0700"
      },
      "message": "adbd: improve thread names.\n\nName each service thread specifically to improve debuggability.\n\nBug: http://b/65648324\nTest: adb shell debuggerd -b `adb shell pidof adbd` during a sync\nChange-Id: I644e25fc2f14a26eafd19f596e4e8f3c2bb79967\n"
    },
    {
      "commit": "6fb4476eda5b0253b411b12cc336bbf10bf1c1cb",
      "tree": "6988a7efb3061f0a7265cb27459ef86cbdfdbfaf",
      "parents": [
        "62da8b26e2e9b6842ad8d10868e4e1be55a66392"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Sep 11 15:22:57 2017 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Sep 12 12:24:02 2017 -0700"
      },
      "message": "adb: reboot: last boot command default\n\nFor reboot [reboot_arg] requests via either reboot or adb reboot,\nif reboot_arg is empty then report \"shell\" or \"adb\" respectively.\n\nTest: boot_reason_test.sh shell_reboot adb_reboot\nBug: 63736262\nChange-Id: Ie613d9e62db6a705885e4e7520aede27af3aa1b9\n"
    },
    {
      "commit": "3212463a692c359e7dc10c788c49b5406f3c25bb",
      "tree": "66856e63df8b3f30ad54277a94bf336e6a16f312",
      "parents": [
        "b39e415aa8c6383efdd02ab62bf2c523ebd1878c"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 14 18:57:54 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 21 14:15:07 2017 -0700"
      },
      "message": "adb: add track-devices-l service.\n\nAdd a way to get the full `devices -l` output on a continuous basis.\n\nTest: manual\nChange-Id: I2270cc0a0d7e1384ce19631724ddf2462d963ade\n"
    },
    {
      "commit": "b39e415aa8c6383efdd02ab62bf2c523ebd1878c",
      "tree": "93274b5c26009892d196c6ce6e75ace291801a47",
      "parents": [
        "eaae54eda90389267fba498181e35c53e9135bbd"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 16 16:57:01 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Mon Aug 21 14:15:06 2017 -0700"
      },
      "message": "adb: allow selection of a specific transport.\n\nExtend device selection to allow selecting a specific transport via\nmonotonically increasing identifier (visible in devices -l).\n\nThis is useful when using multiple devices (like hikey960...) that\nhave identical bogus serial numbers like 0123456789ABCDEF.\n\nBug: http://b/37043226\nTest: adb -t {1, 2, 9999999} {get-serialno, shell, features}\nChange-Id: I55e5dc5a406a4eeee0012e39b52e8cd232e608a6\n"
    },
    {
      "commit": "aa923c1d05696942f44012f57b070c118593fd78",
      "tree": "a944145fb13d3da71867e0a03aba8cc1d57fbd86",
      "parents": [
        "3bb1b57f4c4a2e97ce4bf34801a5e1fcd7c5ee1c"
      ],
      "author": {
        "name": "Ting-Yuan Huang",
        "email": "laszio@google.com",
        "time": "Tue Aug 15 15:07:21 2017 -0700"
      },
      "committer": {
        "name": "Ting-Yuan Huang",
        "email": "laszio@google.com",
        "time": "Tue Aug 15 16:48:24 2017 -0700"
      },
      "message": "Fix a potential memory leak\n\nTest: Built without seeing the warnings\nChange-Id: I934509c78482af9ef7dc447c807f6450484b4b38\n"
    },
    {
      "commit": "56af5828c86658e96d85e2bcba02bdad7a06876e",
      "tree": "84efb4dca434c1b216d8e5c7770a0d7118203430",
      "parents": [
        "65bc227d3e59b78b05f81ee2ed19636b78c52e73",
        "3cf1b36e2f914ce7c6f233e5ff3f1f6614940c80"
      ],
      "author": {
        "name": "Treehugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Apr 20 19:45:17 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 20 19:45:18 2017 +0000"
      },
      "message": "Merge \"adb: fix two device offline problems.\""
    },
    {
      "commit": "3cf1b36e2f914ce7c6f233e5ff3f1f6614940c80",
      "tree": "b75acfe89e71a396a07c247f5ea44e476ffcf8d4",
      "parents": [
        "3187510b17f7eeeb67286a4a842abd503906bb5c"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Mar 10 16:01:01 2017 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Thu Apr 20 10:14:59 2017 -0700"
      },
      "message": "adb: fix two device offline problems.\n\nWhen device goes offline, user usually has to manually replug the\nusb device. This patch tries to solve two offline situations, all\nbecause when adb on host is killed, the adbd on device is not notified.\n\n1. When adb server is killed while pushing a large file to device,\nthe device is still reading the unfinished large message. So the\ndevice thinks of the CNXN message as part of the previous unfinished\nmessage, so it doesn\u0027t reply and the device is in offline state.\n\nThe solution is to add a write_msg_lock in atransport struct. And it\nkicks the transport only after sending a whole message. By kicking\nall transports before exit, we ensure that we don\u0027t write part of\na message to any device. So next time we start adb server, the device\nshould be waiting for a new message.\n\n2. When adb server is killed while pulling a large file from device,\nthe device is still trying to send the unfinished large message. So\nadb on host usually reads data with EOVERFLOW error. This is because\nadb on host is reading less than one packet sent from device.\n\nThe solution is to use buffered read on host. The max packet size\nof bulk transactions in USB 3.0 is 1024 bytes. By preparing an at least\n1024 bytes buffer when reading, EOVERFLOW no longer occurs. And teach\nadb host to ignore wrong messages.\n\nTo be safe, this patch doesn\u0027t change any logic on device.\n\nBug: http://b/32952319\nTest: run python -m unittest -q test_device.DeviceOfflineTest\nTest: on linux/mac/windows with bullhead, ryu.\nChange-Id: Ib149d30028a62a6f03857b8a95ab5a1d6e9b9c4e\n"
    },
    {
      "commit": "b087d3062c76dc97e19e02d198dba540bb7ad7cb",
      "tree": "a8a3803465f2a7c934a8363cf67e08f1ff8379b6",
      "parents": [
        "3187510b17f7eeeb67286a4a842abd503906bb5c"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Apr 13 23:48:57 2017 -0700"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Mon Apr 17 14:44:17 2017 -0700"
      },
      "message": "libcutils: compile with BOARD_VNDK_VERSION current\n\n- moved __android_log_is_debuggable to a new public header\n    (log_properties.h)\n- vendor version of sched_policy uses ALOG* instead SLOG*\n\nTest: (sanity) liblog-unit-tests\nTest: (sanity) libcutils_test (noting b/b/32972117, two tests continue\n  to fail)\nTest: system/core as a whole makes with BOARD_VNDK_VERSION :\u003d current\n  now with no problems.\nTest: boots/works on internal marlin\nBug: 33241851\n\n(cherry picked from commit 998edcde367abd266755a534d17c21d834203968)\n\nMerged-In: I5bc1f348dc0f0c8814bec5b5c3d2c52c825ab640\nChange-Id: I5bc1f348dc0f0c8814bec5b5c3d2c52c825ab640\n"
    },
    {
      "commit": "0f3312aa4305dfae9a3a1444976d3d17bcef89ac",
      "tree": "d3891a2f06eb38850cfb66dbd6dd7b3c7c2f8ca4",
      "parents": [
        "1f6a57afda26ab3e4f40c730d773d16f2d0996dc"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 12 17:00:49 2017 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 12 17:12:32 2017 -0700"
      },
      "message": "adb: kill adb_thread_{create, join, detach, exit}.\n\nWe have std::thread now, so we can delete this cruft.\n\nTest: python test_device.py\nTest: adb_test\nTest: wine adb_test.exe\nTest: /data/nativetest/adbd_test/adbd_test\nChange-Id: Ie1c1792547b20dec45e2a62ce6515fcb981c3ef8\n"
    },
    {
      "commit": "3122cdf468930c458fa8cef5484c6ec2be438d9d",
      "tree": "087847832ebebd30827df271aa35b911203a1b01",
      "parents": [
        "50b39b44ec6f0a0009838d4001ddfb21991982a1"
      ],
      "author": {
        "name": "Casey Dahlin",
        "email": "sadmac@google.com",
        "time": "Thu Jun 23 14:19:37 2016 -0700"
      },
      "committer": {
        "name": "Casey Dahlin",
        "email": "sadmac@google.com",
        "time": "Tue Mar 07 14:45:51 2017 -0800"
      },
      "message": "Add mDNS device discovery for adb client\n\nTest: Was able to discover a raspberry pi.\nBug: 28074466\n(cherry picked from e292cd16760321fccc99c8c261cb92fa4b6462ab)\n\nChange-Id: Id9571576457a4a0a078e48a274a4e8eac78bfe2b\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": "a8c21dc4f81557817f900c5575e15a8cda0c8988",
      "tree": "6938c2b3150b8887ff066f95643baedd77cd0225",
      "parents": [
        "4199a7acc95f0e120a9048216dd80987872aa46b"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Thu Jan 05 18:01:01 2017 -0800"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Thu Jan 05 18:01:01 2017 -0800"
      },
      "message": "adb: Fix the \u0027adb reboot sideload\u0027 for A/B devices.\n\nWe used to write the command file (/cache/recovery/command) to trigger\nthe sideload mode. A/B devices don\u0027t support that (may not have /cache\nparitition). This CL switches to using libbootloader_message which\nwrites the command to BCB (bootloader control block) instead.\n\nTest: \"adb root \u0026\u0026 adb reboot sideload\" reboots sailfish into recovery\n      sideload mode.\n\nChange-Id: I158fd7cbcfa9a5d0609f1f684a2d03675217628f\n"
    },
    {
      "commit": "c75f65f4e32a5bb79038e559bbb8c05732270255",
      "tree": "2ae31e2f23ef968d66c23d9991f1af40813ce18f",
      "parents": [
        "3d8d73c5e61840eff766878d2a030c946417bdc0"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Mar 28 15:52:13 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Oct 14 11:12:24 2016 -0700"
      },
      "message": "adb: use __android_log_is_debuggable()\n\nTest: compile and months of adb functionality use\nBug: 27566046\nBug: 31456426\nChange-Id: I6568eea0eda8dc67dec2ba34cd4c3f56fb0ff0e9\n"
    },
    {
      "commit": "8b249d2e6ab2c1491a2c4eeac2ddb134976f2e5b",
      "tree": "11265608dc07293bb0306ff809aaf34aa0850d62",
      "parents": [
        "eeae2e55a85b7f07c30a289d2deba084004b3b04"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 23 15:40:03 2016 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 26 13:14:14 2016 -0700"
      },
      "message": "Switch adb to \u003candroid-base/properties.h\u003e.\n\nBug: http://b/23102347\nTest: manual\nChange-Id: Iffa66258c01f84f41b9af99ab5e768a0a2669106\n"
    },
    {
      "commit": "4a5a95d071096c6912402bd8399ca1153a01f0cb",
      "tree": "72439d08da5b5e25029a715865f502ff4282c03a",
      "parents": [
        "9cac2c556d805dad6b19b7c571ef36fdb6ac8de1"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Aug 24 18:38:44 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Thu Aug 25 17:12:26 2016 -0700"
      },
      "message": "adb: factor out socket specification.\n\nMove the logic for string socket specification out to separate\nfunctions to facilitate using arbitrary sockets for the adb command\nsocket.\n\nBug: http://b/30445394\nChange-Id: Icd8fdb853272edc029fb3a0f5b18e941dc8ef52c\nTest: adb_test, adbd_test, test_device.py\n"
    },
    {
      "commit": "54ee6d12e6a56ccf0c083a7e77454e2bc40eaed2",
      "tree": "bc5248f05580a675443acb964ec3b9287113d2ec",
      "parents": [
        "c6e3b12e2b86cf95c7f5b8c1fac3d47a73418508",
        "d78ed22449f2401e6b825d7b6418dcb05b5e7565"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Sat Apr 16 01:50:54 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 16 01:50:54 2016 +0000"
      },
      "message": "Merge \"adb: add reconnect command.\""
    },
    {
      "commit": "071328dbbcfc48b2dc9f86ccde0060fc40928f82",
      "tree": "a1b1d1b3604ad6b6c7c3a2819fa23174a471a6ca",
      "parents": [
        "63cede3ddbd9f98b6ff9c48f20d7bf994ba4beb7"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 13 12:18:58 2016 -0700"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Wed Apr 13 12:28:04 2016 -0700"
      },
      "message": "adb: add support for \u0027wait-for-any\u0027.\n\nAllow waiting for a device in any state.\n\nBug: http://b/28168212\nChange-Id: I1876ecd70089ca88f2da5de4182e13724ec50501\n"
    },
    {
      "commit": "d78ed22449f2401e6b825d7b6418dcb05b5e7565",
      "tree": "bbb4c98301eb640a08f74660d9c4e0db54717339",
      "parents": [
        "a6c02429549f2e83e6fe569f5d672959a4afa66b"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Apr 05 13:50:44 2016 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Apr 05 15:21:36 2016 -0700"
      },
      "message": "adb: add reconnect command.\n\nAdd reconnect command for debugging. `reconnect` kicks a transport\nfrom the host side, `reconnect device` kicks a transport from\nthe device side. They can be used to produce transport errors.\n\nBug: 25935458\n\nChange-Id: I47daa338796b561941e7aba44a51a6dd117d1e98\n"
    },
    {
      "commit": "c25a34eb389849d2abfff4b3ee7052967752e120",
      "tree": "9ee5f9d193a77e7c63e5abd1ae4a9a677c3c99c6",
      "parents": [
        "5684f936ec0718ddadfb6b0de4956823adecfdc5"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Feb 22 14:27:23 2016 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Feb 23 09:11:18 2016 -0800"
      },
      "message": "adb: use TCP keepalive.\n\nCurrently adb only realizes a TCP transport has gone away when it tries\nto send a packet, which caused problems in particular for `adb reboot`\nsince no packets are sent, leading to the client hanging until Ctrl+C.\n\nThis CL turns on TCP keepalive packets to send 1 packet every second,\nallowing up to 10 failures before disconnecting. Using built-in TCP\nfunctionality turns out to be much cleaner in this case than trying to\nimplement our own keepalive packets at the application layer, and\nshould be more lightweight since it\u0027s all done in the TCP stack.\n\nBug: http://b/23093474\n\nChange-Id: Ifb41cbb85b9752a9f394e1eed3c6ac4da47a4e4d\n"
    },
    {
      "commit": "c1fab366ba2e0357f6ea60f37af6f7f8b3dae1fe",
      "tree": "e49649121cb86627dc81c9fda51a822a48d53755",
      "parents": [
        "511763b20f63a15cc4f2bfd98423b0447c5da6ef"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 19 10:42:40 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 19 14:35:48 2016 -0800"
      },
      "message": "adb: detect when the client disconnects in wait-for-device.\n\nAvoid leaking a thread and its associated resources when a user cancels\nwait-for-device.\n\nBug: http://b/26966721\nBug: https://code.google.com/p/android/issues/detail?id\u003d199088\nChange-Id: Idac80a24e9739ddd24e500fe14826a78f350c018\n"
    },
    {
      "commit": "7d40525cb2e6ab7bc1c2dd940dcb7418701e46e3",
      "tree": "d662f1aadf813b4d512ff453155fb01604d80e14",
      "parents": [
        "207922303fc77f39e688e8380f369e07cfbf56e3"
      ],
      "author": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 12 14:31:15 2016 -0800"
      },
      "committer": {
        "name": "Josh Gao",
        "email": "jmgao@google.com",
        "time": "Fri Feb 12 15:23:54 2016 -0800"
      },
      "message": "adb: make adb_thread_func_t return void, add adb_thread_exit.\n\nWindows restricts the return value of threads to 32-bits, even on 64-bit\nplatforms. Since we don\u0027t actually return meaningful values from thread,\nresolve this inconsistency with POSIX by making adb\u0027s thread abstraction\nonly take void functions.\n\nChange-Id: I5c23b4432314f13bf16d606fd5e6b6b7b6ef98b5\n"
    },
    {
      "commit": "a17d272002eab3355be435dbe2c1722162556fe9",
      "tree": "c78ea82996f0ea56f95e07ade9e696ed65c276fc",
      "parents": [
        "128452bdd7eac825796023d8c44a41d4fd8053e2"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Jan 21 08:40:59 2016 -0800"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Thu Jan 21 20:03:33 2016 -0800"
      },
      "message": "base: add network address parsing function from adb.\n\nThis CL moves the network address parsing function from adb to libbase\nso that it can be used by fastboot as well as adb.\n\nlibbase seemed like the right choice because:\n  1. It already has some parsing functions (parseint)\n  2. The net address parsing function uses the libbase string\n     functions so we have a libbase dependency anyway.\n\nThe parsing function has been modified slightly to make the canonical\naddress optional, and debug logging on success has been removed.\n\nFor adb the only functional difference is that parsing a network\naddress will no longer print the result to the debug log, which seemed\nunnecessary.\n\nBug: http://b/26236380\nChange-Id: Ife6df02937225fc66de87884d3572d79c092c522\n"
    },
    {
      "commit": "6683132274dd94642fac58ccfc413c43662e9556",
      "tree": "e72c1c90891770c8cb550d6d140c041866ad1727",
      "parents": [
        "c6aa5d660b212e1cc2006b63b003a2b603be98b0"
      ],
      "author": {
        "name": "Leo Sartre",
        "email": "leox.sartre@intel.com",
        "time": "Tue Jan 05 12:06:05 2016 +0100"
      },
      "committer": {
        "name": "Leo Sartre",
        "email": "leox.sartre@intel.com",
        "time": "Tue Jan 05 12:13:24 2016 +0100"
      },
      "message": "WA: Fix adb wait-for-device command\n\nWithout -s argument, adb wait-for-device will make a call to\nacquire_one_transport() with sinfo-\u003eserial.c_str() \u003d\u003d \"\".\nWaiting for acquire_one_transport() to be reworked to use std::string\nrather than const char * for serial, work around this by passing NULL\nwhen sinfo-\u003eserial is not initialized in host_service_to_socket().\n\nChange-Id: Ifef53e0e82850364f5029ee36560376f2a4a5104\nSigned-off-by: Leo Sartre \u003cleox.sartre@intel.com\u003e\n"
    },
    {
      "commit": "6cd9bc3aa1cfb4e0b044ccdb4dac7e4d53a301a7",
      "tree": "78cb7677320154ebe61ff031a73663112dc93e22",
      "parents": [
        "70097493adcaca18deff549e67fb1bb92b29a795"
      ],
      "author": {
        "name": "Leo Sartre",
        "email": "leox.sartre@intel.com",
        "time": "Fri Nov 27 18:56:48 2015 +0100"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Dec 16 18:11:18 2015 -0800"
      },
      "message": "adb host: add device state in \"adb wait-for-*\"\n\nThe current implementation of the host commands \"adb wait-for-*\" allows\nto specify only the transport layer (local, usb or any).\nThis patch allows the specification of the expected device state\n(bootloader, recovery, device or sideload), this is usefull for\nscripting purposes.\n\nUse case:\n$ adb reboot sideload-auto-reboot\n$ adb wait-for-usb-sideload \u0026\u0026 adb sideload package.zip\n\nChange-Id: I276a6be4d82f8b7901f74e1e5395b86d16548e8f\nSigned-off-by: Leo Sartre \u003cleox.sartre@intel.com\u003e\n"
    },
    {
      "commit": "f55ead962f2257312af08fe730ef9d3f3d988e76",
      "tree": "75488c67fc418f771691c0aa9caa88346126ed75",
      "parents": [
        "b13dd00d883d02dfef1a403caa63501ddca50a09"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 04 22:00:26 2015 -0800"
      },
      "message": "Track rename of base/ to android-base/.\n\nChange-Id: Idf9444fece4aa89c93e15640de59a91f6e758ccf\n"
    },
    {
      "commit": "ff4445614bf25322195741000720b5cec737c2b5",
      "tree": "87caa1ed4a94d155927d0c5d456ed376fb008856",
      "parents": [
        "c42c8cb977dcde2ff41dcf322eb2b4568afd8665"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 16 10:55:34 2015 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Nov 16 10:55:34 2015 -0800"
      },
      "message": "Pass $TERM to the device.\n\nUnfortunately, this isn\u0027t backwards-compatible with the current shell\nprotocol because we made unknown shell: arguments errors. We could try\nto commit the change to make them just warnings first, but how would\nwe know when everyone was running adbd with that change? Bumping the\nprotocol version doesn\u0027t help because that only affects the code running\non the host. And although we could add another feature to the reported\nfeatures, since shell_v2 is still in development, that doesn\u0027t seem\nworthwhile.\n\nBug: http://b/25601436\nChange-Id: I12b81aa656cd25b91d14ef691dcbd2b7dab49535\n"
    },
    {
      "commit": "df85263c304205849db52b8e145aeb28c149dcbb",
      "tree": "1080b800510090109ee7ad8a3be4ae4a7ff1a680",
      "parents": [
        "325cd01281a2804cf7736259ee0e82462b3806e3"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Fri Oct 30 18:37:26 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Nov 02 10:39:09 2015 -0800"
      },
      "message": "adb: run reverse_service() in main thread.\n\nreverse_service() calls handle_forward_request(), which calls\nfunctions in fdevent.cpp. fdevent functions is only supposed\nto be called in the main thread.\nAdd check in fdevent.cpp to make sure all operations come from\nmain thread.\n\nBug: 25355808\nChange-Id: Iceb9273f3056acc0713eaafe086ac950ca80ff4f\n"
    },
    {
      "commit": "67943d11b76d7693d817eb5898736c38abd7a44a",
      "tree": "47bb24231f7277f45afa1b3c98a773b0e982a94d",
      "parents": [
        "de01c94f969f6c59926bc7ace48c3ed0a707a670"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 14:55:10 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Oct 07 15:35:18 2015 -0700"
      },
      "message": "Fix adb -d/-e error reporting.\n\nIf -d/-e fail, get-serialno and friends will now report an error\nand return a failure status code on exit.\n\nAlso fix the behavior of -d/-e with $ANDROID_SERIAL --- -d/-e\nshould override $ANDROID_SERIAL, not the other way round.\n\nI\u0027m deleting my own comment here about always returning \"unknown\"\nfor scripts. I can\u0027t find any evidence that there are scripts\nrelying on that, so I think my comment meant \"I fear that there\nare scripts doing so\".\n\nBug: http://b/24403699\nChange-Id: Ie13a751f1137abcfe0cc6c46a0630ba5e02db676\n"
    },
    {
      "commit": "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": "19bec5b329fe202795688bfb76d77f4560adf2c6",
      "tree": "e046660c0f6fcf1038982323810cb15e0326d591",
      "parents": [
        "468978294e130807cc37ed295115863c2d7bacaa"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Sep 22 15:52:57 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 23 12:53:38 2015 -0700"
      },
      "message": "Adb: use VLOG() to replace D() for verbose logging.\n\nAs there are too many D(), we can keep both VLOG() and D() now, and get\nrid of D() gradually.\n\nChange-Id: I2f1cb70bcab3e82c99fed939341d03f6b2216076\n"
    },
    {
      "commit": "a07dbad65fd9f2644876b6a0448bad66a5a29387",
      "tree": "a54f3408c9166dbe9b73b51e16f7b021405bc717",
      "parents": [
        "b3db0b3fcde060299eb88b6a911f19b3922a0851"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 22 10:43:08 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Tue Sep 22 12:50:11 2015 -0700"
      },
      "message": "adb: add -Tt options to `adb shell`.\n\nAdds -T (no PTY) and -t (force PTY) options to `adb shell` to mimic\nssh options. Small cleanup to send an entire FeatureSet to the adb\nclient at once to avoid multiple round-trips when querying multiple\nfeatures.\n\nKnown issue: humans using `adb shell -T` to start a non-PTY interactive\nsession may experience problems since neither side will have PTY\nfeatures like echoing or newline translation. This is probably OK for\nnow as the -Tt options are primarily useful for scripting.\n\nBug: http://b/23825231\nChange-Id: I4d0df300db0abd1f7410bab59dd4d5b991babda7\n"
    },
    {
      "commit": "8da19a4b7952376f81b74177f80411210c49a9c6",
      "tree": "0db5b47f7c09702433226e54a7fd140df99819b6",
      "parents": [
        "f31b3b23eaa262e478f28868ce8fb1bb014f41df"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Aug 31 10:42:13 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 11 11:27:50 2015 -0700"
      },
      "message": "adb: implement shell protocol.\n\nAdds functionality for handling stdin/stdout/stderr streams and exit\ncodes using the shell protocol.\n\nThis CL just contains implementation for adbd which will not yet be\nenabled. Once we have the ability to query transport features from the\nadb client, another CL will add the implementation for the client side\nand update the feature list to turn this on.\n\nNote: this CL must be submitted together with a minadbd CL to update\nthe service_to_fd() function signature.\n\nBug: http://b/23030641\n\nChange-Id: Ibed55e9c1946d8a35190696163ff63e8fb880238\n"
    },
    {
      "commit": "4f344bb156137ee7d5824b72e5d96f8aa93cde55",
      "tree": "26d946edf2cce0d259e03039abcafbf251804fc0",
      "parents": [
        "c5d51620cf959101a335f659998ee1b3141aa2d7"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Aug 28 15:08:49 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Fri Sep 04 08:52:35 2015 -0700"
      },
      "message": "adb: move shell service to a separate file.\n\nUpcoming changes to the shell will require significant additions to\nthe subprocess code, and it will be cleaner if it\u0027s in a separate file.\n\nThe only functional change here is a new debug tag specifically for\nthe shell service. Everything else has been copied exactly as-is in\norder to make it easier to determine what\u0027s changing in upcoming CLs.\n\nChange-Id: I13bd4294059051ee10e0d0c6a06affd8eca62967\n"
    },
    {
      "commit": "815ad88d465c07b09eae296db6f41b7bef3c3cc4",
      "tree": "b52bacf0f8fdeaad7b5dfa89f3ffeff841dc8e1d",
      "parents": [
        "7d5e6e62f2d618ba376cbc9b8a5def881a73f1a9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 02 17:44:28 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Wed Sep 02 20:21:00 2015 -0700"
      },
      "message": "adb: clean up debug tracing a little.\n\nAlways use LOG() for debug tracing.\nRemove useless D_lock. I believe it is useless to lock just before and after fprintf.\n\nI verified the log output both on host and on device. The output looks fine to me.\n\nChange-Id: I96ccfe408ff56864361551afe9ad464d197ae104\n"
    },
    {
      "commit": "2669cf9b61e4b222a012750baac7725ae2327618",
      "tree": "eccb8a0b47c4c07b4fcebebb08305593b4c6a2a8",
      "parents": [
        "5fea4913485a45bb8d63bf5fa7a60dc80284e155"
      ],
      "author": {
        "name": "Siva Velusamy",
        "email": "vsiva@google.com",
        "time": "Fri Aug 28 16:37:29 2015 -0700"
      },
      "committer": {
        "name": "Siva Velusamy",
        "email": "vsiva@google.com",
        "time": "Mon Aug 31 07:52:52 2015 -0700"
      },
      "message": "adb: set thread names (linux \u0026 mac)\n\nBug: 23423333\nChange-Id: I0069f32ddbae2a10fb130064f721facf45b2cc09\n"
    },
    {
      "commit": "b628cb1dae77603b27673d8de27ed87d2ccfbb60",
      "tree": "05b8a3794af4a8f2d5eefbf1810811e25a3def46",
      "parents": [
        "44be5ce75ec6c6d0414c7b71d824b385e9151a7b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 03 10:38:08 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 24 11:15:01 2015 -0700"
      },
      "message": "adb sync cleanup.\n\nWe can double the speed of \"adb sync\" (on N9) if we increase SYNC_DATA_MAX\nfrom 64KiB to 256KiB. This change doesn\u0027t do that, because I still haven\u0027t\nmanaged to plumb through the information about whether we\u0027re a new adb/adbd\nto file_sync_client.cpp and file_sync_service.cpp. But this is already a big\nchange with a lot of cleanup, so let\u0027s do the cleanup and worry about the\nintended change another day...\n\nThis change does improve performance somewhat by halving the number of\nlstat(2) calls made on the client side, and ensuring that most packets are\nsent with a single write. This has the pleasing result of making the null\nsync on an AOSP N9 go from just over 300ms to around 100ms, which means it\nnow seems instantaneous (https://en.wikipedia.org/wiki/Mental_chronometry).\n\nChange-Id: If9f6d4c1f93ec752b95f71211bbbb1c513045166\n"
    },
    {
      "commit": "87c2995a6d8edae2cf9609ae134e391de18db2e9",
      "tree": "556b1c69c94c8051ceab6a81b588f4deaa1257e2",
      "parents": [
        "3b1a373b82a55a3affda0bb1a1f06419d4c42143"
      ],
      "author": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Mon Aug 10 12:52:16 2015 -0700"
      },
      "committer": {
        "name": "David Pursell",
        "email": "dpursell@google.com",
        "time": "Wed Aug 12 14:16:22 2015 -0700"
      },
      "message": "adb: Fix PTY logic for non-interactive shells.\n\nChange `adb shell` so that interactive sessions use a PTY but\nnon-interactive do not. This matches `ssh` functionality better\nand also enables future work to split stdout/stderr for\nnon-interactive sessions.\n\nA test to verify this behavior is added to test_device.py with\nsupporting modifications in device.py.\n\nBug: http://b/21215503\nChange-Id: Ib4ba40df85f82ddef4e0dd557952271c859d1c7b\n"
    },
    {
      "commit": "5fe6d0d1319be46bb98144e00f9da10da68d02aa",
      "tree": "9e8115394b43baa4f2350e46382a7835d4c6826e",
      "parents": [
        "b28812f800fcf5eaf26cc8b3145661d85d910ea9"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Aug 11 13:40:42 2015 -0700"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Aug 11 14:00:15 2015 -0700"
      },
      "message": "Remove confusing variable HOST.\n\nFirst, HOST is always 0 in adbd, which matches ADB_HOST\u003d0.\nSecond, HOST is always 1 when adb_main is called, which matches ADB_HOST\u003d1.\nFor adb client that doesn\u0027t call adb_main, it never touches local_init(),\ninit_transport_registration() and fdevent_loop(). So the changes in adb.cpp,\nservices.cpp and transport_local.cpp do nothing with it.\nAs a conclusion, I think we can remove HOST and use ADB_HOST instead.\n\nChange-Id: Ide0e0eca7468b6c3c130f6b50974406280678b2e\n"
    },
    {
      "commit": "753d485aca0e35bc92a7dec0c3278f0530dc25ca",
      "tree": "7dfddab77e98b5fa205a0aed70ff8c6d0d5285e2",
      "parents": [
        "9897771f79a760bcd337cae67500ebb5ff1d619f"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Jul 30 23:07:55 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Thu Jul 30 23:07:55 2015 -0700"
      },
      "message": "adb: win32: initial IPv6 support and improved Winsock error reporting\n\nCall getaddrinfo() for connecting to IPv6 destinations.\n\nWinsock APIs do not set errno. WSAGetLastError() returns Winsock errors\nthat are more numerous than BSD sockets, so it really doesn\u0027t make sense\nto map those to BSD socket errors. Plus, even if we did that, the\nWindows C Runtime (that mingw binaries use) has a strerror() that does\nnot recognize BSD socket error codes.\n\nThe solution is to wrap the various libcutils socket_* APIs with\nsysdeps.h network_* APIs. For POSIX, the network_* APIs just call\nstrerror(). For Windows, they call SystemErrorCodeToString() (adapted\nfrom Chromium).\n\nAlso in this change:\n\n - Various other code was modified to return errors in a std::string*\n   argument, to be able to surface the error string to the end-user.\n\n - Improved error checking and use of D() to log Winsock errors for\n   improved debuggability.\n\n - For sysdeps_win32.cpp, added unique_fh class that works like\n   std::unique_ptr, for calling _fh_close().\n\n - Fix win32 adb_socketpair() setting of errno in error case.\n\n - Improve _socket_set_errno() D() logging to reduce confusion. Map\n   a few extra error codes.\n\n - Move adb_shutdown() lower in sysdeps_win32.cpp so it can call\n   _socket_set_errno().\n\n - Move network_connect() from adb_utils.cpp to sysdeps.h.\n\n - Merge socket_loopback_server() and socket_inaddr_any_server() into\n   _network_server() since most of the code was identical.\n\nChange-Id: I945f36870f320578b3a11ba093852ba6f7b93400\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "2b01414863d5bf6c35ddd71bf75b5b0f73eb712f",
      "tree": "c7f8881e67dd7957a29f9516631303ccda962b29",
      "parents": [
        "a0900797f68236d20c405de440ccab7f48548da8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 29 17:45:24 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jul 29 17:45:24 2015 -0700"
      },
      "message": "Use _WIN32 rather than HAVE_WINSOCK.\n\nChange-Id: I9855b6fe72e2f2f3a8360c0993a67cb988024ee4\n"
    },
    {
      "commit": "43df109b4b0bb8e08cb4068c4983f32584dfef9a",
      "tree": "9946617f72ea0ea7400c68d9d56052890b7cb3d6",
      "parents": [
        "6cde25edd8c2ef313aebe5852496baa5218ee48a"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 23 17:12:58 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 23 21:14:38 2015 -0700"
      },
      "message": "Report getaddrinfo failures correctly.\n\nAlso move us off the \"convenience\" function because you can\u0027t get useful\nerror reporting from it.\n\nChange-Id: I5fcc6a6d762f5f60906980a7835f01a35045be65\n"
    },
    {
      "commit": "d94e8ba75066239d33a1a180a6c68921262f3552",
      "tree": "cbb288f2bde095b39423a28d705e54dbf69278c2",
      "parents": [
        "ad7c49f50fc1bbc82f4c9307f46ef11f1f6ee261"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 16:13:40 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 16:27:46 2015 -0700"
      },
      "message": "\"adb tcpip\" should require a numeric argument.\n\nDefaulting to port 0 just breaks stuff.\n\nBug: http://b/22636927\nChange-Id: I6239900e0828e71b31171d0184c24824957c99c8\n"
    },
    {
      "commit": "ad7c49f50fc1bbc82f4c9307f46ef11f1f6ee261",
      "tree": "38fe843e2d484b963ad731829ed53f207159f2c3",
      "parents": [
        "5c761bdf94bcdaf3a619cde002ef60c9b226f5c3",
        "09ccf1fa62cef5ce1f3766683df29b8467444a79"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 22:29:05 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 21 22:29:05 2015 +0000"
      },
      "message": "Merge \"Recognize IPv6 addresses for \"adb connect\".\""
    },
    {
      "commit": "09ccf1fa62cef5ce1f3766683df29b8467444a79",
      "tree": "2be312cbca0b49375c67d451a2648042d3efa370",
      "parents": [
        "e91631558898a0b8f7a3ea2b74b7726d78c2f227"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Sat Jul 18 12:21:30 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jul 21 15:25:14 2015 -0700"
      },
      "message": "Recognize IPv6 addresses for \"adb connect\".\n\nBug: http://b/22559299\nChange-Id: I32891d706b5010c38db84a056e76dd279b780f75\n"
    },
    {
      "commit": "5c761bdf94bcdaf3a619cde002ef60c9b226f5c3",
      "tree": "62e95a1ffffde3814c2818c52b2d9404856b57ae",
      "parents": [
        "bba4d471283190dd9b153b7e13efdb28da0b6695"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Jul 21 02:06:26 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Tue Jul 21 02:06:26 2015 -0700"
      },
      "message": "adb: logging: newlines, thread ids, error code overwriting\n\nAdd missing \\n to uses of legacy D() macro. This should make the legacy\nlogging easier to read (and harder to miss important stuff).\n\nOn POSIX, use gettid() from libcutils instead of pthread_self() so that\nthe output shows a more reasonable number instead of a pointer value.\nThis should be ok since libbase\u0027s logging already uses gettid().\n\nWin32:\n\nDon\u0027t let the Win32 last error get overwritten by API calls after the\noriginal error\u0027ing API. When encountering an unknown error, log the\nspecific error code.\n\nChange-Id: Ib8f72754efa7ba895d2f1cd914251fec2a1d894c\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "24f5276345d7f1b6cba973ed728179d7df0b8f22",
      "tree": "0b0aef126945f6a606906468a096d9826daab531",
      "parents": [
        "d7eb85491f7f2347a21fad16300f7f3c653f108b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 23 13:00:32 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 24 10:36:41 2015 -0700"
      },
      "message": "Improve the \"device \u0027(null)\u0027 not found\" error.\n\nNow we\u0027ll say \"no devices found\" if you haven\u0027t set ANDROID_SERIAL and\nthere\u0027s no device connected to default to.\n\nAlso clean up the relevant code a little.\n\nChange-Id: Id254929629ce0888628d5ba8e67cd996ffbf9c8a\n"
    },
    {
      "commit": "3a2421b940e844e6c29da9ec389da42dc87f90f2",
      "tree": "331a2e72aa1ce7167daba893914f0ffc386b1b2f",
      "parents": [
        "b1d05de8a377b369b424d0e6c79f1843581bc1e9"
      ],
      "author": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri May 22 20:09:06 2015 -0700"
      },
      "committer": {
        "name": "Spencer Low",
        "email": "CompareAndSwap@gmail.com",
        "time": "Fri May 22 20:20:49 2015 -0700"
      },
      "message": "adb: fix adb_close() vs. unix_close() usage\n\nDocument the differences between adb_*() and unix_*() in the function\nprototypes in sysdeps.h. See the file for the details (CR/LF\ntranslation, well-known file descriptors, etc.).\n\nFix adb_read(), adb_write(), and adb_close() calls that should really be\nunix_read(), unix_write(), and unix_close(). Note that this should have\nno impact on unix because on unix, unix_read/unix_write/unix_close are\nmacros that map to adb_read/adb_write/adb_close.\n\nImprove sysdeps_win32.cpp file descriptor diagnostic logging to output\nthe name of the function that was passed a bad file descriptor.\n\nChange-Id: I0a1d9c28772656c80bcc303ef8b61fccf4cd637c\nSigned-off-by: Spencer Low \u003cCompareAndSwap@gmail.com\u003e\n"
    },
    {
      "commit": "9a50f4ccb8668f15c8d4eaf924fcfd769b1003ff",
      "tree": "797356a734389ac53d6f03132d7fa8af7af42dab",
      "parents": [
        "5bf0f162de66a2f5a189c75fc63aac23d7b2c387"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon May 18 16:43:57 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon May 18 17:10:33 2015 -0700"
      },
      "message": "Make connection states a proper type.\n\nChange-Id: I809f9b327c832b88dd63151bf7dcb012d88e81c4\n"
    },
    {
      "commit": "9c028f9f3e52fb8523a0660ced02b98d103f8b91",
      "tree": "b9bdf8117f7a2848cd0e15035e243b23d39d9a2a",
      "parents": [
        "fb05b379d7b92d789c9740b6f68a4c5c78632942"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri May 15 12:56:23 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Fri May 15 17:33:05 2015 -0700"
      },
      "message": "Make pty raw in adb shell when non-interactive.\n\nThe main goal here is fixing the line ending translation from \\n to\n\\r\\n, but we probably don\u0027t want any translation to happen.\n\nBug: http://b/19735063\nChange-Id: I1d6d6c6b57cc741b046c2432cd864b344ce1f28a\n"
    },
    {
      "commit": "e6959b787835218ab3a11f852f1d070a8890ed76",
      "tree": "90d1be2f53b6d5a2e38305ba9dbd0c23abfd30af",
      "parents": [
        "9a0602f1367d0f460f0e80329fafc78aad13d804"
      ],
      "author": {
        "name": "Alan Jeon",
        "email": "skyisle@gmail.com",
        "time": "Thu Oct 16 17:05:25 2014 +0900"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon May 11 16:28:04 2015 -0700"
      },
      "message": "adb: Do not share memory between multiple thread\n\nWhen multiple client try to connect to other hosts, it failed because\nmemory corruption. Allocate memory for each thread like other command did.\n\nChange-Id: I79959ce3dbfd11c7553736cd3f5a899815873584\nSigned-off-by: Alan Jeon \u003cskyisle@gmail.com\u003e\n"
    },
    {
      "commit": "f251714ebdf7669c67e79378859a88d4bb049f9d",
      "tree": "eca2dbcec26ca3d35cd24c0bb2ae54d1b9c70675",
      "parents": [
        "3aec2ba9f5297a94b52f479cbf741121e2910152"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:41:21 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:41:21 2015 -0700"
      },
      "message": "Simplify adb_thread_create.\n\nChange-Id: I36d6021ef8fbc23e8bcd4ddbe1dac0eba467cc70\n"
    },
    {
      "commit": "3aec2ba9f5297a94b52f479cbf741121e2910152",
      "tree": "02dc43658386df1391e0d6cf54d42bc53d41a234",
      "parents": [
        "32ce0f86ecc3f4a187de76e7facd4b0d171fe46b"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:10:43 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 05 13:10:43 2015 -0700"
      },
      "message": "Give enum types CamelCase names for clarity.\n\nChange-Id: I1c89f1cc155ee839f372fb14d972a288183b8bcd\n"
    },
    {
      "commit": "fb59684b188e9dd2649592f5e357fd4996522138",
      "tree": "7849490fabea8d735e4096b9064e680b839012b3",
      "parents": [
        "88b4c85a6f7fbc094f55c9e5322e1e16857006a2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 17:04:38 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 17:36:46 2015 -0700"
      },
      "message": "Add WriteFdFmt and clean up more code.\n\nAlso say *which* device wasn\u0027t found.\n\nBug: http://b/20666660\nChange-Id: I50e234ad89e39ae0a8995083c0b642c61275c5a3\n"
    },
    {
      "commit": "88b4c85a6f7fbc094f55c9e5322e1e16857006a2",
      "tree": "5eae0ad266a6ac7680a12dd088142c1fb953fc7c",
      "parents": [
        "da94581ec4a749f738bebaaa5d0ebcca4017143e"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 30 17:32:03 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri May 01 15:55:37 2015 -0700"
      },
      "message": "More adb buffer fixes.\n\nThis patch factors out a lot of the basic protocol code: sending OKAY,\nsending FAIL, and sending a length-prefixed string.\n\nADB_TRACE has been non-optional for a long time, so let\u0027s just remove\nthe #ifs.\n\nAlso actually build the device tracker test tool (and remove its duplicate).\n\nBug: http://b/20666660\nChange-Id: I6c7d59f18707bdc62ca69dea45547617f9f31fc6\n"
    },
    {
      "commit": "d0269c99cc87a11189af7fb1c4d859dd95a154ac",
      "tree": "053900e4b7ac066f4f42e9756e0566419b0fff4d",
      "parents": [
        "f56c8f974162c27283f095fe7a66002c447ff75f"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 21 19:39:52 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Apr 21 19:43:22 2015 -0700"
      },
      "message": "Add missing null checks after allocations.\n\nBug: http://b/20317729\nChange-Id: I62bb761d48ee59a1f4ddd0cdd0632432305ca2ca\n"
    },
    {
      "commit": "e4b64795e470235ddea428ba4f6f12c09cc33943",
      "tree": "4f9370107d69a4216d88b01f529a9916758b5cd2",
      "parents": [
        "7cf3575179f5374d0a5ba5a0c4cd7b61ad586cf8"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 20:11:08 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 20:30:09 2015 -0700"
      },
      "message": "Use escape_arg in \"adb backup\".\n\nThis doesn\u0027t fix the injection vulnerability, but it makes \"adb backup\"\nno worse than the other commands, and lets me fix them all at once.\n\nBug: 20323053\nChange-Id: I39843c065d9d738b6b7943b2ffd660e4a031cc36\n"
    },
    {
      "commit": "7cf3575179f5374d0a5ba5a0c4cd7b61ad586cf8",
      "tree": "25f6d93b2a819d8b91d749b072ee5897440b50ae",
      "parents": [
        "bbb6b9843d5b28c9f515ac7d9cef690d772dcfaa"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 17:03:59 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 17:58:35 2015 -0700"
      },
      "message": "Remove yet more fixed-length buffers (and their overruns).\n\nBug: 20317724\nChange-Id: If137fc96f5f23576ccecd388ac87afefa47337c6\n"
    },
    {
      "commit": "ea62dfefe624687a2f1c847fb8347e3b4f4c19c9",
      "tree": "81b026e781f4cca03efaa16d4ad084c678ab8e7a",
      "parents": [
        "927cd19f21dc729381f37192b010f2a2c87926cd",
        "fe7ff81e12a8f8ca724b36cfa3fd33e8736057df"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 17:31:51 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 17 17:31:51 2015 +0000"
      },
      "message": "Merge \"Remove extern \"C\" barriers to using C++.\""
    },
    {
      "commit": "fe7ff81e12a8f8ca724b36cfa3fd33e8736057df",
      "tree": "472547b45e133c31da42343c1f534d8db847426e",
      "parents": [
        "c084e0c4116d0b001184a69c70d0ef564dc93579"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 09:47:42 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Apr 17 09:47:42 2015 -0700"
      },
      "message": "Remove extern \"C\" barriers to using C++.\n\nChange-Id: Ic046d6aa540738cb46b54531bc59ba3b47b0136d\n"
    },
    {
      "commit": "ab88242ece4a44d79acb5dfc8dd52bb418f5c427",
      "tree": "4de96573c4e36b7fb03aa823f762a991d41c8f47",
      "parents": [
        "c084e0c4116d0b001184a69c70d0ef564dc93579"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 16 22:54:44 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Apr 16 22:54:44 2015 -0700"
      },
      "message": "Show $ADB_VENDOR_KEYS if authentication fails.\n\nIncorrectly set $ADB_VENDOR_KEYS is the most likely cause of failed\nadb connections. Make it easier to debug such problems by including\nthe value in use in the error message.\n\nBug: 20165551\nChange-Id: I64c1d98ae6d3fb40eea9e1f0ddcfcf4f2d9d7318\n"
    },
    {
      "commit": "0db676466ba9bbafdd3a02cf790209d157a773f9",
      "tree": "ea6daa371cc34064bdebe47d9f36c2aeb0ec283a",
      "parents": [
        "d501672d9143350d1de5f2419da7d44e12231ef1"
      ],
      "author": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Sun Mar 29 11:22:34 2015 -0700"
      },
      "committer": {
        "name": "Tao Bao",
        "email": "tbao@google.com",
        "time": "Tue Mar 31 00:19:52 2015 +0000"
      },
      "message": "adb: Add option to reboot into sideload mode in recovery\n\nCurrently it requires manual key press to enter the sideload mode. This\nCL adds \u0027adb reboot sideload\u0027 to reboot the device into sideload mode\ndirectly with text display on. With \u0027adb reboot sideload-auto-reboot\u0027,\nit will reboot after the sideload regardless of the installation result,\nunless interrupted by user.\n\nSince it needs to write to /cache/recovery/command file, \u0027adb root\u0027 is\nrequired before calling \u0027adb reboot sideload\u0027 and the one with\n\u0027-auto-reboot\u0027.\n\nAlso it requires the matching CL in bootable/recovery.\n\nChange-Id: Ib7bd4e216a1efc01e64460659c97c6005bbaec1b\n"
    },
    {
      "commit": "db6fe6428c1ca5f397d3853f2b96c3e3e878b172",
      "tree": "7c788a60093d22977baee6c6625107abf40b66e3",
      "parents": [
        "0e0ce0662e948b9cfb1b42e48f18d3c4643b6c1e"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 15:21:08 2015 -0700"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Thu Mar 19 15:32:33 2015 -0700"
      },
      "message": "File header cleanup.\n\n * sysdeps.h should always be included first.\n * TRACE_TAG needs to be defined before anything is included.\n * Some files were missing copyright headers.\n * Save precious bytes on my SSD by removing useless whitespace.\n\nChange-Id: I88980e6e00b5be1093806cf286740d9e4a033b94\n"
    },
    {
      "commit": "dedf7675675aa77051952f354fbbdb59e3cb513c",
      "tree": "196b522c390f18abcc2b489dc37c4fdca46a1b09",
      "parents": [
        "9afbc0a6a2b4ada31bad655b130d2cc38fed1465"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 16 21:58:32 2015 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Mar 16 20:05:21 2015 -0700"
      },
      "message": "Revert \"Revert \"adb: support /oem partition\"\"\n\nThis reverts commit 0c481d0c743382ea955a80bf32428bbd87fff45e.\n\nThe original build breakage is fixed by (a) building the verity\ncode for eng builds as well as userdebug builds and (b) moving\nthe exported remount service functions into a new header file.\n\nChange-Id: Ice0c4f97d4db38ab7eb333c7a6e56bbd11123f5b\n"
    },
    {
      "commit": "f30d73c74d85ccc2b1f55d6946f616e62d67e48e",
      "tree": "b2302299d3d083ba83949a80213b92d66540201f",
      "parents": [
        "b5f43a12723896c2d8fc98eed5abce563a16f56b"
      ],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Wed Feb 25 17:51:28 2015 -0800"
      },
      "committer": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 09 14:06:11 2015 -0700"
      },
      "message": "Move adb to C++.\n\nI keep trying to clean things up and needing std::strings. Might as\nwell just do this now.\n\nusb_linux_client.c is going to stay as C because GCC isn\u0027t smart\nenough to deal with the designated initializers it uses (though for\nsome reason it is in C mode).\n\nThe Darwin files are staying as C because I don\u0027t have a way to test\nthat they build.\n\nThe Windows files are staying as C because while I can actually build\nfor them, it\u0027s slow and painful.\n\nChange-Id: I75367d29205a9049d34460032b3bb36384f43941\n"
    },
    {
      "commit": "b5f43a12723896c2d8fc98eed5abce563a16f56b",
      "tree": "f81933396150903b8b0d0fa38e9faa081376253a",
      "parents": [],
      "author": {
        "name": "Dan Albert",
        "email": "danalbert@google.com",
        "time": "Mon Mar 09 20:29:02 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 09 20:29:07 2015 +0000"
      },
      "message": "Merge \"Fix a writex transcription error.\""
    }
  ]
}
